DNS 使用 UDP 53 埠。查詢/回應靠 16-bit ID 欄位配對。客戶端發送查詢 (ID=x) → 伺服器回應 (ID=x) → 客戶端比對 ID 相符才接受。
攻擊條件:偽造 DNS 回應封包,ID 與查詢相符,**且比合法伺服器回應更早到達客戶端**。客戶端快取即被汙染,導向攻擊者指定 Web 伺服器。
typedef struct {
unsigned short id; // 識別碼
unsigned short flags; // QR, Opcode, AA, TC, RD, RA, Z, RCODE
unsigned short quests; // 問題數
unsigned short answers; // 資源記錄數
unsigned short author; // 授權記錄數
unsigned short addition; // 額外記錄數
} DNS;
typedef struct { unsigned char *name; unsigned short type; unsigned short class; } QUERY;
typedef struct { unsigned short name; unsigned short type; unsigned short class; unsigned int ttl; unsigned short len; unsigned int addr; } RESPONSE;
ID、查詢域名。ID、QR=1、RCODE=0、答案區填入攻擊者控制的 Web 伺服器 IP。PacketOpenAdapter 開啟網卡PacketSetHwFilter 設定混雜模式PacketReceivePacket 接收封包SendARP / GetAdaptersInfo 取得目標 MACPacketSendPacket 發送偽造 ARP/DNS 封包CreateThread 分別跑嗅探與 ARP 持續欺騙,WaitForMultipleObjects 等待結束。ipconfig /flushdns)。局域網共享介質本質決定了 ARP/DNS 欺騙易發。加密 (DNSSEC/DNSCrypt)、交換器 Port Security、DHCP Snooping、動態 ARP 檢測 (DAI) 為根治之道。