USB: Dr. Jekyll und Mr. Hyde: Difference between revisions
Line 163: | Line 163: | ||
[[File:wireshark0.png|200px| |
[[File:wireshark0.png|200px|center|thumb|Screenshot von Wireshark mit Datei die Random Input enthält]] |
||
[[File:wireshark1.png|500px| |
[[File:wireshark1.png|500px|center|Screenshot von Wireshark mit Datei die Random Input enthält]] |
||
Demo: |
Demo: |
Revision as of 13:33, 19 October 2017
Einleitung
Dr. Jekyll und Mr. Hyde
Set Up
Hardware
Entscheidung zu Raspberry Pi wichtig USB on the Go (OTG)
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
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
echo "dwc2" | sudo tee -a /etc/modules
Gadget erstellen
#!/bin/bash
cd /sys/kernel/config/usb_gadget/
mkdir -p isticktoit
cd isticktoit
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "fedcba9876543210" > strings/0x409/serialnumber
echo "Tobias Girstmair" > strings/0x409/manufacturer
echo "iSticktoit.net USB Device" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
# see gadget configurations below
# End functions
ls /sys/class/udc > UDC
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