無理やりサーバの応答を偽装する

とても無理矢理にサーバの応答を偽装してみます。...もはや偽装とは言えないかもしれません。かもしれませんが、偽装は悪いことです。

概要

今回は iptables と Scapy を使用して無理やり応答を偽装しました。構成的には下の画像のような感じです。

f:id:ryouta768:20140604012417p:plain

サーバ側(Webサーバを想定)では iptables を使用して80番ポートを宛先とするTCPパケットをドロップするように設定します。同時に、Scapy を使用して、パケットをキャプチャし、そのキャプチャしたパケットに対して偽の応答パケットを作成し、クライアントに送信します。

iptables でパケットをドロップしているはずなのに、なぜ Scapy ではパケットをキャプチャ出来るのでしょうか。この疑問については次回調査してみたいと思います。(ヒントはこの辺にある気がしています)

Scapy のコード

今回はじめて Scapy を使用したのですが、とても使いやすかったです。そしてコードは汚いです。。

クライアントから送信される、"PUSH+ACK"のフラグが立っているTCPパケットに対して、偽のhtmlコンテンツを送信しています。

通常は、このような HTML が返ってくるものが、

f:id:ryouta768:20140604012420p:plain

以下のような偽の応答を返すようになります。

f:id:ryouta768:20140604012418p:plain

パケットキャプチャ

f:id:ryouta768:20140604012421p:plain

コネクションを確立し、HTTPでやりとりされているのがわかります。