Using the Strava Heatmap to Identify and Track Military Personnel

Fit Leaking leaks Identities

Fitness tracking companies Strava and Suunto released heatmaps which reveal military positions through their collection and visualization of fitness data. For this article I focus on the Strava based map because they offer a feature which makes the data easily exploitable. The global heatmap shows in aggregated and anonymized form every public actitvity uploaded by a Strava user. If this is done in rural and less trafficked localities, this can highlight excercise focused individuals, for example active military personnel. But in activity dense regions it is possible to find military bases and identify the individuals stationed there.

Strava Leak
Strava Global Heatmap

What’s the Problem?

While the current focus is on the presence, activity and profile of sensitive establishments identification is not covered in current media ouputs. Individuals serving duty on military bases can easily be identified and in certain cases their deployments can be historically tracked through the Strava service. The feature we exploit to identify personnel is called „Segments“.

Segments are member created and edited portions of tracks where athletes compete against each other. Users will try to run faster than other users who already ran this „Segment“. A segment could be marked private but the competitive and social encouragement factors seem to outweigh than the privacy factor. Therefore we can find public segments on several european and international army bases. To see the full leaderboard of a segment an adversary only needs a Strava account. No further authorization is required. We focus on military personnel in this article but the scenario is also applicable for companies and their employees as described in Scott-Railtons blog post.

Case Study

We conducted a small case study after release of the heatmap. Therefore, we chose eleven military bases around the world and looked for segments on site, if any soldiers were identifiable and whether their identity was verifiable through official documents or reports in newspapers e.g.. From the eleven bases one did not contain a segment on site. In every base we could identify at least one individual with a military background and could verify this in ten cases.

Böblingen Base
Heatmap View of Böblingen Base

Take for example the Panzer Kaserne in Böblingen, Germany. There is a highschool on site called „Stuttgart High School“ and if you look for „Segments“ in Strava you find the track of the highschool to be frequently used. All users which ran the segment and competed against each other are visible. Non-surprisingly most of them seem to have a military background.

If users that ran this segment share their running history on their profile it can be tracked where individual users were stationed over time. From the eleven individuals that we identified we could track six individuals to at least one more military base. It was also possible to determine when and where they’ve been on holiday. There are privacy settings in Strava which can prevent this leakage of private information, but they are multi layered and users always have to opt-out.

Böblingen Map
Normal Map of the Base

While we did our small case study by hand it seems easy to automatically scrape the segments for relevant data. Segments are always behind a URL of the following scheme „www.strava.com/segments/##########“. To see a preview of the leaderboard containing 20 athletes you do not need to be logged in.

Conclusion

In Conlusion this incident illustrates how interconnected we are and how many problems and potential threats arise from that interconnectedness. Location data offers giant threats for many parties. Especially if the data is owned and sold by private companies (Strava has an advertisement on the heatmap. It pitches Metro, which helps safety and transportation organizations to analyze trends and counts). The high granularity of the heatmap and the ease at which individuals in security zones can be identified underlines that Stravas current model of privacy is not working in practice.

 

 

Since Strava is an internationally used app this blog post is in English. If you need a german translation, contact me.

 

Rubber Ducky Quick Start

Dieses Tutorial dient der Aufklärung von IT-Sicherheitsrisiken und dem Selbstschutz. Sei dir darüber im klaren, dass du eine Straftat begehst, wenn du Technologien, Tools oder Angriffsmethoden unbefugst nutzt, um Daten und Systeme anderer zu manipulieren.

Warum dieses Rubber Ducky Tutorial?

Es gibt eine Menge Tutorials zum USB Rubber Ducky, einem sehr vielseitigem Tool für Penetrationstester. Es scheint ein unschuldiger schwarzer USB-Stick zu sein. Wird der Rubber Ducky allerdings an einen Computer angeschlossen, registriert er sich als Tastatur und kann vorprogrammierte Tastenanschläge tippen. In quasi Lichtgeschwindigkeit.

Mit dem Rubber Ducky geht so ziemlich alles, vom Hintergrund ändern über Keylogger bis hin zur vollwertigen Backdoor. Er kostet circa $45 und kann hier bestellt werden.

Ist der Rubber Ducky dann angekommen, gibt es eine Tüte mit viel Kleinkram und wenig Erklärungen. Möchte man den Rubber Ducky im deutschsprachigen Raum nutzen, muss man außerdem ein zwei Dinge beachten, die in englischsprachigen Tutorials nicht deutlich erwähnt werden, daher
dieses kleine Tutorial.

Rubber Ducky
Rubber Ducky

Bevor der Rubber Ducky mehr macht als ein Editor-Fenster mit „Hello World“ zu öffnen, müssen wir ihn auseinander nehmen und die miniSD-Karte in den mitgelieferten miniSD auf USB Adapter stecken und mit unserem Rechner verbinden.  Mehr dazu in Schritt 2.

Rubber Ducky Einzelteile
Rubber Ducky Einzelteile

Ich habe einen Windows 10 PC mit installiertem Java(brauchen wir für den DuckEncoder) für dieses Tutorial genutzt, da ich den gerade offen hatte.
Wir nutzen aber auch hier die Kommandozeile und die Schritte sind auf einem Linux-System weitestgehend ähnlich, bei Bedarf schreibe ich dazu nochmal was. Ich zeige euch jetzt wie ihr mit dem Rubber Ducky ein Bild aus dem Internet ladet und es als Hintergrund einstellt. Am Ende haben wir alle essentiellen Teile für reale Penetrationstests zusammen, bei denen man evtl. Software auf einen im Test-Unternehmen stehenden PC runterladen möchte.

Schritt eins: Den Duck Encoder runterladen

Um den Rubber Ducky mit Payloads auszustatten und eine inject.bin aus unserem Ducky Script zu kreiiren, müssen wir den Duck Encoder herunterladen. Diese Datei ist verantwortlich für die Tastenanschläge. Es gibt unterschiedliche Möglichkeiten diese Datei zu erstellen, unter anderem auch
ein Webinterface, allerdings haben die Exploits nicht einfach funktioniert. Deswegen empfehle ich das .jar-Programm HIER herunterzuladen. Wir laden die Datei herunter, erstellen einen neuen Ordner, zum Beispiel auf dem Desktop, und kopieren die .jar-Datei dort hinein.

Schritt 2: Einsetzen der microSD-Karte

Steckt man den Rubber Ducky nach dem auspacken in den PC sollte sich ein Editor-Fenster mit „Hello World“ öffnen(Vorsicht bei Nicht-Windows  Systemen, hier können andere Dinge passieren). Wir möchten den Stick aber neu beschreiben, daher die SD-Karte mittels eines Kartenlesegeräts (wird mitgeliefert) an den PC stecken. Nach kurzer Wartezeit sollte die SD-Karte wie ein „normaler“ USB-Stick verfügbar sein.

Schritt 3: Payload generieren

Du kannst nicht programmieren? Kein Problem. Der RubberDucky spricht DuckyScript und mit ein paar Befehlen kommst du schon ans Ziel. Eine vollständige Übersicht von Duckyscript gibt es HIER.

Wir öffnen eine neue .txt Datei mit Rechtsklick->Neu->Textdokument benennen diese zum Beispiel change_wallpaper und tippen folgendes ein:


REM Skript zum Ändern des Hintergrunds bei Win10
REM Standard-App muss zum öffnen der Fotos verwendet werden
REM IMPORTANT Wenn Google Chrome genutzt wird: Google Chrome merkt REM sich wo zuletzt gespeichert wurde!Verzeichnis evtl anpassen.
DELAY 5000
CONTROL ESCAPE
DELAY 100
REM Note: Chrome klappt gut, firefox oder ie wahlweise (Verzeichnis unten anpassen)
REM Evtl. eigenes Bild einfügen
STRING chrome https://montimon.mirfac.uberspace.de/wordpress/wp-content/uploads/2018/01/pwnie_pic.png
ENTER
DELAY 4000
CONTROL s
DELAY 2000
ENTER
DELAY 300
CONTROL ESCAPE
DELAY 300
REM Bei Interne Explorer, ändere 'Downloads' to 'Documents'
REM Bei Firefox Firefox, change 'Downloads' to 'Pictures'
STRING %USERPROFILE%\Downloads\pwnie_pic.png
DELAY 500
ENTER
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
TAB
DELAY 500
ENTER
DELAY 500
DOWN
DELAY 500
DOWN
DELAY 500
DOWN
DELAY 500
DOWN
DELAY 500
DOWN
DELAY 500
ENTER
DELAY 500
DOWN
DELAY 500
ENTER

Nun zum Code: Wir starten mit ein paar Kommentaren. Kommentare erkennt ihr an REM am Anfang der Zeile. Im Anschluss warten wir fünf Sekunden, mittels DELAY 5000. CONTROL ECAPE öffnet dann das Startmenü von Windows 10 und STRING chrome ... öffnet eine Webseite mit Hilfe von Chrome über das Windows-10 eigene Suchfeld. Wir warten vier Sekunden und speichern dann mittels CONTROL s das Bild. Anschließend drücken wir ENTER und öffnen wieder das Startmenü. Mit STRING %USERPROFILE%\Downloads\pwnie_pic.png öffnen wir nun das heruntergeladene Bild und navigieren mit Hilfe von RIGHT und DOWN zu dem Menüpunkt im Windows-Bildbetrachter, den wir haben wollen. In unserem Falle ist es die Option „Als Hintergrund festlegen“.

Den Code gibt es auch auf GitHub.

Schritt 4: Kompilieren des DuckyScripts zu inject.bin

Jetzt brauchen wir den DuckEncoder aus Schritt 1 um unsere inject.bin zu kompilieren. Hierfür müssen wir im Ordner in dem unser duckencoder und die change_wallpaper.txt liegen ein Kommandozeilen Fenster öffnen. Mit Shift+F10 öffnen wir das Kontextmenü und können „Power Shell Fenster hier öffnen“ oder „Kommandozeile hier öffnen“ klicken. Nachfolgend tippen wir den Befehl ein.

java -jar duckencoder.jar -i change_wallpaper.txt -o inject.bin -l de

java -jar duckencoder.jar ruft das Programm innerhalb unseres Verzeichnisses auf. -i change-wallpaper sagt dem Programm, was der Input ist, in diesem Fall unser DuckyScript. -o inject.bin sagt dem duckencoder, das er bitte als output inject.bin produzieren soll und -l de gibt an, dass wir eine deutschsprachige Tastatur nutzen wollen. Dies ist wichtig, da der Duck Encoder die inject.bin sonst für eine englischsprachige Tastatur kompiliert und falsche Tasten anschlägt.

Abschließend schieben wir die entstandene inject.bin auf die in Schritt 2 eingesetzte USB-Karte und können testen.

Schritt 5: Der Selbsttest
Bevor wir den Stick nun bei einem Penetrationstest einsetzen, sollten wir ihn an einem Testsystem testen, beispielsweise unserem eigenen Rechner. Wir setzen die microSD-Karte nun wieder in den Rubber Ducky und stecken ihn ein (noch nicht das Plastikgehäuse drummachen, falls etwas nicht korrekt ist, muss man sonst immer fummeln).

Jetzt gilt es nur noch dem RubberDucky bei der Arbeit zuzuschauen und zu prüfen ob alles klappt.

Bonusschritt:

Auf Github oder Ducktoolkit findet ihr viele vorgefertigte Payloads, die ihr nur runterladen, kompilieren und testen müsst. Solltest du den RubberDucky wirklich in einem Penetrationstest einsetzen musst du vorher prüfen, ob die kompilierte inject.bin korrekt arbeitet. Aus eigener Erfahrung müsst ihr hier fast immer nochmal ran und das Skript verändern.

Happy Pentesting

Was lernen wir?

Wie du gesehen hat, sieht der Rubber Ducky aus wie ein normaler USB-Stick ist es aber nicht. Er lässt sich sehr leicht programmieren und eignet sich daher besonders gut für Anfänger im Bereich Penetrationstesting. Gerade mit den Delay-Funktionen lässt sich spielen, so dass der Stick beispielsweise nachts beginnt zu arbeiten, wenn du schläfst. Sei also immer vorsichtig, wenn du einen USB-Stick irgendwo findest und Ihn an eines deiner Geräte anschließen willst, egal ob privat oder im Berufsleben.

Falls du Fragen oder Anmerkungen hast, du findest mich auf Twitter unter @montimonte