Skip to content

Latest commit

 

History

History
861 lines (482 loc) · 70 KB

File metadata and controls

861 lines (482 loc) · 70 KB

七、备选树莓派项目

在前几章中,我们重点介绍了 Kali Linux,并将其用于 Raspberry Pi 作为一个功能强大但通用的渗透测试平台。在本章中,我们将不再使用典型 pen 测试的 Kill-Chain 模型方法,而是将重点放在 Raspberry Pi 的一些其他有趣和激动人心的用例上。我们将探索 Kali Linux 以外的一些图像,看看它们能提供什么好处。这甚至包括从 Linux/Unix 衍生产品转移到 Pi 上试用 Windows10IoT 版本,疯狂的谈话,对吗?Raspberry Pi 是一款功能强大的安全设备,用于保护您的网络,因此我们也将深入探讨这些主题。最后,我们将研究一些与安全无关的项目,我们认为这些项目是利用 Raspberry Pi 的一种令人兴奋的方式。

本章涵盖以下主题:

  • PwnPi
  • 覆盆子
  • 彭贝里皮
  • 保护您的网络
  • 使用 QEMU 在 PC 上运行 Raspberry Pi
  • 在 Raspberry Pi 3 上运行 Windows 10
  • Raspberry Pi 的其他流行用例

提示

Raspberry Pi 最棒的一点是,有这么多不同的项目可供您使用。它确实是一个非常通用的平台。在本章中,我们将重点讨论 Raspberry Pi 的一些重要用例,但请随意探索。可能性是无穷的。查看唐纳德·诺里斯为邪恶天才制作的覆盆子 Pi 项目了解其他一些有趣的项目。

潜入 PwnPi

PwnPi是一个非常成熟的树莓皮渗透测试平台。在编写第一版时,社区中的许多人声称它比 Kali Linux 更稳定,特别是在 Raspberry Pi 上。然而,我们相信,由于 Kali Linux 的流行性和同名性,支持 Kali Linux 的 Raspberry Pi 而不是 PwnPi 会发生变化。有些人可能会说我们有偏见,但任何认真的渗透测试人员都会在其他平台上使用 Kali。尽管如此,我们当然应该知道其他选择。

以下屏幕截图是启动 PwnPi 3.0 时的介绍性图像:

Diving into PwnPi

PwnPi 带来了一些独特的功能,例如支持 200 多种工具。PwnPi 构建在 Debian 上,针对 Raspberry Pi 进行了优化,并具有自动配置反向 shell 连接的简单脚本。您可以在了解更多关于 PwnPi 的信息 http://pwnpi.sourceforge.net/

让我们以以下方式在 Raspberry Pi 上安装和运行 PwnPi:

  1. 第一步是从下载 PwnPihttp://pwnpi.sourceforge.net/ 网站。安装类似于 Kali Linux。例如,我们使用sudo dd if=pwnpi-3.0.img of=/dev/disk2命令将pwnpi-3.0.img文件安装在 Mac 电脑上标识为disk2的 microSD 卡上。

  2. 有时,我们在尝试加载pwnpi-3.0.img时遇到引导问题。解决方法是从下载最新的 Raspberry Pi 固件 https://github.com/raspberrypi/firmware ,这将是一个ZIP文件。然后,我们将打开该ZIP文件并转到启动文件夹。安装pwnpi-3.0.img后,我们可以复制启动文件夹中的所有内容,并将其粘贴到 SD 卡的根目录中。我们将要替换任何重叠的现有文件。

  3. Once this is done, let's put the microSD card into the Raspberry Pi and fire up PwnPi. We recommend backing up the current configuration and operating before proceeding. This method is described in detail in Chapter 1Choosing a Pen Test Platform .

    提示

    我们发现 PwnPi 以及其他一些 ARM 映像由于驱动器问题有时无法启动。这就是为什么我们在前面的步骤中介绍了如何在启动 PwnPi 之前添加固件引导文件。如果遇到无法正确引导的 ARM 映像,请尝试此技术。

  4. 现在,我们将使用我们的 Raspberry Pwn 图像启动我们的 Raspberry Pi。

  5. 当我们登录时,会要求我们输入用户名和密码。默认用户名为root,默认密码为toor

  6. 我们建议此时运行apt-get updateapt-get upgrade命令。PwnPi 还有一个我们可以启动的基本 web 界面;但是,大多数工具仍然需要从终端或命令行运行。要启动 GUI 桌面,我们只需键入startx

由于大多数工具需要从命令行运行,GUI 为终端窗口提供了一些可管理性,并在菜单中列出了 PwnPi 随附的一些工具,如以下屏幕截图所示:

Diving into PwnPi

要启动 PwnPi 中的任何工具,我们只需导航到/pentest目录。我们可以在这个位置找到我们将要使用的所有工具。例如,如果您想运行社会工程师工具包,我们只需在终端窗口中键入/pentest/exploits/se-toolkit。这将启动该工具。我们可以在目录中浏览其他工具。查看前面的章节,了解如何使用 Kali Linux 和 PwnPi 中的其他流行工具。

以下屏幕截图显示了社会工程师工具包的发布:

Diving into PwnPi

大多数安全发行版将其工具保存在/pentest目录中。如果您使用的是同一版本的工具,那么实际的工具本身在不同的发行版中是完全相同的。

发现树莓 Pwn

覆盆子 Pwn来自同一团队**(PwnieExpress**:https://www.pwnieexpress.com/ 这给我们带来了一些很酷的项目,比如Pwn PadBlue HydraPwn Phone。基于 Debian 的发行版包括我们最喜欢的工具,如SETWiresharkdnswalk以及各种无线测试应用程序。我们认为它是包含许多类似工具的 Kali-Linux 的替代品,但是我们应该注意到它不是像 KALI 和其他发行版那样被积极维护和演化。同样,我们在这里提供选择。

Raspberry Pwn 的安装过程不同于提供 ARM 图像的完整发行版。这是因为 Raspberry Pwn 基本上位于 Raspbian 操作系统之上。

让我们看看如何使用以下步骤安装和运行 Raspberry Pwn:

  1. 我们需要首先下载一个基本的 Debian Raspberry Pi(Raspbian)发行版,该发行版位于https://www.raspberrypi.org/downloads/raspbian/ 。这些图像在不断更新,因此在撰写本文时,我们使用了2016-09-23-raspbian-jessie.img图像,效果很好。

  2. 我们需要使用第 1 章选择渗透测试平台中所述的过程安装此图像。安装 Debian 映像的命令是sudo dd if=2016-09-23-raspbian-jessie.img of=/dev/disk2

  3. 一旦安装,我们将把 microSD 放入 Raspberry Pi 中,并确保通过以太网端口将其连接到提供互联网访问的活动端口。

  4. 现在我们将使用sudo -i命令成为 root 用户。

  5. 我们可以通过 ping测试网络连通性 https://www.google.co.in/?gfe_rd=cr &ei=7twqWOqmLqvT8gfpzwk。确认网络连接后,我们将键入apt-get update更新固件。这应该只需要几分钟。

  6. 更新过程完成后,我们键入apt-get install git。接下来,我们将使用git clone https:// github.com/pwnieexpress/Raspberry-Pwn.git命令下载 Raspberry Pwn 本身。

  7. After a few minutes, we should be ready to install the software. Let's go to the Raspberry-Pwn directory using cd Raspberry-Pwn and type ./INSTALL_raspberry_pwn.sh to install the software, as shown in the following screenshot:

    Discovering Raspberry Pwn

  8. 一旦安装完成,我们将看到一个raspberrypi login #命令提示符。我们可以使用默认的 Debian 登录,用户名为pi,密码为raspberry。如果我们更改了 Raspbian 登录名,我们一定要使用它。

  9. 此时运行apt-get updateapt-get upgrade通常不是一个坏主意。

要访问可用的工具,我们可以导航到/pentesting文件夹。在该文件夹中,我们将发现在许多流行的渗透武器库中看到的各种工具。

提示

如果您输入startx,则只会启动 RaspbianK 桌面环境KDE)。它没有特定于 Raspberry Pwn 安装的内容,如果使用,可能会导致损坏。我们建议不要使用 KDE 桌面,只使用命令行功能。

Raspberry Pwn 是一个非常好的工具包,对于网络嗅探、使用 SET 的社会工程攻击和其他类似工具非常有效。它没有 Kali 的深度和广度,但它所缺乏的,是在性能上弥补的。虽然它还不支持,但我们仍然希望 Pwnie Express 能够增加通过 Pwnie Express 的中央管理控制台集中管理 Raspberry Pwn 的能力,使 Raspberry Pwn 成为该架构的廉价传感器。

以下屏幕截图显示了 Pwnie Express 发布的 Raspberry Pwn:

Discovering Raspberry Pwn

调查 PwnBerry Pi

PwnBerry Pihttps://github.com/g13net/PwnBerryPi 如前所述,被宣传为树莓 Pi的另一个渗透测试套件,基于树莓 Pwn。与 Raspberry Pwn 非常相似,Pwnberry Pi 最近没有更新,这似乎表明渗透测试领域正在围绕 Kali Linux 进行整合。

还应注意的是,最佳实践是不使用来自低端系统(如 Raspberry Pi)的基于 web 的渗透测试所需的许多工具。例如,PwnBerry Pi 包含了浏览器开发框架BeEF)的安装文件,而不是安装它,因为它知道大多数渗透测试人员不会从 ARM 映像运行此应用程序。如果您在这个 ARM 映像上安装 BeEF,您将看到 PwnBerry Pi 开发团队添加的警告横幅,声称他们在使用来自 PwnBerry Pi 映像的 BeEF 时遇到了不稳定的行为。

PwnBerry Pi 的安装过程与覆盆子 Pwn 过程非常相似。您将下载 Raspbian 映像,并以以下方式在该映像上运行 PwnBerry Pi:

  1. 我们需要首先下载一个基本的 Debian Raspberry Pi(Raspbian)发行版,该发行版位于https://www.raspberrypi.org/downloads/raspbian/ 。这些图像在不断更新,因此在撰写本文时,我们使用了2016-09-23-raspbian-jessie.img图像,效果很好。

  2. 我们需要使用第 1 章选择渗透测试平台中所述的过程安装此图像。安装 Debian 映像的命令是sudo dd if=2016-09-23-raspbian-jessie.img of=/dev/disk2

  3. 一旦安装,我们将把 microSD 放入 Raspberry Pi 中,并确保通过以太网端口将其连接到提供互联网访问的活动端口。

  4. 现在我们将使用sudo -i命令成为 root 用户。

  5. We can test network connectivity by pinging https://www.google.com/?gfe_rd=cr&ei=UaYuWOSmFqT98wfv2abABQ&gws_rd=cr&fg=1 . Once we confirm that we have network connectivity, we'll type apt-get update to update the firmware. This should only take a few minutes.

    Raspbian Linux 和 Kali Linux 都源自并共享 Debian 传统,因此许多基本工具和命令几乎相同,包括 apt 软件包管理器、重要的存储库资源和文件结构。

  6. 升级过程完成后,让我们键入apt-get install git,然后键入git clone https://github.com/g13net/PwnBerryPi.git下载 PwnBerry Pi 软件。

  7. 几分钟后,我们应该准备好安装软件了。我们现在将使用cd PwnBerry Pi进入 PwnBerry Pi 目录,并键入./install-pwnberrypi.sh来安装软件。这个过程应该需要 10-20 分钟。

  8. 一旦安装完成,我们将看到 PwnBerry Pi 1.0 版安装成功!以及一个命令提示符raspberrypi login #。使用默认 Debian 登录访问终端,用户名为pi,密码为raspberry

与 Raspberry Pwn 一样,PwnBerry Pi 的工具存储在名为pentest的文件夹下,通过终端窗口使用cd /pentest命令访问。一旦我们访问pentest文件夹,我们将看到一堆文件夹,其中包含各种可供安装的渗透测试工具。下面的屏幕截图显示了从 GUI 打开终端并使用ls命令列出目录中的所有文件夹。每个文件夹都标有一组可用工具的标签:

Investigating PwnBerry Pi

提示

您不想使用startx命令,因为它将为 Raspbian 带来 KDE。运行 KDE 对 PwnBerry Pi 没有任何作用,可能会导致运行 PwnBerry Pi 工具出现问题。

有几个显著的例外。Metasploit 位于/opt/msf3目录下。在本书的第一版中,我们注意到这是 Metasploit 的一个较旧版本-Pwnberry Pi 从那时起就没有更新过。只是为了好玩,我们在测试中确认了更新版本的 Metasploit 仍然不能与 PwnBerry Pi 正常工作。然而,这个特定版本的 Metasploit 在性能方面工作得相当好。

提示

请注意,没有预先安装任何工具。必须先安装工具,然后才能使用。

我们的测试发现,一些工具功能正常,而另一些工具有警告横幅,说明在 Raspberry Pi 上使用这些工具可能会出现问题。总的来说,PwnBerry-Pi 可能仍然有有效的应用程序,但与任何工具一样,更新和相关性都是至关重要的,因此我们建议使用更成熟的软件库,如 Kali-Linux 或 PwnPi。

保护您的网络

本书中的大多数主题都涉及攻击场景。不幸的是,有一天我们可能会遇到针对我们自己系统的企图。这意味着我们自己的安全架构将接受测试,我们需要了解如何部署、操作和维护防御解决方案,以帮助我们保护、检测、阻止、确定范围、遏制和补救威胁。

我们想澄清的是,覆盆子 Pi 并不是网络防御的理想工具。最佳实践都指向提供各种功能的分层安全解决方案,如应用层控制、有状态防火墙、入侵预防、访问控制、网络分段、恶意软件检测、网络监控、数据丢失等。大多数提供我们对抗当今网络威胁所需的保护级别的工具都需要非常高的处理能力和大量的存储。不幸的是,覆盆子皮没有提供给我们。

如果我们想在一个小型实验室中测试一些基本的安全概念,例如使用防火墙功能进行分割或使用 IDS 扫描基本威胁,那么 Raspberry Pi 可以作为该实验室的概念证明。一些 ARM 图像声称是家庭办公室保护的理想选择;然而,我们不建议出于保护实际资产的目的使用覆盆子 Pi。有一个小型的安全设备用于移动设备的旅行已经引起了很多的讨论。该设备可以是移动防火墙、IPS 和内容过滤设备,在酒店甚至公共网络上旅行和保护自己。树莓圆周率可以完成这项任务,鉴于其便携性和成本。

也就是说,让我们从研究如何将树莓 Pi 转换为 IDS/IP 开始。在本章后面,我们将介绍其他 Raspberry Pi 安全防御用例,例如如何将 Raspberry Pi 用作 VPN 服务器、内容文件服务器或 Tor 节点。

入侵检测与防范

也许有一段时间我们会成为网络漏洞的受害者。针对任何威胁的最佳防御措施包括分层多个安全解决方案,覆盖我们网络上的各个点,因此,如果其中一个被绕过,其他工具将用于识别和阻止攻击者。更棒的是,一个全面的体系结构将允许这些工具协同工作以自动化这些操作。尽管解决方案的价格从免费到无法获得不等,但在所有解决方案集中都有通用的防御构建块,其中包括防火墙和检测技术,如 IDS/IPS 解决方案。

Raspberry Pi 可以配置为低预算的 IDS/IP,以保护我们网络的一部分。我们应该考虑这一个非常具体的目标,因为有更好的选择提供真正的长期 IPS/IDS 解决方案。树莓 PI 不具备马力或存储超过任何基本的检测和预防,所以我们会考虑这个选项实验室使用和培训的目的。

在考虑 IPS/IDS 时,我们首先需要决定如何部署它。典型的用例是路由器和另一个设备之间,或者系统和网络之间。我们还可以将其用作入侵检测系统,这意味着该设备使用网络中的点击来查看流量副本,并且不具备任何强制执行功能。在我们的示例中,我们将使用 Snort 作为笔记本电脑和外部网络之间的内联 IP,充当中间人。这对于在不利用 VPN 的情况下连接到不受信任的网络来说是理想的选择。此设置将需要两个以太网端口,因此我们将利用 USB 到以太网适配器提供第二个端口。

为中间人攻击部署 Raspberry Pi 类似于为 IPS 部署充当中间人。我们需要将两个接口的 IP 地址设置为0.0.0.0,并使用桥接实用程序将两个接口桥接在一起。我们在第三章计划攻击中介绍了这个过程。用于将两个接口连接在一起的命令摘要如以下屏幕截图所示:

Intrusion detection and prevention

探索 Snort

目前使用的最流行的开源 ID/IP 是 Snort(https://www.snort.org/ ),现由思科(赞助 http://www.cisco.com/ )由于收购了 Sourcefire,该公司从 Snort 的开源基础上构建。在 Raspberry Pi 上使用 Snort 的注意事项:资源需求使得即使是低速率 Snort 传感器也会超出 Raspberry Pi 提供的范围。建议在运行 Snort 之前先关闭 Snort 上的进程,以获得良好的功能。Snort 可以从 Kali Linux 安装运行,但它不是预安装的。

如果我们对该平台的局限性感到满意,但决定继续前进,我们将确保在桥接接口之前下载并更新 Snort,否则我们将无法访问 Internet。我们甚至可能想考虑添加第三个无线或以太网适配器,以便在利用其他两个端口进行桥接的同时为更新提供 Internet 访问。

让我们看看,一旦我们的中间人桥接器以以下方式建立起来,如何安装和使用 Snort:

  1. 第一步是使用apt-get install snort命令下载所需的文件。

  2. We'll be asked to configure the IP range of interest for our home network now, as shown here:

    Exploring Snort

  3. APT 现在将完成 Snort 的安装以及我们和大家的所有依赖项!我们都准备好了!

  4. Working with Snort can be a detailed process, but we can use the simple snort -V command to see if it is successfully installed and report the version back:

    Exploring Snort

从这里,我们可以决定将 Snort 和 Raspberry Pi 配置为在 IDS 模式下作为混杂的传感器,从监控镜像交换机端口分析仪SPAN端口接收重复的流量。在线部署(Pi 实例上的 Snort 位于流量的直接路径中)应限制在较低带宽和实验室实例上,因为 Pi 缺少在该角色中保持高可用性的资源。一个人可以写一整本关于 Snort 的书,并且有一些书专门讨论这个主题。同样,Snort 文档是一个很好的资源,可以从以下方面入手:

https://www.snort.org/documents

现在,让我们简单地键入./snort -i eth0;这将启动 Snort 并在以太网0上侦听。还有许多更高级的配置,允许您捕获并运行 syslog 服务器上的所有内容以进行进一步分析。默认情况下,Snort 会将所有内容记录到终端屏幕,如下面的屏幕截图所示。如果很难看到,请不要担心,因为消息在屏幕上快速滚动,这就是大多数人将登录到外部 syslog 服务器的原因。

Exploring Snort

如果这是 Pi 的长期角色,我们可能会决定将 Snort 设置为通过脚本自动启动。下面的示例演示了如何创建一个脚本,以便在启动 Raspberry Pi 时自动启动 Snort。它显示了我们如何将两个接口配置为网桥组的一部分,启用该组,然后对通过该组的流量同时释放 TCPdump 和 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 列表进行大量手动调整;但是,大多数商业产品提供的内容类别会自动更新为新的网站标签。要求内容过滤器的最常见用例是阻止商业网络中的不适当内容,如色情内容。通常情况下,内容过滤器与网络代理或应用层防火墙提供的功能捆绑在一起,我们还看到了类似 OpenDNS 的云服务的大规模推广,它可以在几乎任何支持 IP 的设备(包括 Raspberry Pi)上配置为我们的 DNS 转发器。

要使用 Raspberry Pi 本身进行过滤,我们现在有更多的选项。儿童安全https://github.com/swooningfish/kidsafe 在本书的第一版中展示了它,但它在两年内没有被更新,而类似的方法使用 SQUID Web 代理作为基础,如 Po.T4。http://www.squidguard.org门卫https://www.abdullahirfan.com/my-projects/gatesentry/ ),都是新兴的替代品。我们鼓励您评估好您的需求,并根据预期的通信量,决定是否将此逻辑上联机或作为路由器的单臂代理。KidSafe 在第一版中展示了,所以让我们来看看如何安装最新的项目,GateSentry。

GateSentry 作为内容过滤选项

GateSentry(现在也在 GitHub 的上)https://github.com/fifthsegment/gatesentry )和许多基于 Linux 的 web 过滤工具一样,利用 Squid 代理服务来保护我们的用户。与一些旧的软件包不同;然而,它也为我们提供了一个非常灵活的基于 web 的界面,在 Pi 上高效运行(使用Lighttpd),并在我们修改策略时简化了我们的工作。在我们研究该项目时,它最近已升级到 1.0 版,并作为自定义 Raspbian 图像的一部分分发,可在此处找到:https://www.abdullahirfan.com/releasing-gatesentry-v1-0-beta/ 。下面是安装 GateSentry 的方法:

  1. 我们首先需要从项目网站下载并提取 3GB 图像 https://archive.org/download/gatesentryv1/backupSmall.img 并使用我们最喜欢的工具将此图像刻录到备用 SD 卡上,就像我们使用第 1 章中的ddWind32DiskImager实用程序一样选择渗透测试平台

  2. 现在,我们可以将 SD 卡安装到一个不插插头的覆盆子 Pi 中,确保其正确就位。我们现在可以简单地插入覆盆子 Pi 并允许它启动。

  3. 一旦 Raspberry Pi 启动,我们就可以使用默认 Raspbian 凭据通过 SSH 连接到它。

  4. 拉斯比安本身就很整洁,没有虚饰。我们希望使用sudo apt-get install raspi-config安装他们的 slick 配置工具,这样我们就可以更改密码(我们肯定要更改)、Squid 的日志记录选项和启动选项。

  5. 让我们通过键入sudo raspi-config来启动该工具:

    • 我们现在可以扩展文件系统并查找pi密码,该密码应该更改
    • 我们还可以禁用 Squid 的日志记录,这可以帮助我们保持图像较小,避免 SD 卡溢出
  6. We can access the web-based configuration panel by visiting Error! Hyperlink reference not valid . The default login credentials (which should be changed immediately) are as follows:

    登录后,我们会看到一个友好的门户:

    GateSentry as a content filtering option

  7. GateSentry will assume that we want it to start up a proxy-enabled wireless SSID for us - if this is for a traveling setup (business trip, hotel network, and so on) then that might be something we consider. If we want to, we can change or disable the automatic SSID configured by going to Internet | wifi :

    GateSentry as a content filtering option

  8. 现在,我们可以简单地打开客户端计算机的浏览器,并将代理配置为显式手动代理配置:

    • IP:
    • 端口:8080
    • 为 HTTP 和 HTTPS 通信量设置
  9. 或者,如果我们控制了路由器或默认网关,我们可以访问该设备的文档,并按照指示透明地重定向主机流量,而不会对每个用户造成影响或不便。我们可能还希望确保强制流量通过代理(例如,使用 ACL 或 iptables 条目),并且放弃绕过这些保护的尝试。

  10. 最后,我们希望安装项目的证书(在前面显示的版本信息页面中提供)或我们自己的签名 SSL 证书作为根证书颁发机构。这将允许我们的 Pi 充当中间的授权人,服务器和客户端都可以信任它来完成 HTTPS 流量的路径。

我们当然在 GateSentry 中有一些灵活的功能,开发人员已经尽了最大的努力使其既高效又友好。完成此设置后,我们可以快速构建自己的内容和 URL 过滤规则。报告功能正在开发中,但开发人员非常活跃,因此我们将密切关注存储库,以利用他所做的一些出色工作。

使用 OpenVPN 进行远程访问

虚拟专用网VPN)是许多组织必不可少的安全要素。VPN 使我们能够像在现场一样直接连接到远程网络,并使用加密保护客户端和连接网络之间的通信。这可以防止许多中间人攻击,让我们在外出时更有效率。OpenVPN(https://openvpn.net )可以将我们的 Raspberry Pi 变成 VPN 服务器,以极低的成本提供这些和其他好处。

OpenVPN 设置围绕两个实体:服务器(我们的 Pi)和一个或多个客户端(希望访问的远程主机)。我们的大部分配置工作将在服务器上完成,因此我们将首先介绍这一部分,分为三个部分:安装、证书颁发机构设置,然后是配置和启动。然后,我们来看看如何安装和配置客户端的东西——谢天谢地,这是一项简单得多的任务。

服务器安装

让我们看看如何使用以下步骤将 Raspberry Pi 转换为 VPN 服务器或集中器

  1. 在第一步中,我们将按照第 1 章选择渗透测试平台中的步骤,通过 NOOBS 软件包或直接从 Raspberry Pi 网站安装所选的最新 Linux 映像。Raspbian 和 Kali 都可以运行 OpenVPN。我们选择了卡利(嘿,很熟悉!)。
  2. 接下来,我们要确保使用第 1 章选择渗透测试平台中讨论的apt-get updateapt-get upgrade命令更新图像。
  3. 由于此解决方案的目标是面向外部,因此我们强烈建议在启动 OpenVPN 配置之前更改默认密码。
  4. 默认情况下,OpenVPN 并不总是安装在大多数操作系统上,因此我们需要使用apt-get install openvpneasy-rsa来安装它。如果已经存在,软件包经理会告诉我们。

服务器证书颁发机构设置

接下来我们要创建一个证书颁发机构CA),它允许我们托管一个公钥基础设施PKI)并生成密钥来保护我们的 VPN 服务器。以下是将 Pi 设置为 CA 的步骤:

  1. 我们将使用easy-rsa实现此目的,卡利也提供此功能。如果我们还不是 root 用户,我们将需要成为 root 用户,所以在继续之前,请确保键入sudo -s。我们现在可以使用以下命令为密钥创建一个新位置,然后将所有内容从默认的easy-rsa文件夹复制到 OpenVPN 特定的easy-rsa文件夹:

     mkdir /etc/openvpn/easy-rsa
    
     cp -r /usr/share/easy-rsa/** /etc/openvpn/easy-rsa
    
     chown -R $USER /etc/openvpn/easy-rsa
    
    
  2. Now we'll want to edit the variables that go into generating our certificate. We can do so by employing our favorite editor (which for us remains nano, but any one will do) and editing the /etc/openvpn/easy-rsa/vars file, with the mission of scrolling down to and changing the typical fields, such as KEY_COUNTRY , KEY_PROVINCE , KEY_CITY , KEY_OU , KEY_ORG , and so on. These fields will be included in the certificate and key pairs.

    Server Certificate Authority setup

  3. 修改完成后,可以保存并退出编辑器(按Ctrl+X,Y保存,按Enter选择vars的默认文件名)。

  4. 现在,我们将通过输入/etc/openvpn/easy-rsa/source vars并查看提供的信息来构建新证书。

  5. We'll clean out the old keys now with ./clean-all and then build our new certificate authority (with corresponding keys) by using the ./build-ca command. Hopefully, all of our changes to the var file will be shown, but this offers a last chance to change them before committing them to this certificate, as seen in the following screenshot:

    Server Certificate Authority setup

  6. 现在我们的 CA 已经配置好了,我们可以使用./build-key-server server生成服务器端证书。我们还可以使用./build-key client[X]构建客户端证书,其中X是客户端的任意 ID。与 CA 本身一样,我们有机会修改密钥的公共属性,甚至会要求我们在颁发之前输入密码短语。这样,当导出到另一台机器时,我们就可以在某种程度上保证在远端导入该密钥是正确的。因此,对于单个客户机,让我们使用./build-key client1。作为替代方案,我们甚至可以使用用户名作为唯一 ID(例如,./build-key mrrobot)。

  7. 我们还需要一些(DHDiffie Hellman(DH)密钥,这些密钥用于帮助在我们的服务器和客户端之间建立共享密钥,以便它们可以依次构建并同意双方共同生成的加密密钥。我们可以使用./build-dh构建这些 DH 密钥.这可能需要一些时间,所以我们等着喝一杯吧。

  8. When all of this PKI stuff is done, we end up with some essential keys and certificates that can help client and server establish encrypted channels, which we can see when we list the files in the key subdirectory:

    Server Certificate Authority setup

与我们的客户名称(client1.*ca.crt文件匹配的文件都应安全地复制到客户本身。我们需要确保完全的隐私——这些运动中的钥匙可能会被嗅探和泄露,这真的会伤害我们的隐私和保密性,不是吗?

服务器配置及启动

一旦我们的 Linux 构建升级,我们就有了我们的 PKI,现在我们需要配置我们的服务器并遍历诸如侦听接口、指向正确证书等项目。首先,我们将利用基本安装中的示例配置文件,并在安装目录中创建一个副本:

  1. 我们可以使用cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/从示例文件夹中提取模板。

  2. 我们需要使用gzip -dk server.conf.gz解压该文件。-d标志解压缩,k标志保留压缩版本,只是为了我们的方便。

  3. Once again, we'll fire up our trusty editor and follow the directions included in the template - this does a great job of providing comments throughout to guide us and ensure what we have is a configuration that matches our intent. All of these details are captured in our server.conf file, with our modifications of the included example given as follows:

    local 10.5.8.74 #Use your Pi's IP Address here
    
    dev tun #You can use Tunnel or Tap interfaces.
    
    proto udp #UDP or TCP - UDP more common
    
    port 1194
    
    # The following section points to all of our PKI artifacts
    
    ca /etc/openvpn/easy-rsa/keys/ca.crt
    
    cert /etc/openvpn/easy-rsa/keys/server.crt
    
    key /etc/openvpn/easy-rsa/keys/server.key
    
    dh /etc/openvpn/easy-rsa/keys/dh2048.pem
    
    # This line defines the range of IPs that will be given to 
    
    # client-ends of the tunnel. The Server will take the 1st 
        address
    
    topology subnet
    
    server 10.8.0.0 255.255.255.0
    
    ifconfig-pool-persist ipp.txt
    
    # This adds a route to Client table for the OpenVPN Server
    
    push "route 10.8.0.1 255.255.255.255"
    
    # This adds a route to Client table for the OpenVPN Subnet
    
    push "route 10.8.0.0 255.255.255.0"
    
    # This is the local subnet the clients will have access to.
    
    push "route 10.5.8.0 255.255.255.0"
    
    # Set DNS addresses to OpenDNS and force clients to route 
    
    # all traffic through the server acting as default gateway
    
    push "dhcp-option DNS 208.67.220.220"
    
    push "dhcp-option DNS 208.67.222.222"
    
    push "redirect-gateway def1 bypass-dhcp"
    
    # Allow client to client communications via OpenVPN
    
    client-to-client
    
    # Allow multiple clients to use the same certificate (best only
    
    # for lab use)
    
    duplicate-cn
    
    #Care and feeding - establish ground rules and conventions
    
    keepalive 10 120 #Can be tuned if link requires it
    
    tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
    
    cipher AES-128-CBC #Select a cipher both ends can do
    
    comp-lzo #Compression enabled
    
    # Set OpenVPN to be a non-root user
    
    user nobody
    
    group nogroup
    
    persist-key
    
    persist-tun
    
    # Setup logging (helps troubleshooting)
    
    status /var/log/openvpn-status.log 20
    
    log /var/log/openvpn.log
    
    verb 1
    
    

    只需按Ctrl+X退出,Y保存,输入选择server.conf默认值即可。

    从这里,我们可以使用一个简单的openvpn server.conf启动服务器:

    Server configuration and startup

客户端配置及启动

与服务器端设置相比,我们的客户端将更容易。为此,我们使用了 C&C 服务器,但是有很多可能的客户端和方法来配置两端,因为它们与 PKI、共享密钥、路由方法等的使用有关。我们正在使用中的参考文档 http://openvpn.net/ 为了让我们保持诚实:

  1. 我们首先需要挑选一个客户。存在多个兼容的客户端,但 OpenVPN 自己的客户端同样适用于 Windows、Mac OS X 和 Linux。我们会处理的。

  2. 对于 Linux/MacOSX 客户机,我们需要编辑client.conf文件来完成一些关键的事情。Windows 用户将对client.ovpn进行相同的更改:

    • 我们需要通过更改cacrtkey参数中列出的文件来确保它指向我们之前导入的文件。
    • 然后,我们需要编辑remote指令以指向 OpenVPN 服务器的 IP 或主机名,在那里我们将使用我们为 VPN 会话映射的公共 IP 端口。
    • 最后,我们希望修改dev(意味着设备,tap 或 tun 接口)、proto(UDP 或 TCP)以及任何替代方案,如comp-lzo(用于压缩)和片段,以匹配我们的架构。
  3. We'll save the client.conf file, and now for the moment of truth! Let's enter openvpn client.conf on the remote host, and what we should see is messages on both server and client that we are establishing tunnels, negotiating encryption, and giving us the link we seek. First, here is the client view:

    Client-Configuration and Startup

现在我们有了服务器的观点:

Client-Configuration and Startup

我们可以看到,我们已经建立了一个隧道,对隧道远端和我们配置的 LAN 子网上的其他主机进行快速 ping,确认我们已完全进入隧道!

对服务器路由表的额外调整实际上可以让我们转发绑定到 web 的请求,而不仅仅是提供本地连接的主机。如果路径中有防火墙,它们也需要允许使用外部地址(通常是公共 IP)形成隧道。

如果我们想要一个基于 GUI 的客户端,我们可以安装一个,比如粘度(https://www.sparklabs.com/viscosity/ )。一旦我们的 VPN 隧道就位,这可以为我们的通信提供一些保护,使其免受窥探。如果我们想要匿名,我们需要将 VPN 提高一个等级,这就是**洋葱路由****【Tor】**的用武之地。

Tor 网络

Tor(https://www.torproject.org/ ),是用于匿名访问互联网的最终用户软件和网络组件系统。当我们(或任何有隐私意识的个人)使用 Tor 时,他们正在使用一个志愿者节点和服务系统来路由和屏蔽流量。我们使用 Tor 使得跟踪我们的互联网使用和拦截我们的流量变得困难。这使我们既可以对与我们通信的人隐藏我们的位置,又可以防止任何知道监控我们的物理连接的人检测到我们正在与谁交谈。

但是怎么做呢?Tor 中继通过随机选择其他启用 Tor 的系统作为从一点到另一点逐跳通信的路径来建立连接。加密用于保护除最后一个跃点以外的所有跃点,每个中继节点只知道流来自哪个相邻的跃点以及它所指向的下一个跃点。这有助于提供匿名性。端点通过使用特殊软件访问 Tor 网络,该软件可以指向那些 Tor 出口节点并通过 Tor 网络推送流量。这种特殊的软件可以驻留在一个可以代理流量的网关上,但到目前为止,最常见的最终用户访问方式是通过一个经过修改的浏览器(例如 Tor browser,这是一个经过隐私调整的 Firefox 版本)。Tor 最大的问题之一是它是否像以前一样安全,特别是对于运行旧客户端的用户。对于较旧的 Tor 软件,已经有了解密流量的已知方法。即便如此,许多用户仍然感到紧张,特别是在美国国家安全局零日即将到来的情况下。正因为如此,许多人选择其他平台进入黑暗网络。

下图显示了两个系统如何使用不同的路径在 Tor 网络上来回通信:

Tor networking

我们的 Raspberry Pi 可以配置为Tor 中继或 Tor 出口节点。Tor 中继节点参与加密流量的逐跳传输,并提供我们用于匿名传输信息的结构。Tor 出口节点(也称为 Tor 路由器)充当用户进入结构的入口和/或出口点,并帮助引导流量,使其到达目的地。拥有 Tor 出口/路由器节点,无需所有系统了解 Tor 并运行特殊的 Tor 软件来访问 Tor 网络。

让我们看看如何将 Raspberry Pi 转换为 Tor 中继节点和 Tor 出口/路由器节点。

覆盆子

Tor 的实力随着每一个新加入的节点而得到提升——更多的节点提供多样性和容量,可以提高我们所有人的可用性和保护能力。我们可以将运行 Kali Linux 的 Raspberry Pi 转换为 Tor 中继节点,这样我们也可以参与 Tor 项目。我们为共同利益所做的事情!

提示

运行 Tor 节点可能有法律或道德约束和要求。我们建议您在运行 Tor 之前进行研究,以了解其含义。运行 Tor 节点可能意味着匿名用户将使用您的 Internet 连接进行可能的恶意或非法活动。此外,随着丝绸之路 2.0 的关闭和其他执法逮捕,Tor 的匿名性最近受到质疑。

如果我们打算使用 Kali Linux Raspberry Pi 参与 Tor 网络,我们需要使用以下步骤进行一些清理工作:

  1. 首先,我们将关闭在 Raspberry Pi 上运行的任何多余服务或应用程序。如果我们不确定正在运行或安装的是什么,那么最好从干净的安装开始,或者改用 Raspbian 发行版。

  2. 我们还应该更改根密码。我们应该至少使用 12 个字母数字字符。如果太多 Tor 节点受损,它可能会对其应该提供的安全性产生怀疑。

  3. 然后我们将安装sudo软件包并添加 Tor 用户名。这样,我们就不必使用 root 用户名。我们还将更新和升级我们的软件;使用以下步骤:

    apt-get install sudo
    
    adduser tor
    
    passwd tor
    
    apt-get update
    
    apt-get upgrade
    
    
  4. We will also need to add the tor account to the list of sudoers. We can do this by editing the /etc/sudoers file. Let's type the sudo visudo command then add the line tor ALL=(ALL) ALL .

    visudo命令是编辑sudoers列表的传统且最普遍接受的方式。但是,在某些操作系统中,此命令不可用。在这些情况下,您需要直接编辑sudoers文件。您可以使用vi /etc/sudoers命令执行此操作。

    Raspberry Tor

  5. We need to change the default DHCP behavior of Kali Linux to a static address. Technically, we could keep a DHCP address, but most likely we will need a static address on the device. We'll type the ifconfig command to see our network interfaces. We should see something like what's shown in the following screenshot. Let's record that for later use:

    Raspberry Tor

    现在我们将编辑网络接口文件。我们将使用nano,但您可以使用您最喜欢的编辑器。使用sudo nano /etc/network/interfaces命令。

    我们将查找表示接近iface eth0 inet dhcp的内容的行,如以下屏幕截图所示:

    Raspberry Tor

    我们可以将该行更改为静态地址。在我们的示例中,我们将使用以下命令更改为静态 IP10.5.8.74,子网掩码为255.255.255.0,默认网关为10.5.8.1

    iface eth0 inet static 
    
    address 10.5.8.74 <- chose an IP that fits to your network!
                This is only an example! 
    
     netmask 255.255.255.0 <- Apply the correct settings 
    
    network 10.5.8.0 <- The IP network 
    
    broadcast 10.5.8.255 <- enter the IP broadcast address 
    
    gateway 10.0.1.1 <- Enter your router or default gateway 
    
    

    在这里,我们看到了接口的最终配置:

    Raspberry Tor

  6. Now, let's install Tor. Type the sudo apt-get install tor command. Edit the tor configuration file in /etc/tor/torrc . We will also need to add or change the configuration to match the following lines. It is okay if there is excess stuff in the configuration file.

    添加或更改以下内容以匹配配置:

     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) 
    
    

    与我们编辑的任何文件一样,我们将按Ctrl+XY进入保存并退出编辑模式。

  7. 现在,让我们确保从您的防火墙到我们的 Raspberry Pi 的 TCP 端口90309001是打开的。我们希望确保外部世界也能联系到这些港口。我们可能需要使用静态(或一对一)NAT 语句将网络地址翻译为NAT)您的树莓 Pi。如果你有一个家庭路由器,这有时被称为非军事区DMZ)或游戏端口。

  8. 重新启动系统。

  9. Now, start Tor by using the sudo /etc/init.d/tor restart command in CLI. Check the tor log file to ensure the service has started. The tor log files are located in /var/log/tor/log . You can view the log files by issuing the less /var/log/tor/log command. Look for the entry Tor has successfully opened a circuit. Looks like client functionality is working . If you see this, you have set up your system correctly.

    Raspberry Tor

在这一点上,我们很可能希望使用 Tor 客户机进入 Tor 网络。有许多客户端可用于各种操作系统。如果我们访问https://www.torproject.org/docs/installguide.html.en 我们将找到在许多常见平台上安装 Tor Browser 的说明。

此时,我们有一个功能齐全的 Tor 中继节点和一个 Tor 客户端来访问 Tor 网络。在配置产品时,除了终端上的一些信息和状态消息外,我们不会看到太多。还有其他子项目,如匿名中继监控ARM-https://www.torproject.org/projects/arm.html.en ),这将为我们提供有关流量和节点参与状态的更多信息,我们可以通过这些信息进行切换。此处可以看到正在工作的手臂的示例视图:

Raspberry Tor

Tor 出口节点或路由器

上一节解释了 Raspberry Tor 如何将 Raspberry Pi 转换为 Tor 节点。通过 Tor,我们可以连接到节点并匿名使用我们的流量,并支持 Tor 网络上的其他用户。为了连接到一个节点,我们通常需要使用特殊的软件。如果我们想通过 Tor 运行我们的整个网络,以便来自我们网络的所有流量保持匿名,该怎么办?这可以通过将树莓 Pi 转换为 Tor 路由器来实现。

例如,我们可以将 Raspberry Pi 插入我们的外部路由器,并广播用户可以连接的私有 SSID,并通过 Tor 网络过滤他们的流量。这是建立快速移动热点的理想选择,该热点使用 Tor 屏蔽所有用户流量。

让我们看看如何使用以下步骤将 Raspberry Pi 配置为 Tor 路由器:

  1. 第一步是从下载 Raspbian 的最新版本 http://www.raspberrypi.org/downloads/ 。我们将需要解压文件后,我们已经下载了它。

  2. 将 Raspbian 映像安装到我们将在 Raspberry Pi 中使用的 SD(microSD)卡上。我们在第一章选择渗透测试平台中介绍了这个过程。我们的镜像命令如下:

    sudo dd if=2016-09-23-raspbian-jessie.img of=/dev/disk2
    
    
  3. 用我们安装在 microSD 上的树莓图像启动我们的树莓 Pi。Raspbian 的默认用户名和密码为piraspberry

  4. 当您登录到 GUI 桌面时,我们将在桌面上打开终端应用程序。我们将键入sudo apt-get update命令,后跟sudo apt-get upgrade

  5. 我们需要安装一个 DHCP 服务器。我们将通过这样做得到错误,但忽略它们。键入sudo apt-get install vim tor hostapd isc-dhcp-server命令。

  6. 接下来,我们将使用您最喜欢的编辑器编辑/etc/dhcp/dhcpd.conf文件。打开/etc/default/isc-dhcp-server文件,转到最后一行。将INTERFACES行编辑为INTERFACES="wlan0"。请确保在我们的配置中包含带有wlan0的报价。

  7. 我们需要编辑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
    
    
  8. 下一步,我们将要用加密配置 Raspberry Pi,以便我们的无线网络具有安全性。我们需要创建一个名为/etc/hostapd/hostapd.conf的新文件。

  9. We will configure our hostapd.conf file for WPA2-PSK encryption, an SSID of DrChaos, and a password of Kali Raspberry. Of course these settings can be changed to anything of our liking. Create a file called /etc/ hostapd/hostapd.conf or download it from a source like http://www.adafruit.com/downloads/adafruit_hostapd.zip , and place it in the /etc/hostapd directory. We might need to create the directory in the following manner:

    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"
    
    

    现在,让我们打开/etc/sysctl.conf文件,从net.ipv4.ip_forward=1行删除注释,使其处于活动状态。

  10. 我们现在可以通过键入以下命令打开 IP 转发:

```
echo 1 > /proc/sys/net/ipv4/ip_forward 

```
  1. Next, we will add some simple iptable rules to NAT and route our data from wireless to the Internet.
### 提示

以下 iptable 规则非常宽松。在某些情况下,这些规则可能会公开客户端的真实 IP 地址。如果要添加额外的安全层,请跳过步骤 16(或将 echo 从 1 更改回 0),并明确说明允许哪些连接。
  1. Adding the following commands in iptables, we'll be able to assesses the data:
```
 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 路由的数据:

![Tor Exit node or router](img/Image00210.jpg)
  1. 接下来,我们需要按照以下方式编辑/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 

```

我们现在可以将 Raspberry Pi 上的有线连接插入互联网。此时,我们连接的无线用户将能够使用 Kali Raspberry 的密码连接 DRD SSID。所有流量将通过 Tor 网络进行传输。

当我们打开 web 浏览器并转到时 https://check.torproject.org/ ,我们将收到一条消息,显示我们是否在 Tor 上,如以下屏幕截图所示:

Tor Exit node or router

使用 QEMU 模拟器在 PC 上运行 Raspberry Pi

有时,我们可能想测试一些 Raspberry Pi 映像,但我们没有 Raspberry Pi 可用于安装新映像。此外,我们可能希望确保特定的安全工具功能正确,或者图形界面是我们喜欢的,而无需重新安装 ou-Pi。这就是 QEMU 的用武之地。

**快速仿真器(QEMU)**是一个仿真器,让我们模拟许多不同的处理器,并在另一个操作系统上加载许多不同的操作系统。在我们的例子中,我们模仿了 Raspberry Pi 中基于 ARM 的处理器,并成功地加载和运行了多个操作系统,就像我们在真正的 Raspberry Pi 上所做的那样。仿真并非没有问题。有时,即使操作系统在真正的 Raspberry Pi 硬件上完全没有问题,操作系统也不会加载或出现性能问题、崩溃、停止工作等等。由于这些问题,我们的里程可能会有所不同,我们应该权衡使用 QEMU 的利弊,而不仅仅是将其安装在真正的 Raspberry Pi 上。我们不应该指望 QEMU 仿真的稳定性,而应该只是粗略了解仿真软件的外观以及它在真正的 Raspberry Pi 硬件上提供的功能。

让我们看看如何使用以下步骤安装 QEMU 仿真器:

  1. Our first step is to visit http://qemu.weilnetz.de/ and download the QEMU emulator for Windows, as shown in the following screenshot:

    Running Raspberry Pi on your PC with QEMU emulator

    还有一个 Linux 版本,以及一个使用自制和 XTools 的 Mac OS X 端口,可以帮助我们实现同样的目标。我们将在下一个示例中展示 PC 版本。我们发现 Windows 版本最容易安装,Linux 版本最可靠,Mac 版本有点难以使用和正确安装。您的里程可能会有所不同。

  2. 接下来,我们需要下载 LinuxQEMU 内核文件。我们可以通过来实现 https://github.com/dhruvvyas90/qemu-rpi-kernel 。一旦我们下载了内核,我们将把它放在与刚才解压缩的 QEMU 文件夹相同的目录中。

  3. 如果我们还没有下载合适的树莓图像,我们应该现在就下载。同样,我们可以使用 Kali Linux ARM 映像,也可以下载任何兼容的映像。我们将使用可在下载的 Raspbian 操作系统 https://www.raspberrypi.org/downloads/

  4. 我们将选择适当的版本(64 位或 32 位)。下载正确版本后,让我们运行install exe文件。我们将看到,在大多数情况下,没有选择 PC(i386)系统仿真。我们希望确保选择此选项。请注意 QEMU 的默认安装目录。在大多数情况下,它是C:\Program Files\qemu。我们不会改变它,因为它会让我们的生活变得悲惨。

  5. 解压 IMG 文件并将其与 QEMU 放在同一位置后,我们需要运行它。让我们转到 DOS 提示符并导航到c:\ProgramFiles\qemu

  6. We will launch the Raspbian image system (or any Raspberry Pi image system) with the following command:

    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 似乎在较新的操作系统上做得更好。

  7. 命令的第一部分启动特定处理器的仿真器。命令的第二部分指定磁盘映像文件,在本例中为raspbian.img。在向 QEMU 指定要启动的内容时,我们不能忘记使用我们的标志。这样,在运行 QEMU 时将使用我们想要的所有选项。

我们的 Raspberry Pi 定制操作系统将在 QEMU 窗口中启动。我们现在可以与操作系统交互并测试不同的应用程序和工具。此外,QEMU 文档还提供了用于在多个模拟器之间联网、映射到物理硬件设备以及其他高级配置的高级配置选项。在大多数情况下,模拟器可以完美地测试典型的应用程序和连接性。玩得开心!QEMU 是帮助虚拟实验室的一个有用工具,并且具有针对平台的仿真功能,远远超过 Raspberry Pi。

以下是 Windows 主机的屏幕截图。我们可以在 QEMU 窗口中看到 Raspbian 图像。

Running Raspberry Pi on your PC with QEMU emulator

在 Raspberry Pi 3 上运行 Windows 10

什么我们读对了吗?不,我们没有疯。随着 Windows 10 IoT 核心版的发布,我们能够在 Raspberry Pi 上运行 Windows 10。拥有运行 Windows 操作系统的能力确实会带来更多的可能性。因此,让我们开始启动并运行它的过程。

  1. First we need to go to the developer site on https://www.microsoft.com/en-in/ for Windows 10 IoT Core location here: https://developer.microsoft.com/en-us/windows/iot . The following is the screenshot of the developer's page:

    Running Windows 10 on Raspberry Pi 3

  2. Once on the Windows 10 IoT Core screen, we'll click the Get started link, and that will open up a view of all the most popular devices. We should see the Raspberry Pi 3 listed as an option, and select that box:

    Running Windows 10 on Raspberry Pi 3

  3. Once we select the Raspberry Pi 3 , we will be presented with the installation media type we want to use. We have the option to Install onto my blank microSD card , or we can Install with NOOBS . We chose to use the NOOBS option since we were already familiar with NOOBS.

    Running Windows 10 on Raspberry Pi 3

  4. 在选择了安装 NOOBS选项后,我们将看到安装 Windows 10 IoT 核心的 4 个步骤。首先,我们需要确保我们已经有了 Windows10 工作站。这将允许我们使用物联网核心仪表板应用程序,以及使用 Visual Studio 开发应用程序。我们需要 10.0.10240 或更高版本。如果我们没有运行 Windows 10 或正确的版本,我们可以在此处升级:https://www.microsoft.com/en-us/software-download/windows10

  5. 下一步是获得 NOOBS。如果我们有一张新的 microSD 卡,我们可能已经有了 NOOBS。我们没有,因为我们已经为本书的各个部分多次重新安装了我们的。因此,我们选择在此处获取网站位置的 NOOBS 问题:https://www.microsoft.com/en-us/software-download/windows10

  6. 一旦我们有了图像,我们需要在 microSD 卡上输入。我们可以参考第 1 章选择渗透测试平台来了解如何做到这一点。

  7. After we have NOOBS installed on our microSD card, we can put it back into our Raspberry Pi and boot it up. Once that boots up, we will need to select a Wi-Fi network. Choose the appropriate Wi-Fi network along with the correct authentication method.

    Running Windows 10 on Raspberry Pi 3

  8. Next, we will see a list of operating systems that we can install. Let's select the Windows 10 IoT Core from the list and hit the Install (i) button at the top.

    Running Windows 10 on Raspberry Pi 3

  9. We will be asked to confirm whether we wish to overwrite our microSD card. We can hit Yes to acknowledge we are ok with wiping our microSD card.

    Running Windows 10 on Raspberry Pi 3

  10. The next screen we can see the progress bar. The first part of the install creates the filesystem for us, and this step only takes couple seconds.

![Running Windows 10 on Raspberry Pi 3](img/Image00220.jpg)
  1. After the filesystem is created, we need to decide which version of Windows 10 IoT we want to use. Let's select the appropriate release and hit ok. We chose the Windows 10 IoT Core RTM release as we felt this would be the more stable release. The insider release is the most recent release that is under development.
![Running Windows 10 on Raspberry Pi 3](img/Image00221.jpg)
  1. Next, we will need to read and accept the End User License Agreement ( EULA ). Once this is completed, the install can then commence.
![Running Windows 10 on Raspberry Pi 3](img/Image00222.jpg)
  1. 安装不会花费太长时间。在我们的实验室,大约花了 10 分钟。安装完成后,我们需要重新启动 Raspberry Pi 以启动到新安装的 Windows 机箱中。
  2. 一旦 Raspberry Pi 返回,它将在执行文件系统检查时引导到 Windows 10 屏幕。然后,系统会提示我们选择要使用的网络接口。如果我们有有线网络连接,我们应该已经有了通过 DHCP 分配的 IP 地址。我们还可以选择将无线适配器连接到 SSID。选择适当的界面后,我们将单击下一个屏幕进入主屏幕。

Running Windows 10 on Raspberry Pi 3

优秀的我们现在在 Raspberry Pi 上安装了 Windows 10 IoT。现在,要真正使用它做任何有用的事情,我们需要一个 Windows 10 机箱来安装 Windows 10 IoT Core 仪表板。有了这个工具,我们将能够管理和交互我们的树莓 Pi。

最后,要为我们的 Windows 10 物联网设备创建任何项目/应用程序,我们需要安装 Visual Studio。相关链接和说明可在此处找到:https://developer.microsoft.com/en-us/windows/iot/Docs/GetStarted/noobs/getstartedstep3

一旦 VisualStudio 启动并运行,我们就可以开始构建项目了。在微软官方开发者网站上有很多令人兴奋的项目示例 https://developer.microsoft.com/en-us/windows/iot/samples 。但就像 Raspberry Pi 的开源部分一样,我们可以浏览很多致力于 Windows 物联网项目的社区网站。

树莓 Pi 的其他流行用例

Raspberry Pi 成功的最大原因之一是它的灵活性和定制能力。我们可以用 Pi 做任何事情,这使它成为一个激动人心的动态平台。

在接下来的几页中,我们将介绍一些使用 Raspberry Pi 的非常有趣的项目。再说一次,我们真的只限于我们的想象力。一路上有一个巨大的社区帮助我们,这也是覆盆子皮获得如此成功和持久力的另一个原因。

树莓天气

我们在 Raspberry Pi 中发现的最酷(双关语)的用例之一是能够建立和定制我们自己的气象站。Raspberry Weather 是基于 Raspian 图像构建的,因此我们可以直接从 NOOBS 或使用本章前面讨论的 Raspbian 图像进行安装。该网站是一个巨大的帮助,并提供了如何在我们的 Raspberry Pi 上的 Raspbian 中安装 Raspberry Weather 的说明。一旦应用程序启动并运行,这就是乐趣的开始。我们需要满足一些硬件要求才能开始。我们可以参考以下网站获取列表(https://www.raspberryweather.com/ )。

在天气应用程序中,我们可以绘制温度和湿度随时间变化的图表。以下是显示该类型图形的屏幕截图:

Raspberry Weather

这里重要的一点是,我们可用的信息类型将取决于硬件及其功能。

以下是一些屏幕截图,显示在 Android 设备上运行的个人气象站:

Raspberry Weather 的另一个非常酷的功能是,我们可以从 Google Play 商店安装一个 Android 应用程序,该应用程序可以修改为连接到我们自己的个人气象站。多酷啊!现在,每次我们在手机上查看天气时,它都会显示我们的个人气象站。苹果应用商店上也有类似的应用程序(搜索物联网或 Raspberry Pi),可以提供类似的集成和访问。以下是一些屏幕截图,显示在 Android 设备上运行的个人气象站:

Raspberry Weather

正如我们所看到的,这是一个非常酷的方式将我们的树莓 Pi 变成一个气象站,通过 Android 应用程序,无论我们去哪里,我们都可以看到我们家当前的天气状况。

皮亚瓦尔

我们可以将我们的树莓 Pi 与FlightAware一起使用 http://www.flightaware.com/ 建设自动相关监控广播ADS-B系统。ADS-B 是全球空中交通管制机构使用的一种合作飞机监视技术,用于确定卫星和其他导航系统报告的飞机位置。飞机定期广播其 ADS-B 位置,使其能够被跟踪。

FlightAware 拥有大量自己的接收器,但邀请航空爱好者跟踪航空公司数据并帮助 FlightAware 处理数据,因此可以在其网站上为整个社区使用。PiAware 是一个工具,它可以帮助我们把树莓 Pi 变成一个雷达跟踪系统,FlightAware 可以使用它。下图显示了为此目的构建的 Raspberry Pi:

PiAware

为了启动这个项目,我们需要下载 PiAware 操作系统并将其安装到 Raspberry Pi 上。请参阅本书第一章选择渗透测试平台,了解如何在 microSD 卡上为我们的 Raspberry Pi 安装操作系统。PiAware 可在找到 https://flightaware.com/adsb/piaware/

在我们用 PiAware 操作系统启动 Raspberry Pi 之后,我们需要将 ADS-B USB 接收器插入 Raspberry Pi。我们推荐 Noolec NESDR Mini USB RTL-SDR 和 ADS-B 接收器组,在美国购买价格约为 22 美元。下图显示了 NooElec NESDR Mini:

PiAware

飞机信号不能通过建筑物,所以我们应该把天线放在飞机的视线之外,以获得最佳信号。我们需要在注册一个免费的 FlightAware 帐户 http://flightaware.com/account/join/?referer=/account/join/ 。我们的数据将由 FlightAware 处理,30 分钟后可在查看 http://flightaware.com/adsb/stats

恭喜,我们现在有了一个工作系统!这是一个完全可操作的飞行跟踪器:

PiAware

皮普利

本书重点介绍渗透测试和其他安全需求;然而,我们认为这可能是一个很好的借口,添加一个像 PiPlay 这样的酷手臂图像,将我们的树莓 Pi 变成一个游戏系统。我们努力工作——我们应该休息一下。这包括许多流行游戏系统的模拟器,如 PlayStation、Game Boy、超级任天堂娱乐系统SNES)、NES、Atari 等。我们可以在找到更多信息 http://piplay.org/

要安装 PiPlay,我们可以使用与 Kali Linux 相同的过程。例如,我们使用sudo dd if=piplay-0.8-beta9.img of=/dev/disk2disk2空间中找到的 microSD 卡上安装了 0.8 beta 映像。安装后,我们只需使用已安装的 PiPlay 映像启动 Raspberry Pi,它就会启动到主 GUI,如下面的屏幕截图所示。如果单击箭头,我们将找到其他游戏系统的其他菜单选项和配置选项。

PiPlay

PiPlay 启动后,我们要做的第一件事就是查找更新。我们通过点击菜单中的大箭头来实现这一点,第三个屏幕显示更新 PiPlay选项。我们必须在线才能执行此操作,这样我们可以插入以太网电缆,或者在查找更新之前使用设置无线按钮建立无线连接。一旦我们联机,我们将在主菜单的右上角看到您的 IP 地址,正如您在上一个屏幕中所看到的。如果我们点击NES等操作系统,我们会发现我们没有任何游戏。我们可以在网上找到大量 ROM 格式的游戏文件。

下载 ROM 或制作备份副本可能违反版权或其他法律。ROM 有很多来源,其中一些是作者创作的原创游戏,免费或象征性地分发。ROM 的副本通常通过网站、usenet 新闻组和点对点类型的网络分发。

PiPlay 使安装带有一些内置刮板应用程序的 ROM 变得非常容易。就这些!我们可以下载一个 ROM,使用 scraper 应用程序来安装 ROM,识别添加到我们系统中的 ROM,我们应该可以很好地使用它。下面的屏幕截图显示了一个名为洞穴故事的游戏的开始屏幕,该游戏附带 PiPlay 安装的图像:

PiPlay

私家侦探

PrivateEyePi 是一个开源的家庭自动化和安全系统,可以集成大量的运动探测器、摄像头、热信号、红外和夜视。它可以通过简单的 web 界面或定制的移动应用程序进行监控和管理。下图显示了家庭监控系统的说明:

PrivateEyePi

由于系统有许多不同的选项,并且可能变得过于复杂,因此我们将不详细介绍如何配置它。名为 Gadjet 的作者记录了整个过程,包括零件、购买地点以及如何在安装它们的分步说明 http://www.projects.privateeyepi.com/home

下图显示了已启用的家庭监视器系统:

PrivateEyePi

下面是警报发出的屏幕截图:

PrivateEyePi

PrivateEyePi

需要一些基本的低电压经验来制造所有部件,或者我们可以购买许多预制造的部件。我们确实听到了一些关于这个项目的担忧。这些担忧主要集中在安全系统的可靠性,以及经济效益是否合理,因为基本报警系统的价格大致相同。然而,我们相信,作为一个团队、教室或爱好项目,这可能会很好。此外,扩展系统的定制和选项可能比主要商业供应商提供的任何产品都要大得多。

Raspberry Pi 在线上有数百个类似的家庭自动化和安全项目——如果我们搜索足够多,我们一定会找到可以让我们的生活更好,或者至少更有趣的项目和技巧。

总结

Raspberry Pi 从一开始就为我们提供了各种各样的应用程序和项目,我们可以进行探索。虽然本书的大部分内容只关注 Raspberry Pi 的一个具体实现——将其与 Kali Linux 一起用作渗透测试平台——但我们希望在本章中探索其他诱人的选项,以帮助激发您的兴趣并扩大您对所有这些项目都可以帮助开发的技能的了解。Kali Linux 之外的 ARM 映像,如 PwnPi、Raspberry Pwn、PwnBerry Pi 和 Windows 10,使该平台在任何安全测试中都具有重要的实用性。卡利目前是该领域的领导者,但我们相信了解其他领域的情况总是一个好主意。在本章中,我们还想展示一些其他与安全相关的用途,并在这样做的过程中将同一个经济高效的平台转变为防火墙和入侵检测系统、内容过滤器,甚至参与了名为 Tor 的匿名网络。为了证明我们并非都是生意人,我们还向您展示了其他一些非常酷的 Pi 项目,我们认为这些项目是使用该平台的有趣方式。

可能性是无穷的。我们已经看到它被用作一个低调但强大的桌面替代品、媒体服务器、Minecraft 服务器,最近,它还被用作一个家庭自动化中心,帮助简化和整合照明、安全和气候控制。

我们希望你们都喜欢读这本书,就像我们喜欢写这本书一样。用你的新技能去做伟大的(和好的)事情——记住,虽然我们写的是帮助实现技能,但只有实践和诚实的意图才能确保你做得很好,并且为了你的目标客户的利益。我们确实希望这本书能够帮助您成为一名更好的渗透测试人员,提高您的安全知识,或者为那些必须保护其系统的人提供一些视角。有乐趣和快乐的黑客!