1

TCP リクエストを偽装し、データを収集してローカル バッファに格納するプログラムを作成しています。このために、クライアントに接続されたシステムで、ルーティングの前にすべての着信パケットをキューに保持するように iptables を構成しました。次に、netfilter ライブラリを使用して、キューからパケットを読み取ります。この後、RAW ソケットを使用して、偽の TCP パケットをクライアントに送信します。これにより、クライアントからの SYN 要求に応答して SYN/ACK パケットを偽造することができます。

しかし、着信データに応答してクライアントに ACK を偽造しようとすると問題が発生します。この場合、送信元の実際の IP がパケットに含まれており、偽の IP ではありません。以下の ">>>" でマークされた 7 番目のトレースを参照してください。このソース IP は 192.168.10.10 として示されていますが、212.58.246.81 である必要があります。4 番目のトレース (つまり、SYN/ACK パケット) では、問題なく表示されます。

3  0.073852000  192.168.10.100  212.58.246.81  TCP  38307 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=502233100 TSER=0 WS=6
4  0.103102000  212.58.246.81  192.168.10.100  TCP  http > 38307 [SYN, ACK] Seq=0 Ack=1 Win=31744 Len=0
5  0.103147000  192.168.10.100  212.58.246.81  TCP  38307 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0
6  0.103349000  192.168.10.100  212.58.246.81  HTTP  GET /go/rss/int/news/-/sport2/hi/tennis/9519762.stm HTTP/1.1
>>> 7  1.118729000  192.168.10.10  192.168.10.100  TCP  http > 38307 [ACK] Seq=1 Ack=1 Win=31744 Len=0
8  1.118788000  192.168.10.100  192.168.10.10  TCP  38307 > http [RST] Seq=1 Win=0 Len=0
9  3.102627000  192.168.10.100  212.58.246.81  HTTP  [TCP Retransmission] GET /go/rss/int/news/-/sport2/hi/tennis/9519762.stm HTTP/1.1
10  3.148590000  192.168.10.10  192.168.10.100  TCP  [TCP Dup ACK 7#1] http > 38307 [ACK] Seq=1 Ack=1 Win=31744 Len=0
11  3.148606000  192.168.10.100  192.168.10.10  TCP  38307 > http [RST] Seq=1 Win=0 Len=0

また、偽のTCP ACKを送信するために、以下のような「sendip」コマンドを試しました

sendip -p ipv4 -p tcp -is 212.58.246.81 -id 192.168.10.100 -ts 80 -td 4567 -tfa 1 -tfs 0 -d "Data" 192.168.10.100

ここで、tfa と tfs はそれぞれ ack フラグと syn フラグを表します。これも期待どおりに機能せず、212.58.246.81 ではなく 192.168.10.10 から発信されたものとして表示されます。しかし、両方のフラグ (syn と ack) を 1 に設定すると、正常に動作します。

OSはUbuntuです。誰でも私が間違っているところを教えてください。どうもありがとうございました。

4

0 に答える 0