Wahlcomputer-Hack

Aus C3MAWiki
Version vom 21. September 2007, 20:37 Uhr von TheMaverick (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Einleitung

90% der Stimmen in den Niederlanden werden auf Nedap/Groenendaal ES3B-Wahlcomputern abgegeben. Mit sehr geringen Änderungen kommt der selbe Computer auch in Teilen Deutschlands und Frankreichs zum Einsatz. Die Benutzung des Geräts in Irland ist momentan ausgesetzt, nachdem schwer wiegende Zweifel an seiner Eignung für Wahlen aufgekommen waren.

Die niederländische Initiative "Wij vertrouwen stemcomputers niet" (Wir vertrauen Wahlcomputern nicht, im Folgenden WVSN) beschreibt in einem 22-seitigen Whitepaper, wie sie neue Software in Nedap ES3B-Wahlcomputern installiert haben. Es beschreibt, wie jeder, der kurzzeitigen Zugriff auf die Geräte zu einem beliebigen Zeitpunkt vor der Wahl hatte, vollständig und nahezu unentdeckbar die Kontrolle über die Wahlergebnisse erhalten kann. Es zeigt auch, wie Funkabstrahlungen eines unmodifizierten ES3B über mehrere Meter Entfernung hinweg empfangen werden können und Rückschlüsse darauf geben, wer was gewählt hat.

Zitate aus diesem Bericht werden im folgenden Artikel kursiv und eingerückt erscheinen.

Ablauf der Analyse

WVSN bekam am 23. August 2006 von einer Gemeinde in den Niederlanden einen ES3B, eine Leseeinheit, die (mechanischen) Schlüssel, zwei Speichermodule und die "ISS" genannte Software geliehen. Da sie all das ca. einen Monat später wieder zurückgeben sollten, blieben sie auf der Suche nach weiteren Wahlcomputer und fanden schließlich eine andere Gemeinde, die ihnen am 6. September zwei ES3B, eine Leseeinheit und zwei Speichermodule nicht etwa leihen, sondern verkaufen wollte, woraufhin die Jungs natürlich sofort zuschlugen.

Soweit wir wissen, sind das genau die Geräte und Softwareversionen, auf denen 90% der Niederlande abgestimmt haben, und zumindest einige der Computer, die wir jetzt legal besitzen, wurden bei Wahlen bis hin zu den Gemeinderatswahlen im Jahr 2006 in den Niederlanden eingesetzt. Gesetzt, dass es keinen Einspruch dagegen nach der Veröffentlichung dieses Berichtes gibt, gehen wir absolut davon aus, dass das Gerät, das wir Gemeinde A zurückgegeben haben, in den kommenden Wahlen wieder benutzt wird.

Da in Holland am 22. November Parlamentswahlen stattfinden, befanden sich die Hacker unter einem gewissen Zeitdruck. Sie kündigen weitere Tests und aus Zeitgründen zurückgestellte Angriffe auch nach der Veröffentlichung ihres Berichtes an.

Die Schlüssel

Datei:ES3B-Schlüssel.jpg
Nachbestellte "Hochsicherheits"-Schlüssel

Das holländische Wahlrecht schreibt vor, dass ein elektronisches Wahlsystem physische Schlüssel als Sicherheitsmechanismus einsetzen muss. Diese Maßnahme scheint im Gesetz fundamental wichtig zu sein, da sie an einigen Stellen immer wieder erwähnt wird. Ohne Schlüssel im Gerät darf keine Stimmabgabe möglich sein, der Wahlvorstand im Wahllokal ist angewiesen, den Schlüssel nach Ende der Wahlzeit in einem versiegelten Umschlag sicher zu lagern.

Nedap benutzt hier das "C&K YL Series 4 Tumbler Camlock". Dieses Schloss wird immer mit dem selben Schlüssel, bezeichnet mit "A126", ausgeliefert. Das bedeutet, dass alle 8000 ES3B-Computer in den Niederlanden das selbe Schloss und den selben Schlüssel benutzen. Die Schlüssel lassen sich im Internet unter der Produktnummer 115140126 für je ca. einen Euro nachbestellen, was WVSN dafür nutzte, 100 Stück zu kaufen und bei der Präsentation des Hacks an die Journalisten zu verteilen.

Laut dem Datenblatt sind die typischen Anwendungsbereiche für dieses Schloss "Kopiergeräte und Büromöbel". Selbst wenn Ersatzschlüssel nicht so leicht zu bekommen wären: Hier handelt es sich im wahrsten Sinne des Wortes um die Art Schloss, die man mit einer verbogenen Büroklammer öffnen kann.

Systemaufbau

Die beiden Software-EPROMs
  • Ein ES3B besteht im Grunde aus einem 68k-Prozessor, 256kB EPROM, 8kB EEPROM, 16kB RAM, zwei 6850er seriellen Ports, einem Druckerport und zwei LCD-Displays (4x40 Zeichen für den Wähler, 2x40 für den Wahlvorstand).
  • Jedes Gerät braucht mindestens ein Speichermodul, in das die Stimmen geschrieben werden.
  • Dieses Speichermodul lässt sich mit der Leseeinheit auslesen, die an einen PC angeschlossen wird (serieller Port), der die mitgelieferte Software installiert hat.

Die Betriebssoftware findet sich auf zwei (gesockelten, nicht gelöteten, und damit leicht austauschbaren) EPROM-Modulen mit je 128kB Kapazität. Eines davon enthält alle geraden, das andere die ungeraden Speicheradressen. Die Module besitzen einen kleinen Sticker mit der Typbezeichnung des Wahlcomputers, einer Versionsnummer, dem Vermerk "even" (gerade) oder "odd" (ungerade) sowie einer 32-bit-Prüfsumme (Bit, nicht Byte!) des Inhalts. Bei der Prüfsumme handelt es sich um eine simple Addition aller Bytes im Speicher. Manipulationen könnten also trotzdem die selbe Prüfsumme vorweisen, wenn an anderen, unbenutzten Speicherstellen entsprechend Bytes ausgeglichen werden.

Schachmatt

Alles fing mit einer unserer Meinung nach relativ einleuchtenden Aussage an. Wir behaupteten auf unserer Website, dass der Nedap auch nur ein Computer sei und als solcher genau so einfach umprogrammiert werden konnte, Schach zu spielen, wie falsche Wahlergebnisse auszugeben. Wir dachten darüber nicht weiter nach, bis Jan Groenendaal ein Dokument auf die Nedap/Groenendaal-Website stellte, in der er sich zu unserer Website "Wij vertrouwen stemcomputers niet" äußerte. Darin sagt er: "[...] Den Beweis für die Aussage, dass man mit unserer Wahlmaschine auch Schach spielen kann, würde ich gerne vorgeführt bekommen."
Also bestand offensichtlich eins unserer ersten Ziele, jetzt da wir Zugriff auf das Gerät hatten, daraus, es Schach spielen zu lassen. Zusätzlich zum Beweis unseres Arguments würde die Umprogrammierung auch sicherstellen, dass wir alles über die Hardware wussten, was wir brauchten, um ins Wahlfälschungsgeschäft einzusteigen. Nachdem wir grob verstanden hatten, wie die Hardware funktioniert, benutzten wir einen gcc 68000-Crosscompiler um eine Nedap-IO-Library zu erstellen, die Funktionen zum Initialisieren des Systems, Schreiben von Daten auf das Display, Lesen der Tastatur und Schreiben von Debug-Meldungen auf das UART enthielt. Zusammen mit newlib, einer kompakten clib-Implementierung, konnten wir Tom Kerrigan's Simple Chess Program (TSCP) kompilieren und laufen lassen. Das war nur deshalb nicht trivial, weil wir ein paar Tabellen rausquetschen mussten, damit es mit den nur 16kB verfügbarem RAM lief. Die Schachfiguren magnetisch anzubringen (die Tastatur ist in einem relativ steilen Winkel angebracht) gestaltete sich auch nicht so einfach, da die Folientastatur auf Plastik montiert ist. Schlussendlich benutzten wir mit Klebeband auf die Rückseite des Papiers geklebte 2- und 5-Eurocent-Stücke, so dass wir die Folientasten mit den Münzen drücken konnten.
Er kennt alle Regeln und kann für das was er ist von Zeit zu Zeit überraschend clever sein. Aber in aller Offenheit müssen wir zugeben, dass er Schach nicht sonderlich gut spielt.

[...]

Wenn der ES3B nicht mehr für Wahlen benutzt wird, könnte die plötzliche Verfügbarkeit einer solch großen Anzahl von Geräten zu einem interessanten System führen, mit dem man jungen Leuten die Geschichte und Grundlagen von Computern beibringen kann. Wir könnten sogar ein QWERTY-Overlay auf die Tastatur legen und einen BASIC-Interpreter auf das Gerät portieren.

Wahlfälschung

  • einfachste Möglichkeit: Austausch der EPROMs
  • im Hinterkopf behalten: nach einer "Testwahl" (im Labor mit vorher festgelegter Stimmenverteilung) sollte kein falsches Ergebnis ausgegeben werden; man braucht also irgendeine Möglichkeit, das zu erkennen
  • Ansatz: Stimmen korrekt speichern und erst beim Ende der Wahl entscheiden, ob sie echt war oder nicht
  • Problem: Der Wahlcomputer kann den Flashspeicher nicht löschen (nur die Leseeinheit kann das), außerdem werden die Stimmen sowohl "normal" als auch mit invertierten Bits gespeichert; es gibt also keine realistische Möglichkeit, Stimmen im Flash im Nachhinein zu ändern
  • Lösung: Stimmen an anderem Ort speichern und erst beim Ende der Wahl (evtl. mit Änderungen) in den Flash-Speicher übertragen. Damit das auch bei Stromausfall funktioniert, brauchte es einen nichtflüchtigen Speicher: Das Onboard-EEPROM.
  • Darin stehen normalerweise Einstellungen wie die Geräte-ID und ob die Tastatur piept, außerdem ein Ringbuffer mit Ereignis- und Fehlerlog. Jeder Eintrag im Log hat einen Zeitstempel seit dem letzten Prozessor-Reset.
  • Vorgehensweise: Ringbuffer-Funktionen manipuliert: Anzahl möglicher Einträge verringert, damit Platz für Zusatzinformationen: geklaute Stimmen, ID des Speichermoduls und Datum der Wahl (um beim "wieder aufwachen" entscheiden zu können, ob manipuliert werden muss oder nicht)
  • Jedesmal, wenn ein Wähler die Nummer eins einer Liste anwählt (was recht häufig passieren sollte), wird eine Zufallszahl zwischen 0 und 100 generiert. Wenn die kleiner ist als ein festgelegter Prozentsatz, wird die Stimme nicht in das Speichermodul geschrieben, sondern zu der 16-bit-Zahl im Ringbuffer für die entsprechende Liste addiert. Am Ende der Wahl wird entschieden, ob sie echt war oder nicht, und die Stimmen dann entweder den ursprünglichen Kandidaten oder dem "Betrügerkandidaten" zugeschrieben (in den Flashspeicher).
  • Der Empfänger der geklauten Stimmen ist immer die Nummer eins einer vorher festgelegten Partei. Diese Festlegung geschieht mittels einem case-insensitiv mit der Liste der Parteien verglichenen String, so dass das manipulierte EPROM bereits lange Zeit vor der Wahl, bevor die Positionen auf der Tastatur klar sind, eingesetzt werden kann, und die Wahlfälschung jedes Jahr autonom wiederholt.
Es ist interessant, dass das holländische Innenministerium dies für unmöglich hält. Ein kürzlich veröffentlichtes Statement besagt: "Manipulationen während der Herstellung der Wahlmaschinen macht keinen Sinn, da die Liste der Kandidaten zu diesem Zeitpunkt noch nicht bekannt ist."

Interessante Einzelheiten

  • Das Mainboard verfügt über einen Watchdog-Mechanismus.
  • Auf dem Mainboard gibt es einen kleinen Schalter für den "Servicemodus", mit dem sich die Parameter aus dem EEPROM (z.B. System-ID) mit Hilfe eines bequemen Menüs auf dem Wähler-Display ändern lassen.
  • Das Passwort für den "Wartungsmodus", mit dem Nedap-Techniker Zugriff auf einige Sonderfunktionen (z.B. Auslesen eines Speicherdumps) bekommen können, lautet "GEHEIM".
  • WVSN benutzte die meiste Zeit USB-EPROM-Emulatoren, um nicht ständig die EPROMs neu beschreiben zu müssen.

Weblinks

Blogeinträge zum Thema