1. 序章

伝送制御プロトコル(TCP)は、接続されたネットワークを介してファイルまたはメッセージを送信する責任があります。 それは使用しています フラグ 接続の状態を示し、トラブルシューティングのための情報を提供します。 特に、リセットフラグ(RST)はのたびに設定されます。TCP パケット 接続に関するプロトコルの基準に準拠していません。

このチュートリアルでは、RSTフラグの最も一般的な原因について説明します。 ただし、最初に、TCPフラグ全般について説明します。

2. TCPフラグ

TCPフラグは、TCPヘッダーのバイナリビットです。

彼らは伝えます接続の状態であり、トラブルシューティングに役立ちます。 それぞれが、接続の開始と終了、データの伝送など、TCP通信で重要な役割を果たします。 ここでは、6つの重要な制御フラグについて説明します。

SYN フラグ(同期)は、接続を開始するために使用されます。 ACKフラグを設定して、データパケットの安全な受信、および開始/破棄要求を確認します。 RSTフラグは、要求の非接続状態または非準拠状態を示します。 FINフラグは、接続が切断されたことを示します。 ソースとターゲットの両方が、正常な接続終了のためにFINパケットを送信します。

受信者がバッファリングの代わりに送信されたデータをアプリケーションに直接渡すことができる場合は、PSHフラグを設定します。 緊急ポインタ(URG)フラグは、パケットが優先されることを意味します。 一般に、受信者はキューを使用してパケットを処理します。 ただし、アクティブなURGフラグを持つパケットは、キューをエスケープします。 

3. RSTフラグを送信する原因

TCP RSTフラグは、接続をすぐに終了する必要があることを示します。さまざまな原因で発生する可能性があります。ここでは、最も一般的な原因について説明します。 後で、2つの例について説明します。

3.1. 存在しないTCPポート

ほとんどの場合、クライアントが存在しないアドレスへの接続を開始すると、「接続が拒否されました」というエラーが発生します。 このエラーは、TCP接続のターゲットIPアドレスがリッスンしていないことを示しています。 これは、ターゲットポートが存在しない場合、またはアプリケーションがターゲットサーバーで実行されていない場合に発生する可能性があります。

3.2. 接続を中止する

実行中のアプリケーションを中止するとします。 これにより、通信プロセスへの割り込みがトリガーされ、「接続がピアによって閉じられました」というエラーとともにRSTフラグがリモートサーバーに送信されます。

3.3. 非同期接続

クライアント側がアクティブであるが、サーバー側がクライアントの知らないうちに非アクティブであるとしましょう。 これは、伝送制御ブロック(TCB)のデータを消去する物理層での中断が原因である可能性があります。 サーバーが再起動するとします。 以前の接続の履歴が欠落しているため、クライアントの要求に応じてRSTを送信します。

3.4. リスニングエンドポイントキューがいっぱいです

リスニングエンドポイントにキューがあることを認識しています。 到着した接続要求よりも早くキューが解放されていないとします。このような状態では、RSTが新しい接続に送信されます。

3.5. タイムウェイト暗殺

サーバーがクライアントに送信したFIN要求に応答してACKを受信し、クライアントが現在Time-Wait状態になっているとします。 場合によっては、待ち時間が原因で、クライアントはサーバーから古いSEQフラグとACKフラグを受け取ります。 それに応じて、クライアントはACKをサーバーに送信します。 サーバーはすでに閉じられている接続に関する情報を持っていないため、RSTをクライアントに送信します。

3.6. 制限付きローカルIPアドレス

セキュリティ上の理由から、リスニングエンドポイントを*:2106などのローカルアドレスではなく、162.254.206.227:2106としてIPアドレスとして指定したとします。

クライアントが162.254.206.227:2106以外のIPアドレスにリクエストを送信すると、サーバーはRSTをクライアントに送り返します。

3.7. トランジットのファイアウォール

時々、 ファイアウォール クライアントまたはサーバーからの資格情報の不一致が原因でRSTを送信するように構成されています。 ファイアウォールを通過するTCPSYNが既存のファイアウォールセッションと一致する場合、ファイアウォールはRSTフラグを発生させます。 エンドポイントの認識なしにファイアウォールセッションが期限切れになると、エンドポイントはRSTを送信します。  

3.8. TCPバッファオーバーフロー

高速LAN接続とペアになっている低速WANリンクでのTCPアクセラレーションにより、フラグがトリガーされる可能性があります。 このような場合、LANは、エンドポイントが低速のWANを介してドレインするよりも速く、バッファにデータを入力します。

4. リセットシーケンス

RESETシーケンスを説明するために、最初にTCP接続の2つの重要な段階である確立と終了について説明します。

4.1. 接続の確立と切断

3ウェイハンドシェイクは、SYN、SYN + ACK 、およびACKパケットを使用して実現され、新しいTCP接続を確立します。

クライアントがFINを送信し、サーバーがFINで応答すると、3ウェイハンドシェイクによって確立された接続を正常に終了できます。 + ACK。 クライアントは、アクティブなACKフラグで往復します。 したがって、通常のクローズには、TCP接続の各エンドポイントからのFINとACKのペアが必要です。

 

4.2. RSTフラグで接続を閉じる

ただし、接続は、他のにRSTフラグを送信することにより、サーバーまたはクライアントによって突然閉じられる場合があります。

クライアントがサーバーにRSTを送信することを考えてみましょう。 クライアントは、サーバーからの応答でACKを期待していません。また、サーバーがFINを送信する必要もありません。 / 接続を終了するためのACK交換:

一方の端からRSTフラグをトリガーした結果、もう一方の端に通信を突然停止するように要求されます。 その過程で、転送中のパケットは破棄されます。  RSTフラグの受信側は、もう一方の端とのすべての通信を停止する必要があります。 

5. TCPリセット攻撃

ここで、ハッカーがアクティブなRSTフラグを使用して悪意のあるTCPパケットをサーバーに送信するタイプの攻撃について説明します。 これらの攻撃はサーバーの動作を妨害し、分散型サービス拒否(DDoS)を引き起こします。

TCPリセット攻撃は、サーバーがアクティブなRSTを含むTCPセグメントを受信すると、TCP会話を終了させる可能性があります。 例えば:

  1. ハッカーはSYNリクエストをウェブホスティングサーバーに送信します。
  2. サーバーは、各SYN要求に応答してSYN-ACKを送信し、3ウェイハンドシェイクを待ちます。
  3. ハッカーは、TCP RSTを含むスプーフィングされたパケットをTCP接続の一方または両方のエンドポイントに送信し、通信の突然のシャットダウンを引き起こす可能性があります。

視覚的に:

これにより、サーバーはすぐに接続を停止します。

6. 結論

この記事では、TCPパケットのRSTフラグについて説明しました。 RSTフラグが一方の端からもう一方の端に送信され、会話の突然の終了、ハーフオープンTCP接続、および存在しないサーバーが発生するシナリオは複数あります。

悪意のあるハッカーは、TCP RSTフラグを使用して、Webサイトのシャットダウンや、本物のユーザーによるWebサイトへのアクセスの拒否などの大混乱を引き起こすことがよくあります。 TCP接続の継続性と安全性を確保するために、今後のTCPフラグを常に検査する必要があります。