ペネトレーションテスト&バグバウンティ
倫理的なエクスプロイト開発者(Ethical Exploit Developer)がどのようにゼロデイエクスプロイトを開発するのかをメチャクチャ難しいので分かりやすく説明します。(イメージだけでも理解していただけると嬉しいです。)
ゼロデイエクスプロイトとは
ゼロデイ脆弱性とは
ゼロデイ(Zero-Day)脆弱性とは、まだ誰にも知られていないソフトウェアにおけるセキュリティ上の弱点のことです。
開発者も気づいていないので、攻撃者が先に見つけるとすぐに悪用される可能性があります。
この「ゼロデイ」という言葉は「発見されたその日(Day 0)にすでに危険」という意味があります。
すべてのハッカーの最終目標は「ゼロデイエクスプロイト」ではないでしょうか。
ゼロデイエクスプロイトとは
ゼロデイエクスプロイトとは、ゼロデイ脆弱性を悪用するための攻撃プログラムのことです。
たとえば、あるゲームのバグを使って相手を一撃で倒せる裏技を見つけたようなものですね。
攻撃者がゼロデイエクスプロイトを悪用すると、ウイルスをばらまいたり、システムを乗っ取ったりすることが可能になります。
ゼロデイエクスプロイトを開発できれば、超スーパーハッカーですね。
倫理的なエクスプロイト開発者の行動について
倫理的なエクスプロイト開発者は、ゼロデイエクスプロイトを悪用するのではなく、防ぐための開発をすることです。
1.まずは「脆弱性」を探します。
・セキュリティテスト(ペネトレーションテスト)を行い、システムの弱点を探す。
・プログラムのコードをチェックして、バグを見つける。(コード監査)
・実際にいろいろなデータを送って動作を確認する。(ファジング)
たとえば、「ゲームに登録する名前が、すごく長い名前を入力すると誤動作を起こす。」などです。
2.エクスプロイトを開発します。
・見つけた脆弱性をどのように攻撃できるか考える。
・C言語や、Python言語を使って攻撃プログラムを作る。
・仮想環境でテストし、本当に攻撃できるか確認する。
たとえば、「ゲームが誤動作を起こすと、プレイヤーの操作を乗っ取れるプログラムを作成する。」です。
3.攻撃が成功したら、防ぐ方法を考えます。
・企業や開発者に「脆弱性を報告」して、修正(パッチ)を依頼する。
・「このエクスプロイトはこうやって防げるよ」とアドバイスする。
・バグバウンティ(報奨金)プログラムに参加し、報酬をもらう。
たとえば、「このバグを修正しないと、悪い人にゲームを乗っ取られますよ!」と報告する。
ゼロデイエクスプロイトを開発するために必要な知識と勉強方法
ゼロデイエクスプロイトを開発するには、プログラムの脆弱性を見つけ、それを攻撃するためのコードを書くスキルが必要になります。
非常に高度な技術になるので、簡単に説明します。
基礎知識を固める
ゼロデイエクスプロイト開発は高度な技術です。まずは基本をしっかり学ぶことが重要です。
1.OSの知識
エクスプロイトは、LinuxやWindowsのOSの仕組みを理解していないと作れません。
勉強方法としては
・TryHackMeの「Linux Fundamentals」や、「Windows Fundamentals」を学ぶ。
・実際に仮想環境を作成して、Kali Linuxをインストールしてコマンドを練習します。
2.プログラミング言語
ゼロデイエクスプロイトを作るには、バグを利用するためのコードを書く以下のプログラム言語のスキルが必要です。
・C言語 / C++
低レベルのプログラムを理解する。
C言語を使って小さなプログラムを書いてみる。
・Python
エクスプロイトの自動化に使う。
Pythonで簡単なエクスプロイトを書く。
・アセンブリ言語
CPUが実行するコードを読むために使う。
・TryHackMeの「x86 Assembly Crash Course」を学ぶ。
脆弱性を見つけるスキルを学ぶ
ゼロデイエクスプロイトは、既存のソフトウェアに潜むバグを見つけるところから始まります。
1.リバースエンジニアリング
・Ghidra(ギドラ)やIDA Proを使ってプログラムの動作を解析。
・オープンソースのソフトウェアのコードを読む。
・脆弱性がある古いプログラムを調べてみる。
2.バイナリ解析
メモリのバグを探す技術を養います。
・バッファオーバーフロー(メモリの書き換え)
TryHackMeの「Buffer Overflow Prep」を学ぶ。
・ヒープエクスプロイト(動的メモリのバグを利用)
gdb(GNU Debugger)を使って、プログラムのメモリを観察する。
エクスプロイトを作る(エクスプロイト開発)
ここからは、見つけた脆弱性を利用して、エクスプロイトを作成する技術を学びます。
1.エクスプロイト開発
・Metasploit Framework
エクスプロイトを簡単に作れるツールを利用する。
・Pythonでエクスプロイトを書く
Metasploitに頼らず自作する。
勉強方法としては、TryHackMeの「Metasploit: Introduction」、「Metasploit: Exploitation」を学ぶ。
そして、既存のエクスプロイト「exploit-db」を読んで理解する。
ハッカーの最終目標はゼロデイエクスプロイトのまとめ
倫理的なエクスプロイト開発者(Ethical Exploit Developer)の最終目標ともいえるのが「ゼロデイエクスプロイト開発」だと考えます。。
まだ公表されていない脆弱性(ゼロデイ脆弱性)を発見し、それを利用するコード(エクスプロイト)を作成して、確認することです。
発見した脆弱性は、ソフトウェアベンダーなどに報告し、適切なパッチが提供されるよう支援します。これにより、サイバー攻撃を未然に防ぎ、セキュリティ向上に貢献します。
最終目標とも考えられるため、非常に難しい開発になります。
でも、これがハッカーの醍醐味ではないでしょうか。
私は、TryHackMeでの学習をお勧めします。
興味があれば、少しずつ学んでみてくださいね。