什么是渗透测试?
定义:
渗透测试完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告,并提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告,可以清晰知晓系统中存在的安全隐患和问题,所以渗透测试是安全评估的方法之一。
特点:
- 渗透测试是一个渐进的并且逐步深入的过程
- 渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试。
意义:
- 渗透测试是为了证明网络防御按照预期计划正常运行而提供的一种机制,换句话说,就是证明一下之前所做过的措施是可以实现的,然后再寻找一些原来没有发现过的问题,这个就是渗透测试。
- 许多时候,无论是网站还是系统的开发者,在开发过程中乃至结束都很难会注意到所开发的应用的安全问题,这样就造成了大量的存在瑕疵的应用暴露在外部网路之上,直接就触生了信息安全的产生,渗透测试在于发现问题、解决问题。经过专业人员渗透测试加固后的系统也会随之变得更加坚固、稳定、安全。
目的:
- 了解入侵者可能利用的途径
- 了解系统及网络的安全强度
常规渗透测试和“红队”测试
- 共性:都是为了帮助客户检测系统安全性,发现安全问题。
- 区别:“渗透测试”专注于对给定的系统进行测试,存在明确的测试目标和测试边界、测试时间,主要目标是为了尽可能发现安全隐患;“红队”在测试过程中通常除给定靶标外不会给予任何信息,攻击者需要自行搜集信息并规划一条攻击路径达到目的并隐藏踪迹,尽可能模拟真实APT攻击
渗透测试的分类
按测试方法分类
- 黑盒测试
- 白盒测试
- 灰盒测试
按目标类型分类
- 主机操作系统渗透 • Windows、Solaris、linux、aix、sco
- 数据库系统渗透 • MySQL、MsSQL、Oracle、sybase、informix
- 应用系统渗透
- 渗透目标提供的各种应用,如asp、cgi、jsp、php等组成的Web应用
- 网络设备渗透 • 各种防火墙、入侵检测系统、网络设备
渗透测试---黑盒测试
- 渗透者完全处于对系统一无所知的状态。除了被测试目标的已知公开信息外,不提供任何其他信息。一般只从组织的外部进行渗透测试。
- 通常,这类型的测试,最初的信息获取来自DNS、Web、Email及各种公开对外的服务器
渗透测试---白盒测试
- 测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站程 序的代码片段,也能与单位其他员工进行面对面的沟通。通常包括从组织外部和从组织内部两种地点进行渗透测试。这类的是的目的是模拟企业内部雇员的越权操作。
渗透测试---灰盒测试
- 介于黑盒测试和白盒测试之间
- 较为隐秘的进行测试。通常,接受渗透测试的单位网络管理部门会收到通知:在某些时间段进行测试。因此能够检测网络中出现的变化。
- 在隐秘测试中,被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位
渗透测试的手段
网络嗅探
嗅探是用来捕捉网络中传输的数据的技术。嗅探是一个重要的信息收集技术,它能够捕获特定的信息,如密码;如果需要的话,它也能够捕获特定计算机之间的完整会话。要执行嗅探,计算机 的网卡需要设置为混合模式,这样它才能够捕获网络中发送的所有数据。
暴力攻击
暴力攻击指的是尝试使用大量的字母组合和穷举试错法来查找合法身份认证信息。这种耗费时间的方法的根本目标是要获得目标系统的访问权限。暴力攻击可能会造成系统过载,也可能使它无法响应合法的请求。此外,如果系统启用了帐号锁定规则,那么暴力攻击可能会造成合法用户帐号的关闭。
漏洞扫描
分析是针对目标区域的单位网络基础架构进行穷举检查,以确定它们当前的状态。扫描的目标范围可能是单个系统或一些关键系统,也可能是整个网络。它通常是使用自动化工具执行的,这些工具能够测试系统数据库已知漏洞方面的大量潜在弱点,并报告潜在的安全问题。
木马攻击
木马一般是通过电子邮件附件或IM聊天工具在网络中传播的一些恶意程序。这些程序是秘密运行的,并在用户不知情的情况下安装到客户计算机上。
社会工程
这种方法通常与盲式或双盲式测试一起使用,社会工程指的是搜索以收集信息为目的的人类本性(最主要是人的信任感和帮助姿态)的技术。这种方法是通过与单位员工、提供商和合同方的社会互动来收集信息和侵入这个组织的系统。
应用安全性测试
- 代码检查:代码检查指的是分析所有应用代码来保证它们不包含任何可被入侵者利用来攻击应用的敏感信息。
- 登录的输入验证——无效字符或过长的输入可能会产生意外结果;
- Cookie盗取,而合法会话可能会被未授权的用户使用;
- 帐号锁定测试——测试应用中设置的超时和入侵锁定参数,保证合法会话不会被劫持。
无线网络的渗透测试
- 随着无线网络的出现,不管是在企业网络基础架构内还是在家里,都会造成更多的安全漏洞。一旦发现开放的无线接入端,他们就会标记下来,所以最后他就能够得到一个带有接入端属性(SSID、WEP、MAC等)的无线网络图。
- 无线网络测试的目标是确定一个组织的无线网络的设 计、实现或运营中的安全缺陷或漏洞。
拒绝服务(DoS)
- 拒绝服务测试指的是尝试通过耗尽测试目标的资源来发现系统的特定弱点,这种方法会导致系统停止对合法请求的响应。
- 资源过载——这些攻击的目的是耗尽攻击目标的资源(如,内存),从而使之停止响应。
- 泛洪攻击——是指通过发送超大数量的网络请求来达到耗尽的目的。
- 半开放SYN攻击——是指在目标系统局部开放大量的TCP连接,这样就无法再启动合法连接。
- 编外攻击——这些攻击试图通过破坏IP报头标准来使目标系统崩溃:
- 超大数据包(ping of death)——数据报头显示数据包所包含大于实际大小的数据。
- 分片(泪滴攻击)——发送很短的重叠分片数据包(数据包片断)。
- IP源地址欺骗(落地攻击)——导致计算机创建连接自己的TCP连接。
- 畸形UDP数据报头(UDP炸弹)——UDP报头显示了不正确的长度。
优秀的渗透测试
- 选择足够的测试集: 手工的和自动的都会影响成功效益之间的最佳平衡。
- 遵循正确的方法: 这并不是猜谜游戏。所有方面都需要规划、文档化和符合要求。
- 结果值: 结果应该详细地写入文档,并且要尽力使它们能被客户所理解。不管是技术报告还是执行总结,都需要一些注释。应用安排一些安全咨询人员/测试人员来回复问题或解释结果。
- 测试结果与建议: 这是渗透测试的一个非常重要的部分。最终的报告必须清晰地说明成果,必须将成果与潜在的风险对应。这应该会附带产生一个基于最佳安全实践方法的修正路线图。
渗透测试流程--PTES
渗透测试的流程
- 前期交互阶段:与客户沟通测试范围、时间、预期等
- 准备阶段:资产信息整理、对指定目标进行漏洞扫描
- 漏洞分析阶段:整理漏洞扫描结果、汇总高可利用漏洞
- 漏洞验证阶段:使用合适的工具(方法)验证并保存截图
- 后期报告阶段:报告编写、核对、汇报
PTES流程
- 信息收集
- 漏洞挖掘
- 漏洞利用
- 权限提升
- 内网渗透
- 清理痕迹
渗透测试流程---信息收集
- 信息搜集是什么
-
- 前期准备(踩点)
- 决定渗透工作是否顺利的关键
- 为什么要进行信息搜集
-
- 缩小范围,节约时间提高效率
- 定位脆弱点,精准打击,减少不必要的工作量
收集什么?
- Whois信息--注册人、电话、邮箱、DNS、地址
- Googlehack--敏感目录、敏感文件、更多信息收集
- 服务器IP--Nmap扫描、端口对应的服务、C段
- 旁注--Bing查询、脚本工具
- 如果遇到CDN--Cloudflare(绕过)、从子域入手(mail,postfix)、DNS传送域漏洞
- 服务器、组件(指纹)--操作系统、web server(apache,nginx,iis)、脚本语言
- More...
渗透测试流程---漏洞挖掘
漏洞种类
- Web业务逻辑漏洞(如支付漏洞)
- OWASP TOP 10和一些其它Web常见漏洞(如sql注入、上传漏洞)
- 特定场景的Web漏洞(例如特定中间件、特定框架)
- 非Web漏洞(主机操作系统漏洞、其它服务漏洞等)
- 弱口令(包括Web和非Web)
如何发现
- 探测Web应用指纹–Discuz、PHPwind、Dedecms、Ecshop、Wordpress…
- 上传漏洞–截断、修改、解析漏洞
- 有无验证码–进行暴力破解
- More…
渗透测试流程---漏洞利用
针对Web服务:
- 浏览器查看一些特殊子域名;如:fierce。
- 对网站进行扫描;如:nikto、AWVS、Appscan。
- 识别网站使用的各种软件;如:whatweb。
- 根据网站运行的软件使用更具针对性的工具;如: wpscan,cms-explorer····
- 针对自己编码的Web程序进行测试;如:Zap。
- 针对通用程序的网站,找到网站程序源代码进行分析。
渗透测试流程---权限提升
- 根据服务器类型选择不同的攻击载荷进行权限提升
- 无法进行权限提升,结合获取的资料开始密码猜解,回溯信息收集
- Windows提权:pr、Churrasco、iis6.0提权、数据库(udf、mof)提权、ms15-051
- Linux提权:Linux_Exploit_Suggester和unix-privesc-check
- 数据库提权
- 其他第三方组件提权
- Exp网站推荐: exploit-db、1337day