安全与风控
系统重装后仍被感染或杀软无法检出时,如何分析…
当恶意软件在重装系统后仍存活、AV/EDR 无法检出、Secure Boot 被禁用或内存取证发现 rootkit 行为时,对引导扇区、UEFI 固件和内核进行离线取证分析。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
系统重装后仍被感染或杀软无法检出时,如何通用
解决思路
- 从 Linux 活动 U 盘启动,避免执行已被感染的 OS 组件,再进行离线分析。
- 用 dd 采集 MBR(磁盘前 512 字节):dd if=/dev/sda of=mbr.bin bs=512 count=1。
- 用 dd 采集第一磁道(通常包含 MBR 之外的 bootkit 代码):dd if=/dev/sda of=first_track.bin bs=512 count=63。
- 用 dd 采集 VBR(分区首扇区):dd if=/dev/sda1 of=vbr.bin bs=512 count=1。
- 挂载并备份 UEFI 系统分区:mkdir /mnt/efi; mount /dev/sda1 /mnt/efi; cp -r /mnt/efi/EFI /analysis/efi_backup/。
- 用 chipsec 转储 UEFI 固件:python chipsec_util.py spi dump firmware.rom;或用 flashrom -p internal -r firmware.rom。
- 用 sha256sum firmware.rom 校验固件转储完整性。
- 用 ndisasm -b16 mbr.bin > mbr_disasm.txt 反汇编 MBR(16 位实模式)。
- 将 MBR 与已知干净样本比对:标准 Windows MBR 以 EB 5A 90 开头,Windows 10 MBR 为 33 C0 8E D0 BC 00 7C。
- 用 Python 脚本检查 MBR 签名(偏移 510-511 应为 0x55AA),并匹配已知 bootkit 特征(如 TDL4/Alureon 的 E8 00 00 5E 81 EE)与干净特征。
- 解析 MBR 分区表:遍历偏移 446 起 4 个 16 字节表项,输出引导标志、分区类型、起始 LBA 和扇区数。
- 用 UEFITool 提取 UEFI 固件组件:UEFIExtract firmware.rom all,并列出所有 DXE 驱动(find firmware.rom.dump -name "*.efi" -exec file {} \;)。
- 将固件模块 GUID 与厂商基线比对,找出多余或被修改的模块。
- 用 chipsec 验证 Secure Boot 配置:python chipsec_main.py -m common.secureboot.variables;检查 SPI flash 写保护:python chipsec_main.py -m common.bios_wp。
- 用 YARA 规则扫描固件中的已知 UEFI 恶意软件模式:yara -r uefi_malware.yar firmware.rom。
- 对照已知 UEFI bootkit 检测点:LoJax(修改 SPI flash、添加 DXE 驱动)、BlackLotus(利用 CVE-2022-21894 绕过 Secure Boot、修改 ESP 引导器)、CosmicStrand(修改 CORE_DXE、挂钩内核初始化)、MoonBounce(CORE_DXE 植入、修改 GetVariable())、ESPecter(修改 Windows Boot Manager、patch winload.efi 禁用 DSE)。
- 用 Volatility 3 检测 SSDT 挂钩:vol3 -f memory.dmp windows.ssdt | grep -v "ntoskrnl\|win32k"。
- 用 Volatility 3 对比 psscan 与 pslist 输出,发现 DKOM 隐藏进程。
- 用 vol3 -f memory.dmp windows.callbacks 检查内核回调注册。
- 用 vol3 -f memory.dmp windows.driverscan 和 windows.modules 分析驱动,并用 sigcheck 检查未签名驱动。
- 用 vol3 -f memory.dmp windows.idt 检测 IDT 挂钩。
- 验证引导链完整性:用 sigcheck -a 检查 bootmgfw.efi、winload.efi、ntoskrnl.exe 的签名。
- 检查 Measured Boot 日志(bcdedit /enum firmware)和 Secure Boot 状态(PowerShell 的 Confirm-SecureBootUEFI)。
- 用 bcdedit /v 检查引导配置是否被篡改,确认 testsigning、nointegritychecks、debug 均应为 No。
- 记录分析结论:引导扇区完整性(含十六进制比对)、UEFI 模块清单与完整性、Secure Boot 状态与绕过机制、内核挂钩(SSDT/IDT/IRP/inline)、隐藏进程/驱动/文件、持久化机制(SPI flash/ESP/MBR/内核驱动)、引导链完整性、家族归因、修复步骤(重刷固件、重建 MBR、更换硬件)。
适用边界 · 注意事项
- 不适用于标准用户态恶意软件;bootkit 和 rootkit 运行在根本不同的层级,需要专门分析技术。
- 不要在已被感染的 OS 运行时分析系统,rootkit 可能对实时分析隐藏自身。
- 不要只分析基于磁盘的引导组件而忽略 SPI flash,否则会漏掉固件级植入。
- 不要假设 Secure Boot 能阻止所有 bootkit,已知存在绕过(如 CVE-2022-21894)。
- 重刷固件前不要丢弃原始固件转储,它是归因的关键证据。