首先我们先来了解一下网络安全渗透测试。长期以来,很多人都认为网络安全渗透测试就是使用扫描工具找出目标网络的漏洞,甚至有一些入行不久的渗透测试人员也这样认为。基于这样的理解,很多人在渗透测试过程中仅仅使用漏洞扫描工具对目标网络进行扫描。漏洞扫描的确很重要,但它只是整个网络安全渗透测试的一部分。实际上,大多数时候的漏洞扫描结果也仅仅能够反映出目标网络是否及时进行了系统更新。
实际上,网络安全渗透测试严格的定义是一种针对目标网络进行安全检测的评估。 通常这种测试由专业的渗透测试人员完成,目的是发现目标网络存在的漏洞和安全机制方面的隐患,并提出改善方法。渗透测试人员会采用和黑客相同的方式对目标网络进行入侵,这样就可以检测目标网络现有的安全机制是否足以抵挡恶意的攻击。
根据事先对目标网络的了解程度,网络安全渗透测试的方法有黑盒测试、白盒测试及灰盒测试3种。
黑盒测试也被称作外部测试。在进行黑盒测试时,事先假定渗透测试人员对目标网络的内部结构和所使用的程序完全不了解,从网络外部对其网络安全进行评估。黑盒测试中需要耗费大量的时间来完成对目标网络的信息的搜集。除此之外,黑盒测试对渗透测试人员的要求也是最高的。
白盒测试也被称作内部测试。在进行白盒测试时,渗透测试人员必须事先清楚地知道目标网络的内部结构和技术细节。相比黑盒测试,白盒测试的目标是明确定义好的,因此白盒测试无须进行目标范围定义、信息搜集等操作。进行这种渗透测试的目标网络往往是某个特定业务对象,相比黑盒测试,白盒测试往往能够给目标网络带来更大的价值。
将白盒测试和黑盒测试组合,就是灰盒测试。在进行灰盒测试时,渗透测试人员只能了解部分目标网络的信息,但不会掌握网络内部的工作原理和某些限制信息。
网络安全渗透测试的测试对象包括一切和网络相关的基础设施,其中包括以下几个方面。
另外,需要注意的一点是,网络安全渗透测试并不能等同于黑客行为。相比黑客行为网络安全渗透测试具有以下几个特点。
作为网络安全渗透测试的执行者,我们首先要明确在整个渗透测试过程中需要完成的工作。当我们接收到客户的渗透测试任务时,往往对所要进行测试的目标网络知之甚少甚至一无所知。而在渗透测试结束的时候,我们对目标网络的了解程度往往已经远远超过了客户。在此期间,我们要做大量的研究。整个渗透测试过程可以分成以下7个阶段。
在前期与客户的交流阶段中,渗透测试人员需要与客户进行商讨来确定整个渗透测试的范围,也就是说要确定对目标网络的哪些设备和哪些问题进行测试。在整个商讨的过程中,我们重点要考虑的因素主要有以下几个。
通常这个目标网络是一个包含很多主机的网络。这时我们需要确定的是渗透测试所涉及的IP 地址范围和域名范围。但是客户所使用的 Web 应用程序和无线网络,甚至安保设备和管理制度也可能会是渗透测试的测试对象。同样需要明确的还有,客户需要的是全面评估,还是只针对其中某一方面或部分的评估。
这个阶段我们可以采用的方法主要有黑盒测试、白盒测试及灰盒测试 3 种
如果采用的是白盒测试,就需要客户提供测试所必需的信息和权限,客户最好可以按受我们的问卷调查。确定可以进行渗透测试的时间,是只能在周末进行,还是随时可以进行。如果在渗透测试过程中导致测试对象受到了破坏,应该如何补救等。
在整个渗透测试过程中,必须与客户明确哪些设备不能进行渗透测试,哪些技术不能应用等。另外,也需要明确在哪些时间点不能进行渗透测试。
根据客户的需求,我们需要给出整个渗透测试的进度表,让客户了解渗透测试的开始时间与结束时间,以及我们在每个时间段所进行的工作。
这个话题其实很少出现在书中,但这恰恰是一个在实践中很复杂的问题,需要考虑的因素很多。如果我们对一个拥有 100 台计算机的网络进行渗透测试,收取的费用为 10万元,那么平均每一台计算机的费用就是 1000 元。但这并不是一种线性的关系,如果某个客户只要求我们对一台计算机进行渗透测试,那么费用可能不只是 1000 元了,因为平均工作量明显不同。在计算费用的时候要充分考虑各种成本。
渗透测试人员必须牢记的一点是,我们并非黑客。发现目标网络存在的漏洞,获取目标网络的控制权限,或者得到目标网络的管理密码只是完成了一部分任务。我们还需要明确客户期望在渗透测试结束时应该达到什么目标,最终的渗透测试报告应该包含哪些内容
这里的“情报”指的是目标网络、服务器、应用程序等的所有信息。渗透测试人员需要使用各种资源尽可能地获取测试对象的相关信息。
如果我们采用的是黑盒测试,那么情报的搜集阶段(也称为信息搜集阶段)可以说是救个渗透测试过程中最为重要的一个阶段。所谓“知己知彼,百战不殆”也正说明了情报搜集的重要性。这个阶段所使用的技术可以分成两种。
这种扫描方式通常不会被对方发现。如果我们希望了解某个人,那么可以向他身边的人询问,如他的邻居、他的同事,甚至他所在社区的工作人员等。搜集到的信息包括哪些呢?可能包括他的名字、年龄、职业、籍贯、兴趣、学历等。
同样,对于一个目标网络,我们也可以获得很多信息。如现在我们仅仅知道客户的-个域名,通过这个域名我们就可以使用 Whois 查询到这个域名所有者的联系方式(包括电话号码、电子邮箱、公司所在地等 ,以及域名的注册和到期时间等。通过搜索引擎可查找与该域名相关的电子邮箱、博客、文件等。
这种扫描方式的技术性比较强,通常会使用专业的扫描工具来对目标网络进行扫描扫描之后将会获得的信息包括目标网络的结构、目标网络所使用设备的类型、目标主机上运行的操作系统、目标主机上所开放的端口、目标主机上所提供的服务、目标主机上所运行的应用程序等。
如果将开展一次渗透测试看作指挥一场对抗赛,那么威胁建模阶段就像是在制定策略。在这个阶段有两个关键性的要素一一资产和攻击者(攻击群体)。首先我们要对客户的资产进行评估,找出其中的重要资产。如果我们的客户是一家商业机构,那么这家机构的客户信息就是重要资产之一。
在这个阶段主要考虑以下问题。
分析不同攻击者发起攻击的可能性,可以更好地帮助我们确定渗透测试时所使用的技术和工具。通常这些攻击者可能是以下几种。
漏洞分析阶段是从目标网络中发现漏洞的过程。漏洞可能位于目标网络的任何一个位置,从服务器到交换机、从所使用的操作系统到 Web 应用程序等都是我们要检查的对象。我们在这个阶段会根据之前搜集的情报发现的目标网络的操作系统、开放端口及服务程序等信息,查找和分析目标网络中存在的漏洞。这个阶段如果单纯依靠手动分析来完成,是十分耗时、耗力的。不过 Kali Linux 2 操作系统提供了大量的网络和应用漏洞评估工具利用这些工具可以自动化地完成这些任务。另外,需要注意的一点是,对目标网络的漏洞分析不仅限于软件和硬件,还需要考虑人的因素,也就是长时间地研究目标人员的心理以便对其实施“欺骗”,从而达到渗透目标。
找到目标网络上存在的漏洞之后,就可以利用漏洞渗透程序对目标网络进行测试了在漏洞利用阶段,我们关注的重点是,如何绕过目标网络的安全机制来控制目标网络或访问目标资源。如果我们在漏洞分析阶段顺利完成了任务,那么漏洞利用阶段就可以准确、顺利地进行。漏洞利用阶段的渗透测试应该具有精准的范围。漏洞利用的主要目标是获取我们之前评估的重要资产。进行渗透测试时还应该考虑成功的概率和对目标网络可能造成的最大破坏。
目前较为流行的漏洞渗透程序工具是 Metasploit。通常这个阶段也是最为激动人心的因为渗透测试人员可以针对目标网络使用对应的入侵模块获得控制权限。
后渗透攻击阶段和漏洞利用阶段连接得十分紧密,作为渗透测试人员,必须尽可能地将目标网络被渗透后可能产生的后果模拟出来。在后渗透攻击阶段可能要完成的任务包括以下几个。
这个阶段的主要目的是向客户展示当前网络存在的问题可能会带来的风险
报告阶段是整个渗透测试的最后一个阶段,同时也是最能体现我们工作成果的一个阶段,我们要将之前的所有发现以报告的形式提交给客户。实际上,这份报告也是客户唯一的需求。我们必须以简单、直接且尽量避免大量专业术语的报告向客户汇报测试的目标网络中存在的问题,以及可能产生的风险。这份报告应该包括目标网络最重要的威胁、使用渗透数据生成的表格和图标,以及对目标网络存在问题的修复方案、当前安全机制的改进建议等。
在 BackTrack(也就是 KaliLinux 的前身)出现之前,执行网络安全渗透测试的方法很难统一。这主要是因为在 Linux 操作系统上存在大量的渗透测试工具,而渗透测试人员又往往会有不同的选择。这种情况的后果就是在进行渗透测试的教学或者培训时,很难有统规范的体系。
BackTrack 集成了大量的优秀工具,而且 BackTrack 按照这些T具的用途进行了分类这样我们在进行网络安全渗透测试时就无须面对数量众多的工具了。下面我们对几款较为流行的渗透测试工具进行简单介绍,这些工具也将会在本书的实例中讲解到。
如果规定只能使用一款工具进行渗透测试,我的选择一定会是 Nmap,这是一款富有“传奇色彩”的渗透测试工具。Nmap 在国外已经被大量的渗透测试人员所使用,它的“身影”其至出现在了很多的影视作品中,其中影响力较大的是《黑客帝国》系列。在《黑客帝国2》中,崔妮蒂(Tritnity)就曾使用 Nmap 攻击安全外壳协议( Secure Shel1,SSH)服务,从而破坏了发电厂的工作。Nmap 是由Gordon Lyon 设计并实现的,于1997 年发布最初设计 Nmap 的目的只是希望打造一款强大的端口扫描工具,但是随着时间的推移Nmap的功能越来越全面。2009年7月17日,开源网络安全扫描工具Nmap 正式发布了5.00版,这是自1997年以来最重要的发布代表着Nmap 从简单的网络扫描工具变身为全方位的安全工具组件。可以毫不夸张地说,在 Nmap 面前,网络是没有“隐私”的。网经中有多少台主机、每台主机运行的操作系统、每台主机运行的应用程序,甚至每台主机上存在的漏洞等信息都可以利用Nmap 获得。
Maltego和Nmap一样都是信息搜集工具,但是两者的工作方式全然不同。Nmap 是典型的主动扫描工具,而Maltego 则是被动扫描工具。和Nmap 获取的操作系统、端口、服务等信息不同,Maltego获取的往往是网络用户的信息。利用 Maltego,我们可以仅仅从个域名找到和它有关联的大量信息,并把这些信息整合。此外,Maltego 支持用户操作上的自定义行为,从而整合出最适合用户的“情报拓扑”
Recon-NG是一个由 Python 编写的全面 Web 探测工具集,目前这个工具集中包含 80多个独立的模块。注意,不能简单地将 Recon-NG 看作一个主动扫描工具或者被动扫描工具,因为它提供了强大的开源 Web 探测机制可帮助透测试人员快速、彻底地进行探测。
OpenVAS 是一个开放式漏洞评估系统,这是一款强大的工具。一般来说,这款工具也是大多数人眼中最为“神奇”的工具。因为你只需要把要测试的目标主机的 IP 地址填入OpenVAS,它就会把目标主机的操作系统(以下简称目标系统)上存在的漏洞显示出来也就是说你需要做的,仅仅是填写一个 IP 地址,而得到的却是一份关于目标系统存在漏洞的详细报告。OpenVAS 可以分成两个核心部分,一个是网络漏洞测试引擎,另一个是网络漏洞库。它的工作原理就是由网络漏洞测试引擎向目标主机发送特制的数据包,然后将目标主机的回应与网络漏洞库中的样本进行比较,如果匹配成功,则可以认为存在该漏洞。
Metasploit 可以说是当今最负盛名的渗透测试工具之一,在网络安全行业无人不知。如果说OpenVAS的用途是发现目标网络的漏洞,那么Metasploit 就是开启漏洞的“钥匙”拥有这把钥匙的人,可以轻而易举完成对目标网络的渗透。这款强大的工具是 H.D.Moore在 2003 年开发的,当时它只集成了少数几个可用于渗透测试的工具。这是一个革命性的突破,因为在 Metasploit 出现之前,渗透测试人员需要自已去编写漏洞渗透模块,或者通过各种途径寻找漏洞渗透模块。而 Metasploit 都助渗透测试人员从这样的工作中解放了出来,它集成了大量的漏洞渗透模块,统一了这些模块的使用方法,并且提供了大量的攻击载荷(Pavload)和辅助功能。可以这样说,“有了 Metasploit,几乎任何人都可以如同电影中的黑客一样轻松地入侵目标网络。”
社会工程学是一门新兴的学科,近年来这门学科得到了迅速发展。越来越多的黑客入侵事件与社会工程学分不开。
我们经常会听说钓鱼邮件、钓鱼网站之类的说法,这些其实都是社会工程学的典型应用。David Kenned 使用 Python 编写了一个功能众多的社会工程学工具包-SET。SET利用人们的好奇心、信任、贪婪及一些错误来进行攻击。这个工具包提供了大量功能,如发送木马邮件、生成假冒网站、利用V 盘传播后门等。目前该工具包已经成为渗透测试行业部署实施社会工程学攻击的标准工具包。
Ettercap 的功能主要是实现对目标主机的欺骗和监听,这种工具的应用范围有限,但是在其应用范围之内功能极为强大。在一个网络中,有的计算机安全性能较高,因而难以渗透;而有的计算机安全性能较差,因而容易渗透。这时我们就可以首先选择安全性能较差的计算机进行渗透,然后就是 Ettercap 这类工具“大显身手”的时候,可以说利用 Ettercap渗透同一子网内的其他计算机是一件易如反掌的事情。
随着互联网的快速发展,网络安全的侧重点已经向 We 应用程序转移。近年来,我们在进行网络安全渗透测试时主要的对象大都是 Web 应用程序目前几乎所有的企业都会对自身所使用的 Web 应用程序进行严格的测试。同时,Web 应用程序的问题也是近年来网络安全的“重灾区”。SQL 注入、跨站、Cookie 盗取等问题层出不穷。Burp Suite 就是一款专门测试 Web 应用程序的集成平台。Burp Suite 分为试用版和专业版,其中包含大量针对 Web 应用程序进行测试的工具,而且 Burp Suite 为这些工具设计了许多接口,我们还可以自行编写脚本以完善这些接口的功能。
严格来说,Wireshark 并不是一款专门的渗透测试工具,它的作用是监控网络的流量。但是我每次都会跟我的学生说,熟练使用 Wireshark 是网络渗透测试人员的必备技能之一Wireshark 主要有两个功能:一是可以监控网络,发现网络中的恶意流量,并找出这些恶意流量的源头;二是可以对应用的工具进行调试,有些时候我们在进行渗透测试的时候,运行了工具却完全没有反应,这时很难判断到底是这个工具本身的问题,还是目标网络的问题。利用 Wireshark 我们可以查看这个工具是否正常地发送了数据包,从而找到问题的源头。另外,通过这种调试也可以帮助我们学习这些工具的设计原理。
对目标网络发起攻击并不是渗透测试的最终目的。正确的做法应该是将发现的问题以报告的形式提交给客户,让客户能够理解问题的严重性,并对此做出正确的回应,及时进行改正。这一切需要通过沟通才能完成,除了与客户之间的交流之外,还必须向客户提供份易于理解的渗透测试报告。渗透测试的最后一个也是最为重要的一个阶段就是报告阶段。一个合格的渗透测试人员应该具备良好的报告编写能力。渗透测试人员在编写渗透测试报告的时候应该保证报告的专业性,但是这份报告最后的阅读者往往是并不具备专业领域知识的管理人员,因此需要避免使用过于专业的术语,要易于理解。
如果将整个渗透测试的过程看作工厂中的生产过程,那么渗透测试报告就是最后的产品。很多初入职场的渗透测试人员认为编写渗透测试报告是一项技术含量不高的工作,但这其实是一个错误的观点。渗透测试人员需要将整个渗透测试过程中完成的工作以报告的形式整理出来,这份报告必须以通俗易懂的语言全面地总结渗透测试过程中的工作。一种比较糟糕的情况就是我们对目标网络进行了大量的渗透测试工作,而且也发现了目标网络中存在的问题,但是目标网络的管理人员却无法理解我们的报告,或者对我们提出的问题没有给予足够的重视,这样我们在渗透测试时所花费的时间和精力都被浪费了。份合格的渗透测试报告应该让所有的人员都能够看懂,而且轻而易举地发现报告中指出的问题的重要性。这样一来,渗透测试人员就不能只具备渗透技能,还应具备安全问题的修复能力、表达能力等。
渗透测试报告的内容摘要其实就是对最终报告的一个概述,这部分内容必须避免长篇大论,应该以高度精练的语言概述我们在整个渗透测试过程的工作。另外,在描述时采用的语言也应该尽量简单,避免使用过于专业的术语,侧重描述目前目标网络中的漏洞可能带来的风险。
渗透测试报告的内容摘要应该以发现的漏洞作为切入点,结合客户的实际安全需求来完成。如果我们现在为一家银行做测试,那么银行可能最关注的就是所有客户的信息,黑客可能会利用银行对外发布 HTTP 服务的 Web 应用程序来窃取这些信息。我们在编写报告的过程中就应该重点描述在渗透测试过程中发现的与此相关的漏洞。如果在渗诱测试讨程中没有发现这一类的漏洞,就应该明确地说明这个事实。内容摘要中还应该说明为什么要进行这次渗透测试。
当我们对目标网络进行测试的时候,不太可能会遇见所有的设备都存在问题的情形如我们对一个企业的所有服务器进行渗透测试时,可能只在其中一两台设备发现了问题当我们在编写渗透测试报告时,是将所有服务器的信息都写入渗透测试报告,还是只需要将有问题的设备的信息写入渗透测试报告呢?
和这一点类似的是,我们在编写渗透测试报告的时候,是将渗透测试过程中的全部测试都写入渗透测试报告,还是只将发现问题的测试写入渗透测试报告呢?
实际上,目前对这两个问题并没有一个权威的答案,不同的机构或者专家对此可能会有截然不同的看法,两种做法各有利弊
渗透测试的最后一个步骤就是将编写好的渗透测试报告交付给客户。一般来说,每一个机构都会使用专业的加密软件,如果你所在的是一个创业型企业,没有购买这方面的软件,那么你也可以使用 ZIP 格式来对报告进行加密。虽然这样做看起来不是十分专业,但是要比一份明文的报告好得多。
我们将加密之后的报告和密钥分开传递给客户,如通过电子邮件或者 盘将报告传递给客户,而密钥则以一个更安全的方式传递。
由于目前网络安全行业中并没有一份完全统一的标准,这一点给渗透测试人员在编写渗透测试报告时带来了困难。而刚刚进入这个行业的渗透测试人员可能会困惑,在一份渗透测试报告中应该包含哪些内容,这些内容又是如何组织的呢?
由于一次渗透测试需要的时间比较长,在此期间完成了大量的工作,我们可以使用WAPITI模型来将这些工作成果组织在一起
WAPITI模型一共包括以下6 点。