Halucinator: Firmware Re-Hosting Through Abstraction Layer Emulation

Halucinator: Firmware Re-Hosting Through Abstraction Layer Emulation

HALucinator: Firmware Re-hosting Through Abstraction Layer Emulation Abraham Clements*, Eric Gustafson*, Tobias Scharnowski, Paul Grosen, David Fritz, Christopher Kruegel, Giovanni Vigna, Saurabh Bagchi, and Mathias Payer Sandia National Laboratories is a multimission laboratory managed and operated by National Technology & Engineering Solutions of Sandia, LLC, a wholly owned 1 subsidiary of Honeywell International Inc., for the U.S. Department of Energy’s National Nuclear Security Administration under contract DE-NA0003525 SAND2020-7322 C IoT and Operational Technology 2 Device Internals 3 Baremetal Firmware Baremetal Linux ELF file .text main() Firmware ?? .data .bss On-chip Hardware (eg.., MMIO) .plt Off-chip Hardware (e.g., sensors, radio, ...) read() libc.so.6 send() Raw hardware access Kernel abstractions used for hardware interactions 4 Hardware is Hard! Debug access ○ Should be disabled ○ If present, very limited Limits parallelism Other limitations ○ Can be expensive ($100 - $10k) ○ Brittle - easily bricked 5 Re-hosting to the Rescue? Emulator HALucinator’s Goal: Enable scalable firmware testing without requiring specialized hardware 6 Peripherals Prevent Re-hosting Peripherals On chip Off chip CPU Ethernet AES Accelerator SD-MMC Hash GPIO Coprocessor Camera Timers LCD Counters Touch Screen Flash Controller Wireless Clock Config EEPROM IAP Serial DMA CAN Analog IO USB 7 Peripherals Prevent Re-hosting Peripherals On chip Off chip CPU Ethernet AES Accelerator SD-MMC Hash GPIO Coprocessor Camera Timers Mouser LCDLists Counters44,520 MicrocontrollersTouch Screen Flash Controller Wireless Clock 3,502Config DatasheetsEEPROM IAP 26 ManufacturersSerial DMA CAN Analog IO USB 8 Peripherals Prevent Re-hosting Peripherals On chip Off chip CPU Ethernet AES Accelerator SD-MMC Hash GPIO Coprocessor Camera Timers Mouser LCDLists Without support for peripherals baremetalCounters44,520 firmware Microcontrollers will notTouch run! Screen There are 10,000’s of peripherals andFlash combinations Controller there of!Wireless Clock 3,502Config DatasheetsEEPROM IAP 26 ManufacturesSerial DMA CAN Analog IO USB 9 Hardware Abstraction Libraries 10 Image credit: NXP HALs are Everywhere 11 HALs are Everywhere HALucinator Enables replacing HALs and other libraries with high level implementations. Transforming the re-hosting scaling problem from supporting 10,000’s of devices to dozens of HALS 12 The Modern Firmware Stack Firmware On-chip Hardware (eg., MMIO) Off-chip Hardware (e.g., sensors, radio, ...) 13 High Level Emulation Application Code Protocol Peripheral Stacks Libraries RTOS (IP, (sensors, Zigbee) etc) Middleware Vendor HAL, Platform HAL, etc HAL On-chip Hardware (eg., MMIO) Off-chip Hardware Hardware (e.g., sensors, radio, ...) 14 High Level Emulation Application Code Application Code Protocol Peripheral Protocol Peripheral Stacks Libraries Stacks Libraries RTOS RTOS (IP, (sensors, (IP, (sensors, Zigbee) etc) Zigbee) etc) Middleware Re-Host! Vendor HAL, Platform HAL, etc High Level Replacements HAL On-chip Hardware (eg., MMIO) QEMU Off-chip Hardware Hardware (e.g., sensors, radio, ...) 15 High Level Emulation Application Code Application Code Protocol Protocol Peripheral Peripheral Stacks Stacks Libraries Libraries RTOS RTOS (e.g., IP (IP, (sensors, (sensors, Zigbee, Zigbee) etc) High Level Replacementsetc) Middleware …) Re-Host! Vendor HAL, Platform HAL, etc HAL On-chip Hardware (eg., MMIO) QEMU Off-chip Hardware Hardware (e.g., sensors, radio, ...) 16 HALucinator implementation Firmware LibMatch HALucinator Func. Addrs FW CPU Emulator (QEMU) UART Ethernet ... Handler Handler HAL Source Peripheral Models IO Server Our Contributions 17 Handler Example def i2c_read_buf(uc): # i2c_read_buf(char* buf, int len); buf = uc.regs.r1 # arg 0: The buffer l = uc.regs.r2 # arg 1: Buffer length assert(buf != 0) # Crash on bad arguments Device-specific code assert(len > 0) data = I2CModel.rx('i2c', 0, len) # Get the data # from the virtual bus uc.mem[buf] = data # Store it in the emulator PythonLibraries (HALs, libc) QEMU 18 LibMatch 19 LibMatch libfoo.o Step 1: Match library content 20 LibMatch HAL_ETH_Rx HAL_UART_Read HAL_DebugPrint HAL_AssertFail SystemClockConfig 21 LibMatch HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_SPI_Write HAL_DebugPrint HAL_AssertFail HAL_GetChar HAL_PutChar SystemClockConfig 22 LibMatch HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_SPI_Write HAL_DebugPrint HAL_AssertFail HAL_GetChar HAL_PutChar SystemClockConfig libbar.o libfoo.o Step 2: Caller Context 23 LibMatch HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_DebugPrint HAL_AssertFail HAL_GetChar HAL_PutChar SystemClockConfig 24 LibMatch HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_DebugPrint HAL_AssertFail HAL_GetChar HAL_PutChar SystemClockConfig libbar.o libfoo.o Step 3: Callee Context 25 LibMatch HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_DebugPrint HAL_AssertFail HAL_GetChar SystemClockConfig 26 LibMatch ETH_Rx_Callback HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_DebugPrint HAL_AssertFail HAL_GetChar SystemClockConfig libbar.o libfoo.o 27 LibMatch _flush ETH_Rx_Callback malloc HAL_UART_Write HAL_ETH_Rx HAL_UART_Read HAL_UART_Available HAL_DebugPrint HAL_AssertFail HAL_GetChar SystemClockConfig 28 hal-fuzz ● Built on AFL-Unicorn ● Program exits when the input is exhausted ● Deterministic timers based on block counts ● Interrupt events also based on block counts ● Crashes detected via Unicorn’s own error detector as well as handler assertions 29 16 Firmware Samples ● ATMEL ASF ○ USART ○ FAT32 on SD-Card ○ HTTP Server ○ 6LoWPAN Sender and Receiver ● STM32Cube ○ UART ○ FAT32 on SD-Card ○ UDP-Echo Server and Client ○ TCP-Echo Server and Client ○ PLC ● NXP -MCUXpresso ○ UART ○ UDP Echo Server ○ TCP Echo Server ○ HTTP Server 30 LibMatch Results “Naïve” LibMatch LibMatch (Bindiff) w/ context Correct 74.5% 87.4% Missing 5.0% 3.2% Collisions 18.8% 8.5% Incorrect 2.5% 0.9% External -- 9.96% % matches across 16 test binaries 31 Ease of Use Three Handler categories: ● Trivial: Does nothing / returns a constant ● Translating: Collects arguments, interacts with a Model, returns a result ● Internal Logic: Needs to re-implement undocumented internal details 32 Ease of Use ● Over 85% of handlers require little effort ○ 44.5% (37) are “trivial” ○ 42.2% (35) are “translating” ● Remainder (11): “Internal logic” ○ HAL behavior doesn’t abstract hardware well enough ○ HAL behavior makes assumptions not in the docs (e.g., uses its own heap allocator) 33 Fuzzing! 01010101 New crashes in: 0101010001010101 01010101 1010100001010100 ● STM’s ST-PLC Kit AFL 0101010001010101 AFL 1010100001010101 1010100001010100 ● Atmel’s HTTP Server AFL 0101010001010101 AFL 1010100001010101 1010100001010100 example AFL 0101010001010101 AFL 1010100001010101 ● Atmel’s Contiki 6LowPAN 1010100001010100 AFL 0101010001010101 AFL 1010100001010101 examples 1010100001010100 AFL 0101010001010101 AFL 1010100001010101 1010100001010100 AFL 01010100 AFL 10101000 AFL 10101000 Hundreds of millions of executions with real parallel AFL 34 Multi-layer Fuzzing! HTTP Server Info Leak! HTTP Server Protocol Peripheral Stacks Libraries RTOS LwIP RTOS (e.g., IP (sensors, Zigbee, Heap Corruption! High Level Replacementsetc) …) High Level Replacements QEMU QEMU Atmel HTTP Server firmware sample 35 Discovered CVEs ● CVE-2019-8359: Remote code execution via buffer overflow in packet reassembly of Contiki OS ● CVE-2019-9183: Remote Denial-of-Service via Integer underflow in packet reassembly of Contiki OS 36 CSAW ESC 2019 results ● Re-hosted ARM portion of all challenge sets ● Solved 18/19 challenges ● Verified 17/18 solutions w/ just the emulator ● Solved 3 challenges automatically using fuzzing ● Won first place! 37 Conclusion HALucinator eliminates implementing 10,000s of peripherals by using HALs FW CPU Emulator (QEMU) Uart Ethernet ... Handler Handler github.com/embedded-sec/halucinator github.com/ucsb-seclab/hal-fuzz Peripheral Models IO Server 38.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    38 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us