efficient reverse engineering of automotive firmware · 2019. 4. 30. · efficient reverse...

32
1 Efficient Reverse Engineering of Automotive Firmware Alyssa Milburn Security Analyst, Riscure [email protected] / @noopwafel (with Niek Timmers)

Upload: others

Post on 18-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

1

Efficient Reverse

Engineering of

Automotive Firmware

Alyssa Milburn

Security Analyst, Riscure

[email protected] / @noopwafel

(with Niek Timmers)

Page 2: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

2

Reverse Engineering

Getting

Firmware

IP

Tuning /

manipulation

Efficient Reverse Engineering of Automotive Firmware

Hacking

???

Reverse

Engineering Understanding

Page 3: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

3

Automotive Firmware?

Page 4: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

4

Instrument Cluster

• Speedometer/gauges • Display (screen) • Speaker! • Blinky lights!

• 32-bit CPU • CAN bus • I2C bus

• EEPROM

Page 5: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

5

How can we get the firmware?

Efficient Reverse Engineering of Automotive Firmware

External

flash

Debug

interfaces

Leaks

Software

vulnerabilities

Hardware

attacks

Page 6: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

6

What makes this challenging?

• “Non-standard” platforms

• New concepts

• Complexity

Efficient Reverse Engineering of Automotive Firmware

Page 7: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

7

Page 8: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

8

What makes this challenging?

No tools?! Let’s make some!

• Static analysis (disassembly): too complicated

• Dynamic analysis (emulation / debugging): no tools?

Efficient Reverse Engineering of Automotive Firmware

Page 9: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

9

What do we need?

• Processor (instruction set) emulator

• Timers, interrupts

• CAN controller

• I2C controller

• EEPROM • Display controller

Efficient Reverse Engineering of Automotive Firmware

Page 10: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

10 Efficient Reverse Engineering of Automotive Firmware

Emulating the CPU architecture

Page 11: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

11

“Implementing” peripherals

Efficient Reverse Engineering of Automotive Firmware

Page 12: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

12

How difficult was it?

~ 1 man-week of work ~ 3000 lines of (terrible) code (excluding support tooling)

Efficient Reverse Engineering of Automotive Firmware

Page 13: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

13

Dynamic analysis

Page 14: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

14

Debugging

Efficient Reverse Engineering of Automotive Firmware

Step!

Break!

Watch!

gdb “stub”

gdb

Page 15: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

15

Debugging

(gdb) hbreak *0x11032 Hardware assisted breakpoint 1 at 0x11032 (gdb) c Continuing. 0x00011032 in ?? () (gdb)

Efficient Reverse Engineering of Automotive Firmware

Page 16: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

16

Execution tracing

Efficient Reverse Engineering of Automotive Firmware

Page 17: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

17

Execution tracing

Efficient Reverse Engineering of Automotive Firmware

0x02920 0x02922 (jump) 0x02926 0x02928 0x0292c 0x02930

Page 18: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

18

Execution tracing

Efficient Reverse Engineering of Automotive Firmware

0x02920 0x02922 (jump) 0x02926 0x02928 0x0292c 0x02930

Page 19: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

19

Execution tracing

Efficient Reverse Engineering of Automotive Firmware

Page 20: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

20

Execution tracing

Efficient Reverse Engineering of Automotive Firmware

Page 21: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

21

Hacks!

Efficient Reverse Engineering of Automotive Firmware

Page 22: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

22

Hacks!

Efficient Reverse Engineering of Automotive Firmware

Page 23: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

23

Initial state

Running (booted)

Send CAN message

Observe CAN response

State rewinding

100ms boot time

Efficient Reverse Engineering of Automotive Firmware

Page 24: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

24

Taint tracking

Efficient Reverse Engineering of Automotive Firmware

1 ??

2 ??

3 ??

4 ??

5 ??

6 ??

7 ??

8 ??

CAN message Data[2] = CAN.read()

Data[7] = Data[2]

CAN message

CAN message

Data[7] == Y?

Page 25: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

25

Fuzzing

Efficient Reverse Engineering of Automotive Firmware

CAN message Memory

Memory[5] == 0xc7?

Path 1 Path 2

Page 26: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

26

./cc.py dcm discovery CARING CARIBOU v0.1 ------------------- Starting diagnostics service discovery Found diagnostics at arbitration ID 0x????, reply at 0x????

UDS

Efficient Reverse Engineering of Automotive Firmware

Page 27: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

27

UDS: security access

Efficient Reverse Engineering of Automotive Firmware

Random key Random key ==

calculateKey(seed)?

We found calculateKey!

Seed (challenge)

Page 28: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

28

UDS: security access

sending requestSeed (0x3) CAN0: RCV [id ####] 02 27 03 aa aa aa aa aa CAN0: TRQ [id ####] 06 67 03 47 2e 8e 70 aa sending sendKey CAN0: RCV [id ####] 06 27 04 41 9b 35 42 aa

comparison at 0002f390 (419b3542 vs 419b3542) is tainted with 000000c0 CAN0: TRQ [id ####] 02 67 04 aa aa aa aa aa

Efficient Reverse Engineering of Automotive Firmware

Page 29: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

29

EEPROM contents

Efficient Reverse Engineering of Automotive Firmware

Reverse engineering is hard work!

updateEEPROM(id, value)

Identification (VIN)

Features/ configuration

(UDS) security state

Odometer

Page 30: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

30

Takeaways

Efficient Reverse Engineering of Automotive Firmware

• Reverse engineering is not so hard!

• Lots of other “tricks” to try:

• Symbolic execution • Deobfuscation (if necessary) • Smarter fuzzing

• You can’t hide secrets in firmware:

• Use asymmetric cryptography (i.e. public keys) • Use the secure hardware inside modern processors

Page 31: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

31

Thanks to…

Efficient Reverse Engineering of Automotive Firmware

Santiago Cordoba

Eloi Sanfelix

Ramiro Pareja

Page 32: Efficient Reverse Engineering of Automotive Firmware · 2019. 4. 30. · Efficient Reverse Engineering of Automotive Firmware •Reverse engineering is not so hard! •Lots of other

32

Challenge your security

Alyssa Milburn

Security Analyst, Riscure

[email protected] / @noopwafel

Efficient Reverse Engineering of Automotive Firmware

icons8.com

• Training

• Tools

• Services