私がこの状況にあり、デバイスMで正常にMITMを実行するために、ローカルネットワーク上の2つのデバイス(たとえばAとB)のARPキャッシュに感染するプログラムを書いているとします。プログラムはMデバイスで実行されます。デバイスMでコマンドを使用してIP転送を有効にすると、sysctl net.ipv4.ip_forward=1
デバイスAからBへのHTTP接続が問題なく確立され、デバイスMからのトラフィックが表示されます。
ただし、同じ状況でデバイスMでコマンドを使用してIP転送を無効にした後、ARPキャッシュが破損してsysctl net.ipv4.ip_forward=0
デバイスAからBへのHTTP接続を確立できません。デバイスMでは、デバイスAのTCP SYNパケットを見ることができます。私のプログラムでは、デバイスMからSYNパケットを受信し、パケットのsrc MACアドレスをMのMACアドレス(AのMACアドレス)に変更し、dst MACアドレスをBのMACアドレス(MのMACアドレス)に変更します。ネットワークに注入します。私はネットワーク層から何も修正しません。 TCPdump コマンドを使用して、B 内のパケットに新しい src および dst MAC があることを確認できます。これは、パケットがBに到着したことを意味します。しかし、Bはパケットに応答せず、その理由を理解できません。
もしそうなら、問題はip_forward=1
このMITMの状況に特別なものがあるかということです。明確に言えば、すべてのマシンはLinuxです。デバイスMで転送を有効にした後は、パケットのMACアドレスを変更する必要はありません。ちょうどキャッシュを中毒し、そこからすべてがうまくいきました。
ベストアンサー1
Mのコアは、宛先IPアドレスがパケットがMのためではないことを示すパケットを受信します。それは何をしますか?
当時ip_forward=0
は「これがなぜ私に送られたのか分からないし、気にしない。ゴミ箱に捨てられるぞ!」
vs ip_forward=1
、「まあ、それは私がすることではありません。しかし、受信者がどこにいるのかを知っているので、正しいMACアドレスに送り返します」
つまりip_forward=1
、あなたカーネルは自動的にMACアドレスを変更するので、MACアドレスを変更する必要はありません。