User Tools

Site Tools


public:project:kidnapping:noom

KidnAPPing: Noom Coach:

oder: Sag mir was du isst, und ich sag dir wer du bist!

Autoren

- /)/)

Prosa:

Abnehmen fällt beinahe niemandem leicht. Neben einer Vielzahl an Verlockungen im Alltag mit denen sich Zucker und Fett oftmals gut getarnt in unsere Körper mogeln ist es oft auch eine Frage der Aufmerksamkeit: Stress und Hektik verbannen die Nahrungsaufnahme oft auf einen Nebenschauplatz - und das hat Folgen:

Wer Abends nicht mehr weiß, was er den Tag über zu sich genommen hat, hat auch unter Tags kaum Kontrolle darüber wann er wie viel isst - und vor allem ob der Körper eigentlich schon genug hätte.

Was also tun? Die Antwort ist simpel und effektiv: Ein Haushaltsbuch führen - in diesem Fall ein Kalorienhaushaltsbuch. Und da wir mittlerweile alles mit unseren Smartphones lösen, gibts auch hier eine App:

Noom ist eine der bekanntesten Apps zum Food Logging. Nutzer loggen jeden Konsum, sei es eine Hauptmahlzeit oder ein kleiner Snack, mit Menge und Kaloriegehalt (mit verschiedensten Methoden um dies so einfach wie möglich zu gestalten) und haben jederzeit Überblick über ihr Kaloriebudget.

Regelmäßiges Einwiegen hilft der App, Gewichtsschwankungen zu erkennen und den idealen Intake zu berechnen, ein eingebauter Schrittzähler und die Möglichkeit, sportliche Aktivitäten aufzuzeichnen beeinflussen nicht nur das Kaloriebudget sondern auch den intelligenten “Coach”, der mit Tips und Tricks mehrmals täglich versucht, das Essverhalten positiv zu beeinflussen.

Gamification durch zu erwerbende Punkte sorgt zusätzlich für Motivation und falls das nicht reicht, bildet die App Gruppen mit Nutzern aus der Umgebung, damit man sich mit “Leidensgenossen” vernetzen und über in-app Messages Mut zusprechen kann.

All diese Informationen sorgen für ein extrem umfassendes Profil der Nutzer einer solchen App. Und die Nutzerbasis von Noom ist groß: Über 100.000 Bewertungen(!) im Play Store zeigen, dass es an Datenquellen nicht mangelt, die Zahl der Nutzer die keine Bewertung hinterlassen, ist schwer abzuschätzen.

Wie sicher sind die Daten der Nutzer also bei den Anbietern derartiger Applikation?

Analyse

Daten, die Noom im Rahmen der Nutzung (sowohl aktiv als auch passiv) erfasst:

Im Rahmen der Profileinrichtung

  • Nickname
  • Alter
  • Größe
  • Geschlecht
  • Startgewicht
  • Sprachpräferenz
  • Zeitzone / Offset
  • Profilbild
  • Persönlicher Beschreibungstext
  • Bekannte Krankheiten
  • Temporäre oder Permanente Verletzungen
  • Schlafgewohnheiten
  • Subjektives Stresslevel
  • Adresse
  • Zielgewicht
  • Mobile Device Manufacturer

Im Rahmen der täglichen/regelmäßigen Nutzung

[täglich] konsumierte Nahrungsmittel (ggf. auch Produktnamen - und Kalorien, inkl. Genussmittel wie Alkohol)
[täglich] sportliche Aktivitäten (aktiv: Schrittzähler, passiv: Eintragung der Aktivitäten)
[bis zu täglich] Gewichtsverlauf
[-] Persönliche Nachrichten zwischen den Nutzern (Private Chats sowie Gruppenchats)
[-] Nutzungsprofile (Online/Offline/Aktive Nutzungszeiten)

Potentielle Risiken

Aus diesen Daten - insbesondere wenn die Nachrichteninhalte hinzugezogen werden - kann ein ausgesprochen exaktes Profil gebildet werden das unter Umständen einer Person direkt zugeordnet werden kann. Die möglichen Auswirkungen eines derartigen Profils (bzw. mögliche Spätfolgen einer solchen Profilbildung) wie bspw. Penalties für Krankenversicherungsnehmer o.ä. lassen sich nicht vollumfänglich abschätzen. Da es sich zum Teil um die Erfassung von Gesundheitsdaten handelt, gehen wir von einem ernst zu nehmenden Impact für die Privatsphäre der Nutzer aus.

Aktiver Penetration Test

Mithilfe eines HTTPS Proxies und unter Anwendung eines vertrauten CA Zertifikates wurde ein Endgerät so konfiguriert, dass alle Daten welche die App mit dem Hersteller austauscht, ausgeleitet und analysiert werden können.

Verwendete Software: Wireshark, MITMproxy, Burp Suite

Vorgehen

Die von der App mit dem Hersteller ausgetauschten Daten im Rahmen der Nutzung (Registrierung, Einpflegen und Review der Daten) sowie durch Wiederherstellung des Datenstandes nach vorhergehender Deinstallation der App wurden aufgezeichnet und überprüft. Verdächtige Teile der API bzw. des Protokolls wurden auf das vorhandensein von Sicherheitsmaßnahmen überprüft.

Findings

1.: Missing Authentication

Der API communication transport wurde über HTTPS in JSON durchgeführt. Die Applikation nutzte nicht die Möglichkeit des Certificate Pinnings, wodurch das auslesen und modifizieren der Kommunikation überhaupt erst ermöglicht wurde. Die Software war MITM Angriffen somit schutzlos ausgeliefert.

2.: User Identification Tokens

Alle API Anfragen (Updates, Lookups, etc.) wurden unauthentifiziert vorgenommen - einzig der User Identification Token wurde von der App vorgewiesen, um Zugriff auf die Benutzerspezifischen Daten zu erlangen. Dieses known secret - im Protokoll “Access Code” genannt, bestand aus maximal 8 Zeichen beschrieben durch “(^[A-Z0-9]*$)”. Die Token sind unique und scheinen Zufallsgeneriert erzeugt zu werden - die Erstellung mehrerer Konten hatte keine offensichtlich iterierbaren Token offenbart.

3.: Iterable Group Identifiers

Gruppen, in die Benutzer anhand ihrer Geolokation gefasst werden, bestanden zum Zeitpunkt des Tests aus einem simplen iterierbaren Integer im 4-stelligen Bereich. Dieser wird einfach bei Erstellung einer neuen Gruppe durch das System inkrementiert, was in den nächsten Schritten des Penetration Testings die Enumeration der Benutzerkonten stark vereinfachte.

4.: User Enumeration and Information Leak through groups

Die User Identification Tokens waren enumerierbar, da sie in Gruppen als Teilnehmer-ID verwendet wurden:

for GROUPID in {1..99999}
{
    GET https://********/com.wsl.noom/166/groups/$GROUPID/memberList
    REQUEST DATA: none
}

Dieser Pseudocode ermöglichte, alle User Identification Tokens zu kartieren. Der Vorgang selbst wurde nicht durch Sicherungsmaßnahmen wie bspw. Rate Limiting, TarPits oder Plausibility Checks erkannt, verzögert oder verhindert.

5.: Unauthenticated Data Download

Ein User Identification Token konnte nun eingesetzt werden, um die gesamte Kommunikationshistorie des Benutzers zu laden:

for TOKEN in LIST_OF_TOKENS[]
{
    GET: https://********/com.wsl.noom/166/users/$TOKEN/getPrivateMessages?fromId=0
    REQUEST DATA: none
}

… oder den bislang gespeicherten Kalorien-Intake:

for TOKEN in LIST_OF_TOKENS[]
{
	POST:		https://********/HighScoreServer/calorific/download.htm
	REQUEST DATA:	jsonRequest={"accessCode":"$TOKEN","lastDownloadedGeneration":0,"timeZoneId":"Europe\/Sarajevo"}
}

… oder die Historie sportlicher Betätigungen, inklusive Dauer, Art des Sports, verbrannte Kalorien, etc.:

for TOKEN in LIST_OF_TOKENS[]
{
	POST: https://********/HighScoreServer/account/getExerciseHistory.htm
	REQUEST DATA: accessCode=$TOKEN
}
6.: Impersonation

Da Nachrichten unter Vorweisen des User Identification Tokens versandt werden, reichte ein simpler POST Request, um unter dem Deckmantel einer anderen Person mit Nutzern zu kommunizieren. Zusammen mit der bisherigen Kommunikationshistorie und den damit verbundenen Informationen über die Zielperson, konnte ein Angreifer mit hoher Erfolgswahrscheinlichkeit Phishing, Scamming oder Identitätsdiebstahl betreiben, oder im schlimmsten Fall durch fehlgeleitete Ratschläge negativen Einfluss auf die Gesundheit des Empfängers nehmen.

Coordinated Release / Reaktion des Herstellers

Alle oben genannten Lücken wurden im Rahmen eines Coordinated Release an den Hersteller der App geleitet. Als Zielfenster für die Korrektur vor Veröffentlichung der Findings wurde von uns eine Frist von 90 Tagen gesetzt.

Der Hersteller war von Beginn an ausgesprochen kooperativ, es wurde eine Möglichkeit zur sicheren Übermittlung der Findings via PGP eingerichtet. Der gesamte Vorgang wurde nach der initialen Weiterleitung durch eine 1st-Level Mitarbeiterin von Einreichung bis Bestätigung der Fixes durch einen Mitarbeiter begleitet, der mit uns in Verbindung und jederzeit für Fragen zur Verfügung stand.

Innerhalb der 90 Tage wurde das Rollout einer aktualisierten Version veranlasst, nach Ablauf der 90 Tage stand die verwundbare API mit den uns bekannten Angriffsvektoren nicht mehr zur Verfügung.

Abschließende Hinweise

Auch wenn die Daten nun nicht mehr offen liegen, stehen Sie dem Hersteller immer noch zur Verfügung und können von diesem diversen Auswertungen zugeführt werden. Auch wenn der Hersteller nicht plant, diese Daten zu monetarisieren, besteht die Gefahr der mißbräuchlichen Verwendung durch Softwarefehler, Änderungen der Gesetzeslage o.ä.

Daten die nicht erhoben werden, sind also auch in diesem Fall die besseren Daten ;-)

public/project/kidnapping/noom.txt · Last modified: 2018/06/07 07:12 by xoh