中国软件网

您现在的位置是:网站首页>会员软件

会员软件

威胁分析与响应能力—Windows恶意软件BazarLoader分析

中国软件网2023-02-08会员软件必看软件会员号
什么电视软件不要会员,必看软件会员号,不要会员的聊天软件,威胁分析与响应能力—Windows恶意软件BazarLoader分析,什么电视软件不要会员,必看软件会员号,不要会员的聊天软件BazarLoader(又名BazarBackdoor、Baza

威胁分析与响应能力—Windows恶意软件BazarLoader分析

威胁分析与响应能力—Windows恶意软件BazarLoader分析,

  什么电视软件不要会员,必看软件会员号,不要会员的聊天软件BazarLoader(又名BazarBackdoor、BazaLoader、BEERBOT、KEGTAP和Team9Backdoor)是基于Windows的一种隐秘的后门木马,主要通过电子邮件等方式传播。攻击者通过恶意软件后门访问受感染的主机并对目标域网络环境进行探测,部署Cobalt Strike,绘制网络拓扑图。如果为高价值目标,攻击者还会开始横向拓展,部署Conti、Ryuk等勒索软件。

  与许多恶意软件类似,BAZARLOADER会手动检查系统的语言以避免在其母国开展恶意攻击。通过调用GetSystemDefaultLangID来检索系统的默认语言,通过调用GetKeyboardLayoutList来遍历系统的键盘布局。

  对于每一种语言,恶意软件都会使用位掩码检查其有效性。如果语言标识符大于0x43或小于0x18则视为有效,这样BAZARLOADER才会继续执行。如果标识符在0x18和0x43之间的范围内,语言标识符和0x18之间的差异被用作位掩码中要检查的位的索引。

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

  如果SID的子权限是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER会通过调用CreateMutexA检查互斥锁“”当前是否由任何其他进程拥有。如果是,恶意软件会自行终止。但分析发现检查互斥对象是否存在的条件存在一个小错误,即程序假定它在实际成功时无法打开互斥对象。

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

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

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

  接下来线程进入一个无限循环,开始产生通讯噪音。对于随机数生成,BAZARLOADER使用不同的函数调用Windows API BCryptGenRandom来生成一组随机字节。程序随机选择上面列出的4个URL之一,随机生成URL路径段,然后将两者结合起来构建完整的URL。在生成路径段时,该函数取生成的路径段的最小和最大数量,以及每个路径段的最小和最大长度。

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

  最后,恶意软件调用InternetOpenURLA与生成的URL建立连接,使用HTTP_QUERY_CONTENT_LENGTH标志调用HTTPQueryInfoA以检索内容的长度,分配具有该大小的缓冲区,并调用InternetReadFile从该URL读取数据。该操作将重复进行,直到C2通信和有效负载注入完成,期间会产生大量噪音来掩盖进出C2服务程序的主要流量。

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

  软件会解析字符串“RSA”和“SHA384”,并调用BCryptOpenAlgorithmProvider来获取这两个算法的句柄。句柄存储在crypto_struct结构中的相应字段中。接下来解析内存中硬编码的RSA公钥和私钥blob,导入相应的密钥句柄。

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

  在与C2服务程序通信之前,BAZARLOADER首先解析原始IP地址列表并将它们写入主结构中的C2_addr_list字段。该字段是一个表示字符串结构列表的结构,可以如下所示重新构建两个字符串结构。

  恶意软件会尝试与每个地址对应的服务程序通信并下载下一阶段的可执行文件。如果要建立连接则会填充以下结构。

  恶意软件调用InternetCrackUrlA来检索C2的URL组件和InternetConnectA以连接到服务程序。然后将此连接结构的字段复制到主结构的C2_connection_struct中。不过不完全确定不直接填充主要结构的原因。

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

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

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

  如果BAZARLOADER无法从上面列出的IP地址下载下一阶段的可执行文件,程序会尝试使用用户拥有的DNS社区服务OpenNIC解析自定义C2域。为了开始查询OpenNIC的API,首先解析URL“并调用InternetConnectA建立与该网站的连接。

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

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

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

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

  首先检查进程是否被提升为管理权限。调用GetCurrentProcess和OpenProcessToken来检索进程令牌句柄,并调用GetTokenInformation来获取令牌的提升信息。如果进程没有被提升,则解析以下进程的名称并尝试填充注入结构的字段。

  对于每个进程名称,恶意软件会枚举进程的快照以检索其ID,并调用OpenProcess以获取其句柄。为了填充包含进程命令行和完整路径的full_exec_command和thread_curr_directory字段,BAZARLOADER首先从进程环境块(PEB)中提取进程参数。

  接下来,它调用ReadProcessMemory从进程的内存中读取进程参数。使用进程参数RTL_USER_PROCESS_PARAMETERS结构,BAZARLOADER读取进程的命令行和完整路径以填充注入结构。同样也使用process参数访问浏览程序的环境块并将其写入注入结构。

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

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

  分析发现,恶意软件遍历父节点的节头以找到“.reloc”节,并对内存中注入的图像执行重定位。

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

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

很赞哦!