CAOS-Stick Crash Any Operating System [ 110.768243] usb 1-1: new full-speed USB device number 48 using xhci_hcd [ 111.028327] usb 1-1: config 1 has 1 interface, different from the descriptor's value: 10 [ 111.030544] usb 1-1: config 1 interface 0 altsetting 0 has 3 endpoint descriptors, different from the interface descriptor's value: 27 [ 111.133086] usb 1-1: New USB device found, idVendor=04c5, idProduct=10c7 [ 111.134764] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 111.136602] usb 1-1: Product: ?<89> [ 111.137442] usb 1-1: Manufacturer: ?<89> [ 111.138363] usb 1-1: SerialNumber: % [ 111.159863] usbhid 1-1:1.0: couldn't find an input interrupt endpoint [ 111.167812] BUG: unable to handle kernel NULL pointer dereference at 000000000000037f [ 111.168021] IP: [<ffffffff8119ff4d>] __kmalloc+0x8d/0x190 [ 111.168021] PGD 61a0067 PUD 59e5067 PMD 0 [ 111.168021] Oops: 0000 [#1] SMP [ 111.168021] Modules linked in: io_ti ipaq ftdi_sio usbserial snd_usb_audio snd_usbmidi_lib snd_hwdep snd_pcm snd_page_alloc snd_seq_midi snd_seq_midi_event snd_rawmidi snd_seq snd_seq_device snd_timer snd soundcore dvb_usb_dib0700 dib8000 dib7000m dib0090 dib0070 dib7000p dib3000mc dibx000_common dvb_usb dvb_core rc_core gspca_zc3xx gspca_main videodev usbhid hid cirrus ttm drm_kms_helper drm bnep rfcomm psmouse bluetooth serio_raw syscopyarea sysfillrect sysimgblt i2c_piix4 mac_hid parport_pc ppdev lp parport e1000 floppy [ 111.168021] CPU: 0 PID: 1252 Comm: systemd-udevd Not tainted 3.13.0-24-generic #46-Ubuntu [ 111.168021] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 [ 111.168021] task: ffff8800037617f0 ti: ffff8800063dc000 task.ti: ffff8800063dc000 [ 111.168021] RIP: 0010:[<ffffffff8119ff4d>] [<ffffffff8119ff4d>] __kmalloc+0x8d/0x190 [ 111.168021] RSP: 0018:ffff8800063ddd80 EFLAGS: 00010286 [ 111.168021] RAX: 0000000000000000 RBX: ffff8800005d7780 RCX: 000000000000f9e1 [ 111.168021] RDX: 000000000000f9e0 RSI: 0000000000000000 RDI: ffffffff81210512 [ 111.168021] RBP: ffff8800063dddb0 R08: 0000000000017280 R09: 0000000000000000 [ 111.168021] R10: ffff880005d42000 R11: 0000000000000000 R12: 000000000000037f [ 111.168021] R13: 00000000000000d0 R14: 00000000000001f8 R15: ffff880007001600 [ 111.168021] FS: 00007f0081b02880(0000) GS:ffff880009200000(0000) knlGS:0000000000000000 [ 111.168021] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 111.168021] CR2: 000000000000037f CR3: 0000000004431000 CR4: 00000000000006f0 [ 111.168021] Stack: [ 111.168021] ffffffff81210512 ffff8800005d7780 ffff880005d42000 00000000fffffff4 [ 111.168021] ffff8800063de000 00000000000001f8 ffff8800063dde78 ffffffff81210512 [ 111.168021] ffff8800063dddd0 ffffffff813199c3 ffff8800063dde38 ffffffff81318d82 [ 111.168021] Call Trace: Sergej Schumilo Mail: [email protected] Twitter: @ms_s3c Agenda 1. Die USB-Schnittstelle 2. vUSBf Framework 3. CAOS-Stick 4. Demo 5. Veröffentlichte Schwachstellen 6. Fazit CAOS-Stick - Crash Any Operating System 2 USB • • Verschiedene generische USB-Klassen: • HID • Mass-Storage • … Geräte verlangen oft auch Hersteller-spezifische Treiber CAOS-Stick - Crash Any Operating System 3 USB-Treiber • • Unzählige Treiber: • verschiedenste USB-Klassen-Treiber • weitere Subklassen-Funktionen • unzählige Hersteller-spezifische Treiber Plug & Play • • Automatische Initialisierung durch den USB-Enumeration Prozess Automatisches Laden des benötigten Treibers: • Udev (Linux) • Windows Update CAOS-Stick - Crash Any Operating System 4 USB-Treiber • Code-Qualität variiert oft stark • Folgen: • • Unprivilegierte Benutzer können Treiber nachladen Fehler in Treibern führen zu: • Denial of Services • möglichen Exploits CAOS-Stick - Crash Any Operating System 5 USB-Bedrohungsmodell • • • Kontrollierter DoS: • Event- oder zeitabhängig • Emulation eines bootfähigen Gerätes nach dem Neustart Direkte Ausnutzung einer Schwachstelle: • Installation eines Kernel-Rootkits • Privilege Escalation Annahme der „Lokalen-Ausnutzbarkeit“ ist strittig: • Social-Engineering • Das „Putzfrauen“-Szenario CAOS-Stick - Crash Any Operating System 6 Motivation • Systematische Suche nach Schwachstellen • • USB als Angriffs-Vektor Möglichst umfassend und schnell CAOS-Stick - Crash Any Operating System 7 vUSBf • virtual USB fuzzer • Einsatzzweck: • • automatische und generische Suche nach Fehlern • Virtualisierung mit Hilfe von KVM/QEMU • Emulation von USB-Geräten für die VM GPLv2 lizenziert • https://www.github.com/schumilo CAOS-Stick - Crash Any Operating System 8 vUSBf • Speed-Up durch paralleles Fuzzing auf mehreren CPUs bzw. Systemen • Emulation des generischen Enumeration-Protokolls • • Weitere Klassen-spezifische Emulationen möglich Reproduzierbares Format für gefundene Fehler: • Unterstützt anschliessendes Debugging • Hohe Reproduzierbarkeit CAOS-Stick - Crash Any Operating System 9 vUSBf Performance Die Geschwindigkeit ist nur durch die Leistung begrenzt - nicht durch die verfügbare USB-Hardware. reload mode vUSBf (1 process) non reload mode Setup: 3 x Intel Xeon E5-2630L mit je 64 GB RAM 0,5 0,5 50 vUSBf Multiprocessing 120 150 vUSBf Clustering 320 0 CAOS-Stick - Crash Any Operating System 100 200 10 300 400 tests/sec vUSBf Performance Laufzeit für 1 Millionen Tests: reload mode non reload mode Setup: 3 x Intel Xeon E5-2630L mit je 64 GB RAM 23T 4h 0m 23T 4h 0m vUSBf (1 process) vUSBf Multiprocessing 0T 5h 30m 0T 2h 18m vUSBf Clustering 0T 1h 48m 0T 0h 51m 0 Tage 0 Stunden 0 Minuten 0 Sekunden CAOS-Stick - Crash Any Operating System 17 Tage 9 Stunden 0 Minuten 0 Sekunden 11 vUSBf • Ermöglicht eine umfassende Suche • Aktuell schnellste Lösung für USBFuzzing • Nächste Version: • Umfassender Windows-Support • Django-basiertes Webinterface • It’s done when it’s done! :) CAOS-Stick - Crash Any Operating System 12 vUSBf Nachteile • Schwachstellen nur virtuell reproduzierbar • Artefakte der Virtualisierung können nicht ausgeschlossen werden • Die Reproduktion von Bugs kann „aufwändig“ sein: • Aufsetzen einer VM • Installation des Frameworks CAOS-Stick - Crash Any Operating System 13 CAOS-Stick • Crash Any Operating System • Erweiterung für das vUSBf-Framework • Export von gefundenen Bugs: • Automatische Generierung von Firmware • Arduino-Leonardo kompatible Hardware (z.B. Freetronics Leostick) CAOS-Stick - Crash Any Operating System 14 CAOS-Stick • Mehrere Sequenzen von Payloads in einer Firmware • Nur durch die Größe des ROM limitiert • UART-Interface für das Debugging • Weitere Features: • time-to-wait-until-execute • timeout-between-payloads • … CAOS-Stick - Crash Any Operating System 15 CAOS-Stick • CAOS-Erweiterung wird demnächst veröffentlicht • Einschliesslich FacedancerInterface CAOS-Stick - Crash Any Operating System 16 Demo CAOS-Stick - Crash Any Operating System 17 Schwachstelle (Linux) usbvision.ko • • Nullpointer-Dereferenzierung durch fehlerhafte Input-Validierung • Kernel Panic • CVE: 2015-7833 • CVSS: 4.9 • Gemeldet im März 2015 • Erste Reaktion erst nach der Veröffentlichung des Bugs und der entsprechenden CAOS-Firmware CAOS-Stick - Crash Any Operating System 18 Schwachstelle (Linux) • Upstream seit Anfang Februar 2016 • Treiber erwartet fehlendes USB-Interface • • Konzeptionelles Problem im Linux-Kernel Advisory: • https://os-s.de/publikationen.html • oss-2015-4: RHEL 7 Kernel crashes on invalid USB device descriptors (usbvision driver) CAOS-Stick - Crash Any Operating System 19 Schwachstelle (Windows) • ser2co64.sys • Kernel-Stack Buffer Overflow • CVSS: 6.9 • Wird automatisch installiert per Windows Update • Ermöglicht unter Umständen eine Code-Execution • Fehlerhafte Verwendung der Kernel-API: • 64 Byte Buffer für ein maximal 64 Zeichen langen UTF-16 String vorgesehen CAOS-Stick - Crash Any Operating System 20 Schwachstelle (Windows) • Keine Reaktion seitens Prolific oder Microsoft • Bestätigt für Windows 7, 8 und 10 • • 32-Bit Version des Treibers (noch) nicht überprüft Advisory am 08.02.2016 veröffentlicht: • https://os-s.de/publikationen.html • oss-2016-4: Local Microsoft Windows 7 / 8 / 10 Buffer Overflow via Third-Party USB-Driver (ser2co64.sys) CAOS-Stick - Crash Any Operating System 21 Weitere Schwachstellen • Weitere Advisories folgen demnächst: • Nullpointer-Dereferenzierungen • Unhandleable Paging Requests • Heap-Overflows • … • Betreffen Linux, FreeBSD, MS Windows und OS X • Jedes Advisory enthält auch die entsprechende CAOS-Firmware CAOS-Stick - Crash Any Operating System 22 Fazit • Generische, automatische und umfassende Suche nach fehlerhaften USB-Treibern • CAOS-Stick ermöglicht die Generierung von echten PoC • Aktuelle Forschung: • • Bessere Code-Coverage durch neue Herangehensweisen Don’t trust your USB :) CAOS-Stick - Crash Any Operating System 23 Vielen Dank für Ihre Aufmerksamkeit! Sergej Schumilo Mail: Twitter: CAOS-Stick - Crash Any Operating System [email protected] @ms_s3c 24
© Copyright 2024 ExpyDoc