なぜ認定ペンテストでプロキシローテーションが必要なのか
バグバウンティプログラムやペネトレーションテストの依頼を受けているあなたは、次のような経験がないだろうか。
- サブドメイン列挙中にWAFに検知され、IPがブロックされる
- コンテンツディスカバリでレート制限に引っかかり、403/429が連続で返ってくる
- スキャン元IPがブラックリストに入り、以降の正当なテストもできなくなる
これらはすべて、少数のIPから大量のリクエストを送っていることが原因だ。ペンテストプロキシローテーション(pentest proxy rotation)は、この問題を根本的に解決する。リクエストを複数のIPに分散させることで、ターゲットのWAFやレートリミッターに「通常のユーザートラフィック」として認識させることができる。
ただし、プロキシローテーションは認定されたスコープ内でのみ使用すべき技術である。無断で他人のシステムをスキャンすることは犯罪であり、本稿は一切の違法行為を推奨しない。
スコープと法的枠組み:すべては明示的な許諾から始まる
バグバウンティプログラムのルール
バグバウンティに参加する際、まず確認すべきはプログラムのスコープ定義だ。HackerOneやBugcrowdのプラットフォームでは、各プログラムが以下を明記している。
- In-scopeドメイン:テストが許可される対象
- Out-of-scopeドメイン:テストが禁止される対象
- 許可されるテスト手法:自動スキャンの可否、レート制限の上限など
- Safe Harbor条項:スコープ内の行為について法的追及をしないという宣言
Safe Harborがあるからといって、何をしてもよいわけではない。多くのプログラムは「DoSを発生させるテストは禁止」「1秒あたりXリクエスト以内」といった制約を設けている。プロキシを使ってIPを分散しても、ターゲット全体へのリクエスト総数が制限を超えれば違反である。
ペネトレーションテストの依頼契約
企業から直接依頼を受けるペンテストでは、ルールオブエンゲージメント(RoE)が契約書に含まれる。RoEには通常以下が記載される。
- テスト期間の開始・終了日時
- スキャンを許可するIPレンジ(あなたの送信元IPを事前登録)
- 禁止される攻撃手法(バッファオーバーフロー、エクスプロイト実行など)
- インシデント発生時の連絡先と対応フロー
レジデンシャルプロキシを使用する場合、送信元IPが動的に変化することを事前にクライアントに説明し、合意を得ておく必要がある。WAFのホワイトリストに依存する環境では、プロキシ経由のトラフィックがブロックされる可能性もあるため、事前調整が不可欠だ。
⚠️ 法的警告: 明示的な許諾なしにウェブアプリケーションをスキャンすることは、日本の不正アクセス禁止法、米国のComputer Fraud and Abuse Act(CFAA)、欧州のComputer Misuse Act等に違反する可能性がある。本稿の技術情報は、スコープが明示された合法的なセキュリティテストにのみ適用すること。
サブドメイン列挙:レジデンシャルIPでWAF検知を回避
サブドメイン列挙は、ペンテストの偵察フェーズで最もリクエスト数が多くなる工程の一つだ。OSINTソースからの受動的収集であればIPは露呈しにらいが、アクティブなDNSブルートフォースやゾーン転送試行では、ターゲットのDNSインフラに大量のクエリを送ることになる。
Amassでのプロキシ統合
AmassはOWASPプロジェクトのサブドメイン列挙ツールで、プロキシ設定をサポートしている。設定ファイルでProxyHatのレジデンシャルプロキシを指定することで、列挙トラフィックを分散IPから送信できる。
Amassの設定ファイル(
~/.config/amass/config.yaml)に以下を追加する:# Amass config.yaml — ProxyHat residential proxy
pki:
ca_bundle: ""
network:
http_proxy: "http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080"
https_proxy: "http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080"
dns_resolver: "1.1.1.1:53"
timeout: 30この設定により、AmassのHTTP/HTTPSリクエストがすべてProxyHatのレジデンシャルプロキシ経由で送信される。国コードをターゲットの所在地に合わせることで、より自然なトラフィックパターンになる。
実行コマンド例:
# アクティブ列挙をプロキシ経由で実行
amass enum -active -config ~/.config/amass/config.yaml \
-d target-scope.example.com \
-o subdomains.txtSubfinderとの併用
Subfinderは受動的なソースのみを使用するため、プロキシの必要性は低いが、APIソースへのアクセスでIPベースのレート制限に遭遇する場合はプロキシが有効だ。環境変数で設定できる:
export HTTP_PROXY="http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080"
export HTTPS_PROXY="http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080"
subfinder -d target-scope.example.com -o passive_subs.txtウェブ資産発見フロー:プロキシローテーションでコンテンツディスカバリを安定化
サブドメインが特定できたら、次はコンテンツディスカバリだ。隠しパス、API エンドポイント、バックアップファイルなどを発見するこのフェーズでは、ffufやgobusterといったツールが大量のHTTPリクエストを送信する。
ffufでのプロキシローテーション
ffufは-xフラグでプロキシを指定できる。ProxyHatのレジデンシャルプロキシを使用する例:
# ffuf でコンテンツディスカバリ(ProxyHat経由)
ffuf -u https://target-scope.example.com/FUZZ \
-w /opt/wordlists/seclists/Discovery/Web-Content/common.txt \
-x http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080 \
-rate 50 \
-mc 200,301,302,403 \
-o ffuf_results.json重要: -rate 50で1秒あたり50リクエストに制限している。プロキシでIPを分散していても、ターゲットへの総リクエストレートを制御することがペンテストのエチケットである。
スティッキーセッションの活用
一部のテストでは、同じIPからセッションを維持する必要がある。例えば、ログイン後の認証済みスキャンでは、IPが変わるたびにセッションが無効化される可能性がある。ProxyHatではユーザー名にセッションIDを含めることでスティッキーセッションを実現できる:
# スティッキーセッション(同じIPを維持)
ffuf -u https://target-scope.example.com/FUZZ \
-w /opt/wordlists/seclists/Discovery/Web-Content/common.txt \
-x http://user-session-pentest01-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080 \
-rate 30 \
-mc 200,301,302 \
-H "Cookie: session=authenticated_token" \
-o ffuf_auth_results.jsongobusterでのプロキシ設定
gobusterも-pフラグでプロキシをサポートしている:
gobuster dir -u https://target-scope.example.com \
-w /opt/wordlists/seclists/Discovery/Web-Content/common.txt \
-p http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080 \
-t 20 \
-s "200,301,302"スキャナートラフィックの偽装:Burp Suite + 上流レジデンシャルプロキシ
手動テストやBurp SuiteのActive Scanを使用する際、データセンタIPからのトラフィックはWAFに「スキャナー」と判定されやすい。レジデンシャルプロキシを上流に配置することで、トラフィックをより自然に見せることができる。
Burp Suiteの上流プロキシ設定
Burp SuiteでProxyHatを上流プロキシとして設定する手順:
- Project Options → Connections → Upstream Proxy Serversを開く
- Addをクリックし、以下を入力:
- Destination host:
*(すべてのトラフィックを経由) - Proxy host:
gate.proxyhat.com - Proxy port:
8080 - Username:
user-country-US - Password: あなたのProxyHatパスワード
- Destination host:
- 「Use this proxy for all destinations」にチェック
この設定により、Burpから送信されるすべてのリクエストがProxyHatのレジデンシャルIP経由でターゲットに到達する。
Burpのレート制限設定
Active Scanの速度を制御するには、Project Options → Connections → Throttlingでリクエスト間隔を設定する。バグバウンティのスコープで1秒あたり10リクエスト以下が指定されている場合、100ミリ秒の間隔を設定する。
Burp拡張でのIPローテーション自動化
より高度なローテーションを行うには、Burpの拡張機能(PythonやJava)でリクエストごとにProxyHatのユーザー名を変更する方法がある。例えば、リクエストごとにuser-session-{random}-country-USを生成することで、リクエスト単位のIPローテーションが可能だ。
レート制限のエチケット:強力なツールには強力な責任が伴う
プロキシローテーションを使えば、理論上はターゲットのIPベースのレート制限を回避できる。しかし、それをやってはならない。理由は3つある。
- 倫理的責任:スコープ契約で指定されたレート制限は、IP単位ではなくターゲット全体への総リクエスト数として解釈すべきだ
- 実用的理由:過剰なリクエストはターゲットにDoS状態をもたらし、インシデント対応チームを招集させる——これはあなたのテストが中断されることを意味する
- 評判の維持:レート制限を悪用する研究者はプラットフォームから禁止される。バグバウンティは長期的な信頼関係の上に成り立つ
レート制限のベストプラクティス
- スコープのレート制限を確認し、その50〜70%以下で運用する(余裕を持たせる)
- ツールの同時接続数(
-tや-cフラグ)を控えめに設定する - 1時間ごとにリクエスト数をログで確認し、上限に近づいていないか監視する
- 429レスポンスを受け取ったら、即座にスキャンを一時停止し、間隔を広げる
プロキシタイプ別のペンテスト適性比較
ペンテストに最適なプロキスタイプは、テストのフェーズによって異なる。以下の表で比較しよう。
| プロキスタイプ | サブドメイン列挙 | コンテンツディスカバリ | 認証済みスキャン | WAF回避性 | コスト |
|---|---|---|---|---|---|
| レジデンシャル | ◎ 最適 | ◎ 最適 | △ セッション維持要注意 | ◎ 非常に高い | 中〜高 |
| モバイル | ○ 良好 | ○ 良好 | △ セッション維持要注意 | ◎ 非常に高い | 高 |
| データセンタ | △ WAF検知リスク | △ WAF検知リスク | ◎ セッション安定 | ✕ 低い | 低 |
推奨戦略: 偵察フェーズ(サブドメイン列挙・コンテンツディスカバリ)ではレジデンシャルプロキシを使用し、認証済みの手動テストではスティッキーセッション付きのレジデンシャルプロキシまたはデータセンタプロキシを使用する。
OSINT収集におけるプロキシの役割:ターゲットへの帰属を防ぐ
ペネトレーションテストの偵察フェーズでは、OSINT(オープンソースインテリジェンス)の収集も重要な工程だ。Shodan、Censys、PublicWWWなどのプラットフォームにクエリを送る際、あなたの自宅やオフィスのIPがログに残ることを避けるべきだ。
レジデンシャルプロキシを経由することで:
- ターゲット組織への帰属を防ぐ:ペンテストの実施元が特定されるのを回避
- 調査対象との接触を最小化:直接のIP接触を避け、OPSECを強化
- ジオ制限を回避:特定国からのみアクセス可能なOSINTソースにアクセス
curlでの基本的なOSINT収集例:
# Shodan APIクエリをProxyHat経由で実行
curl -x http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080 \
"https://api.shodan.io/shodan/host/search?query=hostname:target-scope.example.com&key=YOUR_API_KEY"分散スキャン:レート制限耐性のある脆弱性スキャン
NucleiやNiktoなどのスキャナーを使用する際、単一IPからのスキャンはWAFに検知されやすい。複数のIPにスキャンを分散させることで、検知リスクを下げつつ、スコープ内のレート制限を遵守できる。
セッションIDを使ったリクエスト単位ローテーション
ProxyHatでは、ユーザー名にランダムなセッションIDを含めることで、リクエストごとに異なるIPを取得できる:
# リクエストごとにIPをローテーション(bash + curl)
for i in $(seq 1 100); do
SESSION="scan-$(openssl rand -hex 4)"
curl -x "http://user-session-${SESSION}-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080" \
-s -o /dev/null -w "%{http_code}" \
"https://target-scope.example.com/page/${i}"
doneこのアプローチをNucleiのテンプレート実行に適用するには、プロキシURLを環境変数に設定し、Nucleiの-proxyフラグを使用する:
nuclei -u https://target-scope.example.com \
-proxy http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080 \
-rate-limit 20 \
-severity medium,high,critical実践的なペンテストプロキシ運用フロー
これまでの内容を統合した、実践的な運用フローをまとめる。
- スコープ確認:プログラムルール・RoEを精読し、許可されるレート制限とテスト手法を確認
- 受動的列挙(プロキシ任意):Subfinder、AmassのパッシブモードでOSINT収集
- アクティブ列挙(プロキシ必須):Amassのアクティブモード、DNSブルートフォースをレジデンシャルプロキシ経由で実行
- コンテンツディスカバリ(プロキシ必須):ffuf/gobusterでパス・エンドポイント探索、レート制限を遵守
- 手動テスト(プロキシ推奨):Burp Suite + 上流レジデンシャルプロキシでWAF検知を回避
- 脆弱性スキャン(プロキシ推奨):Nuclei等をプロキシ経由で実行、レート制限を厳格に管理
- 報告:発見事項を責任ある開示プロセスに従って報告
重要な法的注意事項
本稿の内容を最後にもう一度強調する。
- 明示的な許諾がない限り、いかなるシステムもスキャンしてはならない
- バグバウンティプログラムのスコープ外のドメインをスキャンすることは、プログラムのルール違反であり、場合によっては違法行為となる
- プロキシローテーションを使ってレート制限を回避し、ターゲットに過負荷をかけることは、DoS攻撃に該当する可能性がある
- クライアントとの契約(RoE)で許可された範囲を超えるテストは、契約違反であり法的責任を問われる場合がある
- 各国の法律(日本の不正アクセス禁止法、米国CFAA、英国Computer Misuse Act等)を理解し、遵守すること
プロキシは道具に過ぎない。 ナイフが料理にも攻撃にも使えるように、プロキシローテーションも合法的なセキュリティテストにも違法な攻撃にも使える。違いは許諾と意図にある。常にスコープ内で、常に責任を持って。
Key Takeaways
- ペンテストプロキシローテーションは、WAF検知回避とレート制限管理に不可欠——ただしスコープ内のみで使用
- バグバウンティのレジデンシャルプロキシは、サブドメイン列挙やコンテンツディスカバリでデータセンタIPのブラックリスト入りを防ぐ
- Amassは設定ファイルで、ffufは
-xフラグで、Burp Suiteは上流プロキシ設定でProxyHatを統合可能 - プロキシでIPを分散しても、ターゲットへの総リクエストレートを制御することがエチケット
- 明示的な許諾がすべての前提——無断スキャンは犯罪であり、本稿は合法的なテストのみを対象とする
- スティッキーセッション(
user-session-XXX)は認証済みテストで、リクエスト単位ローテーションは偵察フェーズで使い分ける
認定されたセキュリティテストでプロキシローテーションを活用する準備はできたか。ProxyHatのレジデンシャル・モバイル・データセンタプロキシは、柔軟なプランで利用可能だ。また、190カ国以上のロケーションでジオターゲティングにも対応している。
他のユースケースについては、ウェブスクレイピングのユースケースやSERPトラッキングのユースケースも参照してほしい。






