第1章
初识Deck
本章内容:
Deck——一种定制的Linux发行版
几款运行Linux的小型计算机系统板
标准渗透测试工具集
渗透测试的台式机
投置机——从内部攻击
攻击机——用多个设备从远处攻击
1.1 引子
我们生活在一个日益数字化的世界,这个世界里联网设备不断增加。为了在全球一体化的经济中保持竞争力,世界各地的业务一刻也离不开计算机、平板电脑、智能手机以及其他数字设备。并且越来越多的业务与互联网密切相关。新连接到互联网的设备,不出几分钟就可能遭到恶意个人或组织的攻击。因此,对信息安全(information security,infosec)专业人才的需求十分强劲,其中渗透测试人员(penetration testers, pentester)尤其抢手。
既然正在读这本书,想必你已经知道渗透测试意味着什么。渗透测试是受客户委托所进行的得到授权的黑客活动,目的是查明客户的数字安全系统被渗透的难度,以及如何改进客户的安全态势。对渗透测试的需求引出了一些专用Linux发行版的产生。迄今为止,这些定制Linux发行版无一例外地运行在基于Intel(或AMD)处理器的台式机或笔记本上,由单个渗透测试员操作使用。
打消顾虑
在开始本章的正题之前,这里先给读者建立一下信心。本书假设读者理解渗透测试的一般概念,并且了解Linux的使用,除此之外,阅读本书并不需要其他额外基础。读者不必是出类拔萃的黑客(当然如果您是这样的精英,那就更棒了!)或者资深Linux用户或系统管理员。特别强调的是,读者不需要有硬件基础。虽然本书为动手定制电路板之类的读者提供了大量信息,但书中所说的全部物品都可以直接买到成品。
如果是初次接触硬件黑客的概念,读者可以酌情挑战不同的难度级别。若选择实用主义的保险路线,完全可以购买商品化的成品BeagleBone “马夹”——?cape(直接插到BeagleBone上的扩展板,详见http://beagleboard.org/cape);如果决定深入学习相应的技能,那么可以按照本书后续的讲解,给买来的XBee适配器(例如,Adafruit 适配器,见http://www.adafruit.com/products/126)焊接上4根导线,自己制作一个迷你cape。甚至对于想要自己动手刻蚀专用印刷电路板的高级读者,本书也提供了相应的信息。所以说,要进行本书所介绍的渗透测试,既可以完全避开硬件制作,也可以一切都自己动手制作,无论采用哪种方式都不会影响渗透测试的威力!
1.2 Deck
Deck是本书所介绍的Linux发行版,它给渗透测试员提供了一种运行在基于ARM的低功耗系统上的操作系统,从而打破了传统的渗透测试模式。运行该系统的硬件是由非盈利组织BeagleBone.org基金会开发的(下一章将详细介绍,如果想要快速了解,可以参考http://beagleboard.org/Getting%20Started)。运行Deck的设备更易于隐藏并且可以采用电池供电。本书成稿时Deck系统已经包含1600个软件包,成为非常适合于渗透测试的系统。Deck系统极度灵活,完全适用于传统的台式机、投置机,以及远程破解攻击机。
名字的含义
Deck
如果读者也是科幻小说爱好者,可能已经将Deck名字的由来猜得差不多了。这里Deck既用来指本书介绍的定制Linux发行版,也指运行Deck系统的设备。在1984年威廉·吉布森的经典科幻小说《神经浪游者》(《Neuromancer》)中,网络牛仔使用的连接到互联网的计算机终端被称为“punch deck”。吉布森描绘了其中所有设备都连接到互联网的未来世界。在本书作者心中,那些Beagle板子以及类似的小型、低功耗、廉价的设备代表着渗透测试的未来。把这个系统称作Deck算是向吉布森致敬吧。此外,BeagleBone的大小与一副扑克牌差不多。
1.2.1 运行Deck的设备
图1.1中的设备都在运行Deck系统。在本书写作时,Deck能够运行在Beagle家族的三种设备上:BeagleBoardxM、BeagleBone和BeagleBone Black。下一章将对这些系统板进行充分的介绍。读者可以参考BeagleBoard网站(http://beagleboard.org)得到进一步的信息。在此,我们仅需知道它们是基于运行频率高达1GHz的ARM Cortex-A8处理器的系统板就行了。尽管它们具有台式机的性能,但是它们的功耗只相当于Intel或AMD计算机的一个零头。即使在驱动7寸触摸屏(例如http://elinux.org/Beagleboard:BeagleBone_LCD7)和外部无线网卡时,一个10W(2A,5V)的电源也足够了。与此相比,那些笔记本和台式机的功率瓦数则高达3位数甚至4位数。
1.2.2 渗透测试工具集
Deck包含大量的渗透测试工具。设计理念是每个可能会用到的工具都应该包含进来,以确保在使用时无须下载额外的软件包。在渗透测试行动中给攻击机安装新的软件包很困难,轻则要费很大劲,重则完全没法装。一些面向台式机的渗透测试Linux发行版经常带有许多不常用的陈旧软件包。Deck中的每个软件包都是经过精心评估才包含进来的,引入一个新软件包所导致的任何冗余部分都会被剔除掉。这里将介绍一些比较常用的软件工具。
现在,无线网络应用十分普遍,所以许多渗透测试都从破解无线网络开始。因此Deck系统包含了aircrack-ng套件。airodump-ng工具用来捕包和分析,捕获的数据包可以转给aircrack-ng进行解密。图1.2和图1.3分别给出了airodump-ng和aircrack-ng的截屏。关于aircrack-ng组件使用的更多细节将在后续章节介绍。
图1.2 使用airodump-ng捕获和分析无线数据包
图1.3 用aircrack-ng成功破解
即使在用户不使用无线网的情况下,aircrack-ng组件也很有用,它可以用来检测和破解用户网络中可能存在的非法私接的无线AP(access point,接入点)。Deck中还包含了一个叫作Fern WiFi Cracker的无线破解工具,它是那种可以用鼠标来操作的易用工具。图1.4给出了使用Fern成功破解的截图。渗透测试新手可能觉得Fern十分好用。由于交互性操作的特点,aircrack-ng和Fern都不适用于我们的无人值守的破解攻击机。因此,Deck收录了Scapy Python(http://www.secdev.org/projects/scapy/)工具。
图1.4 使用Fern成功破解
不管是有线网络数据包还是无线网络数据包,对于渗透测试人员,它们都有重要价值。Deck包含了Wireshark(http://www.wireshark.org/),用来抓包和对数据包进行分析。Deck也提供了一个称作Nmap(http://nmap.org/)的标准网络映射工具,用于发现目标网络上的服务和主机。Metasploit(http://www.metasploit.com/)是包含一组漏洞扫描器和漏洞利用框架的工具,也是标准版本Deck的组件之一。上述工具见图1.5。
Metasploit是由Rapid 7(http://www.rapid7.com/)维护的很流行的工具,有大量关于它的书籍、培训课程、视频教程。Offensive Security还发布了一本在线图书《Metasploit Unleashed》(http://www.offensive-security.com/metasploit-unleashed/Main_Page),这是可以免费获得的学习资料(当然我们鼓励读者向Hackers for Charity捐赠)。Metasploit号称是个框架并且带有大量的漏洞,这些漏洞可用于从几百个攻击载荷中选择要传送的载荷。Metasploit能在脚本中运行,也能开启交互操作的控制台,还可以通过Web界面操作。本书不会全面介绍Metasploit,建议对其不了解的读者进一步学习这个了不起的工具。
图1.5 Wireshark、Nmap、Nikto和Metasploit
破解用户密码经常是渗透测试的工作之一。Deck带有若干在线密码破解器、离线密码破解器,以及密码字典。其中一个称作Hydra的在线密码破解工具如图1.6所示。此外还有大量的其他工具被集成在Deck中,其中不容忽视的是一组Python库。这些工具包中的有些组件将在本书后面的实例分析中重点说明。
图1.6 Hydra在线密码破解器
1.2.3 操作模式
Deck的强项之一就是它既能作为传统的图形用户界面的桌面系统使用,又能用于渗透行动的投置机,而且还能作为破解攻击机的系统。在这几种应用模式之间切换完全无需任何软件改动。这个特性极大地增加了渗透测试的灵活性。操作员可以携带多个相同的Deck设备到达渗透测试地点,现场酌情选择合适的电源或其他选项(比如无线网卡、802.15.4猫等)。而不需要按照渗透测试工作站、投置机或攻击机分别准备设备,如果那样的话,有可能到现场才发现有些类型的设备根本用不上。
Deck作为桌面系统
Deck于2012年9月在伦敦召开的44CON大会上首次亮相。当时它只能运行在BeagleBoard-xM上,展示了两种配置。第一种是作为以显示器、键盘、鼠标操作的桌面系统。另一种是带有7寸触摸屏和紧凑型演讲键鼠外设的配置。我在44CON大会上说这样的设备可以轻松放进孩子的午餐盒中。会后我回到家看到巴斯光年便当盒,于是就发明了渗透测试餐盒。之所以选择巴斯光年是因为,使用这个强大的渗透测试餐盒,你将在破解中超越极限,所向披靡!图1.7展示了这些装置。
自2012年9月发布以来,先后制作了几种桌面配置的Deck系统。其中一种带有7寸触摸屏、Alfa无线网卡(颤音摇杆被替换成了5dB天线)、一个RFID读卡器,这些都装到视频游戏吉他中。这个绰号为“haxtar”的系统看起来像个玩具,很容易被当作没有任何危害的东西让人放松警惕。实际上,它是一个强大的便携式渗透测试系统。由于配有背带甚至可以站着使用,用一个无线演讲键鼠组合作为输入装置。haxtar里边还有充足的空间可以容纳802.15.4模块和蓝牙。haxtar如图1.7所示。
2013年4月,BeagleBoard组织发布了新的板子——BeagleBone Black(BBB)版。这个新系统的处理能力和BeagleBoard-xM(BB-xM)相当,但价格只有BB-xM的三分之一。与最初的BeagleBone不同,BeagleBone Black带有HDMI输出,很适合作为桌面系统使用。两个版本的BeagleBone都和BeagleBoard-xM一样能直接连接到触摸屏。由于最初的BeagleBone计算能力不如BeagleBoard-xM或BeagleBone Black,所以不太建议用它作为桌面系统。图1.7给出了一个运行桌面系统的BeagleBone Black板。
机缘巧合
Deck系统的由来
在各种场合经常有人问Deck系统的创意源自何处。在开发Deck系统之前,我做了大量关于USB大容量存储设备取证方面的工作。在此过程中,我有幸于2011年9月在伦敦召开的44CON会议上演示了基于单片机的袖珍USB存储取证拷贝器。当时所采用的单片机的一个局限就是它不支持高速USB。这意味所开发的设备很适合拷贝U盘,但对于像移动硬盘这样的大容量存储媒体则太慢了。所以我想重新开发支持高速USB的取证系统。
幸运的是,在2011年夏天底特律的Maker Faire盛会上,我展示基于单片机的设备。碰巧我的展台紧挨着BeagleBoard.org基金会Jason Kridner的展台。当时BeagleBoard-xM刚发布,那两天展览上,Jason正在做十分吸引人的演示。那是我第一次听说BeagleBoard,但是一下子就看到了这款小板子的巨大潜力,于是就把它记在心里以备将来在项目中使用。
当决定把我的USB工具升级到支持高速USB时,BeagleBoard-xM自然成为最佳方案。于是就开始研究BeagleBoard-xM。很快我意识到,这么强的硬件只用来做取证的拷贝器实在太浪费了。我决定用它开发一个渗透测试工具。在这之前我一直在做自己的Linux发行版。这个渗透测试的工具的制作让我如痴如醉,以至于都把取证功能的事抛在脑后了。后来取证功能被做成了一个叫作4Deck的模块,2012年9月与Deck 1.0同时发布。
Deck用作投置机
这里所说的投置机(dropbox)是指在渗透测试中可以被植入到目标组织中的小型硬件设备。理想情况下,这些设备成本应该足够低廉,所以偶尔丢几个不至于太心疼。可是那些商品化的投置机售价高达1000美元,甚至更高,即使弄丢一个也是有重大经济损失。除了价格太高之外,许多商品化的投置机还有一些其他局限。
许多低成本的设备要么利用目标网络回传数据,要么需要将物理设备取回来提取所采集的数据。用目标网络回传数据可能会导致投置机暴露。对于那种只能将数据存在内置存储器的投置机,则渗透测试员只能等到拿回来才能获得数据。而且一旦设备被发现,那就连设备带信息都损失了。反复去现场接触投置机也会增加被发现的风险。
高端的商业投置机使用4G/GSM蜂窝网络提取数据。这倒是具有不占用目标网络带宽的优势,但也有缺点。在一些国家,4G/GSM服务很贵,还有可能信号覆盖不好,甚至在渗透测试的地点根本就没信号。还有一些国家的法律法规使得投置机难以获得4G/GSM服务。即使在法律法规不那么严的地方,管理众多的账户和对应的SIM卡也很快就成了管理员的噩梦。使用4G/GSM时,为了节约通信费所采用的数据缓存和数据压缩也会带来额外的复杂性。
许多投置机的另一个限制是它们缺少标准的渗透测试工具。部分原因是它们存储容量有限,并且计算能力不足,无法运行像Metasploit这样的强大工具。Deck则截然不同,它拥有桌面渗透测试系统所具有的全部工具。
用运行Deck操作系统的BeagleBone制作的投置机完全没有上述限制。BeagleBone体积小,能用电池供电,这就使它易于隐藏。报价45美元一个,BeagleBone Black足够便宜,偶尔损失一个不至于太心疼。配备IEEE 802.15.4无线通信后,投置机无需4G/GSM服务就能向远在一英里(约1.6公里)的地方传输数据。如前文所述,Deck系统具有其他投置机所不具备的大量的工具软件。
Deck作为破解攻击机
一提到投置机,人们往往想到的是利用社会工程活动突破目标的保安,把设备藏到目标设施中去。在传统渗透测试模型中,测试员可能用一个或几个投置机收集数据并且执行一些简单命令,但是主体工作是在他的笔记本电脑上进行的。本书给出一种新的工作模型,在这种模型下,破解活动是分布在多个设备上进行的,这些设备我们称作破解攻击机,它们接受渗透测试员控制台发出的命令,并且将结果反馈回控制台。
投置机和破解攻击机之间的界限似乎不那么清晰。确实如此,只要具有IEEE 802.15.4连接,运行Deck的投置机也可以像攻击机那样接受命令。由于低功耗的优势,运行Deck系统的设备能用电池供电,所以有可能被放到目标系统的安保半径之外工作。从而无需社会工程活动进入客户的环境内部,从而大大降低了人员被怀疑的可能性。
说到这里,你已经完全可以带着一组带有IEEE 802.15.4猫的BeagleBone这样的小设备去进行渗透测试了,但是好处还不止于此。体积小、重量轻还能催生出许多有趣又有用的其他潜在用法。例如图1.8中的Dalek desktop defender的玩具里面带有一个破解攻击机。(也可以算作投置机吧?)玩具内部有足够空间容纳BeagleBone、Alfa无线网卡和IEEE 802.15.4猫。被称为AirDeck的无人机载攻击机也出现在了图1.8中。当无法物理接近目标时,AirDeck可用来做初始侦查或降落在房顶上进行渗透测试。
使用攻击机的另一个好处是可以增加测试员和客户环境的距离。车停在别人办公室外边,上边耸立着高增益定向天线,在车里一坐一整天,这样的行为显得相当可疑。相比之下,要是能坐在客户所在街道另一端酒店的游泳池边就能进行渗透测试则太惬意了。使用攻击机的另一个好处是它们能每天24小时地为你工作。而在传统渗透测试模型中,夜间休息时工作基本上不会有什么进展。本书的后续章节会给出关于制作和使用攻击机的全部细节。
机缘巧合
破解攻击机创意的由来
Deck系统名字的由来是我被问到最多的问题,而其次经常被问及的就是我是如何想到破解攻击机的。实话实说,答案是有一天我在家里的工作室看到了一些闲置零件,我注意到其中有几个IEEE 802.15.4(XBee)适配器。这些XBee无线模块最初是我为某个为期13天的单片机课程项目准备的,这是我所工作的大学的课程。最终这些东西没有用上,刚好我的工作台上还有几个多余的早期版本的BeagleBone。
Deck系统本来是为BeagleBoard-xM(BB-xM)而设计的,但我知道它能不做任何改动而运行在BeagleBone上。原始版的BeagleBone的处理器稍微慢一些,并且只有BB-xM一半大小的内存,也没有内置视频输出口。当时XBee对于我来说还是新奇的东西,于是我把XBee接到BeagleBone上,想用这些被我闲置的硬件做些有用的东西,并且找点有趣的事拿XBee练练手。在我制作第一个破解攻击机的时候,我意识到了用攻击机进行渗透测试有巨大的潜力。
我认为能把一组攻击机、电池以及其他附件都放到一个背包中是个绝妙的主意。我经常带着全部家当乘飞机去参加会议,它们包括多达8个带有完整电池和附件的攻击机、一部笔记本电脑,以及一部平板电脑,这些统统装到一个小旅行包或一个手提箱中。轻松配置设备并满足渗透测试需求,我觉得这真的是很强的功能。而且,一个额外的好处是这些设备实际上又价格低廉,特别是当功能更强、价格却只有BeagleBone一半的BeagleBone Black板子发布后。
1.3 本章小结
本章对一种为渗透测试定制的Linux发行版——Deck进行了简要介绍,它运行在BeagleBoard和BeagleBone家族的ARM设备上。Deck是包含有1600多个软件包的强大的、完整的操作系统。运行Deck的设备无需做软件改动就可以用作桌面系统、投置机或攻击机。配备了IEEE 802.15.4无线的攻击机可以在一英里远的距离上接受命令。运行Deck的设备可以呈现不同的外观,包括裸的计算机系统板、隐藏了功能的普通办公用品,或者无线遥控飞机。
下一章将更仔细地审视BeagleBoard和BeagleBone家族的设备。我将分析它们的历史、差异和功能,并且将讨论它们的基本操作方法。
第2章
认识Beagle系统板
本章内容:
开放硬件
BeagleBoard-xM——开放硬件的台式机替代品
BeagleBone——威力远超单片机的单板计算机
BeagleBone Black——两个世界的最佳选择
2.1 引子
设想一下某天你突发灵感,想要对某种日常必须使用的设备做某方面的改进。可是,大多数设备都是有专利和版权保护的,更糟糕的是,在美国分析某个产品的工作原理是违法的,这叫作逆向工程。许多公司都在最终用户许可协议中加入了相应的条款,以阻止对其产品的逆向工程。考虑到法律问题,你还是忘掉你的创新吧,让本可以更好的生活一如从前,得过且过吧。
总有一些人,包括本书作者,觉得这样的情况是无法忍受的。想象一下,有一个美好世界,在那儿针对任何设备都能得到想了解的任何事情;在那儿所有的设计都有详细的文档说明,能够随意地用来对设备进行改进或修改;在这个理想国度,一个设计甚至可以整个引用另一个设计,而完全不用担心会摊上官司。这就是开放硬件(有时也称作开源硬件)的世界。
开放硬件更利于整个社会的快速进步。已经存在像Arduino(http://arduino.cc)、开源3-D打印机(例如:http://reprap.org),甚至开源卫星这样的开放原型平台。开放一个硬件的设计为更多人参与进来改进它创造了机会。虽听起来违背直觉,但实际上设计和制造开放硬件的公司也能盈利。只要看一下Arduino的数目庞大的项目和强有力的社区支持,就能知道开源项目会有多成功了。开放硬件设计能够更好地展示各种元器件的功能。
2.2 德州仪器公司的设备
一定程度上是为了展示和推广公司的芯片,德州仪器(TI)允许某些员工开发和推广使用TI公司产品的开放硬件计算机板(详细内容请参考http://beagleboard.org/about)。这些计算机系统板是由叫作BeagleBoard.org基金会的美国非盈利公司开发的。本书成稿之时,两位TI的员工为BeagleBoard.org基金会做了大量的努力——Jason Kridner担任社区的管理员,Gerald Coley负责硬件设计。
2.2.1 BeagleBoard-xM
BeagleBoard.org开发的最早的板子叫作BeagleBoard,于2008年7月发布,现在还能买到。这个板子基于TI公司720MHz的OMAP3530 Cortex-A8处理器,配备256MB RAM、256MB闪存、HDMI视频和S-Video视频输出、USB On-The-Go接口、USB host接口、SD卡插槽、RS-232接口,以及立体声音频输出口。这个75mm×75mm的计算机板标价125美元。
2010年9月升级的板子命名为BeagleBoard-xM,被称作售价149美元的、能当作台式机的系统板(见图2.1)。这里根据《BeagleBoard-xM系统参考手册》来总结一下它的特点,完整的手册可从http://circuitco.com/support/index.php?title=BeagleBoard-xM#Rev_C2
取得。
德州仪器号称BeagleBoard-xM所采用的1GHz的DM3730处理器是数字媒体处理器(详见http://www.ti.com/product/dm3730)。这个处理器带有NEON SIMD协处理器,能够显著加速多媒体应用和数学计算(http://www.arm.com/products/processors/technologies/neon.php)。这个处理器采用层叠封装(PoP,Package-on-Package),512MB的RAM芯片被装到处理器芯片的上边。这个处理器足以运行全功能的Linux系统和标准的渗透测试工具。图2.2和图2.3是BeagleBoard-xM的照片。
图2.2 BeagleBoard-xM的正面 图2.3 BeagleBoard-xM的背面
BeagleBoard-xM的电源管理和音频是由德州仪器的TPS65950芯片实现的,电源和音频结合到一片集成电路上似乎很怪异,这是因为该芯片设计目标是配套嵌入式应用处理器使用,在这样的应用场合降低芯片个数是重要的目标。有了TPS65950,BeagleBoard-xM就能通过USB OTG连接PC来供电。但当使用多种外设以及LCD触摸屏时不推荐这种供电方式,因为PC的USB口提供的功率有可能不够。当使用大功率USB外设时,可以用Y形USB电缆、带外部供电的USB集线器,或者外部5V(2A)的电源供电。
BeagleBoard-xM有4个USB 2.0 host接口,当使用直流电源口而不是USB OTG接口供电时,每一个USB host接口能提供高达500mA的供电能力。《System Reference Manual》推荐当所有的设备都工作起来时,要使用3A的电源供电。根据作者的经验,驱动1W Alfa无线网卡工作时,2A的电源足够了。这些host接口完全支持USB 2.0的三种速度(低速、全速、高速)。
在视频输出方面,BeagleBoard-xM提供S-Video、经HDMI插座输出的DVI-D,以及LCD触摸屏三种方式。S-Video可用来连接NTSC(默认制式)或PAL制式的电视。板子可以配置成向S-Video和DVI-D输出不同的显示内容。板上的标准HDMI插座可以连接数字显示器或电视。除了电缆里没有音频信号,DVI-D协议实际上和HDMI是相同的。Enhanced Display ID(EDID)或者Display Data Channel(DDC2B)用来正确识别所连接显示器的视频配置。建议在给BeagleBoard-xM上电前连接好显示器,以避免电涌冲击,这种冲击有可能损坏板子,而且这样也能让系统正确识别显示器。BeagleBoard-xM上一对0.05英寸2×10的插针可以连接LCD屏幕,比如像上一章餐盒计算机上的7寸触摸屏(http://elinux.org/Beagleboard:BeagleBone_LCD7)。
BeagleBoard-xM带有一个microSD卡槽,支持高容量microSD卡。这主要用来容纳操作系统,当然也可以买一个更大容量的卡来存储数据,这就省去了连接USB大容量存储设备了(不说别的,大容量存储至少会增加电源负担)。买microSD卡的时候,多花点钱买个class 10的绝对是值得的。class 4的或class 6的用起来明显感觉对性能有影响。BeagleBoard-xM与microSD的通信采用4位宽,20MHz的时钟。
BeagleBoard-xM配备2个按键和6个LED方便用户交互。一个按键用于热复位,另一个便于用户自定义。5个绿色LED的功能如下:前2个分别表示板子上电和USB集线器上电;后3个可由I2C或GPIO编程控制。还有一个红色的会在直流电源输入偏离5V时点亮,表明过压或欠压。虽然处理器和大部分电路都工作在3.3V,但5V对于USB电路工作是必需的。
BeagleBoard-xM带有集成的快速以太网(100Mbps)接口。以太网口由SMSC LAN9514芯片实现,它还包括USB集线器用来实现4个USB host接口。需要注意一件很重要的事情,这个芯片每次启动产生不同的MAC地址,这很可能导致使用DHCP的时候得到不同IP地址。
BeagleBoard-xM上还有一些其他的在破解和渗透测试中不太会用到的接口。一个JTAG接口用于板子测试和调试。还有一个DB9 RS-232串口用来连接一些老的设备或者用作串行控制台。还可以通过板上的一个专用连接器连接一个摄像头模块。有几个扩展口引出了GPIO和其他功能。
强烈推荐给BeagleBoard-xM板子配上外壳保护,比如像图2.4那样的外壳。从Special Computing(http://specialcomp.com)提供的简单亚克力外壳到eSawdust(http://www.esawdust.com/product/encl-dh-xm/)的金属壳,有多种外壳可供选择。至少要用带有铜柱的亚克力片(或其他不导电材料)保护一下,以防在导体上带电检修时短路。
2.2.2 BeagleBone
BeagleBone于2011年万圣节(10月31日)发布(http://beagleboard.org/Products/BeagleBone)。2009年Arduino Duemilanove(http://arduino.cc)发布之后,很多人开始对用微控制器搭建自己的电子设备感兴趣。可能有人不熟悉Arduino,它是另一个开源硬件项目。这个板子售价不到35美元,发布后,很快就围绕它形成了一个社区。通过可以接插扩展板(shield)的硬件和带有大量功能库、易于使用的编程环境,Arduino把单片机引入到了非技术群体。虽然可以用基于16MHz 8位AVR单片机的Arduino做很多事情,但一些项目需要更强的计算能力,这正是BeagleBone大显身手的地方。
BeagleBone可以看作是一个威力大大加强的“类Arduino”板。很多Arduino那 16MHz 8位单片机无能为力的情况,德州仪器的主频达720MHz的32位Cortex-A8处理器则游刃有余。除了提升通用计算和数学处理的能力之外,BeagleBone还能运行完整的操作系统(Arduino的处理能力只够运行一个装载到其中的程序)。与Arduino类似,它也被设计成能够使用扩展板。每个板子的扩展插针的布局不一样。BeagleBone的扩展板叫作“马夹”——cape,它们经常在以太网口的地方开个豁口,样子很像一个马夹,这个称呼显得尤为形象。BeagleBone如图2.5和图2.6所示。
图2.5 BeagleBone的正面 图2.6 BeagleBone的背面
以下信息来自于《BeagleBone System Reference Manual》,该手册可以从http://circuitco.com/support/index.php?title?BeagleBone#Rev_A6A获取。与BeagleBoard-xM相似,BeagleBone也采用Cortex-A8处理器,但芯片封装不同,运行速度稍慢。最大的好处是BeagleBoard-xM能运行的操作系统和软件它都能运行。要知道,BeagleBoard诞生至今,已有大量的操作系统和软件可用。
BeagleBone载有256MB DDR2内存,只有BeagleBoard-xM内存量的一半,这在运行某些大软件(例如Metasploit框架)时可能会有问题。但这与Arduino 2K 的RAM相比还是很有优势的。BeagleBone的板名、版本和序列号等信息都存储在32KB(早期版本是4KB)板上的EEPROM中。其余大部分剩余EEPROM空间留给操作系统和应用软件使用。巧合的是Arduino也有32KB以flash实现的非易失存储,它用来存储bootloader和唯一的程序。
BeagleBone可由5V直流电源或USB供电。BeagleBone使用了TI公司的TPS65127B电源管理芯片。需要注意,当通过USB口供电时,为了确保板子运行和USB外设工作的电力充足,CPU速度被限制在了500MHz。推荐使用5±0.1V,1A的直流电源供电。
BeagleBone相对于Arduino的另一个强项在USB方面,它带有一个USB集线器,允许使用一条USB线带起多个USB设备。当BeagleBone连接到PC时,上位机会检测到一个调试串口、一个JTAG端口和一个USB0端口,这个USB0端口直接连到BeagleBone处理器上。当采用直流电源供电时,USB host端口能提供500mA,5V供电能力。当采用USB供电时,则USB host端口只能使用低功耗的设备,例如键盘鼠标等。
与BeagleBoard-xM一样,BeagleBone也有一个microSD插槽,因为BeagleBone没有內置存储,所以用microSD卡来存储操作系统和其他文件。microSD卡的读写是4位的(这是SD卡的标准)。BeagleBone支持3.3V的microSD卡,包括高容量卡。Arduino没有内置SD卡存储支持,如果不介意占用几个GPIO,有一些扩展板可以提供SD卡支持。
比起Arduino,BeagleBone的另一个优势是内建快速以太网。与BeagleBoard-xM不同,以太网是由专用的网络芯片实现的,而不是用USB实现的。采用的芯片是SMSC LAN8710A。因为这个不同,BeagleBone每次启动都会报告相同的MAC地址,会通过DHCP获得相同的IP地址。
扩展cape被通过46针的插头连接到BeagleBone上,最多可以同时堆叠4个cape,只要它们互相之间不冲突。难以想象有什么样的项目是BeagleBone实现不了的。它有66个可用的GPIO(而Arduino只有14个)。一个需要注意的要点是,BeagleBone的GPIO是3.3V的,而不是5V。BeagleBone支持一个带有背光的全功能LCD触摸屏。通过扩展插座上的处理器引脚,还可以扩展出一个额外的SD/MMC卡接口。
在嵌入式电子系统中有两种常用的串行外设互联标准:SPI和I2C。BeagleBone完全支持这两种标准,它有2路SPI和2路I2C接口。每一路都可以连接多个设备。其中第二路I2C必须小心使用,因为它被BeagleBone用来识别和配置扩展cape(后面会有详细说明)。Arduino只有1路SPI和1路I2C接口。
扩展插座上引出了4路串口,在破解攻击机应用中,可以用其中的一个连接IEEE 802.15.4无线。BeagleBone还支持2路CAN总线,这是一种在汽车上常用的低速但高可靠性的总线,在其他环境中也有应用。
定时器、模数转换器(ADC)、脉宽调制器(PWM)进一步提高了BeagleBone的扩展能力。4路定时器信号被输出到扩展插头上,这些定时器对于周期性工作或重启cape上的组件很有用。BeagleBone提供了7路每秒100 000次采样的ADC,可用来连接一组老式的模拟传感器。ADC是1.8V的,必须小心使用,因为这些信号直接连在处理器上。PWM可调节输出信号的占空比,常用来驱动步进电机或用来调节LED的亮度。
虽然没有制作cape的统一规则,但有一些最大化兼容性的推荐标准。为了使一款cape能够被Beagle产品经销商出售,板上至少要有一个EEPROM,BeagleBone以此来识别这个cape。前边所说的第2路I2C总线用于和EEPROM通信。需要2个跳线或拨码开关来设置EEPROM的I2C地址,使EEPROM互相不干扰,从而使系统支持多达4个堆叠的cape。
像BeagleBoard-xM的情况一样,也强烈建议为BeagleBone配上保护外壳。有一些像Special Computing(http://specialcomp.com)和Adafruit Industries(http://adafruit.com)这样厂商出售外壳。根据使用不同cape的情况,优化的外壳方案也不同。如果BeagleBone板子不是嵌入到其他东西里工作,至少要用铜柱固定上亚克力板或其他绝缘板以防短路。如果自己设计制作外壳,一定要使用最小的铜柱,因为板上的某些表贴原件离安装孔很近,很容易被碰坏。
到这里,读者应该明白为什么BeagleBone在这些铁杆硬件玩家中如此流行了吧。通过本书你会看到,BeagleBone还是一个功能强大、体积小巧的计算机系统,而接下来要介绍的新推出的升级版——BeagleBone Black则更胜一筹。
2.2.3 BeagleBone Black
虽然BeagleBone在推出时已经很具有颠覆性了,但随着技术的进步,后来又发布了一个更强大的版本,价格却降到原来的一半(相比于之前的89美元,它只要45美元),被称作BeagleBone Black版(缩写成BBB)。原始版本发布不到18个月,BeagleBone Black于2013年4月23日推出。成本下降主要得益于芯片数的压缩和大批量生产。图2.7和图2.8是BeagleBone Black。
除了价格更低,新版BeagleBone还有一些改进。处理器速度从720MHz提升到了1GHz;RAM从256MB翻倍到了512MB。BeagleBone Black使用DDR3内存,如今DDR3比原版BeagleBone所使用的DDR2要便宜。这里给出的BeagleBone Black的信息摘自《BeagleBone Black System Reference Manual》,手册可以从https://github.com/CircuitCo/BeagleBone-Black/blob/master/BBB_SRM.pdf下载。
图2.7 BeagleBone Black正面 图2.8 BeagleBone Black背面
为什么不用……
开源硬件的能力是有高下之分的
在世界各地的会议上做关于Deck的演讲时,经常有人问我“为什么不使用某某开源板子?”,这里的“某某板子”通常是树莓派(Raspberry Pi),碰巧它还不是开源的。简短的回答是树莓派不适合我们的情况,详细的解释请看下文。
树莓派没有BeagleBone Black功能强。实际上,即使是比树莓派更早的BeagleBone也要比它强。BeagleBone Black使用1GHz的现代Cortex-A8处理器,树莓派使用的是只有700MHz的BCM2835芯片。树莓派缺少运行像Metasploit这样强力渗透测试工具所需的处理能力。德州仪器*地发布他们处理器芯片的信息,而Broadcom却要求签署NDA才能得到应用他们芯片的细节。Broadcom的芯片使用支持不够好的陈旧ARM6指令集。这限制了树莓派所能使用的操作系统。特别地,树莓派不能使用Ubuntu。像下一章介绍的,Deck是基于Ubuntu的。
树莓派也没有Beagle家族成熟。最早版本的BeagleBoard在2008年就已经交付了。BeagleBone到用户手里的时间比树莓派早了足足半年。甚至树莓派项目启动一年后,批量购买都还成问题。相比之下,BeagleBone Black发布后一周我就买了好几块板子,根本不用等几个月才能拿到。
尽管构建渗透测试硬件时价格并不是主要问题,但用树莓派构建完整系统则要比使用BeagleBone Black贵得多。当外壳、USB电缆、电源,以及扩展板都配齐时,两个板子本身报价的差异立即就消失殆尽了。另外,当买多个BeagleBone时,多数经销商都会提供折扣。
树莓派提供最多17个GPIO线(仅比Arduino多一点),而BeagleBone板可以提供66个GPIO线。树莓派采用的是很脆弱的插针,需要购买一个排线来连接其他硬件,相比之下BeagleBone则使用坚固的插针,可以在板上直接扩展cape。BeagleBone很易于实现紧凑(并且更可靠)的设计。
尽管树莓派的处理能力低,但它却比BeagleBone需要更多的电能。因为运行的软件不一样,很难给出有意义的电能比较。据说,根据经验测试(例如2013年5月19日发布的题为《树莓派(B型)功耗,低压测试》的文章,http://www.youtube.com/watch?v=4a_OCg9UZbo),树莓派消耗的功率是BeagleBone的150%~200%。既然我们要构建电池供电的设备,BeagleBone Black在同类产品中稳拔头筹。
说到这儿,显然树莓派并不是构建渗透测试的理想选择。本书成稿时,几个把Deck移植到其他ARM系统的实验正在进行中。这将评估是否要把这些平台纳入官方支持。这些移植的最新进展参见官方网站(http://philpolstra.com)和我的博客(http://polstra.org)。
BeagleBone Black带有2GB的eMMC非易失存储(本书写作时,正在讨论在后续版本扩展到4GB)。随机安装的Angstrom Linux系统安装在eMMC中(宣布不久后新板出厂的预装系统将是Debian Linux)。相比于microSD的4位接口,eMMC的接口是8位。由于板载eMMC的配置是已知的,可以最大限度根据其参数优化性能,而不用像microSD卡那样,只有卡插入后才能确定参数。出于这些原因,使用eMMC存储根文件系统时能够获得巨大的性能提升。不幸的是Deck系统高达6GB多的根文件系统太大了,无法存储在eMMC上。
BeagleBone Black一个最明显的变化是增加了microHDMI插座输出HDMI视频信号。HDMI支持是由NXP TDA19988 HDMI成帧器实现的。BeagleBone Black支持高达1920×1080的视频分辨率。BeagleBone Black默认使用EDID报告的最高分辨率。正因这个原因,在BeagleBone Black系统启动前连接并且打开显示器是很必要的。与BeagleBoard-xM不同,该接口支持包括音频在内完整的HDMI规范。只有Consumer Electronics Association(CEA)标准中的分辨率下才支持音频,因为所有高清电视都支持这些分辨率,所以为BeagleBone Black找到显示器完全不成问题。
然而,不像增加HDMI插座那么明显的变化是,BeagleBone Black也比原版更省电了。压缩掉了几个芯片导致所需的电流大大降低(差不多30%)。结果,基于BeagleBone Black的电池驱动的破解攻击机能够比基于旧版BeagleBone的运行更长的时间。
BeagleBoard.org团队尽可能让新版BeagleBone兼容原版。购买cape时,一定要确保是BeagleBone Black兼容的,可以到http://elinux.org/Beagleboard:BeagleBone_Capes检查兼容性。增加eMMC和HDMI导致几个原来在扩展口上可用的引脚,现在被BeagleBone自己占用了。用到这些被eMMC和HDMI占用引脚的cape则必须把相关的功能关掉才能工作。在我们的应用中这不是问题,因为Deck系统太大不能放到eMMC中,并且对于破解攻击机,HDMI输出并不需要。两个BeagleBone版本之间还有一些其他的差异,但都跟我们的渗透测试关系不大。关于这些差异的详细情况可以参考《System Reference Manual》。
如前所述,BeagleBone Black应该配上外壳或把它装到绝缘的材料里保护起来,以防短路。Adafruit(http://www.adafruit.com/category/75)出售小的亚克力外壳和能容纳一个BeagleBone加上几个cape的大外壳。大多数像Special Computing(https://specialcomp.com/beaglebone/)这样的其他BeagleBone商家也都有简单的亚克力外壳出售,价格差不多10美元。图2.9和图2.10展示了Special Computing的外壳。原版BeagleBone的外壳如果用电钻或类似的工具开个microHDMI插座的槽,也能用在新版BeagleBone上。如果读者想自己制作外壳,一定小心别用太大的铜柱,因为这有可能会碰坏靠近安装孔的元器件。
图2.9 装上Special Computing外壳的 图2.10 装上Special Computing外壳的
BeagleBone Black正面 BeagleBone Black背面
2.3 本章小结
表2.1给出了BeagleBone Black、原版BeagleBone和BeagleBoard-xM的差异。这些信息来自http://beagleboard.org/Products的图表。
通过阅读本章,读者了解了来自BeagleBoard.org的几款开放硬件小计算机系统板。149美元的BeagleBoard-xM可以用来构建外形紧凑、能源高效的渗透测试桌面系统。最新的BeagleBone Black只要45美元,却拥有几乎与BeagleBoard-xM同样的性能。无论作为渗透测试的桌面机还是攻击机都很适用。至此,已经介绍了Deck系统和它运行所依赖的硬件,下一章将深入到安装基础操作系统的详细过程中去。
表2.1 BeagleBone Black、原版BeagleBone和BeagleBoard-xM的比较
BeagleBone Black BeagleBone BeagleBoard-xM
处理器 AM3358
ARM Cortex-A8 AM3358
ARM Cortex-A8 DM3730
ARM Cortex-A8
最大CPU速度 1GHz 720MHz 1GHz
模拟引脚 7 7 0
数字引脚(电压) 65(3.3V) 65(3.3V) 53(1.8V)
内存 512MB DDR3 256MB DDR2 512MB LPDDR
USB HS USB client/host HS USB client/host 4 口HS USB hub,
USB OTG
视频 MicroHDMI、cape Cape DVI-D、S-Video
音频 通过HDMI输出 Cape 3.5mm插座
支持的接口 4xUART、8xPWM、LCD、GPMC、MMC1、2xSPI、2xI2C、A/D转换器、2xCAN总线、4个定时器 4xUART、8xPWM、LCD、GPMC、MMC1、2xSPI、2xI2C、A/D转换器、2xCAN总线、4个定时器、FTDI USB转串口、通过USB 的JTAG McBSP、DSS、I2C、UART、LCD、McSPI、PWM、JTAG、camera接口
报价 45美元 89美元 149美元
第3章
安装一个基础操作系统
本章内容:
Beagle系统板可用的操作系统
渗透测试的Linux发行版所需的功能特性
Ubuntu方案
新内核的变化
设备树
制作Beagle可用的microSD系统卡
3.1 引子
正如前一章学到的,BeagleBoard.org从2008年就已经开始发售开放硬件的开发板。本章将简要地考察BeagleBoard.org网站上列出的一些操作系统方案。在对这些可用的系统有了基本的感性认识之后,讨论了渗透测试的Linux发行版应该具备的特性。在选出合适的基础操作系统后,将讨论一些细节以及近期的内核变化对我们的决策产生的影响。最后,详细说明如何制作一张含有所选系统的microSD卡,并将它安装到Beagles上,以此作为本章的结尾。
3.1.1 非Linux选择
坦诚一点说,由于我们期望做出一些有黑客乐趣的,并且可以用于渗透测试的东西,所以几乎可以肯定,我们的终极选择一定是某个Linux版本。即便如此,出于完备性的考虑,这里仍想简短地介绍一下Beagles可用的一些非Linux系统方案,并以此证明这些开发板的超强的通用性。
Windows CE
你可能认为无法在一个开放硬件上运行一个专有操作系统,但是在这儿,真的做到了。如我们所知,BeagleBoard-xM和BeagleBone比很多运行Windows XP的设备拥有更强的计算能力,你也许会疑惑为什么不运行一个完整版本的Windows而是Windows CE(通常被称为WinCE,官方称谓是Windows Embedded Compact。)答案是Windows CE能够通过板级支持包(BPS)运行在ARM架构的设备上,而桌面版的Windows是不兼容ARM架构的。Adeneo(Adeneo Embedded)以德州仪器(Texas Instruments)提供的标准BSP为基础,创建了BeagleBoard-xM的BSP(http://www.adeneo-embedded.com/en/Products/BoardSupport-Packages/BeagleBoard)。根据BeagleBoard.org网站上的评论,人们更喜欢在Beagles上运行一些其他的东西(http://beagleboard.org/project/WinCE7+BSP+for+BeagleBoard-XM/)。如图3.1所示,Windows CE运行在使用7寸Chipsee液晶屏的BeagleBone Black上。
QNX
Beagle系列开发板可以运行QNX Neutrino 实时操作系统(RTOS)(http://www.qnx.com/products/neutrino-rtos/neutrino-rtos.html)。实时操作系统是用于那些系统响应时间确定、响应时间尽可能短的嵌入式设备的。一个典型的实时操作系统是轻量级的,并且通过对中断和定时器的支持来与硬件紧密结合。QNX的实时操作系统是一个以微内核设计为特色的系统。这家公司提供了几个参考设计以展示QNX Neutrino(http://www.qnx.com/products/reference-design/ti-reference-design.html)的兼容性。图3.2是运行在BeagleBoard上的QNX智能节能系统参考设计。
图3.1 Windows CE运行在使用7寸Chipsee 图3.2 运行在BeagleBoard上的QNX智能
液晶屏的BeagleBone Black上 节能系统参考设计
FreeBSD
FreeBSD是基于伯克利软件发行版(BSD)的Unix。Linux则基于System V(SysV)版本Unix的,System V是另一个主要的Unix分支。这两种Unix系统的差异足以让用户郁闷。BSD和SysV有很多一样的命令,但是命令参数经常是不一致的。一些安全社区认为BSD系统比SysV系统更安全。如果你是这种说法的支持者的话,很幸运,Beagle系列开发板可以运行FreeBSD(http://beagleboard.org/project/freebsd/)。图3.3所示的是一个运行着FressBSD的Bealge兼容开发板。
图3.3 Bealge兼容开发板运行的FreeBSD
StarterWare
StarterWare是一种什么样的操作系统?从技术角度来讲,它根本不算是一个操作系统。对于一些应用来说,一个完整的操作系统是不必要的。脱离操作系统可以让更多的性能用于应用本身,但这通常是有代价的。你可以想象一个操作系统就像一个漂亮的界面,能够把你从繁杂丑陋的硬件细节中拯救出来。例如,你可以把一个要存储的文件交给操作系统,它会决定使用哪个硬盘扇区,创建一个目录入口点,并且和硬盘控制器进行通信。德州仪器的StarterWare提供了一个功能集合库,这个库提供诸如USB、图形、SPI、GPIO、中断和网络支持,省得那些想要开发裸机应用程序的人一切从头做起。
Android
虽然Android最初是给移动电话开发的,但现在它也成了一种应用广泛的嵌入式操作系统。德州仪器为几个Android版本提供了开发工具包(http://www.ti.com/tool/androidsdk-sitara)。Circuitco公司在他们的网站上提供了安装Android的教程(http://circuitco.com/support/index.php?title=Android)。或许读者知道,Android是基于Linux内核的,很多命令在Android和Linux系统上都可以使用。闲话少说,接下来就讨论那些可以用于BeagleBoard.org开发板的、种类繁多的Linux系统吧。图3.4展现了一个配有Chipsee触控屏的BeagleBone Black运行Android的示例。
3.1.2 基于Linux方案的选择
毫不奇怪,作为最受欢迎的开源操作系统,Linux中的一些版本可用于Beagle系列的开放硬件。Linux被认为是一个由程序员为程序员设计的操作系统。Linux以充分发挥硬件性能而闻名,尤其是对于比较低端或者比较老旧的计算机硬件。当然,这并不是说Linux在高端硬件上运行得不够好。Windows用户不久前才脱离32位兼容模式运行应用程序的禁锢,而Linux系统的用户早在2001年就已经可以使用64位操作系统了。事实上,64位的Linux内核在AMD首款AMD64架构处理器发布的2年前就已经就绪了。
你可能会惊讶地发现,有那么多你使用的设备在默默地运行着Linux系统。许多网络设备运行Linux系统,一些定制化的Linux版本(如OpenWrt)专门被设计出来,用于替代商业产品出厂内置的Linux。众所周知,许多智能电视和其他现代化家电都在运行着Linux。在支持的平台种类数量方面,没有任何其他操作系统能与Linux相匹敌。
Linux在黑客用户群体里也是显而易见的赢家。Linux系统上有大量的安全工具。支持多平台的工具都是先在Linux系统上实现,然后才移植到其他操作系统平台上。协作式的开源环境滋养了那些不可或缺的安全工具的成长,例如支持监视模式和数据包注入的全功能的无线网卡驱动。Linux提供给用户很多选择:Linux有各种各样的脚本可用;用户可以从众多图形环境中*选择,甚至可以完全放弃图形界面使用纯命令行;像文本编辑这样的常见任务,不同喜好的用户都有多个程序可用。
?ngstr?m
听到?ngstr?m这个词的时候,你也许会想到度量单位(10-10m),?ngstr?m是用来描述光的波长(颜色)和像原子、分子这样小东西的尺寸的。?ngstr?m发行版本也是一个不为人知的嵌入式Linux发行版(http://angstrom-distribution.org)。这个Linux发行版的开发者强调说它被叫作?ngstr?m发行版,而不是?ngstr?m Linux。?ngstr?m发行版本的特点总结如表3.1所示。
表3.1 ?ngstr?m发行版的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 好——为Beagle板子优化编译
opkg(和Debian上的dpkg类似)
一般
差——主要面向嵌入式
一般——少量用户形成的社区
用了专用工具
Beagle系列板子原厂内置,但不为普通用户所知
?ngstr?m发行版本预装在BeagleBoard.org出厂的每个设备上,从最开始的BeagleBoard到BeagleBone Black(在本书编写时,BeagleBoard.org刚刚宣布,未来发布的产品上可能预装Debian Linux)。如果了解BeagleBoard设计者的背景,以及在2008年最原始版本的BeagleBoard发布时ARM设备的支持情况,你就不会惊讶为什么选择?ngstr?m发行版本作为默认预装的系统了。多数Linux桌面用户可能不熟悉这个发行版本。虽然?ngstr?m发行版预装在所有的Beagle上,为了让读者能更好地了解这个发行版的风格,这里还是简要地说一下构建?ngstr?m发行版的步骤吧。
通常嵌入式系统软件(包括操作系统)是在一台更为强大的桌面系统下构建的。这个过程被称为交叉编译(更多细节将在下一章讨论)。采用交叉编译的最主要原因是:嵌入式设备缺少足够的运算能力,无法在合理的时间内完成软件或者系统的构建。?ngstr?m发行版是由OpenEmbedded软件框架构建的(http://openembedded.org)。OpenEmbeded构建过程中使用BitBake构建工具(http://developer.berlios.de/projects/bitbake)。BitBake允许用户创建自己的“菜谱”,来精确描述软件包的“烹饪”过程,并自动把成功构建所依赖的软件组件包括进来。
构建?ngstr?m的过程非常简单。首先要下载OpenEmbedded BitBake安装设置脚本,根据?ngstr?m发行版官网所述,这些脚本可以从项目的Git仓库获得,命令如下:git clone git://git.angstrom-distribution.org/setup-scripts。?ngstr?m的服务器似乎不是最快最可靠的,如果下载遇到了困难,可以用GitHub代替它。相应的命令是:git clone https://github.com/Angstrom-distribution/setup-scripts 。
脚本下载完,第二步就是构建内核。所有的软件都使用oebb.sh脚本构建。该脚本使用MACHINE环境变量来指定目标架构。这个可以在启动脚本程序中设置,也可以在shell中手动设置。显然在命令行上执行脚本前设置变量更方便些。可以通过在命令前加上VARIABLE=value(变量=值)的形式使环境变量作用于特定的命令(我打赌,Linux新手肯定不知道)。下列命令将配置环境,编译Beagles的软件,更新文件,并构建内核:
上述的命令将会执行很长时间。由于脚本的写法问题,OpenEmbedded层也会被下载,尽管它和Beagles没什么关系。一旦内核构建好,最终步骤就是用选择的BitBake“菜谱”去构建文件系统了。例如:MACHINE=beagleboard bash ./oebb.sh bitbake console-image将会构建一个只有命令行的根文件系统。如果用Ubuntu系统作为构建主机,聪明的检查器将会向你“抱怨”找不到makeinfo,这个命令工具包含在texinfo包里。
德州仪器为?ngstr?m做了一些优化调整,以便能在Beagles上获得更好的性能。有一些可以用来构建基于?ngstr?m的嵌入式系统的工具,德州仪器的Jason Krinder创建的BoneScript,是一个可用来方便操作GPIO的Node.js库,集成在Beagles标准?ngstr?m 发行版本中。虽然?ngstr?m允许用户轻松创建嵌入式设备,但它的仓库缺少很多必需品,特别是很多标准桌面应用和渗透测试工具。图3.5所示是一个运行?ngstr?m的BeagleBone Black开发板。
图3.5 运行?ngstr?m的BeagleBone Black开发板
Arch Linux
Arch Linux是以简单、轻量、灵活为目标而创建的(http://archlinux.org)。Arch Linux原本是为Intel架构平台开发的,但是目前已经被移植到了ARMv5、ARMv6和ARMv7上(http://archlinuxarm.org)。Arch持续更新并且针对硬件优化,例如,Arch充分利用Beagles上集成在ARMv7 Cortex-A8里的“硬件浮点”数学处理器。Arch的设计理念是让有经验的Linux和Unix用户用得得心应手。Arch的特点总结如表3.2所示。
表3.2 Arch Linux的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 好——非常轻量
Pacman
非常好
差——支持ARM的工具非常少
好——活跃的社区,尤其是桌面版本
简单直接
支持ARMv5、ARMv6和ARMv7
http://archlinuxarm.org/platforms/armv7/ti/beaglebone-black上可找到关于将Arch Linux安装到BeagleBone Black的详细介绍。安装包括几个步骤。首先,用fdisk在microSD卡上分2个区。第一个分区保存bootloader,必须是一个至少64MB的FAT16格式的分区。第二个分区格式化为ext4格式,包含根文件系统。第二步,使用mkfs在microSD卡分区上创建文件系统。第三步,从archlinuxarm.org上下载bootloader和根文件系统镜像。第四步,将镜像文件解压到microSD卡上,如果你的系统足够小,以至于可以存放到BeagleBoard或者BeagleBone Black的eMMC上,可以先从microSD卡启动,再向eMMC上安装。这个方案并不适合我们的渗透测试根系统,它占用的空间大于6GB。图3.6所示的是一个BeagleBone Black上运行的Arc Linux屏幕截图。
图3.6 BeagleBone Black上运行的Arc Linux
Gentoo
Gentoo是一个强大并且高度定制化的Linux发行版本。一个最与众不同的特点就是几乎所有的东西都是从源码构建而来。因此它能提供高度的定制能力以及相当大的性能改进潜力。从源码构建能充分利用处理器特有功能;通过去除不需要的功能,可执行文件可以更小,更小的可执行文件可以加载得更快,占用更少的内存。Gentoo的特点总结如表3.3所示。
表3.3 Gentoo Linux的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注
极好——所有的东西都是定制化编译
Portage
好——桌面版本更好
好——桌面版本更好
好
不同于其他流行的发行版本,但是相当容易
默认情况,所有东西都需要从源码构建,可以提供极好的性能,但是包安装通常是很耗时间的
安装Gentoo是一个非常增长见识,但有时可能令人受挫的工作。如果你有一些Linux方面的经验,并且想要学习到更多关于Linux的知识,我强烈推荐你至少安装一次Gentoo,甚至可以在一些老的、不用的硬件上安装。Gentoo通常是分阶段安装的。首先,安装一个非常基础的系统;第二步,安装标准的构建工具。除了编译器和make,Gentoo使用一个强大的包管理工具——Portage;第三步, Portage用来安装构成完整的Gentoo系统的各种软件包。如果一个包在仓库里,可以通过Portage很容易地构建,使用命令emerge <package-name>。如果一个包无法从Gentoo仓库里获取,事情就变得更有趣一些了。
在Beagles上安装Gentoo的过程和安装桌面版是有所不同的。对于新手,在Beagle上安装Gentoo之前,需要一个支持microSD读卡器的桌面Gentoo系统。桌面版的Gentoo电脑用来创建在Beagle上使用的Gentoo系统microSD卡。详细的安装过程可以在http://dev.gentoo.org/armin76/arm/beagleboneblack/install.xml上找到。如同安装桌面版本一样,在Beagles上安装Gentoo比其他Linux发行版本稍微复杂一些。
首先,安装所需的构建工具。第二步,构建交叉编译器。第三步,下载U-boot bootloader(包含补丁的完整版)的副本并构建。第四步,配置并构建内核(包括固件)。第五步,格式化microSD卡,幸运的是有脚本可以完成这个任务。第六步,下载一个基本的根文件系统并写到microSD卡上。第七步,下载Portage快照,并复制到microSD卡的根文件系统里。第八步,配置一系列的选项(root密码、网络、文件系统、hostname、系统服务等)。第九步,将内核和U-boot复制到microSD卡的FAT16格式分区上,最后,Beagle可以从microSD卡启动,后续的其他包就可以安装了。
构建一个Gentoo系统可能会花上几天的时间。对于这种额外付出的回报是获得一个高度优化调校过的系统,也许还能够获得一些在周围技术圈炫耀的资本。大多数常用桌面应用程序可以在Gentoo的仓库里找到,但或许它在渗透测试应用程序方面还略逊于其他的发行版。因为构建应用可能是个费时的过程。鉴于这些原因,Gentoo可能并不是我们打造渗透测试Linux发行版的首选方案。
Sabayon
在现实世界里,Sabayon是一道意大利甜点。Sabayon Linux是Gentoo的衍生版,Sabayon的一个目标是为用户提供一个开箱即用的SOHO服务器功能(NFS、Samba、BitTorrent、Apache等)系统。它还提供了很多解码器,允许用户把电脑作为家庭影院电脑(HTPC)使用。Sabayon的特点如表3.4所示。
表3.4 Sabayon Linux的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 优秀——基于Gentoo
Portage
好
好
差——目前还没有太多用户
同Gentoo
是一个为SOHO和家庭影院定制的Gentoo
如同它的基础Gentoo一样,Sabayon使用滚动更新,这意味着基于Sabayon的系统可以持续更新而不用等待下一个版本的发布。不同于Gentoo的是,Sabayon提供系统快照,以便于用户可以安装大量软件包而不用从源码构建它们。BeagleBone安装Sabayon的详细说明可以在https://wiki.sabayon.org/index.php?title=Hitchhikers_Guide_to_the_BeagleBone_(and_ARMv7a)找到。不难想到,它的安装过程和Gentoo很像。
Buildroot
Buildroot本质上并不是一个Linux发行版本,而是一套编译完整嵌入式Linux系统的工具系统(http://buildroot.uclibc.org/)。因为它是为了构建嵌入式Linux系统而打造的,所以没有包含完整的软件仓库。这显然不是作为渗透测试系统基础的最佳选择。Buildroot的特点如表3.5所示。
表3.5 Buildroot的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 一般
无
无
无
差
没有标准工具
一个用于构建嵌入式Linux系统的工具系统,非传统意义上的发行版本
使用Erlang/OTP的Nerves项目
Erlang是一种使用OTP库来构建可扩展的软实时系统的编程语言,Nerves项目使用Buildroot构建的Linux内核,并使用Erlang交叉编译工具创建用于BeagleBone Black的固件镜像。虽然Nerves也许能用于创建渗透测试设备,但它似乎并不是一个构建渗透测试操作系统基础的最佳方案。Nerves项目的特点如表3.6所示。
表3.6 Nerves项目的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 未知
无
无
无
差——项目才刚起步
没有标准工具
用于创建软实时系统的系统
Fedora
Red Hat Linux是仍在被广泛使用的最老的发行版本之一,在2003年,Red Hat终止了Red Hat Linux的支持,并且从那时开始只支持Red Hat Enterprise Linux(RHEL)。Fedora(原来被叫作Fedora Core)是一个Red Hat的社区版本,它被创建来替代Red Hat Linux满足非企业用户的需要。Fedora项目得到了Red Hat公司部分赞助支持,事实上,RHEL是基于Fedora代码为基础的分支。社区开发Fedora,然后Red Hat选择将其中稳定的功能特性加入到RHEL中。顺便一提,GNU许可要求Red Hat提供RHEL的源代码,即产生了另一个发行版本(没有商业支持)CentOS(http://www.centos.org/)。Fedora的特点如表3.7
所示。
表3.7 Fedora的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 一般
Red Hat 包管理器(RPM)
未知
未知
差——Beagle镜像被发布出来了,然后被撤回了
标准工具
不像桌面版本Fedora支持得那么好
Fedora是一个主要面向桌面的Linux发行版本,但是后来出现了其他架构的移植版本,如ARM版(http://fedoraproject.org/en/get-fedora-options#2nd_arches)。如同RHEL和一些其他发行版本一样,Fedora使用Red Hat包管理器(RPM)管理软件包。仓库支持很完善。安装Fedora简单明了。从http://fedoraproject.org/en/get-fedoraoptions#2nd_arches下载镜像文件,写入到microSD卡上,然后就完成了。有一个BeagleBone Black专用镜像,但是在写本书时,因为使用?ngstr?m内核和Fedora根文件系统是一个有问题的组合,所以镜像被撤回了。运行Fedora的BeagleBone Black的截屏如图3.7所示。
图3.7 BeagleBone Black上运行的Fedora
Debian
Debian由Ian Murdock在1993年创建(http://www.debian.org/doc/manuals/project-history/)。Debian以Ian和他当时的女友,现在的妻子Debra命名。Debian已经被移植到了大量的架构上,它使用Debian包管理器(dpkg)进行软件包管理。仓库支持很不错,但是很多从它衍生的发行版(如Ubuntu)有着更好的支持。Debian有着大量的衍生版本,这些衍生版本中,Ubuntu是最受欢迎的。Debian的特点如表3.8所示。
表3.8 Debian的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 一般
dpkg——Debian包管理器
好
差——桌面版本更好
非常好配置
标准工具
良好的社区支持,大部分归功于一些个人付出努力的结果
常听到的关于Debian的抱怨是,它不像其他Linux发行版更新得那么频繁。奇怪的是衍生版本通常是持续更新的。Debian对Beagle的支持很好,安装Debian的详细说明可以在http://elinux.org/BeagleBoardDebian上找到。由于它的流行,Beagle上安装Debian很简单,可以通过互联网安装一个最新的镜像,或者安装demo镜像到Beagle上。
为了执行网络安装,首先使用git clone git://github.com/RobertCNelson/netinstall.git下载脚本,然后使用下面的命令下载软件,复制到microSD卡(至少1GB大小)上。
安装demo镜像的过程类似,下载demo镜像、解压、校验,然后使用脚本安装到microSD卡上。下列的命令将会执行demo镜像的安装(注意:本书写作时,这是最新的版本;读者也许希望到网上找最新的版本):
这个系统是命令行版本,如果想安装桌面环境,需要在安装后增加合适的软件包。一个好处是这个的根文件系统足够小,可以安装到BeagleBone Black的eMMC上,并且还有剩余空间容纳一些工具。
Ubuntu
Ubuntu和其衍生版极其受欢迎,Ubuntu已经占领DistroWatch排行榜前列几年了(http://distrowatch.com)。Ubuntu初次发布是在2004年,由Mark Shuttleworth的公司Canonical维护(http://ubuntu.com)。Canonical声称Ubuntu是这个世界上最受欢迎的开源操作系统。Ubuntu是来自南非一个富有哲理的词汇,其含义鼓励人们像一个社区一样在一起工作劳动。与它所基于的Debian不同,Ubuntu每6个月发布一个新版本。很多人认为Ubuntu是初学者最容易使用的Linux发行版本之一。Ubuntu的特点如表3.9所示。
表3.9 Ubuntu的特点
性能
包管理器
桌面应用仓库支持
Hacking应用仓库支持
社区支持
配置
备注 好——支持ARMv7的硬件浮点
Aptitude/dpkg
非常好
非常好
极好
标准工具
根据Canonical所说,Ubuntu是世界上最受欢迎的Linux发行版本。由于某些个人的努力,能够很好地支持Beagles
由于它太受欢迎了,Ubuntu有极好的软件仓库支持。Ubuntu包管理器apt(advanced packing tool),是一个极其简单易用的工具。安装一个新的软件包只需要在Shell中输入sudo apt-get install <package name>。更新系统的所有软件包也一件极其简单的事情,使用sudo apt-get update && sudo apt-get upgrade更新本地仓库信息,然后安装可用更新。如果不确定软件包的名称,或者认为一个工具可能被包含在另一个软件包里,可以通过执行apt-cache search <package or utility name>来找到正确的软件包名。还有图形化或基于文本的前端界面让软件包管理更容易。
虽然Linux系统有许多图形窗口化的桌面环境,但多年来两个被广泛使用的、最主要的桌面环境是GNOME和KDE。两个桌面环境都有着自己的追随者。Canonical还开发了它们自己的名为Unity的图形化窗口的桌面环境。毫无意外地,一些KDE和GNOME的“信徒”并不喜欢Unity。Kubuntu提供给喜欢KDE并想使用Ubuntu的用户(http://kubuntu.org)。本书就是在运行LibreOffice和其他一些开源工具的Kubuntu系统上完成的。Ubuntu Gnome则是为那些喜欢Gnome桌面环境的用户(http://ubuntugnome.org)准备的。
Unity、KDE和Gnome对于Beagle那有限的RAM来说都有点太大了。Beagles和低性能桌面电脑通常会使用一个轻量级的窗口系统。当一个轻量级桌面环境被用于一个桌面电脑时,这个发行版本名字是有变化的。如Xubuntu 是一个使用Xfce桌面环境的Ubuntu版本。当在基于ARM架构的硬件系统上运行它的时候,我们会说硬件上跑的是Ubuntu系统,即使使用的不是Unity桌面环境。
在Beagles上运行Ubuntu有多种选择。可以选择主版本、这个版本的变体和某个特定的内核。由于Ubuntu和内核最近的变化,这些选择比初听起来的要麻烦。新的设备,例如BeagleBone Black只支持较新版本的Ubuntu和Kernel,这些版本与从前的有些不兼容。在我们讨论完一个优秀的渗透测试Linux发行版的必备要素之后,再深入讨论这个问题。
3.2 渗透测试Linux发行版本所需的功能特性
现在我们对Beagles上可用的系统已经有所了解,顺理成章地,我们该问自己什么功能特性应该是适合的渗透测试Linux发行版本必备的。被选择的发行版本应该提供良好的性能和社区支持,软件包仓库要包含绝大多数我们想要使用的工具,容易配置,并且工作可靠。
怎么才能实现良好的性能?所有Beagles系统板都使用ARMv7 Cortex A8处理器,这些芯片支持“硬件浮点”数学处理器。运行一个能够兼容老的ARM架构的支持“软浮点”系统如同在i7处理器的机器上运行Windows 98。良好的性能起始于一个好的基础,这里,它意味着一个支持“硬件浮点”运算的内核。在这个基础上,进一步地需要构建一个有效的文件系统,优化的驱动以及只开启必需的服务。
等着我们的将是一番艰苦卓绝的奋斗,因为不可能一帆风顺,这是作为技术开拓者必须经历的。这也是要选择一个拥有良好社区支持的Linux发行版本的原因。正是因为拥有一个强有力的社区,才让Beagles从同类开发板中脱颖而出。Beagle用户可以使用在线聊天、论坛和邮件列表。邮件列表非常活跃,在一个比较受欢迎的Linux发行版本中,一个小时能收到关于某个问题的多个答复是很常见的。甚至不必大惊小怪,回答你问题的人可能正是开发板设计者或者发行版本开发团队领袖本人。
好的软件仓库可以使一个Linux发行版本更容易使用。反过来,如果你需要一直在互联网上寻找需要的软件,或者更糟糕的,总是*直接从源码编译的话,也许该考虑换一个Linux发行版了。大部分发行版本对桌面应用都有良好的支持,虽然这对我们的也很重要,但我们更关心对主要黑客工具的支持。能有多个可选的文本编辑器固然很好,但远赶不上能够轻松安装aircrack-ng、Wireshark和Scapy(一个Python编写的网络工具)重要。
我们一直尝试构建灵活性好的设备,可以用作投置机、破解攻击机,或者渗透测试桌面环境。这需要一个可以很容易配置的操作系统。系统应该可以很容易地用熟悉的工具进行配置和重新配置。选中的系统应该允许随意地关闭不必要的功能和特性,网络参数可以进行修改和远程配置。
在我们的应用中,稳定可靠也是非常重要的特性。如果不能确保运行数小时既不死机也不崩溃,即使电池能支持远程破解攻击机运行2天又有什么用呢?当设备能够在目标环境中接通电源或者从PC取电(例如嵌入到Dalek desktop defender玩具的情况),它们应该能够无故障地一直运行下去。
分析了上面9个Linux发行版本,Ubuntu成为明显的胜出者。最重要的一点就是能在ARM架构上为黑客工具程序提供强有力的支持。作为世界上最受欢迎的Linux发行版本,Ubuntu享有极好的社区支持。正是那些默默奉献者的努力,才让Beagles用上优化的Ubuntu。虽然也可以基于Arch Linux、Gentoo或者Debian构建一个系统,但这可能会比Ubuntu多花很多时间。不妨设想一下,你是愿意把宝贵时间花在折腾操作系统上,还是更想用这些时间来创造一些很棒的破解脚本呢?
3.3 基于Ubuntu方案的选项
现在我们已经决定使用Ubuntu,你可能会认为这就完事儿了,但你错了。Ubuntu提供给我们一大堆选择,第一个要做的决定是选择哪个Ubuntu版本,本书编写时,Ubuntu 13.04和13.10已经可以在Beagles上使用了(更高的版本也是可用的,只要你用的不是BeagleBone Black)。基于Ubuntu 14.04的一个实验版本也可以使用了。因为Ubuntu13.04完全满足目前的需要,并且它是久经考验的稳定版,所以本书将选择它。
Ubuntu 13.04选择妥当后,仍有一些细节需要确认。是否应该把BeagleBone Black的操作系统安装在eMMC上?eMMC的空间只够安装命令行版本的Ubuntu,Deck的根文件系统超过6GB。如果把操作系统放在eMMC上,那将需要挂载优盘或者microSD卡来安装全部工具,在这种场景下尝试安装桌面环境是不现实的。而且,既然使用了外部的存储介质,使用eMMC带来性能增益已经完全被抵消掉了(系统可能会更慢);并且,耗电将会增加。由于这些原因,我们将把带桌面环境的Ubuntu13.04的基本系统安装到一个8GB或者更大的SD卡上。
现在我们已经决定了安装什么和存储到哪里,接下来需要选择一个安装方法,三种主要的安装方式是:下载预配置的镜像、网络安装和手动安装。因为我们想要继续构建我们的工具集合(下章的主题),手动安装的方案就被排除了,因为花的时间太长,并且太容易出错。考虑到要在多个系统上构建,所以网络方式也被排除了。从一个预配置的镜像开始似乎最适合我们的情况,预配置镜像提供了一个基础的根文件系统,可被解压到microSD上。把工具添加到这个根文件系统中,然后重用安装脚本,将我们的定制镜像应用到多个系统上。
3.3.1 Ubuntu变种
Canonical提供了Beagles和其他ARM系统的镜像。但是,这些镜像并未进行优化。本书写作时,Canonical仍未提供Ubuntu 13.04的镜像,12.04还是最新的版本。幸运的是,Robert C. Nelson已经为Beagle家族的板子提供了一个demo镜像和优化的内核。Nelson的demo镜像是一个好的起点,它是只有命令行环境的镜像,所以我们需要在安装各种黑客工具前安装一个窗口环境。
3.3.2 内核的选择
Nelson先生的Ubuntu 13.04的镜像使用3.8或者更高版本的内核。本书写作时,3.8的内核是BeagleBone和BeagleBone Black的默认内核, BeagleBoard-xM使用3.12作为默认内核。通过补丁可以把BeagleBone的内核升级到3.12,如果使用3.8时遇到了问题,可以考虑安装这个补丁。内核镜像可以在Nelson的网站上http://rcn-ee.net/deb/raring-armhf/ 得到。3.8的内核在ARM平台上体现出了大量的变化。在之前的版本中,ARM系统制造商不得不提供定制化的内核,这种情况对任何人来说都没有好处,所以设备树作为应对硬件差异化的新方法应运而生。
设备树
BeagleBone Black是第一个运行支持设备树的新内核的开发板,这可能会带来一些暂时的困扰,但是,最终结果值得忍受这暂时的不适。设备树是一个数据结构,内核用它实现跨多种体系结构(http://elinux.org/Device_Tree)的标准方式来发现和配置设备(包括那些主板内置的设备)。设备树使得计算机系统以及附加硬件的设计者的生活变得更美好。
本书后面将会对设备树进行更详细的说明。现在,只需要把它看作一种更加容易支持所购买和构建的cape的简洁方法即可。如果购买的设备有EEPROM来描述自身,操作系统可以自动使用叫作设备树层叠的方法连接并配置相应的设备。对于那些你构建的和其他没有自身描述EEPROM的设备,可以加载一个或者多个包括在Ubuntu里的设备树层叠。
3.4 创建一个microSD卡
本章已经囊括了足够的理论知识,是时候实际操作一下了。我们将安装Robert C. Nelson版本的Ubuntu 13.04到microSD卡上。如前所述,之后将重复用这个安装过程去把完整渗透测试发行版镜像安装到多个硬件设备上。如果想安装Deck系统,则需要一个8GB或者更大的microSD卡。多花钱购买一个更快的microSD卡(class 10或者更好的)是值得的,节省这点儿钱而使用class 4或者class 6的SD卡是完全不值得。另外,不是所有厂商的产品都是一样的。我已经见识过在标称同一速度的卡持续读写的时候,有多么大的差距。
Nelson先生已经让Beagles(和其他基于ARM架构的开发板,如PandaBoard)上安装Ubuntu变得很轻松。下面的指导说明来自 http://elinux.org/BeagleBoardUbuntu。如果你使用上面的说明遇到了问题,可以求助于elinux.org页面。接下来需要下载镜像,选择性的校验,解压它,然后运行一个安装脚本:
上边的setup_sdcard.sh运行要长达几分钟。这个脚本初始化microSD卡,安装正确的内核,然后把一个小型的根文件系统拷贝过去。它运行的时间主要取决于卡的写速度。后边重用这个脚本和这个过程时,花费的时间比这要长得多,因为完整的根文件系统大了很多,Deck的根文件系统超过6GB,而Nelson先生的基本根文件系统只有不到400MB。3.6节将对该脚本深入讲解。
3.5 本章小结
本章考察了BeagleBoard.org系列计算机板可用的多种操作系统,把它们逐一按照我们的标准进行分析评估,这些标准是作为构建渗透测试发行版的基础系统所必备的。最终Robert C. Nelson定制的Ubuntu 13.04脱颖而出。我们也看到这个基础系统很容易通过一个脚本来安装。下一章将深入讨论在这个基础上添加一有用的工具,把它打造成一个完整的渗透测试系统。
3.6 本章附录:深入分析安装脚本
安装Ubuntu如此简单的一大部分原因是Robert C. Nelson完善的安装脚本,这个脚本有1700行,大部分脚本都是用于验证的。其中最有关系的部分包括在这里。第一段包括了版权信息声明和基本的安装说明。除去版权信息声明,大部分注释用于解释这个脚本:
除去进行大量验证工作后,脚本归结整理后只有下面几行:
在上面的脚本中调用的函数内容如下,函数已经加注释。为了简化内容,部分与Beagles无关的函数已经被移除了: