基于ESXI部署防溯源的攻击环境

最近这几年攻防对抗愈演愈烈,攻击队被溯源反制的案例也越来越多。我本身从事应急响应,想站在蓝队的视角,基于ESXI实现一套防溯源的攻击环境,本文的所有操作只需要在ESXI和Openwrt上配置。实现在隔离网段中创建的新机器无需任何配置,开机即用的效果。
需求分析
- 目的: 防溯源, 保证安全性。即便攻击主机被反制,也无法突破隔离网段。
- ESXI 划分隔离网段作攻击段 (10.10.10.1/24)
- 攻击段(10.10.10.1/24) 禁止向生产网(192.168.5.1/24) 访问
- 生产网白名单机器可访问攻击段
- 要求新建机器无感配置,开机即用
- 攻击段流量全部通过代理出网 + Fake DNS
- 能在外网远程通过 zerotier rdp/ssh 到攻击段的机器
- 追求原生且性能
- 定期还原攻击机快照
实现思路
- vSwitch-ISO (虚拟交换机) 上联不绑定任何物理网卡 (完全隔离).
- vSwitch-ISO 下端口组 sword-ISO 分配给攻击机群
- vSwitch-Dev 上联物理网卡
- 端口组 Dev-exit 分配给生产机群
- 端口组 sword-exit 分配给攻击机群出口网关 SwordTower2 (OpenWrt)
- 攻击网段流量出口顺序:
- ESXI [攻击机器(NerworkAdapter: sword-iso) → SwordTower (→ Passwall2) → (sword-exit)] → vmnic0 → Internet
ESXI 虚拟设备配置
创建隔离虚拟交换机
新建一块虚拟交换机: vSwitch-ISO
- 修改如图安全设置, 适配安全环境
- 删除上联物理网卡

- 混杂模式(Promiscuous): 允许虚拟机看到所有流量,对于隔离网段应该拒绝,防止嗅探其他VM的流量。
- MAC address changes (MAC地址更改): 某些虚拟机可能需要更改 MAC 地址 (如运行嵌套虚拟化或某些安全工具)
- Forged transmits(伪造传输): 允许虚拟机发送源MAC地址与其配置MAC不同的帧
创建隔离网段端口组
- 为刚新建的 vSwitch-ISO 创建端口组: sword-ISO
- vlan: 0
- 安全策略继承交换机
- 从 dev 出网交换机 vSwitch-Dev 创建端口组: sword-exit
- vlan: 0
- 安全策略继承交换机

配置攻击网段中的OpenWrt
为保证安全性,本文选用Openwrt官方原生镜像,手动安装所需的插件。避免第三方Openwrt带来的不确定性安全问题。
Openwrt配置上网
为openwrt配置上网。暂时配一下. DHCP 或者静态配置,编辑 /etc/config/network。
config interface 'lan' option device 'eth0' option proto 'static' option ipaddr '192.168.3.209' option netmask '255.255.255.0' option gateway '192.168.3.1' option dns '8.8.8.8'
(可选步骤) 配置代理, 前提局域网中有一台可直接使用代理服务器。
export http_proxy="http://192.168.5.199:7893" export https_proxy="http://192.168.5.199:7893" export ftp_proxy="http://192.168.5.199:7893" export all_proxy="socks5://192.168.5.199:7893"
安装依赖
基本功能包
opkg update opkg install opkg update && opkg install bash ca-bundle curl wget-ssl openssh-sftp-server htop nano vim unzip tar gzip bzip2 xz-utils coreutils coreutils-base64 diffutils file findutils grep sed gawk less lsof tcpdump ip-full ethtool rsync tmux screen block-mount e2fsprogs f2fsck mkf2fs fdisk parted lsblk blkid resize2fs dosfstools kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat dnsmasq-full firewall4 iptables-nft kmod-nft-tproxy kmod-nft-socket kmod-nft-nat kmod-tcp-bbr kmod-lib-zstd ds-lite ppp ppp-mod-pppoe bridge-utils netstat-nat luci luci-base luci-compat luci-app-firewall luci-app-package-manager luci-app-upnp luci-app-log-viewer luci-app-filemanager luci-lib-fs luci-lib-ipkg luci-proto-wireguard kmod-usb3 zram-swap
主题 (美观, UI 方便交互)
opkg install luci-compat opkg install luci-lib-ipkg wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.2/luci-theme-argon_2.3.2-r20250207_all.ipk opkg install luci-theme-argon*.ipk

部署 passwall2
对有一定用户基数的 op 透明代理插件搜集和研究后, 决定使用 passwall2 作为本文情景下的选项
- 几乎所有主流协议
- 高效, 速率, 稳定, 资源占用低, 支持透明代理
- 对于高并发扫描等场景适配性好
passwall2 相关依赖在前文已经安装。特别注意 passwall2 需要 dnsmasq-full
, 而 op 默认安装 dnsmasq
若后续查看到日志相关报错, 执行 opkg install dnsmasq-full --force-overwrite
# 启用服务 /etc/init.d/passwall2 enable # 启动服务 /etc/init.d/passwall2 start # 重启 uhttpd 以刷新 LuCI /etc/init.d/uhttpd restart
配置 passwall2
添加订阅地址,也就是机场的节点,作为攻击主机的出口ip。
- [Services] → [Passwall 2] → [Node Subscribe]
- 添加订阅链接后手动更新
- 现在能看到 [Node List] 中显示节点并自动进行 TCP Ping 存活验证

Other Settings, 设置透明代理和劫持
- [Passwall 2] → [Other Settings]
- 如图设置
- 配置透明代理
- 配置 ping 劫持
- 更换 iptables 为 nftables (支持新 features 且性能更高)
- 配置透明代理

注意:即使节点不支持 ipv6 也勾选. 防止 ip 泄露!
勾选开关, 开启 passwall2
- [Services] → [Passwall2] → [Basic Settings]

测试时发现 Localhost Proxy 勾选上后无法正常获取订阅, 后续也没有 OP 需要代理上网的场景; 故直接将选项取消了。
默认规则是 [Xray_shunt: 分流总节点], 当前场景下仅需要代理全流量. 可以直接选择单个节点作为出口
DNS防泄漏
- [Passwall 2] → [Other Settings]
- 作用:
- op 作为攻击机的 DNSServer
- 对 FakeDNS 进行设置, 防止外泄记录

Interface 配置
- [Network] → [Interface] → [Interface]
- [General Settings] 中配置基本设置
- 确保 [DHCP Server] 中, “Ignore interface” 取消勾选
- 令其成为攻击机群 DHCP 服务器
- 确保 [DHCP Server] 中, “Ignore interface” 取消勾选


Firewall 配置
- [Network] → [Firewall]
General Settings
配置如图:

Traffic Rules
这里完成黑白名单等规则配置 为了方便区分, 用户自行添加规则前缀命名为 Gandalf
。按照顺序进行添加 最先添加的规则将被排列到最后。
Gandalf-DenyIN-ISO
: 阻止攻击网段通联生产段 + 阻止一般生产网段访问攻击网段

Gandalf-AllowIN-ISO
: 白名单; 允许生产网白名单机器 (图例: 192.168.5.99) 访问攻击网

Gandalf-AllowSSH-Tower
: 生产段白名单机器可访问攻击段 OP

Gandalf-DenyIn-ISO_22
& Gandalf-DenyIn-ISO_80
: 黑名单, 禁止攻击段访问攻击段 OP 的 80 和 22
落地生产环境建议白名单做最小化开放, 让攻击段仅能访问 OP dns 等服务端口。

端口转发
这一步实现远程通过 zerotier → mstsc/ssh 连接到攻击机 远程机器 → 攻击段 OP [端口转发] → VM-ATT

到这一步所有功能实现完成。
快照创建和还原
为尽可能保证攻击主机的环境干净,最好的做法就是部署完成后先做一次快照。每次项目结束后还原一次快照,确保攻击主机上没有任何遗留内容。

镜像部署完成,所有常用的攻击环境部署好之后就可以创建初始快照。

每次项目结束或者不同项目中使用快照生成独立的实例,确保每个项目完全独立。

测试防溯源效果
网段中添加新的虚拟机
按照需求, 新机器是不需要进行网络配置的. 通过 DHCP 通告获取网络信息, 并且网关指向攻击段 OP 代理出网。但是在 ESXI 里面创建机器时, 需要选择网络适配器为: sword-ISO

所有的配置只需要在ESXI上完成即可。
出口ip测试

PING & DNSLog
先起两个 tcpdump 分别监听 攻击段 OP 的 eth0 和 eth1。
# 第一个终端 tcpdump -i eth0 -n icmp

# 第二个终端 tcpdump -i eth1 -n icmp

(OP 的 eth0 绑定出网网卡, eth1 lan 区域. 而当 VM-ATT 发起对 dnslog 请求, 返回的是 FakeDns, 同时 dnslog 无记录, eth1 卡上无流量, 达成目的)。
- 198.18.x.x 是 FakeDNS 的假 IP 地址
- eth0 (WAN) 没有流量 = 没有泄露到真实互联网
- DNSLog 无接收数据
- eth1 (LAN) 有流量 = 仅在本地网络内
10.10.10.x > 198.18.25.x: ICMP echo request 198.18.25.x > 10.10.10.x: ICMP echo reply

直接在物理机 ping dnslog 可以得到回显。
webrtc泄露测试

总结
基于ESXI来部署攻击环境适合整个攻击队team一起使用,不再需要每个人单独在自己个人设备上做任何操作。环境搭建好之后只需要在ESXI上创建或者还原虚拟机即可,无需其他额外配置即可做到防溯源的效果。
赞赏微信赞赏
支付宝赞赏
发表评论