我有一个恶意软件分析环境,将拦截使用InetSim任意域和互联网服务的stream量。 我有一个沙箱,其DNS服务器设置为InetSim实例,InetSim将使用自己的IP地址回答任何DNS查询。
这种设置适用于调用域名的恶意软件,但是如果它试图直接连接硬编码的IP地址,我的恶意软件环境就会错过它。 我试图使用iptables将任何出站stream量redirect回到同一子网上的InetSim实例,但数据包似乎在网关机器上的某处丢失。
networking上有三台机器
我通常遵循netfilter NAT文档中概述的指南,而我的iptables规则是这样的。 基本上规则是,
iptable规则
$ sudo iptables -v -t nat -L Chain PREROUTING (policy ACCEPT 17465 packets, 1818K bytes) pkts bytes target prot opt in out source destination 24 1763 LOG all -- vboxnet0 any anywhere !192.168.54.0/24 LOG level debug prefix "[PREROUTE OUTBOUND]" 41 2824 DNAT all -- vboxnet0 any anywhere !192.168.54.0/24 to:192.168.54.2 Chain INPUT (policy ACCEPT 14623 packets, 1341K bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 74 packets, 4809 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 73 packets, 4749 bytes) pkts bytes target prot opt in out source destination 17 984 LOG all -- any any 192.168.54.0/24 192.168.54.2 LOG level debug prefix "[POSTROUTE Inetsim]" 41 2513 SNAT all -- any any 192.168.54.0/24 192.168.54.2 to:192.168.54.1
从数据包中可以看出,这些规则正在赶上stream量。 奇怪的是,当我在网关机器和InetSim机器上运行tcpdump的时候,我看到网关捕获的重写数据包,但是没有从InetSim机器捕获的数据包。
网关捕获
15:11:28.747298 ARP, Request who-has 192.168.54.1 tell 192.168.54.102, length 46 15:11:28.747305 ARP, Reply 192.168.54.1 is-at 0a:00:27:00:00:00, length 28 15:11:28.747471 IP 192.168.54.102.1041 > 2.3.4.5.80: Flags [S], seq 2061217349, win 65535, options [mss 1460,nop,nop,sackOK], length 0 15:11:28.747513 IP 192.168.54.1.1041 > 192.168.54.2.80: Flags [S], seq 2061217349, win 65535, options [mss 1460,nop,nop,sackOK], length 0 ...SYN Repeated 2 more times... 15:11:33.748132 ARP, Request who-has 192.168.54.2 tell 192.168.54.1, length 28 15:11:33.748483 ARP, Reply 192.168.54.2 is-at 08:00:27:c7:4f:7c, length 28
InetSim Capture
10:11:28.649243 ARP, Request who-has 192.168.54.1 tell 192.168.54.102, length 46 10:11:28.649253 ARP, Reply 192.168.54.1 is-at 0a:00:27:00:00:00, length 46 10:11:28.649363 IP 192.168.54.102.1041 > 2.3.4.5.80: Flags [S], seq 2061217349, win 65535, options [mss 1460,nop,nop,sackOK], length 0 ...SYN Repeated 2 more times... 10:11:33.650248 ARP, Request who-has 192.168.54.2 tell 192.168.54.1, length 46 10:11:33.650266 ARP, Reply 192.168.54.2 is-at 08:00:27:c7:4f:7c, length 28
我启用了跟踪,这些是/var/log/syslog中的条目:
kernel: [22504.635493] TRACE: raw:PREROUTING:policy:2 IN=vboxnet0 OUT= MAC=0a:00:27:00:00:00:08:00:27:0b:26:95:08:00 SRC=192.168.54.102 DST=2.3.4.5 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402) kernel: [22504.635504] TRACE: nat:PREROUTING:rule:1 IN=vboxnet0 OUT= MAC=0a:00:27:00:00:00:08:00:27:0b:26:95:08:00 SRC=192.168.54.102 DST=2.3.4.5 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402) kernel: [22504.635508] [PREROUTE OUTBOUND]IN=vboxnet0 OUT= MAC=0a:00:27:00:00:00:08:00:27:0b:26:95:08:00 SRC=192.168.54.102 DST=2.3.4.5 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=141 DF PROTO=TCP SPT=1046 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 kernel: [22504.635512] TRACE: nat:PREROUTING:rule:2 IN=vboxnet0 OUT= MAC=0a:00:27:00:00:00:08:00:27:0b:26:95:08:00 SRC=192.168.54.102 DST=2.3.4.5 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402) kernel: [22504.635532] TRACE: filter:FORWARD:policy:1 IN=vboxnet0 OUT=vboxnet0 MAC=0a:00:27:00:00:00:08:00:27:0b:26:95:08:00 SRC=192.168.54.102 DST=192.168.54.2 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402) kernel: [22504.635536] TRACE: nat:POSTROUTING:rule:1 IN= OUT=vboxnet0 SRC=192.168.54.102 DST=192.168.54.2 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402) kernel: [22504.635538] [POSTROUTE Inetsim]IN= OUT=vboxnet0 SRC=192.168.54.102 DST=192.168.54.2 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=141 DF PROTO=TCP SPT=1046 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 kernel: [22504.635541] TRACE: nat:POSTROUTING:rule:2 IN= OUT=vboxnet0 SRC=192.168.54.102 DST=192.168.54.2 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=141 DF PROTO=TCP SPT=1046 DPT=80 SEQ=3347741723 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B401010402)
所有其他stream量和连接按预期工作,但网关中发生了一些事情。 是的,ip_forward已启用。 我知道tcpdump位于路由过程的中间,并不一定捕捉到networking上的内容,所以看起来好像数据包在PREROUTING和POSTROUTING表之间的某处丢失。 任何帮助将不胜感激。
要解决您的设置,请将其拆下并分别testing每个部分。
我有一个防火墙服务器(10.3.1.5),所以我添加到1.2.3.4的数据包的命令到一个内部框10.3.1.140(mil102):
iptables -t nat -A PREROUTING -i eth0 -d 1.2.3.4 -j LOG iptables -t nat -A PREROUTING -i eth0 -d 1.2.3.4 -j DNAT --to 10.3.1.140
这应该是你的起点相同,现在从内部机器10.3.1.129(HP)我可以ping 1.2.3.4。 防火墙上的日志显示数据包:
Feb 3 15:42:54 firewall kernel: [7052380.506166] IN=eth0 OUT= MAC=00:0c:29:64:b1:4a:00:22:64:f7:b4:b8:08:00 SRC=10.3.1.129 DST=1.2.3.4 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27456 DF PROTO=ICMP TYPE=8 CODE=0 ID=922 SEQ=1
使用tcpdump来显示ICMP数据包(tcpdump'icmp [icmptype] = icmp-echo或icmp [icmptype] = icmp-echoreply')我在mil102(10.3.1.140)上看到数据包:
16:42:55.161125 IP hp > mil102: ICMP echo request, id 922, seq 1, length 64 16:42:55.161185 IP mil102 > hp: ICMP echo reply, id 922, seq 1, length 64
您应该能够在nat表中使用PREROUTING行来获得这一点 – 在尝试POSTROUTING规则之前validation它正在工作。
然后我添加了POSTROUTING规则:
iptables -t nat -I POSTROUTING 1 -d 10.3.1.140 -s 10.3.1.0/24 -j LOG iptables -t nat -I POSTROUTING 2 -d 10.3.1.140 -s 10.3.1.0/24 -j SNAT --to 10.3.1.5
它将本地networking中的数据包更改为10.3.1.140(mil102),看起来好像它们来自10.3.1.5(防火墙)。
日志文件现在显示ping通过:
Feb 3 15:40:33 firewall kernel: [7052239.848022] IN=eth0 OUT= MAC=00:0c:29:64:b1:4a:00:22:64:f7:b4:b8:08:00 SRC=10.3.1.129 DST=1.2.3.4 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21950 DF PROTO=ICMP TYPE=8 CODE=0 ID=32310 SEQ=1 Feb 3 15:40:33 firewall kernel: [7052239.848081] IN= OUT=eth0 SRC=10.3.1.129 DST=10.3.1.140 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21950 DF PROTO=ICMP TYPE=8 CODE=0 ID=32310 SEQ=1
我的目标机器mil102(10.3.1.140)现在显示ping是防火墙(10.3.1.5)的来源:
16:40:35.639037 IP firewall > mil102: ICMP echo request, id 32310, seq 2, length 64 16:40:35.639110 IP mil102 > firewall: ICMP echo reply, id 32310, seq 2, length 64
有关我的设置的一些注意事项 – eth0是防火墙的内部接口,eth1是外部接口。 hp和mil102只有一个接口eth0。
我现有的NAT表有一些路由到 – 这就是为什么我使用插入命令。 这就是我原来的nat表的样子:
Chain PREROUTING (policy ACCEPT 37 packets, 2362 bytes) pkts bytes target prot opt in out source destination 1444 73980 DNAT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 to:10.3.1.129:81 Chain INPUT (policy ACCEPT 18 packets, 1222 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 6 packets, 420 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 5 420 ACCEPT all -- * eth1 0.0.0.0/0 172.20.20.0/24 116M 7439M MASQUERADE all -- * eth1 0.0.0.0/0 0.0.0.0/0
请忽略日志上的时间戳 – 在我testing了所有内容后,我收集了示例的数据。
如果这不起作用,最好的build议是简化设置,直到达到预期的工作状态,然后增加复杂性,直到您破坏或达到目标。
这里的问题似乎与VirtualBox如何模拟networking接口和/或networking堆栈有关。 我能够站起来另一个VBox来宾,configuration为专用网关,使用相同的iptables规则,并能够成功地redirectstream量到任意IP到本地InetSim实例。