什么是渗透测试
渗透测试的起源和定义
起源:20世纪90年代,一群受过职业训练的安全专家作为“红队”,对接收测试的防御方“蓝队”进行攻击,以实战的方式来检验目标系统防御体系与安全响应计划的有效性,简而言之,攻击方是红队,防守方是蓝队
定义:渗透测试就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权。并发现具备业务影响后果安全隐患的一种安全测试与评估方式。
渗透测试的分类
渗透测试分为黑盒测试、白盒测试和灰盒测试
黑盒测试
黑盒测试没有任何目标网络内部的拓扑等信息,最符合真实情况下黑客的攻击方式,但是比较费时费力,同时需要渗透测试者具备较高的技术能力
白盒测试
白盒测试也叫内部测试,攻击方了解内部环境的所有知识,时间代价比黑盒测试小得多,但是问题在于无法有效的测试客户组织的应急响应程序,也无法判断出他们的安全防护计划对检测特定攻击的效率
灰盒测试
灰盒测试就是集中两者的优点,掌握有限的知识与信息,从这些信息中判断出最好的攻击途径与方式,点对点的解决漏洞问题
渗透测试的方法和流程
- 安全测试方法学开源手册(OSSTMM)
- NIST SP 800-42网络安全测试指南
- OWASP 十大Web应用安全威胁项目(OWASP Top Ten)
- Web安全威胁分类标准(WASC-TC)
- PTES渗透测试执行标准
渗透测试过程环节
前期交互阶段
前期渗透测试团队需要与客户组织进行交互讨论,确定客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动情报收集阶段
情报收集信息暴扣公开来源信息查询、Google Hacking、社工、网络踩点、扫描探测、被动监听、服务差点等等威胁建模阶段
团队成员根据获取到的信息进行威胁建模与攻击规划,并从中理清头绪,确定最可行的攻击通道漏洞分析阶段
根据前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果,服务查点信息,搜索相应的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中验证渗透攻击阶段
渗透攻击是渗透测试过程中最核心的环节,渗透测试团队需要用获得的目标系统安全漏洞,根据目标系统的特性来定制渗透攻击,在黑盒测试中还要注意避免引起目标组织安全响应团队的警觉和发现后渗透攻击阶段
识别客户组织最有价值的信息和资产进行攻击报告阶段
形成一份凝聚了关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术的方案
漏洞分析与利用
安全漏洞生命周期
利用安全漏洞来造成入侵或破坏效果的程序就成为渗透代码(Exploit),或者漏洞利用代码
一个典型的安全漏洞生命周期包括以下七个部分:
安全漏洞研究与挖掘:主要方式有源代码审计(白盒测试)、逆向工程(会和测试)、Fuzz测试(黑盒测试)
渗透代码开发与测试:挖掘安全漏洞时,hackers会利用概念验证性的渗透攻击代码(POC),用于验证找到的安全漏洞是否存在
安全漏洞和渗透代码在封闭团队中流传:白帽子告知厂商,黑帽子在团队中秘密共享
安全漏洞和渗透代码开始扩散:这个阶段,黑帽子们会快速掌握和应用,代码会在安全社区中开始快速扩散
恶意程序出现并开始传播:黑帽们在代码基础上加工包装,开发出传播性强的恶意程序,并在互联网传播,厂商也在此之前或之后完成补丁程序
渗透代码/恶意程序大规模传播并危害互联网:补丁程序的发布和安全警报让更多黑客了解到漏洞存在,并恶意使用已经传播开的恶意程序,对互联网的危害也在这个阶段达到顶峰
渗透攻击代码/攻击工具/恶意程序逐渐消亡
安全漏洞披露方式
完全公开披露:直接向公众开放
负责任的公开披露:披露前对厂商进行知会
进入地下经济链
小范围利用直至被动披露
安全漏洞公共资源库
国内:
CNNVD、CNVD、乌云、scap中文社区
国外:
CVE、NVD、SecurityFocus、OSVDB
渗透测试神器Metasploit
由来:Metasploit是由现任Rapid7首席安全官及Metasploit首席架构师HD Moore创始的
渗透测试框架软件
Metasploit支持情报收集、威胁建模、漏洞分析、后渗透攻击与报告生成
情报收集阶段:Metasploit可以通过自带的辅助模块来探测信息,也可以用过插件机制调用Nmap、Nessus、OpenVAS工具进行信息收集
威胁建模阶段:可以将探测到的信息存在PostgreSQL、MySQL或者SQLite数据库中,方便查看
漏洞分析阶段:Metasploit提供了大量的Fuzz测试器和Web应用探测分析模块
后渗透攻击阶段:Meterpreter可以仅仅驻留在内存中并且具有免杀功能,这个平台实现了特权提升、信息攫取、系统监控、跳板攻击和内网渗透等功能
报告阶段: 商业版的Metasploit Pro具备了更加强大的报告自动生成功能,可以输出HTML、XML、Word和PDF格式的报告
Metasploit体系框架
各个模块
辅助模块:包括针对网络服务的扫描和查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等
渗透攻击模块:利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击在和,从而获得对远程目标系统访问权的代码组件。
渗透攻击分为主动渗透攻击(服务端)和被动渗透攻击(客户端)
- 攻击载荷模块:攻击载荷是在渗透成功后促使目标系统运行的一段植入代码,例如meterpreter
metasploit攻击载荷分为独立(Singles)、传输器(Stager)、传输体(Stage)三种
独立攻击载荷是自包含的,能够直接植入目标系统进行执行,比如”windows/shell_bind_tcp”
传输器和传输体是组合使用的,比如”windows/shell/bind_tcp”是由一个传输器载荷(bind_tcp)和一个传输体载荷(Shell)组成的等同于独立攻击载荷”windows/shell_bind_tcp”
空指令模块:
空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的就是空操作
常常要在ShellCode前面添加一段空指令区,一面发生内存地址随机化、返回地址计算偏差等错误,提高渗透攻击的可靠性编码器模块:用于处理生成指令序列之后的“坏字符”和“免杀”处理
后渗透攻击模块:用于在获得目标系统远程控制权限后,在目标系统中进行各式各样的后渗透攻击动作,比如获得敏感信息、进一步拓展、实施跳板攻击等。比如meterpreter
Metasploit接口
armitage(前msfgui)图形化界面工具
kali的命令行下输入armitage下就可以调用
msfconsole控制台终端
优势:
提供一站式的交互接口,可以执行外部的Shell的命令和第三方工具比如Nmap,使得在msfconsole中完成渗透测试工作更加方便
提供非常便利且符合Linux操作习惯的交互
MSF终端更新最及时,用户接口最稳定
Tip:可以输入help命令了解MSF终端支持的命令,对于特定的命令可以使用help [commend]的形式查询,比如说help search
界面老帅了
msfconsole -x(前msfcli命令行程序)
使用msfconsole -x相较于控制台在操作多个目标时更加便捷,相当于windows下的bat批处理命令
示例:msfconsole -x “use exploit/windows/smb/ms17_010_eternalblue;set RHOSTS $IP;set PAYLOAD ….;exploit”
总结
例子:
解答: