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

本文详细比较了三种主流单板计算机(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比较直接构建自己的渗透测试投放盒,可以找到下面的说明,也可以点击这里

概述

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

本质上,我们只剩下物理攻击。我能否访问未锁定的终端并执行基于HID的攻击(比如Rubber Ducky)?如果系统被锁定,也许可以放置一个USB以太网适配器(如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、以太网速度和视频类别上击败了其他设备,更不用说能够安装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作为渗透测试投放盒构建起来更快更稳定。我最终在红队 engagement 中带上了那个设备,将其放置在连接到他们网络的位置,并让它运行了三天没有任何问题。无线接口救了我,因为我插入的网络没有设置为向新设备分发DHCP地址。我必须手动发现子网是什么,并手动设置一个IP地址用于路由我的流量。如果我没有无线接口,设备将只是坐在那里,无法连接到我的命令和控制服务器。

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

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

  • ODROID-C2 w/ eMMC Pentest DropBox Instructions
  • ODROID-C2 w/ microSD Pentest DropBox Instructions
  • Raspberry Pi 3 Pentest DropBox Instructions
  • BeagleBone Black Pentest DropBox Instructions

事不宜迟,这里是构建ODROID-C2渗透测试投放盒与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. 将以太网电缆插入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
接受默认第一个扇区   ###磁盘的起始扇区
接受默认最后一个扇区    ###磁盘的结束扇区
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
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计