#sepafail SEPA-Sammelaufträge mit ChipTAN-Verfahren bei der Sparkasse sind nicht sicher

Eine bequeme Art der Überweisung sind SEPA-Dateien. Eine SEPA-Datei enthält alle Überweisungs-Posten gesammelt.

Bequem, schnell und automatisch

Da die SEPA-Datei maschinenlesbar ist, können beispielsweise Buchhaltungsprogramme Gehaltsüberweisungen gebündelt ausspucken. Ein Mitarbeiter muss diese nur noch im Online-Banking hochladen und schon sind die Gehälter überweisen.

Schritt 1: Datei hochladen
Schritt 1: Datei hochladen

Dem Nutzer werden die Posten noch einmal aufgelistet, um sicherzugehen, dass die Daten korrekt sind.

Schritt 2: Daten überprüfen
Schritt 2: Daten überprüfen

Schließlich generiert man noch die TAN, um die Überweisungen abzunicken.

Schritt 3: TAN mit ChipTAN-Verfahren erzeugen
Schritt 3: TAN mit ChipTAN-Verfahren erzeugen

Ist das Verfahren nun sicher?

Auf den ersten Blick sieht alles super aus: Man lädt die Daten hoch, überprüft sie noch einmal und nickt sie dann ab. Doch der Teufel steckt im Detail.

Doch zuerst ein bisschen Vorgeschichte: Das ChipTAN-Verfahren wurde eingeführt, da Handy-TANs einige grundlegende Probleme haben: Die TANs werden zum einen über das unverschlüsselte GSM-Netz geschickt (Anmerkung: GSM ist zwar verschlüsselt, aber innerhalb von Sekunden knackbar), zum anderen reicht die Kenntnis einer TAN aus, eine beliebige Überweisung zu tätigen.

ChipTAN

ChipTAN sollte das ändern. Mit einem privaten Schlüssel auf der Karte soll mittels eines Nicht-Kompromittierten Gerätes (ChipTAN-Lesegerät) die Eckdaten der Überweisung, Betrag und Kontonummer des Empfängers, eingeben. Durch die Verrechnung der Daten in der TAN soll sichergegangen werden, dass Änderungen zwischendrin erkannt werden und User somit darauf aufmerksam gemacht werden, wenn sie beispielsweise einen Virus im System haben.

Problematisch bei der Sammelüberweisung ist nun die Menge der eingegebenen Daten. Die Sparkasse fragt mich lediglich nach der Summe aller Überweisungen, sowie der Anzahl Posten. Für einen Betrüger ist es aber fast egal, wie viele Posten und welche Summe überwiesen wird. Es sieht sogar plausibler aus, wenn eine gefälschte Überweisung genau denselben Betrag überweist wie das Original. Der Betrüger will die Empfänger-IBANs gegen eigene Konten austauschen. Das Geld muss danach zwar noch gewaschen werden (wäre doof, wenn das Konto auf seinen Namen liefe), aber das ist momentan nicht unser Problem.

Wie sieht nun der Angriff aus?

Dem Angreifer muss es gelingen, die SEPA-Datei so auszutauschen, dass Betrag und Anzahl der Posten gleich bleiben, aber der Betrüger seine eigenen Empfänger-IBANs einträgt. Im oben gezeigten Bild „Schritt 1“ findet bereits der Upload statt. Ist die Datei einmal bei der Bank hochgeladen, ist es für den Betrüger zu spät. Er muss also die Datei vor dem Upload abgreifen und abändern.

Im „Schritt 2“ sieht der Nutzer noch einmal die Buchungen aufgelistet. Da der Betrüger schon die abgeänderten Dateien hat hochladen lassen, muss dem Anwender jetzt die Richtigkeit der Daten weiterhin vorgegaukelt werden. Das geschieht, indem der Betrüger die ausgetauschten Originaldaten jetzt per Plugin im Web-Interface einsetzt. Dem User wird also vorgegaukelt, er würde an die richtigen Personen überweisen.

Im Schritt 3 der Anleitung hat der Betrüger keine Mühe mehr, da Betrag und Anzahl Posten des Sammelauftrags ja gleich bleiben.

Zusammengefasst muss der Betrüger einen Virus entwickeln, der ein Browser-Plugin ins System einschleust, das den Upload abfängt und auswechselt, sowie die angezeigten Kontrolldaten noch einmal durch die alten Daten ersetzt. Den Virus in ein Firmennetzwerk einzubringen dürfte keine große Hürde sein und beispielsweise mit Social Engineering gemacht werden können. Der technisch unversierten BWL-Aushilfskraft wird eine E-Mail untergeschoben, in der beispielsweise eine Mahnung oder eine Rechnung steht. Da sie die Anweisung hat, Rechnungen zu verbuchen, ist es recht wahrscheinlich, dass sie den Anhang öffnen wird.

Wie müsste man das System der Sparkasse anpassen?

Der Knackpunkt bei Sammelüberweisungen ist die Integrität der SEPA-Datei. Anstatt den Betrag und die Anzahl der Posten bei der ChipTAN-Eingabe abzufragen, sollte stattdessen eine Prüfsumme eingegeben werden, die bestätigt, dass die SEPA-Datei nicht verändert wurde. Diese Prüfsumme muss der Nutzer selbst berechnen. Das klingt nicht gerade User-freundlich. Geht man aber davon aus, dass die Anwender von SEPA-Dateien eher Unternehmensberatungen und Steuerbüros sind und die SEPA-Dateien automatisch generiert werden, kann die Software, die die SEPA-Datei generiert, die Prüfsumme gleich mit ausspucken.

Als Empfehlung für ein Prüfsummenverfahren würde ich hier SHA-256 anbringen. Allein durch die Verwendung in Bitcoin und ähnlichen Blockchains sind tausende Goldgräber damit vertraut, zu versuchen, SHA-256 zu knacken. Dass es niemanden gibt, der massenhaft Bitcoin-Blöcke absahnt, beweist, dass SHA-256 extrem sicher ist.

Warum ist der Fail fatal?

Was mich an der Sache stört ist, dass die Sparkasse bei Einzelüberweisungen so sehr acht gibt und Betrag und Kontonummer prüft, selbst bei den kleinsten Beträgen. Wenn es hingegen um Millionenbeträge geht bei Gehaltsüberweisungen, ist die Sicherheit auf einmal nicht mehr gegeben.

Zudem gibt es in vielen Firmen eine katastrophale Sicherheitslage, die Betrüger nur so einlädt, das Netzwerk zu kompromittieren. Überall, wo mehrere Personen als Einfallstor dienen, wird dadurch die Sicherheit geschwächt.

Inwieweit die Sparkasse darauf reagieren wird, weiß ich nicht. Die Sache zuerst der Sparkasse zu melden war für mich von Anfang an keine Option. Am Schalter hätte man mich komisch angeschaut und ein direkter Kontakt in die Sicherheits- und IT-Abteilung war mir zu viel Rechercheaufwand. Zudem gab es in der Vergangenheit zu viele Sicherheitsforscher, die nach ihrer diskreten Meldung entweder ignoriert wurden, mit 25 €-Gutscheinen abgespeist wurden oder gar rechtliche Probleme bekommen haben, weil ihnen die Forderung nach einer Belohnung fürs Finden der Lücke als Erpressung ausgelegt wurde.

Zudem gehe ich davon aus, dass bei der Sparkassen-IT keine Idioten arbeiten. Ich denke eher, dass diese Sicherheitslücken für mehr User-Komfort in Kauf genommen wurden. Die Entscheidung kommt schließlich von Oben und nicht von den Fachexperten. Die Frage ist nur, ab welcher Verlustsumme es sich für die Sparkasse lohnt, in mehr Sicherheit zu investieren. Jedoch könnte man die verfälschten SEPA-Dateien auch den Firmen zuschreiben, womit die Verluste eher bei den Kunden der Sparkasse lägen – also null Handlungsbedarf.

Das Problem sitzt noch tiefer

Angenommen, der Rechner wäre kompromittiert und ich generiere meine SEPA-Datei aus einem Programm, das auf dem kompromittierten Rechner läuft – dann ist doch die komplette Sicherheit der Bank unnütz.

Hier gibt es mehrere Arten, wie die SEPA-Datei entstehen kann. Zum einen kann eine externe Partei, wie z.B. der Steuerberater die SEPA-Datei erstellen und mir die SHA256-Summe auf sicherem Wege zukommen lassen. Es müssten schon beide Parteien infiziert sein und der Virus zusätzlich auf die Software des Steuerberaters spezialisiert sein, um den Angriff durchführen zu können.

Doch selbst, wenn die SHA-256-Summe auf meinem kompromittierten Rechner erstellt wurde, kann man speziell die Wirtschaftlichkeit einer Viren-Entwicklung betrachten: Es gibt 3-4 verbreitete Browser, aber hunderte Buchhaltungsprogramme, sowie tausende Individuallösungen, die SEPA-Dateien erstellen. Wenn die Banken also ihre Pflicht tun würden, wäre schon einmal ein Risikofaktor ausgeschalten.

Weitere Design-Schwächen des ChipTAN-Verfahrens

Es gibt zwar noch einige andere Dinge, die mich am ChipTAN-Verfahren stören, aber ich gehe mal davon aus, dass die Bedrohungslage recht überschaubar ist und dass die Sparkasse für ihre fehlende Sicherheit schön selbst haften wird (um keinen Skandal zu provozieren – rechtlich müsste sie nicht, da sich in vielen Fällen von verseuchten Computern gar nicht nachweisen lässt, ob nun der Nutzer oder der Virus die Aktion getätigt hat).

Einzelüberweisung sind so ein Stein des Anstoßes: Es wird der Betrag und die Kontonummer abgefragt, nicht aber die Bankleitzahl (bzw. der Anfang der IBAN). Überrede ich nun eine Bank, ein Konto zu eröffnen, das dieselbe Kontonummer hat wie ein Zahlungsempfänger meines Opfers, kann ich leicht per Browser-Plugin die Bankleitzahl der Überweisung austauschen und erhalte das Geld selbst. Das Opfer wird zuerst nichts merken, da Kontonummer ja stimmt und der Betrag auch – nur der Empfänger wird sein Geld nicht sehen.

Eine weitere Design-Lücke, die wesentlich tiefer liegt, ist die Schlüsselerzeugung. Ich bekomme meine EC-Karte von der Bank zugeschickt. Der private Schlüssel auf dem Chip wird nicht von mir generiert. Demzufolge wäre bei einer bestätigten Überweisung nachweisbar entweder ich oder meine Bank der Urheber. Eine TAN ist also nicht der eindeutige Beweis, dass eine Überweisung von mir autorisiert wird, da sie die Bank als signierenden Part nicht ausschließen kann. Das wäre erst möglich, wenn ich den Schlüssel selbst generieren dürfte und in den Chip einbrennen darf. Dass das aus Usability-Gründen nicht geht und die Chip-Schreibgeräte ebenfalls kompromittiert sein könnten, lassen wir mal außen vor.

Dieser Artikel soll keine Rüge gegen die Sparkasse allein sein. Ich kann mir vorstellen, dass andere Banken dieselben Fehler machen oder dass die Banken gar nur Standards umsetzen (die sie natürlich selbst mit beeinflusst haben).

Fazit

Ich hoffe, dass ich nie einen Virus haben werde, der sich auf die Verfälschung von SEPA-Dateien spezialisiert. Ansonsten wären die finanziellen Folgen heftig. Ich hoffe, dass, bis die Sparkasse den Fehler behoben hat, Linux noch nicht so verbreitet ist, dass es Drive-By-Viren gibt, die auf meinem System Unheil anrichten können. Sollte es doch dazu kommen, muss ich wohl Sammelüberweisungen sein lassen und alle Posten einzeln einhacken.

Zulieferer-Verträge online abschließen

Mit der Einführung der IT werden viele Abläufe effizienter und schneller. Produktionspläne, Kalkulation, CAD-Design, Online-Werbung sind hilfreiche und kosteneffizientere Methoden als deren analogen Vorbilder.

Verträge sind Übereinkünfte

Ein Vertrag ist im Grunde genommen eine Willenserklärung zweier Parteien zu einem Geschäft. Eine Willenserklärung können beispielsweise sein:

  • Eine Unterschrift unter einem Stück Papier
  • Eine qualifizierte elektronische Signatur
  • Eine mündliche Zustimmung
  • Ein Händedruck
  • Ein Nicken
  • Ein Handzeichen (z.B. bei einer Auktion)
  • Das Bezahlen mit Vorkasse

Grundsätzlich macht das BGB keinen Unterschied der Arten von Willenserklärungen. Die Arten von Erklärungen unterscheiden sich vom Blickwinkel des Vertragsschlusses aus nur in einem wesentlichen Punkt: Dem Grad der Beweisbarkeit. Eine schriftliche Unterschrift wird vor Gericht leichter verwertet werden können als ein Nicken, das beispielsweise von Zeugen beobachtet und auch noch richtig interpretiert werden muss.

Der Aufwand hinter einem Vertrag

Während man sich früher noch ein extra Zimmer mit Keksgebäck und Kaffee, einem runden Tisch und zwei Stühlen arrangiert hat, gibt es inzwischen Verträge, die in zweifacher Ausfertigung den Postweg nehmen und auch solche Verträge, die mit einer einfachen E-Mail bestätigt werden.

Alles bequem und gut – wäre da nicht das Problem der Beweisbarkeit. Die Online-Bestellung kann grundsätzlich von jedem getätigt werden, der sich bei der Anmeldung als Sie ausgibt. Erst durch den Umstand der Vorkasse-Zahlung wird der Kaufvertrag umgesetzt, weil die Willenserklärung durch die Überweisung nachvollziehbar wird. Doch in einigen Situationen will man die Leistung vor der Bezahlung erbringen – und das bei größeren Beträgen.

Verträge schnell wie E-Mail und so nachvollziehbar wie in der Schriftform

Wie setzt man die Nachweisbarkeit, die bei handschriftlichen Unterschriften durch die einzigartigen Handbewegungen des Vertragspartners beim Schreiben seines Namens charakterisiert sind, auf die digitale Welt?

Eine Eigenschaft einer Handschrift ist, dass der Inhaber sie zwar schreiben kann, jemand anderes aber nicht durch Beobachtung seiner Hand oder seines Schriftzuges nachahmen kann. Dies ist zwar in der Zeit von Farbkopierern nicht mehr 100%ig wahr, doch absolut identische Unterschriften können auch ein Hinweis auf eine Kopie sein. Zudem ist das Eindrücken des Papiers durch einen Kugelschreiber schwer kopierbar.

Beim Computer muss man diese gewünschten Eigenschaften nachahmen. Jedoch hat man im Computer kein Papier und Kugelschreiber, sondern nur Daten. Die Bewegungsabläufe der Hand beim Menschen müssen also analog geheime Daten auf dem Computer darstellen. Zudem muss gewährleistet sein, dass durch Unterschreiben niemand diese Daten stehlen kann.

Geheimniskrämerei

In anderen Worten: Andere müssen prüfen können, dass ich das Geheimnis besitze, ohne es lüften zu müssen. Denn einmal gelüftet, könnten andere sich ebenfalls als ich ausgeben. Doch wie erreicht man diese Eigenschaft?

In der Mathematik gibt es einige Operationen, die leicht zu errechnen sind, deren Rechen-Umkehrung aber schwer sind. In anderen Worten: Jeder kann leicht die Lösung prüfen, aber niemand kann die Lösung einfach berechnen, es sei denn er kennt die Lösung. Ein Beispiel ist das Modulus-Potenzieren. Dabei handelt es sich um den Divisionsrest einer Potenz. Vergleichbar ist das mit folgendem Beispiel:

Ich will 12334123729813^54203 berechnen und die letzten 3 Dezimalstellen wissen. Die Lösung ist 797. Kennt man allerdings die 797 und 12334123729813, ist es sehr schwer auf 54203 zu kommen. Es müssten alle möglichen Lösungen durchprobiert werden, was länger dauern würde, als das Universum existiert. Außer diesem Restrisiko eines Lottogewinns ist das Verfahren also sicher.

Elektronische Signatur vs Handschrift

Mit Fortschreiten der künstlichen Intelligenz wird es immer wahrscheinlicher, dass Computer die Charakteristika einer Handschrift überprüfen und gar nachmachen können. So könnte es gelingen, eine Unterschrift zu erzeugen, die die Charakteristika des Fälschungsopfers aufweist und trotzdem einzigartig ist. Mit einem 3D-Drucker könnte man zusätzlich einen Stempel drucken, der im Papier die nötigen Furchen eindrückt. Schon hat man die perfekte Fälschung.

Auf der Seite der elektronischen Signatur gibt es das gewisse Restrisiko, dass Unbefugte das Geheimnis durch einen Glückstreffer beim Ausprobieren aller Möglichkeiten finden. Bei der elektronischen Signatur kann man allerdings den Schwierigkeitsgrad allerdings dadurch erhöhen, indem man größere Zahlen wählt (momentan solche mit mehr als 2.000 Stellen). Dadurch sinkt die Wahrscheinlichkeit, dass eine Unterschrift geknackt wird gegen null. Mit jeder noch schnelleren Generation Computer wird das Rätsel einfach schwerer gemacht. Diese Eigenschaft hat die Handschrift nicht.

Praktische Anwendungen

Nachweisbare Verträge übers Internet zu unterschreiben hat Vorteile: Man spart Zeit und in einigen Fällen kann auch ein Computer nach meinen Regeln programmiert automatisch Verträge unterschreiben.

Eine Prominente Anwendung ist die digitale Währung Bitcoin, die auf der sogenannten Blockchain-Technologie aufsetzt. Hier ist das Geheimnis (auch Schlüssel genannt) gleichzeitig die Besitzurkunde meines Kontos. Durch Unterschreiben von Übweisungen trete ich dann Teile meines Geldes an andere ab.

Für Sie könnte es sich beispielsweise lohnen, Nachschub-Lieferungen von Zulieferern über elektronische Signatur abwickeln zu lassen. Wenn Ihr Computer sowieso die benötigte Teilemenge errechnet, wieso soll er diese nicht auch selbstständig bestellen können, wenn die Einkauf-Konditionen Ihren Akzeptanz-Regeln entsprechen?

Was ist die vielbesagte Blockchain?

Viele reden darüber, doch nur wenige wissen, wie sie funktioniert.

Die Blockchain ist eine Kette von Blöcken

Doch was ist ein Block und was genau ist Verkettung? Doch dazu erst ein Exkurs in die Geschichte der Blockchain: Der Bitcoin.

Eine dezentrale Währung, die auch ohne Zentralbank eine kontrollierte Geldmenge im Umlauf hält?

Genau das war das Ziel, mit dem Bitcoins geschaffen wurden. Es sollte eine Art Geld geschaffen werden, das folgende Eigenschaften besitzt:

  • Es gibt eine definierte Geldmenge im Umlauf. Niemand darf Geld erfinden oder fälschen können.
  • Geld muss von jemandem besessen werden können. Diesem darf das Geld nicht enteignet werden.
  • Wer im Besitz von Geld ist, soll in der Lage sein, dieses einer beliebigen Person überweisen zu können.
  • Es muss eine möglichst faire Ausschüttung des Anfangs-Geldbestands geben.

Bitcoins realisieren das so:

  • Geld besitzt, wer den privaten kryptografischen Schlüssel (vergleichbar mit einem Passwort) zu seinem Konto besitzt.
  • Mit einer Überweisung markiert man eigenes Geld mit dem öffentlichen kryptografischen Schlüssel eines fremden Kontos (vergleichbar mit einem Schnappschloss, zu dem man selbst den Schlüssel nicht hat, sondern nur der Empfänger)
  • Die Anfangs-Geld-Ausschüttung findet in der Anfangsphase statt. Es werden alle 10 Minuten 100 Bitcoin ausgeschüttet. Nach einigen Monaten nur noch 50, nach weiteren Monaten nur noch 25 bis die gesamte Umlaufmenge ca. 17 Mio Bitcoin beträgt.
  • Die Anfangs-Geld-Ausschüttung, sowie die Buchführung über alle Überweisungen (und damit die Nachvollziehbarkeit der Kontostände) werden in Blöcken gespeichert. Die Anfangs-Geld-Ausschüttung bekommt der, der den Block erstellt.
  • Es gibt ein mathematisch schwierige Rätsel, das ein Computer berechnen soll. Wer eine solche Rätsel-Lösung findet, darf einen Block erstellen (und erhält dadurch die Anfangs-Ausschüttung, sowie alle Transaktionsgebühren der Überweisungen, die er in den Block aufnimmt)
  • Auf diese Weise wird garantiert, dass alle 10 Minuten Überweisungen abgewickelt werden und weiteres Geld ausgeschüttet wird. Die Ausschüttung wird statistisch gesehen je nach Rechenleistung der Teilnehmer verteilt.

Was macht Blockchains so einzigartig?

Eine Blockchain ist, wie oben genannt, eine Kette von Blöcken. Ein Block besteht aus einer Nutzlast, wie beispielsweise der Liste von Überweisungen, die bestätigt wurden. Eine Klinik nutzt die Blöcke beispielsweise, um Patientenbefunde zu zementieren. Eine spätere Änderung am Befund ist dadurch für alle nachvollziehbar. Die Verkettung entsteht dann daraus, dass jeder Block jeweils seinen Vorgänger-Block bestätigt. Das funktioniert, indem eine Prüfsumme (auch Hash genannt) vom vorherigen Block erstellt wird. Wird der vorherige Block geändert, würde also der nächste Block auf die Änderung hinweisen. Durch die Verkettung der Blöcke ist die Vergangenheit dadurch umso schwerer änderbar, je mehr Blöcke darauf folgen.

Blockchains machen einen Ereignisverlauf nachvollziehbar

Durch die Verkettung der Blöcke ist es fast unmöglich, die Kette zu manipulieren, wenn bereits Blöcke angehängt wurden. Neue Blöcke werden von den Blockchain-Nutzern nämlich nur akzeptiert, wenn sie die Richtigkeit der kompletten Vergangenheit bestätigen.

Ein Betrüger könnte also die Welt gestalten, wiedie-wiede-wie sie ihm gefällt, er würde damit allerdings allein dastehen. Alle anderen Nutzer der Blockchain haben den Blockverlauf als Beweis, wie es tatsächlich geschehen ist.

Wann ist eine Software zurechenbar?

In diesem Artikel geht es vor allem um Software in kritischen Bereichen. Die Daten in einer Kauf-Transaktionsdatenbank sollten beispielsweise nachträglich nicht mehr veränderbar sein.

DSCN2251

Nachvollziehbarer Ereignisverlauf

In vielen Fällen ist es wichtig, nicht nur den Momentanzustand in einer Software abzufragen, sondern auch die Vergangenheit. Stellen Sie sich vor, ein Straftäter veröffentlicht Kinderpornografie auf einem sozialen Netzwerk. Anschließend löscht er die Beiträge wieder, man will ihm die Tat aber trotzdem nachweisen.

Grundsatz hier ist: Was geschehen ist, ist geschehen und darf nicht mehr vergessen werden. Eine Umsetzungsmöglichkeit dafür ist der sogenannte Event-Log, eine Liste aller Vorkommnisse, aus der man den aktuellen Zustand rekonstruieren kann. Man mag zuerst vor dem Gedanken, alles zu speichern, zurückschrecken. Doch in der Regel reicht eine einzige moderne Festplatte für 99% der Fälle aus. Um die restlichen 1% hat sich eine Industrie gebildet, die nur darauf wartet, Sie mit wachsendem Speicherplatz zu bedienen.

Beweisbarkeit von Nutzeraktionen

Will man nicht nur den Verlauf der Dinge nachweisen, sondern auch beweisen, dass eine Handlung durch eine ganz bestimmte Person durchgeführt wurde, muss man etwas tiefer in die Trickkiste greifen. Zum Einsatz kommen hier kryptografische Schlüssel. Jeder Benutzer des Systems hat einen kryptografischen Schlüssel, mit dem er jede Aktion unterschreiben muss. Anschließend kann man zweifelsfrei nachweisen, dass eine Handlung von einer bestimmten Person genehmigt wurde.

Beispiel: die Währung Bitcoin

Ein Musterbeispiel für ein zurechenbares System ist die digitale Währung Bitcoin. In einer Ketten-ähnlichen Datenstruktur wird abgespeichert, wer an wen Geld überweist. Jede Transaktion muss von dem unterschrieben werden, dem das Geld vor der Transaktion gehört haben soll. Außerdem bestätigt jede Überweisung die vergangenen Überweisungen, sodass Manipulationen der Vergangenheit niemals unerkannt bleiben können. Durch dieses ausgeklügelte System kann eine Währung existieren, die von keiner Zentralbank manipuliert oder kontrolliert werden kann oder muss.

Unsere Lösung

Wollen Sie Datenbanken, in denen selbst böswillige Mitarbeiter nichts wirklich löschen können? In denen jeder Schritt nachvollziehbar ist? Dann nehmen Sie mit uns Kontakt auf!