SlideShare a Scribd company logo
Micro Control
Attacking uC Applications
Don A. Bailey
(donb@isecpartners.com)
whois donb?
What’s this uC thing all about?
• Single integrated computer
• Processor, volatile, non-volatile storage
▫ All In One
• Can drive many peripherals
• Easily programmable
• Field update/upgrade capability
• Personalization (EEPROM)
No, really… Why do I care?
• Your car
• Implanted medical devices
▫ WBAN (Wireless Body Area Network)
• Crops monitoring (hydro/aero/enviro-ponics)
• Infrastructure monitoring (SCADA, etc)
• “Smart Dust”
• Access controls (RFID, biometrics, etc)
Now with More Networking!
• Bluetooth
• USB
• 802.11
• 802.15.4
• RFID
• DECT
• GSM
Security?
• Some tamper resistance
• Hardware security
• From a software point of view?
▫ Crypto support
▫ …?
OODA Loop?
• Field upgrades are rare
▫ But getting more common
▫ ST M24LR64 Dual EEPROM (Leet!!)
• Most firmware is legacy code
• Spot updates for new functionality / peripherals
• Mostly written in C, C++, and/or ASM
Why wouldn’t you PWN an uC?
Prior work?
• Travis Goodspeed
▫ GoodFET, neighbor!
• Josh Wright
▫ Killerbee!
Picking on Atmel AVR8
Lots of uC out there, but…
• Popular with hackers and engineers
• Free toolchain (gcc based)
• Free IDE (AVR Studio 4)
• No Soldering necessary
• Relatively cheap dev tools
▫ AVRISP mkII (~30 USD)
▫ AVR JTAGICE mkII
(good deals from Arrow Electronics)
Micro control idsecconf2010
Let’s Talk Hardware
Typically included in AVR8
• ALU
• Flash
• SRAM
• EEPROM
• Peripheral support (USART, SPI, I2C, TWI, etc)
Micro control idsecconf2010
That’s right, it’s Harvard
• Separate Data and Code lines
• Code always retrieved from Flash
• Data always retrieved from SRAM
• Flash can be written in software
▫ Typically Boot Loader Support
▫ Fuses determine this
▫ Some AVR8 don‟t support this
Point?
• Attack data, not instructions
• Return-to-whatever (ROP :-P)
• Easier! Less data to inject (typically)
• Takes longer
• That‟s what GoodFET is for
▫ Snatch one Smart Dust sensor
▫ GoodFET
▫ Analyze code
▫ Build ROP strategy
▫ Own 100 more remotely
Let’s Talk Software
Typical AVR8 Stuff?
• Interrupts
• Atomic Execution (sort of ;-)
• Stack
• 32 8-bit registers
• LSB
• 8/16/32/64-bit integer support
• Access to I/O mem
• RISC
What doesn’t AVR8 have?
• Security boundaries
• Contexts (multiple stacks)
• Concurrency
• Segmentation/Paging
• No atomic instructions (cmpxchg?)
• Native 32/64-bit integer support
• Exceptions
▫ Where‟s the Page Fault, yo?!
Let’s Talk Program Flow
Typical programmatic flow
• Reset
• Init
• Main
• somefunc
On startup
• AVR sets PC to OxOO in Flash
• OxOO = Reset Vector
• JMP to init in crtO
• Init does stuff…
• Call main
• Do stuff…
• Call somefunc
• Do more stuff…
From RESET -> main()
Micro control idsecconf2010
crt0 Copy of .rodata
Micro control idsecconf2010
Stack Dump After Call to main()
Micro control idsecconf2010
Function Call
Micro control idsecconf2010
Frame Setup/Teardown
Micro control idsecconf2010
Four Main Points Demonstrated…
• Function conventions are typical
▫ Optimization may minimize this
• Code Layout
• Data Layout
• Atomic Code Sections
Code Layout in Flash
• Interrupt Vectors at OxOO
• RESET Vector at OxOO
• Main Application Code
• Data (???)
• Boot Loader Section
▫ Can write to Flash (if Fuses allow) for field
updates
Data Layout in SRAM
• Registers at OxOO
• I/O Memory at Ox2O
• Extended I/O Memory
• Data (copied from Flash) at Ox1OO
• BSS
• Heap
• Stack
• ??? ;-)
Atomicity
• CLI used
• SREG can be accessed via SRAM (I/O memory)
• 1 CPU Cycle to write to SREG
• Flow:
▫ Save a copy of SREG
▫ Clear Interrupt Bit in SREG
▫ Perform uninterrupted action
 Write to low byte of SP
 Write to SREG (old state with interrupt bit set)
 Write to high byte of SP
Now, Let’s Have Some Real Fun
Entropy? What entropy?
• Randomness is very weak
• Crypto hurt as a result
• Pools can be accumulated
▫ “True Random Number Generator On an Atmel
uC” – IEEE Paper
• 8 Random Bits using RC oscillator
▫ Per second!!!
Race Conditions
• No semblance of context switching
▫ TinyOS/Contiki simulate it
• Critical Sections secured through CLI
• Attack these sections
▫ Overwrite SREG; enable Interrupts
• Use Interrupts to cause unexpected behavior
Return Value Checks
• Snprintf returning <=O or >= sizeof buf?
• Logic Issue
• Always a problem
memcpy and Friends
• Latest avr-libc
• Don‟t test for negative size values
• No option to “secure” with CLI
▫ Interruptable
▫ Oops…Where‟d my SP go?! ;-)
Buffer Overflows
• Easy as pie
• Instruction address in mem is /2
• Return Oriented Programming
▫ Get those Registers set up correctly!
• Force a jump to the Boot Loader
• Instant Flash update (simulate field update)
• Can be triggered remotely
• AVR doesn‟t know the difference between you
and developer
Frame Pointer Overwrite
• Standard FP overwrite
• Point stack to attacker controlled data
• Next frame has the RET
• FP saved LSB first
Setjmp
• Obvious target
• Often used
• Makes up for lack of exceptions
• Saves entire program state
• Overwrite all registers
• Overwrite PC
Integer Overflows
• Work as expected
• 8-bit registers
• 16-bit native instructions
• Easy to wrap OxFFFF
Integer Promotion
• Normal integer promotion
• Unsigned -> Signed = No Sign Extension
• Signed -> Signed = Sign Extension
• Stop using „char‟ for everything ;-)
• Lots of 8-bit networking protocols
▫ 8-bit size fields
▫ Promoted to int during packet ingestion
▫ Oops!!
Heap Overflows
• Heap Struct consists of { size, Next* }
• Next* points to the next free heap chunk
• Adjacent chunks are combined
• No function pointers 
• Easily mangle data
• Next* doesn‟t have to point to Heap 
• Heap data isn‟t zeroed on free()
• Easy way to create pseudo stack frames
• ROP Helper!
Double Free
• Latest avr-libc free() doesn‟t check
• Any address can be used (except NULL)
• Free() will happily overwrite first 2 bytes with
▫ Next*
• Add it to the free list ;-)
• Can stealthily force malloc() to return
(void*)OxOO
• Write direct to Registers, I/O memory, etc
• ROP Helper!!
“Segment” Collision
• Heap is allocated slightly under stack
• Stack is dynamic!!!
• BSS is adjacent to Heap
• .rodata isn‟t Read Only! Adjacent to BSS
• One big happy family!
Uninitialized Variables
• Allocate a large Heap chunk
• Spray with OxAABB
• Stack decends into Heap
• Bewm!
• Example code at:
▫ http://pa-ri.sc/uC/dangle.tar.bz2
Format Strings
• Current avr-libc has no %n support
• No fun 
• But, kind of reasonable
NULL Pointer Dereferences
• There are no privilege rings, but still useful
• Functions like malloc() still return NULL
• (void*)OxOO points to Registers in SRAM
• NULL deref is a very good thing
• Like free() bug, instant access to Regs, I/O Mem
• On the flip side…
▫ ??? ;-)
Beyond Memory
• Deref beyond physical memory addresses?
• Example: ATmega644P
▫ 4096 bytes SRAM
▫ Total 4196 addressable bytes
 With registers, I/O memory
• Ox1OFF should be highest addressible address
Micro control idsecconf2010
Micro control idsecconf2010
Micro control idsecconf2010
There is no Page Fault on AVR8
• Memory faults cannot occur
• For program safety, don‟t RESET
• Read AND Write support
• Just wrap addresses back to (void*)OxOO
• Overwriting past end of PHYSMEM = start of
PHYSMEM
• i.e. Ox11OO = OxO1OO
• How convenient ;-)
• Overwrite EVERYTHING ANYWHERE
Example code?
• See the memdump application
▫ Runs on any AVR8 with USART
▫ http://pa-ri.sc/uC/memdump.tar.bz2
• Code tested on 10 different uCs in the AVR
family
▫ ATtiny
▫ ATmega
We Pack and Deliver like UPS Trucks
Summary?
• Ripe environment for application vulnerabilities
• Little protection schemes
▫ Except solid auditing and a tight SDLC
• Lots of legacy code in the field
• Lots of important devices
Special thanks…
• Jim Geovedi
• Y3dips
• Kendi Demonic
• Abdul Azis
• Dhillon Kannabhiran
• iSEC Partners
• Nick DePetrillo
• Mike Kershaw
• Travis Goodspeed
• Josh Wright
Terima kasih!
@DonAndrewBailey
donb@isecpartners.com

More Related Content

PDF
Taming Pythons with ZooKeeper (Pyconfi edition)
PDF
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
PPTX
A Science Project: Swift Serial Chat
PPTX
Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee...
PDF
XFLTReaT: A New Dimension in Tunneling (Shakacon 2017)
PPTX
Steelcon 2014 - Process Injection with Python
PDF
PPTX
You didnt see it’s coming? "Dawn of hardened Windows Kernel"
Taming Pythons with ZooKeeper (Pyconfi edition)
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
A Science Project: Swift Serial Chat
Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee...
XFLTReaT: A New Dimension in Tunneling (Shakacon 2017)
Steelcon 2014 - Process Injection with Python
You didnt see it’s coming? "Dawn of hardened Windows Kernel"

What's hot (20)

PPTX
EhTrace -- RoP Hooks
PPTX
Skyscanner presents: Getting started with tornado with Sharknado
PDF
Project Basecamp: News From Camp 4
PDF
CNIT 126: 13: Data Encoding
PDF
XFLTReaT: A New Dimension in Tunnelling (HITB GSEC 2017)
PPTX
BSides Hannover 2015 - Shell on Wheels
PPTX
[CB16] COFI break – Breaking exploits with Processor trace and Practical cont...
PPTX
NBTC#2 - Why instrumentation is cooler then ice
PPTX
Security research over Windows #defcon china
PPTX
DerbyCon - APT2
PPTX
SecureWV - APT2
PPTX
How to Keep Your Data Safe in MongoDB
PDF
Tips on High Performance Server Programming
PDF
Practical Malware Analysis Ch13
PPTX
Back to the CORE
PDF
Optimizing Python
PDF
DeathNote of Microsoft Windows Kernel
PDF
Hermes Reliable Replication Protocol - Poster
PDF
Process injection - Malware style
PDF
CNIT 127: Ch 18: Source Code Auditing
EhTrace -- RoP Hooks
Skyscanner presents: Getting started with tornado with Sharknado
Project Basecamp: News From Camp 4
CNIT 126: 13: Data Encoding
XFLTReaT: A New Dimension in Tunnelling (HITB GSEC 2017)
BSides Hannover 2015 - Shell on Wheels
[CB16] COFI break – Breaking exploits with Processor trace and Practical cont...
NBTC#2 - Why instrumentation is cooler then ice
Security research over Windows #defcon china
DerbyCon - APT2
SecureWV - APT2
How to Keep Your Data Safe in MongoDB
Tips on High Performance Server Programming
Practical Malware Analysis Ch13
Back to the CORE
Optimizing Python
DeathNote of Microsoft Windows Kernel
Hermes Reliable Replication Protocol - Poster
Process injection - Malware style
CNIT 127: Ch 18: Source Code Auditing
Ad

Viewers also liked (20)

PPTX
How i hack_hacker_facebook - el_rumi
PDF
The_Hydra - Bagaimana Menulis dan Memaintain Elektronik Hacking Magazine
PDF
Turning tl mr 3020 into automate wireless attacker
PDF
MrX - ADT: It's not about Faking the Approval
PDF
Desain skema rn4 s1
PDF
How to train your ninja
PDF
Spying The Wire
PPTX
Studi dan Implementasi Keamanan User Privacy menggunakan CP-ABE
PDF
The21stcenturybankjob 101014152255-phpapp02
PDF
Turning tl mr 3020 into automate wireless attacker
PDF
Mobile security-an-introduction - za
PPTX
Analisa kejahatan menggunakan jaringan gsm
PDF
Reksoprodjo cyber warfare stmik bali 2010
PDF
Generating the responses
PPTX
Reversing blue coat proxysg - wa-
PDF
y3dips, mastering the network hackingFU
PDF
A million little tracking devices - Don Bailey
PDF
indounderground, Carding, carder and why you should avoid it!
PDF
Keynote - Jim Geovedi - professional-hackers
PDF
Linux kernel-rootkit-dev - Wonokaerun
How i hack_hacker_facebook - el_rumi
The_Hydra - Bagaimana Menulis dan Memaintain Elektronik Hacking Magazine
Turning tl mr 3020 into automate wireless attacker
MrX - ADT: It's not about Faking the Approval
Desain skema rn4 s1
How to train your ninja
Spying The Wire
Studi dan Implementasi Keamanan User Privacy menggunakan CP-ABE
The21stcenturybankjob 101014152255-phpapp02
Turning tl mr 3020 into automate wireless attacker
Mobile security-an-introduction - za
Analisa kejahatan menggunakan jaringan gsm
Reksoprodjo cyber warfare stmik bali 2010
Generating the responses
Reversing blue coat proxysg - wa-
y3dips, mastering the network hackingFU
A million little tracking devices - Don Bailey
indounderground, Carding, carder and why you should avoid it!
Keynote - Jim Geovedi - professional-hackers
Linux kernel-rootkit-dev - Wonokaerun
Ad

Similar to Micro control idsecconf2010 (20)

PDF
Practical reverse engineering and exploit development for AVR-based Embedded ...
PDF
Solnik secure enclaveprocessor-pacsec
KEY
Emulating With JavaScript
PPTX
Reverse Engineering the TomTom Runner pt. 1
PPTX
Pipiot - the double-architecture shellcode constructor
PDF
Demystifying Secure enclave processor
KEY
Messaging, interoperability and log aggregation - a new framework
PDF
Reverse Engineering the TomTom Runner pt. 2
PDF
Lecture 03 basics of pic
PPTX
Optimizing Java Notes
PPTX
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
PPTX
CPU Caches
PPT
10 instruction sets characteristics
PDF
STORMPresentation and all about storm_FINAL.pdf
PDF
One Shellcode to Rule Them All: Cross-Platform Exploitation
PPTX
Advanced SOHO Router Exploitation XCON
PDF
Performance
PDF
Bits of Advice for the VM Writer, by Cliff Click @ Curry On 2015
PDF
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
PDF
Automatic Operation Bot for Ceph - You Ji
Practical reverse engineering and exploit development for AVR-based Embedded ...
Solnik secure enclaveprocessor-pacsec
Emulating With JavaScript
Reverse Engineering the TomTom Runner pt. 1
Pipiot - the double-architecture shellcode constructor
Demystifying Secure enclave processor
Messaging, interoperability and log aggregation - a new framework
Reverse Engineering the TomTom Runner pt. 2
Lecture 03 basics of pic
Optimizing Java Notes
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
CPU Caches
10 instruction sets characteristics
STORMPresentation and all about storm_FINAL.pdf
One Shellcode to Rule Them All: Cross-Platform Exploitation
Advanced SOHO Router Exploitation XCON
Performance
Bits of Advice for the VM Writer, by Cliff Click @ Curry On 2015
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Automatic Operation Bot for Ceph - You Ji

More from idsecconf (20)

PDF
IDSECCONF2024 Capture The FLag Write up - 3 MAS MAS
PDF
IDSECCONF2024 - Rifqi Hilmy Zhafrant - Hunting and Exploiting GraphQL Vulnera...
PDF
IDSECCONF2024 - Arief Karfianto - AI-Enhanced Security Analysis in Requiremen...
PDF
IDSECCONF2024 - Ryan Fabella, Daniel Dhaniswara - Keamanan Siber Pada Kendara...
PDF
IDSECCONF2024 - Angela Oryza - ITS Nabu-Platform Pelatihan Keamanan Siber den...
PDF
IDSECCONF2024 - Rama Tri Nanda - MQTT hacking, RCE in Smart Router.pdf
PDF
IDSECCONF2024 - Muhammad Dwison - The Implementation Of One Pixel Attack To S...
PDF
IDSECCONF2024 - Kang Ali - Local LLM can Simulate Apt Malware With Jailbreak ...
PDF
IDSECCONF2024 - Brian Nasywa - Comparison of Quantum Key Distribution Protoco...
PDF
idsecconf2023 - Mochammad Riyan Firmansyah - Takeover Cloud Managed Router vi...
PDF
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
PDF
idsecconf2023 - Mangatas Tondang, Wahyu Nuryanto - Penerapan Model Detection ...
PDF
idsecconf2023 - Rama Tri Nanda - Hacking Smart Doorbell.pdf
PDF
idsecconf2023 - Akshantula Neha, Mohammad Febri Ramadlan - Cyber Harmony Auto...
PDF
idsecconf2023 - Aan Wahyu - Hide n seek with android app protections and beat...
PDF
idsecconf2023 - Satria Ady Pradana - Launch into the Stratus-phere Adversary ...
PDF
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
PDF
Muh. Fani Akbar - Infiltrate Into Your AWS Cloud Environment Through Public E...
PDF
Rama Tri Nanda - NFC Hacking Hacking NFC Reverse Power Supply Padlock.pdf
PDF
Arief Karfianto - Proposed Security Model for Protecting Patients Data in Ele...
IDSECCONF2024 Capture The FLag Write up - 3 MAS MAS
IDSECCONF2024 - Rifqi Hilmy Zhafrant - Hunting and Exploiting GraphQL Vulnera...
IDSECCONF2024 - Arief Karfianto - AI-Enhanced Security Analysis in Requiremen...
IDSECCONF2024 - Ryan Fabella, Daniel Dhaniswara - Keamanan Siber Pada Kendara...
IDSECCONF2024 - Angela Oryza - ITS Nabu-Platform Pelatihan Keamanan Siber den...
IDSECCONF2024 - Rama Tri Nanda - MQTT hacking, RCE in Smart Router.pdf
IDSECCONF2024 - Muhammad Dwison - The Implementation Of One Pixel Attack To S...
IDSECCONF2024 - Kang Ali - Local LLM can Simulate Apt Malware With Jailbreak ...
IDSECCONF2024 - Brian Nasywa - Comparison of Quantum Key Distribution Protoco...
idsecconf2023 - Mochammad Riyan Firmansyah - Takeover Cloud Managed Router vi...
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf2023 - Mangatas Tondang, Wahyu Nuryanto - Penerapan Model Detection ...
idsecconf2023 - Rama Tri Nanda - Hacking Smart Doorbell.pdf
idsecconf2023 - Akshantula Neha, Mohammad Febri Ramadlan - Cyber Harmony Auto...
idsecconf2023 - Aan Wahyu - Hide n seek with android app protections and beat...
idsecconf2023 - Satria Ady Pradana - Launch into the Stratus-phere Adversary ...
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
Muh. Fani Akbar - Infiltrate Into Your AWS Cloud Environment Through Public E...
Rama Tri Nanda - NFC Hacking Hacking NFC Reverse Power Supply Padlock.pdf
Arief Karfianto - Proposed Security Model for Protecting Patients Data in Ele...

Micro control idsecconf2010

  • 1. Micro Control Attacking uC Applications Don A. Bailey (donb@isecpartners.com)
  • 3. What’s this uC thing all about? • Single integrated computer • Processor, volatile, non-volatile storage ▫ All In One • Can drive many peripherals • Easily programmable • Field update/upgrade capability • Personalization (EEPROM)
  • 4. No, really… Why do I care? • Your car • Implanted medical devices ▫ WBAN (Wireless Body Area Network) • Crops monitoring (hydro/aero/enviro-ponics) • Infrastructure monitoring (SCADA, etc) • “Smart Dust” • Access controls (RFID, biometrics, etc)
  • 5. Now with More Networking! • Bluetooth • USB • 802.11 • 802.15.4 • RFID • DECT • GSM
  • 6. Security? • Some tamper resistance • Hardware security • From a software point of view? ▫ Crypto support ▫ …?
  • 7. OODA Loop? • Field upgrades are rare ▫ But getting more common ▫ ST M24LR64 Dual EEPROM (Leet!!) • Most firmware is legacy code • Spot updates for new functionality / peripherals • Mostly written in C, C++, and/or ASM
  • 8. Why wouldn’t you PWN an uC?
  • 9. Prior work? • Travis Goodspeed ▫ GoodFET, neighbor! • Josh Wright ▫ Killerbee!
  • 11. Lots of uC out there, but… • Popular with hackers and engineers • Free toolchain (gcc based) • Free IDE (AVR Studio 4) • No Soldering necessary • Relatively cheap dev tools ▫ AVRISP mkII (~30 USD) ▫ AVR JTAGICE mkII (good deals from Arrow Electronics)
  • 14. Typically included in AVR8 • ALU • Flash • SRAM • EEPROM • Peripheral support (USART, SPI, I2C, TWI, etc)
  • 16. That’s right, it’s Harvard • Separate Data and Code lines • Code always retrieved from Flash • Data always retrieved from SRAM • Flash can be written in software ▫ Typically Boot Loader Support ▫ Fuses determine this ▫ Some AVR8 don‟t support this
  • 17. Point? • Attack data, not instructions • Return-to-whatever (ROP :-P) • Easier! Less data to inject (typically) • Takes longer • That‟s what GoodFET is for ▫ Snatch one Smart Dust sensor ▫ GoodFET ▫ Analyze code ▫ Build ROP strategy ▫ Own 100 more remotely
  • 19. Typical AVR8 Stuff? • Interrupts • Atomic Execution (sort of ;-) • Stack • 32 8-bit registers • LSB • 8/16/32/64-bit integer support • Access to I/O mem • RISC
  • 20. What doesn’t AVR8 have? • Security boundaries • Contexts (multiple stacks) • Concurrency • Segmentation/Paging • No atomic instructions (cmpxchg?) • Native 32/64-bit integer support • Exceptions ▫ Where‟s the Page Fault, yo?!
  • 22. Typical programmatic flow • Reset • Init • Main • somefunc
  • 23. On startup • AVR sets PC to OxOO in Flash • OxOO = Reset Vector • JMP to init in crtO • Init does stuff… • Call main • Do stuff… • Call somefunc • Do more stuff…
  • 24. From RESET -> main()
  • 26. crt0 Copy of .rodata
  • 28. Stack Dump After Call to main()
  • 34. Four Main Points Demonstrated… • Function conventions are typical ▫ Optimization may minimize this • Code Layout • Data Layout • Atomic Code Sections
  • 35. Code Layout in Flash • Interrupt Vectors at OxOO • RESET Vector at OxOO • Main Application Code • Data (???) • Boot Loader Section ▫ Can write to Flash (if Fuses allow) for field updates
  • 36. Data Layout in SRAM • Registers at OxOO • I/O Memory at Ox2O • Extended I/O Memory • Data (copied from Flash) at Ox1OO • BSS • Heap • Stack • ??? ;-)
  • 37. Atomicity • CLI used • SREG can be accessed via SRAM (I/O memory) • 1 CPU Cycle to write to SREG • Flow: ▫ Save a copy of SREG ▫ Clear Interrupt Bit in SREG ▫ Perform uninterrupted action  Write to low byte of SP  Write to SREG (old state with interrupt bit set)  Write to high byte of SP
  • 38. Now, Let’s Have Some Real Fun
  • 39. Entropy? What entropy? • Randomness is very weak • Crypto hurt as a result • Pools can be accumulated ▫ “True Random Number Generator On an Atmel uC” – IEEE Paper • 8 Random Bits using RC oscillator ▫ Per second!!!
  • 40. Race Conditions • No semblance of context switching ▫ TinyOS/Contiki simulate it • Critical Sections secured through CLI • Attack these sections ▫ Overwrite SREG; enable Interrupts • Use Interrupts to cause unexpected behavior
  • 41. Return Value Checks • Snprintf returning <=O or >= sizeof buf? • Logic Issue • Always a problem
  • 42. memcpy and Friends • Latest avr-libc • Don‟t test for negative size values • No option to “secure” with CLI ▫ Interruptable ▫ Oops…Where‟d my SP go?! ;-)
  • 43. Buffer Overflows • Easy as pie • Instruction address in mem is /2 • Return Oriented Programming ▫ Get those Registers set up correctly! • Force a jump to the Boot Loader • Instant Flash update (simulate field update) • Can be triggered remotely • AVR doesn‟t know the difference between you and developer
  • 44. Frame Pointer Overwrite • Standard FP overwrite • Point stack to attacker controlled data • Next frame has the RET • FP saved LSB first
  • 45. Setjmp • Obvious target • Often used • Makes up for lack of exceptions • Saves entire program state • Overwrite all registers • Overwrite PC
  • 46. Integer Overflows • Work as expected • 8-bit registers • 16-bit native instructions • Easy to wrap OxFFFF
  • 47. Integer Promotion • Normal integer promotion • Unsigned -> Signed = No Sign Extension • Signed -> Signed = Sign Extension • Stop using „char‟ for everything ;-) • Lots of 8-bit networking protocols ▫ 8-bit size fields ▫ Promoted to int during packet ingestion ▫ Oops!!
  • 48. Heap Overflows • Heap Struct consists of { size, Next* } • Next* points to the next free heap chunk • Adjacent chunks are combined • No function pointers  • Easily mangle data • Next* doesn‟t have to point to Heap  • Heap data isn‟t zeroed on free() • Easy way to create pseudo stack frames • ROP Helper!
  • 49. Double Free • Latest avr-libc free() doesn‟t check • Any address can be used (except NULL) • Free() will happily overwrite first 2 bytes with ▫ Next* • Add it to the free list ;-) • Can stealthily force malloc() to return (void*)OxOO • Write direct to Registers, I/O memory, etc • ROP Helper!!
  • 50. “Segment” Collision • Heap is allocated slightly under stack • Stack is dynamic!!! • BSS is adjacent to Heap • .rodata isn‟t Read Only! Adjacent to BSS • One big happy family!
  • 51. Uninitialized Variables • Allocate a large Heap chunk • Spray with OxAABB • Stack decends into Heap • Bewm! • Example code at: ▫ http://pa-ri.sc/uC/dangle.tar.bz2
  • 52. Format Strings • Current avr-libc has no %n support • No fun  • But, kind of reasonable
  • 53. NULL Pointer Dereferences • There are no privilege rings, but still useful • Functions like malloc() still return NULL • (void*)OxOO points to Registers in SRAM • NULL deref is a very good thing • Like free() bug, instant access to Regs, I/O Mem • On the flip side… ▫ ??? ;-)
  • 54. Beyond Memory • Deref beyond physical memory addresses? • Example: ATmega644P ▫ 4096 bytes SRAM ▫ Total 4196 addressable bytes  With registers, I/O memory • Ox1OFF should be highest addressible address
  • 58. There is no Page Fault on AVR8 • Memory faults cannot occur • For program safety, don‟t RESET • Read AND Write support • Just wrap addresses back to (void*)OxOO • Overwriting past end of PHYSMEM = start of PHYSMEM • i.e. Ox11OO = OxO1OO • How convenient ;-) • Overwrite EVERYTHING ANYWHERE
  • 59. Example code? • See the memdump application ▫ Runs on any AVR8 with USART ▫ http://pa-ri.sc/uC/memdump.tar.bz2 • Code tested on 10 different uCs in the AVR family ▫ ATtiny ▫ ATmega
  • 60. We Pack and Deliver like UPS Trucks
  • 61. Summary? • Ripe environment for application vulnerabilities • Little protection schemes ▫ Except solid auditing and a tight SDLC • Lots of legacy code in the field • Lots of important devices
  • 62. Special thanks… • Jim Geovedi • Y3dips • Kendi Demonic • Abdul Azis • Dhillon Kannabhiran • iSEC Partners • Nick DePetrillo • Mike Kershaw • Travis Goodspeed • Josh Wright