ARM ROPMAP Long Le Thanh Nguyen longld thanhvnsecurity
- Slides: 44
ARM 攻略のROPMAP Long Le – Thanh Nguyen {longld, thanh}@vnsecurity. net Pac. Sec 2011
プレゼン終了後には・・・ ROPシェルコード ガジェット・チェーン ペイロード • LOAD r 0, • LOAD r 1, • LOAD r 2, • LOAD r 7, • SYSCALL • ldr r 0 [sp #12] ; add sp sp #20 ; pop {pc} • pop {r 1 r 2 r 3 r 4 r 5 pc} • pop {r 2 r 3 r 7 pc} • svc 0 x 0000 ; pop {r 4 r 7} ; bx lr • [ BASE+0 xaa 0, 0 x 4 b 4 e 554 a, 0 x 4 b 4 e 554 b, 0 x 4 b 4 e 554 c, 0 xdeadbeef, 0 x 4 b 4 e 554 e ] • [ BASE+0 x 10 d 4, 0 x 0, 0 x 4 b 4 e 554 b, 0 x 4 b 4 e 554 c, 0 x 4 b 4 e 554 d, 0 x 4 b 4 e 554 e ] • … #0 xdeadbeef #0 #0 #0 xb ARM EXPLOITATION ROPMAP 5
ROPツールキットをARMに拡張 ARM EXPLOITATION ROPMAP 6
X 86からARMへ:レジスタ x 86 ARM eax, ebx, ecx, edx, esi, edi r 0, r 1, r 2, r 3, r 4, … r 11, r 12 esp sp (r 13) ebp fp (r 11) eip pc (r 15) N/A lr (r 14) ARM EXPLOITATION ROPMAP 7
X 86からARMへ:アセンブリ x 86 ARM pop eax pop {r 0} mov eax, ebx mov r 0, r 1 add eax, ebx add r 0, r 1 add eax, 0 x 10 add r 0, #16 mov eax, [ebx] ldr r 0, [r 1] mov [eax+0 x 10], ebx str r 1, [r 0, #16] call eax blx r 0 jmp eax bx r 0 call function bl function (return address in lr) ret pop {pc} / bx lr int 0 x 80 svc 0 x 80 / svc 0 x 0 ARM EXPLOITATION ROPMAP 8
X 86からARMへ:シェルコード x 86 ARM eax = sysnum r 7/r 12 = sysnum ebx = arg 1 r 0 = arg 1 ecx = arg 2 r 1 = arg 2 edx = arg 3 r 2 = arg 3 … … int 0 x 80 svc 0 x 80 / svc 0 x 0 ARM EXPLOITATION ROPMAP 9
X 86からARMへ:ROP ガジェット x 86 ARM ret pop {…, pc} bx lr pop edi; ebp; ret pop {r 1, r 2, pc} call eax blx r 0 jmp eax bx r 0 Instruction alignment: No Instruction alignment: - 4 bytes (ARM) - 2 bytes (THUMB) Unintended code Intended code (mostly) ARM EXPLOITATION ROPMAP 10
クイック・デモ ARM EXPLOITATION ROPMAP 12
ROPシェルコードのための中間 言語 ARM EXPLOITATION ROPMAP 13
ROP IL 命令 ROP命令 • LOAD • STORE • ADJUST • CALL • SYSCALL • NOP ARM EXPLOITATION ROPMAP LHS RHS LHS/RHSタイプ • REG: レジスタ • VAL: 値 • REF: レジスタの参照先 • MEM: メモリの参照先 • NON 16
ROP IL:ロード » レジスタに値をロード 文法 使用例 LOAD Rm, #value LOAD r 0, #0 xcafebabe LOAD Rm, Rn LOAD r 0, r 1 LOAD Rm, [Rn] LOAD r 0, [r 1] LOAD Rm, [#address] LOAD r 0, [#0 xdeadbeef] ARM EXPLOITATION ROPMAP 17
ROP IL:格納 » レジスタに値を格納 文法 使用例 STORE [Rm], Rn STORE [r 0], r 1 STORE [Rm], #value STORE [r 0], #0 xcafebabe STORE [Rm], [Rn] STORE [r 0], [r 1] STORE [#target], Rn STORE [#0 xdeadbeef], r 0 STORE [#target], [Rn] STORE [#0 xdeadbeef], [r 0] STORE [#target], #value STORE [#0 xdeadbeef], #0 xcafebabe STORE [#target], [#address] STORE [#0 xdeadbeef], [#0 xbeefc 0 de] ARM EXPLOITATION ROPMAP 18
ROP IL:調整 » レジスタの値に加減算を行う 文法 使用例 ADJUST Rm, Rn ADJUST r 0, r 1 ADJUST Rm, #value ADJUST r 0, #4 ADJUST Rm, [Rn] ADJUST r 0, [r 1] ADJUST Rm, [#address] ADJUST r 0, [#0 xdeadbeef] ARM EXPLOITATION ROPMAP 19
ROP IL:呼び出し » 関数を呼び出す・関数にジャンプする 文法 使用例 CALL Rm CALL r 0 CALL [Rm] CALL [r 0] CALL #address CALL #0 xdeadbeef CALL [#address] CALL [#0 xdeadbeef] ARM EXPLOITATION ROPMAP 20
ROP IL:システムコール » システムコール 文法 SYSCALL ARM EXPLOITATION ROPMAP 使用例 SYSCALL 21
シェルコードのサンプル(1) » mprotect(writable, size, flag) • LOAD r 0, #writable • LOAD r 1, #size • LOAD r 2, #flag • LOAD r 7, #0 x 7 d • SYSCALL » execve(“/bin/sh”, 0, 0): known “/bin/sh” address • LOAD r 0, #binsh_address • LOAD r 1, #0 • LOAD r 2, #0 • LOAD r 7, #0 xb • SYSCALL ARM EXPLOITATION ROPMAP 22
シェルコードのサンプル(2) » execve(“/bin/sh”, 0, 0): use known writable data region to store “/bin/sh” • STORE [#writable], #0 x 6 e 69622 f ; “/bin” • STORE [#writable+0 x 4], #0 x 68732 f ; “/sh” • LOAD r 0, #writable • LOAD r 1, #0 • LOAD r 2, #0 • LOAD r 7, #0 xb • SYSCALL ARM EXPLOITATION ROPMAP 23
高級ラッパーの例(1) » syscall(sysnum, *args) • LOAD r 0, #arg 1 • LOAD r 1, #arg 2 • LOAD r 2, #arg 3 • LOAD r 3, #arg 4 • LOAD r 4, #arg 5 • LOAD r 5, #arg 6 • LOAD r 7, #sysnum • SYSCALL ARM EXPLOITATION ROPMAP 24
高級ラッパーの例(2) » funcall(address, *args) • LOAD r 0, #arg 1 • LOAD r 1, #arg 2 • LOAD r 2, #arg 3 • LOAD r 3, #arg 4 • $arg 5 • … • CALL #address ARM EXPLOITATION ROPMAP 25
高級ラッパーの例(3) » save_result(target) • STORE [#target], r 0 » write 4_with_offset(reference, value, offset) • LOAD r 0, [#reference] • ADJUST r 0, #offset • STORE [r 0], #value ARM EXPLOITATION ROPMAP 26
ROPMAPの実装 ARM EXPLOITATION ROPMAP 27
ROPMAPサンプル:ロード mov Rm, #value LOAD Rm, #value pop {Rm, …, pc} ldr Rm, [sp …] mov Rm, Rn LOAD Rm, Rn add Rm, Rn sub Rm, Rn LOAD Rm, [Rn] ldr Rm, [Rn …] LOAD Rm, [#addr] LOAD Rn, #addr LOAD Rm, [Rn] ARM EXPLOITATION ROPMAP 30
ROPMAPサンプル:格納 STORE [Rm], Rn str Rn, [Rm …] STORE [Rm], #value LOAD Rn, #value STORE [Rm], Rn STORE [Rm], [#addr] LOAD Rn, [#addr] STORE [Rm], Rn STORE [#target], Rm LOAD Rn, [#target] STORE [Rn], Rm STORE [#target], #value LOAD Rm, #value STORE [#target], Rm STORE [#target], [#addr] LOAD Rn, [#addr] STORE [#target], Rn ARM EXPLOITATION ROPMAP 31
ペアを突合 pop {r 4 pc} D E CH AT M STORE [#target], [#addr] E CH D ldr r 0 [r 4 #4] ; pop {r 4 r 5 r 6 r 7 pc} AT M pop {r 4 pc} D E CH AT M ARM EXPLOITATION ROPMAP str r 0 [r 4 #16] ; mov r 0 r 3 ; pop {r 1 r 2 r 3 r 4 r 5 pc} 33
ガジェット検証 LOAD r 6, [r 5] ED T N I TA TA STORE [r 1], [r 5] ARM EXPLOITATION ROPMAP ldr r 6 [r 5 #4] ; sub r 0 r 6 ; pop {r 4 r 5 r 6 pc} D TE N I ldr sub add pop r 1 [r 5 #36] ; r 5 [r 4 #36] ; r 0 r 1 r 5 ; sp sp #36 ; {r 4 r 5 r 6 r 7 pc} 34
リバース・マッチング HE C AT (2) M D r 4 = #address - 4 pop {r 4 pc} LOAD r 0, [#address] ldr r 0 [r 4 #4] ; pop {r 4 r 5 r 6 r 7 pc} HE C AT (1) M ARM EXPLOITATION ROPMAP D r 4 = #address - 4 38
ガジェット・エミュレーション » 単一のガジェット » スタック関係のオペレーションのみ uninitialized registers JUNK+4 JUNK+3 SP = SP+3 SP JUNK+2 r 7 = JUNK+2 JUNK+1 r 3 = JUNK+1 JUNK SP Init state r 2 = JUNK Execute JUNK pop {r 2 r 3 r 7 pc} ; ; r 2 = 0 x 0 r 7 = 0 xb value constraints ARM EXPLOITATION ROPMAP 39
スタックへの再書き込み » ペイロード=スタック上の値 SP = SP+3 SP r 7 = JUNK+2 r 3 = JUNK+1 JUNK r 2 = JUNK pop {r 2 r 3 r 7 pc} ; ; 0 xb r 2 = 0 x 0 r 7 = 0 xb Write back JUNK+1 0 x 0 SP Payload ARM EXPLOITATION ROPMAP 40
アウトプット・ペイロード » execve(“/bin/sh”, 0, 0) # # [ # # # [ # ROP code: load r 0, #0 xdeadbeef pop {r 0 pc} BASE+0 x 2 d 38, 0 xdeadbeef ] ---------------------------------ROP code: load r 1, #0 pop {r 1 r 7 pc} BASE+0 xbb 3 d, 0 x 0, 0 x 4 b 4 e 554 b ] ---------------------------------ROP code: load r 2, #0 pop {r 2 r 3 r 6 pc} BASE+0 x 256 f 9, 0 x 0, 0 x 4 b 4 e 554 b, 0 x 4 b 4 e 554 c ] ---------------------------------ROP code: load r 7 pop {r 1 r 7 pc} BASE+0 xbb 3 d, 0 x 0, 0 xb ] ---------------------------------ROP code: syscall svc 0 x 0000 ; pop {r 4 r 7} ; bx lr BASE+0 x 1804, 0 x 4 b 4 e 554 a, 0 xb ] --------------------------------- ARM EXPLOITATION ROPMAP 41
デモ ARM EXPLOITATION ROPMAP 42
- Xác định nội lực trong các thanh
- đăng quán tước lâu
- Thanh binh nguyen
- Nhà nguyễn thành lập
- Khoi nguyen education group
- Ropmap
- Ropmap
- Effort arm and resistance arm
- Disadvantages of second class levers
- 3rd class lever sporting examples
- Linker arm left arm
- Suprabulge retainers
- Partial denture with retainer
- Long and short
- Once upon a time there was a little red fox
- Cha ơi trong nơi vinh quang này
- Nguyện lòng không quên
- Posterior long arm splint
- Sugar tounge splint
- Posterior stirrup splint
- Ben franklin long arm
- Greek
- Tinikling costume and props
- Lông vằn lông vện mắt xanh
- Once upon a time a long long time ago
- Once upon a long time ago
- Long long ago people used to think that the earth was
- Long long int c
- Bọn em hai đứa cùng tên
- Complete the story once upon a time lived a king who
- Nêu nguyên nhân thắng lợi phong trào tây sơn
- Thanh tr
- Các bộ phận cấu thành lãnh thổ quốc gia
- Hoàn thành bảng sau
- Bài trích phúc âm theo thánh gioan
- Thành đỏ lakila
- Cây muồng muồng, bèo dâu là loại phân nào?
- Chuyển đổi 1be16 thành cơ số 10
- Công thành danh toại
- 30 bà huyện thanh quan
- Hoàn thành bảng sau
- Thinhnam net lien_he_gop_y
- Sự vật ở thành phố
- Lược đồ quang trung đại phá quân thanh
- Napas