この記事では、DDos攻撃の種類をより深く見ていく。
・その前にTCPについて
TCPはサーバやユーザーであるクライアントがお互いに行う、通信プロトコルの一種です。お互いに送受信を繰り返すことで成り立っています。
接続を確立するためには、①SYN→②SYN/ACK→③ACK、
接続終了するには①FIN→②FIN+ACK→③ACKという手順を踏みます。
TCPの通信は信頼性を重視しているため、データの送信に対して受信した側がパケットの到達を通知する応答を返し、それを送信側が受信することで完了とみなす。
・SYNフラッド攻撃
攻撃者が接続元IPを偽ってボットから接続要求(SYN)を大量に送信する攻撃
・FINフラッド攻撃
切断要求(FIN)を大量に送信する攻撃
SYN・FINを送信された接続先では、大量の接続元IPに対して②の応答処理をします。接続元IPが存在しない場合は、③の確認応答を待ち続け、これがサーバのリソースが枯渇する原因となります。
・ACKフラッド攻撃
ACKを大量に送信することで接続のためのリソースを使用させる攻撃。
接続先へACKを連続して送信すると通信ログがACKパケットでいっぱいになることから、別の攻撃のカモフラージュとして使われる可能性もあります。
・UDPフラッド攻撃
その前にUDPについて
インターネットで標準的に使われているプロトコルの一種で、インターネット・プロトコル(IP)を使ったネットワークにおいて、 アプリケーション同士が最小限の仕組みでデータを送受信できるように考案された、 シンプルなプロトコルです。
受信されるデータの誤りや順序の違いなどを検出する機能がなく、コネクションが確立しているかどうかを確認する状態(ステート)がない。プロトコルが簡素なため、信頼性には劣る。応答性の良さを優先したい通信や、 その他に音声や動画のストリーミングなどといった、 リアルタイム性が重要視される通信で使われている。
しかし、送信者アドレスの偽装が容易であるため、 DNSなどを使ったDDoS攻撃で使われることが多いプロトコルとなっています。
ここからUDPフラッド攻撃の説明
UDPフラッド攻撃は偽ったIPアドレスからDDoS攻撃をするものです。
UDPフラッド攻撃にはランダム・ポート・フラッド攻撃、フラグメント攻撃の2種類の手法があります。
・ランダム・ポート・フラッド攻撃
ランダム・ポート・フラッド攻撃とは、サーバのランダムなポートに対してUDPデータグラムを含むパケットを大量に送信することで、サーバを停止させようとする攻撃です。
・フラグメント攻撃
突然大きなサイズのUDPパケットを大量に送信する攻撃です。逆に、極端に短いパケットのデータを大量に送信することで、ネットワークデバイス(特にファイアーウォール)に負荷をかけることもできます。
・HTTP GET/POST Flood攻撃
事前に多数の端末やサーバに不正にインストールしたBotを使い、ターゲットのWebサーバに大量のHTTP GETリクエストを実行する攻撃です。HTTP POSTコマンドを実行する攻撃をHTTP POST Flood攻撃といいます。
攻撃を受けたWebサーバは大量のHTTP GETコマンドを処理しきれなくなります。HTTP GET Flood攻撃は、HTTP GETリクエストにランダムなパス等を入れ、正常なリクエストに似せる工夫がされている事が多く、攻撃と判別することが難しいと言われています。
・Slow HTTP DoS Attack
Slow HTTP DoS Attackとは、比較的少ないパケット数で長時間に渡りTCPセッションが継続するようにWebサーバのTCPセッションを占有することで、正規のサイト閲覧者がアクセスできないように妨害する攻撃です
・Connection Exhaustion攻撃
Connectionとは、TCPのコネクション(=接続)のこと。
ロードバランサー、ファイアウォール、アプリケーションサーバーなどネットワークに接続する多くの機器は、接続状態をメモリなどに所定量分だけ保持しています。
この攻撃は、大量のTCP通信のコネクション確立のみを行い、その後はデータ転送を行わないことで接続状態テーブルを消費しようとします。 この攻撃によりサーバは新たなTCPコネクション確立を受け入れられなくなり、サービスを提供できない状態に陥ります。
・Stream Flood攻撃
偽の送信元IPアドレス、ポート、RST(接続拒否)フラグが設定されたパケットを大量に送信することで、過剰なパケットでネットワークやサーバへ負荷をかける攻撃です。
・DNS Flood attacks(DNSフラッド攻撃)
1つまたは複数のDNS(Domain Name System)サーバを対象へ、大量の名前解決のためのリクエストを送信することで、正当なユーザからの名前解決を妨害しようとする攻撃です。
DNSは一度実行した名前解決の内容を一定期間キャッシュに保管しておき、再度同じ名前で解決する場合はキャッシュの内容をユーザに返信することにより、DNSサーバ間トラフィックやDNSサーバのリソースを節約します。
しかし、攻撃者が名前解決できない大量のリクエストを一方的に送信することにより、①DNSサーバのキャッシュは無効な内容で満される②DNSサーバ間のトラフィックを攻撃通信で溢れる。①②によりDNSサーバへ負荷をかける攻撃です。
間違いやアドバイスなどあれば、遠慮なく言って欲しいです。
参考文献: