Android Exploitation - F0rki - Hackingnight 2013 06 06
Android Exploitation - F0rki - Hackingnight 2013 06 06
@f0rki
2013-06-06
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
2 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
3 / 41
Introduction
on Android?
Rooting is popular
Increasing use of native components
e.g. game engines, audio/video codec stuff
4 / 41
Introduction
on Android?
Rooting is popular
Increasing use of native components
e.g. game engines, audio/video codec stuff
But Daddy, all the cool kids are exploiting ARM devices!!!!!!
4 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
5 / 41
ARM? Embedded stuff. . . I think. . .
6 / 41
ARM Facts
BuzzWord Bingo:
7 / 41
ARM Facts
BuzzWord Bingo:
Bi-endian 32-Bit Load/Store RISC architecture
7 / 41
ARM Facts
BuzzWord Bingo:
Bi-endian 32-Bit Load/Store RISC architecture
64-Bit on the way (AArch64)
ARMv5 to ARMv8 are common
(Relatively) simple architecture, no microcode
Many extensions (like in x86 world)
Different instruction sets
Fixed width instructions (32 bit or 16 bit)
ARM, Thumb(-2), Jazelle
Floating Point, SIMD instructions
Still R(educed)ISC?
Power efficient
7 / 41
ARM Architecture and Instruction
8 / 41
Procedure Calls
function :
push { fp , lr }
; init stack , save registers
; function code
pop { fp , pc }
9 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
10 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
11 / 41
Exploitation 101: Science!!!
12 / 41
Exploitation 101: Science!!!
Weird Machines
Program transists into undefined “weird” state
Through a vulnerability
Anything can happen (e.g. code execution)
State transitions still happen. . .
12 / 41
Exploitation 101: Science!!!
Weird Machines
Program transists into undefined “weird” state
Through a vulnerability
Anything can happen (e.g. code execution)
State transitions still happen. . .
. . . and the machine gets weirder!
Exploitation is the art of programming of weird machines
12 / 41
Exploitation 101: Science!!!
Weird Machines
Program transists into undefined “weird” state
Through a vulnerability
Anything can happen (e.g. code execution)
State transitions still happen. . .
. . . and the machine gets weirder!
Exploitation is the art of programming of weird machines
12 / 41
Exploitation is hard
13 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
14 / 41
Vulnerabilities I
Attack types
Buffer Overflows
The program copies an input buffer to an output buffer
without verifying that the size of the input buffer is less than the
size of the output buffer, leading to a buffer overflow.
15 / 41
Vulnerabilities II
Format String
Integer Overflows
16 / 41
Vulnerabilities III
17 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
18 / 41
Code Execution
19 / 41
Shellcode
20 / 41
Return-to-lib(c)
Idea: ret2lib(c)
Prepare stack so that it looks like function call into a library on return.
(e.g. system function in libc)
21 / 41
Return-to-lib(c)
Idea: ret2lib(c)
Prepare stack so that it looks like function call into a library on return.
(e.g. system function in libc)
BUT WAIT!
21 / 41
Return-to-lib(c)
Idea: ret2lib(c)
Prepare stack so that it looks like function call into a library on return.
(e.g. system function in libc)
BUT WAIT!
Remember: First arguments are passed in registers
Oh noes: ret2lib(c) does not work on ARM
We have the same Problem on x86_64
21 / 41
Return Oriented Programming (ROP)
Idea: ROP
Search for reusable code snippets that end with ret instruction, called
gadgets. Chain together gadgets to achieve turing completeness.
22 / 41
Return Oriented Programming (ROP)
Idea: ROP
Search for reusable code snippets that end with ret instruction, called
gadgets. Chain together gadgets to achieve turing completeness.
Oh noes we have no ret instruction.
Use any branching instruction!
Check out existing work ([5], [6])
Lot’s of research in this area
Though tool quality could be better
22 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
23 / 41
The Android Environment
24 / 41
Heap protection
25 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
26 / 41
Stack Smashing Protection
Stack smashing
stack-based buffer overflow + return address overwrite
27 / 41
FORTIFY_SOURCE
28 / 41
Relocation Read Only (RELRO)
29 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
30 / 41
eXecute Never
31 / 41
eXecute Never
31 / 41
Address Space Layout Randomization I
32 / 41
Address Space Layout Randomization II
Considerations
fork() preserves address layout
Code segment is usually not randomized (except for PIE/PIC)
ASLR is only effective against remote attackers
Android usually doesn’t run many network services
Attackers are usually local (malicious apps)
Address brute-forcing is feasible on 32-bit address space
Info-leaks help defeat ASLR
Address space is the same for everything forked by zygote (all Apps)
33 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
34 / 41
Exploitation Strategies
35 / 41
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
36 / 41
Conclusion
What next?
Kernel
TrustZone
Bootloader
37 / 41
Go break stuff!
Agenda
Motivation
ARM Primer
Exploitation 101
Science, Bitches!
Vulnerability classes
Exploitation
Defenses & Mitigation Techniques
Compiler/Linker Defenses
Kernel Defenses
Exploitation Strategies
Conclusion
References
39 / 41
References I
Tim Kornau.
Return oriented programming for the ARM architecture.
http://zynamics.com/downloads/
kornau-tim--diplomarbeit--rop.pdf
Exploit Mitigations in Android Jelly Bean 4.1
https://blog.duosecurity.com/2012/07/
exploit-mitigations-in-android-jelly-bean-4-1/
A look at ASLR in Android Ice Cream Sandwich 4.0
https://blog.duosecurity.com/2012/02/
a-look-at-aslr-in-android-ice-cream-sandwich-4-0/
41 / 41