如何构建自己的渗透测试投放箱:硬件选择与配置指南

本文详细比较了三种单板计算机(Raspberry Pi 3、BeagleBone Black、ODROID-C2)作为渗透测试投放箱的性能,并提供了ODROID-C2的完整构建指南,包括硬件选择、Kali Linux安装、无线接入点配置和自动SSH隧道设置。

如何构建自己的渗透测试投放箱

作者:Beau Bullock
发布日期:2016年8月3日

TL;DR

我比较了三种单板计算机(SBC),目标是找出最适合作为“渗透测试投放箱”的设备,总成本控制在110美元左右。剧透警告:在我测试时,Hardkernel的ODROID-C2在这方面完全碾压了竞争对手。如果你想跳过SBC比较直接构建自己的渗透测试投放箱,可以在下面找到说明,也可以点击这里

概述

几周前,我计划为一家零售组织进行红队演练。为了准备这次评估,我开始收集所有可能需要渗透该组织并访问其网络的装备。社交工程攻击被明确排除在此次任务范围之外。这意味着我不能要求任何员工插入USB设备、让我进入某些房间或允许我在他们的终端上“检查我的电子邮件”(是的,这确实有效)。

本质上,我们只剩下物理攻击。我能否访问未锁定的终端并执行基于HID的攻击(比如Rubber Ducky)?如果系统被锁定,也许可以插入USB-Ethernet适配器(如LAN Turtle)来获得远程shell。即使我能物理访问,如果对网络的出口过滤设置没有任何了解,我能否获得一个shell?这促使我构建一个渗透测试投放箱,可以放置在网络上,通过无线适配器控制,自动SSH出站,并成为一个全面的渗透测试箱。

设备要求

查看现有选项后,很明显我可以花1000多美元购买符合需求的设备,或者以更低的价格构建一个类似的设备。因此,我设定了一些非常具体的目标:

  • 设备尺寸相对不显眼(可以 unnoticed 地插在桌子下)
  • 能够通过无线接口控制(如果可以使用多个无线接口,以便无线管理和无线攻击可以同时进行,则加分)
  • 持久的反向SSH隧道到命令和控制服务器
  • 功能完整的渗透测试操作系统(不仅仅是用于路由攻击的shell)
  • 足够的存储空间(32-64GB)
  • 实际上是一个可用的渗透测试箱,不会因硬件限制而缓慢
  • 总构建成本约110美元

硬件一览

我购买了三种最流行的单板计算机(SBC),以找出哪种最适合作为渗透测试投放箱。测试的设备如下:

  • Raspberry Pi 3 Model B
  • BeagleBone Black
  • Hardkernel ODROID-C2

从左到右:BeagleBone Black、Raspberry Pi 3 Model B和ODROID-C2

首先,我们看看这些设备的硬件规格。

鉴于上表,ODROID-C2在处理器、GPU、RAM、Ethernet速度和视频类别上均优于其他设备,更不用说可以安装eMMC存储模块而不是运行microSD卡。BeagleBone Black(BBB)有4GB板载闪存存储,以及更多的I/O和外围选项。Pi 3确实有内置无线适配器,并且成本低于C2或BBB。尽管天平已经向ODROID-C2倾斜,我仍然在测试它们作为渗透测试投放箱时给予每个设备平等的待遇。

在每种情况下,我购买了额外的物品来完成每个系统。我为板子找到了相对便宜的机箱、电源、存储卡和必要的无线适配器。BBB和Pi 3只支持使用microSD卡作为存储,而ODROID-C2支持microSD和eMMC。因此,对于ODROID-C2,我实际上测试了两种存储介质。

Raspberry Pi 3 with microSD Card, and ODROID-C2 with eMMC Module

操作系统

我是Kali Linux的粉丝。在我执行的几乎每次渗透测试中都使用它。除了桌面版本的发行版,他们还为许多ARM设备提供镜像。我比较的每个设备都有可用的Kali镜像在这里

人们肯定可以为自己的渗透测试投放箱选择其他发行版,但我发现Kali非常容易安装,并且由于我的使用历史而熟悉。在每种情况下,只需将镜像文件写入外部存储介质,如microSD,或者在ODROID-C2的情况下是eMMC模块,然后将其连接到设备并启动。

无线

Raspberry Pi 3方便地有内置无线卡。问题在于它不支持监控模式或数据包注入。虽然这张卡仍然可以用作接入点,满足通过WiFi管理设备的目标,但它无法执行任何无线攻击。

我找到了这个相对便宜(11.99美元)的无线适配器,它可以做所有我想做的事情。这个适配器有RT5370芯片组,支持监控模式,并且在使用Aireplay-ng注入数据包时工作完美。

RT5370 Chipset Wireless Adapter

BBB和C2都没有在设备本身包含无线芯片,因此需要USB无线适配器。我使用上述适配器以及Hostapd设置了一个接入点(我在最后包含了完整的设置指南),我可以连接以管理设备而无需物理连接。这个适配器也适用于Pi 3。如果你想用投放箱执行任何无线攻击,并选择Pi 3,我推荐这个适配器。

机箱和整体外观

对于BeagleBone Black,我买了这个黑色机箱。我注意到设备在重度测试期间有点发热。对于其他两个设备,我选择了一个带有机箱风扇的机箱。

ODROID-C2 Case With Fan

ODROID-C2在机箱选项上实际上没有很多选择。然而,ODROID-C2在端口位置方面几乎是Raspberry Pi 3的精确复制品。因此,几乎任何Pi 3机箱都应该适用于它(有一个小例外,你很快就会看到)。对于Pi 3和ODROID-C2,我使用了这个Performance Pro机箱。这个机箱包括一个由板子上两个GPIO引脚供电的机箱风扇。

使用Raspberry Pi机箱用于ODROID-C2有一个问题:电源插座是唯一不完全匹配的东西。这个问题可以用钻头轻松解决。

After drilling the hole in the case, the power adapter fits just fine.

The three devices in their cases.

总硬件成本

我决定用64 GB SanDisk Extreme MicroSDXC UHS-1卡测试每个设备。这个存储量是我个人想要的,但如果你不需要那么多存储,你可以通过选择更低的存储空间来降低总价格。我还测试了ODROID-C2的eMMC模块。由于成本高得多,我只测试了32 GB eMMC模块。你会在后文中看到成本非常值得。再次,Pi 3的无线卡不是完全必要的,因为内置卡,但如果你想进行任何无线攻击,你将需要一个适配器。

现场测试投放箱

在让每个设备设置好我最初对渗透测试投放箱的要求后,我进行了一些测试来比较它们作为投放箱的实际功能。我首先测试了每个系统启动的速度。为此,我从在终端中输入“reboot”后按回车的那一刻开始计时,到登录屏幕显示的那一刻结束。我还测试了从重启到加载Metasploit控制台的速度。ODROID-C2从重启到Metasploit控制台用了1分14秒。这比Raspberry Pi 3快了整整一分钟,比BeagleBone Black快了超过2分钟。

接下来,我在设备上基线化了密码破解速度。当然,我认为我永远不需要或真的想在这些设备上进行任何破解。我有一个不错的破解装备,我总是可以发送哈希值到。这更多的是测试每个设备的处理器,以便我有一个数字来直观地看到哪个运行更快。为此,我简单地使用了John the Ripper的基线测试功能(./john –test)。再次,ODROID-C2胜出,并且领先很多。

我用每个设备使用Nmap对路由器进行端口扫描。我测试了没有标志的标准Nmap命令和带有服务检测标志(-sV)的命令。在这个测试中,设备之间没有太大差异。基本扫描都花了大约2秒,服务检测花了大约2分23秒。

我在设备之间做的最后一个比较是看它们每个写入数据到存储和从存储读取数据的速度。为此,我首先使用“dd”写入1 GB数据到磁盘。然后,我清除了Linux缓存,并使用“dd”再次读取文件。我还使用“hdparm”测试了缓冲和缓存读取。当涉及到磁盘读写时,这是ODROID-C2绝对碾压竞争对手的地方。带有eMMC模块的ODROID-C2写入磁盘的速度比带有microSD的Raspberry Pi 3快约15倍,读取数据快约9倍。即使带有microSD的ODROID-C2仍然比Raspberry Pi 3快约2倍。

测试写入速度我使用了这个:

1
sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync

测试读取速度我使用了这个:

1
2
/sbin/sysctl -w vm.drop_caches=3
dd if=tempfile of=/dev/null bs=1M count 1024

测试缓冲和缓存读取我使用了这个:

1
hdparm -Tt /dev/mmcblk0

结论

ODROID-C2作为渗透测试投放箱构建得更快、更稳定。我最终在红队任务中带上了那个设备,将其放置在一个连接到他们网络的位置,并让它运行了三天没有任何问题。无线接口救了我,因为我插入的网络没有设置为新设备分配DHCP地址。我必须手动发现子网是什么,并手动设置一个IP地址来路由我的流量。如果没有无线接口,设备将只是坐在那里,无法连接到我的命令和控制服务器。

在我设置好接口后,ODROID-C2保持了一个到我的C2服务器的SSH隧道。设备完美处理了多个Meterpreter会话,感觉就像我在他们的网络上有一个非常不错的渗透测试系统。其他设备可用,但以大约相同的价格,你可以构建一个更强大的投放箱。

下面你将找到一个完整的指南来构建一个ODROID-C2渗透测试投放箱w/ eMMC自己。但如果你读了这个并且已经有其他设备之一,或者只是想用其他设备之一构建一个投放箱,我为每个写了说明。你可以在这里找到每个说明的PDF:

事不宜迟,这里是构建ODROID-C2渗透测试投放箱w/ eMMC模块的完整指南:

ODROID-C2 w/ eMMC Pentest DropBox Instructions

硬件购物清单(链接截至2016年8月2日)

  • ODroid-C2 – $41.95
  • DC 5V/2A 2.5 mm power adapter – $6.99
  • 32 GB eMMC module for ODROID-C2(确保选择eMMC到MicroSD适配器作为附加$1)– $42.95
  • MicroSD to USB Adapter – $6.99
  • RT5370 Chipset Wireless Antenna – $11.99
  • Performance Pro Case for RPi – $9.99

Kali镜像的初始设置

  1. 从Kali下载站点下载Kali ODROID-C2镜像这里
  2. 将Kali镜像刷写到eMMC。

对于Windows

  • 使用eMMC到microSD适配器,然后microSD到USB适配器,并将eMMC连接到Windows系统。
  • 在Windows系统上,用7zip解压kali-*-odroidc2.img.xz文件。
  • 使用Win32DiskImager将Kali镜像写入eMMC。

对于Linux

  • 使用eMMC到microSD适配器,然后microSD到USB适配器,并将eMMC连接到Linux系统。
  • 使用dd工具将Kali文件镜像到eMMC(在这里选择正确的存储设备非常重要。很容易意外擦除计算机的硬盘使用此命令。在下面的例子中,我使用/dev/sdb,但你的可能不同,所以相应更改。)
1
xzcat kali-*-odroidc2.img.xz | dd of=/dev/sdb bs=512k
  • 当eMMC仍然连接到系统时,复制/boot分区(Image、meson64_odroidc2.dtb和uInitrd)。
  • 在/boot分区中创建一个“backup”文件夹,并将这些文件复制到那里(Image、meson64_odroidc2.dtb和uInitrd)。
  • 将eMMC卡插入ODROID-C2,并使用电源、HDMI电缆用于显示,以及键盘/鼠标插入USB端口启动它。
  • 使用用户名“root”和密码“toor”登录到Kali Linux发行版。
  • 挂载启动分区,并使用/etc/fstab使其在启动时自动挂载。
1
2
mount /dev/mmcblk0p1 /boot
echo '/dev/mmcblk0p1 /boot auto defaults 0 0' >> /etc/fstab
  • 创建备份恢复脚本。
1
nano /boot/backup/restore.sh
  • 将以下内容复制到/boot/backup/restore.sh
1
2
#!/bin/bash
cp /boot/backup/* /boot/
  • 使脚本可执行,并确保它运行没有错误。
1
2
chmod 755 /boot/backup/restore.sh
/boot/backup/restore.sh
  • 将脚本添加到rc.local。
1
nano /etc/rc.local
  • 在“exit 0”之前添加以下行。
1
/boot/backup/restore.sh
  1. 将Ethernet电缆插入ODROID-C2以为设备提供Internet。ODROID-C2应该自动尝试通过DHCP获取IP地址。
  2. 更改root密码。这可以通过打开终端并输入“passwd”然后按“enter”来完成。按照对话框更改密码。
1
passwd
  1. 扩展文件系统以覆盖整个eMMC。(当镜像刷写到eMMC时,它只分区了eMMC的一部分。你必须手动使用下面的fdisk命令重新创建分区以扩展驱动器。运行“df –H”之前和之后以查看根分区可用空间的差异。)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
fdisk /dev/mmcblk0
d           ###'d'选项允许我们删除一个分区
2           ###我们选择分区2被删除
n           ###'n'选项创建一个新分区
p           ###'p'创建一个主分区
2           ###设置分区号2
接受默认First sector   ###磁盘的起始扇区
接受默认Last sector    ###磁盘的结束扇区
w                       ###使用'w'写入更改
reboot                  ###重启,然后重新登录
resize2fs /dev/mmcblk0p2 ###使用resize2fs增长分区
  1. 更新和升级Kali发行版。
1
apt-get update && upgrade

设置WiFi接入点

  1. 安装hostapd。
1
apt-get install hostapd
  1. 创建文件/etc/hostapd/hostapd.conf。这可以用“nano”命令完成。
1
nano /etc/hostapd/hostapd.conf
  1. 将以下内容复制到hostapd.conf文件中。相应修改ssid和wpa_passphrase。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Interface configuration
interface=wlan0
ssid=tortugas
channel=1

# WPA configuration
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=@pirateslife4me@
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP

# Hardware configuration
driver=nl80211
ieee80211n=1
hw_mode=g
  1. 修改文件/etc/init.d/hostapd。
1
nano /etc/init.d/hostapd

找到行:

1
DAEMON_CONF=

并更改为:

1
DAEMON_CONF=/etc/hostapd/hostapd.conf
  1. 安装Dnsmasq。
1
apt-get install dnsmasq
  1. 编辑/etc/dnsmasq.conf。
1
nano /etc/dnsmasq.conf

添加以下到/etc/dnsmasq.conf(这将指定dnsmasq绑定到wlan0接口并为客户端提供DHCP。下面指定的范围将在172.16.66.50-172.16.66.100范围内分配IP):

1
2
3
4
5
6
no-resolv
# Interface to bind to
interface=wlan0
bind-interfaces
# Specify starting_range,end_range,lease_time
dhcp-range=172.16.66.50,172.16.66.100,255.255.255.0,12h
  1. 编辑/etc/network/interfaces。
1
nano /etc/network/interfaces

添加以下到/etc/network/interfaces(这将为wlan0接口指定静态IP 172.16.66.1)。

1
2
3
4
5
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 172.16.66.1
netmask 255.255.255.0

此时插入无线适配器,并尝试启动接口。

1
2
airmon-ng check kill
hostapd /etc/hostapd/hostapd.conf

如果没有错误,你现在应该能够用无线设备连接到SSID。

  1. 启用hostapd在启动时启动。
1
update-rc.d hostapd enable
  1. 启用dnsmasq在启动时启动。(我在这里遇到“update-rc.d dnsmasq enable”的问题,因为dnsmasq在wlan0启动之前启动并无法绑定到接口。相反,我发现添加“service dnsmasq start”到/etc/rc.local有效。)
1
nano /etc/rc
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计