Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception:...

65
Inception: System-Wide Security Testing of Real- World Embedded Systems Software Nassim Corteggiani (Maxim Integrated / EURECOM) Giovanni Camurati (EURECOM) Aurélien Francillon (EURECOM) 08/15/18

Transcript of Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception:...

Page 1: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Inception: System-Wide Security Testing of Real-World Embedded Systems SoftwareNassim Corteggiani (Maxim Integrated / EURECOM)

Giovanni Camurati (EURECOM)Aurélien Francillon (EURECOM)

08/15/18

Page 2: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Embedded Systems Are Everywhere

| Maxim Integrated | EURECOM2

[1] https://community.arm.com/processors/b/blog/posts/arm-cortex-m3-processor-the-core-of-the-iot

Page 3: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Embedded Systems Are Everywhere

Low PowerMicro-controllers

| Maxim Integrated | EURECOM3

[1] https://community.arm.com/processors/b/blog/posts/arm-cortex-m3-processor-the-core-of-the-iot

Page 4: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Embedded Systems Are Everywhere

Low PowerMicro-controllers

Over 32 billions of ARM Cortex M3 shipped in 2018

[1]

[1] https://community.arm.com/processors/b/blog/posts/arm-cortex-m3-processor-the-core-of-the-iot

Cover a wide range of fields

| Maxim Integrated | EURECOM4

Page 5: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why the Security of Such Systems Matters?

| Maxim Integrated | EURECOM5

Page 6: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why the Security of Such Systems Matters?

• Highly connected -> large scale attacks

| Maxim Integrated | EURECOM6

Page 7: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why the Security of Such Systems Matters?

• Highly connected -> large scale attacks

• Difficulty to patch the code> Mask ROM →mask applied on the chip during the fabrication> Off-line devices

| Maxim Integrated | EURECOM7

Page 8: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why the Security of Such Systems Matters?

• Highly connected -> large scale attacks

• Difficulty to patch the code> Mask ROM →mask applied on the chip during the fabrication> Off-line devices

• Store sensitive data> Bitcoin wallet> Payment terminal

| Maxim Integrated | EURECOM8

Page 9: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why the Security of Such Systems Matters?

• Highly connected -> large scale attacks

• Difficulty to patch the code> Mask ROM →mask applied on the chip during the fabrication> Off-line devices

• Store sensitive data> Bitcoin wallet> Payment terminal

• Drive sensitive hardware system> Physical damage> Production line outage> Signaling systems (red light)

| Maxim Integrated | EURECOM9

Page 10: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Exemple of Recent Security IssuesRecent attacks

| Maxim Integrated | EURECOM10

Page 11: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Exemple of Recent Security IssuesRecent attacks

• Nintendo Switch Tegra X1 bootrom exploit 2018> buffer overflow in the USB stack embedded in the mask ROM

> Cannot be patched

> Give access to the entire software stack

| Maxim Integrated | EURECOM11

Page 12: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

How Can We Test Such Firmware Programs?

• Symbolic Execution> High path coverage

> Return test case for bugs

| Maxim Integrated | EURECOM12

Page 13: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Symbolic Execution Examplei = symb_i

Int buffer[2]

i = <input>

int buffer[2] = {0, 1};

| Maxim Integrated | EURECOM13

Page 14: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Symbolic Execution Example

¬(𝟎 ≤ 𝒊 < 𝟐)𝟎 ≤ 𝒊 < 𝟐

i = symb_iInt buffer[2]

buffer[i]TRUE FALSE

i = <input>

int buffer[2] = {0, 1};

if( buffer[i] == 0 ) {

Out of boundsaccess

| Maxim Integrated | EURECOM14

Page 15: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Symbolic Execution Example

¬(𝟎 ≤ 𝒊 < 𝟐)𝟎 ≤ 𝒊 < 𝟐

i = symb_iInt buffer[2]

buffer[i]TRUE FALSE

i = <input>

int buffer[2] = {0, 1};

if( buffer[i] == 0 ) {

buffer[i] = 0xDEADBEEF;

}

¬(𝒊 = 𝟎)𝒊 = 𝟎

buffer[i] == 0xDEADBEAF

buffer[i] == 0TRUE FALSE

| Maxim Integrated | EURECOM15

Out of boundsaccess

Page 16: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:

| Maxim Integrated | EURECOM16

Page 17: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

| Maxim Integrated | EURECOM17

Page 18: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

| Maxim Integrated | EURECOM18

Page 19: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

> High code coverage

| Maxim Integrated | EURECOM19

Page 20: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

> High code coverage

C/C++ source code

| Maxim Integrated | EURECOM20

Page 21: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

> High code coverage

C/C++ source code

Clang

| Maxim Integrated | EURECOM21

Page 22: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

> High code coverage

C/C++ source code

Clang

LLVM bit-code

| Maxim Integrated | EURECOM22

Page 23: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware ProgramsKlee as a basis

• Inception is based on Klee a symbolic virtual machine:> Widely deployed, efficient and based on the LLVM framework.

> Find memory safety violations

> High code coverage

C/C++ source code

Clang

LLVM bit-code

Klee

| Maxim Integrated | EURECOM23

Page 24: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why testing source code instead of binary code ?Source VS Binary

| Maxim Integrated | EURECOM24

Page 25: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why testing source code instead of binary code ?Source VS Binary

char b1[2];

char b2[2];

char getElement(int index)

{

return b1[index];

}

b1: .space 2

b2: .space 2

getElement(int):

ldr r2, .L3

add r3, r2, r0

ldrb r0, [r3]

bx lr

.L3: .word b1

| Maxim Integrated | EURECOM25

Page 26: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why testing source code instead of binary code ?Source VS Binary

char b1[2];

char b2[2];

char getElement(int index)

{

return b1[index];

}

b1: .space 2

b2: .space 2

getElement(int):

ldr r2, .L3

add r3, r2, r0

ldrb r0, [r3]

bx lr

.L3: .word b1

| Maxim Integrated | EURECOM26

Page 27: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why testing source code instead of binary code ?Source ( Klee/Clang…) VS Binary (SE2, angr, BAP)

define i8 @getElement(i32 %index){

entry:

%0 = load i32* %index.addr

%1 = getelementptr inbounds

[2 x i8]* @b1, i32 0, i32 %0

%2 = load i8* %1

ret i8 %2

}

char b1[2];

char b2[2];

char getElement(int index)

{

return b1[index];

}

b1: .space 2

b2: .space 2

getElement(int):

ldr r2, .L3

add r3, r2, r0

ldrb r0, [r3]

bx lr

.L3: .word b1

define i8 @getElement(i32 index) {

entry:

store i32 %index, i32* @R0

store i32 268436792, i32* @R2

%R2_1 = load i32* @R2

%R0_1 = load i32* @R0

%R2_2 = add i32 %R2_1, %R0_1

%R3_0 = inttoptr i32 %R2_2 to i32*

%R3_1 = bitcast i32* %R3_0 to i8*

%R3_2 = load i8* %R3_1

%R3_3 = zext i8 %R3_2 to i32

| Maxim Integrated | EURECOM27

Page 28: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Why testing source code instead of binary code ?Source ( Klee/Clang…) VS Binary (SE2, angr, BAP)

define i8 @getElement(i32 %index){

entry:

%0 = load i32* %index.addr

%1 = getelementptr inbounds

[2 x i8]* @b1, i32 0, i32 %0

%2 = load i8* %1

ret i8 %2

}

char b1[2];

char b2[2];

char getElement(int index)

{

return b1[index];

}

b1: .space 2

b2: .space 2

getElement(int):

ldr r2, .L3

add r3, r2, r0

ldrb r0, [r3]

bx lr

.L3: .word b1

define i8 @getElement(i32 index) {

entry:

store i32 %index, i32* @R0

store i32 268436792, i32* @R2

%R2_1 = load i32* @R2

%R0_1 = load i32* @R0

%R2_2 = add i32 %R2_1, %R0_1

%R3_0 = inttoptr i32 %R2_2 to i32*

%R3_1 = bitcast i32* %R3_0 to i8*

%R3_2 = load i8* %R3_1

%R3_3 = zext i8 %R3_2 to i32

| Maxim Integrated | EURECOM28

Page 29: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Source vs Binary

• When source available testing binary is possible however:> Types are lost

> Corruption will be detected later if at all

> Worse on embedded systems

• See: Muench et. al. What you corrupt is not what you crash, NDSS 2018

• Goal of Inception: improve testing for firmware during development> Limit requirements on code

| Maxim Integrated | EURECOM29

Page 30: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsIs C/C++ Support Enough To Test Real World Firmware ?

• Number of functions including assembly instructions in real world embedded software

22

98 108 80

1

10

100

1000

STM32(demos) FreeRTOS(STM32) Mbed OS ChibiOS

Functions2

| Maxim Integrated | EURECOM30

Page 31: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsIs C/C++ Support Enough To Test Real World Firmware ?

• Number of functions including assembly instructions in real world embedded software

22

98 108 80

1

10

100

1000

STM32(demos) FreeRTOS(STM32) Mbed OS ChibiOS

Functions2

• Assembly code :> Multithreading

> Optimizations

> Side channel counter-measures

> Hardware features e.g. ultra low power mode

| Maxim Integrated | EURECOM31

Page 32: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsIs C/C++ Support Enough To Test Real World Firmware ?

• Presence of assembly instructions in real world embedded software

0

500

1000

1500

2000

2500

3000

STM32(demos) FreeRTOS(STM32) Mbed OS ChibiOS

Functions with inline asm Functions2

• Assembly code :> Multithreading

> Optimizations

> Side channel counter-measures

> Hardware features e.g. ultra low power modeChallenge 1 :

Firmware source code contains a mix of C/C++, assembly and binary

| Maxim Integrated | EURECOM32

Page 33: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsHardware environment

| Maxim Integrated | EURECOM33

Page 34: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsHardware environment

• Hardware interactions> Memory Mapped I/O

| Maxim Integrated | EURECOM34

Page 35: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsHardware environment

• Hardware interactions> Memory Mapped I/O

• Memory

• Peripherals

#define UART_STATUS 0x40000000

#define UART_DATA 0x40000004

char* RX_BUFFER = 0x20000000;

while(!*UART_STATUS) {

char* data = (char*)UART_DATA;

strncpy(RX_BUFFER++, data, 4);

}

Internal/externalmemory

Internal/externalperipherals

| Maxim Integrated | EURECOM35

Page 36: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsHardware environment

• Hardware interactions> Memory Mapped I/O

• Memory

• Peripherals

> Interrupt driven programs

#define UART_STATUS 0x40000000

#define UART_DATA 0x40000004

char* RX_BUFFER = 0x20000000;

while(!*UART_STATUS) {

char* data = (char*)UART_DATA;

strncpy(RX_BUFFER++, data, 4);

}

Internal/externalmemory

Internal/externalperipherals

InterruptController

void interrupt_handler() { }

| Maxim Integrated | EURECOM36

Page 37: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Major Challenges For Symbolic Execution of Firmware ProgramsHardware environment

• Hardware interactions> Memory Mapped I/O

• Memory

• Peripherals

> Interrupt driven programs

#define UART_STATUS 0x40000000

#define UART_DATA 0x40000004

char* RX_BUFFER = 0x20000000;

while(!*UART_STATUS) {

char* data = (char*)UART_DATA;

strncpy(RX_BUFFER++, data, 4);

}

Internal/externalmemory

Internal/externalperipherals

InterruptController

void interrupt_handler() { }

Challenge 2 :

Firmware programs highly interact with their hardware environment

| Maxim Integrated | EURECOM37

Page 38: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware Programs

| Maxim Integrated | EURECOM38

Page 39: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware Programs

Firmware(C/C++, asm,

binary)Clang LLVM bit-code

| Maxim Integrated | EURECOM39

Page 40: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware Programs

Firmware(C/C++, asm,

binary)Clang LLVM bit-code ELFARM

Backend

| Maxim Integrated | EURECOM40

Page 41: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware Programs

Firmware(C/C++, asm,

binary)Clang LLVM bit-code ELF

InceptionTranslator

LLVM bit-codeMixed IR

ARMBackend

• Inception translator:> Lift assembly directives and binary code in

LLVM bit-code

> Merge lifted bit-code with other• High-IR : obtained from C/C++

• Glue-IR : glue code

• Low-IR : lifted assembly/binary

| Maxim Integrated | EURECOM41

Page 42: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Building A Symbolic Executor For Firmware Programs

Firmware(C/C++, asm,

binary)Clang LLVM bit-code

ModifiedKlee

ELF

InceptionTranslator

LLVM bit-codeMixed IR

ARMBackend

| Maxim Integrated | EURECOM42

• Inception translator:> Lift assembly directives and binary code in

LLVM bit-code

> Merge lifted bit-code with other• High-IR : obtained from C/C++

• Glue-IR : glue code

• Low-IR : lifted assembly/binary

> Support Cortex M3 ISA

Page 43: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Challenge 1 : Supporting C/C++/Asm/Binary codeInception-translator

| Maxim Integrated | EURECOM52

Page 44: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Inception Translator : Merging High-IR and Low-IR

| Maxim Integrated | EURECOM53

int a = 4;

boo(a);

<boo>:

1000045C: 80 B4 push {r7}

1000045E: 83 B0 sub sp, #0xc

Page 45: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Inception Translator : Merging High-IR and Low-IR

High IR

%a = alloca i32

store i32 4, i32* %a

%0 = load i32* %a

%call = call i32

@boo(i32 %0)

ret void }

| Maxim Integrated | EURECOM54

int a = 4;

boo(a);

<boo>:

1000045C: 80 B4 push {r7}

1000045E: 83 B0 sub sp, #0xc

Page 46: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Inception Translator : Merging High-IR and Low-IR

Low IRHigh IR

int a = 4;

boo(a);

%a = alloca i32

store i32 4, i32* %a

%0 = load i32* %a

%call = call i32

@boo(i32 %0)

ret void }

<boo>:

1000045C: 80 B4 push {r7}

1000045E: 83 B0 sub sp, #0xc

"boo+0": ; preds = %entry

%R7_1 = load i32* @R7

%SP1 = load i32* @SP

%SP2 = sub i32 %SP1, 4

%SP3 = inttoptr i32 %SP2 to i32*

store i32 %R7_1, i32* %SP3

store i32 %SP2, i32* @SP

%SP4 = load i32* @SP

%SP5 = add i32 %SP4, -13

%SP6 = add i32 %SP5, 1

| Maxim Integrated | EURECOM55

Page 47: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Inception Translator : Merging High-IR and Low-IR

Glue IR Low IRHigh IR

int a = 4;

boo(a);

define i32 @boo(i32 %a){

entry:

store i32 %a, i32* @R0

br label %"boo+0"

%a = alloca i32

store i32 4, i32* %a

%0 = load i32* %a

%call = call i32

@boo(i32 %0)

ret void }

<boo>:

1000045C: 80 B4 push {r7}

1000045E: 83 B0 sub sp, #0xc

"boo+0": ; preds = %entry

%R7_1 = load i32* @R7

%SP1 = load i32* @SP

%SP2 = sub i32 %SP1, 4

%SP3 = inttoptr i32 %SP2 to i32*

store i32 %R7_1, i32* %SP3

store i32 %SP2, i32* @SP

%SP4 = load i32* @SP

%SP5 = add i32 %SP4, -13

%SP6 = add i32 %SP5, 1

| Maxim Integrated | EURECOM56

Page 48: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Unified Memory Layout

| Maxim Integrated | EURECOM57

Page 49: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Unified Memory Layout

Glue IR :lower

the level ofsemantic

Low IRHigh IR

Glue IR :higher

the level of semantic

High IR

Execution path| Maxim Integrated | EURECOM58

Page 50: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Unified Memory Layout

• Allocate Low IR memory : stack, virtual CPU registers, heap

Glue IR :lower

the level ofsemantic

Low IRHigh IR

Glue IR :higher

the level of semantic

High IR

Execution path| Maxim Integrated | EURECOM59

Page 51: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Unified Memory Layout

• Allocate Low IR memory : stack, virtual CPU registers, heap

• Fill gaps in global data sections• When no C/C++ symbols point to this area

Glue IR :lower

the level ofsemantic

Low IRHigh IR

Glue IR :higher

the level of semantic

High IR

Execution path| Maxim Integrated | EURECOM60

Page 52: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Unified Memory Layout

• Allocate Low IR memory : stack, virtual CPU registers, heap

• Fill gaps in global data sections• When no C/C++ symbols point to this area

• Allocate High-IR objects at location defined in the ELF symbols table

Glue IR :lower

the level ofsemantic

Low IRHigh IR

Glue IR :higher

the level of semantic

High IR

Execution path| Maxim Integrated | EURECOM61

Page 53: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Low IR Hardware Mechanisms Emulation

• Challenge we solved:> Indirect calls (Indirect Call Promotion)

> Seamless hardware mechanisms (Context switching)

> Supervisor call

> Update specific registers values (LR, MSP, PSP, BASEPRI, ITSTATE, …)

Glue IR :lower

the level ofsemantic

Low IRHigh IR

Glue IR :higher

the level of semantic

High IR

Execution path

Emulation

| Maxim Integrated | EURECOM62

Page 54: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Challenge 2 : Hardware interactionsInception-analyzer

| Maxim Integrated | EURECOM63

Page 55: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

The Inception System Overview

Mixed Bytecode

config.json

Klee-basedSymbolic Virtual Machine

ELF

| Maxim Integrated | EURECOM64

Page 56: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

The Inception System Overview

Mixed Bytecode

config.json

Klee-basedSymbolic Virtual

Machine

Memory Mapped

stack

Globals

heap

Data are allocated according to the information present in the symbol table

User configuration (config.json):- Local memory- Redirected memory- Symbolic memory

ELF

| Maxim Integrated | EURECOM65

Page 57: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

The Inception System Overview: Inception debugger

Mixed Bytecode

config.json

Klee-basedSymbolic Virtual

Machine

Memory Mapped

stack

Globals

heap

ELFReal Device

CustomInception Debugger

USB 3.0 link

Jtag

| Maxim Integrated | EURECOM66

Page 58: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

The Inception System Overview: Inception debugger

• Inspired by Surrogates and Avatar

| Maxim Integrated | EURECOM67

Memory Mapped

stack

Globals

heap

Real Device

CustomInception Debugger

USB 3.0 link

Jtag

Zaddach et. al. AVATAR: A Framework to Support Dynamic Security Analysis of Embedded Systems' Firmwares, NDSS2014Koscher et. al. SURROGATES: Enabling Near-Real-Time Dynamic Analyses of Embedded Systems, WOOT 2015

Page 59: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

The Inception System Overview: Inception debugger

Mixed Bytecode

config.json

Klee-basedSymbolic Virtual

Machine

Memory Mapped

stack

Globals

heap

ELFReal Device

CustomInception Debugger

USB 3.0 link

InterruptController

Jtag

| Maxim Integrated | EURECOM68

Page 60: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Evaluation

| Maxim Integrated | EURECOM69

Page 61: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Performance

Average time to complete 1 × 106 read or write requests for SURROGATES and Inception.

Performance comparison between native execution and Inception.

* Current bottleneck is bit-code execution

0

10000

20000

30000

40000

50000

60000

70000

80000

Reads Writes Buffered Reads

Inception Surrogates

0,1

1

10

100

1000

10000

Wget Ping UART

Inception Native

| Maxim Integrated | EURECOM70

Average IO per second Average runtime [ms]

Page 62: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Bug Detection

Evolution of corruption detection vs. number of assembly functions in the EXPACT XML parser (4 vulnerabilities [1], symbolic inputs, and a timeout of 90s).

Corruption detection of real-world security flawsbased on FreeRTOS and the Juliet 1.3 test suites.

0

1

2

3

4

0 1 2 3 4 5

Detected Undetected

0%

20%

40%

60%

80%

100%

Division byZero

Null PointerDereference

Use AfterFree

FreeMemory Not

on Heap

Heap-BasedBuffer

Overflow

IntegerOverflow

Detected Undetected

[1] MUENCH et. al. What you corrupt is not what you crash: Challenges in fuzzing embedded devices. In NDSS 2018.

| Maxim Integrated | EURECOM71

% of detected bugsAverage number of detected vuln.

Page 63: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Verification

• Intensive verification of the lifter and the modified Klee> 53K tests comparison between Inception and native

> 1562 tests based on NIST Juliet 1.3 tests suite

> 40 tests based on the Klockwork tests suite

> Several demos for the STM32 L152RE and the LPC1850 DB1 boards

> 1 Mbed TLS test suite

> Several embedded operating systems (FreeRTOS, mini-arm-os)

| Maxim Integrated | EURECOM72

Page 64: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Conlusion

• Extends analysis to mixed languages: assembly, C/C++, binary

• Fit well in chip life-cycle : > test without hardware> FPGA-based design> silicium

• Already used on proprietary real world Mask ROM code at Maxim> Bugs found before mask manufacturing

• Inception is open-sourced:> Getting started at

https://inception-framework.github.io/inception/> Github and docker

| Maxim Integrated | EURECOM73

Page 65: Inception: System-Wide Security Testing of Real- World Embedded … · 2019-12-18 · Inception: System-Wide Security Testing of Real-World Embedded Systems Software Nassim Corteggiani

Questions?

| Maxim Integrated | EURECOM74

Free icons license : https://icons8.com