はじめに
この実験では、人気のディレクトリおよびファイル総当たりツールである Gobuster のスキャン速度を、スレッド数を操作することによって管理する方法を探ります。スレッド数を調整する方法を理解することは、効率的なスキャンとターゲットサーバーへの影響を最小限に抑えるために不可欠です。デフォルト、増加、および減少したスレッド数でスキャンを実行し、各設定の実際の影響を観察します。この実践的な経験により、ネットワークエチケットとターゲットの安定性を考慮しながら、偵察活動を最適化するための洞察が得られます。
デフォルトスレッド数 (10) でスキャンを実行する
このステップでは、デフォルトのスレッド数である 10 を使用して Gobuster スキャンを開始します。これにより、そのパフォーマンスと出力形式のベースラインを理解できます。Gobuster は、この実験のために設定されたローカル Web サーバー上のディレクトリとファイルを検出しようとします。
ターミナルを開き、次のコマンドを実行します。
gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt
gobuster dir: ディレクトリ/ファイル総当たりスキャンを実行することを指定します。-u http://127.0.0.1:8080: スキャンのターゲット URL を設定します。この実験では、ポート 8080 で実行されているローカル HTTP サーバーをターゲットにしています。-w /tmp/wordlist.txt: 総当たりプロセスに使用する単語リストを指定します。このファイルには、一般的なディレクトリ名とファイル名が含まれています。
出力を観察します。Gobuster がスキャンを開始し、使用されているスレッド数(デフォルトは 10)を示し、次に検出されたディレクトリまたはファイルをリスト表示するのを確認できます。結果が表示される速度に注意してください。
===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url: http://127.0.0.1:8080
[+] Threads: 10
[+] Wordlist: /tmp/wordlist.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin (Status: 200)
/login (Status: 200)
/secret (Status: 200)
/index (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================
出力には、URL、単語リスト、そして重要なスレッド数を含む、スキャンに使用された設定が表示されます。/admin、/login、/secret、/index のような検出されたパスは、それぞれの HTTP ステータスコードと共にリストされています。
-t フラグを使用してスレッド数を 50 に増やす
このステップでは、Gobuster が使用するスレッド数を 50 に増やします。これは -t フラグを使用して行われ、これにより目的の同時実行スレッド数を指定できます。スレッド数が多いほど、より多くのリクエストが同時に送信されるため、一般的にスキャンは高速になります。
ターミナルで次のコマンドを実行します。
gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt -t 50
-t 50: この新しいフラグは、スレッド数を 50 に設定します。
再度出力を観察します。デフォルトの 10 スレッドの場合よりもスキャンがはるかに速く完了することに気づくはずです。最初の出力で、50 スレッドが使用されていることが確認されます。
===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url: http://127.0.0.1:8080
[+] Threads: 50
[+] Wordlist: /tmp/wordlist.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin (Status: 200)
/login (Status: 200)
/secret (Status: 200)
/index (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================
出力の [+] Threads: 50 の行に注意してください。これにより、指定したスレッド数が使用されていることが確認されます。単語リストが少なく、ターゲットがローカルであるため、スキャンはほぼ瞬時に完了するはずです。
スキャン速度の向上を観察する
このステップでは、スレッド数を増やした影響を視覚的に確認するために、スキャン時間を明確に比較します。前のステップでは定性的な観察を行いましたが、このステップではその概念を強化することを目的としています。
前のスキャンは、単語リストが小さくサーバーがローカルであったため非常に高速でしたが、出力が表示されるまでの時間に大きな違いがあったことに気づいたはずです。スレッドを 10 から 50 に増やしたとき、スキャンはほぼ瞬時に完了しました。
速度の違いをより明確にするために、単語リストに数千または数百万のエントリが含まれており、ターゲットサーバーがリモートでレイテンシが高い場合を想像してみてください。そのようなシナリオでは、10 スレッドと 50 スレッドの違いは劇的に明らかになり、スキャン時間を数時間から数分に短縮できる可能性があります。
ここでの重要なポイントは、スレッド数が多いほど Gobuster はより多くのリクエストを同時に送信できるため、特に大きな単語リストや応答性の高いターゲットの場合、全体のスキャン時間を大幅に短縮できるということです。
このステップでは、前の 2 つのステップに基づいた観察であるため、特定のコマンドは必要ありません。
スレッド数を 5 に減らしてスキャンを遅くする
次に、プロセスを逆にし、スレッド数を 5 に減らします。これにより、スレッド数が少ないとスキャンが遅くなることがわかります。スキャンが遅いことは非生産的に思えるかもしれませんが、レート制限のあるターゲットを扱う場合や、より控えめにする必要がある場合など、特定の状況では必要になることがあります。
ターミナルで次のコマンドを実行します。
gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt -t 5
-t 5: これは、デフォルトの半分のスレッド数である 5 に設定します。
出力を観察します。デフォルトの 10 スレッドと比較してスキャンが完了するのにわずかに時間がかかり、50 スレッドのスキャンよりも明らかに時間がかかることに気づくはずです。
===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url: http://127.0.0.1:8080
[+] Threads: 5
[+] Wordlist: /tmp/wordlist.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin (Status: 200)
/login (Status: 200)
/secret (Status: 200)
/index (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================
[+] Threads: 5 の行は、スレッド数が減少したことを確認します。単語リストは小さいですが、以前の実行と比較してわずかな遅延を感じるはずです。これは、スレッド数とスキャン時間の間の直接的な関係を示しています。
ターゲットサーバーに対するスレッド数の影響を理解する
この最終ステップでは、特にターゲットサーバーに関して、スレッド数を調整することのより広範な影響について説明します。スレッド数を増やすとスキャンの速度を上げることができますが、ターゲットサーバーへの負荷も増加します。
高スレッド数(例:50 以上):
- メリット: スキャン完了が速い。
- デメリット:
- サーバー負荷の増加: 同時に多数のリクエストを送信すると、ターゲットサーバーが過負荷になり、サービス拒否(DoS)やパフォーマンスの低下につながる可能性があります。
- レート制限/ブロック: 多くの Web サーバーや WAF(Web アプリケーションファイアウォール)は、ブルートフォース攻撃を防ぐためにレート制限を実装しています。高スレッド数はこれらの防御策をすぐにトリガーする可能性があり、IP が一時的または永続的にブロックされる原因となります。
- ネットワーク輻輳: 特にターゲットがリモートの場合、かなりのネットワーク帯域幅を消費する可能性があります。
- 疑念: 高いリクエストレートは悪意のあるアクティビティの兆候であることが多く、セキュリティチームに警告を発する可能性があります。
低スレッド数(例:1〜5):
- メリット:
- サーバー負荷の軽減: 侵入性が低く、ターゲットのパフォーマンス問題を引き起こす可能性が低くなります。
- レート制限の回避: 低いリクエストレートはレート制限メカニズムをトリガーする可能性が低く、スキャンがより長く検出されずに進行することを可能にします。
- ステルス性: 正規のユーザートラフィックのように見え、検出される可能性を低くします。
- デメリット:
- スキャンの遅延: 特に大きな単語リストの場合、完了にかなりの時間がかかります。
適切なスレッド数の選択: 最適なスレッド数はいくつかの要因によって異なります。
- ターゲットサーバーの容量: サーバーはどの程度の負荷に耐えられますか?
- ネットワークレイテンシ: レイテンシが高い場合、適切な速度を維持するためにより多くのスレッドが必要になる可能性があります。
- レート制限ポリシー: レート制限や WAF はありますか?
- あなたの目標: スピードを優先しますか、それともステルス性を優先しますか?
倫理的なハッキングやペネトレーションテストでは、ターゲットの安定性に注意を払い、混乱を引き起こさないようにすることが重要です。常に低いスレッド数から開始し、ターゲットが処理でき、目標がより速い結果を必要とする場合にのみ徐々に増やしてください。
このステップでは、概念的な理解であるため、特定のコマンドは必要ありません。
まとめ
この実験では、-t フラグを使用してスレッド数を調整することにより、Gobuster のスキャン速度を制御する方法を学びました。デフォルトの 10 スレッドでスキャンを実行し、次に 50 に増やして大幅な速度向上を観察し、最後に 5 に減らしてスキャンが遅くなるのを確認しました。
さらに重要なのは、スレッド数がスキャン時間だけでなく、ターゲットサーバーのパフォーマンスやセキュリティメカニズムにも重大な影響を与えることを理解したことです。スレッド数が多いほどスキャンは速くなりますが、サーバー負荷が増加し、検出またはブロックのリスクも高まることを学びました。逆に、スレッド数が少ないとステルス性が向上し、サーバーへの影響が軽減されますが、速度が犠牲になります。この知識は、責任ある効果的な偵察を行う上で不可欠です。
