2000P's Blog

最初のページ

ddos攻撃:無限戦争

著者 winterton 時間 2020-03-24
all

前情回顧:

1

風雲が再び起こる

QさんはLinux帝国ネットワーク部がTCP接続を担当する公務員です。

いつも仕事が楽で、残業も少ないですが、馬さんがLinux帝国にnginx会社を設立してから、Qさんの仕事量が急に増えて、残業が多くなりました。

朝早く、nginxは時間通りにスタートして、80ポートをバインドして傍受して、今日の仕事を始めました。

しばらくして、今日の最初の取引先が来ました。

小QはいつものようにSYNマークの付いたパケットを受け取った後、接続要求ブロックを作成し、80ポートホームの接続要求キューに入れ、SYNとACKマークの付いたパケットを返信した後、タイマーをオンにし、3回目の握手の完了を待つ。

待っていない間に、この取引先から返信が来ました。三回握手しました。小Qは、この接続要求ブロックを80ポート対応の接続完了待ち行列に転送し、ベルを押した。

着メロのnginxスレッドがepoll uwait関数から目覚め、accept関数を呼び出して、この新しく来たクライアントをキューからもらって、サービスを開始します。

これは小Qさんの日常です。彼はもうこの仕事をやりすぎて、車に慣れています。

もうすぐ夜遅くなります。Qさんは居眠りをしようとしていますが、こんなに遅くまで仕事がないかもしれません。

横になったばかりなのに、接続要求が来ました。小Qさんは寝ぼけた目をこすりながら、処理しようとしました。そしてすぐに二番目、三番目、四番目となりました。

奇妙なことに、お客さん一人にSYNだけ送ったら、メッセージがなくなります。接続要求の列の中の要求ブロックがだんだん多くなりました。最後に新しい要求ブロックを置くスペースがありません。小Qさんは状況が悪いと気づき始めました。帝国安全警報を鳴らしました。

2

全軍出撃する

十分前・・・・・

「目を覚ましてください。メッセージが来ました。まだsleepにいるDさんが目覚めました。

上峰はようやく私のことを思い出しました。Windows帝国に来てもうすぐ一ヶ月になります。ずっと指示がないです。ただ静かにしています。もう我慢できなくなりました。Dさんは伸びを伸ばして、立ち上がってrecv関数を呼んでメッセージを取りました。

ターゲット:222.23.189.34

ポート:80

動作:ソースIPアドレスを偽造し、SYNパケットを送信する

3

SYN Flook

今、帝国のトップが緊急会議を開催しています。

ファイアウォール:“今無数のネットがつながって入ってきて、帝国の安全のため、私は先にネットを閉鎖して、あれらのデータを包んで外で遮るほかありません。”

馬さん:早く措置を取って正常に回復してください。私達のnginx会社は一秒に大量のお客様を失いました。これは巨額の損失です。

帝国安全部長:“Qさん、今の状況を紹介してください。みんなで知恵を出し合います。”

小Q:「はい。TCPの三回の握手は皆さんもご存知のことと思いますが、SYNのパケットを受け取ったら、クライアントの情報を記憶するためにデータブロックを用意したいです。敵軍はまさにこの点を狙っています。大量のSYNパケットを送ってくれます。帝国の空を使い切るまで、大量のデータブロックを割り当てなければなりません。

馬さん:すみません、私は中断していますが、なぜ無効なデータブロックを直ちに解放して、空間を空けないですか?

もちろんあります。タイムアウトのメカニズムがあります。タイムアウトしてから3回目の握手がまだ来ていないので、リリースします。しかし、今の問題は敵軍の勢いがすさまじく、先ほどの空間はすぐに占拠されます。」

馬さんのお兄さん:「それは簡単です。タイムアウトの時間を少し小さくして、無効なデータをできるだけ早く釈放してください。」

小Q:「小さすぎると、正常なユーザーはネットのせいで、遅延が大きいので、これは誤傷ではないですか?」

馬さん:うん、これは自分で測って、適当な値を取ってください。今は他の方法がありません。早く生産を回復してください。

安全部長:「Qさん、とりあえずこのようにやってみます。」

小Q:「いいですよ。すぐ行きます。」

小Q:“大人、私はすでに指示通りに実行しましたが、ネット接続がますます多くなりました。この手は長く支持できないかもしれません。やはり早く計画を立てます。”

安全部長:WAF会社です。何か方法がありますか?

WAF会社の黒衣の人:“大人、私達の関心を持つ業務はwebの応用の安全にあって、今回のSYN Flook、実は私などが得意です。”

現場は長い間沈黙していました。

久しぶりに、ファイアウォールが沈黙を破った。「小Qさんは、なぜ初めて握手したSYNのパケットを受け取った後にデータブロックを作らなければならないのですか?データブロックの時間を3回目の握手の後に置くと?」

小Q:「最初にデータブロックの占有空間を確立しなくても、それは確かに大きなトラブルを解決しました。しかし、データブロックを作らないで、クライアントの情報をどうやって保存しますか?」

ファイアウォール:「どんな情報を保存しますか?」

小Q:「クライアントのIP、ポート、シリアルナンバーなどですね。」

ファイアウォール「これらの情報は3回目の握手で来たパケットの中にもありますよ。あらかじめ保存しなくてもいいですよ。」

ファイアウォール:“何か方法がありますか?前もって保存しなくても、検査ができますか?”

小Q:「これはどうしますか?」

防火壁:はい。第二回クライアントに送信されたシーケンス番号は、ランダム値ではなく、クライアント情報と他の情報に基づいて総合的に計算されたハッシュ値であり、第三回の握手を受けたときに、クライアントの応答のACKを取得し、ハッシュ値+1=ACKなどのハッシュ値を再計算すれば、正しいことができます。逆に、間違ったパケットを直接廃棄します。

Qちゃんが帰ってくるのを待っていないので、安全部長は立ち上がって拍手しました。これは本当に素晴らしいアイデアです。Qさん、この方法で、さっさとやりなさい!」

4

うまみにおぼれる

WAF黒衣人は先を争って発言します:“この方式の肝心な点は検証情報の保存をサーバーからクライアントに置いたことにあると感じて、少しウェブ技術の中のCookieに類似します。じゃSYN Cookieと呼びましょう。」

ファイアウォール:「うん、この名前はいいです。きちんとまとめました。」

一時間後、狂ったTCP SYNのデータパックは潮が次第に引いていきました。Linux帝国はやっと以前の静けさを取り戻しました。Qさんは顔を上げてみると、空の果てはもうかすかに明るくなりました。この長い夜はやっと耐えられました。

たまご

「大人、Linux帝国にはファイアウォール、WAFがあります。私たちの攻撃はあまり効果がありません。」

「彼らは本当に自分の腕で勝利したと思いますか?今回は彼らに教訓を与えただけです。私たちのゲームは始まったばかりです。

後のことはどうなりますか?続きの素晴らしさに注目してください。

オリジナルは簡単ではないです。早く転送してもっと多くの人に見せてください。

素晴らしい回顧:

スキャンコードに関心を持って、もっと素晴らしいです。