Alternativen zu WhatsApp und Facebook Messenger haben in den letzten Monaten an Bedeutung gewonnen, auch wenn alles in allem weiterhin der überwiegende Teil der Chat-Kommunikation über die Facebook-Apps läuft. Unter den Alternativen haben vor allem Telegram und Signal globale Verbreitung gefunden, daneben gibt es noch eine ganze Reihe von Apps welche von den Nutzerzahlen her momentan eher Nischenprodukte sind.
Telegram wird monatlich von über 500 Millionen Menschen genutzt. Auch wenn die App aufgrund der undurchsichtigen Besitzverhältnissen, der fehlenden Offenlegung des Server-Sourcecodes und der starken Nutzung durch Verschwörungstheoretikern teilweise einen schlechten Ruf hat, wird sie nicht zuletzt durch Aktivisten und Regimekritiker gerne gebraucht, da sie ohne Offenlegung von Telefonnummern und ähnlichen identifizierenden Merkmalen nutzbar ist. Offiziell gilt Telegram als sicherer Messenger mit Verschlüsselung, ein Claim welcher auch auf der zugehörigen Webseite aufgeführt ist („Telegram messages are heavily encrypted and can self-destruct“). Technisch gesehen gilt es aber verschiedene Sicherheitsstufen:
- „normale“ 1:1-Chats (wie auch bei Gruppenfunktionen etc), bei denen nur die Kommunikation zwischen der App und dem Telegram-Server verschlüsselt wird, auf dem Server selbst die Nachrichten aber grundsätzlich lesbar sind. Telegram selbst begründet dies damit, dass User dadurch von jedem ihrer Geräte auf ihre Chats zugreifen können. Dass es auch anders gehen würde, zeigt zum Beispiel Signal, bei welchem auch Gruppenchats end-to-end verschüsselt sind.
- „secret“ Chats welche in 1:1-Chats explizit aktiviert werden müssen und bei denen dann end-to-end-Verschlüsselung eingesetzt wird
Hier soll es jetzt nicht um die mit dieser Unterscheidung verbundenen Problematik bezüglich Vertraulichkeit und der Möglichkeit, auf den Telegram-Servern sämtliche Chats mitzulesen gehen. Sondern um das für die Kommunikation zwischen App und Server eingesetzte Protokoll.
Grundsätzlich ist die sichere Kommunikation zwischen einem Client (also der App) und einem Server ein (Implementierungsfehler mal ausgenommen) gelöstes Problem, Browser setzen hierzu seit Jahren SSL und TLS ein. Telegram hat sich für ein selbstentwickeltes Protokoll namens MTProto entschieden und begründet dies mit
In order to achieve reliability on weak mobile connections as well as speed when dealing with large files (such as photos, large videos and files up to 2 GB each), MTProto uses an original approach. This document is intended to clarify certain details of our setup, as well as address some points that are difficult to understand at first glance.
[…]
While other ways of achieving the same cryptographic goals, undoubtedly, exist, we feel that the present solution is both robust and also succeeds at our secondary task of beating unencrypted messengers in terms of delivery time and stability
FAQ for the Technically Inclined
Der Nachteil von proprietären Protokollen ist, dass diese von Sicherheitsforschern nur selten oder gar nicht untersucht werden. Oft ist auch die Dokumentation unvollständig und/oder der Quellcode nur teilweise zugänglich, was unabhängige Reviews ebenfalls erschwert. Kein Wunder also, dass MTProto bisher nicht im Detail untersucht wurde, was gerade in Anbetracht der Verwendung von Telegram durch Aktivisten und Protestgruppen gefährlich sein kann.
Um was geht es?
Eine Gruppe von Sicherheitsforschern aus London und Zürich (mitbeteiligt war etwa die ETH Zürich) haben daher in den letzten Monaten eine detaillierte Sicherheitsanalyse von MTProto durchgeführt. Entdeckt haben Martin R. Albrecht, Lenka Mareková, Kenneth G. Paterson und Igors Stepanovs dabei mehrere Schwachstellen:
Die Reihenfolge von gesendeten Nachrichten kann geändert werden
Es ist für einen Angreifer relativ einfach (zB durch einen entsprechend manipulierten WLAN-Router) möglich, die Reihenfolge der von einem Chat-Teilnehmer versandten Nachrichten zu verändern. Er kann sich hierzu den Umstand zu Nutze machen, dass beim Empfänger die Nachrichten basierend auf dem Zeitstempel angezeigt werden, dieser Zeitstempel aber erst beim Eingang der Nachricht auf dem Telegram-Server gesetzt wird (also nicht schon durch die Absenderin). Wenn der Angreifer einzelne Nachrichten auf dem Weg zwischen Absenderin und Telegram-Server quasi ausbremst, erhalten von der Absenderin später abgeschickte einen früheren Zeitstempel und werden bei der Empfängerin entsprechend sortiert.
Der Effekt ist allerdings mittelfristig auch durch die Absenderin von Nachrichten erkennbar. Spätestens wenn ihr Chat-Client die Chat-History neu vom Telegram-Server lädt (oder sie die Unterhaltung auf einem anderen Gerät weiterführt), wird der Chat auch ihr in der manipulierten Reihenfolge angezeigt.
Nachrichten können (theoretisch) während der Übertragung gelöscht werden
Eher theoretischer Natur ist die Möglichkeit, basierend auf dem obigen Angriff spezifische Nachrichten während der Übertragung zu unterdrücken und so zu löschen (indem man sie quasi endlos zurückhält). In der Praxis wird dies dadurch verunmöglicht, dass Nachrichten von der App des Empfängers jeweils bestätigt werden und die App des Absenders eine Nachricht automatisch erneut sendet falls die Bestätigung ausbleibt. Da eine erneut versandte Nachricht jeweils auch erneut verschlüsselt wird, wäre es für einen Angreifer äusserst aufwändig hier den Überblick zu bewahren.
Empfangsbestätigung gibt Zusatzinformationen preis
Während die obigen zwei Probleme grundsätzlich die Manipulation von Nachrichten und damit die Irreleitung von Benutzern erlauben, handelt es sich hier um eine Schwäche welche vor allem für Sicherheitsforscher interessant ist: Die oben bereits erwähnte Empfangsbestätigung fällt für die Bestätigung der ersten Übermittlung bzw. für die Bestätigung einer automatischen Neu-Versendung unterschiedlich aus. Einem Angreifer wäre es also grundsätzlich möglich, aufgrund der Empfangsbestätigung zu erkennen ob die Nachricht im ersten Anlauf zugestellt werden konnte oder ob eine Neu-Versendung notwendig war. Es ist nicht klar, ob und wie diese Schwäche ausgenutzt werden könnte. Aus Sicherheits-Aspekten heraus ist es aber elementar, dass keine unnötigen Informationen preisgegeben werden (weil sich diese unter Umständen für einen anderen Angriff nutzen lassen).
Extraktion des Klartexts
Eine weitere eher theoretische Attacke könnte es erlauben, Teile des Klartexts von verschlüsselten Nachrichten zu ermitteln. Dazu wäre es allerdings notwendig, Millionen von speziell präparierten Nachrichten an einen Empfänger zu schicken, was schon rein aufgrund der Menge unrealistisch erscheint.
Es braucht wohl keine nähere Erkärung dazu, dass es äusserst bedenklich wäre wenn diese Schwäche in der Praxis ausnutzbar wäre (da dann die Vertraulichkeit von Telegram-Nachrichten an sich in Frage gestellt wäre). Insofern ist es beruhigend, dass es eine grosse Anzahl von speziellen Nachrichten brauchen würde um die Schwäche auch auszunutzen. Weniger beruhigender ist allenfalls, dass dieses Hindernis nicht explizit Teil des MTProto-Protokolls ist, sondern schlicht aus der Tatsache folgt, dass Nachrichten am Schluss ein paar zufällige Bytes angehängt kriegen…
Belauschen der Kommunikation zwischen App und Telegram-Server
Hat jemand die technische Möglichkeit, innert Minuten Milliarden von Nachrichten an den Telegram-Server zu schicken? Gratuliere, damit wird ein Attacker-in-the-middle-Angriff auf die Kommunikation zwischen Telegram-App und -Server möglich, welcher ein Belauschen sämtlicher Nachrichten erlauben würde. In der Praxis ist dies mehr als unrealistisch womit auch dieser Angriff zwar theoretisch möglich, praktisch aber nicht nutzbar bleibt.
War’s das?
Darüber hinaus haben die Sicherheitsforscher feststellen müssen, dass…
- es keine etablierte Spezifikation von MTProto gibt und sowohl die verfügbare Dokumentation von der Implementierung in den Apps abweicht, so wie auch Differenzen in der Implementierung der Apps vorhanden sind. Es ist daher nicht ohne weiteres klar, wie genau sich jetzt ein Apps zu verhalten hat um „konform“ zu funktionieren und mit dem Telegram-Server zu kommunizieren,
- App und Server bezüglich einzelner Datenelemente in verschlüsselten Nachrichten von Annahmen über das Verhalten der jeweiligen Gegenseite ausgehen (wie das Beispiel des Reorderings zeigt, wo der Server davon ausgeht, die Nachrichten von der App in der richtigen zeitlichen Reihenfolge zu erhalten, dies aber nicht explizit verifiziert). Dies ist teilweise eine Konsequenz der nicht verlässlichen Spezifikation, teilweise aber auch inhärent Teil von MTProto. Von praktischer Bedeutung ist es insofern als dass Entwickler von Dritt-Apps innerhalb des Telegram-Universums zwar mit den publizierten APIs schnell zum Ziel kommen, dabei aber viel Kontextwissen mitbringen müssen um konforme und vor allem sichere Apps zu entwickeln. Es ist nicht auszuschliessen, dass diese Dritt-Apps ihr eigenes Set an Sicherheitsproblemen haben,
- die Implementierung von MTProto nicht konsequent zwischen dem eigentlichen Verschlüsselungsprotokoll und der Interpretation der Benutzer-Nachricht unterscheidet (quasi wie ein Lieferwagen (Verschlüsselungsprotokoll) bei welchem je nach Ladung (Nachricht) das Lenkrad rechts oder links wäre). Damit wird ein Grundprinzip der Software-Entwicklung verletzt, wonach unterschiedliche Funktionsgruppen (hier die Verschüsselung von Nachrichten und die Unterscheidung, ob eine Nachricht nun ein Text oder ein Bild ist) getrennt gehalten werden sollen um das Testing zu vereinfachen und um zu vermeiden, dass sich aufgrund der durch die Vermischung erhöhten Komplexität schwer zu erkennende Fehler einschleichen.
Was heisst das jetzt für Telegram?
Die gute Nachricht vorneweg: keine der Schwachstellen scheint nach heutigem Wissen zu grundsätzlichen Problemen mit Telegram zu führen. Dritte können keine Nachrichten zwischen App und Server abfangen und entschlüsseln, man braucht die App also nicht zu deinstallieren. Bei den meisten der Schwachstellen verhindert der zur Ausnutzung notwendige Aufwand einen möglichen Angriff, bei der Reordering-Schwäche bleibt die sich ändernde Reihenfolge der Nachrichten dem Sender nicht verborgen. Aus sicherheitstechnischer Sicht hat das Protokoll aber Schwächen welche zur Absicherung behoben werden müssen. Telegram wurde durch das Forschungsteam bereits im April über die Schwächen informiert und hat sie im Rahmen ihrer regelmässigen Releases behoben.
Interessant ist die Analyse aber insbesondere auch, da sie demonstriert, welche für Normalbenutzer oft irrelevanten Details für Sicherheitsforscher von grösstem Interesse sind. Für diese zählt schlussendlich jede auch noch so theoretische Schwäche da nicht ausgeschlossen werden kann, dass diese in einem anderen Kontext dann nicht doch praktisch nutzbar wird. Die Analyse zeigt aber auch, dass zu einer vertrauensvoll nutzbarer Chat-Infrastruktur mehr gehört als eine im Sourcecode vorliegende Chat-App und ein dokumentiertes Kommunikationsprotokoll:
- Das Verhalten des Telegram-Servers ist weitgehend unbekannt, der Sourcecode des Servers öffentlich nicht einsehbar. Ob sich hier sicherheitsrelevante Fehler verbergen oder ob der Server sämtliche Nachrichten (im Widerspruch zur dokumentierten Funktionalität) im Klartext speichert und an den Geheimdienst von Alpha Centauri schickt, ist schlicht nicht erkennbar.
- Die Implementierung von auf MPProto aufbauenen Apps ist (wie schon erwähnt) potentiell fehlerträchtig, da es keine vollständige Dokumentation der Schnittstellen gibt und MTProto anfällig für Fehlverwendungen ist.
- Für ein sicheres Protokoll reicht es nicht, die typischen Elemente eines sicheren Kommunikationsprotokolls (Hash-Funktionen, Public Key Encryption etc) einzusetzen, sie müssen im Rahmen der Verwendung auch sicher sein (wenn man zum Beispiel eine Hashfunktion einsetzt um einen zufälligen Datenstrom zu erzeugen, dann muss die verwendete Hashfunktion auch effektiv pseudo-zufällige Resultate liefern). Dies ist aber bei MTProto nicht der Fall, da einzelne Elemente auf eine Art verwendet werden bei welcher die Sicherheit nicht a priori gegeben ist (die Sicherheitsforscher vergleichen das mit einer Autobahnfahrt mit einem Auto, welches zwar Bremsen eingebaut hat, diese aber nur bei Geschwindigkeiten unter 50 km/h getestet wurden).
- Proprietäre Kommunikationsprotokolle tendenziell gegenüber etablierten Standards bezüglich Sicherheit im Nachteil sind, da sie nicht oder selten auf Schwachstellen untersucht werden.
PS: Wer die Ergebnisse im Detail ansehen will, wird unter https://mtpsym.github.io/ fündig.
UPDATE: Telegram hat ebenfalls einen lesenswerten Überblick veröffentlicht.