6.3 远程无线侦察
在连接到“被占领主机”之后,我们现在可以通过使用“主动式扫描器”来列举(enumerate)和“发现”(discover)其功率覆盖范围内的网络。几个版本的Windows系统都支持用户通过命令行的方式,找到周围可用的网络,所用的命令就是内置于系统中的netsh命令。
在这次的输出中,我们可以确定发现了多个网络,其中包括一个WPA2认证的“企业模式”网络,其“服务集标识”是“CORPNET”;还有一个使用WPA2-PSK认证的的消费者网络,其“服务集标识”为“tomethingclever”;以及一个带以WEP作为加密算法的开放式身份验证的网络,其“服务集标识”为“VOIP”。
一看到这个三个可用的网络目标,我们就可以很容易地做出将WEP作业适合攻击网络的选择。这个网络的“服务集标识”是“VOIP”,看上去有点像“老式基于IP的手持机”(older VoIP handset)连接的网络,所以这也是将其设定为攻击目标的另一个原因,选定这个目录以后,我们还会做进一步的分析。
使用主机网络中“骗子”AP接入点的功能
在这个案例中,我们通过几个方面试试我们的技术。其一就是在一个远程无线网络中进行探测,查找有用信息;其二就是通过一个“已占领的主机”作为“桥”,有效地从“隙”上跨越过去,到达一个我们原本无法企及的组织网络中。而这里完成跨越的切入点,就是依靠对方网络最脆弱的点,即借助这个“已占领的主机”随后的访问,远程入侵WEP认证的网络。当然,真要使选择WPA2-PSK认证的网络,也不是不行的。
在这个案例中,从“被占领主机”上,虽然有几个曾经访问的网络记录,但还没有哪一个无线网络可以立即访问,可以当成是我们的运气有点背好了。不过没关系,我们可以在随后通过使用“被占领主机”的Windows系统创建一个新的无线网络。
在“网络驱动程序接口规范”(NDIS 6)中,Microsoft公司提供了一个叫作“无线承载网络”(Wireless Hosted Network)的功能,该功能允许Windows Vista或以后版本的主机上,可以使用一个可用的Wi-Fi网络接口创建一个“软AP接入点”(soft AP),该“软AP接入点”就相当于将这个无线网络接口转化成一个无线AP接入点,可以接受其他无线客户端的访问请求,并且“软AP接入点”可以自动桥接本机上的有线接口,通过有线接口实现上网数据的转发。尽管该“无线承载网络”功能上只支持WPA2-PSK认证方式,但攻击者仍然可以使用这一特征,将这个被攻击过的主机(即当年我们“羹美食品”点上的客户端,如今的“被占领主机”)转换成一个“骗子”AP接入点,以便借助于这个AP接入点,实现随后的通过有线网络的访问,虽然只是访问他们的本地内网,而不是访问Internet网,但这本来也是我们的目的。
从一个shell命令,我们可以创建这个“无线承载网络”,设置“服务集标识”为“NAME”,以及选择一个“p@sswOrd”的密码,其启动界面如下所示:
对黑客来说,在“无线承载网络”上还有个功能,那就是允许一个实实在在的本地攻击者通过其无线连接到AP接入点上,然后反向通过“被攻击主机”的有线网络访问该网络的功能。即使攻击者已经通过Meterpreter工具具备远程访问这个有线网络的能力,现在这种通过无线接入网络然后再访问有线网络的方式,在特定的有线攻击方式中会显得更有用。比如,对于一些特定的有线攻击,根本就不适合在Windows操作系统上再通过“隧道技术”(tunneling)实施攻击。
停止“无线承载网络”的无线接口,可以通过“stop”命令。这个命令无疑会停止无线网卡作为“骗子”AP接入点的使命,而恢复为原来的无线接口,并且断开与有线以太网接口上桥接(bridge connection)的那个连接。
6.3.1 Windows的监测模式
在“网络驱动程序接口规范”模型中,Microsoft公司要求所有本地的Wi-Fi驱动程序网络接口都要包括对“监测模式”(monitor mode)访问的支持,这样可以让用户有能力在当前信道上观察到的网络上的所有活动,并且可以按802.11格式搜集所有的通信数据包。该功能很显然是参照了Linux操作系统和OS X操作系统用户多年来喜欢的“监测模式”功能,同时也意味着,对于一个黑客,他开始在Windows上也有新的机会,即通过使用一个“被占领的主机”实施攻击一个附近无线网络的能力。
不过,这并不表示你可以马上使用这样的功能,Microsoft公司在Windows中,既不包括在本地用于在“监测模式”下控制一个接口的用户工具(user-space tool),也不包括可以在监测模式下用于查看和处理捕获数据包的工具。在针对“网络驱动程序接口规范”的“Microsoft开发人员网络文档”(Microsoft Developer Network,MSDN)中,Microsoft公司表示开发人员可以创建自己的工具,并在工具中将接口设置到“监测模式”下,也可以捕获802.11数据包,还可以控制无线接口的信道以及进行“模式设置”,这里的模式是指802.11标准的版本,例如,驱动程序是在802.11b模式下还是在802.11n模式下进行捕获。另外,值得提醒的是,要开发这么一个“轻量级过滤器驱动”(Lightweight Filter Driver,LWF),但开发与使用本功能,都需要在Windows上具有比运行标准的用户应用程序更高的权限级别。
6.3.2 Microsoft公司的NetMon程序
NetMon程序(网络监视器)是一款由Microsoft公司设计开发的数据包嗅探工具,该工具与Windows紧密集成,效仿了很多原本应用于Wireshark中的功能,如数据包的分析、解码和过滤功能。同时,在Windows上,NetMon程序具有作为“Microsoft公司制造”的名声大、值得信赖的应用程序的优势。包括NetMon软件在内,所有的嗅探软件,都是在使用本地Wi-Fi“监测模式”这一功能而做的工具或驱动程序。这可以让我们在远程模式下,在Windows的操作系统上,实现“监测模式”下数据包的嗅探能力。
如前所述,在Windows默认安装中,并没有这个样的嗅探工具,所以,如果要使用NetMon程序,首先,我们需要下载并在目标主机上安装NetMon程序。在Windows操作系统上,“正常”安装一个Microsoft自己编写的程序是件非常容易的事,但是现在的问题在于我们是“不正常”安装,是偷偷地安装在远程“被占领的主机”上,所以就变得有点棘手了。尽管我们可以从命令行安装和运行NetMon程序,以防止安装的时候会创建一些明显的安装痕迹(如用户的桌面会新增一个NetMon图标),但如果要控制无线驱动程序的信道,那么唯一的方法只能是通过图形用户界面来执行安装程序。因此,我们必须在“被占领主机”上有运行图形用户界面的权限和访问能力。
6.3.3 建立远程桌面访问
要获得目标主机远程桌面访问权限,有多种选择可以使用。内置的“远程桌面协议”(Remote Desktop Protocol,RDP)服务可以自动配置所需的参数,并且正当地通过防火墙的监管,然后通过netcat工具所分配的协议重定向功能,主动地推送到攻击者主机屏幕上,但这种方法的缺点是:需要在目标主机上进行几步操作,其中包括Windows防火墙服务的修改。相比于采用“远程桌面协议”进行远程桌面访问,一个简单的选择是利用Meterpreter软件的“虚拟网络计算”(Virtual Network Computing,VNC),通过有效载荷在内存中实现数据包的注入能力。
首先,我们需要确认已将vncviewer工具安装在攻击者的系统上:
如果上面的“which”命令没有返回输出结果,然后查阅一下Linux操作系统分布版在发布时的使用手册,找到“虚拟网络计算”的viewer程序包安装之前所以必须安装的其他程序,然后再继续上面的操作,直到成功。
“远程桌面协议”是Windows自带的一个协议,与此同名,在Windows上还有一个“远程桌面”的程序,通过该程序,在Windows下,一旦有用户通过远程桌面连接,本机的桌面将出现锁屏的状况;而通过该协议,则可以做到不锁屏的前提下使用远程屏幕,但即使如此,当我们有动作的时候,由我们打开的应用程序就会显示在用户本地的屏幕上,所以在运行“虚拟网络计算”客户端有效载荷,使用“被占领主机”电脑的远程桌面时,很显然要等到没有人坐在这个被攻击电脑前时才能进行。那么怎么判断对方没有在使用电脑呢?事实上,我们可以通过Meterpreter工具的idletime命令读取对方的“空闲时间”来间接地判断对方电脑上的“活动水平”(activity level):
既然现在用户的工作站是闲置的,那么我们就可以运行vncwiewer工具的“反向TCP连接有效载荷”(reverse_tcp payload)攻击方式,来获取“被占领主机”的远端桌面的访问权限。在使用Meterpreter工具的“有效载荷注入”(payload_inject)功能的时候,可以添加“虚拟网络计算”工具的“反向TCP连接有效载荷”到内存中存在的一个会话中。这个过程并不会对“被占领主机”的硬件做任何操作,所以极具隐蔽性。另外,使用这种攻击方式的优点就是对“被占领主机”系统的改变非常小,并且很容易躲开防病毒系统的监视:
运行完“虚拟网络计算”工具的“反向TCP连接有效载荷”攻击以后,“植入”到“被占领主机”上的程序会反向连接(connects back)攻击主机,连接的方式是TCP,使用的端口是5900。所以在进行上述操作之前或同时,最好先在我们自己的主机上运行vncviewer程序的服务端。一旦服务端程序运行,就可以接到由“被占领主机”上程序授予的访问对方桌面的权力。在上面运行cmd.exe的shell程序,对方就会自动接受由vncinject程序注入的有效载荷,对方运行的shell程序名叫“Metasploit绅士外壳”(Metasploit Courtesy Shell),这时的程序界面如图6-6所示。
一旦我们获得了“被占领主机”的图形用户界面,就可以在其主机上安装NetMon程序了。
6.3.4 安装NetMon程序
随着我们可以使用“图形用户界面”的方式访问“被占领主机”,我们就可以在“被占领主机”的本地用Web浏览器访问Microsoft公司的下载页面,下载NetMon程序,并运行安装。因为“虚拟网络计算”的桌面屏幕刷新相对滞后,所以这个过程看上去是相对较慢的,因此,我们应将尽可能从命令行上运行,而只在必要的时候才用“图形用户界面”运行。
在攻击者的服务器上,我们将下载最新版本的NetMon程序(在写这本书的时候,最新版是3.4),解压缩可执行文件,可以显示嵌入式“MSI安装器”[1](MSI installer)。提醒读者注意该安装包中包含两个安装器:一个是安装具有嗅探功能的NetMon程序本身,其文件名是“netmon.msi”;一个是安装解析器(parsers)程序,该程序主要是解析由NetMon程序在嗅探过程中保存的数据包文件,其文件名是“NetworkMonitor_Parsers.msi”。我们将二者都上传到“被占领主机”上,以便在安装此工具后,既能捕获数据包,也能解析数据包。
♥ 提示
要查询NetMon程序的最新版本,可以到Microsoft公司的“微软公司下载中心”(Microsoft Download Center)进行查询和下载,其地址是http://www.microsoft.com/downloads/。
返回到Meterpreter的Shell程序,上传netmon.msi安装程序包到“被占领主机”的临时目录中:
接下来,我们可以使用Windows内置msiexec工具,“悄悄地”运行“NetMon的安装程序”。为了避免安装程序在“被占领主机”的桌面上为NetMon程序工具创建图标,我们将在安装NetMon程序之前,在“所有用户的桌面”目录中暂时申请一个“只读访问控制列表”(read-only access control list)的权限:
随着NetMon程序安装完成,我们可以充分利用当地的无线网卡的能力,去攻击之前三个网络中最弱的那个,即“服务集标识”为“VOIP”,采用WEP认证的那个无线网络。
6.3.5 监视模式捕获数据包
NetMon程序为我们提供了一个“图形化网络监控”(GUI Network Monitor)的进程,大多数NetMon的用户使用这个程序的目的就是使用其数据包的捕获(capture)和数据分析(data analysis)的功能。然而,在我们的攻击设计中,我们安装和使用NetMon程序,目的是为了在我们攻击过程中管理那些NetMon安装配套的可执行文件。
NetMon程序中的一个工具,名叫nmwifi,可以与NetMon的LWF过滤器进行交互式的命令操作。通过nmwifi程序,我们可以控制无线接口的访问,将无线网络接口设置为“监测模式”或“托管模式”(managed mode),以及指定一个信道和“物理层”(PHY)通信协议(如802.11a协议或802.11b协议)。不幸的是,nmwifi只能从图形用户接口才能使用,因为NetMon程序安装程序会自动在系统搜索路径“PATH变量”(即Windows的环境变量中的“PATH”)中添加一个“网络监控程序目录文件”(Network Monitor Program File)的值[2],所以我们既可以从图形用户界面通过Windows中使用“开始(Start)|运行(Run)”系统级菜单运行nmwifi,也可以从Meterpreter的提示符状态启动该程序。一旦启动成功,nmwifi的图形用户界面将显示一个可用的“本地Wi-Fi驱动程序”的下拉列表,该下拉列表中的选项可以使系统处于“监测模式”,也可以控制信道的设置,如图6-7所示。
♥ 提示
如果你正在使用的这个无线“连接”控制“被占领主机”时,不要试图把它设置为“监测模式”,这样做的后果,就是当你把这个无线接口设置为“监测模式”时,系统会中断(terminate)所有使用该接口访问的所有连接,进而导致监测连接的丢失。
为了攻击“服务集标识”为“VOIP”的无线网络,我们选择“切换到监测模式”(Switch to Monitor Mode)复选框,然后在“选择一个层和一个通道”(Select a layer and channel)的文本框中,将“通道”设置11,将“层”设置为IEEE 802.11g。上面的这些参数都是在之前基于“netsh wlan show networks”命令时输出的结果。完成上述设置以后,单击“应用”(Apply)按钮。当下面的状态栏中显示“监控模式:对,已选择”(Monitor Mode:On,Select),并且在状态栏的右边显示出刚才输入的正确的信道(即图上“Channel”)和物理层类型(即图上“Layer”)时,我们将nmwifi程序最小化显示。
⚠ 警告
如果关闭了nmwifi程序,系统的无线接口将由“监测模式”恢复到“托管模式”,并且会禁用“监控模式”的访问。所以最小化nmwifi程序,让程序保持运行状态,以便在随后,其他的程序还能在“监测模式”下捕获会话数据包。
回到Meterpreter cmd.exe的shell程序上,我们可以启动命令行的NetMon抓包工具,它的名字叫nmcap。通过这个工具,我们可以设置捕获数据包的无线接口,过滤后只保存无线数据包,以及将结果保存到voip.cap文件中。
这些跟在“已接收”(Received)之后的值表示通过nmcap进程所发现的数据包(frame)的数量,随后跟在“已保存”(Saved)后面的值表示的是匹配到保存在voip.cap文件中的Wi-Fi.Data过滤器的数据包的数量。我们可以留着这个进程在目的网络上运行捕获数据帧,直到我们抓获了约100000个数据包为止。一旦完成后,按Ctrl+C组合键终止Meterpreter在这一信道上的捕获操作,然后通过Meterpreter中ps命令和kill命令关闭nmcap进程。
⊗ 注意
不幸的是,在“被占领主机”上,通过使用本地Wi-Fi的驱动程序,利用“ARP重播”攻击(ARP replay)或其他WEP认证,是不能完成Windows操作系统上加速攻击的。究其原因,是因为这些在NetMon的LWF过滤器中,而在这种情况下,缺乏“数据包注入”的能力。
下一步,我们将捕获到的voip.cap文件传到我们攻击者的系统中:
既然我们已完成了在被占领的Windows主机上的数据捕获操作,下面就可以删除nmwifi.exe进程,清理一下现场。
在“被占领主机”上,利用Windows操作系统操作远程无线功能,我们就可以在对方的网络中,在“监测模式”下搜集通信的数据包,并且保存这些数据包捕获文件。下一步,还要利用这些信息攻击这个“服务集标识”为“VOIP”的无线网络。
Microsoft的消息分析器
Microsoft公司在2010年6月24日推出NetMon3.4版本的发布以后,就停止了NetMon软件的开发工作。取代NetMon程序的是一款新的工具,其名称为Microsoft的“消息分析器”(Message Analyzer)。与传统的单纯依靠捕获数据包的网络监视器不同,“消息分析器”使用“基于Windows的事件根据”(Event Tracing for Windows,ETW)机制作为要捕获的数据源,可以允许用户动态地捕获到多种信息,这不仅包含传统基于网络接口的数据包,也包括Windows防火墙的、系统代理服务器(WebProxy)的,以及VPN适配器的全部信息,并且如果涉及加密,还可以包括加密前、加密后、解密前、解密后的全部信息。
和NetMon程序一样,“消息分析器”也是免费的,并且可以直接从Microsoft公司的“微软公司下载中心”(Microsoft Download Center)下载,该文件的下载地址是:http://www.microsoft.com/en-us/download/details.asps?id=40308 。尽管从“消息分析器”程序的宣传中,我们知道相比于NetMon程序,该程序有很多新的、吸引眼球的特色功能加入,但与NetMon程序是在“监测模式”下捕获数据包有所不同的是,“消息分析器”程序并不支持在“监测模式”进行数据包的捕获。这些令人印象深刻的特点中,比如在很多相关事件之间建立一种关联,比如在数据包捕获文件和其他结构数据源(比如日志文件中的)之间就存在这种关联。那么通过“消息分析器”程序可以互查和一并显示。不过,从攻击者的角度来看,上面这种特点并没有多大意义,因为对于一个黑客来说,建立这种关联本来就是小菜一碟。所以如果坚持要在“被占领主机”的Windows系统下使用无线网卡“监测模式”下对嗅探技术的支持,那你只需要继续使用Microsoft公司著名的NetMon程序即可。如果你要使用“消息分析器”工具,也是要付出一点代价的,比如,就算你只是想使用新的“消息分析器”程序看看NetMon程序所截的数据包,那你要花一些时间熟悉这个软件了。不过,就“消息分析器”程序中的“数据测试”(Diagnoscics)功能还是挺强大的,在NetMon程序所截的数据中,通过该功能,你可以查看那些“畸形”的数据包。
- MSI安装器指的是通过Microsoft Installer生成的一种安装,该安装中,除了要安装的程序,还包含安装这些程序所需要的信息,以及多种安装模式和卸载模式下所需的指令和数据。比如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。——译者注
- 在Windows中运行一个程序时,系统会首先在当前目录下查找要运行的程序,如果找不到,则到系统目录下找,如果还找不到,就到PATH中所指向的那些目录中找。上面过程中,如果前一个目录中找到,则直接运行,不再找下面的各个目录,如果上述所有目录均没有,则报告“报不到要执行的文件”错误。——译者注
本书评论