如何构建完美的Dropbox(下) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

如何构建完美的Dropbox(下)

luochicun 技术 2020-10-26 09:51:48
收藏

导语:本文我们将介绍自动化攻击方案、网络访问控制、网络命名空间等可能的攻击手段。

接上文

自动化攻击方案

这还可以自动区分上面提到的两种场景,通过监控 /sys/class/net/lan/carrier和/sys/class/net/wan/carrier,我们可以检测LAN和WAN接口是否有一个或两个连接。如果你希望自动化网络配置,一个选项是监控这些文件,如果LAN接口是活动的,则假定这是一个处于中间位置的人的场景,而如果LAN接口没有载体,则继续执行“未使用的端口”场景。如下所示:

while [ `cat /sys/class/net/wan/carrier` == 0 ] ; do 
    sleep 1
done
if [ `cat /sys/class/net/lan/carrier` == 0 ] ; then
    # execute "unused port" scenario
else
    # execute Person in the Middle scenario
fi

这样,你就可以继续选择一个IP地址,或者使用DHCP请求一个IP地址。请注意,由于请求的字段不同,或者发送到服务器的填充字段不同,有时可能会区分Windows和Linux DHCP客户机。花一些时间监控和微调你自己的DHCP请求可能是值得的,然后开始探索你连接的网络。

2.7.png

Windows 10 DHCP请求(左)和Kali Linux(右)之间的区别

关于网络访问控制

你可能在会议室中发现了一个未使用的网络端口,但是很可能会受到网络访问控制(NAC)检查。从802.1x到连接新设备上的服务以检查诸如防病毒配置等服务的网络服务器,它们的形式多种多样。如果新设备无法通过检查,则交换机端口将禁用或配置为受限VLAN,而无法访问真正有趣的系统,真令人失望!

解决此类控件的一种简单方法是对现有设备执行中间人攻击,这可能是PC,打印机,甚至是IP电话。在许多情况下,打印机等设备无法执行802.1x身份验证,因此在该特定网络端口上将其禁用。在其他情况下,设备具有在网络上的必要授权,因此,网络端口已分配给正确的VLAN。中间设备的人需要做的就是确保它发送的任何流量看起来都和受害者的一样,这样开关就不会检测到任何不正常的东西。如果在一个端口上检测到不止一个MAC地址,那么可以配置许多交换机关闭一个端口,这是你真的不希望发生的事情!

为此,我在阅读了这篇文章后,创建了一个简单的shell脚本,该脚本设置了适当的iptables规则以使任何来自R1S的流量似乎来自受害者。可以在GitHub上的slimjim脚本的旧版本中找到该过程的基础。从本质上讲,要弄清楚被拦截设备的MAC和IP地址,然后使用Linux ebtables(第2层)和iptables(第3层)规则来确保从person -in- middle设备到更广泛网络的所有流量都来自被拦截设备的MAC和IP地址。如果你还希望能够与被拦截的设备进行交互,请选择要使用的上游设备的MAC和IP地址,并将其伪装成该设备。鉴于该装置所处的特殊位置,直接与受害者相连,你可以选择任何上游装置来伪装成它。

早期的slimjim依赖于手动将可到达设备的MAC地址和IP地址分别添加到ARP和路由表中,它还要求操作员使用tcpdump -nneli lan -Q in这样的命令来识别被拦截设备的MAC和IP地址,并在运行脚本之前执行一些手动配置。当前版本的slimjim为你完成了所有这些工作,并将观察到的DNS流量映射到相关地址。不过需要python脚本,这在资源受限的设备上可能不可行!

一旦配置了网桥,即使没有识别出受害者的详细信息,网络访问控制解决方案也应该能够连接到受害者,执行所需的任何身份验证过程,并相应地激活端口。

从网络访问控制中窃取凭据

一个有用的技巧是了解网络访问控制实际上是如何工作的,在某些情况下,我们已经看到,NAC解决方案使用SSH或SMB之类的协议建立到新设备的经过身份验证的连接,并提供可以获取和重用的凭据。此连接用于执行目录、或验证验证防病毒软件是否是最新的等等。在这些端口上运行合适的蜜罐服务可能会导致明文凭据(或等价的哈希)泄漏,这些凭证通常是高度特权帐户,能够登录到所有连接到网络的工作站!

不幸的是,802.1x解决方案并非如此!

网络命名空间

Linux自2002年以来一直支持名称空间约有18年,但是对于很多人来说,它们仍然是一个谜。存在用于各种不同资源类别的名称空间,例如进程、文件系统、网络、用户ID等。这些名称通常由Docker工具之类的容器工具使用,以限制所包含系统可以看到的资源。它们还可以帮助防止命名冲突,就像很多人的名字叫John一样。

在这个实例中,我们感兴趣的是网络名称空间,因为它们提供了一种方法,使网络接口及其整个网络堆栈仅对系统上运行的程序的子集可见。通过将网络接口分配给网络名称空间,只有在该网络名称空间内运行的进程才能看到或访问该接口。

Opsec注意事项

如前所述,由R1S产生的无意的网络流量(如DNS查找)可能会泄露整个游戏。避免这种情况的一种方法是在网络名称空间(例如pitm)中隔离以太网接口,并仔细考虑在该名称空间中启动哪些进程。当前的slimjim脚本也会处理这个问题,在名称空间内创建一个屏幕实例。在pitm名称空间内启动的任何进程都可以访问以太网接口,而在名称空间外创建的进程则不能。这样,我们就可以确保不会有意外的流量击中目标的网络,暴露他们的存在!

安装slimjim

要在R1S上安装slimjim,应执行以下步骤。首先,在以太网接口上禁用IPv6:

cat << EOF > /etc/sysctl.d/01-disable-ipv6.conf
# disable IPv6 on Ethernet interfaces
#
net.ipv6.conf.wan.disable_ipv6 = 1
net.ipv6.conf.lan.disable_ipv6 = 1
EOF

不幸的是,Linux IPv6堆栈执行了一些自动冲突检测,这可能允许意外的流量传出到以太网接口。接下来,安装所需的软件包:

apt install -y dnsmasq tcpdump ebtables redsocks iftop python3-pypcap python3-dpkt python3-pyroute2 python3-iptables python3-setuptools python3-cffi

我们希望防止Redsocks自动启动,因为除非它在pitm名称空间内运行,否则它将无法访问网络接口。 slimjim脚本将在命名空间内为我们启动它。我们还希望将Redsock侦听的IP地址更新为位于以太网桥上。可以这样做:

systemctl disable --now redsocks
sed -i -e 's|log = .*;|log = "stderr"|' -e 's|daemon = on;|daemon = off;|' -e 's|local_ip = 127.0.0.1;|local_ip = 169.254.0.1;|' /etc/redsocks.conf

在本文中,我们实际上不会使用redsocks,但是在此文章中使用了类似的“中间人”技术,其中提供了有关如何使用它的信息。

接下来,我们从GitHub克隆slimjim存储库:

git clone https://github.com/RoganDawes/slimjim
slimjim/slimjim

运行slimjim将在第一个窗口中使用slimjim脚本启动屏幕会话。你将看到它等待受害者的数据包,以识别要使用的MAC和IP地址。

2.12.png

确认受害者的MAC和IP地址

注意:在运行slimjim脚本之前,LAN和WAN接口之间不会通过任何流量。我建议你利用前面介绍的自动化技术,通过检测连接了LAN接口的活动接口来自动启动slimjim,或者,在断开目标网络连接之前,手动启动slimjim。

一旦确定了受害者的MAC和IP地址,就可以关闭该窗口。另一个窗口将运行一个名为pitm_snoop.py的python脚本,该脚本监视网络流量以识别相邻设备并更新ARP和路由表。这是必要的,因为slimjim阻止R1S执行自己的ARP查找以避免暴露。

2.13.png

为广播域中的设备添加ARP条目,并将名称映射到IP地址

另一个窗口将运行dnsmasq实例,该实例配置为仅执行基于本地“主机文件”的查找。主机文件也由pitm_snoop.py根据观察到的来往受害者的DNS流量来创建和更新。通过这种方式,你可以了解被拦截设备正在与哪些主机通信,并了解网络布局。如果你希望使用目标服务器的名称服务器,则可以编辑名称空间的自定义/etc/resolv.conf文件(通常可在/etc/netns/pitm/resolv.conf中找到)。

另一种弄清楚受害者与谁交谈的方法是运行iptraf。slimjim启动一个iptraf实例,以用户友好的方式显示通过pitm桥的网络流量。

处理网络命名空间的复杂性

使用网络名称空间来隔离以太网接口有时会让事情变得有些棘手,特别是当你需要能够将流量从控制接口引导到网桥时,或者反之亦然。为了解决这个问题,我们创建了一对虚拟网络接口,分别为169.254.20.1(名称空间内部)和169.254.20.2(名称空间外部)。使用这些可以将流量路由进出命名空间。我的首选方法是使用SSH隧道,如下所示:

在R1S上,为pitm名称空间内的虚拟接口添加一个/etc/hosts条目:

169.254.20.1 pitm

将以下条目添加到你的个人〜/ .ssh / config文件中:

Host pitm
User root
ProxyJump nanopi-r1
RemoteForward 1080

Host nanopi-r1
User root
RemoteForward 1080

然后,如果你在R1S上安装了ssh公钥,你可以使用以下命令直接ssh到pitm名称空间:

ssh pitm

这利用了OpenSSH的“ProxyJump”功能,并在另一个内部建立了一个ssh连接的隧道,以便到达命名空间内的虚拟接口。这将启用简洁的功能,例如使用本地计算机上的Wireshark进行远程网络监视:

ssh pitm tcpdump -nli pitm -w - | wireshark -k -i -

当然,其他所有SSH端口转发技巧也都可用。

此基于slimjim的解决方案不适用于使用802.1x-2010的网络,该网络可以使用MACsec加密受害者与交换机之间的数据包。

本文翻译自:https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-2/如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论