GDBとpwndbgによる動的解析
ブレークポイントを設定し、メモリを調査し、システムコールを追跡して、pwndbgでGDBセッションを自動化します。
「GDBとpwndbgによる動的解析」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
動的解析とは
動的解析はバイナリを実行し、メモリの内容、レジスタの値、システムコール、ネットワーク接続などの挙動をリアルタイムで観察します。静的解析(Ghidra)を補完し、実行時の実際の値や制御フローを明らかにします。
GDBの基礎
GDB(GNU Debugger)は、Linuxの標準デバッガです。
gdb ./vuln # load binary
gdb -p 1234 # attach to running process
run [args] # start execution
break main # set breakpoint at main
continue (c) # continue execution
next (n) # step over
step (s) # step intopwndbgによる機能強化
pwndbgは、エクスプロイト開発用のヘルパー機能を追加するGDBプラグインです。
- ブレークするたびにスタックとレジスタを視覚的に表示します
cyclicパターンを生成します- ヒープを可視化する
heapコマンドを提供します - ROPガジェットを検索する
ropコマンドを提供します - バイナリの保護機構を確認する
checksecコマンドを提供します
git clone https://github.com/pwndbg/pwndbg && ./setup.shブレークポイントとウォッチポイント
実行を制御します。
# Break at address:
break *0x401234
# Break at function:
break strncpy
# Watch memory address:
watch *0x7ffd1234 # break when value changes
# Conditional break:
break *0x401234 if $rax == 0
# List and delete:
info break
delete 1メモリとレジスタの調査
プログラムの状態を調べます。
info registers # show all registers
print $rax # print register value
x/10xg $rsp # examine 10 qwords at RSP
x/s 0x402000 # examine as string
x/20i $rip # disassemble 20 instructions at RIP
pwndbg: telescope $rsp 20 # smart stack displayコードのステップ実行
ナビゲーション用のコマンドは次のとおりです。
ni (nexti) # step over (instruction level)
si (stepi) # step into (instruction level)
finish # run until function returns
until 0x401234 # run until addressGDBのスクリプティング
PythonでGDBを自動化します。
# GDB Python script:
gdb ./vuln << EOF
python
for i in range(10):
gdb.execute("continue")
gdb.execute("x/4xg $rsp")
end
EOFpwndbgによるヒープ解析
pwndbgでヒープを調査するコマンドは次のとおりです。
heap # show all heap chunks
heap -a # show all allocations
bin # show free list bins
tcachebins # show tcache entries
vis_heap_chunks # visual heap mapシステムコールのトレース
straceを使うと、完全なデバッグを行わずにシステムコールを追跡できます。
strace ./vuln # trace all syscalls
strace -e trace=open,read,write ./vuln # filter syscalls
strace -f ./vuln # follow forks
# ltrace for library calls:
ltrace ./vulnデバッグ環境のセットアップ
エクスプロイト開発で重要なセットアップは次のとおりです。
# Disable ASLR for testing:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# Or per-process:
setarch $(uname -m) -R gdb ./vuln
# Verify with:
ldd ./vuln # check libc baseシンボルが削除されたバイナリのデバッグ
多くの本番用バイナリでは、デバッグシンボルが削除されています。使用できる手法は次のとおりです。
fileとreadelfを使ってバイナリを調べます- シンボルではなくアドレスにブレークポイントを設定します
- 関数シグネチャを使って一般的なライブラリ呼び出しを特定します
- 利用できる場合はlibcのシンボルを別途読み込みます
GDBのクイックチェック
特定の条件が満たされた場合にのみ発生するブレークポイントをGDBで設定するコマンドはどれですか。
レッスンのまとめ
pwndbgと組み合わせたGDBによって、ブレークポイントの設定、レジスタとメモリの調査、実行の追跡といった動的解析が可能になります。主なコマンドは、break、run、ni/si、x/format、info registersです。pwndbgは、ヒープの可視化、スタックのテレスコーピング、パターン用ツールを追加します。strace/ltraceを使えば、完全なデバッグ環境をセットアップせずにシステムコールやライブラリ呼び出しを追跡できます。
よくある質問
「GDBとpwndbgによる動的解析」レッスンは無料ですか?
はい。「GDBとpwndbgによる動的解析」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「GDBとpwndbgによる動的解析」で何を学びますか?
ブレークポイントを設定し、メモリを調査し、システムコールを追跡して、pwndbgでGDBセッションを自動化します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「GDBとpwndbgによる動的解析」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Ghidra:バイナリの操作と注釈付け
- リバースエンジニアリングのためのx86/x64アセンブリ基礎
- GDBとpwndbgによる動的解析
- 難読化解除とアンチ解析技法