树莓派的设计目标就是尽量适应各种对硬件配置要求较低的操作系统。光是有记录的树莓派使用场景就有数百种之多,很多厂家也为树莓派社区发布了经过裁剪的ARM平台安装映像。除了Offensive Security的Kali Linux之外,还有各种其他渗透工具集。
评估其他ARM平台的渗透测试系统时,我们发现大部分发行版彼此都很相似,用的工具也一样,甚至在很多情况下,就是同一个编译版。无论选择了哪个版本的ARM操作系统,它们中的大部分升级周期和时间线路也是一样的。当然到了最后,还是要选择一个最适合自己的发行版。如果不确定选哪个,别担心,就选择Kali Linux好了。
本章讲解了以下内容:
下面看一下除Kali Linux以外,其他可选的渗透测试平台。列表里排首位的PwnPi是最受欢迎的系统之一,有人甚至觉得它比Kali Linux更好。
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目录下。不同发行版之间的同一版本号程序,实际上就是相同的。
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
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。
本书的大部分内容都与攻击相关。但很不幸,有一天可能会发现自己的系统也需要抵挡各种攻击。这时候,你的防护手段就受到挑战了,希望此时你有合适的工具能及时发现攻击,避免入侵造成损失。
需要特别指出,树莓派并不适宜做网络防护平台。最好的做法是针对不同的入侵,部署不同的安全产品,如应用层控制、带状态信息的网络防火墙、入侵检测、访问控制、网络分段、恶意软件检测、网络监控、数据泄露等。要足以对抗当前的各种网络威胁,大多数此类产品都需要很高的处理能力和庞大的存储。很不幸,这些要求树莓派是无能为力的。
如果只是想在小型实验室环境测试基本的安全概念,比如用防火墙给网络划分网段或部署IDS扫描基本的威胁,那树莓派还是可以胜任便携实验室的功能的。某些ARM平台的硬件确实宣称适用于防护小型办公环境,然而还是不建议用树莓派来保护真实环境里的设备。
下面首先介绍怎样将树莓派变成IDS/IPS。在后文还会介绍树莓派的其他安全防护用法,如把树莓派用作VPN服务器或Tor节点等。
说不定什么时候,你就成了网络入侵的受害者。最好的防护方式就是针对网络上的各个层面,部署多种安全防护方案,如果出现了入侵者,某个工具就能识别出来并阻断攻击者。常见的防护工具包括从防火墙到入侵检测技术如IDS/IPS产品。
可以把树莓派配置成一个低成本IDS/IPS,以提供某方面的网络防护功能。但只能在很特定的情况下这么做,因为有更好的适合长期使用的IPS/IDS产品。凡是超出基本检测和拦截的事情,树莓派的运算能力和存储能力就无法应对了,因此只用作测试和培训用途就好。
说到IPS/IDS,首要的事情是怎么部署。典型的使用场景是路由器和其他网络设备之间,或者某个系统接入网络的位置。当然可以部署为只做入侵检测的系统,这意味着我们的设备只是监控网络流量的镜像,但不能做强制性的拦截。在下面的例子里,会用Snort实现的IPS系统作为中间人,串在笔记本电脑和外部网络之间。在连入一个不信任的网络又没有走VPN网络时,这种方式比较理想。这种部署模式树莓派需要两个有线网口,所以用一个USB有线网卡做第二个网口。
把树莓派部署成中间人攻击和把树莓派部署成中间人方式的IPS,其步骤是类似的。需要先把两块网卡的地址设置为0.0.0.,使用网桥程序把两块网卡桥接起来。具体步骤在3.4节讨论过。把两块网卡桥接为网桥需要用到命令如图6-8所示。
图6-8
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) &
内容过滤器用于读者浏览互联网时,授权他们可以阅览哪些类型的内容。以往的内容过滤器需要手工调整,如手工更新URL列表,然而现在大多数广告都会自动提供内容分类,自动更新网站标签。对业界网络管理员来说,最常见的使用场景是拦截互联网上某些不当内容如色情网站。通常来说,内容过滤系统和网络代理或应用层防火墙是功能绑定的。
下面介绍怎样把树莓派变成一个家庭办公环境里的内容过滤系统,方便父母控制孩子使用家里的网络。
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 下载免费的黑名单列表,即可获得已经分类好的各种网站的更新列表。
虚拟专用网络(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服务器了。
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节点和路由器。
可以把运行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客户端软件。以下是供参考的几个链接。
这时候就有了一个全功能的Tor中继节点和Tor客户端,可以接入Tor网络了。产品配置好后,除了在Tor终端上的一些基本信息和状态消息,其他就没什么需要特别关注的了。切换选择到终端的视图模式下,图6-31所示为能看到更多的流量和节点参与状态信息。
图6-31 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文件1 ,可以支持更多芯片 [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
读者可能也留意到了,本书内容里有各种图片和截图,所以在撰写本书时,要不断地在各种不同的操作系统之间切换、要截图、要测试不同的网卡和安装各种不同的软件程序。有时候需要从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
本书主要着眼于介绍树莓派在渗透测试中的应用。但除了用于渗透攻击,实际上它还有无数的使用场景,如攻击防护,或者较为不太正式的用法,如玩游戏。请前往树莓派大本营网站了解更多详情:http://www.raspberrypi.org/ 。
以下是在树莓派上适用的其他一些软件。
可以用树莓派和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 正常工作的飞行记录页面
虽然本书主要关注渗透测试和其他安全需求,然而我们希望多介绍一种很酷的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
PrivateEyePi是一款家用自动化和安防系统的开源系统,可以实现运动检测、摄像头、热源检测、红外和夜视功能。它有一个很简单的可用Web界面做监控和管理,也可以用于自定义的手机应用。图6-43显示了一套家庭监控系统架构的详细描述。
图6-43
因为这个系统有各种不同的选项,可以弄得非常复杂,这里就不深入配置的细节了。名为Gadjet的作者把整个过程写成了文档,包括怎么购买相关部件及一步一步的安装向导,请参见http://www.projects.privateeyepi.com/home/home-alarm-system-project [15] 。
图6-44展示家庭监控系统的报警触发的过程。
图6-44
搭建整套系统需要一些基本的电路知识,否则可以购买整套预先搭建好的产品。当然也知道大家对这个项目会有一些忧虑,这些忧虑包括它作为一套安防系统到底有多可靠,以及性价比是否合理,因为买一套常规的家庭安防报警系统价钱也差不多。然而相信对团队、教学和爱好者来说,这个架构还是很棒的。另外,从树莓派的自定义程度和系统的可扩展性来说,这套架构的潜力远高于主流现成的安防商业产品。
除了安全方面以外,树莓派还有其他本书没有谈及的无数种用途。我最喜欢的应用包括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] 译者注:这个地址是我改的,原文的已经不适用。