对GOOTKIT木马的持久性进击和其他歹意功用的探究 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

对GOOTKIT木马的持久性进击和其他歹意功用的探究

申博_行业观察 申博 61次浏览 未收录 0个评论

在上一篇文章,我们剖析了GOOTKIT木马的壮大反剖析才能,本文,我们继承探究GOOTKIT木马的持久性进击和其他歹意功用。

Gootkit银行木马于2014年被发明,它应用Node.JS库实行一系列歹意使命,经由过程网站注入并猎取暗码,更绝的是它另有视频录制和长途VNC功用。自2014年Gootkit被发明以来,Gootkit背地的开辟者一直在不断更新代码库,以减缓平安职员的剖析并阻挠自动沙箱的搜检。

本文研讨的样本是MD5: 0b50ae28e1c6945d23f59dd2e17b5632

运转设置

在议论持久性和C2通讯例程之前,让我们先看一下装备设置及其存储体式格局。

你能够在前一篇文章中引见的反剖析机制中,检察第一次在示例中提到的设置。疾速阅读一下个中的代码,你能够会以为Gootkit正在解密样本运用的一些shellcode。但经由过程在调试器中运转该代码,则显现了差别的运转效果。实在解密顺序相称简朴,就是一个基于imul和idiv盘算的带辨别键的基础XOR轮回。基础键值为0x22,在每次迭代中,idiv和imul值都是常量,分别是0x85和0x03,这个解密例程的Python剧本以下图所示。

在手动解密数据以后,我们能够很容易地分辨出这现实上是Gootkit用于检索下一阶段的设置:

me.sunballast.fr koohy.top 2700 svchost.exe

每一个值都被多个空字节支解,这意味着险些一切的设置都是空字节。前两个值显然是url,末了一个值是downloader能够注入的历程的称号。末了两个值也被设置为环境变量,特别是vendor_id和mainprocessoverride。vendor_id变量的值为exe_scheduler_2700, mainprocessoverride的值为svchost.exe。除了setup以外,这些变量不会鄙人载加载顺序中运用,因而能够假设在末了阶段运用了这些变量。一旦建立了环境变量并分配了值,就会启动四个主要的线程:C2检索线程、阅读器注入线程、持久性线程和Kill Switch线程。如今,让我们从持久性线程最先讲。

持久性进击才能

在本文的Gootkit示例中,有两个持久性选项可用。起首,有经由过程建立效劳完成持久性的常常使用要领。在本例中,Gootkit将依据System32中的文件名运用Mersenne Twister算法天生一个随机文件名,然后继承在%SystemRoot%\中建立同名文件。Mersenne Twister算法译为马特赛特扭转演算法,是伪随机数发作器之一,其主要作用是天生伪随机数。此算法是Makoto Matsumoto (松本)和Takuji Nishimura (西村)于1997年开辟的,基于有限二进制字段上的矩阵线性再生。能够疾速发作高质量的伪随机数,修改了陈旧随机数发作算法的许多缺点。在测试这个函数以后,会建立了一个名为msfearch.exe的文件。然后以雷同的称号建立效劳,再实行。末了,原始可实行文件经由过程从磁盘中举行自我删除并退出来清算实行陈迹,从而让建立的效劳坚持继承运转。

第二个持久性例程更风趣,之前也常常议论过。这个例程最常常使用于Gootkit感染,理论上来讲,建立该效劳须要治理员权限,但现实并非如此。

起首建立一个简朴的.inf文件,该文件与正在运转的可实行文件同名,并放在统一目次中。该文件的内容以下所示:

然后,该示例将建立一个位于以下位置的注册表项:

Software\Microsoft\IEAK\GroupPolicy\PendingGPOs

然后在这个表项中建立三个值:Count、Path1和Section1。Count被赋值为0x1, Path1被赋值为INF文件的途径,Section1被赋值为字符串[DefaultInstall],它也存在于INF文件中。explorer.exe将在每次加载组策略对象(GPO)时加载该函数,特别是在运转时。Gootkit所做的是为Internet Explorer治理工具包(IEAK)建立一个挂起的GPO,它直接指向INF文件。当explorer.exe在加载时,它将在建立的文件中实行[DefaultInstall],该文件将实行Gootkit可实行文件。

加载顺序更新线程

在引见了持久性线程以后,让我们继承剖析C2吸收线程。由于敕令和掌握效劳器离线速率异常快,这一点特别难以剖析,因而乍一看,好像是线程担任下载末了一个阶段并不断更新它,但随着深入研讨,这类推断被证实是不正确的。

该函数并非异常复杂,简朴地说,就是Gootkit将搜检变量是不是设置为0或1,假如设置为1,它将退出线程,这个变量只在Kill Switch函数中被激活。

接着,示例将/rpersist4/-1531849038附加到URL,个中-1531849038是二进制的CRC32哈希。然后,依据体系结构,将把rbody32或rbody64将被附加到URL中。

提取字符串要领在歹意软件剖析中的运用

目前逆向工程师、安全分析人员和事件响应人员在分析恶意软件二进制文件时,已经拥有了大量成熟的工具。在进行恶意软件分析时,为了逐步收集有关二进制文件功能的线索,设计对应的检测方法,并确定最终的环境措施,他们会相继应用这些工具。最常用的初始步骤便是通过字符串程序检查它的可打印字符。如果二进制文件执行诸如打印错误消息、连接到URL、创建注册表项或将文件复制到特定位置等操作,那么它通常会包含一些有助于未来分析的字符串。 注

此时将发作现实的衔接,风趣的是,另有两种通讯体式格局:能够经由过程诸如InternetOpenW之类的WinInet函数举行通讯,也能够经由过程诸如WinHttpOpen之类的WinHTTP函数举行通讯,但我还没有看到它挪用WinHTTP函数。

在接见C2之前,Gootkit将起首添加到GET要求的标头中。这些新增内容以下:

X-File-Name:            Filename
X-User-Name:            Username
X-ComputerName:         Computername
X-OSVersion:            6.1.7601|Service Pack 1 1.0|1|0x00000100
X-VendorId:             2700
X-IsTrustedComputer:    1
X-HTTP-Agent:           WININET
X-Proxy-Present:        False
X-Proxy-Used:           False
X-Proxy-AutoDetect:     False

假如设置了crackmeololo环境变量,则X-IsTrustedComputer仅设置为1,不然设置为0,这能够看做是另一种反剖析、反沙箱、反vm机制。

假如示例和C2之间的衔接失利,它将尝试衔接到设置中发明的其他C2s。假如衔接胜利而且效劳器返回可实行文件,Gootkit将在暂时目次中建立一个随机定名的文件,并运用CreateProcessW运用–reinstall参数实行它。因而,我们完全能够把这个线程理解为一个“更新顺序”线程,它将不断地搜检所要衔接的C2效劳器,守候加载器的任何更新。

如今已引见了这个函数,在继承引见阅读器注入函数之前,让我们简要地引见一下Kill Switch函数。

Kill Switch函数

只有当uqjckeguhl.tmp位于..\¬AppData\Local\¬Temp\ 或..\¬Local Settings\¬Temp\才会触发Kill Switch线程,假如文件存在,那末Gootkit会自行清算,它将停止一切正在运转的线程,并重新启动盘算机。现在还不是很清晰为何要装备如许一个功用, 我们猜测能够是由于在实行Kill Switch线程之前建立了持久性,因而只需重新启动盘算机就会终究再次实行加载顺序,然则,假如在受感染的情况下发出并安装了加载顺序更新体系,致使重新启动能够有助于防备多个实例马上运转。

末了,引见一下阅读器注入功用。

阅读器注入

阅读器注入函数异常风趣,由于它担任两个使命:运用——vwxyz参数实行,并向运转中的阅读器注入两个DLL。本文,我们将专注于对第二个使命举行引见。

为了将DLL注入到阅读器中,必需要有一个DLL驻留。现实上,二进制文件中存储了2个加密的DLL,一个x86 DLL和一个x64 DLL,它们用简朴的XOR解密。风趣的是,其他变体中好像也有能够存在占位符,由于本示例在两个DLL中都搜检0x11223344和0x55667788,以便分别用0x12和0x13替代值。

在两个可实行文件都已解密的情况下,Gootkit会将以下注册表项的值更改成0x3:

Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\2500
Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1\2500
Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2\2500
Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\2500
Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\2500
Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\5\2500

这会致使为正在运用的每一个平安地区禁用Internet Explorer保护模式,在此基础上,Gootkit将继承扫描一切正在运转的历程,直到找到一个正在运转的阅读器。为此,它将导入并挪用NtQuerySystemInformation(),要求体系历程信息。以后,将返回正在运转的历程列表。运用这个列表,Gootkit将翻开每一个历程,运用IsWow64Process()搜检历程架构,然后用CRC-32哈希(大写)历程称号。然后将这个哈希传递给一个担任检测和注入的函数。下面列出了目的阅读器及其响应的哈希值列表:

Microsoft EdgeCP:     0x2993125A
Internet Explorer:    0x922DF04
Firefox:              0x662D9D39
Chrome:               0xC84F40F0
Opera:                0x3D75A3FF
Safari:               0xDCFC6E80 
Unknown:              0xEB71057E

实在,Gootkit所运用的注入手艺并没有什么特别之处。本文的示例挪用了NtCreateSection,然后运用NtMapViewOfSection将该部份映射到阅读器中。不管体系结构怎样,这两个dll好像都被映射到内存中。一旦文件被注入,函数将返回历程搜刮函数,直到检测到另一个正在运转的阅读器。

x86 DLL的MD5:57e2f2b611d400c7e26a15d52e63fd7f
x64 DLL的MD5:7e9f9b2d12e55177fa790792c824739a

疾速阅读一下注入的DLL, 它们好像包含了一些挂钩函数,好像挂钩了CertVerifyCertificateChainPolicy和CertGetCertificateChain,以及能够充任某种情势的代办来阻拦要求并依据来自C2效劳器或NODE.JS有效载荷的信息重定向它们。

在本文的示例中,运用Gootkit感染虚拟机并尝试运用Internet Explorer阅读互联网是不胜利的,好像是代办阻挠了衔接,不过这须要进一步剖析。

鄙人一篇文章中,我们将检察运用–vwxyz参数挪用Gootkit时发作了什么,然后疾速检察从敕令和掌握效劳器检索到的终究NODE.JS有效载荷。

原文地点: https://www.4hou.com/malware/20115.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明对GOOTKIT木马的持久性进击和其他歹意功用的探究
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址