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

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 34: Line 34:


== GadgetFS ==
== GadgetFS ==
== Szenarien ==
== Scenario 1: Hidden Volume ==

=== Hidden Volume ===


was
was
Line 57: Line 59:
--> Lösung: um zwei Partionen statt einer zu erkennen, muss der Pi neu gestartet werden
--> Lösung: um zwei Partionen statt einer zu erkennen, muss der Pi neu gestartet werden


== Scenario 2: Passive Attack ==
=== Passive Attack ===


was
was
Line 76: Line 78:
---> Skript manuell ausführen nach unmounten
---> Skript manuell ausführen nach unmounten


== Scenario 3: Active Attack ==
=== Scenario 3: Active Attack ===


dee
dee

Revision as of 12:47, 19 October 2017

Introduction

Gliederung

Dr. Jekyll and Mr Hyde

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

Scenario 3: 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