DDoS 疑似攻撃プログラムの試作と既存 DoS 攻撃プログラムを用いた DoS 攻撃の実験
2010SE183 榊原広樹 2010SE198 下方章裕
指導教員：後藤邦夫

1

はじめに実行する負荷計測ツールの apache bench を用いる．
多数のホストからこれを使用することで DDoS 攻撃となる．

近年，情報通信ネットワーク及び PC の普及が著しい．
さらにインターネットの普及に伴い，不正アクセスによる被害が増加傾向にある．特に，送信元アドレスを偽装 TCP SYN Flood 攻撃
3 ウェイハンドシェイクの最初の SYN パケットを送した上で，パケットを大量に送信し通信を処理しているる段階で，クライアント自身の IP アドレスを送る回線やサーバの処理能力を占有することで，システムをところ，偽った IP アドレスをサーバーに送り，サー使用困難にしたりダウンさせたりする Denial of Service
バーは偽った IP アドレスからの ACK を待ち続けるattack(以下 DoS 攻撃とする) や攻撃内容は DoS 攻撃と同ことを利用した攻撃．
じだが，踏み台となる多数のコンピュータを利用して一斉にターゲット・サーバに攻撃をする Distributed Denial UDP Flood 攻撃of Service attack(以下 DDoS 攻撃とする) は，システム原理は TCP SYN Flood 攻撃と同じであるが，コネを停止に追いやることもあり，政府系サイトにまで被害クションレスの通信であるため，一方的にパケットも出ている．
を送り付けることができる．また，UDP では，最大攻撃ツールが容易に入手でき，誰でも攻撃に参加する
1500 バイトのパケットを正常の通信と偽って送るこことができることや，何も前触れがなく攻撃されることとができるので，膨大なパケットを送信することがから，DoS 攻撃，DDoS 攻撃の対策は困難である．特にできる．
DDoS 攻撃は攻撃手段が多く，送信元のアドレスを偽装 Smurf 攻撃するため，通常の DoS 攻撃よりも防御が困難であるため，
ICMP エコー要求パケットを受信した多数の PC は，攻撃による被害は DoS 攻撃よりも大きくなると考えら一斉に詐称された発信元 IP アドレスに対して ICMPれる．
エコー応答パケットを返送する．詐称された発信元
先行研究 [5] では，DDoS 攻撃のシミュレータの構成とのネットワークでは大量の ICMP エコー応答パケッ
検出方法を示しており，結果は示していない．そこで，簡ト到着によりトラフィックが増大し，サービス不能単なネットワークを構築し，攻撃ソフトウェアを使用すになる．
る．ネットワーク負荷等を計測し，そこから対策を練る． TCP SYN Flood 攻撃，UDP Flood 攻撃，Smurf 攻撃は簡易ネットワークでの実験を終えたあとは，規模を大き 既存のツールがなかったため，自作プログラムを作成しくし，複雑なネットワークでの実験を行い再度計測する． 使用することにより再現し，シミュレーションをする．
本研究では，エミュレータを用い，擬似攻撃を行う．まず，DoS 攻撃のエミュレーションを行い，さらに検知を 3 システムの概要行う．その後にパケットフィルタリングを行い，パケット
本節では，システム全体の流れと本研究に使用したシ受信量を減らす．次に，DDoS 攻撃をエミュレータ上で ステムの概要について説明する．
DDoS 攻撃ツールを動作させることにより不正アクセス状況を再現し，DoS 攻撃と同様，検知とパケットフィル 3.1 実験ネットワークの構成
タリングを行い不正アクセス状況の詳細の把握，対処方
本研究では図 1 に示す擬似ネットワーク上で実験を法を検討する．
行う．ネットワークの構築は Common Open Research
本研究の成果として検出ツールで攻撃先の IP アドレス Emulator[1](以下 CORE とする) を使用した．記入されを検出し，その IP アドレスをフィルタリングすることで ている IP アドレスは CORE の自動設定機能によるもの
DDoS 攻撃を軽減できることが確認できる．ネットワー である．攻撃対象は n16 とし，DoS 攻撃の攻撃者は n7，ク構築と文書作成は共同で行った．下方は自作プログラ DDoS 攻撃の攻撃者は n7 n12 として同時に攻撃をする．
ムの作成，iptables の設定，snort の設定を担当し，榊原また，効率的で大規模なものまで実現できること，GUIはシミュレーション，数値の計算を担当した．のため使いやすいこと，現実的なソフトウェアの再現ができることを理由に CORE を使用した.

2

DoS/DDoS 攻撃の種類

DoS/DDoS 攻撃の中で，以下の 4 つを説明する [7]．選んだ理由としては，典型的な 4 つだからである．
過大な HTTP 要求
Web サーバにコンテンツを応答させる処理を大量にCORE
CORE は，1 つ以上のマシンでネットワークをエミュレートするためのツールである．CORE は，描画のための GUI 軽量仮想マシン，およびスクリプティングネットワークエミュレーションのための Python モジュールのトポロジで構成されている．それぞれのノードから端末を起動することができ，その端末上で攻撃ツールや検出ツールを動かすことができる．
CORE を使用した理由は，効率的で大規模なものまで実現できること，GUI のため使いやすいこと，リアルなソフトウェアの再現ができること等のことから使用した．

3.3

検出ツール

本研究では，DoS/DDoS 攻撃を検出するため以下のシステムを使用する．

snort
Snort[2] とは，コンピュータやネットワークへの不正な侵入や，攻撃の検出を行うシステム IDS(不正侵入検知システム) のひとつ．Snort は監視しているネットワークに流れるパケット常時観測し，不正な侵入や攻撃をその手法である「パターンデータ」と照らし合わせ，マッチングしているものを検出し，アラートを通知しログとして記録する．監視対象となるネットワークを記述する．var
HOME NET any ではすべてのネットワークを監視することになるので本研究では，HOME NET で図 1，2 の10.0.2.1/24 を監視するための設定と内部からのアクセスを不正アクセスとして扱わない設定を以下の通り変更する．この設定を図 1 の攻撃対象となる n16 の端末上で行う．

var HOME NET の設定
10.0.2.1/24 を監視する
var HOME NET any↓
var HOME NET 10.0.2.1/24

図 1 DoS 攻撃ネットワークモデル

3.2

攻撃ツール

CORE で作成したネットワークで以下の 2 つの攻撃ツールを使用する．それぞれ共通して DoS 攻撃は n7，DDoS
攻撃は n7 n12 を攻撃者とし，n16 を攻撃対象とする．
slowhttptest[3]slowhttptest は攻撃パターンの多彩なツールであるので本研究で使用する．slowhttptest とは、アプリケーション層のサービス不能攻撃の高機能なオプションを持ったシミュレーションツールのことである．メジャーな Linux や
OS X，Cygwin で動作する．サーバの読み込みに多大な時間をかけさせる攻撃である．攻撃手段ではないが apachebench と同じようなツールとして扱う．このツールの初期値は表 1 のようになっており，この初期値を基準として各項目の値を変更し実験を行う．
表 1 パラメータの初期値
Test type
SLOW HEADERS
Number of connections
50
URL
http://localhostVerb
GETInterval between follow up date
10 seconds
Connections per second
50
Test duration
240 seconds
Probe connection timeout
5 seconds
Max length of followup date field32 bytes

内部からのアクセスを不正アクセスとして扱わない
var EXTERNAL NET any↓
var EXTERNAL NET !$HOME NET

iptables
iptables は，本来ホストで送受信する IPv4 のパケットのフィルタリングや，NAT（network address translation）を管理するためのコマンドである．DoS/DDoS 攻撃対策のためパケット制限を行う．
パケットをカウントし回数で制限するのに、iptables には 2 種類のモジュールが用意されている．1 つは，「limit」モジュールである．パケットをカウントし，回数に応じて制限を実施する．ただし送信元の IP アドレスで回数制限を加えるには，対象の IP アドレスを都度指定し iptablesを実行する必要がある．そのため送信元を特定できない
DDoS 攻撃には役立たない．もう 1 つの「hashlimit」モ
ジュールなら，クライアントの IP アドレスごとにパケット数をカウントし，iptables 実行時にクライアントごとに制限を実施することができる．そのさい，個々の IP アドレスを指定する必要もない．
limit で ssh のサーバポートへのアクセスの受け入れ制限を設定した場合，攻撃的パケットもそうでない真っ当なパケットも一緒に管理されるので，攻撃が行われている間は，権限を持った人もアクセスが制限されてしまう．
一方 hashlimit を使えば，アクセス元毎に管理できるので，攻撃が行われている間でも，権限のある人は正常にアクセスすることができる．
最大応答回数を 10 回とする．10 回までは無条件に応答

4

図 2 limit モジュール
し，11 回目の応答は破棄される．パケットの規制は 1 分間に 1 回まで ssh 接続が可能とする．パスワードを総当たりで解析するブルートフォース攻撃に有効である．

図 3 hashlimit モジュール

疑似 DDoS 攻撃プログラムの実現

TCP SYN Flood 攻撃，UDP Flood 攻撃，Smurf 攻撃のツールがないため，TCP，UDP，ICMP のプロトコルを持ち発信元 IP アドレスを偽装する 3 種類のプログラムを作成した．これらのプログラムは，IPv4 のネットワーク
に対して，発信元 IP アドレスのネットワーク部を 192.168と固定し，ホスト部を 0 から 255 までの数字を任意に摘出し，送信するプログラムである．なお，プロトコルがTCP，UDP の場合，ポート番号は 100 に固定し，プロトコルが ICMP の場合，Type と Code はそれぞれ 8，0に固定した．IP ヘッダや UDP/TCP データグラムに対し，通信時に起こったエラーを検出するために checksumを用意する．checksum[6] とは，データを送受信する際の誤り検出方法の一つである．送信前にデータを分割し，それぞれのブロック内のデータを数値とみなして合計を取ったものである．求めた checksum はデータと一緒に送信される．受信側では送られてきたデータ列から同様にchecksum を計算し，送信側から送られてきた checksumと一致するかどうかを確認する．送信側と受信側の値が異なれば，通信系路上でデータに誤りが生じていることになる．checksum 関数はプログラム上で次のように使用した．
checksum 計算部分と使用部分
void checksumadjust(unsigned char *chksum,unsigned char *optr, int olen,
unsigned char *nptr, int nlen){::：//擬似ヘッダ分だけ checksum 計算//icmpfake4 は擬似ヘッダを使わないので不要
u_int16t tmp = 0;
ipph.src = ip->saddr;
tmp=checksumadjust((unsigned char *)&tcph->check,0,0,(unsigned char *)&ipph,sizeof(ipph));同一ホストからの最大接続回数を 1 回，その後は 1 分間に 1 回まで接続を許可する．こうした接続回数は，管理ファイルによりクライアントごとにカウントされる．limitの制限では，正常なリクエストも不正アクセスに紛れてしまうが，あるクライアントを不正アクセスで規制している間も，他のクライアントから接続することが可能となる．
以下のコマンドを入力することで IP アドレス 10.0.0.20 からくるパケットをすべて破棄することができる．iptables//TCP ヘッダ + データ分を追加した checksum 計算
tmp=checksumadjust((unsigned char *)&tcph->check,-F，iptables -X のコマンドを入力することで初期化を行0,0,うことができる．
(unsigned char *)tcph, tcph->doff*4);
tcph->checksum=sum;
web は 1000 回までは許可、以降は 1 分間に 120 回までに制限する (limit)
IP アドレスを偽装するため，rand 関数を利用しホスト
ssh は 5 回まで新規接続許可それ以降は 1 分に 1 回に制限、6 分間無接続なら制限解除．web は 700 回まで新規 部を任意な数字とするプログラムの一部を次に記載する．
IP アドレス偽装部分
接続許可それ以降は 1 秒に 1 回に制限、6 分無接続なら 
制限解除 (hash limit)
unsigned x,y;以上の設定を図 1 の攻撃対象となる n16 の端末上で行う．
char srcstr[100];iftop
ネットワークトラフィック情報を表示するツール [4] である．IP アドレスとポート番号をベースに，それぞれの通信にトラフィックの送信量，トラフィックの受信料，直前 2 秒，10 秒，40 秒のトラフィック量の平均値を視覚的に表示する．ターミナル全体に情報を表示し，定期的に更新する．DoS 攻撃，DDoS 攻撃のシミュレーションで観測したトラフィック量をまとめ表にする．

x=(unsigned)(255*(random()/(1.0*RAND_MAX))),y=(unsigned)(255*(random()/(1.0*RAND_MAX))),
sprintf(srcstr,"192.168.%u.%u",x,y);
printf("Src: %s\n", srcstr);
inet_pton(AF_INET,srcstr,&src);
ip->saddr = src.s_addr;

パケットを送信する部分を次に記載する．



パケット送信部分

表 3 接続回数 50 での DDoS 攻撃の場合

n=sendto(sock,sendbuff,sizeof(struct iphdr)+8, 0,(const struct sockaddr*) &server,sizeof(server));

接続回数-c 50

実験と結果

5

本節では，本研究で提案したシステムの動作実験をし，その結果を述べる．
65.1

フィルタリング前 フィルタリング後

TX(送信量)RX(受信量)275.0kB
211.4kB

0kB
72.9kB

おわりに実験環境

本研究では DoS，DDoS 攻撃のシミュレーション，および対策の実験を試みた．実験環境が整わなかったため，
本研究では Ubuntu Linux12.04(32bit OS) をインストールした PC を用意し CORE を起動する．この PC で図 1 snort で検知することが出来なかったが，ログを見て攻撃元や攻撃手法を判断することが可能であることを示した．のネットワークを構築する．
CORE で構築したネットワークは以下の，攻撃を行う攻 また判断できた攻撃先を iptables で設定し，有効にフィ撃者 (図 1 でいう n7)，攻撃者からの攻撃を受ける攻撃対 ルタリングをすることも確認できた. また，自作プログ
ラムは送信することは可能だが，応答が返ってこず納得
象 (図 1 でいう n16) で構成される．
する結果を得ることができなかったが，応答が返ってこ
5.2 実験の手順
れば slowhttptest で成功したようにフィルタリングが可
まず，ネットワーク全体が通信可能であるかを ping コ 能であると考えられる．
マンドで確認する．通信が確認できたら slowhttptest や今後の課題としては，自作プログラムを改善し，攻撃を自作プログラムで DoS 攻撃のシミュレーションをする． 再現可能にすることである．それから，再度実験をする
そのさい，iftop と snort で通信状況を確認する．大量の 必要がある．また，snort での設定に DoS 攻撃のパターパケットが送信されている (攻撃されている) ことが確認 ンデータを登録し，検出させる必要がある．さらに本実できたら，iptables でパケットフィルタリングの設定を行 験の iptables の設定は必要最低限なものだったが，TCPい，再度 DoS 攻撃のシミュレーションと通信状況の確認 SYN Flood 攻撃対策，smurf 攻撃対策など細かい使い分をする．パケットの送受信量にはばらつきが生じるため， けができる設定が可能であるので，さらに細かい軽減が攻撃を 5 回行いその平均を取ったものを結果とする．そ 可能であろう．今後の課題を以下に述べる．の結果，攻撃先からの受信パケットの量が減っていれば
1. 自作プログラムの改善と実験．
フィルタリングができているということなので実験成功
2. snort でパターンデータとマッチしているものを検とする．また，複数のノードから攻撃をすることで DDoS出，通知し，ログとして記録する機能の追加．
攻撃とし同じ手順で実験をする．
3. 各攻撃ごとに iptables の設定を作り替える．
5.3 実験結果
まず，slowhttptest で DoS 攻撃のシミュレーションをした．実験で得られた結果の比較を以下に示す．以下の表から分かるように，iptables でフィルタリングをする前後でパケットの送受信量が減っていることを確認した．同様に DDoS 攻撃のシミュレーションをしたところ，iptablesで，フィルタリングをする前後でパケットの送受信量が減っていることを確認した．よって，攻撃先からの IP アドレスが分かれば，有効にフィルタリングできることを確認した．
表 2 接続回数 50 での DoS 攻撃の場合
接続回数

-c 50

フィルタリング前 フィルタリング後

TX(送信量)RX(受信量)46.3kB
34.0kB0kB
12.2kB

自作プログラムではフィルタリング前後で送受信量が変わらなかった．理由として，プログラムが間違っている可能性があることが考えられるが解決することができなかった．

参考文献[1] Ahrenholz, J.: Comparison of CORE Network Emulation Platforms, Proc. of IEEE MILCOM Conference, IEEE, pp. 864–869 (2010).
[2] ITmedia Inc.:
snort (accessed Jan. 2014).
http://www.itmedia.co.jp/help/howto/security/ids/01/.
[3] Shekyan, S.: slowhttptest (accessed Jan. 2014).
http://code.google.com/p/slowhttptest/.
[4] Warren, P.:
iftop (accessed Jan.
http://www.ahref.org/tech/server/servertips/801.html.

2014).

[5] 永島秀己，大野浩之：DDoS Attack シミュレータ，横河技報，Vol. 45, No. 4, 横河電機，pp. 201–204 (2001).
[6] 山 本 和 彦：checksum (accessed Jan. 2014).
http://www.mew.org/ kazu/doc/bsdmag/cksum.html.
[7] 寺田真敏：DoS/DDoS 攻撃とは，情報処理， Vol. 54,
No. 578, pp. 428–435 (2013).