【威胁情报】黑莲花 - UEFI Bootkit 2.3.1

admin 2023年6月22日16:23:19评论40 views字数 4552阅读15分10秒阅读模式
【威胁情报】黑莲花 - UEFI Bootkit 2.3.1
关注我们 | 发现更多精彩内容
网络犯罪世界在不断发展,最新出现的威胁之一是 BlackLotus bootkit。该恶意软件是已知的第一个能够 绕过 Microsoft Windows 11 系统安全启动的bootkit ,使其成为网络世界中的一个危险威胁。该恶意软件已在各种黑客论坛上以 5,000 美元的价格出售,而升级到新版本只需 200 美元。80 kB 大小的 BlackLotus bootkit 自 2022 年 10 月以来一直在黑客论坛上可用。
Secure boot是 UEFI 2.3.1版本自带的BIOS软件。安全启动确保在机器启动时只允许运行由制造商确定的受信任软件。启用安全启动后,计算机将在允许任何可执行文件运行之前验证其数字签名。此功能减少了 bootkit 的影响。

【威胁情报】黑莲花 - UEFI Bootkit 2.3.1

黑莲花的特点
黑客论坛中提到的 BlackLotus 最重要的功能是它能够绕过安全启动。此外,它还可以绕过 Windows 安全保护。该恶意软件具有 Ring0/Kernel 保护以防止删除。该恶意软件的目的是充当在 SYSTEM 帐户下运行的 HTTP 下载程序。它还具有反虚拟机、反调试和代码混淆等功能,以防止恶意软件分析。
BlackLotus 利用 CVE-2022-21894 漏洞绕过安全启动功能。微软于 2022 年 1 月发布了针对此漏洞的补丁,但尚未将易受攻击的签名二进制文件添加到 UEFI 吊销列表中。此列表标识不应再受信任的引导文件并将它们标记为不受信任。因此,即使是完全更新的设备仍然容易受到攻击。
BlackLotus Bootkit 攻击剖析

【威胁情报】黑莲花 - UEFI Bootkit 2.3.1

一旦安装程序拥有必要的权限,它就会将 bootkit 文件部署到 EFI 系统分区。恶意二进制文件与具有 CVE-2022-21894 漏洞的 Microsoft 签名文件一起部署到 EFI 系统分区。EFI 系统分区是包含在基于 EFI 的系统中启动所需的文件的部分,并且包括将在启动过程中使用的基本 EFI 组件。
安装程序禁用 BitLocker 和 HVCI 安全系统。必须禁用 HVCI 安全系统才能运行未签名的内核代码。内核代码运行在操作系统内核中,直接与操作系统和硬件交互。HVCI 系统确保内核代码的完整性,这对安全性至关重要。
安装程序会重新启动计算机。重新启动的计算机通过EFI系统分区中的修改文件运行。机器加载之前由安装程序修改的修改后的 BCD(引导配置数据)引导选项。BCD 是一个数据库,其中包含用于在 Windows 操作系统中启动的配置数据。
在计算机重启期间,攻击者的 MOK 密钥也会被保存,即使在启用了 UEFI 安全启动的系统中也能确保连续性。尽管被 UEFI 安全启动阻止,MOK 仍允许用户安装自己的启动或驱动程序软件。这在用户需要安装自己的软件时很有用,但它也允许恶意软件使用相同的方法绕过 UEFI 安全启动。
bootkit 的目的是分发由 内核驱动程序和用户模式组件组成的HTTP下载程序。如果 HTTP 下载程序指示,bootkit 会自行删除或运行额外的内核加载。它还可以防止从 ESP 中删除 bootkit 文件。HTTP 下载器与 C&C 通信以执行接收到的命令并下载和运行有效负载。

参考:

https://www.binarly.io/posts/The_Untold_Story_of_the_BlackLotus_UEFI_Bootkit/index.html

https://kn0s-organization.gitbook.io/blacklotus-analysis-stage2-bootkit-rootkit-stage/

https://socradar.io/enter-the-blacklotus-analysis-of-the-latest-uefi-bootkit/

Yara

rule win_blacklotus_auto {
    meta:        author = "Felix Bilstein - yara-signator at cocacoding dot com"        date = "2023-03-28"        version = "1"        description = "Detects win.blacklotus."        info = "autogenerated rule brought to you by yara-signator"        tool = "yara-signator v0.6.0"        signator_config = "callsandjumps;datarefs;binvalue"        malpedia_reference = "https://malpedia.caad.fkie.fraunhofer.de/details/win.blacklotus"        malpedia_rule_date = "20230328"        malpedia_hash = "9d2d75cef573c1c2d861f5197df8f563b05a305d"        malpedia_version = "20230407"        malpedia_license = "CC BY-SA 4.0"        malpedia_sharing = "TLP:WHITE"
    /* DISCLAIMER     * The strings used in this rule have been automatically selected from the     * disassembly of memory dumps and unpacked files, using YARA-Signator.     * The code and documentation is published here:     * https://github.com/fxb-cocacoding/yara-signator     * As Malpedia is used as data source, please note that for a given     * number of families, only single samples are documented.     * This likely impacts the degree of generalization these rules will offer.     * Take the described generation method also into consideration when you     * apply the rules in your use cases and assign them confidence levels.     */

    strings:        $sequence_0 = { 40383c08 7406 4080ffcc 750a ffc2 49ffc3 413bd0 }            // n = 7, score = 100            //   40383c08             | mov                 edx, ebx            //   7406                 | dec                 eax            //   4080ffcc             | mov                 dword ptr [esp + 0x20], edi            //   750a                 | mov                 cl, 1            //   ffc2                 | inc                 ebp            //   49ffc3               | xor                 ecx, ecx            //   413bd0               | dec                 eax
        $sequence_1 = { 2bc7 ffc8 0fb71443 6683fa7f 7604 6683ea60 }            // n = 6, score = 100            //   2bc7                 | or                  edx, 0xffffffff            //   ffc8                 | inc                 ebp            //   0fb71443             | xor                 ecx, ecx            //   6683fa7f             | inc                 ebp            //   7604                 | xor                 eax, eax            //   6683ea60             | lea                 ecx, [edx + 3]
        $sequence_2 = { e8???????? b20d 408ace 8ad8 e8???????? b20b }            // n = 6, score = 100            //   e8????????           |                                 //   b20d                 | movzx               ebx, byte ptr [eax + edx]            //   408ace               | lea                 eax, [edx + 3]            //   8ad8                 | inc                 edx            //   e8????????           |                                 //   b20b                 | movzx               edi, byte ptr [eax + edx]
        $sequence_3 = { 48897820 4863413c 4533c9 488bea 458bd1 8b740850 }            // n = 6, score = 100            //   48897820             | jb                  0x1ce4            //   4863413c             | inc                 esp            //   4533c9               | mov                 eax, eax            //   488bea               | xor                 edx, edx            //   458bd1               | dec                 ecx            //   8b740850             | mov                 ecx, ecx
        $sequence_4 = { 75f2 4d8bc6 488d542430 488d4d30 e8???????? 492bfe }            // n = 6, score = 100            //   75f2                 | mov                 dword ptr [ebp - 0x54], 0xd2f3ff10            //   4d8bc6               | mov                 dword ptr [ebp - 0x50], 0xec130ccd            //   488d542430           | mov                 dword ptr [ebp - 0x4c], 0x1744975f            //   488d4d30             | mov                 dword ptr [ebp - 0x59], 0x5048706c            //   e8????????           |                                 //   492bfe               | mov                 dword ptr [ebp - 0x55], 0xdab9edfd
        $sequence_5 = { 4d85c0 744d 458bd1 410fb64002 410fb65003 48c1e208 }            // n = 6, score = 100            //   4d85c0               | dec                 eax            //   744d                 | test                eax, eax            //   458bd1               | js                  0xebe            //   410fb64002           | lea                 eax, [ecx - 0x60]            //   410fb65003           | movzx               edx, al            //   48c1e208             | dec                 eax
        $sequence_6 = { b209 408ace 8ad8 e8???????? b20d }            // n = 5, score = 100            //   b209                 | jae                 0xb55            //   408ace               | inc                 ebp            //   8ad8                 | movzx               eax, cx            //   e8????????           |                                 //   b20d                 | inc                 edx
        $sequence_7 = { 4c8d4c2440 4c8bc0 488d0de6340000 e8???????? 85c0 }            // n = 5, score = 100            //   4c8d4c2440           | inc                 ecx            //   4c8bc0               | sub                 eax, edx            //   488d0de6340000       | inc                 ecx            //   e8????????           |                                 //   85c0                 | inc                 edx
        $sequence_8 = { 480fbfc6 488d3d41100100 b9e8030000 8935???????? }            // n = 4, score = 100            //   480fbfc6             | lea                 eax, [ecx + 2]            //   488d3d41100100       | inc                 edx            //   b9e8030000           | mov                 byte ptr [eax + edx], bl            //   8935????????         |                     
        $sequence_9 = { 48897010 48897818 4c897020 55 488d68c8 4881ec30010000 4c8bd1 }            // n = 7, score = 100            //   48897010             | jb                  0x1dd1            //   48897818             | inc                 ebp            //   4c897020             | test                eax, eax            //   55                   | je                  0x1cc7            //   488d68c8             | dec                 eax            //   4881ec30010000       | mov                 ebx, ecx            //   4c8bd1               | dec                 eax
    condition:        7 of them and filesize < 181248}

原文始发于微信公众号(Ots安全):【威胁情报】黑莲花 - UEFI Bootkit 2.3.1

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月22日16:23:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【威胁情报】黑莲花 - UEFI Bootkit 2.3.1https://cn-sec.com/archives/1827635.html

发表评论

匿名网友 填写信息