von Zuk Avraham, Monday, Feb 23 2015
EDIT: Im folgenden Beitrag geht es *nicht um ein gerootetes oder gejailbreaktes Gerät*. Um auf die Klartext-Datenbank, die die geheimen Chat-Nachrichten enthält, zugreifen zu können, haben wir unsere Implementierung CVE-2014-3153 verwendet. Die Behauptungen, dass das Gerät gerootet oder gejailbreakt ist, sind falsch und irreführend.
Ich werde mit einem Zitat des Crypto-Failblogs beginnen:
„Telegram ist eine verschlüsselte Instant Messenger-App für iOS und Android-Geräte. Ich würde sie natürlich nicht auf diesem Blog erwähnen, wenn die dahinterliegende Kryptographie perfekt wäre. Tatsächlich ist sie weit davon entfernt, perfekt zu sein. Eigentlich ist sie fürchterlich.
Ich bin nicht sicher, ob es als Reaktion auf berechtigte Kritik war, aber Telegram hat vor Kurzem angekündigt, einen Krypto-Wettbewerb zu veranstalten. Grundsätzlich geht es darum, eine E-Mail-Adresse wiederherzustellen, die mit ihrer sicheren Messaging-App verschlüsselt wurde, um $ 200.000 in Bitcoin zu gewinnen.
Leider ist der Wettbewerb nutzlos. Weder Nutzer noch Telegram-Entwickler werden irgendetwas von den Ergebnissen des Wettbewerbs lernen. Aber Telegram wird noch immer in der Lage sein auf den Wettbewerb zu zeigen und zu sagen: „Schaut! Niemand hat den Wettbewerb gewonnen, daher ist unsere Software sicher!“ Naive Nutzer werden Telegram glauben, und sie werden sich dabei sicher fühlen, während sie eine gefährliche Verschlüsselung benutzen, die nicht in Ordnung ist.“
Ich habe mich dazu entschlossen, mir den Wettbewerb näher anzusehen. Meine Absicht war zu sehen, ob ich verschlüsselte Nachrichten lesen konnte, ohne online zu sein. Ich führte einen Test mit Android OS 4.4.2 durch.
Telegram behauptet, eine auf Privatsphäre ausgelegte Messaging-App zu sein, die in der Lage ist, persönliche wie auch Geschäftsgeheimnisse sicher verschlüsseln zu können – das sind sie aber nicht. Eine kritische Sicherheitslücke, die von Zimperium Mobile Security Labs gefunden wurde, enttarnt ihre mehr als 50 Millionen Nutzer, die glauben, dass die App die Sicherheit bietet, um offen zu chatten. Lasst mich erklären, wie wir über diese Schwachstelle gestolpert sind.
Der alte Krypto-Wettbewerb von Telegram verweist auf das Knacken ihres Protokolls, während man mitten in einer verschlüsselten Kommunikation ist. Dies ist aus zwei Gründen keine gute Idee:
- In der realen Welt halten sich Hacker nicht an die Regeln.
- Dies geht davon aus, dass Hacker die Verschlüsselung von Telegram in der Mitte zu knacken versuchen würden, wenn man stattdessen auch Schwachstellen in anderen Protokollen finden kann, die mehr Vorteile bieten (z.B.: GoToFail um SSL-Verschlüsselung auf iOS zu umgehen).
Der neue Krypto-Wettbewerb von Telegram besagt:
„… und diesmal können Kandidaten nicht nur den Datenverkehr überwachen, sondern auch als Telegram-Server agieren und aktive Angriffe nutzen, was ihre Fähigkeiten erheblich steigert.“
Daraus ergibt sich, dass ich die Verschlüsselung nicht dadurch knacken darf, indem ich sie einfach vermeide. Ich werde die Verschlüsselung umgehen, indem ich einen aktiven Angriff auf das Gerät simuliere.
Der beste Weg, dies zu tun, ist durch das Verständnis der Anatomie von Cyberattacken und der Architektur von mobilen Geräten. Ich habe nicht lange dafür gebraucht, um die Software von Telegram zu installieren, sowohl die verschlüsselten als auch die unverschlüsselten Texte zu finden, die ich verschickt habe, zusammen mit einer Datenbank, die alles oben genannte beinhaltet.
Auf Telegram’s Webseite heißt es:
„Ein Geheim-Chat ist ein persönliches Gespräch, bei dem alle Nachrichten mit einem Schlüssel verschlüsselt werden, den nur die Teilnehmer des Chats besitzen. Daraus folgt definitionsgemäß, dass kein Dritter den entschlüsselten Inhalt ohne Zugriff auf eines der beiden Geräte einsehen kann.“
Dies wirft zwei Fragen auf: Erstens, wenn wir davon ausgehen, dass ein Anwender keinen physikalischen Zugriff auf das Gerät hat, und das Gerät per Fernzugriff gehackt wurde – wie einfach wäre es für den Angreifer, die End-to-End-Verschlüsselung von Telegram wiederzuerlangen? Zweitens, ob und wie sind Telegram’s Geheim-Chats auf dem mobilen Gerät verschlüsselt?
Es ist einfacher, eine Schwachstelle in einem Telefon zu finden und es per Fernzugriff durch URL/PDF/Man-In-The-Middle und anderen Angriffstechniken zu hacken, die bereits besprochen wurden. Wenn man einmal ein Mobiltelefon gehackt hat, muss man seine Rechte erhöhen, um die Kontrolle über das Gerät zu erlangen. Dies kann leicht mit einem Kernel-Exploit durchgeführt werden.
Wenn ihr neu in der mobilen Sicherheit seid, dann habe ich unten einige Beispiele angeführt die zeigen, wie eine Person einen Angriff auf ein mobiles Gerät per Fernzugriff durchführen kann. Diese Art von Hack wäre noch einfacher für Nationalstaaten mit noch mehr Ressourcen, Zeit und Geld zu ihrer Verfügung:
- Schwachstelle auf Client-Seite: Chrome-Exploit – Pwn2Own Herbst 2013
- Kernel-Exploit – CVE-2014-3153 (a.k.a. – TowelRoot)
Werfen wir einen Blick darauf, was ich gemacht habe. Ich begann damit, geheime Nachrichten mit der Android-Version der Telegram-App zu erstellen mit der Absicht, sie irgendwo unverschlüsselt zu finden. Ich hatte angenommen, dass die Geheim-Chat Nachrichten im Speicher verschlüsselt werden, oder zumindest in der lokalen Datenbank. Ist das zu viel verlangt für einen Instant-Messenger, der sich der Privatsphäre und der Sicherheit verschrieben hat?
Wenn man als Angreifer einen Screenshot macht, wird an beide Benutzer eine Benachrichtigung geschickt – also kann man davon ausgehen, dass Sicherheit und Privatsphäre für Telegram von oberster Priorität sind. Wer aber glaubt, dass ein Angreifer einen Screenshot macht anstatt die vollständige Kontrolle über das Gerät zu übernehmen, ist ein bisschen naiv.
Ich schenkte Telegram wohl zu viel Glauben und suchte nicht nach den häufigsten Fehlern, die man in Programmen erwarten kann, deren Fokus nicht auf Sicherheit liegt. Ich simulierte einen Angriff, der von einer App/Client-seitigen Schwachstelle ausging, der durch einen Kernel-Exploit Berechtigungen erhält (ich habe CVE-2014-3153 benutzt) – wie ich oben beschrieben habe. Es gibt sauberere Lösungen um die Ergebnisse anzuzeigen, aber ich wollte hier einfach nur einen Proof-of-Concept (POC) bringen. Telegram hat ein Feature namens „Secret Chat“ mit einem Vorhängeschloss (siehe oben), der sich sicher anfühlt. Ich entleerte den Prozessspeicher von Telegram und suchte nach Zeichenfolgen, die das Wort enthalten, das ich im Bild oben hin- und hergeschickt habe.
Wie man sehen kann — die Wörter Woof, Text, Shlookido, Cookiedo, Tambalul und NotSoEncryptedInMemory sind, nun … unverschlüsselt im Prozessspeicher. Jeder Angreifer, der Zugriff auf das Gerät erhält, kann die Nachrichten ohne viel Aufwand lesen. Die Secure-Chat-Nachrichten können im Klartext in Telegram’s Speicher gelesen werden. Diese Entdeckung brachte mich dazu zu überprüfen, ob es einen einfacheren Weg gibt, um auf den Inhalt der Nachrichten zuzugreifen — und ich war erfolgreich.
Während Telegrams Kommunikation verschlüsselt hätte sein sollen (sie wurde auch geknackt…)
Um meine Forschung abzuschließen, habe ich auf die Shell zugegriffen, die ich vorhin durch das Ausführen von CVE-2014-3153 erhalten habe, um mir die Dateien der App im Verzeichnis /data/data/org.telegram.messenger/ anzusehen, und ich habe eine Datei namens „Cache4.db“ im Files-Ordner der App gefunden:
Ich nahm an, dass bei „enc_chats“, „enc_tasks_v2“, das „enc“ wahrscheinlich für „encrypted“ stand, also holte ich mir diese Datei und überprüfte sie. Die Datei enthält unsere geheimen Nachrichten in Klartext!
Eine der interessantesten Funktionen der Telegram-App ist die „Nachrichten löschen“-Funktion. Bei meinem nächsten Versuch wollte ich auf sensible Informationen zugreifen und diese wiederherstellen, die zuvor vom Benutzer gelöscht wurde. Ich wollte gelöschte Nachrichten direkt aus dem Speicher oder aus der cache4.db Datei extrahieren.
1. Speicher
Ich klickte auf „Optionen –> Setze Selbstzerstörung auf 5 Sekunden“, und ich erwartete, dass sich die Nachricht löscht, aber auf beiden Telefonen ist nichts passiert. Es schaute wie ein Bug aus, nicht wie Sicherheits-Problem.
Ich löschte die Nachricht, indem ich auf „Optionen –> Löschen“ klickte.
Eine Untersuchung der cache4.db Datei zeigte kein Anzeichen für die Konversation. (Eine gelöschte Nachricht könnte für einen Angreifer interessanter sein.) Nachdem ich die cache4.db Datei untersucht hatte, schaute ich mir den Speicher an und war in der Lage die ursprüngliche Konversation zu finden, nachdem ich sie aus dem Speicher gelöscht hatte.
Zeitplan der Offenlegung:
Unten ist der Zeitplan der Offenlegung, den wir als Teil der Zimperium Zero-Day 30 Days Offenlegungspolitik befolgen. Wir haben mehrere Versuche angestellt, um das Sicherheitsteam von Telegram zu kontaktieren und warten seit über 30 Tagen auf eine Antwort von Telegram. Als Referenz ist hier eine Kopie unserer Politik:
- 17/1/2015 – Schwachstelle entdeckt
- 18/1/2015 – Schwachstelle verantwortungsbewusst gemeldet ZVD-2015-0100, ZVD-2015-0101, ZVD-2015-0102 – keine Reaktion des Anbieters.
- 23/1/2015 – den Anbieter um Kommentar gefragt – keine Antwort
- 03/2/2015 – den Anbieter um Kommentar gefragt – keine Antwort
- 06/2/2015 – den Anbieter um Kommentar gefragt – keine Antwort
- 23/2/2015 – Schwachstelle öffentlich gemacht
Empfehlung
Meine Schlussfolgerung ist einfach
Während Telegram mit einem noblen Ziel gegründet wurde, nämlich die Privatsphäre der Konsumenten überall und umsonst sicherzustellen, haben sie ihr Ziel verfehlt, indem sie sich ausschließlich auf Daten-im-Transit konzentriert haben und nicht auf ruhende Daten auf dem mobilen Gerät selbst. Bedauerlich ist, dass ich Telegram mehrfach deswegen kontaktiert habe und keine einzige Antwort erhalten habe. Die sogenannte starke Verschlüsselung von Telegram schützt Benutzer nicht besser als jede andere Internetseite oder App, die SSL verwendet. Wenn du Telegram benutzt, um deine Privatsphäre zu schützen oder nicht willst, dass deine verschickten Nachrichten gelesen werden, sei dir bewusst, dass es raffinierte Hacker nicht daran hindern wird, deine Nachrichten zu lesen. Wir empfehlen ihrem mobilen Gerät zusätzlichen Schutz zu verpassen, der Cyberattacken auf Geräteebene erkennen kann.
Um kritische Kommunikation besser zu schützen, hätte ich mir von Telegram (oder jeder anderen Chat-Software) erwartet, dass sowohl die Chat-Zeichenfolgen im Speicher als auch in der cache4.db Datei verschlüsselt sind. Das Mobile Threat Defense System von Zimperium hat die gesamte Angriffskette erkannt, die durchgeführt wurde, um den Inhalt der geheimen Nachrichten zu erhalten.
Hallo,
Schöner Bericht.
Frage.
Kannmann einen gelöschten geheimen Chat wiederherstellen???
Grüße Sascha
Sorry, keine Ahnung, aber im Zweifelsfall immer Screenshots machen.