Das AusweisApp

Das AusweisApp wurde vor etwa einem Monat offiziell zum Download freigegeben und einige Tage später wieder vom Server entfernt wegen einer Sicherheitslücke. Mittels DNS Manipulation und einem Webserver mit gültigem Zertifikat konnte man über die Update Funktion des Apps eine beliebige ZIP Datei mit schädlichem Inhalt einschleusen. Klingt zwar sehr gut, finde ich aber wenig praxisrelevant, weil diese Methode einfach viel zu aufwendig ist und es nun mal viel einfachere Wege gibt einen PC mit einer schädlichen Software zu infizieren. Das BSI hat das Programm trotzdem vom Server entfernt, wahrscheinlich um zu zeigen das es ihnen ernst ist. Das dürfte aber wohl eine oder die letzte Sicherheitslücke sein, die es einem ermöglicht ohne direkten Zugriff auf den PC, das AusweisApp zu manipulieren. Offiziell wird mit der Stopfung dieser Lücke das AusweisApp „bombensicher“, die einzige Sicherheitslücke sitzt dann nämlich vor dem Bildschirm und lässt sich Malware unterjubeln.

Eine wichtige Frage die man in diesem Zusammenhang stellen sollte ist klar: Wie einfach ist es das AusweisApp zu manipulieren? Wie einfach haben es die Trojaner Entwickler. Das es möglich ist bezweifelt keiner, aber schaffen das auch einfache Scriptkiddes ohne große Kenntnisse?

Ich habe mir zum Glück rechtzeitig das AusweisApp runtergeladen und bin leider jetzt erst dazu gekommen es mal genauer anzuschauen. Leider habe ich noch keinen neuen Ausweis, aber es lassen sich schon gute Tendenzen erkennen.
Zunächst schau ich immer welche Programmiersprache eingesetzt wurde. Bei dem AusweisApp lässt sich das nicht genau sagen. Es ist auf jeden Fall ein Mix aus C++ und Java. Gewisse News Seiten haben schon bemängelt das eine alte Java Version(v1.6.0_18) mitgeliefert wird, aber auch das finde ich nicht wirklich schlimm, weil es auch hier eher unwahrscheinlich ist das jemand diese Tatsache effektiv missbrauchen kann. Was sehr auffällt sind die vielen externen Bibliotheken (DLLs). Neben den offensichtlichen DLLs wie z.B. PdfSecureAPI.dll oder msvcr80.dll gibt es auch viele Dateien mit der Endung „ols“ die in Wahrheit aber ganz normale DLLs sind z.B. siqCertMgr.ols oder siqCipher.ols. Allein der Name dieser OLS Dateien lässt schon schließen das in diesen Dateien sehr interessante Dinge passieren. Wenn man sich die Dateien mal mit dem tollen CFF Explorer anschaut und das Export Directory begutachtet findet man auch ganz tolle Sachen. Funktionen wie siqCipher_Decrypt, siqCipher_Encrypt, siqCipher_EncryptFile oder siqCipher_DecryptFile lassen schon das Herz eines jeden Malware-Entwickler höher schlagen. Ich hab keine Ahnung welche Verschlüsselung in dem neuen Ausweis eingesetzt wird und dank dieser sehr sprechenden Namen von Funktionen brauch ich das auch gar nicht wissen. Ich schau einfach mal was bei den vielen „Decrypt“ und „Encrypt“ Funktionen so rein und raus geht (z.B. mit einem Debugger) und schon wird man auch mit 0 Kryptographie Erfahrung den neuen Ausweis gut durchleuchten können. Klasse finde ich z.B. auch die DLL siqSSLClient.ols mit den vielversprechenden Funktionen wie z.B. Java_com_openlimit_net_ssl_CsiqSslPskClient_write. Die Methode hat wahrscheinlich die gleiche Funktion wie SSL_write von OpenSSL (Hint: Schaut mal meinen SFT Hook an). Man kann nur hoffen dass diese Funktion nicht dafür verantwortlich ist die Kommunikation mit dem Internet zu sichern…
CFF

DLL Injection mit API Hooking ist also ein sehr gutes Verfahren das AusweisApp zu manipulieren, da man die Funktionsadressen dynamisch mit GetModuleHandle/GetProcAddress holen kann, spielt die Version des AusweisApp auch keine Rolle. Man kann also ohne Probleme alle aktuellen und zukünftigen Versionen des AusweisApp infizieren ohne Code Anpassungen.

Fazit

Es scheint so, dass man mittels einfachem API Hooking das AusweisApp beliebig manipulieren kann. Die sehr sprechenden DLL Namen und die sehr interessant klingenden Funktionsnamen laden einen gerade dazu ein. Das tolle ist das man dafür kaum Reverse Engineering Kenntnisse braucht, die Funktionsnamen liefern quasi schon alle Details die man wissen muss, lediglich die Funktionsparameter muss man mit einem Debugger noch rausfinden, was allerdings nicht schwer ist. Das AusweisApp zu manipulieren ist also keine Kunst, das sollten selbst Scriptkiddies hinbekommen. Ich bin also sehr gespannt wie lange es dauert bis es ein Trojaner gibt der das AusweisApp angreift. Vielleicht ist es aber auch so, dass die neue Version des AusweisApp (die im Januar erscheinen soll) bereits diese einfache Manipulationsmöglichkeit nicht mehr bietet.

Links:
http://www.heise.de/newsticker/meldung/Neuer-Personalausweis-AusweisApp-mit-Luecken-2-Update-1133376.html
http://www.heise.de/newsticker/meldung/BSI-testet-neue-Version-der-AusweisApp-1138739.html
http://www.heise.de/newsticker/meldung/Elektronischer-Personalausweis-Ueberarbeitete-AusweisApp-kommt-im-Januar-1146066.html

11 Gedanken zu „Das AusweisApp“

  1. Das war ja mal so ungefähr das irrelevanteste was ich in den letzten monaten gelesen habe

  2. @hdebugs
    Würde mich mal interessieren wie du mit einem einfachen Link per E-Mail-Spam diese Sicherheitslücke ausnutzen willst… Ich glaube du hast die Lücke nicht richtig verstanden. Das schwere daran ist die DNS Auflösung zu manipulieren. Es gibt da zwar ein paar Möglichkeiten, aber wirklich praxisrelevant ist da keine. Damit das z.B. mit einem Link klappt müsstest du also wieder eine andere Sicherheitslücke ausnutzen.

  3. AusweisÄpp – Boah, das ist Maiziere-High-Tech – Die ist bestimmt gaaanz sicher (so wie die Renten) :-))

    Wegen dem SOAP/Update-Angriff: Na schön ist das nicht, zumal es wirklich kaum grosser Aufwand ist (Habe den Angriff von Schejbal mir mal angeguckt). Einen Server aufsetzen, und dann per Spam-eMail allen potentiellen Anwendern „hallo – du kann runterladen neue App – guckst du hier…“ einen neuen Link unterschieben…

    Daher denke ich dieser Exploit wäre schon relevant.

  4. ok I uploaded the main MSI installer:
    hxxp://rapidshare.com/files/434875753/AusweisApp_010001.rar
    PW: df9sfenjnvjdf89qlpldfbynx

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *