TCPリセット攻撃とは、攻撃者が偽装したTCPリセットパケットをホストに送信する攻撃の一種です。
これはインターネット上で最も一般的な攻撃の一つで、多くの問題を引き起こしています。主に、対象のサイトを停止させるために行われるほか、分散型DoS攻撃(DDoS攻撃)として用いられることもあります。
2台のコンピュータ間でTCP接続が確立されると、送信側から受信側にTCPのRST(リセット)パケットが送信されます。
TCPリセットパケットを送信する前に、送信側は受信側が通信を受け付けているかどうか確認します。
もし受信側が通信を受け付けていなければ、送信側はTCPリセットパケットを送信します。
通常、このパケットは、受信側がしばらくACKを返していない場合に送られます。
一方、受信側が通信を受け付けている場合は、送信側はパケットを送らないで済みます。
その代わり、送信側は自分自身へTCPリセットパケットを送ります。
しかし、TCPリセット攻撃では、送信側が受信側へ偽装したTCPリセットパケットを送信します。
現行の運用環境は資産管理に優れているものの、SYNフラッド攻撃に対してはサーバの対応が難しく、接続テーブルへの負荷を完全に防げるわけではありません。
SYNフラッド攻撃の緩和策として、一般的に以下の方法が取られます。
すべての接続情報を保持する代わりに、各SYN要求ごとに16バイト程度の小さな記録をワーカーのメモリ上に割り当てる方法です。
この方法では、サーバがクッキーを生成します。接続要求に対してSYN-ACKで応答した後、要求情報はバックログから削除され、メモリ上から除かれた状態でポートは次の接続に備えます。正当な要求で、クライアントから最終ACKが返されると、サーバは(一定の条件のもとで)SYN情報を再構築します。TCP接続に関する一部の情報が失われますが、攻撃によって正当な利用者へのサービス拒否が起こるよりは好ましい方法です。
サーバは、特定のクライアントからの初回要求に対し、あえて無効なSYN-ACKを返します。これによりクライアントはRSTパケットを送信し、不具合を示します。RSTパケットが確認されると、サーバはその要求を正当と判断し、クライアントを記録し、後続の接続要求を受け入れます。
SYNフラッドの影響を軽減するため、TCPスタックの設定を変更する方法もあります。これは、接続に割り当てたメモリが解放されるまでの待機時間を短縮するか、あるいは直接接続要求を破棄することで実現されます。
ただし、これらの対策は、数ギガビット(あるいはそれ以上)のトラフィックに耐えうる大規模なDDoS攻撃への対応力があることが前提となります。
重要: この攻撃は、偽装したTCPリセットパケットを送ることで実行されます。
つまり、送信側は通信を受け付けていない受信側にTCPリセットパケットを送るのです。
また、送信側は本来の送信元ではありません。
そのため、受信側は送信側がTCP接続を終了したと誤認します。
結果として、受信側はTCP接続を閉じます。
その後、送信側は再び受信側へTCPリセットパケットを送ります。
このTCPリセットパケットも偽装されたものです。
このサイクルが続き、受信側が完全に停止するまで攻撃は行われます。
多くのインターネットサービスはTCP(Transmission Control Protocol)を利用しています。TCP接続は通常、3ウェイハンドシェイクと呼ばれる手順で確立され、双方が十分な資源を保持してからデータ通信が始まります。しかし、この仕組みは攻撃に対して非常に脆弱です。DoS攻撃は正当な利用者がサービスを利用できなくするもので、DDoS攻撃は複数の拠点から同時に行われます。SYNフラッド攻撃では、新たなTCP接続を装った偽のトラフィックによりハンドシェイクが妨げられます。
業務の継続を確保するためには、今後のSYN要求を常に解析し、正当な利用者に正しく資源を割り当てることが重要です。これにより、人的な介入や遅れを伴わずにDDoS攻撃への対策が可能となります。
TCP Reset attack - Github
HTTP/S DDoS Attacks Soar 487% in Three Years - www.infosecurity-magazine.com
最新情報を購読