USB: Dr. Jekyll und Mr. Hyde: Difference between revisions

From
Jump to navigation Jump to search
Line 162: Line 162:
unser Windows system hatte 8gb ram, dass linux system nur 4gb
unser Windows system hatte 8gb ram, dass linux system nur 4gb



[[File:wireshark0.png|200px|thumb|left|Screenshot von Wireshark mit Datei die Random Input enthält]]

[[File:wireshark1.png|500px|thumb|left|Screenshot von Wireshark mit Datei die Random Input enthält]]


Demo:
Demo:
Line 193: Line 197:
pi mount verändert unmount
pi mount verändert unmount
datei anders
datei anders


[[File:wireshark0.png|200px|thumb|left|Screenshot von Wireshark mit Datei die Random Input enthält]]

[[File:wireshark1.png|500px|thumb|left|Screenshot von Wireshark mit Datei die Random Input enthält]]


== Fazit ==
== Fazit ==

Revision as of 13:25, 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


Screenshot von Wireshark mit Datei die Random Input enthält
Screenshot von Wireshark mit Datei die Random Input enthält

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

Fazit