HULKについてご存じですか?
いえ、実写映画で敵をひざまずかせるハルクのことではありません。しかし、HULKウェブサーバもデジタルの世界で似た働きをし、見えないハンマーを用いずにターゲットサーバへDDoS攻撃を仕掛け、ダウンさせます。
多くのペンテスターに利用されているHTTP Unbearable Load King (HULK)スクリプトは、単一のホストから多数のユニークなリクエストを生成します。これが、世界中の他のペンテストツールやDDoSツールと一線を画す特徴です。
幸いなことに、HULKは研究者によって作られたものであり、実際のサイバー犯罪者の共犯者ではありません。ここで、数分でHULKウェブサーバについて簡単に理解していただきます。
HULKは、HTTP Unbearable Load Kingの略で、Webサーバに対する分散型DDoS攻撃ツールです。主に研究目的で設計され、ペンテスターがサーバの耐性を確認するための助けとなります。これにより、セキュリティ専門家はDDoS対策の弱点を見つけ、実際の攻撃者がそれを悪用する前に改善することが可能となります。
サイバーセキュリティ専門家のBarry Shteiman(現BlastRadiusのCTO)は、2012年5月にHULKを作成しました。多くのペンテストツールが予測しやすい負荷パケットやHTTP SYNリクエストを生成するため、セキュリティ専門家が組織の本当の防御能力を評価できないことに不満を抱いたBarryは、DDoS攻撃のテスト用にこのPythonスクリプトを書きました。その目的は、より実際に近い攻撃を仕掛け、サーバの実際の耐性を試すことにあります。
HULKは一般的なペンテストツールや攻撃スクリプト、脆弱性悪用手法とは大きく異なります。HULKは1つのホストから不規則な間隔で多数のユニークなリクエストを発信します。そのため、単にDDoS攻撃を実行するのみならず、ネットワークの防御機構が攻撃パターンを推測しにくいよう仕向けています。このため、トラフィックやパケットのフィルタリングが非常に困難となります。
さらに、このツールにはリファラの難読化や実際のエージェントの隠蔽など、複数の機能が搭載されています。
次に、HULKウェブサーバツールの動作をまとめます:
HULKは、既知のUser Agentリスト(次のセクションを参照)を活用してリクエストを難読化します。生成される各リクエストごとにランダムなUser Agentが選ばれるため、侵入防止システムが異常を検知しにくくなっています。
HULKは、複数のキープアライブ接続を試みます。これらの接続継続時間はそれぞれ異なり、結果として多数のHTTPリクエストを開き、利用可能なリソースを占有し続けることに成功します。
HULKは、リファラ情報を難読化して偽造します。あらかじめ指定された主要なウェブサイト、またはホスト自身を示す場合があります。
HULKはユニークなリクエストを生成するのみならず、ターゲットHTTPサーバに対してキャッシュ無効を適用します。これにより、専用のキャッシュソリューションの背後にあるサーバでも、より迅速にダウンさせることが可能です。
各リクエストごとにユニークなURLを生成することで、キャッシュツールやその他のフィルタリング・最適化機構を回避できます。この機能により、ほとんどの場合、サーバは200(OK)の応答を返します。
もしHulk.pyスクリプトを確認すると、random.randint関数が何度も使用されていることが分かるでしょう。例えば、以下のリクエスト生成部分をご覧ください:
request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10)))
request.add_header('User-Agent', random.choice(headers_useragents))
request.add_header('Cache-Control', 'no-cache')
request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10)))
request.add_header('Keep-Alive', random.randint(110,120))
request.add_header('Connection', 'keep-alive')
request.add_header('Host',host)
以下のスクリプト部分を確認すると、HULKがどのUser Agentを利用しているかがわかります.
'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3'
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)'
'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)'
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1'
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1'
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)'
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)'
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)'
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)'
'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)')
'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)'
'Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51'
HULKは通常のTCPハンドシェイクからHTTPフラッディング攻撃を開始します。まずSYNリクエストが送信され、次にSYN ACK、そしてACKが続きます。
最初のリクエストが障害を突破すると、User Agentは対象URLへ多様なHTTP GETリクエストを送信し始め、ランダムな接尾辞を利用します.
ホストは、異なる/ランダムな接尾辞を付与した複数のHTTP GETリクエストを送信し、200(OK)の応答を受け取ります.
以下のHULK統計を確認すると、このツールが非常に効率的であることが理解できます。その効率は、クライアント側のリソースや使用するノード数に比例し、攻撃は実際に8.818秒以内で終了(成功)することもあります.
HULK統計
トラフィック | 取得数 |
---|---|
パケット数 | 858 |
初回から最終パケットまで | 8.818 sec |
平均パケット数/秒 | 97.297 |
平均パケットサイズ | 540 bytes |
バイト数 | 463436 |
平均バイト数/秒 | 52553.381 |
平均MBit/秒 | 0.42 |
セキュリティ専門家、ペンテスター、または組織のサイバーネットワーク管理を担う方にとって、HULKはテストに欠かせないツールです。確実に難しい状況を引き起こし、ネットワークのセキュリティ強化に寄与するでしょう。しかし、好奇心からHULKをサイバー犯罪や実際の攻撃目的で利用しようと考える場合は、ツール作成者がその悪用を禁じている点に十分留意してください。結果や問題については、使用者自身の責任となります。
最新情報を購読