渗透测试之被动侦察
一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:16004488
微信公众号:计算机与网络安全
ID:Computer-network
在针对网络或目标服务器进行渗透测试或攻击时,侦察是杀链(kill chain)的第一步。在进行渗透测试时,攻击者通常会花费75%的时间来进行侦察,在侦察阶段,可以定义攻击目标,确定攻击目标的映射关系,探寻其安全漏洞,并最终达到利用目的。
侦察可以分为两种类型:被动侦察(passive reconnaissance)和主动侦察(active reconnaissance)。
被动侦察一般是指分析公开的信息,这些信息包括目标本身的信息、在线的公共资源信息。在获取这些信息时,测试者或攻击者不会与目标交互,他们的请求和活动不会被日志记录,也无法直接定位测试者。因此,在被动侦察中要尽可能地减少与目标的交互,与目标的交互可能会确认攻击者身份。
一、侦察的基本原则
在进行渗透测试或攻击数据目标时,侦察是杀链的第一步。这是在实际测试或攻击目标网络之前进行的。侦察的结果会给出需要额外侦察的方向或者指出在漏洞利用阶段要攻击的漏洞。
侦察活动是与目标网络或设备交互过程的一部分。
漏洞利用过程模型简图
被动侦察并不与目标网络产生直接的交互。攻击者的源IP地址和活动不会被日志记录(例如,一个对目标邮件地址的谷歌搜索)。在正常的商业活动中想要区分出哪些活动是被动侦察是困难的,或者说是不可能的。
被动侦察的重点一般是商业、监管环境、公司、员工。这一类的信息可以从网络或其他公共资源获取,有时,可以参考开源情报,或者OSINT。
公开资源情报计划(Open source intelligence ),简称OSINT,是美国中央情报局(CIA)的一种情报搜集手段,从各种公开的信息资源中寻找和获取有价值的情报。
当攻击者以一种可预期的方式与目标交互时,被动侦察可以看作是与目标的正常交互。例如,攻击者登录公司网站、浏览不同的网页、下载进一步研究的文档。这些交互活动属于可预期的用户活动,很少被看作是攻击目标的前奏。
渗透测试人员或者攻击者一般会遵循一个结构化的信息收集过程——从广泛的信息(商业信息、监管环境信息)收集,到特定具体的信息(用户账户数据)收集。
为了提高效率,测试人员需要准确地知道他们需要找寻的信息,以及在开始收集信息前就知道这些数据怎么使用。利用被动侦察和限制收集数据的数量,能最大限度地降低被发现的风险。
二、开源情报
一般来说,渗透测试或进行攻击的第一步是开源情报收集。
OSINT指的是从公共的资源,特别是互联网上,进行信息收集。可用的信息是相当多的——大多数的情报机构和军事组织正积极地在OSINT中收集目标信息,并防止自身数据的泄露。
需要收集的目标信息依赖于渗透测试的初始目标。例如,如果测试人员要访问财务数据,那么他们需要相关人员(财务总监、应收账目、应付款,等等)的姓名和履历信息、他们的用户名和密码。如果攻击路线包括社交工程,他们可能会将这个信息补充上,以提供请求信息的真实性。
OSINT收集,通常从对目标的官方视频会议(网站、博客、社交媒体网页,以及第三方数据存储,如公共财政记录)存在的一个论述开始。主要信息包含:
办公室的地理位置,尤其是远程或者卫星办公室,这些办公室共享企业信息,但可能缺少严格的安全控制。
总公司和所有分公司的概述,尤其是那些合并或收购的新公司(这些公司通常不会像总公司那样安全)。
公司员工名字和联系方式的信息,尤其是名字、电子邮件地址和手机号码。
公司文化和语言的暗示,这个可能导致社交工程攻击。
可能连接到目标网络的商业伙伴或者供应商。
正在使用的技术。例如,如果目标发布了一篇关于采用新硬件或者软件的新闻稿,攻击者就会去回顾供应商网站的故障报告,已知或值得怀疑的漏洞,以及其他可以用于多种攻击的细节。
攻击者可能利用的其他在线信息源如下:
谷歌和必应这些搜索引擎。从历史上来说,这些搜索都依靠手工,攻击者输入指定的或者感兴趣的搜索词。例如,搜索词为“公司名字”+密码文件类型。Excel电子表格可能包含雇员密码。这些搜索词被称为google dork(www.exploit-db.com/google-dork/)。大多数搜索引擎用已经发布的API来实行自动查找,使搜索工具更加高效,例如Maltego。
Yandex是最有效率的搜索引擎之一(www.yandex.com),这是俄罗斯语的搜索引擎,是世界上第四大搜索引擎,它允许用户用几种不同的语言搜索,包括英语。它也支持粒度搜索表达式,这使得它搜索制定信息时比谷歌更有效率。
应该被搜索的其他在线资源包括:
政府、金融网站或者其他管理网站,这些网站提供企业合并及并购,关键人物名字和所支持的数据等信息。
新闻组,尤其是来自目标的雇员发表的新闻稿,这些雇员在寻找特定技术的帮助。
LinkedIn、Jigsaw和其他提供雇员信息的网站。
求职网站,尤其是那些提供为技术职位技术和服务列表网站,这些技术和服务必须由成功的申请人提供。
历史的或者缓存的内容,由搜索引擎检索(缓存:谷歌中的URL或者位于www.archive.org的WayBcka Machine)。
特定的国家和语言的社交和商业网站(参考http://searchenginecolossus.com)。
累计和比较来自不同搜索网站结果的网站,例如Zuula(www.zuula.com)。
公司和雇员的博客,也就是关键雇员的个人博客。
社交网络(LinkedIn、Facebook,以及Twitter)。
浏览DNS、路由器和服务器信息的网站,特别是DNSstuff(www.dnsstuff.com)、ServerSniff(www.serversniff.net)、Netcraft(www.netcraft.com)和myIPneighbors.com。
Shodan(www.shodanhq.com),有时候被称为“黑客的谷歌”,Shodan列出了可访问互联网的设备且允许测试者搜索已知漏洞的设备。
密码垃圾站(pastebin,用site:pastebin.com漏洞”targetURL”搜索)
管理调查结果是很难的,然而,Kali有KeepNote,它支持快速导入和不同类型数据的管理。
三、DNS侦察和路由映射
一旦测试员确定其感兴趣的目标在线,下一步就是识别目标的IP地址和路由。
DNS侦察关心的是:识别谁拥有一个特定域或一系列IP地址(whois-类别信息),定义实际域名的DNS信息和标识目标的IP地址,以及在渗透测试员或攻击者与最终目标之间的路由。
搜集这些信息是半主动的,一些信息是免费开源的,而另一些信息来自第三方实体,例如DNS注册机构。虽然注册机构可能会收集IP地址和关于攻击者的请求的数据,但很少提供终端目标的信息。可以由目标直接检测到的信息是从不用来评估或者保留的,如DNS服务器日志。
因为需要的信息可以用一个确定的系统级、有条理的方法查询到,所以也可以自动收集信息。
DNS信息可能包括旧的或者不正确的单元。为了最小化错误的信息,可以查询不同源服务器以及用不同的工具来交叉验证结果。评估结果,并手动识别任何可疑的发现。用一个脚本来自动收集信息。脚本应该创建一个渗透测试的文件夹,然后为每个正在运行的应用创建一系列文件夹。在脚本执行完每个命令后,直接把结果传送给指定的文件夹。
1、WHOIS
研究IP地址空间的第一步是识别分配给目的网站的地址。一般通过使用whois命令来完成,该命令允许人们查询互联网资源中的相关信息数据库,数据库包含注册用户的域名或者IP地址。
依赖于查询的数据库,对whois请求的响应,将会提供名字、物理地址、电话号码和电子邮件地址(在社交工程攻击中是有用的),也包括IP地址和DNS服务器名。
攻击者用whois查询语句可以得到:
支持基于查询中指定的位置或者人员的社交网络攻击。
识别物理攻击的位置。
识别用于war dialing攻击,或者社交工程攻击的电话号码。
实施递归的研究来定位其他托管在同一个服务器的域,例如目标或者由同一个用户操作的服务器;如果他们是不安全的,攻击者可以利用他们得到服务器管理员的权限,然后攻克目标服务器。
在域到期的情况下,攻击者可以试图改变域的大小,并创建一个外观相似的网站来危害访问者,这些访问者以为他们访问的是原来的网站。
攻击者将用权威的DNS服务器来帮助DNS勘测,权威服务器有需要查找的那个域的记录。
注意,越来越多的实体使用第三方来保护数据,有一些域,例如.gov和.mil可能不会被公共域访问。发给这些域的请求会被记入日志。几个在线列表,有效地描述了指定给政府使用的域IP地址;大多数工具都有“不联系”地址选项,且应该将政府域输入这些字段,来避免错误的关注类型。
使用一个whois查询语句,最简单的方式是使用命令行。如下图所示,该图显示了使用whois命令获取数字国防(Digital Defence)的域的相关信息:
使用whois命令获取数字国防的域的相关信息
返回的whois记录包含地理信息、名字和联系信息——所有会导致社交工程攻击的信息。
有几个自动查找询问whois的网站,攻击者可以利用这样站点,在目标和他们之间插入一个步骤;然而,执行查找的站点可能会记录查询者的IP地址。
2、DNS侦察
域名系统(Domain Name System,DNS)是一个分布式的数据库,将域名(www.digitaldefence.ca)转换为它的IP地址(192.150.2.140)。
攻击者通过下面的方式利用DNS信息:
使用蛮力攻击,允许攻击者识别与目标相关的新域名。
如果DNS服务器被配置成允许一个区域传递给任何查询者,DNS服务器会提供可访问的互联网系统的主机名和IP地址,使其更容易地识别潜在的目标。如果目标没有把公共的(外部的)与个人的(内部的)DNS信息隔离开来,区域转换可能会泄漏内部设备的主机名和IP地址。(注意,如果区域转换请求被触发,大多数IDS和IPS系统将会发出警告。)
寻找易受攻击的服务(例如FTP服务),或者另外的有趣的服务(远程管理面板和远程访问)。
寻找配置错误或者未打补丁的服务器(dbase.test.target.com)。
服务记录(Service records,SRV)提供了服务、传输、端口和服务的重要命令的相关信息。这可能会帮助攻击者推断出软件。
关键域识别邮件(DomainKeys Identified Mail,DKIM)和发送者策略框架(Sender Policy Framework,SPF)记录用于控制垃圾邮件。如果这些记录被识别,攻击者可以知道:
他们比大多数组织有更强的安全意识。
可能会影响网络钓鱼和其他社交工程攻击。
Windows和UNIX都支持基础的命令行工具,例如nslookup;而且UNIX系统支持附加的命令行选项,例如dig。不幸的是,这些命令通常一次询问一个服务器,需要有效的交互式响应。
对于一个特定的目标,Kali有几个能反复查询DNS信息的特色工具。选择的工具必须适应互联网协议版本(IPv4或者IPv6),互联网协议用于与目标进行通信。
IPv4
IP或者因特网协议地址,是识别连接到一个私有网或者公共网的设备的唯一号码。今天,因特网大部分是基于IPv4的。Kali包括几个工具用来帮助DNS侦察,如下图所示。
Kali侦察DNS的几个工具
测试期间,大多数调查者运行fierce来确认所有可能已经识别的目标,然后运行至少两个综合性的工具(例如,dnsenum和dnsrecon)来产生最多的数据,并提供一个交叉确认等级。
使用dnsrecon产生一个标准的DNS记录搜索,并且这个搜索对于SRV记录是明确的(特定的)。在每个例子期望的结果见下图。
使用dnsrecon搜索域名相关信息的截图
DNSrecon允许渗透测试员获得SOA记录,名称服务器(name sever,NS),邮件交换主机(mail exchanger,MX),使用发送者策略框架(Sender Policy Framework,SPF)发送电子邮件的服务器,以及使用的IP地址范围。
IPv6
虽然IPv4似乎允许一个很大的地址空间,但是,大量可用的IP地址在几年前就已经耗尽,在这种情况下,需使用NAT技术和DHCP技术来提供可用地址的数量。一个更持久的解决方法已经找到,采用一个改进的IP地址方案IPv6。虽然小于5%的因特网在使用IPv6地址,但它的使用率的确在增长,并且渗透测试员必须处理IPv4和IPv6之间的不同。
在IPv6中,源地址和目的地址的长度是128位,可扩展为2128个可能的地址,也就是有3.4×1038个地址。
随着可寻址地址空间大小的增加,地址空间对渗透测试员也呈现了一些问题,尤其是使用扫描器在可用地址空间中寻找在线服务器的时候。然而一些IPv6协议的特征已经简化了测试过程,尤其是使用ICMPv6确定活跃的本地链路地址。
针对如下情况,执行初始浏览时考虑IPv6是很重要的:
测试工具对IPv6功能的支持是不均匀的,所以测试员必须确定每一个工具在IPv4、IPv6、混合网络中的性能和准确性。
由于IPv6是一个相当新的协议,目标网络可能包含泄漏重要数据的错误配置;测试员必须识别并利用这个信息。
早先的网络协议(防火墙、IDS和IPS)可能不会测出IPv6。在这些情况下,渗透测试员可以利用IPv6信道保持与网络的隐蔽通信,并泄漏出未检测到的数据。
Kali包含几个利用IPv6的工具(大多数综合的扫描器例如nmap现在也支持IPv6),见下图,绝大部分支持IPv6的工具源自THC-IPv6攻击包。
Kali包含的支持IPv6的工具
运行dnsdict6命令,如下图所示。
使用dnsdict6命令
3、映射路由到目标
路由映射最开始是一个路线诊断工具,用于查看IP数据包从一个主机到另一个主机的路线连接。通过使用IP数据包中的存活时间TTL(time to live)变量,每个hop在从一点到下一点时,从接收路由器引出一个ICMP TIME_EXCEEDED消息,同时TTL字段的值减1。数据包计算hop以及使用的路由器的数量。
从攻击者或者渗透测试员的角度看,traceroute数据有以下重要数据:
攻击者与目标之间的准确路径。
关于网络外部拓扑结构的提示。
确定可能过滤攻击流的访问控制设备(防火墙和包过滤路由器)。
如果网络配置错误,可能会识别内部地址。
使用基于Web的traceroute(www.traceroute.org),可以追查到目标网络不同地理位置的源地址。这些形式的扫描,可以定期地识别不止一个连接目标的不同网络,在一个接近目标网络的位置,通过执行单个的traceroute,可能忽略掉一些扫描识别信息。基于Web的traceroute可能识别多重初始地址的主机,该主机把两个或者更多的网络连接起来。这些主机是攻击者的重点攻击目标,因为他们大幅度提高了对目标网络的攻击面。
在Kali系统中,traceroute是一个命令行程序,利用ICMP包来映射路由;在Windows系统中,该程序是tracert。
如果你在Kali中启动traceroute,你可能看到大多数hops过滤器(用***表示数据)。例如,从作者现在的位置到www.google.com,执行traceroute命令的结果,如下图所示。
在Kali中使用traceroute命令
然而,在Windows环境中,如果用tracert执行相同的请求,我们可以看到如下图所示的信息。
在Kali中使用tracert命令
我们不仅能得到完整的路径,而且还能看到www.google.com正被解析为一个略有不同的IP地址,这表明负载均衡器是起作用的(你可以使用Kali的lbd脚本来确认其是否起作用,当然,该活动可能被目标位置记录)。
默认情况下,这是不同路径存在的原因,在Kali环境中,traceroute用于UDP数据报,而在Windows环境中,tracert使用ICMP返回请求(ICMP type 8)。因此,当使用Kali工具完成一个traceroute时,为了获得最完整的路径并绕过数据报过滤设备,使用多重协议是很重要的。
Kali提供下列工具来完成路由追踪,见下图:
Kali提供的路由扫描工具
由于对数据包类型、源数据包,以及目的数据包的控制,hping3已成为最有用的工具之一。例如,Google不允许ping请求。然而,如果将发送数据包作为一个TCP SYN请求,则有可能ping通服务器。
在下面的例子中,测试员试图在命令行中ping通谷歌。返回的数据确定了www.google.com是一个未知的主机;谷歌很明显阻塞了基于ICMP的ping命令。然而,下一条命令调用了hping3,命令它做以下事情:
(1)使用有SYN标识集(-s)的TCP向谷歌发送一个类ping命令。
(2)把数据包直接发送到80端口,该类型的合法请求是很少阻塞的(-p 80)。
(3)为发送给目标的三个数据包设置计数(-c 3)。
执行上面的步骤所使用的命令行,如下图所示。
在Kali中使用ping命令和hping3命令
hping3命令成功地确定了在线目标,并提供了基本的路由信息。
四、获得用户信息
许多渗透测试员收集用户名和电子邮件地址,因为这些信息经常用于登录目标系统。
最常用的工具是网页浏览器,用来手动搜索目标组织的网站,也包括第三方站点,例如LinkedIn或Jigsaw。
Kali包含的一些自动工具可以支持手动搜索。
以前雇员的电子邮件地址仍然可以使用。在实行社交工程攻击时,对一个从前雇员来的直接信息请求,通常导致一个对攻击者的重定向,该信息能使攻击者“可信”,可能被当作前雇员对待。此外,许多机构不能正确地终止员工账号,这些证书有可能仍会给予访问目标系统的权限。
1、收集姓名和电子邮件地址
theharvester工具是一个Python脚本,该脚本借助流行的搜索引擎和其他一些站点来进行搜索,如电子邮件地址、主机以及子域站点等。
使用theharvester工具是相当简单的,只需通过几个命令参数来进行设置。可用的选项如下:
-d:用来确定搜索的域;即一般的域或者目标网站。
-b:用来确定提取信息的来源;来源必须是下面的一种:
Bing、BingAPI、Google、Google-Profiles、Jigsaw、LinkedIn、People123、PGP,或者以上的全部。
-l:该选项使theharvester只收集来自特定数目的返回搜索结果的数据。
-f:用来保存最后结果,保存为HTML文件或者XML文件。如果省略该选项,结果将会显示在屏幕上,但是不会被保存。
下图说明了对digitaldefence.ca域的一个简单谷歌索引搜索。
用谷歌搜索digitaldefence.ca域
2、收集文件元数据
文件元数据是附加在文件上的一些信息,这些信息应用在创建和存储时,利用这些信息能管理文件。附加在文件上的有代表性的元数据如下:
创建文件应用的公司或者个人。
文件作者的名字。
创建文件的时间及日期。
文件最近的打印或者修改的时间;在一些实例中,时间可以确定是谁做了这些修改。
创建文件的计算机网络位置。
有一些文件,尤其是那些由相机或者移动设备创建的文件,可能包含地理的标记,该标记可以确定图片是在哪里创建的。
元数据对最终用户不是直接可见的,所以大多数文件和元数据一起整体公布。不幸的是,这种数据会泄漏一些信息,而这些信息会被测试员或者攻击者在进行攻击时利用。至少,测试员和攻击者可以通过比较它们和文件里的元数据来得到用户名;它们可以确定人们和特定文件类型的联系,例如年度财政报告或者战略计划。
随着移动设备的普及,与地理有关的元数据相关的风险也提高了。攻击者寻找一些位置(如别墅、酒店以及经常去的餐厅)作为发起攻击的站点,这类攻击针对那些在公共场所降低了安全保护的用户。例如,如果目标机构的一个员工经常在等待上班车辆时发送图片到社交媒体网站上,攻击者可以向这个员工发起物理攻击(窃取移动设备)、无线攻击,甚至偷看并记录其用户名和密码。
在Kali系统中,Metagoofil工具通过执行谷歌搜索来确定并下载目标网站的文件(包括:.doc、.docx、.pdf、.ppts、.xls和.xlsx)并提取用户名、软件版本、存储路径名,以及服务器或工作站名,如下图所示。
Metagoofil工具通过谷歌搜索来确定并下载文件
Metagoofil下载了指定数目的文件存储在一个临时文件夹内,并提取整理相关的元数据。该工具也通过该项功能来处理先前下载过的,且已存储在本地的文件。
Metagoofil首次返回的是查找到的用户列表。下图是一个短的列表。
Metagoofil返回的用户列表
Metagoofil也确定了服务器和文件的路径名。如果一些目标文件局限于一个特定的用户内(例如,在行政助理的工作间找到的财政报告草稿),这样的用户可能在后面测试时将其作为目标。如下图所示。
服务器与路径列表
五、分析用户密码列表
使用被动侦测来收集目标机构的用户名和生物信息;攻击者也可以做到这些。下一步就是使用这些信息来创建用户和目标的密码列表。
可以下载常用的密码列表,并存储在Kali系统中的/usr/share/wordlists目录中。这些列表反映了很多用户的爱好,应用程序定期消耗列表中的密码,这样在转换到队列的下一个密码之前,会用到每一个可能的密码。
幸运的是,通用用户密码分析器(Common User Password Profiler,CUPP)可以让测试员针对特定的用户生成其对应的特殊wordlist文件。CUPP在Backtrack 5r3被提出。然而在Kali中必须下载后才可使用。为了获得CUPP,可输入以下命令:
这将会把CUPP下载在本地目录中。
CUPP是一个Python脚本,通过以下命令,可以在CUPP目录中简单地调用:
以交互的方式启动CUPP,这种交互方式可以提示用户利用指定的信息元素来创建wordlist文件。简单的例子如下图所示。
在交互模式创建完wordlist后,将其放在CUPP目录中。
使用CUPP创建wordlist
在攻击过程或者杀链中的第一个实际步骤是进行探测来确定攻击目标和潜在的攻击路由。被动探测访问公共数据。这是一个秘密进行的过程,攻击者的IP地址与活动不与正常访问区别开。然而,这些信息在进行社交网络攻击时起着决定性作用,它对其他类型的攻击也有着促进作用。
微信公众号:计算机与网络安全
ID:Computer-network
【推荐书籍】