Seit uns die Snowden-Enthüllungen gezeigt haben, dass die NSA und das UK nicht nur in der Lage sind, alle Verbindungen, die die Grenze passieren mitzulesen, sondern dies auch tun, ist eine deutliche Steigerung des Interesses an Verfahren für die Verschlüsselung von Kommunikation im Internet zu erkennen. Dieses begrüßenswerte Phänomen entwickelt jedoch zunehmend einen bitteren Beigeschmack durch neu entstehende Projekte, die aus Marketingzwecken grade jetzt aus dem Boden gestampft werden. Diese Projekte spielen mit dem gesteigerten Problembewusstsein der Bevölkerung, ohne dass sie einen wirklichen Schutz liefern.
Neben der "E-Mail Made in Germany" brüstet sich ein Projekt von zwei Studenten namens whistle.im damit, sichere Ende-zu-Ende-Verschlüsselung anzubieten. Auch sie legen Wert auf den lächerlichen "Made in Germany"-Slogan.
Auf den ersten Blick mag das Projekt sinnvoll erscheinen:
Doch schaut man etwas tiefer in das Projekt, so merkt man schnell, dass es sich mehr um hohle Phrasen handelt, als um Ansätze, die mit Sach- oder Fachverstand geprüft wurden. Dass hier grundlegende Konzepte schon vollkommen unbrauchbar implementiert wurden lässt nur eine Aussage zu: Das ganze System ist "Broken beyond Repair".
Bevor ich auf irgendwelche technischen Details eingehe, hier einmal ein paar Punkte, die sich direkt ergeben:
Wie sieht das ganze auf technischer Ebene aus?
Die Kommunikation der Anwendung erfolgt per JSON mit dem Server switch.whistle.im. Die Verbindung wird per HTTPS hergestellt. Da hier offensichtlich Profis am Werk waren, lauert hier schon er erste unverzeihliche Fehler: Das SSL-Zertifikat wird nicht geprüft. Für die Verbindung wird auch ein beliebiges, selbst signiertes Zertifikat akzeptiert.
Für dieses Geschenk kann man dem whistle.im-Team als Angreifer nur den größten Dank aussprechen. Die Mühe für den Server ein signiertes Zertifikat auszustellen hätte man sich in dem Zusammenhang auch sparen können. Die Verbindung könnte an dieser Stelle auch gleich unverschlüsselt sein.
Nachdem man die Kommunikation über einen transparenten Proxy seiner Wahl umgeleitet hat, der das vermeintlich sichere SSL-Zertifikat der Applikation gegen ein eigenes Zertifikat tauscht, hat man Zugriff auf die Kommunikation mit dem Server und kann diese beliebig modifizieren.
Die Kommunikation mit dem Server stellt sich als Unspektakulär heraus:
GET /keys/blubba2/5KsGE76Nvx8gOjsy7ia2TTtCUXdAgNQi HTTP/1.1 Host: switch.whistle.im Accept-Encoding: gzip Accept-Language: de-DE, en-US Accept: */* User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
HTTP/1.1 200 OK Date: Sun, 18 Aug 2013 12:03:45 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding cache-control: no-cache Content-Length: 2494 { "keys": [ "-----BEGIN ENCRYPTED PRIVATE KEY-----\r\nMIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIPuxzLnEn6okCAggA\r\nMB0GCWCGSAFlAwQBAgQQTbQRk2jToiPndgnKQWI+YwSCBNB4TvHh6YsG2MFE9BEK\r\nH8/WVWZswoFncqTSmFzyFegZhNOVSYSvyOFw6p8aCBv7kxeEyNi5GLaMe3COLvc7\r\nwyqZrJ4zDacjnTAYouQLe87vbzt2tpzgdBF2Y7wHR6cT6Fp2VsqiSgGgm6q+vLlR\r\nS+HnicoWrh3op+GogaXj+tTx1uFuXW3KFZASpAvwlQw/2YT+Q0lxTY2SmiMiNDqY\r\nq3kVgQz0FZEqRqHC5G9hZJDUcKEumKiiOVYNAwm5QhdYDCsEBPC2LFY8f1B/eeRt\r\n4K2e0Nt27ssFcYqIBHrMcYGjfT3x1qpaRiN+nVFQw8dA38zzfgWTUVYEx4Ng3oaa\r\nZM9HftAc87Sk3L+VV0FweeN7oJT8c/6A5dyKiAHlJC/Hz5vSBnls6I1Ngyq65SOR\r\n+6zjDaJujs7oDkuPwP3IGX7DFSCDRMPubkb42ce+fW/8x8WP2c3hz0Q/VaRv45Vi\r\nEkBD3oVvH/o3LBtnxjtHSwQzdBYxQuVQz5KRN+/BXGLwVYsC7R1pjvLlrvi4uUG7\r\njXl6EbBfhm61mSy/EZJL+022cQPAunynGKFLlOn2Y3+dRRQDgsTz7qsrdhROC2kn\r\nocUs8Tq0DD/pk372/m+HIkskQKDqGrLPGKM4GJqxV8zYr8prxFG0sdb8UkD2lwQ1\r\njWuv7YfzUc7JHRvlSmTnJ+2gAiogFn/DyUuu1App4jjBxTohBkyupUaz5HXpg8U8\r\n/9Ao6MytrKCUZYuU7WqOdpHAo2+e4rvzFuF/HJSbYbHJjh4dnxodhwnFEStfJA1x\r\nuOlmRinxYV4u4ubkSKK2mAiNms1sMwHZNNWFdRezIHOCwfNOHkm1vmOC1zVJ2LNS\r\nPMiiHh4Qg3KBsy/dyhSu1c/iZdRDDGnlKbAk2XqrbL9mZsLyE1X0LsnqBErfYf8x\r\nY54l8v9ufVboYtQje8qLr66aIIjh7AezJ5vnPha1/jEExHHGUD/xcTGnQf4R+stb\r\naaNyY+Vqv4k7rnpWYUBSJ6rZmAWT9L0niqyiiKzLDHfMa5R4WrUD+yn5nyV9RmMv\r\nlkmJ1zVhCXtqLrBUOPpV0aKswUWC9czXXm44IEMfmcr0ky/OoUSNr65Ee/5XbE7l\r\nmIGrIAr+I6jQMv/3Q+s4JRskJD+0CR40SkDqvuFzas3A47XL7QEw/fKumdrM2gUq\r\nF1m9+RB67c1vQtkCspi8C/YKO3DSQ37VSprsZdwe6yFwmwKYXFSfOEoRGqqA3I+c\r\nnVa9wfshsVMNclbWYFChzQc/eAFEKrcnaieM2UnXrq9lAohm99i5z6mzzhRy5CqF\r\nLukdxTUhQHdzYXqM/vLgMvfw25Uk6fZyLsm6vXHAfru8NqJvOzNVklik0vFfFXyj\r\nnZuVUZxPuB48l53LC2TvcwM2HmkAioKa99nTRCdOkyR04mkHOLRIk3CEF89JDa7G\r\niqfXKg8fxd7SxuKFO0dDJTflKWeQoXtRikVhJ7AIiCnna98Sa6Z1H3MQXiYRj7dE\r\nZxPpqVdvCv+MiXRVFgDidtTRR5XuwfDuCxbGknQ5hpfhrrUpwxdlYpf87u1Zfi9B\r\nsXtRYaZ4AhL597S8cWR1GDKD+o6jxwjy7basPVExUgzrDQpneWNs71pg3Do72Nql\r\nJoeEq+48GgSB/rNZ6T+EyVcQ5A==\r\n-----END ENCRYPTED PRIVATE KEY-----", "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2ArwcK9t8DhyBTGskFz+Yw1Y8M/iSING\nHfwTo0T4q+2J4zIkTP/A9QXG+jDFgfDB8Wfr7WSFtpIG5iqLz68M6bFzjwIvvWWAfceHuRNtjC79\nIn5NKQBJyqZEh3TT1HcYsJkwnQht4Q1JT7qRG1fIjVkhHHmaQU1YIa++oEC4t9i4tNdTeLjT2Tag\nT+35XsEql0+kWHYc/7t7k+1atFW8x65RcWk+Rh137fgGh8Jor4RLO5Wm1gggAjRFPlV+foq+3CHA\n8q+XiT996OBchhcgPdLrjMSNcGVSbk8uoOxba2MWLMyO0CAPaxAb+pngqyPdm6XC+bF260ax37xM\no5MCOwIDAQAB\n-----END PUBLIC KEY-----" ], "symkey": "F9aneGBMe/s01AcFCSYSa5NMRmu2f7iJdiWZCl2WlDU="
Wait? What? Richtig. Nicht nur der Public-, sondern auch der Private-Key liegen auf dem Server des Dienstanbieters. Obwohl die Website vermittelt, dass der Anbieter keinen Zugriff auf die Kommunikation hat, werden die Keys auf dem Server abgelegt. Diese sind zwar verschlüsselt, mit Kenntnis des Benutzerpasswortes kann aber Anbieterseitig die komplette Kommunikation nachvollzogen werden. Und hier wird natürlich das einzig wichtige Gebot der asymmetrischen Cryptographie gebrochen: Never publish your private key!
Durch diesen zweiten, gravierende Fehler liegen die keys nicht mehr beim Benutzer, sondern man ist auch hier wieder auf die Vertrauenswürdigkeit des Anbieters und seiner Software angewiesen.
Wenn die administrativen Kenntnisse der beiden Entwicker genau so fundiert sind, wie ihre Cryptographischen, dann kann jedoch hier sicherlich nichts schief gehen!!1
Im übrigen ist jeder Benutzer darauf angewiesen, dass die Entwickler auch immer brav eine Software ausliefern, die keine Passworter für die Private-Keys an die Dienstbetreiber ausliefern. Da kann man nun wirklich nicht mehr von "sicherer Ende-zu-Ende-Kommunikation" sprechen.
Aber weiter im Text, denn dies war erst der zweite Streich und der Dritte folgt sogleich ;)
Werfen wir doch mal einen Blick darauf, was passiert, wenn man nun mit einem anderen Benutzer eine Kommunikation beginnt:
GET /key/blubba2/9Xqe4hR7ZB6Y3jjK7aEsOaCrdVUxI3Fg/blubba1 HTTP/1.1 Host: switch.whistle.im Accept-Encoding: gzip Accept-Language: de-DE, en-US Accept: */* User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
HTTP/1.1 200 OK Date: Sun, 18 Aug 2013 10:57:36 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding cache-control: no-cache Content-Length: 471 { "key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyMSuK8sb/oChvl8Y9XH8IQtHJNwTUEt\nbr8F+PI2ajd5GywwB1tG6ZDyGZA8heDtjPhLSmSWDQi0m4C4+FbXOUVefIfYXctVGOOGT8Yi2Cwu\n4xhJGqCyXy5YCXQtddMLN9XXLotmqSX93R6JdlERHR+vDIStnRo2s5+UPARmW3ZRYu7wEKoYqBln\n8Ji9ewpObIL7Q8H6jnVbMQOhrNFw35CxmES8cKJ5J0PTxssKSXQr+3hldNRFZvuIT9arz1NXzAkO\n9mqzZXOtZZNizl7F+Gplr3P7SJnYzV5z3GzvMslkE1igJC1cVj1vja9dIvj48s36EAnxh7hpEWGS\nZiupKQIDAQAB\n-----END PUBLIC KEY-----" }
Zunächst wird also der Key des Kommunikationspartners vom Server abgerufen. Hier kann sowohl ein Angreifer, als auch der Dienstbetreiber einen beliebigen Key einfügen. Eine wunderbare Möglichkeit die Ende-zu-Ende-Verschlüsselung um einen Knotenpunkt in der Mitte zu erweitern und alle ausgehende Kommunikation mitzulesen.
Der Client merkt nicht mal, wenn man ihm einen anderen als den bisher bekannten Key unterschiebt. Wer die Keys aller Freunde auswendig lernt, könnte oben unter dem Nickname die Änderung des Keys erkennen. In diesem Fall erkennt man, dass der Fingerprint des RSA-Keys abweicht. Die Zielgruppe, die für die Software angedacht ist, wird dies wohl kaum erkennen können.
Außerdem puffert der Server alle Chatprotokolle:
GET /msg/blubba2/9Xqe4hR7ZB6Y3jjK7aEsOaCrdVUxI3Fg/blubba1?limit=5 HTTP/1.1 Host: switch.whistle.im Accept-Encoding: gzip Accept-Language: de-DE, en-US Accept: */* User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
HTTP/1.1 200 OK Date: Sun, 18 Aug 2013 10:57:36 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding cache-control: no-cache Content-Length: 3994 [ [ { "inc": null, "sig": "YZDqZc3yyViJa3eY6kY5tlk+T4UHKCQCPkNd2dmF/A8OGDu7ohTAFk7sXCTF3nkDhlht3Wi0zXtDEhZuxTb3AIxSSeN7GNKY2cei5EfLkzqWXnnXA5lWQvRuG9nuea9LIuNlOyxwgnOLHFE2yFNtilBwTBQLWh8x9eSQjc/ZDVXVc31ucbgWkQfWbw0Bof50PDx99BXARVWnccOn7WJt39Sse6Xym0G/7GT8Bm/wEFH6TpOklqHpnadQW5Vdij4wj34nRl76jJNPkeXrpyVP/e0LVe2/IZBY+NCaszWZxtdypfESLaCI3SZwf5sekE2pSsteZJKGlG8x1vklVEq7tw==", "enc": "nBv6IXtD8/LEULH6PjKJQ72Q9BBLD8J6KlGrgkovHXQAagCgx+7+7YuG+XbAaiu+LUsNBZhBUhJu5RX4f2uAPzmeRPXj16IOqN6Ub2Nj79HPJ/7aVrGS0TpQ4UaEgwElvI4LgFJ5VF2/fBeNGCArENmOT81DcqzmQygufDlDYG+fnta1caraSckzuUbO6D+NAaPm6hA6UNzoGBpKP9RhvwisAIkPeOG1x3GPoC1NbhcVlwiRNAaBvC4G5QSSFu1cq6jlj66LMmQh9MlrIFmakd0qo3/3UixF85pnfXMo1Xa8wY/TxWx2gkK7EBAGyByuTsYQ+LSah1YLnEIb0FdcWozn4qsXfSmbP2oxNdJaqlQ=", "to": "blubba2", "from": "blubba1", "_id": "5210a88383b007465601e704", "__v": 0, "time": "2013-08-18T10:57:07.009Z" }, { "inc": null, "sig": null, "enc": "m7+zsAcH17GdhpU0KYpyYI+Y9dH7nH5pIj0CXMaw3cRgx3/6yLUTbQmQP/Maye4KpSA0QOhphgOq12EWO1BnGdskRy6ZCaTR5APgBhw8JogCX9oG+7t5JfkPNS3MN+KP2s2kUo5n72GgxxagPi5GssAgTF+1BFonGwVdjF/Q22wzeqvtPbLrmlXoHv9liT5tKBZEY0rsLgnf/W+JBk3UwSw+ZwcDDwlSIsUWuzv4oDcgFlPpHsyAkSmNDMA8heqBkQ3hPiLh14AuEn8lL6kJ0qo0mAG2Ob3nvZ3cshla3iMaPnfRUxfawXFuj7VO6yljpfOuXQ6llEsE4649mbRqaKC53cDZLp64EufCWEvhokVzoisd8yKMkWAt4SO7odzW", "to": "blubba1", "from": "blubba2", "_id": "52109f5f83b007465601df0e", "__v": 0, "time": "2013-08-18T10:18:07.093Z" }, { "inc": null, "sig": null, "enc": "LodfsnfCs5JZpHm/YnQ/zYWIRqFHA5t2CihkOW42crZ0qjaqp6MePHEi3MQu6snkPDLGfFfjyyFWaGQO3l9sKlK68hHDN4/o8tJk06lKEfv4mbh/qbUXK6ujY5K0t7gAKaODibkUFdzUwAvkEhzLhpEQKFL18Y/hlPGbP+ubmfZEXNUcHbm9LNvZvNfA2X3Rl24LyEFUcMrCG6DNsHoW3j/oM0Nu7TyLp9ESJZaCLiQEw4zUxHa6ipz0HPjy7hHaVQPxBRGEPdzWBBmqFLddlQXvMq2dB3exKGEGxWum48BTolNb6ea0OKP4UEU5B3hOgzAORRW7fRdppinMu/rfZ3x/wCtB5HEesKZyMz/4DxdB2uQfAlME5e7Guj8i3rKj", "to": "blubba1", "from": "blubba2", "_id": "52109f5883b007465601df03", "__v": 0, "time": "2013-08-18T10:18:00.310Z" }, { "inc": null, "sig": "LqWR8HdI65kKOmHV6NA9SWvk9qt1xDfNCaQL1B6vli7wiMYQjBR2QSd3v6qUMnY/l++RQZjVO6UQBVwGXRqNhsh9rmQTf3V5QvxTIDsgDFw0idtVyO1Kjc24CZhtaDr8fw5HECOg7Io7bwsCF1oEatZl1VxOkItyI//wCvG2HWE1j/67PEUS4sxe8tN+7Bpjz/05afdhj310+oScC5M+AFiqJM8xdkqFSBs/JPK56DxTTDHhOexoiqlBwJ7TZSwNwco0RXEbt2J8Wet4w30YpgYl6fZKVVNMifUVQA8laKs/7mFz4rKOMNKdY+/KkKZ2493EnbjimgXs83Ww9nJ79w==", "enc": "YJ4+dqDimSiDCmeO0WVMvpMOjEmEtsAO/99QH0PCZEO6OXZF8ntcT5rwze88gvFax44B3BbAovaPDwnEFMzF1Mk++TWPhBxhu4xQtYQXIY3KtZmLS8WZI71g1sFqebT9+ZKcyuR9RaD6fKhwmNxFCmQUm1yInaO3Q/cmUSFfAU1AJ+v/TniF1wKu1h/IlSqGj/C1i0Eh1lpUIyMxRQSyXoQvwfL9wgP+v4nzQZ2dKtakGmkhdCKnjNi0fOHcznTq1KjU22An6eLyHisk80/5TMYHGhx1YKnoisnq2ax51XGcZaSua/A4BHDTkVe9Gwmw/LGBgmRW6WLxe2h1p0A74thxQf/9xv/IfsI+iLCZ2MDSt4M+ktWQWmx5kr/HBPWY", "to": "blubba2", "from": "blubba1", "_id": "52109f3583b007465601ded6", "__v": 0, "time": "2013-08-18T10:17:25.049Z" }, { "inc": null, "sig": "VOpAsdnGIVKAh4+DtrkaKhKdkxidrIDXmhHtTPZH2QhFfxc5n3P5wrhTBxL46igQEcKvtxTCP3khWcCgdYUVPV4uhqMiWVlmXA4I1InKftIB/Sc0S5MRAuLl3msklCkgAYrADpqCGulqUhT7cyFeI5jPG/VKf83OEw1FBH5ENEXDDkuNfazEJFMP81WRAgKk2n3Q7qvdWTbBrk/VaYvBnLUnvC1DRobYsI9zgoe/BanUsVd0yFT2GemrhmiBzzXQr7RoXlgIu9J2qCarU9LzHZ2V5104Gzt9xQT8v+Q295udV8LnsNN8RBN47Hugziq1V+JJlddK9eLTF/Hu/bd8Bw==", "enc": "cCh1HtsTuYpNaS3eSjKQbTJjuQQ6l8pTLIhEGSTR/WySNy76j/fZas/vd5ijO09AVU+29Q4JWR5y6xa5Wr/+yKa5WC9zt9fHVm9fF4fPx1jXeAN0s0/d1AXJ4zVdVbSenkaeDt+LX47jBRJDih3pf2XQQKsBWZzBd1fv38vHSu/CP8nDD1EpKx0HBmcWhUHwSUiDZmHVBCb1D01C8/K4WAv7nI5v9XWf7i4BPA70yzShq28poLRnk2Cn7nnvtCh4OkqG2Xm/9w9OLbN8qVUBPa2cQKcNZ2dojxchtMFQ25SzeQF5aerx/SQ8qmOleFctj7SBYkUAO/5uucqNV+xQrKafY+cIicJ7S1ORa8Vw1IQ=", "to": "blubba2", "from": "blubba1", "_id": "52109f2b83b007465601ded1", "__v": 0, "time": "2013-08-18T10:17:15.405Z" } ], true ]
Diese Speicherung auf Vorrat ermöglicht es dem Serverbetreiber die Nachrichten nachträglich zu lesen, wenn das Passwort zum Entschlüsseln des private Keys vorhanden ist.
whitsle.im erlaubt einem Benutzer nicht einmal einen kompromittierten Key zu tauschen. Einmal zum Server übertragen, liegt dieser dort dauerhaft. Wird das Mobiltelefon mit einem Trojaner infiziert, so kann der Key ausgespäht werden. Ein Benutzer ist danach gezwungen ein neues Konto anzulegen. Also nicht einmal ein brauchbares Key-Management wurde hier implementiert.
Alles in allem ein vollkommen undurchdachtes Konzept. Die aktuellen Analysen kratzen bisher nur an der Oberfläche und decken eklatante Sicherheitsmängel und ein grundlegendes Missverständnis kryptographischer Algorithmen auf. Statt sich mit existierenden Lösungen zu beschäftigen und diese zu verbessern, wird hier durch den Versuch ein neueres, bunteres Verfahren zu entwickeln eine cryptographische Bauchlandung vollzogen.
Viel mehr sollten sich die Entwickler einmal umschauen um festzustellen, dass bereits brauchbare Lösungen für sichere Kommunikation existieren, die eher an einer benutzerfreundlichen Integration kranken. Stichworte wären hier OTR oder GnuPG über XMPP. Beide Protokolle haben ihre Macken. OTR beispielsweise ist Anfällig für DoS-Attacken. Allerdings können sie im Gegensatz zu whistle.im ein wenig Sicherheit bieten.
Nur eins leistet diese Software tatsächlich: Aktuell wird whistle.im als WhatsApp-Alternative gehandelt. In Sicherheitsmängeln steht es damit seinem Vorbild in nichts nach.
Kontakt | |
Autor: | nexus |
Mail: | nexus (at) hannover (.) ccc (.) de |
Update:Ehrlich gesagt hatte ich nicht wirklich damit gerechnet, dass von diesem Text in der aktuell beobachteten Masse Notiz genommen wird. Daher bitte ich alle Leser für die grausamen Rechtschreibfehler um Verzeihung. Auch der grausame Denglish-Mix ist wohl eher der eiligen Niederschrift zuzuschreiben.