Webサーバーの耐久性をテストする
注意・免責事項
このブログ記事で紹介するGoldenEyeツールは、セキュリティテストおよび教育目的のみに使用されるべきです。
許可なく他者のシステムやネットワークに対してこのツールを使用することは、法律で禁止されており、重大な結果を招く可能性があります。
本ツールの使用によって生じたいかなる損害や法的問題についても、筆者および情報提供元は一切の責任を負いません。必ずご自身が管理するシステム、または明確な許可を得たシステムに対してのみ、倫理的な範囲で使用してください。
1. GoldenEyeとは?
GoldenEyeは、Python 3で書かれたHTTP DoS (Denial of Service) テストツールです。WebサーバーがDoS攻撃に対してどの程度耐性があるかをテストするために開発されました。
このツールは、特に「HTTP Keep-Alive」と「NoCache」ヘッダーを利用した攻撃ベクトルを用いて、サーバーリソースの枯渇を試みます。具体的には、複数の並列コネクションを開き、それぞれでHTTPリクエストを送信し続けることで、サーバーが新しい接続を受け入れられない状態(サービス不能状態)に陥るかを検証します。
Slowloris攻撃のテクニックに触発されており、大量のトラフィックを一気に送りつけるのではなく、確立した接続を長時間維持し、ゆっくりとしたペースでリクエストを送信することで、サーバーのリソース(特にコネクションプール)を徐々に使い果たしていく点に特徴があります。
Kali Linuxの標準リポジトリに含まれており、ペネトレーションテスターやセキュリティ研究者が、管理下にあるシステムの堅牢性を評価するために利用します。
主な機能や特徴は以下の通りです。
- 正規のHTTPトラフィックを使用してテストを実行する
- 複数のワーカー(プロセス/スレッド)による並列接続
- 多様なHTTPメソッド(GET, POST, RANDOM)のサポート
- カスタムユーザーエージェントの利用
- Keep-Alive機能とキャッシュ無効化ヘッダーを利用したリソース消費
- デバッグモードによる詳細な動作確認
2. GoldenEyeのインストール
GoldenEyeは多くのLinuxディストリビューション、特にKali Linuxでは標準リポジトリに含まれていることが多いです。Kali Linuxを使用している場合、以下のコマンドで簡単にインストールできます。
sudo apt update
sudo apt install goldeneye
もし標準リポジトリに含まれていない場合や、他のOS(macOSや他のLinuxディストリビューション)で使用したい場合は、GitHubリポジトリからソースコードをクローンして利用することも可能です。その場合、Python 3がシステムにインストールされている必要があります。
# まずGitがインストールされているか確認
git --version
# GitHubからリポジトリをクローン
git clone https://github.com/jseidl/GoldenEye.git
# クローンしたディレクトリに移動
cd GoldenEye
# これで goldeneye.py を直接実行できるようになります
python3 goldeneye.py --help
GitHubリポジトリ: https://github.com/jseidl/GoldenEye
依存関係として Python 3 が必要です。
3. 基本的な使い方
GoldenEyeの基本的な使い方は非常にシンプルです。ターミナルからgoldeneye
コマンド(またはpython3 goldeneye.py
)に続けて、テスト対象のURLを指定するだけです。
コマンド構文:
goldeneye <URL> [オプション]
またはGitHubからクローンした場合:
python3 goldeneye.py <URL> [オプション]
注意: 以下の例では http://example.com
を使用していますが、絶対に許可なく他者のWebサイトをテストしないでください。ご自身で管理・所有しているテスト用サーバー、または明確な許可を得たサーバーに対してのみ実行してください。
最もシンプルな実行例:
# Kali Linux等でaptインストールした場合
goldeneye http://example.com/
# GitHubからクローンした場合
python3 goldeneye.py http://example.com/
これを実行すると、GoldenEyeはデフォルト設定(ワーカー数: 10, 各ワーカーのソケット数: 500, HTTPメソッド: GET)でターゲットURLに対してDoSテストを開始します。
実行中は、以下のような情報がリアルタイムで表示されます。
- 接続試行中のソケット数
- 成功した接続数
- 失敗した接続数
- 送信されたデータ量
テストを停止するには、Ctrl + C
を押します。
4. 主要なオプション
GoldenEyeは、テストの挙動を細かく制御するためのオプションを提供しています。ヘルプメッセージは -h
または --help
オプションで確認できます。
goldeneye --help
以下に主要なオプションとその説明をまとめます。
オプション | 短縮形 | 説明 | デフォルト値 | 例 |
---|---|---|---|---|
--workers |
-w |
同時に実行するワーカー(並列プロセス/スレッド)の数。数を増やすと、より多くの接続を同時に試みます。 | 10 | -w 50 (ワーカー数を50に設定) |
--sockets |
-s |
各ワーカーが開く同時接続(ソケット)の数。ワーカー数とこの値を掛け合わせたものが、理論上の最大同時接続数になります。 | 500 | -s 1000 (各ワーカーのソケット数を1000に設定) |
--method |
-m |
使用するHTTPメソッドを指定します。get , post , random (GETとPOSTをランダムに選択)から選べます。 |
get |
-m post (POSTメソッドを使用) |
--useragents |
-u |
使用するユーザーエージェント文字列が含まれたファイルを指定します。指定しない場合、ランダムに生成されたユーザーエージェントが使用されます。様々なUser-Agentを偽装することで、アクセス制限の回避を試みることができます。Debian系システムでは /usr/share/goldeneye/useragents/ ディレクトリにリストが存在する場合があります。 |
ランダム生成 | -u /path/to/useragents.txt |
--debug |
-d |
デバッグモードを有効にします。より詳細なログが出力され、接続ごとのステータスなどを確認できます。問題解決や動作確認に役立ちます。 | 無効 | -d |
--help |
-h |
ヘルプメッセージを表示して終了します。 | N/A | -h |
オプションを使用した実行例:
# ワーカー数を20、各ソケット数を1000、HTTPメソッドをPOSTに設定して実行
goldeneye http://example.com/ -w 20 -s 1000 -m post
# デバッグモードを有効にして実行
goldeneye http://example.com/ -d
# ランダムなHTTPメソッドを使用し、ワーカー数5、ソケット数10で実行
goldeneye http://example.com/ -m random -w 5 -s 10
これらのオプションを組み合わせることで、より現実に近い、あるいは特定の状況をシミュレートした負荷テストを行うことができます。
注意: ワーカー数やソケット数を極端に大きな値に設定すると、テストを実行しているマシン自体のリソース(CPU, メモリ, ネットワーク帯域)を大量に消費し、システムが不安定になる可能性があります。適切な値を設定してください。
5. 倫理的な考慮事項と対策
GoldenEyeのようなDoSテストツールは、システムの脆弱性を発見し、対策を講じる上で非常に役立ちますが、その強力さゆえに悪用される危険性も伴います。改めて強調しますが、このツールは必ず合法かつ倫理的な範囲で使用してください。
倫理的な使用
- 許可の取得: 自分自身が所有・管理していないシステムに対してテストを行う場合は、必ず事前に所有者から書面による明確な許可を得てください。
- 影響範囲の理解: テストが対象システムだけでなく、ネットワークインフラ全体に与える可能性のある影響を考慮してください。
- 目的の明確化: テストの目的は、システムの弱点を特定し、セキュリティを向上させることにあるべきです。他者への妨害や損害を与える目的での使用は絶対に許されません。
- 責任ある開示: テストによって脆弱性を発見した場合、システム管理者に責任ある方法で報告し、修正のための時間を与えてください。
GoldenEyeのような攻撃への対策
Webサーバー管理者として、GoldenEyeのようなHTTPベースのDoS/DDoS攻撃からシステムを保護するためには、多層的な防御策を講じることが重要です。
- Web Application Firewall (WAF): 不正なリクエストパターン(異常な量のKeep-Aliveリクエスト、頻繁なキャッシュ無効化要求、特定のUser-Agentからの大量アクセスなど)を検知し、ブロックするWAFの導入は非常に効果的です。
- レートリミット: 単一IPアドレスからの同時接続数や、一定時間内のリクエスト数を制限します。これにより、単一の攻撃元からのリソース枯渇攻撃を防ぐことができます。
- コネクションタイムアウトの最適化: Keep-Alive接続のタイムアウト値を適切に設定し、長時間アイドル状態の接続を早期に切断することで、無駄なリソース消費を抑えます。短すぎると正規ユーザーの体験を損なう可能性があるので、バランスが重要です。
- リソース監視とアラート: サーバーのCPU、メモリ、ネットワーク接続数などを常に監視し、異常なパターンが検知された場合に管理者にアラートを通知する仕組みを構築します。
- IPアドレスベースのアクセス制御: 疑わしい活動を行うIPアドレスを特定し、ファイアウォールレベルでブロックします。GeoIPフィルタリングなども有効な場合があります。
- CAPTCHAチャレンジ: 不審なトラフィックに対してCAPTCHA認証を要求することで、ボットによる自動化された攻撃をある程度防ぐことができます。ただし、GoldenEyeのようなツールは単純なHTTPリクエストを送るため、CAPTCHAだけでは不十分な場合もあります。
- ロードバランサーとスケーリング: 負荷分散装置を導入し、トラフィックを複数のサーバーに分散させます。また、負荷に応じて自動的にサーバースペックを増強(スケールアップ)またはサーバー台数を増やす(スケールアウト)仕組みも有効です。
- CDN (Content Delivery Network) の利用: CDNはエッジサーバーでトラフィックを吸収・フィルタリングし、オリジンサーバーへの負荷を軽減する機能を持っています。多くのCDNサービスにはDDoS対策機能が含まれています。
これらの対策を組み合わせることで、GoldenEyeを含む様々なDoS/DDoS攻撃に対する耐性を高めることができます。
6. まとめ
GoldenEyeは、WebサーバーのHTTPレイヤーにおけるDoS耐性をテストするための強力なツールです。HTTP Keep-AliveやNoCacheといった機能を悪用し、比較的少ないトラフィックでサーバーリソースを枯渇させることを試みます。
ワーカー数、ソケット数、HTTPメソッドなどを調整することで、様々なシナリオをシミュレートしたストレステストが可能です。Kali Linuxでは標準で利用できることが多く、インストールや基本的な使い方も比較的簡単です。
しかし、その能力ゆえに、悪用は厳禁です。必ず倫理観を持ち、法律を遵守し、許可された環境でのみ使用してください。
サーバー管理者にとっては、GoldenEyeのようなツールが存在することを認識し、WAF、レートリミット、適切なサーバー設定、監視体制などの多層的な防御策を講じることが、安定したサービス提供のために不可欠です。
セキュリティは攻撃と防御のいたちごっこです。ツールの使い方を理解するとともに、それに対する防御策も学び続けることが重要です。
参考情報
- Kali Linux Tools – goldeneye: https://www.kali.org/tools/goldeneye/
- GitHub – jseidl/GoldenEye: https://github.com/jseidl/GoldenEye