CLI を使用した Exploit-DB の検索

サイバーセキュリティBeginner
オンラインで実践に進む

はじめに

サイバーセキュリティの分野において、ソフトウェアの脆弱性を発見することは最初のステップに過ぎません。真のリスクを理解するためには、セキュリティ専門家は「発見」と「エクスプロイト(悪用)」の間のギャップを埋める必要があります。Exploit Database (Exploit-DB) は、ペネトレーションテスターや脆弱性研究者が利用するために開発された、CVE 準拠の公開エクスプロイトおよび対応する脆弱なソフトウェアのアーカイブです。

この橋渡しが重要な理由は、脆弱性の発見が持つ実用的な意味が、公開されているエクスプロイト素材の有無、その成熟度、および必要な条件によって異なるためです。ソフトウェアのバージョンをエクスプロイトの参照情報と照合することで、生の発見情報をリスクの文脈へと変換できます。

この実験では、Exploit-DB の公式コマンドラインインターフェースである searchsploit の使用方法を学びます。ローカルのエクスプロイトデータベースの更新、特定のソフトウェアバージョンの検索、大量の結果のフィルタリング、および分析のためのエクスプロイトソースコードの抽出を練習します。これらのスキルは、発見したサービスを既知の攻撃ベクトルにマッピングするために不可欠です。

Searchsploit データベースの更新

このステップでは、ローカルに保存されている Exploit Database を最新の状態に保つ方法を学びます。

searchsploit ツールは、ローカルに保存されたエクスプロイトのリポジトリに依存しています。新しい脆弱性は日々発見・公開されているため、検索を行う前にこのデータベースを定期的に更新することが非常に重要です。古いデータベースで検索を行うと、調査対象のソフトウェアに対して最近公開されたエクスプロイトを見逃す可能性があります。

エクスプロイトの参照情報を最新に保つことは、評価における衛生管理の一環です。古い情報は、誤った安心感や、逆に不適切な緊急性を引き起こす可能性があります。

データベースを更新するには、searchsploit コマンドが提供する更新フラグを使用します。ターミナルで以下のコマンドを実行してください。

searchsploit -u

ツールが公式リポジトリから最新の変更を取得していることを示す出力が表示されます。出力は以下のようになります。

[*] Updating searchsploit...
Already up to date.

このコマンドを実行することで、ローカルの /opt/exploitdb ディレクトリが、Exploit-DB で利用可能な最新のエクスプロイト、シェルコード、および論文と同期されます。

注意: 更新プロセスには数分かかる場合があります。特に exploitdb-papers をチェックしている際(例:Nothing here (/opt/exploitdb-papers). Starting fresh... と表示される場合)は時間がかかることがあります。完了するまでお待ちください。待ちたくない場合は、Ctrl+C を押してプロセスをキャンセルするか、新しいターミナルタブを開いて実験を続行しても問題ありません。メインのエクスプロイトデータベースは最初に更新されるためです。

ソフトウェアバージョンによる検索

このステップでは、特定のソフトウェアバージョンに対して基本的な検索を実行する方法を学びます。

ターゲットシステムをスキャンする際(例えば Nmap を使用する場合)、そのシステムで実行されているサービスの正確なバージョンを発見することがよくあります。これらのバージョン番号を searchsploit に直接渡すことで、関連するエクスプロイトを見つけることができます。このツールは、データベース内のエクスプロイトのタイトルと説明を検索し、一致するものを探します。

これが、上流での慎重なバージョン検出が重要である理由です。ソフトウェアの識別精度が高ければ高いほど、エクスプロイトの相関関係はより有用かつ正確になります。

vsftpd 2.3.4 を実行している FTP サーバーを発見したと仮定します。これは、悪名高い脆弱性を持つバージョンのソフトウェアです。この特定のバージョンに関連するエクスプロイトを検索するには、引数としてソフトウェア名とバージョンを入力します。

searchsploit vsftpd 2.3.4

コマンドは、エクスプロイトのタイトルとデータベース内の対応するパスを示すフォーマットされたテーブルを返します。出力は以下のようになります。

------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                          |  Path
------------------------------------------------------------------------ ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execution                               | unix/remote/17491.rb
vsftpd 2.3.4 - Backdoor Command Execution (Metasploit)                  | linux/remote/16362.rb
------------------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

検索結果には、脆弱性の簡単な説明(この場合はバックドアによるコマンド実行)と、エクスプロイトコードファイルへのパスが表示されます。ファイル名に含まれる番号(17491 など)は、一意の Exploit Database ID (EDB-ID) です。

検索結果のフィルタリング

このステップでは、フィルタを使用して検索を絞り込む方法を学びます。

広範な検索語を使用すると、数百件の結果が返され、必要なものを見つけるのが困難になることがあります。searchsploit には、出力を絞り込むためのいくつかのフラグが用意されています。最も便利なフラグは -t(ファイルパスや説明全体ではなく、エクスプロイトのタイトルのみを検索対象にする)と --exclude(特定の単語を含む結果を除外する)です。

Linux カーネルの権限昇格エクスプロイトを探しているが、通常はアクセス権の取得には役立たないサービス拒否(DoS)攻撃のエクスプロイトを除外したいとします。

以下のコマンドを実行して、タイトルから「linux kernel privilege escalation」を検索し、「dos」という用語を除外します。

searchsploit -t linux kernel privilege escalation --exclude="dos"

Linux カーネルの権限昇格に特化したエクスプロイトのリストが表示されます。出力は膨大になりますが、一般的な検索よりもはるかに整理された結果になります。

------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                          |  Path
------------------------------------------------------------------------ ---------------------------------
Linux Kernel - 'BCC' Local Privilege Escalation                         | linux/local/40759.rb
Linux Kernel - 'BPF' Local Privilege Escalation                         | linux/local/40758.rb
Linux Kernel - 'ptrace_traceme' Local Privilege Escalation              | linux/local/47133.c
...
------------------------------------------------------------------------ ---------------------------------

これらのフィルタリング技術を使用することで、特定のシナリオに必要なエクスプロイトの種類を迅速に特定できます。

エクスプロイトコードの詳細確認

このステップでは、実際のエクスプロイトコードを抽出して確認する方法を学びます。

エクスプロイトを見つけることはプロセスの一部に過ぎません。実行する前にコードを読み、理解する必要があります。未知のエクスプロイトを実行することは危険を伴う可能性があり、正しく動作させるために特定の修正(ターゲットの IP アドレスやポートの変更など)が必要になる場合があります。

searchsploit を使用すると、-m フラグの後に EDB-ID を指定することで、エクスプロイトを現在の作業ディレクトリに簡単にコピー(ミラーリング)できます。ステップ 2 で見つけた EDB-ID 17491 の vsftpd 2.3.4 エクスプロイトを抽出してみましょう。

以下のコマンドを実行して、~/project ディレクトリにエクスプロイトをミラーリングします。

searchsploit -m 17491

ファイルがコピーされたことを確認する出力が表示されます。

  Exploit: vsftpd 2.3.4 - Backdoor Command Execution
      URL: https://www.exploit-db.com/exploits/17491
     Path: /opt/exploitdb/exploits/unix/remote/17491.rb
    Codes: CVE-2011-2523, OSVDB-73573
 Verified: True
File Type: Ruby script, ASCII text
Copied to: /home/labex/project/17491.rb

これで 17491.rb ファイルが現在のディレクトリに配置されたため、cat などのテキストリーダーや nano などのエディタを使用して内容を確認できます。以下のコマンドを実行して、エクスプロイトコードの最初の数行を表示します。

head -n 20 17491.rb

出力には Metasploit モジュールの Ruby ソースコードが表示されます。これにより、コメントを読み、脆弱性(ソースコードに残された悪意のあるバックドア)を理解し、エクスプロイトがどのようにそれをトリガーするかを確認できます。

まとめ

この実験では、コマンドラインから直接 Exploit Database を操作するために searchsploit を効果的に使用する方法を学びました。まず、ローカルデータベースを更新して最新の脆弱性情報を確保する方法から始めました。次に、特定のソフトウェアバージョンに基づいたターゲット検索を実行し、除外フラグを使用して不要な結果をフィルタリングする方法を学びました。最後に、安全なレビューと分析のために、エクスプロイトのソースコードをローカルワークスペースに抽出する練習をしました。これらの技術は、脆弱性評価やペネトレーションテストのワークフローにおいて不可欠な基礎知識です。