inception system wide security testing of real
play

Inception: System-Wide Security Testing of Real- World Embedded - PowerPoint PPT Presentation

Inception: System-Wide Security Testing of Real- World Embedded Systems Software Nassim Corteggiani (Maxim Integrated / EURECOM) Giovanni Camurati (EURECOM) Aurlien Francillon (EURECOM) 08/15/18 Embedded Systems Are Everywhere [1]


  1. 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

  2. Embedded Systems Are Everywhere [1] https://community.arm.com/processors/b/bl og/posts/arm-cortex-m3-processor-the-core- of-the-iot 2 | Maxim Integrated | EURECOM

  3. Embedded Systems Are Everywhere [1] Low Power https://community.arm.com/processors/b/bl Micro-controllers og/posts/arm-cortex-m3-processor-the-core- of-the-iot 3 | Maxim Integrated | EURECOM

  4. Embedded Systems Are Everywhere Over 32 billions of ARM Cortex M3 shipped in 2018 [1] Cover a wide range of fields [1] Low Power https://community.arm.com/processors/b/bl Micro-controllers og/posts/arm-cortex-m3-processor-the-core- of-the-iot 4 | Maxim Integrated | EURECOM

  5. Why the Security of Such Systems Matters? 5 | Maxim Integrated | EURECOM

  6. Why the Security of Such Systems Matters? • Highly connected -> large scale attacks 6 | Maxim Integrated | EURECOM

  7. 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 7 | Maxim Integrated | EURECOM

  8. 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 8 | Maxim Integrated | EURECOM

  9. 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) 9 | Maxim Integrated | EURECOM

  10. Exemple of Recent Security Issues Recent attacks 10 | Maxim Integrated | EURECOM

  11. Exemple of Recent Security Issues Recent 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 11 | Maxim Integrated | EURECOM

  12. How Can We Test Such Firmware Programs? • Symbolic Execution > High path coverage > Return test case for bugs 12 | Maxim Integrated | EURECOM

  13. Symbolic Execution Example i = symb_i Int buffer[2] i = < input > int buffer [ 2 ] = {0, 1}; 13 | Maxim Integrated | EURECOM

  14. Symbolic Execution Example i = symb_i Int buffer[2] FALSE TRUE i = < input > buffer[i] int buffer [ 2 ] = {0, 1}; 𝟏 ≤ 𝒋 < 𝟑 ¬(𝟏 ≤ 𝒋 < 𝟑) if( buffer [ i ] == 0 ) { Out of bounds access 14 | Maxim Integrated | EURECOM

  15. Symbolic Execution Example i = symb_i Int buffer[2] FALSE TRUE i = < input > buffer[i] int buffer [ 2 ] = {0, 1}; 𝟏 ≤ 𝒋 < 𝟑 ¬(𝟏 ≤ 𝒋 < 𝟑) if( buffer [ i ] == 0 ) { buffer [ i ] = 0xDEADBEEF ; } FALSE TRUE buffer[i] == 0 Out of bounds 𝒋 = 𝟏 ¬(𝒋 = 𝟏) access buffer[i] == 0xDEADBEAF 15 | Maxim Integrated | EURECOM

  16. Building A Symbolic Executor For Firmware Programs Klee as a basis • Inception is based on Klee a symbolic virtual machine: 16 | Maxim Integrated | EURECOM

  17. Building A Symbolic Executor For Firmware Programs Klee as a basis • Inception is based on Klee a symbolic virtual machine: > Widely deployed, efficient and based on the LLVM framework. 17 | Maxim Integrated | EURECOM

  18. Building A Symbolic Executor For Firmware Programs Klee 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 18 | Maxim Integrated | EURECOM

  19. Building A Symbolic Executor For Firmware Programs Klee 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 19 | Maxim Integrated | EURECOM

  20. Building A Symbolic Executor For Firmware Programs Klee as a basis C/C++ source • Inception is based on Klee a symbolic virtual machine: code > Widely deployed, efficient and based on the LLVM framework. > Find memory safety violations > High code coverage 20 | Maxim Integrated | EURECOM

  21. Building A Symbolic Executor For Firmware Programs Klee as a basis C/C++ source • Inception is based on Klee a symbolic virtual machine: code > Widely deployed, efficient and based on the LLVM framework. > Find memory safety violations > High code coverage Clang 21 | Maxim Integrated | EURECOM

  22. Building A Symbolic Executor For Firmware Programs Klee as a basis C/C++ source • Inception is based on Klee a symbolic virtual machine: code > Widely deployed, efficient and based on the LLVM framework. > Find memory safety violations > High code coverage Clang LLVM bit-code 22 | Maxim Integrated | EURECOM

  23. Building A Symbolic Executor For Firmware Programs Klee as a basis C/C++ source • Inception is based on Klee a symbolic virtual machine: code > Widely deployed, efficient and based on the LLVM framework. > Find memory safety violations > High code coverage Clang LLVM bit-code Klee 23 | Maxim Integrated | EURECOM

  24. Why testing source code instead of binary code ? Source VS Binary 24 | Maxim Integrated | EURECOM

  25. Why testing source code instead of binary code ? Source VS Binary b1 : .space 2 char b1 [ 2 ]; b2 : .space 2 char b2 [ 2 ]; getElement (int): char getElement ( int index ) ldr r2 , .L3 { add r3 , r2 , r0 return b1 [ index ]; ldrb r0 , [ r3 ] } bx lr .L3 : .word b1 25 | Maxim Integrated | EURECOM

  26. Why testing source code instead of binary code ? Source VS Binary b1 : .space 2 char b1 [ 2 ]; b2 : .space 2 char b2 [ 2 ]; getElement (int): char getElement ( int index ) ldr r2 , .L3 { add r3 , r2 , r0 return b1 [ index ]; ldrb r0 , [ r3 ] } bx lr .L3 : .word b1 26 | Maxim Integrated | EURECOM

  27. Why testing source code instead of binary code ? Source ( Klee/Clang …) VS Binary (SE2, angr, BAP) b1 : .space 2 char b1 [ 2 ]; b2 : .space 2 char b2 [ 2 ]; getElement (int): char getElement ( int index ) ldr r2 , .L3 { add r3 , r2 , r0 return b1 [ index ]; ldrb r0 , [ r3 ] } bx lr .L3 : .word b1 define i8 @getElement ( i32 index) { define i8 @getElement ( i32 %index ){ entry: entry: store i32 %index , i32 * @R0 %0 = load i32 * %index .addr store i32 268436792, i32 * @R2 %1 = getelementptr inbounds %R2_1 = load i32 * @R2 [2 x i8 ]* @b1 , i32 0, i32 %0 %R0_1 = load i32 * @R0 %2 = load i8 * %1 %R2_2 = add i32 %R2_1 , %R0_1 ret i8 %2 %R3_0 = inttoptr i32 %R2_2 to i32 * } %R3_1 = bitcast i32 * %R3_0 to i8 * %R3_2 = load i8 * %R3_1 27 | Maxim Integrated | EURECOM %R3_3 = zext i8 %R3_2 to i32

  28. Why testing source code instead of binary code ? Source ( Klee/Clang …) VS Binary (SE2, angr, BAP) b1 : .space 2 char b1 [ 2 ]; b2 : .space 2 char b2 [ 2 ]; getElement (int): char getElement ( int index ) ldr r2 , .L3 { add r3 , r2 , r0 return b1 [ index ]; ldrb r0 , [ r3 ] } bx lr .L3 : .word b1 define i8 @getElement ( i32 index) { define i8 @getElement ( i32 %index ){ entry: entry: store i32 %index , i32 * @R0 %0 = load i32 * %index .addr store i32 268436792, i32 * @R2 %1 = getelementptr inbounds %R2_1 = load i32 * @R2 [2 x i8 ]* @b1 , i32 0, i32 %0 %R0_1 = load i32 * @R0 %2 = load i8 * %1 %R2_2 = add i32 %R2_1 , %R0_1 ret i8 %2 %R3_0 = inttoptr i32 %R2_2 to i32 * } %R3_1 = bitcast i32 * %R3_0 to i8 * %R3_2 = load i8 * %R3_1 28 | Maxim Integrated | EURECOM %R3_3 = zext i8 %R3_2 to i32

  29. 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 29 | Maxim Integrated | EURECOM

  30. Major Challenges For Symbolic Execution of Firmware Programs Is C/C++ Support Enough To Test Real World Firmware ? 1000 100 108 10 98 80 22 1 STM32(demos) FreeRTOS(STM32) Mbed OS ChibiOS Functions2 • Number of functions including assembly instructions in real world embedded software 30 | Maxim Integrated | EURECOM

  31. Major Challenges For Symbolic Execution of Firmware Programs Is C/C++ Support Enough To Test Real World Firmware ? 1000 • Assembly code : > Multithreading > Optimizations 100 > Side channel counter-measures > Hardware features e.g. ultra low power mode 108 10 98 80 22 1 STM32(demos) FreeRTOS(STM32) Mbed OS ChibiOS Functions2 • Number of functions including assembly instructions in real world embedded software 31 | Maxim Integrated | EURECOM

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend