Murmelbahn

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

von Ludwig Kürzinger und Matthias Hiller

Dieser Artikel beschreibt eine LEGO-Murmelbahn, die über das Internet ferngesteuert werden kann. Dazu werden Steuerbefehle über ein Webinterface eingelesen. Um sicherzustellen, dass nur berechtigte Personen Zugriff auf die Steuerfunktionen haben, werden kryptographische Methoden angewendet. Das Projekt ist ein Zusammenspiel zwischen LEGO, Mikrocontroller, Elektronik und Software, um diese Funktionalität bereitzustellen. Die Murmelbahn wird im Rahmen der Vorlesung Embedded Systems and Security an der Technischen Universität München eingesetzt.



Einführung

Eingebettete Systeme sind ein wichtiger Bestandteil unseres Alltags geworden. Ob es nun der intelligente Stromzähler ist, die Waschmaschine, oder der Reifendrucksensor, oft verrichten sie ihre Arbeit unbemerkt im Hintergrund. Zunehmend werden solche Systeme an das Internet oder andere Netzwerke angeschlossen und mit immer umfangreicheren Rechen- und Speicherkapazitäten versehen. Um den korrekten Betrieb des Systems, die Privatsphäre des Benutzers und das intellektuelle Eigentum des Herstellers zu schützen, müssen diese Geräte vor Angriffen geschützt werden. Damit steigt der Bedarf nach vertrauenswürdigen Systemen, die Sicherheit (engl. security) vor externen Angriffen bieten.

Es reicht nicht, Sicherheit als ein Feature einzubauen, sondern die Sicherheit eines Systems muss von den ersten Planungsentscheidungen an berücksichtigt werden. So macht es keinen Unterschied, ob die Kommunikation mit einem AES-Schlüssel der Länge 256 Bit oder 128 Bit verschlüsselt ist, wenn das Passwort durch einen Trick leicht herauszufinden ist. Der Entwurf sicherer Systeme wird somit immer mehr zum Grundlagenwissen eines Ingenieurs. In der Vorlesung Embedded Systems and Security vom Lehrstuhl für Sicherheit in der Informationstechnik an der TU München werden Studenten an dieses Thema herangeführt.

Im Praxisteil der Vorlesung implementieren die Studenten eine sichere Fernsteuerung, um eine Murmelbahn auszulösen, nachdem sie sich gegenüber dem System authentifiziert haben. In diesem Projekt wird die Murmelbahn vorgestellt, die von den Studenten ferngesteuert wird.

Die Murmelbahn enthält die folgenden Komponenten:

  • LEGO Murmelbahn: Basierend auf einem LEGO Gerüst, transportieren Elektromotoren die Kugel an die obere Startposition. Von dort läuft sie die Bahn wieder herunter.
  • Steuerungsplatine: Die Platine stellt die Spannungsversorgung für die Murmelbahn und die Verbindung zum Infineon Board mit dem Mikrocontroller bereit.
  • Webserver: Die zugehörige DAVE App stellt das Ethernet Protokoll und einen Webserver für die Usereingaben zur Verfügung.
  • Kryptographische Funktionen: Verschiedene Kryptofunktionen ermöglichen eine verschlüsselte Kommunikation und die Userauthentisierung.
  • User Clients sind Teil der Aufgaben in der Vorlesung und werden hier deshalb nicht im Detail besprochen ;-). Nur so viel: Sie werden über eine Passworteingabe über die UART Schnittstelle freigeschaltet und enthalten auch den SPECK GCM, um die verschlüsselten Steuerbefehle zu erzeugen. Außerdem wird die Memory Protection Unit verwendet um Buffer-Overflows zu verhindern.

LEGO - Murmelbahn

Das Grundgerüst der Murmelbahn aus LEGO Technik Teilen. Sie bilden die Bahn auf der die Kugel läuft und auch die drei Motoren stammen von LEGO. Der Aufzug wird mit einer Kette realisiert, an der ein Behälter für eine Kugel befestigt ist. Zwei Gabellichtschranken (TCYS5201) bestimmen die Position des Aufzugs.

LegoMurmelbahn.jpeg

Die Murmelbahn besteht aus den folgenden LEGO-Bauteilen:

  • größere Menge Standardbausteine, die auch einzeln erworben werden können
  • 2x Power Functions Servo Motor
  • 1x Power Functions L-Motor

Ein Drehkreuz versorgt den Aufzug mit Murmeln. Dadurch dass immer nur eine Murmel vom Drehkreuz erfasst wird, kann sichergestellt werden, dass auch nur eine Murmel in den Aufzug rollt. Das Drehkreuz wird von einem Servo Motor in die Stellungen +/-90 Grad gedreht. Die angelegte Spannung bestimmt den Winkel in dem sich der Motor ausrichtet, die Polung die Ausschlagsrichtung. Im Folgenden werden die Servo-Motoren mit 9 V, also Vollausschlag, betrieben und verändern nur Richtung.

Die Murmelbahnstrecke kann durch eine steuerbare Falltür verkürzt werden. Diese wird von einem weiteren Servo Motor ausgelöst.

Der L-Motor steuert den Aufzug, der die Murmeln nach oben transportiert, wo sie ausgeworfen werden. Die Schrittweite des Motors kann nicht präzise genug bestimmt werden und außerdem ist die Anfangsposition des Aufzugs nicht bekannt.

Deshalb werden Gabellichtschranken zur Positionsbestimmung verwendet. Es gibt zwei wichtige Positionen, über die der Aufzug nicht hinausfahren darf. Unten wird die Kugel in den Aufzug geladen und oben wieder ausgeworfen. Die Lichtschranke zeigt an, wenn ein Fähnchen an der Kette die Position der Lichtschranke, und damit der Aufzug sein Ziel, erreicht hat.

Eine Lichtschranke sitzt unten auf dem L-Motor, der den Aufzug antreibt.

SensorOben.jpeg

Die zweite ist unterhalb der oberen Rolle angebracht und zeigt an, wenn der Wagen die untere Position erreicht hat.

SensorUnten.jpeg

Eine zuverlässige Positionsbestimmung ist wichtig, weil der Wagen die Anlage beschädigen kann, wenn er über die erlaubten Positionen hinausläuft. Deshalb sind neben den Lichtschranken auch Sicherheitsmaßnahmen, z.B. Timer, in der Steuerungssoftware implementiert.

Die Murmelbahn ist über ein 10-adriges Flachbandkabel mit der Steuerungsplatine und dem Mikrocontroller verbunden.

VerbinderVorne.jpeg

Das nächste Bild zeigt die Verbindung zur Steuerungsplatine, die im nächsten Kapitel beschrieben wird.

Verbunden.jpeg

Hardware

Der Hardwareaufbau besteht aus dem Infineon Relax Kit, das über eine Stiftleiste an eine Steuerungsplatine angebracht ist, die die Spannungsversorgung der LEGO-Motoren in der Murmelbahn regelt.

Hier ein Überblick über die Teileliste:

  • 1x Infineon Relax Kit
  • 1x Lochrasterplatine 160x100mm
  • 1x 74HC 4050 (6xPuffer/Treiber)
  • 3x DIP 9051-D 5V Reedrelais Schließer
  • 2x DIP 9051-L 5V Reedrelais Wechsler, 0,25A, Ri=200 Ohm. (Von diesem hätte die Variante 9051-D mit integrierter Diode bestellt werden sollen. Man kann aber auch einfach eine Diode auf der Platine dazu löten, wie auf dem Foto der Steuerungsplatine ersichtlich ist.)
  • 5x BC337 NPN Transistor
  • 5x gewöhnliche LEDs
  • 5x 220 Ohm Widerstand (zu den Transistoren)
  • 5x 470 Ohm Widerstand (zu den LEDs)
  • 2x 1 kOhm Widerstand (zu den Gabellichtschranken)
  • sowie Stift- und Buchsenleisten, IC-Sockel, Flachbandkabel, etc.

Infineon Relax Kit

Das Infineon XMC4500 Relax Kit basiert auf einem ARM Cortex M4 Prozessor. Für die Motorensteuerung könnte prinzipiell auch die einfachere Lite Variante benutzt werden. Für den Webserver später wird jedoch die Ethernet Schnittstelle des größeren Boards benötigt.

Es besitzt zwei Anschlussleisten, mit denen Kontakte zu den GPIOS, aber auch z.B. externe Spannungsversorgung, realisiert werden. In diesem Projekt wurde vor allem die Anschlussleiste X2 benutzt, die überwiegend Verbindungen an digitale Pins bietet. Die folgende Grafik mit der Stiftleistenbelegung zeigt die Korrespondenz zwischen den Pins und den entsprechenden DAVE-Apps in der Software.


PinbelegungX2.jpeg


Manche der Pins sind im XMC4500 intern mit ERU-Modulen verknüpft. Die ERU-Funktion hat sich bei der Kombination verschiedener Signale als nützlich erwiesen. Nach der Kombination zweier Signale (z.B. Aufzug fährt nach oben UND Ankunftssignal der Lichtschranke oben) können Interrupts oder andere Hardware-Module im XMC4500 angesteuert werden.

Steuerungsplatine

Auf der Steuerungsplatine befinden sich die drei unterschiedlichen Spannungsversorgungen:

  • Die 3,3 V Spannungsversorgung, mit der der XMC4500 betrieben wird. Alle Logiksignale von und zu diesem Mikrocontroller haben dieses Spannungsniveau.
  • USB-Betriebsspannung 5 V. Die Lichtschranken, die sich auf der Murmelbahn befinden, haben diese Betriebsspannung.
  • Netzteilspannung 9 V, mit der die LEGO-Motoren angetrieben werden.

Im Folgenden werden die einzelnen Features der Steuerungsplatine beschrieben:

Schnittstelle der beiden 5 V-Lichtschranken zum Mikrocontroller

Die Gabellichtschranken, die die Position des Aufzugs messen, benötigen eine Spannungsversorgung von 5 V und liefern dafür ein logisches 5 V-Signal zurück. Da der XMC4500 ein 3,3 V-Signal benötigt, war die Umwandlung des logischen 5 V-Signals nötig. Das wurde mit dem Bauteil 74HC4050 erreicht, das einen stabilen Betrieb mit Spannungen am Logikeingang von bis zu 15 V gewährleisten kann, und mit einer Spannung von 3 V als seiner Betriebsspannung liefert er 3 V-Signale, die für den XMC4500 geeignet sind.

Spannungsversorgung der LEGO-Motoren

Die Motoren werden mit 9 V-Betriebsspannung betrieben. Laut Spezifikation ist hier jeweils ein Anschluss dauerhaft auf 9 V geschaltet, einer dauerhaft auf GND und die Polung der letzten beiden Anschüsse (C1 und C2) bestimmt jeweils die Richtung, in die sich der Motor dreht. Davon gibt es zwei Verhaltensweisen: Der Motor am Drehkreuz dreht sich bei Anlegen der Spannung um 90 Grad in die eine Richtung, bei Ablegen der Spannung dreht er sich in Ausgangsposition zurück. Die Drehrichtung des Aufzugsmotors hingegen wird bestimmt, je nachdem an welchen der Anschlüsse C1 oder C2 9 V anliegen, wobei der andere Anschluss mit GND verbunden sein muss.

Ein 9 V-Netzgerät sorgt für die notwendige Spannungsversorgung, die über ein Relais geschaltet wirden. Eine grüne LED signalisiert, wenn dieses Relais aktiviert ist und somit sich die LEGO-Motoren in Bereitschaft befinden. Weiterhin gibt es auf der Steuerungsplatine zwei Relais für das Murmelbahn-Drehkreuz und für den Motor, der die Abkürzung steuert. Und es gibt zwei Wechsler, über die man den Aufzug hinauf- und herabfahren lassen kann.

Die LEDs sind über einen Widerstand mit 470 Ohm mit den 9 V-Leitungen verbunden. Die vier roten LEDs auf der Steuerungsplatine zeigen an, welcher der Motoren gerade aktiviert ist: Die äußerste zeigt an, ob die Abkürzung gerade aktiviert ist; die nächste, ob das Drehkreuz gerade aktiviert ist, ob der Aufzug nach oben fährt, oder bei der letzten LED, ob der Aufzug gerade nach unten fährt.

Ansteuerung der Relais

Die Relais benötigen zur Aktivierung ein 5 V-Signal. Jedoch gibt der XMC4500 nur ein 3,3 V-Signal aus. Die verwendete Lösung ist eine Kombination aus einem 220 Ohm - Widerstand und dem Transistor BC337. Als 5 V Spannungsquelle wurde die USB-Spannung vom Relax Kit verwendet. Die Spannungsversorgung vom Relax Kit und von dem 9 V Netzteil sind somit getrennt.

Schaltplan und Platine

Der Schaltplan zeigt noch einmal die unterschiedlichen Spannungsniveaus der Schaltung.

MurmelbahnSchaltplan.png

Die Umsetzung der Schaltung ist auf den folgenden beiden Fotos zu sehen:

BoardsOben.jpeg

BoardsUnten.jpeg

Software

Die Software Implementierung besteht im Wesentlichen aus drei Teilen, die miteinander interagieren.

  • Zustandsautomat und Motorensteuerung
  • Krypto
  • Webserver
  • Sonstiges

Die DAVE Umgebung von Infineon stellt bereits eine große Anzahl an Codebausteinen, sogenannten Apps, zur Verfügung. Die folgende Grafik zeigt die Apps, die in diesem Projekt verwendet wurden.

DaveApps.png

Die wichtigsten Quellcodedateien werden in Datei:MurmelbahnSoftwareDoku.pdf im Detail beschrieben. Der Quellcode und Projektdateien zur Murmelbahn können unter Datei:Murmelbahn.rar heruntergeladen werden.

Interner Zustandsautomat

Für einen reibungslosen Ablauf und das Abfangen von möglichen Fehlern ist es wichtig, immer zu wissen in welchem Zustand sich das physikalische System befindet.

Das Verhalten der Murmelbahn wird mithilfe eines endlichen Zustandsautomaten gesteuert (engl. finite state machine, FSM). Die detaillierte Darstellung der Steuerung wird in der folgenden Grafik zeigt, dass die Folge von Zuständen sehr präzise definiert ist. Manche Übergänge hängen von Eingangssignalen ab, andere von Timern

MurmelbahnFSM.jpeg

Implementierte kryptographische Verfahren

Die Anlage unterstützt zwei mögliche Betriebsmodi:

Im Fernsteuerungsszenario geht es darum einen verschlüsselten Steuerbefehl zu senden. Im zweiten Szenario geht es darum, ein Verschlüsselungsverfahren zu brechen und dadurch die Anlage auszulösen.

Authenticated Encryption mit SPECK GCM

Jeder Benutzer erhält eine UserId und einen geheimen Schlüssel, der in der Anlage unter students.c abgelegt ist. Der Startbefehl besteht aus der UserID in unverschlüsselter Form, dem verschlüsselten Befehl “marblerun_start” und einem so genannten Tag.

Zur Verschlüsselung wird die Blockchiffre SPECK verwendet, die 2013 von der NSA veröffentlicht wurde (Link).

Das Tag soll zeigen, dass der Benutzer den geheimen Schlüssel kennt und dass der unverschlüsselte und der verschlüsselte Teil der Nachricht nicht manipuliert wurden. Der Galois Counter Mode (Link) ist ein mögliches Verfahren.

(Wir können den Quelltext zu den beiden Verfahren leider nicht veröffentlichen, da die Studenten sie implementieren sollen und dafür Punkte bekommen. Die beiden Links zeigen, wie die Verfahren implementiert werden und die angehängte RAR Datei enthält den compilierten Object Code, der auch die vollständige Implementierung enthält. Wer Spaß daran hatte, den C Code aus dem Object Code wiederherzustellen kann sich gerne mal bei uns melden.)

miniRSA

Asymmetrische Kryptographie wird verwendet, um sichere Verbindungen zwischen Parteien aufzubauen, die kein gemeinsames Geheimnis kennen. Bei RSA (Link) wird die Tatsache ausgenutzt, dass es sehr viel schwieriger ist eine (modulare) Exponentiation durchzuführen als die Eingangswerte aus dem Ergebnis zu bestimmen. Im Gegensatz zu "normaler" symmetrischer Kryptographie hat jeder der beiden Nutzer in der asymmetrischen Krypto einen eigenen privaten und einen öffentlichen Schlüssel.

Es ist möglich, die Murmelbahn mit einer gültigen RSA-Signatur zu aktivieren, welche aber nur der Besitzer des privaten Schlüssels erzeugen kann. Der entsprechende öffentliche Schlüssel lässt sich auf der Murmelbahn-Webseite finden. Ziel ist es, den privaten Schlüssel in der Murmelbahn zu rekonstruieren und dann die Bahn auszulösen.

Der öffentliche Schlüssel enthält e und n, das Produkt von den beiden Primzahlen:

p q = n

Der geheime Schlüssel d wird dann so gewählt, dass:

e d = 1 mod [(p-1)(q-1)]

Die Signatur wird mit der Challenge c so berechnet:

s = c^d mod n

Das kryptographische RSA-System ist sicher unter der Annahme, dass es praktisch unmöglich ist, eine große Zahl n in ihre Primfaktoren zu zerlegen. Die Länge eines sicheren Schlüssels liegt heute bei etwa 2048 Bit. Die hier implementierte Version hat 16 Bit Schlüssellänge :)

Webserver

Die DAVE Webserver App wurde so angepasst, dass sie unser Lehrstuhllogo zeigt und neue Felder definiert wurden.

SSI Scripting

Der Webserver gibt die Statusmeldungen in der HTML Seite über SSI-Scripting aus. Dafür wird die Funktion http_set_ssi_handler() in WebServer_Init() aufgerufen und die SSI Handler Funktion konfiguriert. Wenn der Webserver ein in einer HTML Datei (als .ssi) gespeichert hat, wird mySSIHandler() aufgerufen und das entsprechende nameTag durch die Statusmeldungen oder Fehlermeldungen ersetzt.

nameTag Funktion
nonceTag Ausgabe der Nonce in getNonce.ssi
statusTag Ausgabe des aktuellen Status der MB in status.ssi
errorTag Ausgabe der Fehlermeldung in error.ssi
RSATag Ausgabe der mini-RSA Parameter (e, n und challenge)
whoami Ausgabe der aktuellen IP-Adresse + [S] falls die MB simuliert wird

Command execution

Die Funktion MBStringToCMD() wandelt den erhaltenen entschlüsselten Befehl um in eine von der Funktion MB_CMD() erlaubten Befehlsnummer. Diese enthält auch die möglichen Webserver Befehle:

Murmelbahn_DEMO_Start "demo"
Murmelbahn_AN "on"
Korrektur "correct"
Drehkreuz "ball"
Ganz_nach_oben "top"
Ganz_nach_unten "bottom"
Abkuerzung "shortcut"
Murmelbahn_AUS "off"

Sonstiges

Debug

Detaillierte Debug Informationen waren notwendig, um zu testen, ob sich die Software wie erwartet verhält. Leider konnte nicht auf die DBG002-App von DAVE zurückgegriffen werden, weil die verwendete Version des Relax-Boards diese nicht unterstützt. (Es gibt Gerüchte im Internet, dass die DBG002-App in der Version 2 des Relax Kits unterstützt wird.)

Deswegen musste auf die USB-Schnittstelle ausgewichen werden, um eine detaillierte Debug-Ausgabe zu ermöglichen. Im Rahmen des Projekts wurden hierzu Funktionen geschrieben, die es ermöglichen, zuletzt aufgerufene Funktionen aufzulisten und dies mit Statusinformationen über die USB-Schnittstelle auszugeben.

Dazu ist es notwendig, das USB-Kabel mit der Seite des Relax-Kits zu verbinden, an der auch die Ethernetbuchse zu finden ist und in Windows die .INF Treiberdatei als USB-Gerätetreiber zu installieren. Diese Treiberdatei liegt in dem Verzeichnis, in dem DAVE die für die USB-App generierten Dateien ablegt.

Details sind in der Software Dokumentation in Datei:MurmelbahnSoftwareDoku.pdf zu finden.

Watchdog Timer

Wenn ein System ohne direkte Überwachung läuft kann es trotz sorgfältiger Tests passieren, dass es sich aufhängt. Ein Watchdog Timer startet das System neu, wenn er längere Zeit nicht zurückgesetzt wurde.

Simulator

Falls keine weitere Hardware and das XMC4500 Board angeschlossen ist, unterstützt die Software einen Simulator Modus, in dem sich das Board nach Außen wie ein Board mit angeschlossener Murmelbahn verhält. Auf verschiedenen Ebenen werden hier nicht ausführbare bzw. ungültige Befehle ausgefiltert und Wartezeiten hinzugefügt.

Fazit & Kommentare

Die Entwicklung der Murmelbahn war ein spannendes Projekt bei viele unterschiedliche Komponenten ineinander greifen. Dank der DAVE Apps war bereits einige Standardkomponenten vorhanden auf denen wir aufbauen konnten.

Hier kann man die Murmelbahn in Aktion sehen

Die aktuelle Version ist noch nicht explizit gegen Angriffe gehärtet. Falls ihr Sicherheitslücken findet oder sonstige Kommentare habt, könnt ihr euch gerne an matthias.hiller@tum.de wenden.

Neben den oben genannten Autoren des Artikels waren Mohamed Fares Abid, Sebastian Gebhard und Thomas Olm an diesem Projekt beteiligt.

Dieser Artikel vom Lehrstuhl für Sicherheit in der Informationstechnik, Technische Universität München, ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.

Bilder & Grafiken

Downloads