渗透测试

定义

渗透测试，是为了证明网络防御按照预期计划正常运行而提供的一种机制。

渗透测试 (penetration test)并没有一个标准的定义，国外一些安全组织达成共识的通用说法是：渗透测试是通过模拟恶意黑客的攻击方法，来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析，这个分析是从一个攻击者可能存在的位置来进行的，并且从这个位置有条件主动利用安全漏洞。

换句话来说，渗透测试是指渗透人员在不同的位置（比如从内网、从外网等位置）利用各种手段对某个特定网络进行测试，以期发现和挖掘系统中存在的漏洞，然后输出渗透测试报告，并提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告，可以清晰知晓系统中存在的安全隐患和问题。

我们认为渗透测试还具有的两个显著特点是：渗透测试是一个渐进的并且逐步深入的过程。渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试。

专业服务

渗透测试有时是作为外部审查的一部分而进行的。这种测试需要探查系统，以发现操作系统和任何网络服务，并检查这些网络服务有无漏洞。你可以用漏洞扫描器完成这些任务，但往往专业人士用的是不同的工具，而且他们比较熟悉这类替代性工具。

渗透测试的作用一方面在于，解释所用工具在探查过程中所得到的结果。只要手头有漏洞扫描器，谁都可以利用这种工具探查防火墙或者是网络的某些部分。但很少有人能全面地了解漏洞扫描器得到的结果，更别提另外进行测试，并证实漏洞扫描器所得报告的准确性了。

执行原因

打一个比方来解释渗透测试的必要性。假设你要修建一座金库，并且你按照建设规范将金库建好了。此时是否就可以将金库立即投入使用呢？肯定不是！因为还不清楚整个金库系统的安全性如何，是否能够确保存放在金库的贵重东西万无一失。那么此时该如何做？可以请一些行业中安全方面的专家对这个金库进行全面检测和评估，比如检查金库门是否容易被破坏，检查金库的报警系统是否在异常出现的时候及时报警，检查所有的门、窗、通道等重点易突破的部位是否牢不可破，检查金库的管理安全制度、视频安防监控系统、出入口控制等等。甚至会请专人模拟入侵金库，验证金库的实际安全性，期望发现存在的问题。 这个过程就好比是对金库的渗透测试。这里金库就像是我们的信息系统，各种测试、检查、模拟入侵就是渗透测试。

也许你可能还是有疑问：我定期更新安全策略和程序，时时给系统打补丁，并采用了安全软件，以确保所有补丁都已打上，还需要渗透测试吗？需要！这些措施就好像是金库建设时的金库建设规范要求，你按照要求来建设并不表示可以高枕无忧。而请专业渗透测试人员（一般来自外部的专业安全服务公司）进行审查或渗透测试就好像是金库建设后的安全检测、评估和模拟入侵演习，来独立地检查你的网络安全策略和安全状态是否达到了期望。渗透测试能够通过识别安全问题来帮助了解当前的安全状况。到位的渗透测试可以证明你的防御确实有效，或者查出问题，帮助你阻挡可能潜在的攻击。提前发现网络中的漏洞，并进行必要的修补，就像是未雨绸缪；而被其他人发现漏洞并利用漏洞攻击系统，发生安全事故后的补救，就像是亡羊补牢。很明显未雨绸缪胜过亡羊补牢。

渗透测试能够通过识别安全问题来帮助一个单位理解当前的安全状况。这使促使许多单位开发操作规划来减少攻击或误用的威胁。

撰写良好的渗透测试结果可以帮助管理人员建立可靠的商业案例，以便证明所增加的安全性预算或者将安全性问题传达到高级管理层。

安全性不是某时刻的解决方案，而是需要严格评估的一个过程。安全性措施需要进行定期检查，才能发现新的威胁。渗透测试和公正的安全性分析可以使许多单位重视他们最需要的内部安全资源。此外，独立的安全审计也正迅速成为获得网络安全保险的一个要求。

现在符合规范和法律要求也是执行业务的一个必要条件，渗透测试工具可以帮助许多单位满足这些规范要求。

启动一个企业电子化项目的核心目标之一，是实现与战略伙伴、提供商、客户和其他电子化相关人员的紧密协作。要实现这个目标，许多单位有时会允许合作伙伴、提供商、B2B 交易中心、客户和其他相关人员使用可信连接方式来访问他们的网络。一个良好执行的渗透测试和安全性审计可以帮助许多单位发现这个复杂结构中的最脆弱链路，并保证所有连接的实体都拥有标准的安全性基线。

当拥有安全性实践和基础架构，渗透测试会对商业措施之间的反馈实施重要的验证，同时提供了一个以最小风险而成功实现的安全性框架。

测试技巧

为了从渗透测试上获得最大价值，应该向测试组织提供尽可能详细的信息。这些组织同时会签署保密协议，这样，你就可以更放心地共享策略、程序及有关网络的其它关键信息。还要确定的是，哪些系统需要测试。虽然你不想漏掉可能会受到攻击的某个系统，但可能仍想分阶段把渗透测试外包出去，以便每个阶段专注于网络的不同部分。

你还应该制订测试准则，譬如说：渗透测试人员可以探查漏洞并进行测试，但不得利用，因为这可能会危及到你想要保护的系统。

此外，你还要提供合适的测试途径。如果你想测试在非军事区（DMZ）里面的系统，最好的测试地方就是在同一个网段内测试。让渗透测试人员在防火墙外面进行测试听起来似乎更实际，但内部测试可以大大提高发现防火墙原本隐藏的服务器安全漏洞的可能性。

因为，一旦防火墙设置出现变动，就有可能暴露这些漏洞，或者有人可能通过漏洞，利用一台DMZ服务器攻击其它服务器。还记得尼姆达病毒吗？它就是首次攻击得逞后、利用一台Web服务器发动其它攻击的。

以外部需要访问的Web或应用服务器为例，你应该考虑与渗透测试人员共享这些应用的源代码，如果测试涉及这些脚本或程序的话。

没有源代码，很难测试ASP或CGI脚本，事先认定攻击者根本不会看到源代码是不明智的。Web服务器软件里面的漏洞往往会把脚本和应用暴露在远程攻击者面前。如果能够获得应用的源代码，则可以提高测试该应用的效率。毕竟，你出钱是为了让渗透测试人员查找漏洞，而不是浪费他们的时间。

安全审查

渗透测试旨在证明，网络防御机制的运行与你认为的一样良好。往往系统和网络管理员视审查人员或渗透人员为敌人，但实际上他们却是朋友。到位的渗透测试可以证明你的防御确实有效，或者查出问题，帮助你阻挡未来攻击。出钱请自己知道的人来发现网络中的漏洞，总比让自己不知道的人发现漏洞好得多。

渗透测试可以用来向第三方，譬如投资方或者你的管理人员提供网络安全状况方面的具体证据。事实上，你知道网络中存在的漏洞可能已有一段时日，但无法说服管理人员分配必要资源以补救漏洞。光靠自己，网络或安全管理员的意见往往不会被董事会采纳。如果外面的顾问赞同你的评估，或许会有奇迹出现。

有关渗透测试的合同或工作说明应该包括你从所得报告中想要获得的各个方面。如果你请人进行有限的测试，得到的只是计算机生成的报告。而渗透测试的真正价值在于由报告所衍生出的分析。进行测试的一方会详细介绍发现结果，并说明其重要性。在有的地方，测试人员还会提议采取何种补救方法，譬如更新服务器、禁用网络服务、改变防火墙规则等等。

发展

如今，大多数攻击进行的是最基本的漏洞扫描，如果攻击得逞，目标就岌岌可危。如果攻击者企图对你站点进行漏洞扫描，他就会获得大量的防火墙日志消息，而监控网络的任何入侵检测系统（IDS）也会开始发送有关当前攻击的警报。如果你还没有试过，不妨利用漏洞扫描器结合IDS对网络来一番试验。别忘了首先获得对方的许可，因为，运行漏洞扫描器会使IDS引发警报。

渗透测试也许是你的网络防御工具箱当中的重要武器之一。应该视之为各种安全审查的一部分，但要确保审查人员胜任这项工作。

渗透测试分类

实际上渗透测试并没有严格的分类方式，即使在软件开发生命周期中，也包含了渗透测试的环节，但根据实际应用，普遍认同的几种分类方法如下：

方法分类

1、黑箱测试

黑箱测试又被称为所谓的“Zero-Knowledge Testing”，渗透者完全处于对系统一无所知的状态，通常这类型测试，最初的信息获取来自于DNS、Web、Email及各种公开对外的服务器。

2、白盒测试

白盒测试与黑箱测试恰恰相反，测试者可以通过正常渠道向被测单位取得各种资料，包括网络拓扑、员工资料甚至网站或其它程序的代码片断，也能够与单位的其它员工（销售、程序员、管理者……）进行面对面的沟通。这类测试的目的是模拟企业内部雇员的越权操作。

3、隐秘测试

隐秘测试是对被测单位而言的，通常情况下，接受渗透测试的单位网络管理部门会收到通知：在某些时段进行测试。因此能够监测网络中出现的变化。但隐秘测试则被测单位也仅有极少数人知晓测试的存在，因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。

目标分类

1、主机操作系统渗透

对Windows、Solaris、AIX、Linux、SCO、SGI等操作系统本身进行渗透测试。

2、数据库系统渗透

对MS-SQL、Oracle、MySQL、Informix、Sybase、DB2、Access等数据库应用系统进行渗透测试。

3、应用系统渗透

对渗透目标提供的各种应用，如ASP、CGI、JSP、PHP等组成的WWW应用进行渗透测试。

4、网络设备渗透

对各种防火墙、入侵检测系统、网络设备进行渗透测试。

高级渗透测试服务流程

相比于普通测试服务，具有什么优势？

最新最好的八款渗透测试工具

如果说你的资产有可能被国内外的攻击者盯上并没有把你吓得半死，那就不必读这篇文章。如果你与我们大家一样也要面对现实，那么通过一名真正的专业人士在渗透测试方面给出的一些靠谱的预防性建议，试着采取一些挽救措施。

我们采访了渗透测试工具设计师/编程员/爱好者Evan Saez，他是纽约数字取证和网络安全情报公司LIFARS的网络威胁情报分析师，请他谈一谈最新最好的渗透测试工具，以及如何使用这类工具。

市面上现有的渗透测试工具

本文介绍的渗透测试工具包括：Metasploit、Nessus安全漏洞扫描器、Nmap、Burp Suite、OWASP ZAP、SQLmap、Kali Linux和Jawfish(Evan Saez是Jawfish项目的开发者之一)。这些工具为保护贵企业安全起到了关键作用，因为这些也正是攻击者使用的同一种工具。要是你没找到自己的漏洞并及时堵上，攻击者就会钻空子。

Metasploit

是一种框架，拥有庞大的编程员爱好者群体，广大编程员添加了自定义模块，测试工具可以测试众多操作系统和应用程序中存在的安全漏洞。人们在GitHub和Bitbucket上发布这些自定义模块。与GitHub一样，Bitbucket也是面向编程项目的在线软件库。Saez说：“Metasploit是最流行的渗透测试工具。”

相关链接：http://www.metasploit.com

Nessus

安全漏洞扫描器是一款备受欢迎的、基于特征的工具，可用于查找安全漏洞。Saez说：“Nessus只能将扫描结果与收录有已知安全漏洞特征的数据库进行比对。”

相关链接：http://www.tenable.com/products/nessus-vulnerability-scanner

Nmap

络扫描器让渗透测试人员能够确定企业在其网络上拥有的计算机、服务器和硬件的类型。这些机器可以通过这些外部探测来查明，这本身就是个安全漏洞。攻击者利用这些信息为攻击奠定基础。

相关链接：https://nmap.org

Burp Suite

是另一款备受欢迎的Web应用程序渗透测试工具。据Burp Suite Web安全工具厂商PortSwigger声称，它可以标绘并分析Web应用程序，查找并利用安全漏洞。

相关链接：http://portswigger.net/burp/

OWASP ZAP

(Zed攻击代理)是来自非营利性组织OWASP(开放Web应用程序安全项目)的Web应用程序渗透测试工具。ZAP提供了自动和手动的Web应用程序扫描功能，以便服务于毫无经验和经验丰富的专业渗透测试人员。 ZAP是一款如今放在GitHub上的开源工具。

相关链接：https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

SQLmap

可自动查找SQL注入攻击漏洞。然后，它会利用那些安全漏洞，全面控制数据库和底层服务器。

相关链接：http://sqlmap.org

Kali Linux

是一款一体化工具，包含一套专用的预安装测试(以及安全和取证分析)工具。Saez说：“它拥有的工具面向对安全一无所知的人。”

相关链接：https://www.kali.org

Jawfish

是一款使用遗传算法的渗透测试工具，不像大多数工具基于特征。Saez说：“遗传算法会根据搜索结果来寻找目标。”基于搜索标准，随着Jawfish逐渐靠近它所寻找的目标，这里是安全漏洞，它就能找到结果。Jawfish不需要特征数据库。

相关链接：https://jawfish.io

如何使用渗透测试工具?

Metasploit、Nessus安全漏洞扫描器、Nmap、Burp Suite、OWASP ZAP、SQLmap、Kali Linux和Jawfish各有各的用途。大多数企业需要多款工具。Metasploit既提供了Ruby接口，又提供了CLI，那样你的渗透测试人员可以选择其中一种，这取决于你想要完成什么任务。Saez说：“Ruby接口比较适用于测试非常大的网络，因为在CLI中运行命令对这种测试任务而言太过枯燥乏味。”

Nessus安全漏洞扫描器可以检查计算机和防火墙，寻找敞开的端口、是否安装了可能存在漏洞的软件。大型技术解决方案提供商ICF International公司的首席技术专家Garrett Payer说：“就渗透测试而言，这款工具用处不大，因为它不够精准，通过前门进入，与操作系统进行通信才能确定安全漏洞。这款工具通常用于合规工作，完全用来确定补丁是不是最新版本。”

Nmap可以用来搜索主机、敞开的端口、软件版本、操作系统、硬件版本及安全漏洞，通常标绘网络的攻击面。它在渗透测试的每个阶段都很有用，只要你有一组新的主机、端口及其他资源需要识别，比如进入一个新的网段时。Payer说：“这款工具拥有脚本功能，适用于枚举用户访问。”

Burp Suite可与你的Web浏览器结合使用，标绘Web应用程序。Burp Suite里面的工具可发现应用程序功能和安全漏洞，然后发动特定的攻击。Burp Suite可以自动执行重复性功能，同时在渗透测试人员需要控制个别选项以便测试的地方为用户保留了选择。Payer说：“这一款功能非常丰富的工具可使用代理，探究分析跨站脚本及其他安全漏洞;它提供了一定的透明度，让人们清楚网站实际上将什么数据发送给服务器。”

OWASP ZAP可执行众多扫描和测试，包括端口扫描、蛮力扫描和模糊测试，以便识别不安全的代码。渗透测试人员使用界面直观的GUI，这种GUI类似微软应用程序或某些Web设计工具(比如Arachnophilia)的GUI。一旦你在网站上浏览并执行活动，你再次进入ZAP，就可以查看代码、在那些活动过程中什么数据泄露。被设置成代理服务器后，OWASP ZAP控制它处理的网络流量。Payer说：“这款工具比Burp Suite更新颖，功能不是同样丰富，却是免费开源的。它提供了一小批功能和GUI，对刚接触Web应用程序渗透测试的人来说倒是很有用。”

可以利用SQLmap，通过命令行中的python命令，测试代码没编好的网站和与数据库连接的URL。如果数据库信息的异常URL(链接)导致了错误代码，那么该链接就很容易受到攻击。SQLmap安装在虚拟机里面的Ubuntu Linux上。Payer说：“作为另一种支持脚本的工具，SQLmap可以查明编程员是否对输入进行了参数化之类的问题。”Payer解释，如果没有进行参数化，渗透测试人员或攻击者就可以转发名称、分号或SQL命令，然后在数据库上运行，从而获得控制权。

安装Kali Linux后，可以打开与之捆绑的十多个渗透测试/漏洞利用工具中的任何一个工具。Saez说：“Kali Linux随带大量的用户说明文档。”

你可以试一试使用GUI这种形式的Jawfish渗透测试工具。只要输入目标服务器的IP地址、该IP地址下易受攻击的网站地址，然后输入安全漏洞、方法和目标文本。你成功破解了地址后，该工具会返回目标文本。这个工具是全新工具，尚未经企业应用测试。

比较、选择、使用、打补丁。

你应该根据最要紧的安全漏洞位于何处来选择工具。一旦找到了自己的安全漏洞，要是有了最新补丁，及时打上补丁，要是没有补丁，就要注意加强防护，这点很要紧。