More Related Content
RSA暗号運用でやってはいけない n のこと #ssmjp Elasticsearch as a Distributed System What's hot (20)
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~ 初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話 Intro to SVE 富岳のA64FXを触ってみた 世界一わかりやすいClean Architecture Binary exploitation - AIS3 Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015 PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021 なかったらINSERTしたいし、あるならロック取りたいやん? Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Similar to Stack pivot (15)
Survey and Analysis of ICS Vulnerabilities (Japanese) [CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文 Python2.x の input 関数にRCE 脆弱性がある話 “Sliding right into disaster”の紹介 [CB16] Cyber Grand Challenge (CGC) : 世界初のマシン同士の全自動ハッキングトーナメント by Tyler Nighsw... CVE-2021-3156 Baron samedit (sudoの脆弱性) 著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則 Abusing Interrupts for Reliable Windows Kernel Exploitation (ja) CTF(Capture the Flag)って何? Windows をより安全にする SafeSEH on MinGW Stack pivot
- 10. Stack Pivot 手法(例)
rop chainをこのように構築する
フロー
1. getsなどのinput関数を呼び出す
引数にpivot先(例えばbss)のアドレスを指定
2. getsの入力で,例えばropchainなどペイ
ロードを送り込む
3. 指定したpivot先に,スタックポインタと
ベースポインタを移行
2021/5/12
Rits Security Team 10
leave
AAA…A
pop ebp
addr of .bss
gets
addr of bss
pop eax; ret;
.bss section
…
…
(1)
- 11. Stack Pivot 手法(例)
rop chainをこのように構築する
フロー
1. getsなどのinput関数を呼び出す
引数にpivot先(例えばbss)のアドレスを指定
2. getsの入力で,例えばropchainなどペイ
ロードを送り込む
3. 指定したpivot先に,スタックポインタと
ベースポインタを移行
2021/5/12
Rits Security Team 11
leave
AAA…A
pop ebp
addr of .bss
gets
addr of .bss
pop eax; ret;
.bss section
…
…
Rop chain
2‘nd
input
(2)
- 12. Stack Pivot 手法(例)
rop chainをこのように構築する
フロー
1. getsなどのinput関数を呼び出す
引数にpivot先(例えばbss)のアドレスを指定
2. getsの入力で,例えばropchainなどペイ
ロードを送り込む
3. 指定したpivot先に,スタックポインタと
ベースポインタを移行
2021/5/12
Rits Security Team 12
leave
AAA…A
pop ebp
addr of .bss
gets
addr of bss
pop eax; ret;
.bss section
…
…
Rop chain
eip
- 14. Attack Process (題材:bypass)
$ file ./bypass
どんなファイルか調べる
32bitのelf
dynamically linked:実行時に,ほかのオブジェクトとリンクする
2021/5/12
Rits Security Team 14
- 15. Attack Process (題材:bypass)
$ ldd ./bypass
どのオブジェクトとリンクするか調べる
32bitの標準ライブラリとリンクすることがわかる(2行名)
今回,libcは与えられているとする
それ以外は今は無視
一応言及しておくと… 1行目:vdso,3行名:_dl_runtime_resolve
2021/5/12
Rits Security Team 15
- 16. Attack Process (題材:bypass)
2021/5/12
Rits Security Team 16
$ checksec ./bypass
有効なセキュリティ機構を調べる
Partial RELRO → GOT 書き換え可能
No canary found → スタックオーバフロー攻撃が可能
NX enabled → 任意のシェルコードを実行させるにはひと工夫必要
No PIE → ret2plt,ROPが可能
- 20. Attack Process (題材:bypass)
2021/5/12
Rits Security Team 20
方針
1. system(“/bin/sh”)を実行させたい
2. libcのベースアドレスがわかればよい
3. putsの引数にgotにおけるあるエントリのアドレス
を与えればその関数本体のアドレスが得られる
4. 得られたアドレスからその関数のオフセットを引け
ばlibcのベースアドレスが得られる (この時点で
systemには飛ばせる)
5. getsよりbssセクションにsystem(“/bin/sh”)を実行
させるROP chainを再度構築する
6. 文字列”/bin/sh”を用意する必要があるが,同じく
bssセクションに送れば,固定的に指定できる
7. ROP chainを送り込んだ先のbssにstack pivotする
- 21. Attack Process (題材:bypass)
2021/5/12
Rits Security Team 21
AAA…A
puts@plt
pop1
puts@got
gets@plt
pop1
addr of bss
pop ebp
addr of bss
leave
(3)
方針
1. system(“/bin/sh”)を実行させたい
2. libcのベースアドレスがわかればよい
3. putsの引数にgotのあるエントリのアドレスを与え
ればその関数本体のアドレスが得られる
4. 得られたアドレスからその関数のオフセットを引け
ばlibcのベースアドレスが得られる (この時点で
systemには飛ばせる)
5. getsよりbssセクションにsystem(“/bin/sh”)を実行
させるROP chainを再度構築する
6. 文字列”/bin/sh”を用意する必要があるが,同じく
bssセクションに送れば,固定的に指定できる
7. ROP chainを送り込んだ先のbssにstack pivotする
- 22. Attack Process (題材:bypass)
2021/5/12
Rits Security Team 22
AAA…A
puts@plt
pop1
puts@got
gets@plt
pop1
addr of bss
pop ebp
addr of bss
leave
(5)
方針
1. system(“/bin/sh”)を実行させたい
2. libcのベースアドレスがわかればよい
3. putsの引数にgotのあるエントリのアドレスを与え
ればその関数本体のアドレスが得られる
4. 得られたアドレスからその関数のオフセットを引け
ばlibcのベースアドレスが得られる (この時点で
systemには飛ばせる)
5. getsよりbssセクションにsystem(“/bin/sh”)を実行
させるROP chainを再度構築する
6. 文字列”/bin/sh”を用意する必要があるが,同じく
bssセクションに送れば,固定的に指定できる
7. ROP chainを送り込んだ先のbssにstack pivotする
AAAA
system
dummy
addr of /bin/sh
/bin/sh
ポインタ
bss
2‘nd
input
- 23. Attack Process (題材:bypass)
2021/5/12
Rits Security Team 23
AAA…A
puts@plt
pop1
puts@got
gets@plt
pop1
addr of bss
pop ebp
addr of bss
leave
(3)
方針
1. system(“/bin/sh”)を実行させたい
2. libcのベースアドレスがわかればよい
3. putsの引数にgotのあるエントリのアドレスを与え
ればその関数本体のアドレスが得られる
4. 得られたアドレスからその関数のオフセットを引け
ばlibcのベースアドレスが得られる (この時点で
systemには飛ばせる)
5. getsよりbssセクションにsystem(“/bin/sh”)を実行
させるROP chainを再度構築する
6. 文字列”/bin/sh”を用意する必要があるが,同じく
bssセクションに送れば,固定的に指定できる
7. ROP chainを送り込んだ先のbssにstack pivotする
(7)
AAAA
system
dummy
addr of /bin/sh
/bin/sh
stack
pivot
bss