2019-11-21 6 Minuten

Ich habe mir die Lernsieg App genauer angesehen (und dann war sie leider offline)

Mit einem sogenannten Man-in-the-middle-Angriff kann man die Kommunikation einer App analysieren. Ich hab das mit Lernsieg mal probiert.

Meine erste Reaktion, wenn irgend eine App, oder ein Tool viral geht, ist: kann man das irgendwie anders verwenden, als es gedacht ist?

Wie kann man das System umgehen?

Und wenn diese App dann noch so viel Kontroverse erzeugt wie die Lernsieg-App, legt sich bei mir der Detektivschalter wieder um.

Und wenn man dabei noch etwas über Sicherheitsmechanismen von Apps lernt, um so besser. Aber natürlich ist das ultimative Ziel, irgendeinen Weg zu finden, die Ratings zu manipulieren. Sonst wär ja fad.

Zuerst aber einmal ein Einblick, wie denn so eine App eigentlich aufgebaut ist.

Wie ist eine App eigentlich aufgebaut?

Nun, da gibt es die App auf deinem Handy. Aber es muss auch irgendwo einen Server geben, auf dem die Daten

  • Gespeichert
  • Angelegt
  • Gelöscht
  • Abgefragt

werden. Ich habe das hier mal in einer Grafik verdeutlicht:

Für uns heißt das: Irgendwo laufen – im konkreten Fall von Lernsieg – Server, und alle Smartphones mit der App verbinden sich dort hin.

Sie kriegen dort ihre Daten, und dort fließen auch die Bewertungen hin.

Aber natürlich kann man sich nicht zum Server verbinden und:

“Ich möchte bitte Herrn XY negativ bewerten”

schreiben. Das ganze muss natürlich maschinenles- und verarbeitbar sein. Dafür gibt es die sogenannte API, die Programmierschnittstelle.

Und die müssen wir uns mal genau ansehen. Aber nicht erst seit der DSGVO ist jegliche Kommunikation zwischen App/Webseite und Server verschlüsselt. Ansonsten wäre jedes Formular, das wir absenden entlang der orangen Pfeile oben von jeder einzelnen Partei lesbar!

Das wollen wir nicht.

Beziehungsweise: In diesem Fall will ich das schon. Ich will genau wissen, was zwischen App und Server hin und her fließt. Dafür bediene ich mich dem sogenannten Man in the Middle.

Der Mann in der Mitte

Normalerweise ist die Kommunikation von Lernsieg und Server verschlüsselt:

Ich als “Angreifer” kann da nicht wirklich gut reinblicken. Selbst wenn ich den genauen Traffic mitschneide, ich werde an keine Infos kommen.

Aber was, wenn ich mich zwischen die beiden Komponenten stelle?

Dafür sind ein paar Schritte nötig:

  • Ich muss der App vortäuschen, dass ich eh sicher (heißt: Via TLS) kommuniziere
  • Die App muss mir glauben

Im Endeffekt wird also die Kommunikation auf ihrem Weg einmal kurz entschlüsselt, und dann wieder verschlüsselt weitergeschickt.

Der Server glaubt, er redet mit der App. Die App glaubt, sie redet mit dem Server. Ich rede mit beiden.

Ich starte mein Tool, und lege los.

Dieses Szenario hier ist eine Laborsituation – das wird so in der echten Welt nicht so einfach machbar sein. Für meine Analyse hier musste ich z.B. auf meinem Smartphone einige Einstellungen treffen, damit es meiner Man in the Middle Software “vertraut”.

Ich starte die Lernsieg-App, und hoffe.

Das hier ist der kritischste Moment des Ganzen, denn:

Es gibt einen Weg, auch diese Analyse zu verhindern. Das ist zwar ein wenig technischer, aber eine App kann bestimmen, dass sie nur bestimmten Verbindungen traut.

Die Ebenen des Vertrauens

Sehen wir uns noch einmal die Grafik an, sehen wir, dass plötzlich zwei Schlüssel sichtbar sind. Das heißt, es finden zwei gesonderte verschlüsselte Verbindungen statt.

Für jede einzelne Verbindung muss die App dem Gegenüber vertrauen. Und – ganz wie im echten Leben – gibt es mehrere Ebenen des Vertrauens.

So vertraut TikTok zum Beispiel nur Verbindungen mit bestimmten Schlüsseln. Deshalb habe ich es nicht geschafft, TikTok auf diese Art zu analysieren.

Lernsieg ist dies jedoch egal. So lange die Verbindung verschlüsselt ist, wird ihr vertraut. Auch wenn das Sicherheitszertifikat plötzlich von maninthemiddle.com kommt, und nicht von lernsieg.com.

Ich kann also endlich ansehen, wie Lernsieg im Hintergrund aussieht.

Dass dies möglich ist, heißt noch lange nicht, dass die App unsicher ist. Das ist keineswegs der Fall. Es heißt nur, dass es für mich möglich ist, die Kommunikation genauer zu analysieren.

Trotzdem ist das so genannte Certificate Pinning best practice.

Die Lernsieg API

Zeit, die Struktur von Lernsieg zu analysieren. Ich klicke normal in der App herum, und sehe mir an, wie die Kommunikation aufgebaut ist. Ich finde mehrere sogenannte Endpoints, dass sind Anfragen, die an die API gestellt werden können – und die etwas bewirken, oder zumindest Daten zurückliefern.

Technisch sieht das zum Beispiel so aus:

  • /api/v1/schools liefert eine Liste aller Schulen, die es in der App gibt.
  • /api/v1/teachers liefert alle Lehrer
  • /api/v1/user/schools liefert die Schulen eines bestimmten Users.
  • /api/v1/schools/8d0d0f03-c6bf-4c7b-a6f7-f75baef3e8d2 liefert Informationen zu einer bestimmten Schule, wobei die kryptischen Zahlen und Buchstaben die einzigartige ID einer Schule sind.

Man könnte sagen, diese Endpoints sind die Türen, wo mir die Lernsieg API antwortet, wenn ich anklopfe:

Schabernack?

Jetzt kann ich mich endlich um die wirklich wichtigen Sachen kümmern: Unfug anstellen. Ich probiere durch, wie man ein Rating absendet. Das sieht (gekürzt) technisch so aus:

POST /api/v1/teachers/ab5df630-734f-44e5-a574-5bb37056a3aa/ratings HTTP/1.1
Host: lernsieg-service-prod.allaboutapps.at

[{„categoryType“:“lesson“,“rating“:5},{„categoryType“:“fairness“,“rating“:5},{„categoryType“:“respect“,“rating“:5},{„categoryType“:“motivating“,“rating“:5},{„categoryType“:“patience“,“rating“:5},{„categoryType“:“preparation“,“rating“:5},{„categoryType“:“assertive“,“rating“:5},{„categoryType“:“punctually“,“rating“:5}]

Das ist also, was übers Internet geschickt wird, wenn ich einen zufälligen Lehrer mit 5 Sternen bewerte.
Das ließe sich theoretisch auch automatisieren. Wenn ich weiß, wie die Kommunikation aussieht, kann ich das ohne Smartphone und App machen. Das ist mein Plan:

Aber natürlich muss irgendeine Art der Authentifizierung und Autorisierung auf Seiten Lernsieg stattfinden. Sonst könnt’ ja jeder kommen, wie man in Österreich zu sagen pflegt.

Dies funktioniert bei Lernsieg über SMS.

Und das System ist gar nicht so unausgeklügelt. So muss man sich keinen Account anlegen (auch etwas, das irrsinnig leicht automatisierbar ist), sondern via SMS die eigene Handynummer verifizieren.

1 Account pro Handynummer heißt nämlich: ich brauche mehrere SIM-Karten, oder muss mehrere Personen davon überzeugen, ebenfalls zu voten.

Das ist ein erheblich größerer Aufwand, als einfach einen Account anzulegen. Auch ist die Anzahl an Fake-Votes, die eine Person ins System bringt, realistisch nach oben hin stark begrenzt.

Fast jedes Voting im Internet ist manipulierbar. Bei Lernsieg finde ich, ist hier ein guter Weg zwischen Bequemlichkeit und Sicherheit gewählt worden. Um das System zur Gänze unmanipulierbar zu machen, hätte man wohl auf die Bürgerkarte zurückgreifen müssen.

Liebe Lehrer, das heißt nicht, dass ich das System der App an sich gut finde.

Aber zurück zum Thema Schabernack. Eigentlich hatte ich noch ein paar Ideen die ich gerne ausprobiert hätte:

  • Misskonfigurationen in der Datenbank
  • Telefonnummern fälschen via Programm und so mehrere Accounts anlegen

Leider ist die App inzwischen offline genommen worden.

Fazit

Das schöne an meiner Tätigkeit ist:

Auch wenn ich nichts finde, das eine “große” Story rechtfertigt, ein Blogartikel ist immer drin. Immerhin kann ich Lernsieg nach einer oberflächlichen Analyse ein gutes Zeugnis ausstellen. Da können sich einige Unternehmen noch ein Scheibchen abschneiden.

Und wir haben alle über den Man in the middle gelernt. Ein erfolgreicher Tag.

Von Hackern, Wordpress, SEO & Co

  • Wo kommt mein Spam her?
  • Wie leicht ist es, eine Wordpress Seite zu hacken?
  • Wie Umzugsfirmen ihre Gaunereien mit SEO umsetzen

...wöchentlich in deiner Inbox! 🚀

4 Kommentare

  1. Ich habe mir die App auch mal näher angesehen und konnte feststellen, dass die Authentifizierung via SMS nur mittelmäßig gut umgesetzt wurde. Zwar findet der „Standard-User“ nicht so schnell eine Möglichkeit, um die Authentifizierung zu umgehen aber wenn man sich einen Anbieter aussucht, über den man SMS verschicken kann, bei dem man den Absender frei wählen kann hat man schon gewonnen. Das System erkennt nicht den Unterschied zwischen einer „echten SMS“ von einer Handynummer und einer SMS, deren Absender eine Handynummer als String ist. Ich habs mal ausprobiert und bei einem Budget von 20€ ist es möglich eine gesamte Schule voll automatisiert und doch mit einer realistischen Anzahl an Bewertungen pro Lehrer zu bewerten.

Schreibe einen Kommentar

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