本章将讲解执法机构常用的各种技术。这些方法可以帮助你在网络监听和攻击领域更好地利用Metasploit。本章将着眼于以下几个要点。
如果你是为执法机构做渗透工作,那么最好在命令和控制会话过程中都保持匿名。大多数执法机构都会使用VPS服务器来完成命令和控制会话,这一点对于匿名来说是十分方便的,因为在它们的终端都是通过一个代理隧道接入网络的。不过由于在你和你的目标中很容易加入一个代理,所以执法机构往往也无须考虑使用Metasploit。
我们来看看如何改变这种情况,将Metasploit变成一个对执法机构来说不仅可用而且强大的工具。考虑如下场景。
在这个案例中一共有三个公网IP。我们的目标服务器IP为106.215.26.19,我们使用的Metasploit运行在IP为185.91.2xx.xxx的主机的8443端口上。我们可以通过生成一个内置代理服务的反向HTTPS攻击载荷,来利用Metasploit的强大功能。按照如下截图所示来创建一个简单的代理攻击载荷。
可以看到,我们已经将HTTPProxyHost
和HTTPProxyPort
设置为代理服务器的IP地址和端口,这是一个运行了CCProxy软件的Windows操作系统。整个过程如下图所示。
CCProxy软件是一款运行在Windows操作系统下的代理服务器工具。我们可以轻松地在这个工具中配置端口和认证。配置身份验证是一种很好的做法,这样任何人在没有权限的情况下都无法使用你的代理。你可以在生成攻击载荷时,使用HttpProxyPass
和HttpProxyUser
两个参数来指定认证的密码和用户名。接下来,我们需要在185.92.2xx.xxx上启动handler,这个过程如下图所示。
可以看到,我们快速进入了代理服务器。这意味着我们不用再将Metasploit从一台主机转移到另一台上,而且可以轻松地在这些代理服务器中切换。检查一下我们handler上的流量,看看是否得到了目标上的流量。
看起来并没有。我们获得了代理服务器中的所有流量。我们刚刚看到了如何使用代理服务器来实现Metasploit所在主机的匿名化。
DLL加载顺序劫持/DLL植入是我最喜欢的一种访问权限持久化技术,利用它不仅可以躲避管理员发现,同时还能保持对目标的长时间控制。下面就来讨论这一技术。
顾名思义,攻击者可以利用“DLL加载顺序劫持”漏洞来控制程序去加载恶意的DLL,这一点是利用加载dll目录的优先级来实现的。
大多数情况下,软件一旦被执行,就会在其当前文件夹和System32文件夹中查找DLL文件。不过,软件并不是直接从System32中加载需要的DLL文件,而是只有在当前文件夹中找不到需要的DLL文件时,才会到System32中查找。这种情况可以被攻击者利用,他们只需将恶意的DLL文件放置在当前文件夹中,这样,由于当前文件夹的优先级高于System32文件夹,程序就会直接加载恶意的DLL文件,而不会从System32文件夹中加载DLL文件。下图可以帮助你更好地理解这一点。
从上图中可以看到,其中的应用程序一旦被执行,就会加载xx1、xx2和xx3这3个DLL文件。另外,应用程序还会查找yy1.dll这个文件,不过它并不在当前目录中。如果没有找到这个文件的话,应用程序就需要到System32目录中去查找。现在设想攻击者已经将一个名为yy1.dll的恶意DLL文件放置到了应用程序的当前文件夹中。这样,程序就永远不会跳转到System32文件夹,而是会直接加载攻击者放置的恶意DLL文件,并认为这个文件是合法的。这种攻击一旦成功,攻击者就会获得目标主机上的Meterpreter控制权限。下面我们就在一个常用的应用程序(如VLC播放器)上进行测试,过程如下所示。
首先创建一个名为CRYPTBASE.dll的文件。CRYPTBASE.dll是一个大多数应用程序都会使用的通用文件。不过,VLC播放器应该到System32文件夹中去加载这个DLL文件,而不是在当前文件夹中加载。为了对这个应用程序进行DLL加载顺序劫持,我们需要将这个文件放置到VLC播放器的所在目录中。因此,VLC播放器在自己的目录中就可以找到所需的CRYPTBASE.dll文件,而不会再到System32目录中去查找,这也意味着它将会执行恶意的DLL文件,而不是原来的DLL文件。我们现在正通过Meterpreter来控制目标,可以看到,目标上VLC播放器已经安装好了,如下图所示。
浏览VLC目录,并将这个恶意DLL放置到这个目录中。
这里首先使用cd
命令切换到了VLC的工作目录,然后将恶意的DLL文件上传到了这个目录中。然后为DLL文件生成一个handler,整个过程如下图所示。
一切搞定。只要有人启动这个VLC播放器,我们就可以获得对他的shell控制权限。现在我们模拟用户的角色,在目标计算机上启动这个VLC播放器,这个过程如下所示。
可以看到,我们的DLL文件被成功地放置在了文件夹中。我们通过Meterpreter来运行VLC,这个过程如下所示。
太棒了!可以看到,一旦执行了vlc.exe,我们就得到了另一个shell。我们现在已经成功获取了对系统的控制权限,只要有人执行VLC这个播放器,我们就肯定可以获得一个shell。但是不要太早结束这一切!我们现在从用户的角度来回顾这个过程,看看一切是否顺利。
目标计算机看起来好像很正常,但是并没有启动VLC播放器。我们需要设法通过某种方法来修复这个VLC播放器,因为一个失败的安装过程可能导致它被替换或者重新安装。但是VLC播放器崩溃了,因为它无法从CRYPTBASE.dll文件中加载正确的函数,这是因为我们使用了恶意DLL而不是原来的DLL文件。为了克服这个问题,我们将使用后门工厂(backdoor factory)工具来在原始的DLL文件中安装后门,使用它代替普通的Meterpreter DLL文件。这表示我们安装了后门的DLL文件可以使VLC播放器正常工作,同时还会为我们提供系统的控制权限。
代码打洞技术指的是将后门程序隐藏到可执行程序和库文件的代码空闲空间中。该方法将后门程序隐蔽在软件的空白存储区域,然后对代码进行修改,从而达到启动后门程序的目的。下面给出了对CRYPTBASE.dll文件打补丁的做法。
Kali Linux中已经安装好了后门工厂。我们使用参数-f
指定了要打补丁的DLL文件,然后使用-s
参数指定了要使用的攻击载荷,使用-H
和-P
指定了要使用的IP地址和端口,而参数-o
指明了生成的文件。
参数
-Z
表示跳过可执行文件的签名过程。
当这个后门加入过程开始时,我们就可以看到屏幕显示如下内容。
可以看到,后门工厂工具试图在DLL文件中查找一个长度为343或者更大的空间。我们看看接下来都显示了什么。
不错!我们找到了三个可以放置shellcode的代码洞。我们在里面随便选一个,例如第3个。
可以看到,现在的DLL文件已经被植入了后门,这表示DLL的入口点现在指向了.reloc代码段的shellcode部分。我们将这个文件放在Program Files目录中受攻击软件的安装目录,在这个示例中就是VLC。它将正常执行,而不是像在上一节看到的那样崩溃了,而且它为我们提供了对主机的控制权限。
Metasploit中提供了十分方便的文件扫描功能。后渗透模块enum_files
可以帮助我们实现文件收集自动化。下面给出了这个模块的使用方法。
如图所示,我们已经启动了enum_files
后渗透测试模块,并将参数FILE_GLOBS
的值设置为*.docx OR *.pdf OR *.xlsx
,这表示将会在目标系统中查找以上三种格式。然后我们将SESSION
的值设置为5,这没有特殊的含义,只是用来定义我们会话的标识符。可以看到,运行这个模块之后,它就会开始自动地在目标主机上搜索所有符合条件的文件,并将它们下载到我们的计算机中。
前一章已经介绍了如何使用自定义编码器绕过杀毒软件。接下来再深入一些,来研究一下如何使用Metasploit中的加密和代码混淆功能。这次我们将会用到一个很酷的工具,它的名字叫作venom。接下来使用venom创建一些加密的Meterpreter shellcode。
当你在Kali Linux中启动了venom之后,就可以看到它如上图所示的启动界面。这个venom是Pedro Nobrega和Chaitanya Haritash(Suspicious-Shell-Activity)的杰作,他们二人一直致力于研究在各种操作系统上简化外壳代码和后门的生成。单击回车以继续操作。
正如你在上图中看到的那样,这里按照操作系统分类提供了各种攻击载荷,你甚至还可以创建可以在多个操作系统上运行的攻击载荷。我们首先选择选项第二个选项“Windows-OS payloads”。
可以看到,Windows类型的操作系统支持多种代理。我们选择其中的16号代理,它是C和Python的组合(UUID混淆)。接下来,我们需要在“Enter LHOST”窗口内添加一个IP地址,如下图所示。
添加完毕之后,我们将会看到两个和它相类似的窗口,其中一个需要输入的是LPORT,另一个需要添加输出攻击载荷的名字。这里我们可以在LPORT里面输入443,在输出攻击载荷名字里面输入reverse_winhttps
,或者任何合适的名字都可以,如下图所示。
接下来,我们将会看到这个生成过程已经开始了,我们需要为这个可执行文件选择一个图标。
venom框架将会启动和这个可执行文件相匹配的handler,如下图所示。
当这个文件在目标上执行的时候,我们将会得到如下的图示。
我们很轻松地获得了目标的控制权。我们看到venom工具在很多场景中都展示了极大的威力,它提供了从伪造Gmail的SSL链接到使用shikata_ga_nai
进行编码等各种实用功能。下面把这个文件放到http://virscan.org/中进行检查。
可以看到,除了一个杀毒引擎发现这个文件是一个后门程序之外,其他的杀毒引擎都没有检测到。
Metasploit中提供了很多用来消除入侵痕迹的工具。不过从取证的角度来说,这些工具没有触及某些关键部分,因此会暴露一些关于入侵活动的行为和有效信息。互联网上有很多提供了自定义功能的模块。它们中的一部分实现了对那些关键部分的处理,但是另外一部分则没有。我们要研究的是一个反取证模块,它提供了大量功能,例如:清除事件日志,清除日志文件,操控注册表、.lnk文件、.tmp、.log、浏览器历史、Prefetch Files(.pf)、RecentDocs、ShellBags、Temp/Recent文件夹以及恢复点。Pedro Nobrega是这个模块的作者,他在取证方面进行了广泛的研究。他从取证分析者的角度思考,从而开发了这个模块。可以从https://github.com/r00t-3xp10it/msf-auxiliarys/blob/master/windows/auxiliarys/CleanTracks.rb下载这个模块,然后就像前几章中做的那样,在Metasploit中使用loadpath
命令载入这个模块。也可以将这个文件放置到post/windows/manage目录中。在运行这个模块之前,我们先来看看它的参数。
可以看到,在这个模块中我们可以使用CLEANER
、DEL_LOGS
和GET_SYS
功能。下面看看当执行这个模块时会发生什么。
现在这个模块正常运行着。我们来查看一下它都完成了哪些工作。
可以看到,目标系统中的日志文件、临时文件以及资源管理记录(shellbag)都会被清除掉。为了确保这个模块正常工作了,我们可以看看下图,其中显示了在这个模块执行之前的日志数量。
该模块执行之后,系统中的日志状态就会发生变化,如下图所示。
除了在上图中看到的部分之外,这个模块最棒的地方是它的高级选项。
选项DIR_MACE
的值可以为目标系统上的任意目录,利用模块可以修改这个目录中所有文件的修改、访问和创建时间戳。选项PANIC
用来格式化NTFS格式的系统盘,因此这个操作是很危险的。选项REVERT
可以将目标系统的大部分策略都恢复成初始值。而PREVENT
选项将尝试通过设置这些值来避免目标系统上日志的创建和数据的生成。这个功能极为有用,对执法机构而言尤其如此。
本章介绍了一些可以为执法机构提供帮助的专用工具和技术。不过,这些技术必须谨慎使用,因为某些法律可能会限制你使用这些技术。我们讨论了如何实现Meterpreter会话的代理,研究了很多APT技术,例如获取持久性的控制,从目标系统获取文件,使用venom实现对攻击载荷的代码混淆,以及使用Metasploit的第三方反取证模块来掩盖入侵的痕迹。
尝试进行下面的练习。
在下一章中,我们将会介绍大名鼎鼎的Armitage,同时建立红队的测试环境,并使用自定义的脚本来充分发挥Armitage的作用。