主动侦察最大的风险是被目标发现。利用测试者的时间戳、数据、源IP地址和其他信息,目标可以识别出侦察的来源。
因此,采用隐蔽技术可尽量减少被发现的概率。使用隐蔽技术进行侦察时,一个模仿黑客行为的测试人员需要做以下工作:
•伪造工具数字签名绕过检测或者避免触发告警。
•在正常流量中隐藏攻击。
•修改攻击特征隐藏流量的来源和类型。
•使用非标类型流量或加密扫描特征使攻击不可见。
隐蔽扫描技术包括以下内容:
•调整源IP协议栈(IP stack)和工具识别特征。
•修改数据包参数(nmap)。
•使用代理或匿名网络(ProxyChains和Tor网络)。
在渗透测试人员(或攻击者)开始测试之前,必须确保Kali上所有非必要的服务已禁用或已关闭。这个步骤是为了防止被目标发现,如检查发现本地DHCP守护程序是启用的,但这并不是必需的。DHCP有可能与目标系统进行交互,然后被记录下来,并在目标系统触发告警。需要进行在线更新的服务可能会与许可服务器建立通信或向其发送错误报告,因此在测试过程中最好禁用不需要的服务,只启用执行特定任务所需的服务。
一些商业和开源工具(如Metasploit框架)用身份识别序列号来标记数据包。虽然这对于试验后分析系统日志很有用(由特定测试工具发起的事件可直接与系统的事件日志进行比较,以确定网络如何检测和响应攻击),但它也可能会触发某些入侵检测系统的告警。用实验系统测试你的工具来确定被标记的数据包时,要么改变标记,要么谨慎使用该工具。
识别标记最简单的方法是新建一个虚拟镜像作为被攻击目标来测试工具,并查看系统日志所记录的工具名称。此外,使用Wireshark捕获攻击源和目标虚拟机之间的流量,然后在数据包捕获(pcap)文件中搜索可以关联到测试工具的关键词(工具名称、供应商、许可证号等)。
Metasploit框架中的user-agent参数可以通过修改http_form_field选项来改变。在msfconsole提示下,选择auxiliary/fuzzers/http/http_ form_field选项,然后设置一个新的useragent头,如图3.2所示。
图3.2 在Metasploit auxiliary选项修改user-agent
在上面的例子中,useragent被设置为谷歌图片蜘蛛(Googlebot-Image)。这是一个常见的自动应用程序,用于访问和索引网站,很少引起网站所有者的注意。
测试人员也可以选择使用插件,如Firefox的用户代理切换器,网址为https://addons.mozilla.org/en-GB/firefox/addon/uaswitcher/。
另一个选择是Chrome的用户代理切换器,网址为https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg。
要识别合法的用户代理,请参考下面的例子:http://www.useragentstring.com/。
主动侦察最常见的方法是对目标进行扫描,向其发送自定义的数据包,然后利用返回的数据包获取信息。采用这种方式时最流行的工具是Network Mapper(nmap)。为了有效地使用nmap,它必须以root级别的权限来运行。操控数据包是很典型的应用场景,因此所有nmap查询命令都需要使用sudo。
当试图最大限度地减少被检测的概率时,需要使用以下技术:
•攻击者带着目的接近目标,并发送确定目的所需的最少数量的数据包。例如,如果你想确认一个主机是否为Web应用,首先需要确定Web服务默认端口80或443是否开启。
•避免扫描过程中和目标系统的交互或信息泄露。不要ping目标或使用同步(SYN)和非传统的数据包扫描,如确认(ACK)、完成(FIN)和复位(RST)。
•随机修改数据包设置进行欺骗,如源IP、端口、MAC地址。
•调整时间以减缓数据包到达目标的速度。
•通过分割数据包或附加随机数据改变数据包大小,以混淆数据包检查设备。
举个例子,如果你想进行隐蔽的扫描并尽量减少被检测的风险,可以尝试以下nmap命令:
表3.1详细解释了前面的命令。
表3.1 nmap命令参数详细说明
这些命令参数组合在一起使用,将产生一个非常缓慢并隐藏源真实身份的扫描。然而,如果数据包太不寻常或修改得很复杂,可能会引起目标的注意,因此,许多测试者和攻击者使用匿名网络来减少被检测到的概率。
攻击者也可以通过运行以下命令利用诱饵或僵尸网络的方法来隐藏自己:-D是开关,诱饵可以是任何IP地址;RND:10是任何一组10个随机IP地址,声称是攻击源。当我们在nmap中使用-sI选项时,目标会触发僵尸IP的告警。
本节将探讨使攻击者保持匿名性的两个重要工具:Tor和Privoxy。
Tor(www.torproject.org)是第三代洋葱路由的一个开源实现,它提供了对匿名网络的免费访问代理。洋葱路由通过对用户流量进行加密并通过多个洋葱路由器节点进行传输来实现在线匿名访问。在洋葱路由的网络中,消息一层一层地加密包装,并经由一系列被称作洋葱路由器的网络节点发送,每经过一个洋葱路由器会将数据包的最外层解密,直至目的地时将最后一层解密。这个传输过程像是逐渐剥开洋葱的过程,因此它被称为洋葱网络。通过这一系列的加密包装,每一个网络节点都只能知道上一个节点的位置,无法知道整个发送路径以及源地址,如此它通过保护用户的IP流量来源和目的地来防止流量分析攻击。
在我们的例子中,Tor与Privoxy一起配合使用,Privoxy是一个非缓存的网络代理,位于在互联网上通信的应用程序之间,使用先进的过滤技术来保证隐私和阻止广告以及阻止将潜在的恶意数据发送给测试者。
请执行以下步骤安装To r:
1)执行apt-get update和apt-get upgrade命令,然后使用以下命令:
2)安装Tor之后,编辑位于/etc目录下的proxychains4.conf文件。这个文件定义了测试系统访问To r网络使用代理服务器的数量和顺序。代理服务器可能会出现故障,或者出现重载(导致网络缓慢或连接延迟),如果发生这种情况,一个已定义的或严格的ProxyChain将由于缺少预期的链接而导致失败。因此,禁用strict_chain,启用dynamic_chain,这样可以确保连接将被路由到,如图3.3所示。
图3.3 在proxychains4.conf中启用动态链
3)编辑[ProxyList],确保socks5代理存在,如图3.4所示。
开放代理很容易在互联网找到(如https://www.proxynova.com/proxy-server-list/),将其添加到proxychains.conf文件中。测试人员可以利用这一点来进一步来混淆它们的身份。例如,如果有报告说某个国家或某段IP地址与最近的在线攻击活动有关,那么寻找来自那个地方的开放代理,并将它们添加到你的列表或独立的配置文件中。
图3.4 将代理列表添加到proxychains4.conf中
4)从一个终端窗口启动To r服务,请执行以下命令:
5)通过执行以下命令验证To r是否已经启动:
验证To r网络是否正常工作和保持匿名连接是很重要的。
6)首先验证你的源IP地址。从一个终端输入以下命令:
这个命令可以启动Iceweasel浏览器,打开一个网站,提供与该网页连接的源IP地址。
7)注意IP地址,使用以下ProxyChains命令调用Tor路由:
在这个特定的例子中,该IP地址被确定为xx.xx.xx.xx。从终端窗口对该IP地址进行whois查询表明,该传输现在是从一个Tor出口节点发出的,如图3.5所示。
图3.5 随机分配的IP地址whois详情
你也可以通过访问以下网站来验证Tor是否正常运行:https://check.torproject.org。
虽然现在使用Tor网络进行通信是受保护的,但也有可能发生DNS泄露,这发生在你的系统发出DNS请求时,向ISP提供你的身份。你可以在以下网站上检查DNS泄密:www.dnsleaktest.com。
使用ProxyChains来访问Tor网络的大多数命令行可以从控制台运行,在使用Tor时,需要注意以下几点:
• To r提供了一种匿名服务,但它并不保证隐私。节点的拥有者能够嗅探流量,并能够访问用户凭证。
•据报道,To r浏览器包中的漏洞已被执法部门用来利用系统和获取用户信息。
• ProxyChains不处理用户数据报协议(UDP)流量。
•一些应用程序和服务不能在tor环境中运行——特别是运行Metasploit和nmap可能会使连接中断。ProxyChains使用连接扫描来替代nmap的SYN隐蔽扫描,这可能会向目标泄露信息。
•一些浏览器应用程序(Flash/ActiveX或HTML5)可以用来获取你的IP地址。
•攻击者可以使用随机链。配置了这个选项,ProxyChains会从我们的列表中随机选择IP地址(本地以太网IP,例如127.0.0.1、192.168.x.x或172.16.x.x),并使用它们来创建ProxyChain。这意味着每次使用ProxyChains时,代理链在目标看来都是不同的,这使得攻击者的流量更难从源头上追踪。
•要做到这一点,编辑/etc/proxychains4.conf文件,注释掉动态链,取消注释随机链,因为一次只能使用其中一个选项。
•攻击者可以取消对chain_len这一行的注释,这样就可以在创建随机代理链的同时决定链中的IP地址数量。
攻击者可以使用To r技术来建立一个合格的匿名通信,然后持续在网络中保持匿名性。