简介
本文档介绍如何使用TCP重播来重放数据包捕获工具保存的PCAP文件中的网络流量。
拓扑
必备条件
- 具有Kali Linux和两个NIC的VM
- FTD(最好由FMC管理)
- Linux运行命令的知识。
背景信息
TCP重播是一个用于重放数据包捕获工具(如wireshark或TCPdump)保存的pcap文件中的网络流量的工具。在需要复制流量以测试网络设备上的结果的情况下,它可能会非常有用。
TCP重播的基本操作是以记录数据包的速度或指定的数据速率重新发送来自输入文件的所有数据包,其速度最高可达硬件所能支持的速度。
执行此过程还有其他方法,但本文的目的是实现TCP重放,而不需要中间路由器。
实现
FTD配置:
1.使用数据包捕获上同一网段上的IP配置内部/外部接口:
- 源:172.16.211.177
- 目的地:192.168.73.97
FMC > Devices > Device Management > Interfaces > Edit each interface
提示:最佳做法是将每个接口分配到不同的VLAN中,以保持流量隔离。
Running-config(示例)
interface Ethernet1/1
nameif Outside
ip address 192.168.73.34 255.255.255.0
!
interface Ethernet1/2
nameif Inside
security-level 0
ip address 172.16.211.34 255.255.255.0
2.配置从主机到其网关的静态路由和伪造ARP条目,因为这些网关不存在。
FMC > Devices > Device Management > Routes > Select your FTD > Routing > Static Route > Add Route
Running-config(示例)
route Inside 172.16.211.177 172.16.211.100 1
route Outside 192.168.73.97 192.168.73.100 1
使用LinaConfigTool后门配置虚假ARP条目:
- 登录FTD CLI
- 转到专家模式
- 提升您的权限(sudo su)
LinaConfigTool配置示例
/usr/local/sf/bin/LinaConfigTool "arp Inside 172.16.211.100 dead.deed.deed"
/usr/local/sf/bin/LinaConfigTool "arp Outside 192.168.73.100 dead.deed.deed"
/usr/local/sf/bin/LinaConfigTool "write mem"
3.禁用“等于”序列号随机化。
- 创建扩展访问列表:
Go to FMC > Objects > Access List > Extended > Add Extended Access List
- 使用参数“allow any”创建ACL
- 禁用序列号随机化:
Go to FMC > Policies > Access Control > Select your ACP > Advanced > Threat Defense Service Policy
- 添加规则并选择
Global
- 选择您之前创建的
Extended ACL
- 取消选中
Randomize TCP Sequence Number
running-config
policy-map global_policy
class class-default
set connection random-sequence-number disable
Linux配置:
- 为每个接口配置IP(这取决于接口属于内部子网和外部子网)
- ifconfig ethX <ip_address> netmask <mask>
- 示例:ifconfig eth1 172.16.211.35 netmask 255.255.255.0
- (可选)将每个接口配置为不同的VLAN
- 将PCAP文件传输到Kali Linux服务器(您可以通过tcpdump获取pcap文件,在FTD上进行捕获等)
- 使用tcpprep创建TCP重播缓存文件
- tcpprep -i input_file -o input_cache -c server_ip/32
- 示例:tcpprep -i stream.pcap -o stream.cache -c 192.168.73.97/32
- 使用tcprewrite重写MAC地址
- tcprewrite -i input_file -o output_file -c input_cache -C —enet-dmac=<ftd_server_interface_mac>,<ftd_client_interface_mac>
- 示例:tcprewrite -i stream.pcap -o stream.pcap.replay -c stream.cache -C —enet-dmac=00:50:56:b3:81:35,00:50:56:b3:63:f4
- 将NIC连接到ASA/FTD
- 使用tcpreplay重播该流
- tcpreplay -c input_cache -i <nic_server_interface> -I <nic_client_interface> output_file
- 示例:tcpreplay -c stream.cache -i eth2 -I eth1 stream.pcap.replay
验证
在FTD上创建数据包捕获,以测试数据包是否到达您的接口:
- 在内部接口上创建数据包捕获
- cap i interface Inside trace match ip any any
- 在外部接口上创建数据包捕获
- cap o interface Outside trace match ip any any
运行tcpreplay并验证数据包是否到达您的接口:
示例 情景
firepower# show cap
capture i type raw-data trace interface Inside interface Outside [Capturing - 13106 bytes]
match ip any any
capture o type raw-data trace interface Outside [Capturing - 11348 bytes]
match ip any any
firepower# show cap i
47 packets captured
1: 00:03:53.657299 172.16.211.177.23725 > 192.168.73.97.443: S 1610809777:1610809777(0) win 8192
2: 00:03:53.657406 172.16.211.177.23726 > 192.168.73.97.443: S 3584167858:3584167858(0) win 8192
3: 00:03:53.803623 192.168.73.97.443 > 172.16.211.177.23726: S 2938484797:2938484797(0) ack 3584167859 win 64240
4: 00:03:53.803806 172.16.211.177.23726 > 192.168.73.97.443: . ack 2938484798 win 258
5: 00:03:53.804172 172.16.211.177.23726 > 192.168.73.97.443: P 3584167859:3584168376(517) ack 2938484798 win 258
firepower# show cap o
29 packets captured
1: 00:03:53.803638 192.168.73.97.443 > 172.16.211.177.23726: S 2938484797:2938484797(0) ack 3584167859 win 64240
2: 00:03:53.808078 192.168.73.97.443 > 172.16.211.177.23725: S 1639088682:1639088682(0) ack 1610809778 win 64240
3: 00:03:53.951717 192.168.73.97.443 > 172.16.211.177.23726: . ack 3584168376 win 501
4: 00:03:53.955776 192.168.73.97.443 > 172.16.211.177.23726: . 2938484798:2938486178(1380) ack 3584168376 win 501
5: 00:03:53.955806 192.168.73.97.443 > 172.16.211.177.23726: P 2938486178:2938487558(1380) ack 3584168376 win 501