网易首页 > 网易号 > 正文 申请入驻

BAZARLOADER的主加载程序分析

0
分享至

我会在本文介绍这个加载程序的最后进程,它能够下载和执行远程有效负载,例如CobaltStrike和Conti勒索软件。BazarLoader是基于Windows的恶意软件,主要通过电子邮件等方式传播。

与许多恶意软件类似,BAZARLOADER会手动检查系统的语言以避免在其母国开展恶意攻击。

它调用GetSystemDefaultLangID来检索系统的默认语言,并调用GetKeyboardLayoutList来遍历系统的键盘布局。

对于每一种语言,恶意软件都会使用位掩码检查其是否有效。

如果语言标识符大于0x43或小于0x18,则将其视为有效,这样BAZARLOADER才会继续执行。

如果它在0x18和0x43之间的范围内,语言标识符和0x18之间的差异被用作位掩码中要检查的位的索引。

BAZARLOADER使用的位掩码是0xD8080190C03,即二进制的11011000000010000000000110010000110000000011。如果语言ID为0x18,则检查位掩码中的第一位。如果语言ID为0x19,则检查第二位,依此类推……

以下是恶意软件避免的位掩码中所有语言的列表。

为了检查自身的多个运行实例,BAZARLOADER首先从其进程中提取SID的子权限。它通过调用GetTokenInformation来检索进程的令牌完整性级别并调用GetSidSubAuthorityCount和GetSidSubAuthority来访问SID的子权限来实现这一点。

如果SID的子权限是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER通过调用CreateMutexA检查互斥锁“{b837ef4f-10ee-4821-ac76-2331eb32a23f}”当前是否由任何其他进程拥有。

如果是,恶意软件会自行终止。但是,检查互斥对象是否存在的条件存在一个小错误,它假定它在实际成功时无法打开互斥对象。

此后,恶意软件解析字符串“{0caa6ebb-cf78-4b01-9b0b-51032c9120ce}”并尝试使用该名称创建互斥锁。

如果这个互斥对象已经存在,恶意软件也会自行终止。

如果SID的子权限不是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER仍然使用这两个互斥对象名称,但在它们前面添加字符串“Global\”。这将检查全局命名空间中的互斥锁,而不是每个会话命名空间,这允许恶意软件检查它是否有在其他用户的会话中运行的实例。

为了生成Internet活动以隐藏其与C2服务程序的通信,BAZARLOADER首先调用InternetOpenA以使用以下字符串作为HTTP用户代理来初始化WinINet函数的使用。

然后,恶意软件会生成一个线程以定期连接到随机URL,并利用以下结构生成噪音以隐藏主要的C2流量。

首先,BAZARLOADER调用InitializeCriticalSection来初始化结构的临界区对象,该对象稍后用于保护对creation_flag字段的访问。

接下来,它设置self字段指向结构,creation_flag字段为TRUE,并调用CreateThread生成一个线程来执行这些随机Internet操作。如果创建线程失败,creation_flag字段设置为FALSE。

线程首先尝试获取临界区对象的所有权并检查是否启用了创建标志。如果是,恶意软件会将以下URL解析为堆栈字符串。

接下来,线程进入一个无限循环,开始产生通讯噪音。对于随机数生成,BAZARLOADER使用不同的函数调用Windows API BCryptGenRandom来生成一组随机字节。

它随机选择上面列出的4个URL之一,随机生成URL路径段,然后将两者结合起来构建完整的URL。

在生成路径段时,该函数取生成的路径段的最小和最大数量,以及每个路径段的最小和最大长度。

它在给定范围内随机生成路径段的计数。对于每个段,恶意软件随机生成一个字符串,该字符串在给定范围内具有随机长度,其中包含数字和大写/小写字母。

最后,恶意软件调用InternetOpenURLA与生成的URL建立连接。它使用HTTP_QUERY_CONTENT_LENGTH标志调用HTTPQueryInfoA以检索内容的长度,分配具有该大小的缓冲区,并调用InternetReadFile从该URL读取数据。

这会重复进行,直到C2通信和有效负载注入完成,这会产生大量噪音来掩盖进出C2服务程序的主要流量。

BAZARLOADER主要使用以下结构与C2服务程序进行通信。我们将在分析代码时解释结构的字段。

首先,它填充主结构中的crypto_struct字段。此结构包含稍后用于解密从C2服务程序发送的可执行文件的加密句柄。

结构可以重构如下:

这个恶意软件会解析字符串“RSA”和“SHA384”,并调用BCryptOpenAlgorithmProvider来获取这两个算法的句柄。句柄存储在crypto_struct结构中的相应字段中。

接下来,它解析内存中硬编码的RSA公钥和私钥blob,以导入相应的密钥句柄。

对于每个blob,恶意软件会解析字符串“RSAFULLPRIVATEBLOB”或“RSAPUBLICBLOB”,并使用它指定blob的类型时调用BCryptImportKeyPair导入相应的密钥句柄。

最后,它调用BCryptGetProperty来检索RSA公钥和私钥密码块的长度。在完全填充了这个结构之后,BAZARLOADER现在可以执行RSA加密/解密以及SHA384哈希。

在与C2服务程序通信之前,BAZARLOADER首先解析原始IP地址列表并将它们写入主结构中的C2_addr_list字段。

该字段是一个表示字符串结构列表的结构,可以如下所示重新构建两个字符串结构。

下面是此示例中使用的C2服务程序的所有IP地址的列表。

对于其中的每个地址,恶意软件都会尝试与相应的服务程序通信并下载下一阶段的可执行文件。

要建立连接,它会填充以下结构。

恶意软件调用InternetCrackUrlA来检索C2的URL组件和InternetConnectA以连接到服务程序。

然后将此连接结构的字段复制到主结构的C2_connection_struct中。不过,我不完全确定他们为什么不直接填充主要结构。

同样,BAZARLOADER填充下面的结构以创建对C2的HTTP请求。请求的对象名称和HTTP动词被解析为“/data/service”和“GET”。

请求的HTTP版本被解析为“HTTP/1.1”,并且BAZARLOADER调用HttpOpenRequestA来使用上面检索到的连接句柄为C2服务器创建此请求。

它还调用InternetSetOptionA设置接收响应和发送请求的超时时间为300秒,连接C2的超时时间为120秒。

BAZARLOADER然后生成附加到请求的HTTP标头。它通过调用GetSystemTime来使用当前日期和时间填充主结构的curr_system_time和datetime_string字段来实现这一点。

它还生成日期时间字符串的SHA384哈希,以填充结构的datetime_string_hash和datetime_string_hash_len字段。

接下来,BAZARLOADER通过调用BCryptSignHash使用其RSA私有签名生成的哈希,并使用此哈希签名随机生成HTTP标头。

下面是随机HTTP标头的形式。

BAZARLOADER的HTTP标头

使用生成的HTTP标头和请求句柄,BAZARLOADER调用HttpSendRequestA将请求发送到C2服务程序并调用HttpQueryInfoA来检索状态码。

如果状态码不是HTTP_STATUS_OK,恶意软件会转移到另一个C2地址。

如果状态码为HTTP_STATUS_OK,BAZARLOADER调用InternetQueryDataAvailable确定要读取的数据大小,根据大小分配内存缓冲区,并调用InternetReadFile读取下一阶段的有效载荷,直到所有内容都写入内存。

最后,恶意软件通过调用BCryptDecrypt使用其RSA公钥解密有效负载,并检查以确保有效负载的大小大于64字节并且包含MZ标头。

如果BAZARLOADER无法从上面列出的IP地址下载下一阶段的可执行文件,它会尝试使用用户拥有的DNS社区服务OpenNIC解析自定义C2域。

为了开始查询OpenNIC的API,恶意软件首先解析URL“api.opennicproject.org”并调用InternetConnectA建立与该网站的连接。

接下来,它调用HttpOpenRequestA以创建对象名称为“/geoip/?bare&ipv=4&wl=all&res=8”的GET请求句柄,并使用HttpSendRequestA发送请求。

通过检查OpenNIC的API,我们可以分解此对象名称以查看BAZARLOADER请求的内容。其中“bare”参数只列出DNS服务器的IP地址,“IPv4”参数只列出IPv4服务器,“wl”参数只列出白名单服务器,“res”参数只列出8个服务器。

为了测试这一点,我们可以简单地将下面的路径粘贴到我们选择的浏览程序中。

然后恶意软件进入循环调用InternetQueryDataAvailable和InternetReadFile来读取8个OpenNIC的DNS服务器到内存中。

对于每个DNS服务程序IP地址,BAZARLOADER将其从字符串解析为int并填充主结构中的opennic_server_struct字段。下面是用于存储OpenNICIP地址的结构。

最后,恶意软件解码以下自定义C2域,尝试使用DNS服务程序解析它们,并下载下一阶段的可执行文件。

对于每个自定义域,BAZARLOADER调用DnsQuery_A从OpenNIC的服务程序查询DNS资源记录,以解析C2服务程序的IP地址。

在检查IP地址是否有效后,恶意软件会尝试连接它并请求下载下一阶段的可执行文件,类似于我们在上一步中看到的。

成功下载下一阶段可执行文件之后,BAZARLOADER开始注入功能,从另一个进程启动它。

对于此功能,BAZARLOADER填充以下结构。

首先,它检查它的进程是否被提升为管理权限。它调用GetCurrentProcess和OpenProcessToken来检索自己的进程令牌句柄,并调用GetTokenInformation来获取令牌的提升信息。

如果进程没有被提升,它会解析以下进程的名称并尝试填充注入结构的字段。

对于每个进程名称,恶意软件会枚举进程的快照以检索其ID,并调用OpenProcess以获取其句柄。

为了填充包含进程命令行和完整路径的full_exec_command和thread_curr_directory字段,BAZARLOADER首先从进程环境块(PEB)中提取进程参数。

为了访问PEB,恶意软件调用NtQueryInformationProcess来检索PEB的地址,并调用ReadProcessMemory将PEB读入内存。

接下来,它调用ReadProcessMemory从进程的内存中读取进程参数。

使用进程参数RTL_USER_PROCESS_PARAMETERS结构,BAZARLOADER读取进程的命令行和完整路径以填充注入结构。

同样,它也使用process参数访问浏览程序的环境块并将其写入注入结构。

如果BAZARLOADER具有管理员权限,而不是浏览程序的进程,它会尝试从以下命令行使用svchost.exe进程填充注入结构。

接下来,利用注入结构,恶意软件调用CreateProcessA来创建处于挂起状态的目标进程以执行process hollowing。

我们可以通过被调用的WindowsAPI快速发现process hollowing正在发生。调用NtUnmapViewOfSection来取消映射并占用父级的内存。然后调用VirtualAllocEx和WriteProcessMemory在父进程中分配虚拟内存并将恶意负载写入其中。

我们还可以看到,恶意软件遍历父节点的节头以找到“.reloc”节,并对内存中注入的图像执行重定位。

最后,BAZARLOADER调用SetThreadContext为父进程设置新的入口点,并调用ResumeThread再次恢复父进程,父进程将执行注入的可执行文件。

在此基础上,我们分析了BAZARLOADER如何下载远程可执行文件并使用进程空心化来执行它。

参考及来源:https://www.0ffset.net/reverse-engineering/analysing-the-main-bazarloader/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
总决赛最大输家!从球队第三核到跌出轮换,独行侠休赛期难留他

总决赛最大输家!从球队第三核到跌出轮换,独行侠休赛期难留他

你的篮球频道
2024-06-19 11:00:00
河南的这场高温,逼疯了96万新能源车主,你猜是什么原因?

河南的这场高温,逼疯了96万新能源车主,你猜是什么原因?

娱乐圈的笔娱君
2024-06-19 18:24:15
李云泽:针对快递小哥、网约车司机等灵活就业人员量身打造保险产品

李云泽:针对快递小哥、网约车司机等灵活就业人员量身打造保险产品

财联社
2024-06-19 11:04:25
最新!550多名朝觐者在麦加死亡

最新!550多名朝觐者在麦加死亡

鲁中晨报
2024-06-19 14:27:03
38岁已婚女与37岁情人,在石凳子上发生关系,温存后被残忍杀害

38岁已婚女与37岁情人,在石凳子上发生关系,温存后被残忍杀害

胖胖侃咖
2024-06-08 08:00:08
两家外资银行网点同日关闭,原因却各自不同,花旗中国本月已连关三支行

两家外资银行网点同日关闭,原因却各自不同,花旗中国本月已连关三支行

财联社
2024-06-19 09:32:10
余琦科研一生遇“社死”风波,网友呼吁:请对老者嘴下留情!

余琦科研一生遇“社死”风波,网友呼吁:请对老者嘴下留情!

王晓爱体彩
2024-06-20 01:16:02
威廉主动跟凯特搭话,对话被唇语专家破译,揭露真实的婚姻状态

威廉主动跟凯特搭话,对话被唇语专家破译,揭露真实的婚姻状态

红袖说事
2024-06-18 05:24:51
江苏6所高校,将获“新身份”

江苏6所高校,将获“新身份”

鲁中晨报
2024-06-19 16:39:09
意大利总理宣布将访华后,喊话中国,意企必须能与中企平等竞争

意大利总理宣布将访华后,喊话中国,意企必须能与中企平等竞争

冒泡泡的鱼儿
2024-06-19 17:58:06
8亿英镑!罗马老板收购埃弗顿即将官宣 英超老牌球队自求多福吧

8亿英镑!罗马老板收购埃弗顿即将官宣 英超老牌球队自求多福吧

雪狼侃体育
2024-06-19 11:16:17
南医大最新回应!俞莉博士自找麻烦,已被停诊,校领导正开会研究

南医大最新回应!俞莉博士自找麻烦,已被停诊,校领导正开会研究

校长侃财
2024-06-19 11:58:24
欧洲杯乱套了:弱旅3-1爆冷登顶,葡萄牙2-1逆转绝杀,C罗创历史

欧洲杯乱套了:弱旅3-1爆冷登顶,葡萄牙2-1逆转绝杀,C罗创历史

侃球熊弟
2024-06-19 05:03:45
安徽省立医院原党委书记胡世莲被开除党籍

安徽省立医院原党委书记胡世莲被开除党籍

新京报
2024-06-19 09:44:14
原来这么多工作需要保密!网友:上午发的朋友圈,下午人就被带走

原来这么多工作需要保密!网友:上午发的朋友圈,下午人就被带走

墙头草
2024-06-17 08:30:18
新信号!事关外汇,监管最新发声!

新信号!事关外汇,监管最新发声!

北京商报
2024-06-19 16:53:06
女儿中考亲妈后妈共同来接!网友:看了颜值后,丈夫才是人生赢家

女儿中考亲妈后妈共同来接!网友:看了颜值后,丈夫才是人生赢家

垛垛糖
2024-06-18 12:47:49
路灯“阴森森”?!步道“味太重”?!沪上小区3000多万修缮工程,引发争议

路灯“阴森森”?!步道“味太重”?!沪上小区3000多万修缮工程,引发争议

新民晚报
2024-06-19 16:29:10
26岁独居女孩回家后感觉不对劲,报警搜查后,危险远比想象得还近

26岁独居女孩回家后感觉不对劲,报警搜查后,危险远比想象得还近

墨染尘香
2024-06-03 10:48:13
古利特回应争议:我感到很荣幸,因为没有被遗忘

古利特回应争议:我感到很荣幸,因为没有被遗忘

懂球帝
2024-06-19 07:36:12
2024-06-20 06:26:44
嘶吼RoarTalk
嘶吼RoarTalk
不一样的互联网安全新视界
7438文章数 10509关注度
往期回顾 全部

科技要闻

618观察:谁为高强度的低价竞争买单?

头条要闻

欧洲杯:苏格兰1-1瑞士 沙奇里无解世界波

头条要闻

欧洲杯:苏格兰1-1瑞士 沙奇里无解世界波

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

亲子
艺术
健康
公开课
军事航空

亲子要闻

宝宝看到对面小朋友们在打篮球也跟着模仿动作有模有样。

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

晚餐不吃or吃七分饱,哪种更减肥?

公开课

近视只是视力差?小心并发症

军事要闻

以色列涉嫌在加沙使用重型炸弹 或多次违反战争法

无障碍浏览 进入关怀版