标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-1976] 作者: 对不起 发表于: [2018-09-26]
本文共 [471] 位读者顶过
FortiGuard Labs研究团队最近捕获了一个恶意软件样本,一个EXE文件,该文件由一个无效的证书签名。一旦受害者打了EXE文件,它就会安装两个驱动程序来控制受害者的Windows系统,并监视受害者Web浏览器的网络活动。 [出自:jiwo.org] 在这篇文章中,我将详细介绍该恶意软件是如何将驱动程序安装到受害者的系统上的、驱动程序如何工作,以及恶意软件会做些什么。 执行恶意软件样本被FortiGuard Labs捕获的样本的文件名是“itranslator_02.exe”。在实际攻击活动中,该恶意软件还拥有多个不同的名称,包括“itransppa.exe”,“itranslator20041_se.exe”,“Setup.exe”和“itransVes.exe”。该文件是由一个早在2015年5月16日就已经到期的数字证书签名的,而这个证书是由“北京********科技有限公司”(我在这里对该公司的名称进行了遮盖处理)颁发的,序列号为“0A 00 5D 2E 2B CD 41 37 16 82 17 D8 C7 27 74 7C”。图1展示了该样本的数字证书信息。
图1.恶意软件使用的过期证书 当“itranslator_02.exe”运行时,它会在program-data文件夹中创建一个名为“itranslator”的新文件夹(在我的测试环境中,它是“C:\ProgramData”)。然后,它会将一个名为“wintrans.exe”的新文件提取到此文件夹中。在使用命令参数“P002”启动“wintrans.exe”之后,“itranslator_02.exe”的任务也就完成了。命令行字符串是“C:\ProgramData\itranslator\wintrans.exe P002”。此恶意软件将“P002”作为“GUID”,并在整个恶意软件活动中使用它来与C&C服务器进行通信。 安装驱动程序组件接下来,名为“wintrans.exe”的可执行文件会通过下载并在受害者的Windows系统中安装其他恶意组件来接管“itranslator_02.exe”的工作。它首先会在受害者的系统中安装一个驱动程序。下面就让我们来看看它是如何做到的。
图2.创建驱动程序服务“iTranslatorSvc” 它创建了一个线程来完成以下工作:调用两个Windows系统API来创建一个驱动程序服务,即“OpenSCManagerA”和“CreateServiceA”。驱动程序的名称为“iTranslatorSvc”,它是API调用“CreateServiceA”的参数。 顺便说一下,调用“CreateServiceA”API会为这个新的驱动程序服务创建一个注册表项。对于这个样本而言,创建的子项是“HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc”。 这个新创建的驱动程序的Start类型先是被设置为2,转换为“AUTO_START”,稍后会被修改为1, 代表“SYSTEM_START”。这使得它能够在系统启动时加载。图2展示了IDA pro中的汇编代码片段,使你可以更直观地看到驱动程序是如何创建的。 接下来,“wintrans.exe”会将一个名为“iTranslator”的文件提取到Windows目录(在我的测试环境中,它是“C:\Windows\”)。提取的文件嵌入在“wintrans.exe”的资源部分中,该资源名为“BIN”。图3展示了如何提取文件的伪代码。
图3.从资源中提取文件“iTranslator” 正如你可能已经猜到的那样,文件“iTranslator”也是一个Windows驱动程序文件,在调用它以创建“iTranslatorSvc”时,其完整路径已提供给了API“CreateServiceA”。 “iTranslator”文件受VMProtect打包程序保护。该文件也由一个无效的证书签名的(已于2015年5月12日到期),签名者为“南京*********科技有限公司”,序列号为“73 dc b1 a0 35 15 bb 63 9b f3 1e cd 5f 98 ff 24”。在图4中,你可以在PE工具中看到“iTranslator”的文件属性及其打包程序信息。
图4. iTranslator属性及其打包程序信息 接下来,恶意软件将使用值“P002”来创建“GUID”的值,并使用从受害者的硬件信息生成的一个十六进制的值来创建“MachineCode”的值,这些值都保存在注册表子项 “HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc” 下。图5是一张注册表编辑器的屏幕截图。
图5.注册表中的iTranslatorSvc表项 在这之后,恶意软件将继续调用API“StartServiceA”来让恶意驱动程序立即运行。为了更加清楚地解释驱动程序是如何在受害者计算机上运行的,接下来我将在操作系统启动期间分析它,这是加载驱动程序的常规方法。 下载其他组件在安装完成之后,它将尝试下载一个在线程(thread)函数中的DLL模块。HTTP请求和响应如图6所示:
图6.下载dll文件 在URI中,“uid=”是设备代码“v=”是恶意软件当前版本(这里是“1.0.0”),“x=”是受害者的Windows平台(32位或64位)。在标头中,“UID: P002”是恶意软件的GUID。在响应数据包中,恶意软件使用最新版本及其下载链接进行响应。对于这个样本而言,最新版本是1.0.7,下载链接为“hxxp://gl.immereeako.info/files/upgrade/32/iTranslator.dll”。(在我对此恶意软件的分析过程中,最新版本已更新至1.0.8,其下载链接已更改为“hxxp://dl.shalleeatt.info/ufiles/32x/iTranslator.dll”)。 然后,它将下载dll文件并将其保存到位于“C:\ProgramData\itranslator\”下的“wintrans.exe”所在的文件夹中。根据我的分析,这个下载的“iTranslator.dll” 文件可能是该恶意软件的主模块。以下是它所执行任务的部分列表:
有意思的是,这个被下载的DLL,不仅仅是一个文件,而且还是一个文件容器。因为,它的资源部分包含了许多其他文件,这些文件稍后将会被提取到受害者的本地文件夹中。这个被下载的“iTranslator.dll”可以在首次安装时在“wintrans.exe”中加载和执行,也可以在Windows系统启动期间由驱动程序“iTranslatorSvc”加载时在“winlogon.exe”中加载和执行。我将在下面的驱动程序启动部分详细地解释它是如何工作的。 另外,它还会在“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion”下的系统注册表中记录最新版本,其中的值“iVersion”就是最新版本。在撰写本文时,它是1.0.8。 通知攻击者恶意软件已安装“wintrans.exe”的最后一项工作是将受害者的系统信息发送到攻击者的服务器。它发出的数据包如下所示:
URL中的“ch=”和标头中的“UID”是GUID“P002”。URL中的“mc=”和标头中的“MC”是受害者系统的设备代码。“os=”是受害者的操作系统版本。“t=”是当前的Windows安装日期,取自系统注册表。它使用Unix时间,这是自1970年1月1日以来的总秒数。“m=”是受害者的网络MAC地址。 我使用“*”号隐藏了原始数据包中所包含的敏感数据。这个数据包用于向攻击者报告恶意软件的安装已经在Windows系统上完成。 恶意驱动程序在Windows启动期间加载从这一章节开始,我将解释一旦驱动程序“iTranslatorSvc”在受害者的Windows启动期间启动,恶意软件会做些什么。 恶意驱动程序文件位于“C:\Windows\iTranslator”中。它受VMProtect v.2.07打包程序的保护,并具有多个导出函数,如图7所示。
图7.驱动程序iTranslatorSvc的导出函数 驱动程序由“nt!IopLoadDriver”加载。在执行了VMProtect打包程序的代码之后,我们可以看到由打包代码恢复的驱动程序的实际DriverEntry函数。 它首先从系统注册表中读取“GUID”和“MachineCode”,将它们保存到全局变量中,并将键值“Start”设置为1,代表“SYSTEM_START”。接下来,它将会驱动程序创建一个设备对象“\\Device\\iTranslatorCtrl”和一个符号链接“\\DosDevices\\iTranlatorCtrl”,以便在ring 3上运行的软件可以通过“\\\\.\\iTranslatorCtrl”访问驱动程序。然后,它会设置一些调度函数,就像其他驱动程序一样。在IRP_MJ_DEVICE_CONTROL调度函数中,它仅从全局变量返回“GUID”和“MachineCode”的值。 在系统线程中设置回调函数最后,它通过调用API“nt!PsCreateSystemThread”来创建一个系统线程。线程函数仍受VMProtect打包程序的保护。下面的图8展示了受VMProtect打包程序保护的系统线程函数的代码片段。顺便说一下,这个驱动程序中的所有API调用都受打包保护,就像在图8中所示的代码一样。
图8.受VMProtect保护的代码片段 当系统线程启动时,它会从内存中提取文件。该文件的完整路径是“C:\Windows\System32\iTranslator.dll”。然后调用API“nt!PsSetLoadImageNotifyRoutine “设置一个映像加载回调函数。MSDN将此API描述为:“ PsSetLoadImageNotifyRoutine例程注册一个驱动程序提供的回调,当映像被加载时(或映射到内存)时,这个回调随后会被通知。”这意味着每当一个映像(例如EXE文件)开始加载时,映像将被挂起,驱动程序中的回调函数将被另一个API调用,即“nt!PsCallImageNotifyRoutines”。此时,驱动程序“iTranslatorSvc”可以读取并修改映像的整个流程信息,以影响流程的工作流。 让我们回到驱动程序中的这个回调函数,看看它的任务是什么。当它被调用时,它会检查进程名称是否为“winlogon.exe”。如果是,驱动程序会找出这个进程的映射内存。然后,它会在内存中重新构建导入目录表(Import Directory Table)数据,并将恶意DLL“C:\Windows\System32\iTranslator.dll”添加到导入目录表的末尾。导入目录表还包含进程运行所需的一些模块数据(如Kernel32.dll和User32.dll)。导入目录表中每个模块的数据占用了14H的字节。 图9是重新构建的导入目录表的屏幕截图。它需要修改PE数据目录表中的导入表项偏移量,以启用重新构建的导入目录表。之后,一旦“winlogon.exe”恢复运行,它就会像加载其他正常的DLL一样加载这个恶意DLL。
图9.重新构建的导入目录表 为什么要使用“winlogon.exe”呢?它是一个属于Windows登录管理器的进程,用于处理Windows系统上的登录和注销。如果它被杀死,你将从系统中注销。换句话说,这个进程将一直运行,直到Windows系统关闭。 恶意软件还将继续设置另一个映像加载回调函数。根据我的分析,它被用于检查映像是否是一个特定的浏览器,如“iexplore.exe”、“firefox.exe”或“chrome.exe”。如果匹配,驱动程序则会找到相关的进程信息块,并将“hxxp://go.microsoft.com/?69157”添加到其命令行。这样做是为了在浏览器打开时,首先访问“hxxp://go.microsoft.com/?69157”。图10是IE启动时的屏幕截图,其命令行被附加了URL“hxxp://go.microsoft.com/?69157”。
图10. IE以URL“hxxp://go.microsoft.com/?69157”打开 实际上,URL并没有真正地从受害者的浏览器访问,而是像一个switch flag一样工作。稍后,恶意软件将提取并加载另一个驱动程序来监视受害者的网络活动。然后它将请求中断为“hxxp://go.microsoft.com/?69157”,并执行不同的工作。稍后我将在这篇文章的后面部分讨论这个问题。 此外,它还会通过调用API“ nt! CmRegisterCallback ”在系统线程函数中设置RegistryCallback函数,该API用于过滤驱动程序级别的注册表调用。根据我的分析,这个回调函数针对的是Microsoft Edge浏览器。 驱动程序“iTranslatorSvc”还会保护其系统注册表中的子项不被访问,即“HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc”。当我们使用注册表编辑器访问此子项时,它会弹出一个错误消息框,如图11所示。
图11.iTranslatorSvc子项受驱动程序保护 当“winlogon.exe”恢复运行时如上所述,当“winlogon.exe”恢复运行时,它会加载从驱动程序“iTranslatorSvc”中提取的库“C:\Windows\System32\iTranslator.dll”。它前面描述的一样,这个位于System32文件夹中的“iTranslator.dll”也受VMProtect v.2.07打包程序的保护。 通过我的分析,其主要目的是从“C:\ProgramData\itranslator”文件夹加载模块“itranslator.dll”,该文件夹由我之前提到的“wintrans.exe”下载。如果有新版本可用,它还将尝试从C&C服务器升级itranslator.dll,就像“wintrans.exe”一样。到目前为止,这个DLL文件的最新版本是1.0.8。 这里的文件命名规则可能会大家的阅读造成一定的困难。因为,有两个文件名相似的文件,一个是由驱动程序“iTranslatorSvc”提取的C:\Windows\System32\iTranslator.dll”,另一个是从C&C服务器下载的“C:\ProgramData\itranslator\itranslator.dll”。为了便于大家的区分,在本文的后面部分,我将“C:\Windows\System32\iTranslator.dll”描述为“extract-iTranslator.dll”,而将“C:\ProgramData\itranslator\itranslator.dll” 描述为“downloaded-itranslator.dl”。 “downloaded-itranslator.dll”是此恶意软件的主模块,可以在“wintrans.exe”和“winlogon.exe”中加载和运行。在“winlogon.exe”进程中,下载的itranslator.dll在内存地址0x10000000处手动加载。根据PE结构中定义的数据,它会纠正数据以使其准备好执行。最后,它会调用下载的itranslator.dll的入口函数。在执行了此操作之后,它的提取iTranslator.dll的工作也就完成了。 启动downloads-itranslator.dll它首先通过驱动程序“iTranslatorSvc”来获取“GUID”和“MachineCode”,并将它们保存到其全局变量中。在下一步中,它将创建一个线程,从C&C服务器执行C&C服务器URL的更新。顺便说一下,这个恶意软件有多个用于不同目的的C&C服务器。在“hxxp://ask.excedese.xyz/”上,包含了两个C&C服务器URL。图12展示了数据包的内容。
图12.更新C&C服务器URL 响应数据包包含两个JSON格式的新URL。它们分别是“immereeako.info”和“search.bulletiz.info”,保存为两个全局变量,用于将来与C&C服务器的通信。 就像我之前所说的那样,下载的itranslator.dll文件也是一个文件容器,其资源部分包含了许多其他文件。它们会被释放到不同的本地文件夹中。下表展示了从其资源部分提取的文件。
另外,它还会从其内存中提取文件“C:\Windows\SSL\Sample CA 2.cer”。 中间人攻击根据我的分析,所有提取的文件都可以被用于实施中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)。 文件“iNetfilterSvc”是另一个驱动程序,其名称为“NetfilterSvc”。它实际上是一个被称为“NetFilter SDK”的商业项目的实例,一个用于过滤Windows上通过网络传输的数据包的框架。提取的“Sample CA 2.cer”将作为受信任证书颁发机构颁发的根证书安装到Firefox和Windows系统中,用于IE和Chrome,这是隐秘地执行中间人攻击的必要条件。通过这种方式,所有受SSL保护的来自受害者浏览器的通信证书都将由“Sample CA 2.cer”签名的证书所替代。如此一来,浏览器就不会警告用户,因为“Sample CA 2.cer”位于受信任的根证书颁发机构列表中。 “C:\Windows\nss”中的所有文件都用于控制Firefox浏览器。文件“C:\Windows\nss\certutil.exe”用于将“Sample CA 2.cer”安装到Firefox中,如图13所示。
图13.“certutil.exe”安装Sample CA 2.cer 在图14中,你可以看到“Sample CA 2.cer”已安装到Mozilla Firefox和Microsoft IE的受信任根证书颁发机构列表中。
图14. Sample CA 2.cer被安装在Mozilla Firefox和Microsoft IE中 download-itranslator.dll模块的主要目的是提取驱动程序“iNetfilterSvc”并运行它(顺便说一下,文件“C:\Windows\iNetfilterSvc”会在加载之后立即被删除),然后安装“Sample CA 2.cer”,并与驱动程序”iTranslatorSvc“和”NetfilterSvc“建立联系。通过这种方式,恶意软件就能够监控受害者在所有主流浏览器上所进行的活动了。 它会继续创建驱动程序“NetfilterSvc”的一个设备句柄(使用“\\.\CtrlSMNetfilterSvc”)与其交换数据。然后,它将相关协议注册到“NetfilterSvc”,以便驱动程序可以在捕获注册协议上的数据时回调函数。有关Netfilter SDK如何工作的更多信息,请访问其官方网站。在图15中,你可以看到它在HTTP(端口80)和HTTPS(端口443)上注册的代码片段。
图15.将过滤的协议注册到NetfilterSvc
图16.协议回调函数中的代码片段 你还记得吗?例如,当受害者启动IE时,在驱动程序“iTranslatorSvc”中调用映像加载回调函数。然后,添加“hxxp://go.microsoft.com/?69157”到IE的命令行。IE发送一个HTTP请求数据包将会被驱动程序“NetfilterSvc”捕获。同时,downloaded-itranslator.dl中的协议回调函数会被调用。图16展示了一个回调函数中的代码片段。它会检查请求的URL是否为 “hxxp://go.microsoft.com/?69157”。如果是,它就会向其C&C服务器发送一个通知数据包,并告知一个浏览器已打开。 图17是在Fiddler中捕获的通知数据包。请求URL包含“P002”和“MachineCode”。C&C服务器将以“Location: hxxps://www.google.com”响应,最终被发送回IE,而 IE将向受害者显示Google的网站。请求URL“hxxp://go.microsoft.com/?69157”无法真正从受害者的系统发出。
图17.通知C&C服务器一个浏览器已打开 对于来自浏览器的其他请求,包括HTTP和HTTPS,通过中间人攻击,恶意软件可以修改数据包的内容。它在每个响应数据包的末尾插入一小段Javascript代码。此Javascript代码是在进程的早期生成的,包含C&C服务器URL和MachineCode。当浏览器收到响应时,插入的Javascript代码将在浏览器中执行,以执行更多的恶意操作。目前,Javascript代码仅被用于从其C&C服务器下载其他JS文件。图18是“hxxps://www.google.com”的经修改页面的源代码,其中包含在末尾插入的Javascript代码。
图18.插入到google [.]com响应中的Javascript代码 正如你可能已经注意到那样,当Javascript代码运行时,它会下载“hxxps://cdn.immereeako.info/pa.min.js”,以在受害者的浏览器中运行。 不幸的是,我的测试主机并没有安装Microsoft Edge浏览器,但我认为恶意软件对Microsoft Edge也是如此。 JavaScript分析当“hxxps://cdn.immereeako.info/pa.min.js”被加载到受害者的浏览器中时,它会向C&C服务器发送一个HTTP请求,如下所示:
你可能已经注意到,该请求包含了MachineCode和从受害者浏览器收集的数据,包括受害者访问的当前URL。在这里,它是“hxxps://www.facebook.com”。 URL中的“pacb_jlcmurby4cp95”是在“pa.min.js”中生成的一个随机命名的回调函数。它将由C&C服务器端用于将其发送回响应数据包。下面是一个响应数据包示例。
正文中以红色突出显示的部分是JavaScript代码,它使用对象参数调用函数pacb_jlcmurby4cp95。然后,在回调函数中处理参数,以在当前页面上添加一个鼠标单击事件(例如:hxxps://www.facebook.com)。当受害者在页面上触发了这个鼠标单击事件时,它会创建一个新选项卡并访问响应数据包中的URL。你会注意到它是“hxxp://www.onclickbright.com/jump/next.php?r=20*****&sub1=pa”(为了安全起见,我用“*”号隐藏了几个字节)。根据我的分析,访问这个URL可能会将广告网站推送给受害者。图19是一个推送到受害者浏览器(包括Microsoft IE和Google Chrome)的几个广告页面的屏幕截图。
图19.几个广告网站被推送给了受害者 感染流程图为了让大家更好地理解该恶意软件的整个感染流程,我制作了一个简要的流程图,如图20所示。
图20.简要的感染流程图 如何删除此恶意软件重启并进入安全模式,然后执行以下步骤:
IOCURLs: hxxp://s3.amazonaws.com/dl.itranslator.info/ hxxps://cdn.immereeako.info/pa.min.js hxxp://tk.immereeako.info/in.php hxxp://ask.excedese.xyz/i.php hxxp://gl.immereeako.info/files/upgrade/32/iTranslator.dll hxxp://dl.shalleeatt.info/ufiles/32x/iTranslator.dll 样本 SHA-256: itranslator_02.exe B73D436D7741F50D29764367CBECC4EE67412230FF0D66B7D1D0E4D26983824D wintrans.exe 67B45AE63C4E995D3B26FE7E61554AD1A1537EEEE09AAB9409D5894C74C87D03 iTranslator(驱动程序) E2BD952812DB5A6BBC330CC5C9438FC57637760066B9012FC06A8E591A1667F3 downloaded-itranslator.dll(ver 1.0.7) C4EDE5E84043AB1432319D74D7A0713225D276600220D0ED5AAEB0B4B7CE36CD downloaded-itranslator.dll(ver 1.0.8) 873825400FFF2B398ABF397F5A913A45FBD181654F20FBBE7665C239B7A2E8F5 |