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