SYN Flood Attackを手元のPCで検証する方法

  • このエントリーをはてなブックマークに追加
  • Pocket

DDOS攻撃(Distributed Denial Of Service Attack)は分散型サービス拒否攻撃といい、ターゲットに向けて複数のコンピュータから大量のリクエストを送ることで、マシン・ネットワークリソースを利用できないようにする攻撃です。

DDOS攻撃は複数のDOS攻撃で構成されています。
DOS攻撃には様々な手法があり、SYN Flood Attackもその一つです。

この記事ではhping3を使用して実際にSYN Flood Attackを行う方法を紹介します。

SYN Flood Attack

SYN Flood AttackはTCPコネクションを確立する3ウェイハンドシェイクという手順を悪用して、ターゲットホストに対して、TCP接続要求パケットのSYNを大量に送りつける攻撃です。
SYNを受け取ったホストはSYA/ACKを返しますが、攻撃元はACKを返しません。すると、この要求はタイムアウトになるまでターゲットホストで保持されます。攻撃者がSYNを送り続けることで、ターゲットホストはSYN/ACKを返し、ACKを待ち続けるととなり、やがてシステムリソースを使い果たしてダウンします。

正常な3ウェイハンドシェイク

SYN Flood Atackの攻撃手法

hping3を用いたSYN Flood Attack

hpingは、コマンドライン指向のTCP / IPパケットアセンブラ/アナライザです。
主にセキュリティやネットワークのテストに用いられます。

今回はhping3を使って、SYN flagのみを立てたパケットを生成します。

webサーバ起動

まず最初にターゲットとなるwebサーバを起動します。

今回はmac book上にインストールされたApache/2.4.25 (Unix)を用います。

$ sudo apachectl start

webサーバへアクセス

サーバが正常に稼働していることを確認します。

hping3によるSYN Flood Atack開始

次に、hping3を使って攻撃を始めます。

昨今の事情に配慮し、攻撃コードを非表示としています。

これはシンプルなSYN Flood Attackを再現したものです。

オプションの説明
–rand-source 送信元IPアドレスをランダムに設定
–flood 可能な限り速くパケットを送信
-S SYN flagを立てる
-p 80 ポートを指定

攻撃を開始して間も無く、webサーバへのアクセスができなくなりました。

この時、netstatでコネクション状況を確認してみると、大量のSYN_RCVDのコネクションが表示されています。
さらに、送信元IPアドレスにはランダムなIPアドレスが表示されており、送信元IPアドレスが詐称可能と分かります。

matu-mio-mcb:~ matu_mio$ netstat
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  localhost.http         77.37.57.240.58866     SYN_RCVD
tcp4       0      0  localhost.http         199.38.25.240.58868    SYN_RCVD
tcp4       0      0  localhost.http         133.29.158.226.58867   SYN_RCVD
tcp4       0      0  localhost.http         122-147-56-201.s.58869 SYN_RCVD
tcp4       0      0  localhost.http         120.84.238.240.58861   SYN_RCVD
tcp4       0      0  localhost.http         29.158.10.253.58864    SYN_RCVD
tcp4       0      0  localhost.http         6.165.19.151.58860     SYN_RCVD
tcp4       0      0  localhost.http         195.84.113.151.58859   SYN_RCVD
tcp4       0      0  localhost.http         27.221.86.141.58858    SYN_RCVD
tcp4       0      0  localhost.http         15.30.218.248.58856    SYN_RCVD
tcp4       0      0  localhost.http         156.110.117.10.58857   SYN_RCVD
tcp4       0      0  localhost.http         c-b21d4ce2-74736.58855 SYN_RCVD
tcp4       0      0  localhost.http         182.173.61.252.58854   SYN_RCVD
<more...>

解説

webサーバは大量のSYNを受け取り、SYN/ACKを返します。
正常の通信であれば、SYN/ACKを受け取ったクライアントはACKを応答しますが、今回はSYN flagのみを立てたパケットを大量に送りました。
そのため、クライアントからACKの応答が返って来ることはなく、webサーバはACK応答を待ち続けることになったのです。
結果として、webサーバはACK応答を待ち続けることで、新しい接続を受け付けるリソースが枯渇し、新しくコネクションを確立することができなくなってしまいました。

まとめ

今回は、実際にwebサーバに対し、SYN Flood Attackを実施して、webサーバの応答が止まることを検証しました。

SYN Flood AttackはIPアドレスが詐称可能なため、ブラックリストによる防御ができない上、正当な接続との見分けが難しい場合もあり、対策の効果が得られないことがあります。

現在はOSやネットワークIDSの機能によりSYN Flood AttackにTCP RESETパケットを送出するなどの対策が取られています。他にもシケーンス番号を利用したSYN cookiesなどの対策も有効です。

参考

SYNフラッド攻撃(SYN Flood Attack)|セコムトラストシステムズ株式会社

Denial-of-service Attack – DoS using hping3 with spoofed IP in Kali Linux|blackmoreops

パケット生成が簡単にできるhpingコマンド|無題の備忘録

  • このエントリーをはてなブックマークに追加
  • Pocket

SNSでもご購読できます。

コメントを残す

*