USB: Dr. Jekyll und Mr. Hyde
Einleitung
Dr. Jekyll und Mr. Hyde
Set Up
Hardware
Software
Raspberry Pi Zero einrichten
dd bs=4M if=2017-09-07-raspbian-stretch-lite.img of/dev/mmcblk0p1 conv=fsync
weiterhin muss das wlan eingerichtet werden
dd if=/dev/zer of=mass_storage bs=1M seek=1024 count=16000
mkdosfs mass_storage
das Image muss dann gemountet werden
mkdir ~/mount_usb
mount -o loop,rw mass_storage ~/mount_usb
cd ~/mount_usb
yes 0 | dd of=test_file1.text bs=1M count=4000
yes 1 | dd of=test_file1.text bs=1M count=4000
GadgetFS
Szenarien
Hidden Volume
was - usb hat 2 partitionen, sind auf dem raspberry pi 2 images, - je nach User wird eine oder beide Partionen sichtbar - beispielsweise hier loesungen der klausur und passwörter
wie , sind auf dem raspberry pi 2 images, eine partition wird default angezeigt als massenspeicher - außerdem emuliert gadgetfs eine serielle schnittstelle, wenn auf der seriellen schnittstelle daten rein kommen, soll die geheime partition angezeigt werden
resultat/probleme
- Der Pi erkennt nicht an welchem PC er angeschlossen wird, demnach nicht möglich so zu entscheiden wieviele Partionen gezeigt werden --> wir nutzten die serielle Schnittstelle als zusätzlichen Kanal, wenn Daten auf der seriellen Schnittstelle auf dem Pi ankommen, mountet er die hidden Partition
- Functions können nicht später (d.h. im gemounteten Zustand) hinzugefügt werden --> Lösung: um zwei Partionen statt einer zu erkennen, muss der Pi neu gestartet werden
Passive Attack
was - Alice speichert ein Dateien auf einem USB Stick und gibt diesem Bob - bevor Bob den Stick ansteckt, werden die Dateien auf dem Stick verändert. - Bob guckt sich modifizierte Daten an
wie
- Dateien werden verändert nach dem unmounten des USB Sticks
- Demo: Beispielsweise: Skript sucht auf dem Stick nach Bild Dateien und rotiert diese
- weitere Ideen: veränderung der IBAN oder Geldbeträge, weitere kompromittierte Dateien hinzufügen
resultat/problem
- nicht erkennbar für den Pi ob er gemountet ist oder nicht
- dadurch kann nicht automatisch nach unmounten des Sticks das Skript ausgeführt werden
---> Skript manuell ausführen nach unmounten
Active Attack
dee virenscanner scannt dateien, sagt alles virenfrei schadcode im gemounteten Zustand einfügen
was
- der Stick wird angesteckt, eine Datei wird geladen angeguckt wieder geschlossen, und während der Stick gemountet ist, wird die Datei vom pi geändert bsp. mit schadcode
- danach wird die datei wieder geöffnet und ist verändert
wie
- kleine dateien verändern 00 zu 11 - keine veränderunng: gecacht oder gehasht fehlermeldung bei windows und linux korruptes filesystem
-versuch mit sehr großen dateien bsp. 4 gb bei 4 gb ram linux - swap deaktiviert veränderung wird gesehen - siehe demo
- versuche auf windows teilweise speicher volllaufen auf glück? veränderung gesehen einmal gesehen
- verschiedene Ansätze / Versuche - OS: Windows und Linux reagieren unterschiedlich
- text file erstellt, vom pi sollte dann dieser string eingefüght werden X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
https://en.wikipedia.org/wiki/EICAR_test_file
resultat/problem
- OS nimmt an totale Kontrolle über das File System zu haben - Dateien werden vermutkich im RAM gecacht (I/O Buffer)
Linux: wie in Demo, wird gezwungen File neu zu öffnen
Windows: caching verhalten nicht so vorhersehbar
unser Windows system hatte 8gb ram, dass linux system nur 4gb
Demo:
1. raspberry pi:
- create one images
- dd if=/dev/zero of=image.img bs=1M count=4000 - msdosfs image.img
- sudo mount -o loop,rw image.img usbdisk.d
- sudo umount usbdisk.d
- yes 0 | sudo dd of=four_gb.txt bs=1M count=4000 iflag=fullblock
- - - - - schon erledigt - - - - - - - - -
2. ninas rechner: sudo modprobe usbmon sudo wireshark cat four_gb.txt > /dev/null wireshark zeigen
3. robbys rechner: sudo mount -o loop,rw usbdisk.img usbdisk.d sudo dd if=/dev/urandom of=four_gb.txt bs=1M count=4000 conv=notrunc status=progress sudo umount usbdisk.d
4. ninas rechner
cat four_gb.txt > /dev/null
--> wireshark zeigen
datei erstellt 0000 pi mount verändert unmount datei anders