Tcpreplay是网络安全中一种常用的工具,对于其报文重放的功能大家都非常清楚,但是对于其能够在重放过程中改写报文的内容的功能应用却不是很多,如果能够熟练的应用Tcpreplay的报文改写功能就有可能使攻击者安全的规避的防火墙的检测手段。针对目前很多防火墙产品并不检测报文的载荷,只是根据规则来阻止某个协议字段来达到防范的目的,这样通过Tcprepaly就可以改写敏感的报文字段,使其安全的通过防火墙的检测。
重写二层头
从Client端发送攻击流量到Server端,如果在Firewall上配置了策略,阻止了Client的MAC地址,Client端可以通过Tcprepaly将攻击报文的源MAC地址重写。具体使用如下:
./tcpreplay -i eth0 -k 00:02:02:03:04:05 /tmp/1.pcap
参数-i用来指定发送的Primary接口,-k用来指定重写源MAC地址。通过-k指定一个Firewall的可信MAC地址,攻击流量就有可能瞒天过海。如果Firewall工作在transparent模式下,那么我们的攻击流量需要重放,目的MAC则需要改为Server的MAC,我们则可以通过命令行
./tcpreplay -i eth0 -I 00:01:02:03:04 -k 00:02:02:03:02:07 /tmp/1.pcap
亦即通过添加参数-I来重写通过Primary端口流量的目的MAC。如果我们需要在Client的多个端口上将攻击流量重放,那么我们则可以通过添加参数-j来指定Secondary接口,通过参数-J来重写Secondary接口流量的目的MAC,通过参数-K来重写Secondary端口的源MAC,具体应用如下:
./tcpreplay -j eth1 -J 00:01:02:03:04 -K 00:02:02:03:02:07 /tmp/1.pcap
同样,我们也可以综合运用以上各个参数将同一个攻击报文在Client的不同端口上以不同的目的MAC和源MAC发送,这样乱拳出击,可以充分考验Firewall的应用,具体使用如下:
./tcpreplay -i eth0 -I 00:01:01:02:02:03 -k 00:02:02:04:04:05 -j eth1 -J 00:01:02:03:04 -K 00:02:02:03:02:07 /tmp/1.pcap
重写三层头
仍旧以上面的TOPO为例,如果Firewall上配置了策略阻止了特定的IP地址,Client端就可以通过Tcpreplay来重写攻击报文的源与目的IP,以此来规避Firewall的规则,达到其攻击的效果。具体的应用如下:
./tcpreplay -e 1.1.1.1:2.2.2.2 -i eth1 /tmp/2.pcap
通过参数-e来具体的指定攻击报文的源、目的IP,以此来修改成Firewall能够允许通过的IP地址以此来达到攻击的目的。这在修改三层头中是最常用的一种方式。如果你获得了一个pcap报文,你想把它重放给某人同时又不愿意暴露自己的IP地址,那么可以利用参数-s来随机的选用IP地址,具体使用如下:
./tcpreplay -s 11 -i eth1 /tmp/2.pcap
其中参数-s决定了你随机选用的IP地址,不同的seed值会导致不用的pcap报文的IP地址。Tcprepaly在再深一点的应用是可以把报文的IP地址进行映射,类似于NAT的应用,可以将攻击报文的IP地址映射到不用的网段,具体应用如下:
./tcpreplay -N 10.0.0.0/8:11.0.0.0/8 -i eth1 /tmp/2.pcap
其中参数-N来指定需要映射的网段。
重写四层头
Tcprepaly可以修改二、三层头来修改传输层面的信息,同样也可以修改四层头来修改session层面的信息,例如我们可以修改运行在8080端口上的HTTP的流量使其运行在80端口上,具体应用如下:
./tcpreplay -4 80:8080 -i eth1 /tmp/2.pcap
我们通过参数-4来重新映射需要重放的报文的端口号。在修改报文头的过程中面临一个checksum的问题,因为许多网卡支持TCP/UDP/IP checksun的offloading,所以如果我们捕获的流量是同一个系统产生的,则checksum就会是错误的,这在以后的重放中就会产生问题,所以我们需要通过参数-F来固定checksum,在重放的过程中编辑报文时不会改变checksum的值。具体应用如下:
./tcpreplay -4 80:8080 -i eth1 -F /tmp/2.pcap
参数-F来固定checksum。
小结
灵活的运用tcpreplay的重写功能,相信会在网络的攻防检测给大家带来很大的帮助。