Dropbox是一款免费网络文件同步工具,是Dropbox公司运行的在线存储服务,通过云计算实现因特网上的文件同步,用户可以存储并共享文件和文件夹。Dropbox提供免费和收费服务,Dropbox的收费服务包括Dropbox Pro 和 Dropbox for Business。在不同操作系统下有客户端软件,并且有网页客户端。
即便如此完美的工具,也发生过网络安全事故。早在2012 年,Dropbox 超过 6000 万帐户资料就被盗过一次。再比如在2016年,攻击者利用Dropbox传播了一种名为petya的勒索软件,他们点击存储在Dropbox共享上,而用户没有意识到,只要点击Dropbox后他们的计算机上就会安装病毒。
我们一直在为FriendlyArm NanoPi R1S单板计算机(SBC)制作软件映像,他们将用它来演示一些近距离攻击技术。我将通过安装Armbian发行版以及P4wnP1 ALOA详细介绍配置R1S的过程。我们还将快速了解如何将USBProxy配置为一个键盘记录器。
首先,我们将利用MaMe82的P4wnP1将R1S配置为USB攻击的平台,虽然最初是为Raspberry Pi Zero W创建的,但从本质上讲,没有任何限制。Raspberry Pi Zero W,在中国,大家叫我树莓派Zero W,在这里,我简称为RPi Zero W。
我作为树莓派家族里的新生代宠儿,与前辈1代一样用ARM11内核的BCM2835处理器,但我的运行速度比之提升了约40%。
相比Raspberry Pi Zero,我增加了与3代B一样的WiFi和蓝牙,能适应更多场合。我们真正需要的是带有USB设备控制器(UDC)的SBC,以及通过该设备控制器进行通信的某种方式!R1S完全符合上述描述,它具有2个千兆以太网端口,我们可以在设置时最初使用它们,但最终我们将专用于以太网攻击,具体的过程我们稍后介绍。 R1S还具有内置的WiFi,尽管它不是特别好的芯片组!但是,我们可以将其用作访问点以允许远程访问设置的dropbox。我们还可以将USB主机端口用于LTE调制解调器或更长距离的其他网络接口。但首先,我们将使用默认情况下Armbian在USB端口上提供的串行控制台进行连接。
我们将以Armbian Buster当前版本(Armbian_20.02.1_Nanopi-r1_buster_current_5.4.20.7z)为基础。下载文件,解压缩.img文件,然后按照Armbian网站上的说明将其写入microSD卡。通常,我会执行以下操作,但要确保你使用的设备是正确的设置!
- mount | grep mmcblk0 | while read dev rest; do
- sudo umount $dev
- done && (pv Armbian_20.02.1_Nanopi-r1_buster_current_5.4.20.img | sudo dd of=/dev/mmcblk0 bs=2048)
完成后,将micro SD卡插入R1S,然后使用microUSB线将R1S连接到计算机。确保你选择的线是数据线,而不仅仅是充电线!几分钟后,你应该在主机上看到一个串行端口(这发生在R1S启动并扩展文件系统以填充SD卡之后)。如果看不到新的串行端口,请检查数据线!
dmesg -w显示R1S的枚举
你应该能够使用首选的终端仿真器连接到串行端口,我喜欢使用picocom,并且我相信Windows上的Putty也可以很好地工作。你不必担心波特率,但115200应该可以。使用Linux主机,串行端口枚举为ttyACM设备,例如/dev/ttyACM0。建立连接后,最初的Armbian登录/设置屏幕会打招呼。以“root”用户身份登录,密码为“1234”,然后重新输入密码“1234”以开始将其更改为新密码。记住你的新root密码!你可能不需要创建非特权用户,但是如果你确实愿意,可以这样做!
以root / 1234身份登录,然后更改root密码
在中断或完成“新用户帐户”的创建过程后,注销,然后作为根用户或来自非特权用户的sudo -s重新登录。在引导过程中,我们将一条以太网线从本地网络连接到R1S的WAN端口。几秒钟后,R1S应该分配了一个IP地址。
从本地DHCP服务器获取IP地址
现在我们可以SSH到我们的R1S。我还复制了ssh公钥,以使将来的连接更简单。
在运行P4wnP1之前,我们需要禁用USB串行控制台,以便P4wnP1可以管理USB设备控制器。首先,停止systemd在设备上启动登录提示:
- systemctl disable serial-getty@ttyGS0.service
- systemctl stop serial-getty@ttyGS0.service
然后,通过阻止加载g_serial模块,停止自动创建串行设备。这样,我们将立即将其卸载,并防止日后再次加载:
- rm /etc/modules
- rmmod g_serial
现在克隆P4wnP1 ALOA存储库,然后将必要的(预构建的)零件复制到正确的位置。理想情况下,我们会从头开始构建,但是在构建过程中目前存在一些错误。幸运的是,为Raspberry Pi Zero W构建的二进制文件在NanoPi R1S上运行得很好!
- apt install -y dnsmasq
- git clone https://github.com/RoganDawes/P4wnP1_aloa
- cd P4wnP1_aloa
- mkdir -p /usr/local/P4wnP1
- cp build/P4wnP1_* /usr/local/bin/
- cp -r dist/* /usr/local/P4wnP1/
- cp build/webapp* /usr/local/P4wnP1/www
- mv /usr/local/P4wnP1/P4wnP1.service /etc/systemd/system/
- systemctl enable P4wnP1.service
- systemctl start P4wnP1.service
现在P4wnP1正在运行,你应该可以在端口8000上以与SSH相同的IP访问P4wnP1 Web界面,即http://nanopi-r1:8000。这里没有身份验证,因为假设P4wnP1公开的网络是一个受信任的网络。
现在是测试USB配置是否正常的好时机,你应该能够使用右侧的复选框选择一个或多个USB类来实施。我通常喜欢实现键盘和鼠标以及自定义的HID设备。然后,确保左上角的USB已启用,然后单击“部署”。
配置P4wnP1 USB配置文件
你应该看到R1S连接到的计算机检测到一个新的USB设备。例如,在主机上使用“dmesg”,你应该看到类似以下内容:
- [2316641.797152] usb 1-5: new high-speed USB device number 40 using xhci_hcd
- [2316641.809806] usb 1-5: New USB device found, idVendor=1d6b, idProduct=1347, bcdDevice= 1.00
- [2316641.809808] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
- [2316641.809810] usb 1-5: Product: P4wnP1 by MaMe82
- [2316641.809811] usb 1-5: Manufacturer: MaMe82
- [2316641.809812] usb 1-5: SerialNumber: deadbeef1337
- [2316641.815378] input: MaMe82 P4wnP1 by MaMe82 as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:1D6B:1347.0028/input/input85
- [2316641.867750] hid-generic 0003:1D6B:1347.0028: input,hidraw0: USB HID v1.01 Keyboard [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input0
- [2316641.868575] input: MaMe82 P4wnP1 by MaMe82 Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:1D6B:1347.0029/input/input86
- [2316641.868921] hid-generic 0003:1D6B:1347.0029: input,hidraw1: USB HID v1.01 Mouse [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input1
- [2316641.869892] hid-generic 0003:1D6B:1347.002A: hiddev96,hidraw2: USB HID v1.01 Device [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input2
如果要在启动时部署此USB配置,则可以单击Store,然后输入“startup”作为配置文件名称。另外,也可以根据需要在手动控制下进行部署。
此时,你应该拥有一个功能正常的P4wnP1设备,并且可以按照Internet上的各种教程来实际使用USB功能来攻击连接的设备。
注意:我发现P4wnP1在配置(在P4wnP1内)连接到现有的接入点时非常不稳定。如果这是你的需要,我宁愿建议使用NetworkManager进行这种配置。在这种情况下,我建议你忽略下一段,并禁用P4wnP1中的WiFi配置,并将其另存为启动配置文件。
如果你确实想利用内置Wi-Fi界面的热点功能进行远程访问,则可能希望让P4wnP1为你进行管理,只是因为使用NetworkManager进行配置似乎并不容易。如果是这样,你将需要告诉NetworkManager忽略该接口,因此不会存在所有权冲突。你可以通过编辑/etc/NetworkManager/NetworkManager.conf并在底部添加以下两行来完成此操作:
- [keyfile]
- unmanaged-devices=interface-name:wlan0
现在,你可以使用Web界面中的“WiFi设置”标签,将P4wnP1配置为将Wi-Fi界面作为接入点运行。将其存储为“启动”配置文件的一部分,以在启动时自动对其进行配置。
当设备将在现场部署且没有熟悉的Wi-Fi网络可供连接时,这将很有用。可以说,隐藏SSID有助于将其隐藏起来。当然,一旦你开始与它关联,任何本地Wireless IDS都会很快发现你!或者,你可以选择使用LTE加密狗或其他不太明显的通信机制(例如Bluetooth或802.15.4无线电)进行连接。不过,这里将不讨论如何设置它!
另外,我想我会尝试使用USBProxy设置键盘记录器。尽管它被做了特殊标记,但仍然可以正常使用!这个想法是通过创建相同的USB小工具描述符,并简单地将数据包从一侧复制到另一侧,来“镜像”通过USB-A连接器插入R1S的USB设备。研究USB协议可能是最有趣的,但是开箱即用它也可以充当键盘记录器。
除了要确保首先安装libusb和libusb-dev软件包外,我将不涉及编译的所有细节。同样,默认情况下,键盘记录器功能与ROT13过滤器绑定,因此,你在键盘上输入的任何内容都将由13个字符转置。因此,在编译之前,你可能需要注释掉第153行,其中添加了PacketFilter_ROT13插件。当你在那里时,还应通过将“r +”参数更改为“a +”,将第143行的fopen调用更改为追加到日志文件,而不是将其打开只进行读取。主要原因是,如果输出文件尚不存在,则执行将失败,另一种解决方法是在执行之前修改outputfile。
编译后,你可以运行usb-mitm –k来启动键盘记录器。这会将观察到的击键信息转储到stderr,这可能并没有那么大的帮助。你还可以向-k开关传递一个可选参数,指定要写入的文件:usb-mitm –kkeystrokes,这会将观察到的击键记录在输出文件中。
捕获的击键
总而言之,我们创建了一个USB攻击平台,该平台可用于将击键和鼠标移动注入所连接的受害者,以及执行各种其他USB攻击,例如使用优先级路由来启动USB网络接口。如果有现成的外部USB键盘可以通过R1S插入,我们也可以将其用作USB键盘嗅探器。接下来,我们将研究如何将R1S伪装成以太网人员,插在已授权的受害者和其上游交换机之间。在这种配置中,我们可以利用受害计算机传递任何网络身份验证控制机制的能力,同时“劫持”其IP和MAC地址,以使R1S生成的任何流量实际上都来自受害计算机。
接下来,我将重点介绍两种情况下作为以太网攻击工具的操作。首先,作为可以连接到未使用的以太网端口的Dropbox,并提供对目标网络的远程访问;其次,作为以太网的中间人(Ethernet Person in the Middle),可以将其放置在合法设备与其内部设备之间。在上游交换机中,使用合法设备的IP地址和MAC地址覆盖自己的流量。在第二种情况下,我们也可以击败网络访问控制措施,因为合法设备将处理所有这些。
但是,需要注意的一件事是引起任何异常网络流量,这可能会引发警报。一个明显的示例是在计划的apt更新发生时对armbian.org进行DNS查找,或尝试解析0.debian.pool.ntp.org。更复杂的可能是Linux特有的特定DHCP选项和参数,这些选项和参数不适用于只支持windows的网络。在将你的设备连接到潜在的恶意网络之前,最好熟悉你的设备上运行的所有进程,以及它们在网络上的确切样子!稍后我将演示一种最小化这种意外流量的方法。
攻击准备
如上所述,我假设你将内置的WiFi接口配置为你控制的接入点的客户端,或者配置为AP本身,这样我们就可以通过WiFi连接到R1S,而不受P4wnP1的影响。你可以在命令行上使用nmtui连接到串行控制台时完成此操作,如果你确实知道自己在做什么,则可以使用nmcli !设置以太网接口
第一个建议是重命名接口,以对应于案例中的LAN和WAN名称,这有助于避免混淆接口。你可以使用以下命令来完成此操作,该命令可以正确配置systemd-network。
- printf "lan\tplatform-1c1b000.usb-usb-0:1:1.0\nwan\tplatform-1c30000.ethernet\n" | while read iface path; do
- cat << EOF > /etc/systemd/network/10-$iface.link
- [Match]
- Path=$path
- [Link]
- Name=$iface
- EOF
- done
这将在/ etc / systemd / network /中创建两个文件,分别以lan和wan接口命名,并带有应重命名的设备的路径。这些应该是NanoPi R1S的标准配置,但在其他设备上可能会有所不同。你还应该确保NetworkManager不会尝试管理以下接口:
- cat << EOF >> /etc/NetworkManager/NetworkManager.conf
- [keyfile]
- unmanaged-devices=interface-name:wan,interface-name:lan
- EOF
创建这些文件后,请重新启动以激活规则,重命名接口并重新加载NetworkManager。
重命名后的wan和lan接口
让我们考虑这样一个场景:你发现了一个未使用的以太网端口,并希望连接你的设备。这是一个潜在的风险活动,因为任何网络访问控制(NAC)系统可以检测你的未经授权的活动,并警告操作人员。尽管如此,它很可能会成功,因此值得尝试。
你要了解的第一件事是目标端口是否实际存在,幸运的是,我们可以使用NanoPi R1S上的3个LED来获得即时反馈。不幸的是,LAN和WAN LED很难看到,呈绿色,而红色SYS LED更容易看到。我建议的配置如下,SYS LED用来显示CPU使用率,WAN和LAN LED用来显示链路状态(当链路被检测到时)和被检测到的RX流量(当只接收到流量时闪烁)。
- modprobe ledtrig-netdev # not loaded by default
- cd /sys/class/leds/
- echo cpu > LED1/trigger # labelled sys
- echo netdev > LED2/trigger # labelled wan
- echo wan > LED2/device_name
- echo 1 > LED2/link
- echo 1 > LED2/rx
- echo netdev > LED3/trigger # labelled lan
- echo lan > LED3/device_name
- echo 1 > LED3/link
- echo 1 > LED3/rx
- ip link set dev wan up
- ip link set dev lan up
为了在R1S每次启动时都能运行,建议将以上内容添加到/etc/rc.local。请注意,如果没有IP链接设置部分,则链接检测将无法工作!如果你希望红色LED指示WAN链接,请在上面的脚本中交换LED1和LED2。
现在,如果你给R1S通电,只需将以太网线插入WAN或LAN端口,就会告诉你该数据线是否接通,以及该数据线是否有活动。这样可以避免将R1S连接到禁用或断开的端口。也就是说,R1S在以太网端口上也确实有指示灯LED,因此这不是完全必要的!
触发硬件LED的选项,所选触发器位于方括号中,当前为[cpu]
然后,你可以通过WiFi连接并开始监视网络流量,然后再决定要如何进行。例如,请求DHCP租约,或简单地劫持观察到的网络范围内的未使用IP地址。
下一篇文章中,我们将介绍自动化攻击方案、网络访问控制、网络命名空间等可能的攻击手段。
本文翻译自:https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-1/ 与 https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-2/如若转载,请注明原文地址。