アドバイザー白ネコが語る、攻撃者の「論理的な考え方」とは? (episode-02)

黒ネコと学ぶ・論理的エクスプロイト開発への道

エクスプロイト開発を学ぶうえで、最初につまずきやすいのが「どう考えればいいのか分からない」という点です。ツールの使い方やコマンドは調べれば出てきますが、攻撃者がどんな順番で、どんな視点でプログラムを見ているのかは、なかなか見えにくいものです。
 
このepisode-02では、アドバイザー白猫先生が「攻撃者の論理的な考え方」をやさしく解説します。エクスプロイト開発は、勘やひらめきではなく、「観察 → 仮説 → 検証」をくり返す「論理の積み重ね」です。その考え方を知ることで、くろちゃんのような初心者でも、少しずつ「攻撃者の視点」を身につけていくことができます。
 ※イメージです。

くろちゃん、攻撃者の考え方に戸惑う

[fuki-r]白猫先生……。Exploit(エクスプロイト)って、なんだか「すごい人が突然ひらめく技」みたいに見えるんだけど……。[/fuki-r]
[fuki-l]それは誤解よ。攻撃者はね、順番に、論理的にプログラムを観察しているだけなの。[/fuki-l]
 
 

攻撃者の思考は「4つのステップ」でできている

白猫先生は黒板に、4つの言葉を書きました。
 
1.観察(Observation)
・入力できる場所はどこ?
・文字数制限はある?
・エラーは出る? [fuki-l]まずは「事実」を見るの。推測は後よ。[/fuki-l]
 
2.仮説(Hypothesis)
・「ここ、チェックが甘そう」
・「この入力、メモリにそのまま入っていそう」 [fuki-r]なるほど……「こうだったらどうなる?」って考えるんだね。[/fuki-r]
 
3.検証(Test)
・長い入力を入れてみる。
・想定外の値を送ってみる。
・プログラムをクラッシュさせてみる。 [fuki-l]Exploit開発は「実験」の連続よ。[/fuki-l]
 
4.利用(Exploit)
・なぜクラッシュしたのか。
・どこを書き換えられるのか。
・どうすれば制御できるのか。 [fuki-r]順番に考えると、なんだか理科の実験みたいだね![/fuki-r]
 

攻撃者は「ゴール」から逆算する

[fuki-l]攻撃者は、最初にこう考えるの。[/fuki-l]
・シェルを取る。
・任意コードを実行する。
・情報を盗む。 [fuki-r]じゃあ、そのために「今どこを触れるか」を考えるんだ。[/fuki-r]
 [fuki-l]そう。だからExploit開発は、ゴールから逆に考える論理パズルなの。[/fuki-l]
 
 

初心者が真似すべき「白猫先生式チェックリスト」

白猫先生は、くろちゃんに簡単なチェックリストを渡しました。
 
・入力 → 出力の流れは?
・メモリに何が入っている?
・想定外の入力は弾かれている?
・クラッシュしたら、どこが壊れた? [fuki-r]これなら、僕でも考えられそう![/fuki-r]
 
 

論理的に考えられる人は、必ず強くなる

[fuki-l]Exploit開発ができる人は、「特別な人」じゃないわ。[/fuki-l]
・ 観察する。
・ 仮説を立てる。
・ 確かめる。
・ 理由を説明できる。 [fuki-r]……それなら、少しずつ練習すればいいんだね。[/fuki-r]
[fuki-l]その通り。論理は、積み重ねれば必ず身につく力よ。[/fuki-l]
 
 

アドバイザー白猫先生が語る、攻撃者の「論理的な考え方」とは?のまとめ

攻撃者の論理的な考え方は、決して難解なものではありません。それは「観察 → 仮説 → 検証 → 利用」という、非常にシンプルな思考の流れです。
 
エクスプロイト開発は、勘や才能に頼る世界ではなく、事実を見て、理由を考え、結果を確かめる「論理の積み重ね」によって成り立っています。この考え方を身につけることで、脆弱性を見る目が変わり、GDBやCTFの問題も「怖いもの」から「解けるパズル」へと変わっていきます。
くろちゃんのような初心者でも、白猫先生式のチェックリストを使いながら一歩ずつ進めば、必ず成長できます。
 
次回はいよいよ、実際に学習環境を整えながら、エクスプロイト開発の第一歩を踏み出していきましょう。