渗透测试指南(二)信息收集&漏洞评估
渗透测试指南系列文章内容纲要
第一章 渗透测试简介
第二章 前期交互
第三章 信息收集
第四章 漏洞识别
第五章 社会工程学
第六章 有线/无线网络利用
第七章 基于应用的漏洞利用
第八章 基于本地主机和物理的利用
第九章 后-利用 技术
第十章 渗透测试工具集介绍
第十一章 渗透报告
第三章 信息收集
接到渗透测试任务,首先要做的就是信息收集(Information Gathering)或者说是侦查(Reconnaissance)。
信息收集可以分为 被动信息收集(Passive Reconnaissance)和主动信息收集(Active Reconnaissance)两种。下文将从这两个方向分别展开介绍。
被动信息收集
所谓被动信息收集,是指收集信息的方式不通过直接和测试目标交互。简单而言就是测试目标不知道你在收集信息。就好像你喜欢一个女生,不直接向她索要联系方式,而是向她的同学/朋友盘敲侧击打听出联系方式。
被动信息收集一些常见方法如:
域名枚举
搜索引擎(Google,shodan)
包嗅探
数据包查看
OSINT(Open Source Intellegence)
Recon-ng
域名枚举
使用google搜索引擎的”site:”来搜索子域名,比如搜索”site:example.com”
还可以使用DNSdumpster,dig,nsloopup,sublist3r等工具进行收集
数据包嗅探/查看
可以通过wireshark,tcpdump来嗅探数据包
嗅探的原理是把本机网卡的混杂模式打开,嗅探工具把网卡接收到的数据包呈现出来。
网络嗅探一个很有用的工具是 hub,hub的所有端口都在同一个冲突域,区别于交换机每个端口一个冲突域,所以接在同一个hub上的机器能接收到所有设备的数据包。
无线网络数据包的嗅探需要特定的无线网卡支持,比如Intel 3945ABG。
注:冲突域是指连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。
OSINT
OSINT是指Open Source Intelligence,可以简单理解为互联网上开源的信息。我们经常听到人肉搜索,有一部分内容就是利用OSINT来搜索目标的信息。比如社交账户,id等。
recon-ng
recon-ng和msfconfole的操作非常像,新版本kali集成了recon-ng这个工具,不过默认是没安装模块
非常基础的演示过程如下,(有些模块需要用到API key,这些需要再进行配置才可正常使用)
[recon-ng][default] > marketplace refresh
[recon-ng][default] > marketplace search shodan
[recon-ng][default] > marketplace search hackertarget
[recon-ng][default] > marketplace install recon/domains-hosts/hackertarget
[recon-ng][default] > modules load recon/domains-hosts/hackertarget
[recon-ng][default][hackertarget] > options list
[recon-ng][default][hackertarget] > info
[recon-ng][default][hackertarget] > options set SOURCE example.com
[recon-ng][default][hackertarget] > run
-----------
EXAMPLE.COM
-----------
[*] [host] example.com (93.184.216.34)
[*] [host] www.example.com (93.184.216.34)
-------
SUMMARY
-------
[*] 2 total (2 new) hosts found.
主动信息收集
主动信息收集是指收集信息的方式直接和测试目标交互。测试目标理论上能知道你在收集信息。就好像你喜欢一个女生,直接过去和她打招呼索要联系方式。
主动信息收集一些常见方法如:
主机枚举
网络枚举
用户枚举
组枚举
网络共享枚举
Web页面枚举
应用枚举
服务枚举
包伪造
nmap扫描
nmap是主动信息收集的“瑞士军刀”,这个工具集成了非常多主动收集功能,还提供多种多样的插件。
nmap的一些常见的选项如下
-O 操作系统探测
-T[0-5] 枚举时间(时间越大枚举速度越快)
-p 指定扫描的端口(比如-p22, -p1-65535)
-v 打印扫描过程信息
-sS syn扫描
-sT tcp扫描 (完整的tcp握手,比syn效率低,在nmap没有root权限时,可以使用tcp扫描)
-sU udp扫描
-sF Fin扫描
-sn ping扫描
-Pn 不使用ping扫描
使用nmap脚本, 在nmap安装目录下,有个scripts目录, 这个目录下有很多nse文件,这些就是nmap的脚本插件,这些插件是用lua语言编写的。
比如利用nmap使用插件smb-enum-users来执行smb用户枚举
nmap --script smb-enum-users.nse -p445 <host>
有些脚本还带有参加,比如使用smb进行进程枚举,就需要smb的账户密码作为参数
nmap --script smb-enum-processes.nse --script-args smbusername=<user>,smbpass=<pass> -p445 <host>
Scapy 网络包构造
Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和包嗅探工具。它提供多种类别的交互式生成数据包或数据包集合、对 数据包进行操作、发送数据包、包嗅探、应答和反馈匹配等等功能。
Scapy提供开发库,也可使用交互式模式,下面将介绍几个利用交互式scapy进行扫描的例子
使用root权限打开scapy
# 发送一个ICMP包
>>> send(IP(dst="192.168.1.2")/ICMP()/"testpacket")
# 发送一个TCP SYN包
>>>ans,unans=sr(IP(dst="192.168.1.2")/TCP(dport=445,flag="S"))
# 方式一个TCP ACK包
>>>ans,unans=sr(IP(dst="192.168.1.2")/TCP(dport=445, flag="A"))
发送一个UDP ping包
>>>ans,unans=sr(IP(dst="192.168.1.2")/UDP(dport=0))
其他主动信息收集工具
Masscan
Nikto
第四章 漏洞识别
Pentest+针对漏洞识别的内容相当比较简单,只介绍了几类漏洞扫描方式,不涉及人工漏洞评估。
自动化扫描分类
漏洞自动化扫描大体可分为:非凭证扫描,凭证扫描,发现扫描,全量扫描,秘密扫描,兼容性扫描
非凭证扫描是指黑盒扫描,一般就是指定一个ip或域名,扫描器进行端口,服务探测,根据banner,指纹判断服务版本,并利用一些一直poc去遍历服务,以此发现一些漏洞。
凭证扫描是指提供扫描器系统root权限的登录凭证,比如提供ssh/telnet账户密码等信息,扫描器可以通过凭证进入被扫描系统内部。如果条件允许建议使用此类扫描,因为这类扫描会相对准确且覆盖面会比较全面。
发现扫描类似于nmap,不停的在探测,然后匹配数据库,目标是发现主机,端口,服务,版本,web路径等。
全量扫描典型例子如Nessus,Nessus可以配置策略,比如跑所有的插件,但事实上很多插件不适用是可以裁剪掉,以加快扫描速度。
被动扫描就是可以实现秘密扫描,把正常用户访问的流程端口镜像到扫描器,扫描器根据信息建立网络拓扑结构,并判断是否存在安全漏洞。秘密扫描的目的是不想让目标发现扫描痕迹。
兼容性扫描比如GDPR扫描器,等保2.0扫描器,HIPAA扫描器等,针对特定的规则进行扫描测试,检测目标设备是否符合标准,不过很多时候还是需要人工参与评测。
漏洞扫描的挑战
扫描时间的选择
一方面在业务繁忙的时候扫描可能对网络/业务造成影响,另一方面扫描过程可能造成设备宕机等服务异常。
扫描协议确认
如果目前设备支持udp和tcp,那么对扫描选项进行配置时,应该tcp,udp都要配置,否则可能造成漏扫。
网络拓扑
尽量不要跨多个网络对目标进行扫描,这样可能造成一些额外的不确定影响。最好是扫描器和目标设备配置在同一个网络,比如都部署在DMZ中。
带宽限制
在扫描时,要考虑带宽限制,一方面减小对网络其他设备的影响,另一方面是避免因为带宽达到上限影响扫描进度和结果。
其他资源限制
排除带宽原因,可能有其他因素会造成扫描瓶颈,比如多线程导致目标设备异常等等,扫描配置时也要考虑这个因素。
脆弱的系统扫描
比如对打印机,IoT设备这类脆弱性系统,要选择性扫描,甚至直接豁免扫描。但事实上这类设备也可能增加风险,特别是近几年IoT设备经常被利用进行攻击。所以要根据实际状况综合做扫描策略配置。
扫描结果分析
以下一些组织/机构所提供的内容对漏洞结果分析可能会有帮助
US-CERT
NIST
CAPEC
CVE
CWE
针对扫描结果,建议可以用以下原则进行优先级分析
优先级1:标准协议漏洞(因为这是比较好验证的)
优先级2:重要的系统上的漏洞
优先级3:影响范围广的漏洞
我对Vulnerability Assessment的想法
根据PTES流程,信息收集后是威胁建模,接下来才是漏洞评估。而根据Pentest+流程,信息收集后是漏洞扫描。
这个Vulnerability Assessment我更喜欢翻译为脆弱点评估。我认为正确的理解脆弱点是很重要的。
比如一个系统对外开放3306端口,mysql服务,但是账户密码是高强度,可暴破但是无法成功,这就算是一个脆弱点,这个脆弱点我们给它评分为低危
该系统另外又对外开放了xxx服务,探测发现可以通过该服务获取一些特殊名字的信息,这也算是一个脆弱点。这个脆弱点我们也给它评分为低危或者信息。
假设一个场景是通过xxx服务获取到的信息作为mysql的密码去暴破,如果能认证成功,那么就是一个高危甚至是严重的漏洞。
所以你别看一个脆弱点好像是低危无关紧要,如果把一些漏洞串联起来利用,可能可以造成极大破坏。
用一张简单的抽象图来说明我对vulnerability Assessment的理解
我把测试目标/系统抽象为一个圆圈,圆圈之外是与系统交互的用户,黑圈及内部的白色区块代表系统的处理流程和资产。 Vulnerability Assessment的任务就是找出脆弱点
我们一个一个来分析,点A是脆弱点比较明确,但是有些人只测了纵向,所以给出低危,而有些人测了横向,给出高危。点B好像也是脆弱点,但事实上这个点上有做了加固,应该是没什么问题,报脆弱点也是可以的,最好是报一个Info(信息)。点C就没那么清晰了,从上帝视角看,这里确实是脆弱点。点D直通内部系统,但是因为暴露口较小,不太容易被发现。
再谈谈自动化,对于甲方而言,完全依赖人工渗透,无论是自己雇佣人员充当红队进行渗透测试,还是花钱请乙方测试,成本都是挺高的,而且覆盖面非常有限。所有如果能有效的利用免费/商业的扫描器进行系统性/周期性扫描,效果也可以做得非常好。精心选择一些合适的扫描器及扫描策略,开展周期性的自动化扫描,再安排一些人力去分析扫描报告。每半年/一年再让红队/第三方团队进行人工渗透测试是比较理想的渗透测试执行策略。
我的观点是安全做到顶级是培养一种安全文化,以无形胜有形,无招胜有招,SDLC就好比法律,是通过机制去推动和约束,而安全文化就好比道德,是靠内心意识推动和约束。
最后,引用Bruce Lee的名言结束
以无法为有法,以无限为有限 – 李小龙
由于笔者水平有限,文章难免会有错误的,欢迎读者批评指正。笔者个人邮箱:kafrocyang@gmail.com
参考文献
[1] CompTIA Pentest+ Cert Guide