SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

ApacheKillerでBlackJumboDogを攻撃してみた

昨日参加させて頂いたせきゅぽろApache Killerのお話があったのですが、ちょっと気になったので・・・・Full Disclosureで公開されているkillapache.plで、BlackJumboDogへのDoSが可能かどうかを試してみました。
killapache.plが有効に動作するように、BlackJumboDogの方は、デフォルトの設定から下記の部分を変更しました。

同時接続 10->60 攻撃が50スレッドで動作するためトップページ index.html を xxx.jpg(18Kbyte) ターゲットのファイルサイズが小さいと有効に動作しないため
攻撃を受けたBlackJumboDogのトレース表示は次のような感じで、一度Rangeの動作を確認したのち、特有のRangeヘッダを打ち込んで来るようです。


RECV	5328	192.168.0.11	HEAD / HTTP/1.1
RECV	5328	192.168.0.11	Host: 192.168.0.10
RECV	5328	192.168.0.11	Range:bytes=0-
RECV	5328	192.168.0.11	Accept-Encoding: gzip
RECV	5328	192.168.0.11	Connection: close
RECV	5328	192.168.0.11
SEND	5328	192.168.0.11	HTTP/1.1 206 Partial Content
SEND	5328	192.168.0.11	Server: BlackJumboDog Version 5.3.3.0
SEND	5328	192.168.0.11	MIME-Version: 1.0
SEND	5328	192.168.0.11	Date: Sat, 01 Oct 2011 22:00:49 GMT
SEND	5328	192.168.0.11	Last-Modified: Mon, 29 Aug 2011 20:52:00 GMT
SEND	5328	192.168.0.11	Accept-Range: bytes
SEND	5328	192.168.0.11	Content-Range: bytes 0-197454/197455
SEND	5328	192.168.0.11	Connection: Keep-Alive
SEND	5328	192.168.0.11
RECV	5512	192.168.0.11	HEAD / HTTP/1.1
RECV	5512	192.168.0.11	Host: 192.168.0.10
RECV	5512	192.168.0.11	Range:bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,5-14,5-15,5-16,5-17,5-18,5-19,5-20,5-21,5-22,5-23,5-24,5-25,5-26,5-27,5-28,5-29,5-30,5-31,5-32,5-33,5-34,5-35,5-36,5-37,5-38,5-39,5-40,5-41,5-42,5-43,5-44,5-45,5-46,5-47,5-48,5-49,5-50,5-51,5-52,5-53,5-54,5-55,5-56,5-57,5-58,5-59,5-60,5-61,5-62,5-63,5-64,5-65,5-66,5-67,5-68,5-69,5-70,5-71,5-72,5-73,5-74,5-75,5-
〜〜〜〜〜〜〜略〜〜〜〜〜〜〜
1267,5-1268,5-1269,5-1270,5-1271,5-1272,5-1273,5-1274,5-1275,5-1276,5-1277,5-1278,5-1279,5-1280,5-1281,5-1282,5-1283,5-1284,5-1285,5-1286,5-1287,5-1288,5-1289,5-1290,5-1291,5-1292,5-1293,5-1294,5-1295,5-1296,5-1297,5-1298,5-1299
RECV	5512	192.168.0.11	Accept-Encoding: gzip
RECV	5512	192.168.0.11	Connection: close
RECV	5512	192.168.0.11
SEND	5512	192.168.0.11	HTTP/1.1 200 Document follows
SEND	5512	192.168.0.11	Server: BlackJumboDog Version 5.3.3.0
SEND	5512	192.168.0.11	MIME-Version: 1.0
SEND	5512	192.168.0.11	Date: Sat, 01 Oct 2011 22:00:54 GMT
SEND	5512	192.168.0.11	Last-Modified: Mon, 29 Aug 2011 20:52:00 GMT
SEND	5512	192.168.0.11	Accept-Range: bytes
SEND	5512	192.168.0.11	Connection: Keep-Alive
SEND	5512	192.168.0.11

一応、BlackJumboDogは動作を続け、他のアクセスも処理していましたが、さすがに50スレッドでバリバリアクセスされるとCPUの使用率はかなり高負荷の状態となってしまいます。

そこで、ApacheKiller特有のヘッダを見つけた時点で、セキュリティログに記録を残す機能と、攻撃元(IPアドレス)をACL(アクセスコントロール)の拒否リストに自動的に追加する機能を追加しました。


string range = recvHeader.GetVal("Range");
//指定範囲を取得する(マルチ指定には未対応)
if (range.IndexOf("bytes=") == 0) {
    range = range.Substring(6);
    string[] tmp = range.Split('-');
    //Ver5.3.5 ApacheKiller対処
    if (tmp.Length > 20) {//Rangeの指定が20個もあれば十分怪しい?
        Logger.Set(LOG_KIND.SECURE, tcpObj,9000054, string.Format("[ Apache Killer ]Range:{0}", range));
       AutoDeny(false, remoteIp);
       responseCode = 503;
       keepAlive = false;//切断
        goto SEND;
    }
}

オプション設定はこんな感じ(Ver5.3.5)

そして再び攻撃した際のBlackJumboDogのログと、CPUの状況は次のようになりました。


日時	種類	スレッドID	機能(サーバ)	アドレス	メッセージID	説明	詳細情報
2011/10/02 16:15:27	DETAIL	5516	Web-111:80	192.168.0.11	9000002	_subThread() started.	count=2 Local=192.168.0.10:80 Remote=192.168.0.11:46514
2011/10/02 16:15:27	NOMAL	5516	Web-111:80	192.168.0.11	0000024	リクエスト	HEAD / HTTP/1.1
2011/10/02 16:15:27	SECURE	5516	Web-111:80	192.168.0.11	9000054	Apache Killerによる攻撃の可能性があります	[ Apache Killer ]Range:0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,5-14,5-15,5-16,5-17,5-18,5-19,5-20,5-21,5-22,5-23,5-24,5-25,5-26,5-27,5-28,5-29,5-30,5-31,5-32,5-33,5-34,5-35,5-36,5-37,5-38,5-39,5-40,5-41,5-42,5-43,5-44,5-45,5-46,5-47,5-48,5-49,5-50,5-51,5-52,5-53,5-54,5-55,5-56,5-57,5-58,5-59,5-60,5-61,5-62,5-63,5-64,5-65,5-66,5-67,5-68,5-69,5-70,5-71,5-72,5-73,5-74,5-75,5-76,5-77,5-78,5-79,5-80,5-81,5-82,5-83,5-84,5-85,5-86,5-87,5-88,5-89,5-90,5-91,5-92,5-93,5-94,5-95,5-96,5-97,5-98,5-
〜〜〜〜〜〜〜略〜〜〜〜〜〜〜
1195,5-1196,5-1197,5-1198,5-1199,5-1200,5-1201,5-1202,5-1203,5-1204,5-1205,5-1206,5-1207,5-1208,5-1209,5-1210,5-1211,5-1212,5-1213,5-1214,5-1215,5-1216,5-1217,5-1218,5-1219,5-1220,5-1221,5-1222,5-1223,5-1224,5-1225,5-1226,5-1227,5-1228,5-1229,5-1230,5-1231,5-1232,5-1233,5-1234,5-1235,5-1236,5-1237,5-1238,5-1239,5-1240,5-1241,5-1242,5-1243,5-1244,5-1245,5-1246,5-1247,5-1248,5-1249,5-1250,5-1251,5-1252,5-1253,5-1254,5-1255,5-1256,5-1257,5-1258,5-1259,5-1260,5-1261,5-1262,5-1263,5-1264,5-1265,5-1266,5-1267,5-1268,5-1269,5-1270,5-1271,5-1272,5-1273,5-1274,5-1275,5-1276,5-1277,5-1278,5-1279,5-1280,5-1281,5-1282,5-1283,5-1284,5-1285,5-1286,5-1287,5-1288,5-1289,5-1290,5-1291,5-1292,5-1293,5-1294,5-1295,5-1296,5-1297,5-1298,5-1299
2011/10/02 16:15:27	SECURE	4808	Web-111:80	-	9000018	この利用者のアクセスは許可されていません(ACL)	user:AutoDeny-10/2/2011 4:15:27 PM address:192.168.0.11
2011/10/02 16:15:27	DETAIL	5516	Web-111:80	192.168.0.11	0000004	response	HTTP/1.1 503
2011/10/02 16:15:27	SECURE	3296	Web-111:80	-	9000055	【自動拒否】「ACL」の禁止する利用者(アドレス)に追加しました AutoDeny-10/2/2011 4:15:27 PM,192.168.0.11
2011/10/02 16:15:27	DETAIL	3296	Web-111:80	192.168.0.11	0000004	response	HTTP/1.1 503
2011/10/02 16:15:28	SECURE	5824	Web-111:80	-	9000018	この利用者のアクセスは許可されていません(ACL)	user:AutoDeny-10/2/2011 4:15:27 PM address:192.168.0.11
2011/10/02 16:15:28	SECURE	480	Web-111:80	-	9000016	このアドレスからの接続は許可されていません(ACL) address:192.168.0.11
2011/10/02 16:15:28	SECURE	4828	Web-111:80	-	9000018	この利用者のアクセスは許可されていません(ACL)	user:AutoDeny-10/2/2011 4:15:27 PM address:192.168.0.11
2011/10/02 16:15:28	DETAIL	3296	Web-111:80	192.168.0.11	9000003	_subThread() stoped.	count=2 Local=192.168.0.10:80 Remote=192.168.0.11:46513
2011/10/02 16:15:28	SECURE	480	Web-111:80	-	9000016	このアドレスからの接続は許可されていません(ACL) address:192.168.0.11
2011/10/02 16:15:28	DETAIL	5516	Web-111:80	192.168.0.11	9000003	_subThread() stoped.	count=1 Local=192.168.0.10:80 Remote=192.168.0.11:46514
2011/10/02 16:15:28	SECURE	480	Web-111:80	-	9000016	このアドレスからの接続は許可されていません(ACL) address:192.168.0.11
2011/10/02 16:15:28	SECURE	480	Web-111:80	-	9000016	このアドレスからの接続は許可されていません(ACL) address:192.168.0.11
2011/10/02 16:15:28	SECURE	480	Web-111:80	-	9000016	このアドレスからの接続は許可されていません(ACL) address:192.168.0.11

だいたい、10〜60%で推移、特に問題なく使用できるようです。

【参考文献】
Apache killerは危険〜Apache killerを評価する上での注意〜 | 徳丸浩の日記

RangeつきリクエストによるApacheのDoSとApache Killerの実力 | 水無月ばけらのえび日記

Full Disclosure: Apache Killer