Bis letztes Jahr war meine Onlinebankingwelt noch in Ordnung – meine Bank hatte seit einigen Jahren mit „SmartTAN Plus“, auch bekannt als „HHD1.2“ ein für mich akzeptables System im Einsatz: Hierbei erhielt man ein kleines, eigenständiges Gerät mit Kartenleser, Tastatur und Display – in meinem Fall war es ein TanJack Plus von Reiner-SCT . Wird eine Onlineüberweisung o.Ä. gestartet erhält man eine Zufallszahl – hat man seine Bankkarte in das Gerät gesteckt gibt man diese zusammen mit der Kontonummer des Empfängers in das Gerät ein. Hat man alle Daten bestätigt zeigt der Leser eine 5 stellige Nummer an über welche man die Transaktion auf der Bank-Webseite bestätigen kann. Zwar liegen die Spezifikationen großteils nicht offen, aber durch die Trennung zwischen PC und Tan-Generator ist ein gewisser Schutz gewährleistet. Alternativ bietet die Bank mit m-Tan auch eine Handy-Lösung an bei welcher die TAN als SMS zugestellt wird, aber das möchte man natürlich nicht…
Nun steht für Kunden des HHD1.2 ein Update auf HHD1.4, auch bekannt als SmartTan Optic oder SmartTan Comfort an. Bei dieser Lösung wird nun auch der Betrag zur Erstellung der TAN verwendet, die große Neuerung ist aber die Übertragung: Statt einer Eingabe auf dem Keypad sorgt nun eine animierte Grafik auf der Bankwebseite/-software in Zusammenarbeit mit Fotodioden an den (selbstverständlich auf eigene Kosten neu anzuschaffenden) Lesern für die Übertragung der Daten. Auf der Seite der VR Bank Rhein Sieg heißt es hierzu beispielsweise:
Sicherheit und Komfort für mehr Vertrauen
[…]Die optische Schnittstelle liest die notwendigen Kontrolldaten vom Monitor direkt in das Lesegerät ein.[…]Das Zwei-Schritt-Verfahren ist so für den Bankkunden noch komfortabler – bei gleichbleibender Sicherheit.
Nunja, komfortabler ja, aber sicherer? Zum Ersten entfällt die „Zwangsprüfung“ der Kontonummer bei der Eingabe. Da die Daten direkt im TAN-Generator landen ist die Verlockung groß ohne weitere Prüfung schnell mit OK zur TAN durchzuhechten. Zum Anderen geht auch die Kontrollmöglichkeit verloren – zwar ist der verwendete Flickercode bereits halbwegs entschlüsselt, aber wer prüft das schon? (OK, ich…) Es existiert also eine nur schwer prüfbare (einweg)Verbindung – genau das, was man eigentlich nicht möchte. Wer sagt mir, dass hier nicht neben den Bankdaten schnell eine neue Firmware übertragen wird? Zumindest einige Konfigurationscodes für die Tastatur zur Änderung des Leser-Verhaltens lassen sich im Netz finden, die Programmstrukturen sind also definitiv nicht vollständig in Hardware abgebildet. Das schlimme dabei: Wenn man tatsächlich von einem solchen Angriff betroffen wäre dürfte es schwer werden die Bank davon zu überzeugen, dass es ein Systemfehler ist – man würde vermutlich auf dem Schaden selbst sitzen bleiben. Ja, ich weiß, ich bin in der Ecke etwas Paranoid, aber zumindest bei der Eingabevalidierung nimmt es das Gerät nicht ganz so genau, denn nunja, mit etwas Javascript im Browser (welcher beispielsweise per Trojaner auf der Bank-Webseite eingeschleust werden könnte) bringt der Leser beispielsweise folgende Ausgaben:
(Technischer Hinweis: Der Betrag wird im Flicker-Code als ASCII codiert, hierbei sind neben Zahlen auch Buchstaben und einige Sonderzeichen möglich. Selbstverständlich kommt hierdurch keine gültige TAN mehr raus, eine Gefahr besteht hierdurch also nicht – allerdings ist es auch kein gutes Ohmen für die allgemeine Codequalität des Systems.)
Weiter habe ich nicht probiert, da das Gerät bei den Tests für diese Aktion bereits sehr fragil reagierte wollte ich den Leser nicht mit Zeilenumbruch oder NULL-Zeichen komplett aus der Fassung bringen… Nunja, bei meiner Bank ist auch eine manuelle Eingabe der Daten weiterhin möglich, auch wenn der versprochene „Comfort“ für mich damit ein großes Minus davor hat – für das ich natürlich auch noch zahlen darf.
Witzige Entdeckung; evtl. interessiert dich die Abhandlung im verlinkten Wiki ja auch.
Du willst Geld überweisen und deine Bank berechnet die zugehörige TAN. Du musst die Überweisung im zweiten Schritt bestätigen. Die TAN kannst du nur mit deiner EC-Karte im Leser erzeugen. Damit dir ein Banking-Trojaner die Daten manipulieren kann (z.B. Demoüberweisung) musst du die Zieldaten kontrollieren und dann darfst du sie erst mit der TAN bestätigen oder eben auch nicht. Ob du die Daten nun eingibst oder abscannst ist hierbei egal, da die Transaktionsdaten selbst nicht vertraulich sind und eine Fälschung an dieser Stelle die Transaktion vollständig unterbinden würden.
Der Punkt ist nicht, dass die Transaktion nicht öffentlich sein soll, sondern dass die übertragenen Daten nicht direkt geprüft werden können. Wenn es Lücken im System des Lesers gäbe kann ein manipulierter Flickercode möglicherweise das System des Lesers beeinträchtigen. Wenn keine 100% saubere Trennung zwischen Cryptoprozessor und Leser vorliegt kann das zur Manipulation genutzt werden. Bei händischer Eingabe kann sichergestellt werden, dass es sich tatsächlich ausschließlich um Zahlen handelt und keine unerwünschten Binärdaten mit dabei sind. Da die verwendeten Algorithmen und Codes nicht offen liegen ist eine unabhängige Prüfung der Sicherheit des Systems nicht möglich.