这是作者新开的一个专栏,主要翻译国外知名的安全厂商APT报告文章,了解它们的安全技术,学习它们溯源APT组织的方法,希望对您有所帮助。前文分享了APT组织Fin7 / Carbanak的Tirion恶意软件,包括OpBlueRaven行动。这篇文章将介绍一种新型无文件APT攻击Kraken,它会利用Windows错误报告服务逃避检测。其中,DllMain函数反分析检查,以确保它不在分析/沙箱环境或调试器中运行非常值得我们学习。

Malwarebytes研究人员发现了一种名为Kraken的新攻击,该攻击利用Windows错误报告(WER)服务以逃避检测。攻击始于一个包含“Compensation manual.doc”的ZIP文件。该文档包含一个恶意宏,该宏使用CactusTorch VBA模块的修改版,通过使用VBScript将.Net编译的二进制文件加载到内存中来执行,以进行无文件攻击。该二进制文件通过将嵌入式Shellcode注入Windows错误报告服务(WerFault.exe)来推进了感染链,此策略用于尝试逃避检测。

  • 原文标题:Release the Kraken: Fileless APT attack abuses Windows Error Reporting service
  • 原文链接:https://blog.malwarebytes.com/malwarebytes-news/2020/10/kraken-attack-abuses-wer-service/
  • 文章作者: Hossein Jazi and Jérôme Segura
  • 发布时间:2020年10月6日
  • 文章来源:Malwarebytes Threat Intelligence Team

文章目录

  • 恶意诱饵:“您的赔偿”
  • Kraken Loader
  • ShellCode分析
  • 最终的Shellcode
  • 究竟是哪个APT组织的攻击呢?

2020年9月17日,我们发现了一种名为Kraken的新攻击,该攻击将其有效载荷注入到Windows错误报告(Windows Error Reporting,WER)服务中,作为一种防御规避机制。

这个报告服务是WerFault.exe,通常发生在与操作系统、Windows函数或应用程序相关的错误时调用。当受害者看到他们的计算机上运行WerFault.exe时,他们可能认为发生了一些错误,而在这种情况下,他们实际上已成为攻击的目标。

尽管这项技术不是什么新技术,但这次行动很可能是一个APT组织发动的,该组织先前曾使用网络钓鱼攻击,诱使受害者提出工人赔偿要求。威胁攻击者入侵了一个网站以托管其有效载荷,然后使用CactusTorch框架执行无文件攻击(fileless attack),随后采用多种反分析技术(anti-analysis )。

在撰写本文时,尽管有一些因素让我们认为其是越南APT32组织,但目前仍然不能明确指出这次攻击的幕后发动者。

WerFault.exe是一个Windows系统自带的程序,用于错误报告显示。在应用程序崩溃时,它仍然会执行未处理的异常处理程序,但是该处理程序会向WER服务发送消息,并且服务会启动WER错误报告进程以显示错误报告对话框。

  • %Systemroot%\System32\Werfault.exe

恶意诱饵:“您的赔偿”

9月17日,我们发现了一种新型攻击,该攻击从一个包含恶意文档的zip文件开始,该文档很可能是通过鱼叉式网络钓鱼攻击传播的。文档名叫“薪酬手册”(Compensation manual.doc),伪装成包含有关工人补偿权利的信息,恶意文档如下图所示。

该文件包含一个图像标签(“ INCLDEPICTURE ”),该图像标签连接到如下网址,然后下载一张图片作为文档模板。

  • yourrighttocompensation[.]com

下图为嵌入在文档中的图片标签(Image tag)及对应的“您的补偿”网站。

该域名于2020年6月5日注册,而文档创建时间为2020年6月12日,这很可能表明它们属于同一攻击。在其内部,我们看到一个恶意宏,该宏使用CactusTorch VBA模块的修改版来执行其Shellcode。CactusTorch正在利用DotNetToJscript技术将.Net编译的二进制文件加载到内存中,并从vbscript中执行。

下图显示了该威胁攻击者所使用的宏内容。它具有自动打开和自动关闭功能。AutoOpen只是显示一条错误消息,而AutoClose是执行函数的主体。

如上图所示,已经定义了一个十六进制格式的序列化对象,它包含一个正在加载到内存中的.Net有效负载(Payload)。然后,宏使用“ Kraken.Kraken”作为值定义了一个入口类。这个值有两个部分,用一个点分隔.net加载器的名称和它目标类的名称。

在下一步中,它将创建一个序列化的BinaryFormatter对象,并使用BinaryFormatter的deseralize函数反序列化该对象。最后,通过调用DynamicInvoke函数,从内存中加载并执行.Net有效负载(Payload)。

与CactusTorch VBA不同,它指定了目标进程在宏中注入Payload,该元素更改了宏并在.Net有效负载中指定目标进程。


Kraken Loader

加载的Payload是一个名叫“ Kraken.dll”的.Net DLL,该文件编译于2020年06月12日。

这个DLL是一个加载器,它将嵌入的shellcode注入到WerFault.exe中。需要说明的是,这并不是此类技术的第一个例子。以前在使用NetWire RAT和Cerber勒索软件时就观察到了这种情况。下图展示了Kraken.dll,加载器包括两个主要的类:

  • Kraken
  • Loader

(1) Kraken类
Kraken类包含了shellcode,这些代码将被注入到这个类中定义为“WerFault.exe”的目标进程中。它只有一个函数调用Loader类的Load函数,其shellcode和目标进程作为参数。

  • loader.load(targetProcess, shellcode)

(2) Loader类
Loader类负责通过调用Windows API将shell代码注入到目标进程中。下图展示了load函数。

下面是它执行注入过程的步骤:

  • StartProcess函数调用CreateProcess Windows API,使用800000C作为dwCreateFlags
  • FindEntry调用ZwQueryInformationProcess来定位目标进程的基址
  • CreateSection调用ZwCreateSection API来在目标进程中创建一个节(section)
  • 调用ZwMapViewOfSection将该节绑定到目标进程,以便通过调用CopyShellcode来复制shellcode
  • MapAndStart通过调用WriteProcessMemory和ResumeThread完成过程注入

ShellCode分析

使用HollowHunter,我们将注入的shellcode转储到WerFault.exe中,以便进行进一步分析。这个DLL在多个线程中执行其恶意活动,使其分析更加困难。这个DLL通过调用“Main”函数来执行“DllEntryPoint”。

主函数调用DllMain来创建一个线程,在同一进程上下文中的新线程中执行它的函数。

DllMain函数如上图所示,创建的线程首先执行一些反分析检查,以确保它不在分析/沙箱环境或调试器中运行,它通过以下操作来实现的。

(1) 通过调用GetTickCount来检查调试器的存在
GetTickCount是一种计时函数,用于度量执行某些指令集所需要的时间。在此线程中,它在睡眠(Sleep)指令之前和之后被调用两次,然后计算差值。如果不等于2,则程序退出,因为标识着它正在被调试。创建线程代码如下图所示。

(2) VM检测
在此函数中,它将通过提取显示驱动程序注册表项的提供程序名称来检查其是否在VMWare或VirtualBox中运行。

  • SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000

然后检查它是否包含字符串VMware或Oracle。

(3) IsProcessorFeaturePresent
此API调用用于确定是否支持指定的处理器特性。从下图可以看出,“ 0x17”已作为参数传递给此API,这意味着它在立即终止之前检查剩余的__fastfail支持。

(4) NtGlobalFlag
shellcode代码检查PEB结构中的NtGlobalFlag来确定它是否正在被调试。为了识别调试器,它将NtGlobalFlag值与0x70进行比较。

(5) IsDebuggerPresent
通过调用“IsDebuggerPresent”来检查调试器是否存在。下图展示了 NtGlobalFlag 和 IsDebuggerPresent 检查。

在执行所有这些反分析检查之后,它进入一个函数,在一个新线程中创建最终的shellcode。通过调用“ Resolve_Imports”函数,可以动态混淆并解析在此部分中使用的导入调用。此函数使用LoadLibraryEx获取“kernel32.dll”的地址,然后在循环中检索12个导入。

使用libpeconv库,我们能够获得已解析的API调用表。下面是导入表,我们可以预期它将执行一些进程注入。

  • VirtualAlloc
  • VirtualProtect
  • CreateThread
  • VirtualAllocEx
  • VirtualProtectEx
  • WriteProcessMemory
  • GetEnvironmentVariableW
  • CreateProcessW
  • CreateRemoteThread
  • GetThreadContext
  • SetThreadContext
  • ResumeThread

在解析了所需的API调用之后,它使用VirtualAlloc创建一个内存区域,然后调用下面的函数来解密最终shellcode的内容,并将它们写入创建的内存中。

  • DecryptContent_And_WriteToAllocatedMemory

在下一个步骤中,将调用VirtualProtect来更改对已分配内存的保护以使其可执行。最后,CreateThread被调用来在一个新线程中执行最后的shellcode。


最终的Shellcode

最终的shellcode是一组指令,这些指令向硬编码域发出HTTP请求,以下载恶意有效负载并将其注入到进程中。

第一步,它通过调用LoadLibraryA加载Wininet API。

第二步,构建函数调用列表所需的HTTP请求,包括InternetOpenA、InternetConnectA、InternetOpenRequestA和InternetSetOptionsExA。其中,HttpOpenRequestA如下图所示。

第三步,在准备好构建HTTP请求的需求之后,它将创建一个HTTP请求,并通过调用HttpSendrequestExA发送该请求。请求的网址是:

  • http://www.asikotoba [.]net/favicon32.ico

在下一步中,它将检查HTTP请求是否成功。如果HTTP请求不成功,它将调用ExitProcess停止其进程。

如果HTTPSendRequestExA的返回值为true,则表示请求成功,并且代码继续执行下一步。在此步骤中,它调用VirtualAllocExA分配内存区域,然后调用InternetReadFile读取数据并将其写入分配的内存。InternetReadFile调用如下图所示。

最后,它跳转到已分配内存的开头以执行它。这很有可能是另一个受感染的“asia-kotoba.net”网站上托管的shellcode,并在其中植入了伪造的图标。由于在报告时目标URL已关闭,因此我们无法检索此Shellcode进行进一步分析。


究竟是哪个APT组织的攻击呢?

我们没有足够的证据来确定这次攻击的原因。但是,我们发现其与APT32的松散联系,并且仍在调查中。

  • APT32是已知使用CactusTorch HTA来删除Denis Rat变中的攻击组织之一。然而,由于我们无法获得最终的有效负载(Payload),因此我们不能肯定地将这种攻击归因于APT32。
  • 用于托管恶意档案和文档的域在越南胡志明市注册。APT32使用了战略性网络妥协方案来锁定受害者,感觉像是越南的。

Malwarebytes阻止访问托管有效负载的受感染站点:

最后给出IOCs:

诱饵文件:
31368f805417eb7c7c905d0ed729eb1bb0fea33f6e358f7a11988a0d2366e942包含诱饵文件的文档:
d68f21564567926288b49812f1a89b8cd9ed0a3dbf9f670dbe65713d890ad1f4文档模板图片:
yourrighttocompensation[.]com/ping存档文件下载URL:
yourrighttocompensation[.]com/?rid=UNfxeHM
yourrighttocompensation[.]com/download/?key=
15a50bfe99cfe29da475bac45fd16c50c60c85bff6b06e530cc91db5c710ac30&id=0
yourrighttocompensation[.]com/?rid=n6XThxD
yourrighttocompensation[.]com/?rid=AuCllLU下载URL的最终Payload:
asia-kotoba[.]net/favicon32.ico

最后希望这篇文章对您有所帮助,感觉反分析和沙箱逃逸部分知识挺有意思的,后续不忙可以尝试复现相关的功能。中秋节和国庆节结束,虽然一直在忙,大家接着加油。某人照顾好自己喔!

前文分享:

  • [译] APT分析报告:01.Linux系统下针对性的APT攻击概述
  • [译] APT分析报告:02.钓鱼邮件网址混淆URL逃避检测
  • [译] APT分析报告:03.OpBlueRaven揭露APT组织Fin7/Carbanak(上)Tirion恶意软件
  • [译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、逆向分析、APT分析报告、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

(By:Eastmount 2020-10-08 星期四 晚上11点写于武汉 http://blog.csdn.net/eastmount/ )

[译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测相关推荐

  1. 无文件恶意软件攻击是什么意思?

    相信很多人第一次听到无文件恶意软件攻击就会产生这样的疑惑:没有文件如何攻击呢?其实,无文件攻击并不是没有文件,它属于一种隐蔽性极高的攻击手法,那么无文件恶意软件攻击是什么意思?本文为大家详细介绍一下. ...

  2. WORD文档打开文件时老提示发送错误报告,或者打印不全

    一.发送错误报告: 一般出现这个问题,都有可能WORD模板出错了,删除NORMAL.dot 文件就行,在XP下的位置一般为: C:/Documents and Settings/(你的登录名)/App ...

  3. 渗透测试之无文件渗透简单使用-windows

    无文件渗透测试工作原理:无文件恶意程序最初是由卡巴斯基在2014年发现的,一直不算是什么主流的攻击方式,直到此次事件的发生.说起来无文件恶意程序并不会为了执行而将文件或文件夹复制到硬盘上,反而是将pa ...

  4. [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)

    这是作者新开的一个专栏,主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助.当然,由于作者英语有限,会借助机翻进行校验,还请包涵! ...

  5. [译] APT分析报告:10.Lazarus以ThreatNeedle家族攻击工业事件还原(BMP图片隐藏RAT)

    这是作者新开的一个专栏,主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助.当然,由于作者英语有限,会借助机翻进行校验,还请包涵!前 ...

  6. [译] APT分析报告:09.伊朗APT34更新武器库——SideTwist变体

    这是作者新开的一个专栏,主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助.当然,由于作者英语有限,会借助机翻进行校验,还请包涵!前 ...

  7. [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞

    这是作者新开的一个专栏,主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助.当然,由于作者英语有限,会借助机翻进行校验,还请包涵!前 ...

  8. 无文件攻击与病毒样本分析-1-1-1-无文件攻击介绍

    目录 无文件攻击与病毒样本分析-0-1-1-目录_千里ZLP的博客-CSDN博客https://wittpeng.blog.csdn.net/article/details/124712530?spm ...

  9. Android日志[进阶篇]五-阅读错误报告

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

最新文章

  1. 15-07-08 数组-- 手机号抽奖、福利彩票随机生成
  2. 指针数组 与 数组指针 的分析
  3. 微信小程序 倒计时实现
  4. JAVA刷TNT_Java Blocks.tnt方法代码示例
  5. UVALive 3942 Remember the Word(字典树+DP)
  6. 教你3行代码坑崩系统(哈哈哈哈)
  7. MYSQL 获取每个汉字的拼音首字母
  8. 面试了8家公司,他们问了我这些机器学习题目……
  9. 高效数据序列化的工具 FlatBuffers 的初体验
  10. CV Code|计算机视觉开源周报20200502期
  11. 使用try-with-resources优雅的关闭IO流
  12. 关于电力系统标准规约的一些理解
  13. win98模拟器_安利一款安卓win98模拟小游戏
  14. LibEvent中文帮助文档--第1、2、3、4章
  15. 16位图xxxxxxxxxxxx
  16. vs2019安装和使用教程(详细)
  17. fid和is_fid解释
  18. 怎么删除拨号连接,取消掉宽带拨号?
  19. docker编配和服务发现
  20. 博客园博客排版(js样式实例)

热门文章

  1. 如何在线创建索引或者重构索引
  2. VS2017 下载离线MSDN文档
  3. 题解报告:hdu 1257 最少拦截系统(贪心)
  4. 每天CookBook之JavaScript-072
  5. input.touch拖动物体
  6. [转]PHP程序61条面向对象分析设计的经验原则
  7. C语言简单题-求整数段和
  8. c语言发牌思路,C语言发牌机程序求详细解析
  9. java 安卓 html_java – Android的HtmlUnit替代品?
  10. 子页面赋值给父页面:window.opener.document.getElementById