Sality病毒如何通过进程枚举与文件签名识别并删除主流杀毒软件的安装文件?该病毒常驻内存后,会遍历系统进程,匹配已知安全软件的进程名或数字签名,并结合注册表校验判断其是否存在。一旦识别成功,Sality会利用自身注入技术终止相关进程,并递归遍历杀毒软件安装目录,通过直接删除文件或覆写关键模块的方式破坏其完整性。更高级变种甚至使用驱动级权限绕过文件保护机制。这种行为不仅阻碍安全软件运行,还极大增加后续清除难度。那么,Sality具体依赖哪些系统API和特征库来精准识别目标杀软文件?
2条回答 默认 最新
杨良枝 2025-11-16 21:01关注一、Sality病毒识别与清除杀毒软件的技术机制解析
Sality是一种历史悠久且高度复杂的多态性PE文件感染型病毒,自2003年首次被发现以来,持续演化出多种变种。其核心目标之一是确保自身在受感染系统中的持久驻留,为此必须消除安全软件的检测与干预能力。为实现这一目的,Sality采用了一套多层次、跨权限层级的技术组合,从用户态到内核态全面对抗主流杀毒产品。
1. 进程枚举:获取运行中安全软件的“指纹”
当Sality常驻内存后,首要任务是识别当前系统中是否运行了反病毒程序。它通过调用Windows提供的系统API进行进程遍历:
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0):创建进程快照,获取所有活动进程列表。Process32First/Process32Next:遍历快照中的每个进程,提取其映像名称(如avp.exe, egui.exe)和PID。NtQueryInformationProcess(未公开API):用于获取更深层信息,如进程是否处于调试状态或是否有签名验证数据。OpenProcess+ReadProcessMemory:读取远程进程内存空间,分析是否存在特征码段(例如特定加密字符串或API调用序列)。
2. 文件签名验证:绕过伪装,精准打击
仅依赖进程名容易误判(如用户自建同名进程),因此Sality进一步校验数字签名。其实现方式包括:
- 调用
WinVerifyTrust()函数对可执行文件执行完整性校验,判断是否由知名安全厂商签发。 - 使用
CryptQueryObject()解析PE文件的嵌入式证书链,提取发行者(Issuer)和主题(Subject)字段。 - 比对硬编码于病毒体内的白名单哈希库,例如VeriSign、Symantec、Kaspersky等CA机构的公钥指纹。
- 若签名有效且匹配已知杀软签名,则标记该进程为清除目标。
3. 注册表联动校验:确认安装环境的存在
即使某个杀毒进程暂时未运行,Sality仍会检查其是否已安装,防止未来启动。典型注册表键值如下表所示:
注册表路径 对应杀毒软件 键名示例 用途 HKEY_LOCAL_MACHINE\SOFTWARE\Avast Software\Avast Avast InstallPath 定位安装目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msascuil.exe Windows Defender (Default) 确认组件存在 HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\protected Kaspersky ProductVersion 版本识别 HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp Trend Micro SetupPath 路径提取 HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security ESET CurrentVersion 激活状态判断 HKEY_LOCAL_MACHINE\SOFTWARE\McAfee\DesktopProtection McAfee ProductID 授权校验辅助 HKEY_LOCAL_MACHINE\SOFTWARE\Bitdefender Bitdefender Install_Dir 服务路径构建 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ekrn ESET Kernel Driver Type 驱动级驻留检测 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc Windows Security Center Start 服务启停控制 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AVAST Software\Avast Avast (x86 on x64) SetupLanguage 兼容性识别 4. 杀软文件定位与破坏策略
一旦确认目标存在,Sality将采取以下步骤实施清除:
// 伪代码示例:递归删除杀软文件 void DeleteAntivirusFiles(LPCTSTR szInstallDir) { HANDLE hFind; WIN32_FIND_DATA ffd; TCHAR szPath[MAX_PATH]; wcscpy_s(szPath, szInstallDir); wcscat_s(szPath, L"\\*"); hFind = FindFirstFile(szPath, &ffd); if (hFind == INVALID_HANDLE_VALUE) return; do { if (wcscmp(ffd.cFileName, L".") == 0 || wcscmp(ffd.cFileName, L"..") == 0) continue; swprintf_s(szPath, L"%s\\%s", szInstallDir, ffd.cFileName); if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { DeleteAntivirusFiles(szPath); // 递归进入子目录 } else { SetFileAttributes(szPath, FILE_ATTRIBUTE_NORMAL); DeleteFile(szPath); // 直接删除 // 或覆写关键模块:WriteFile(...) 写入垃圾数据至引擎DLL } } while (FindNextFile(hFind, &ffd)); FindClose(hFind); RemoveDirectory(szInstallDir); // 清空目录 }5. 驱动级绕过:突破文件保护机制
现代杀毒软件普遍启用文件保护(如PGP、Tamper Protection),阻止非可信代码修改其核心组件。高级Sality变种则通过加载恶意驱动(如
\\.\\aw.sys模拟合法驱动名)获得Ring 0权限,并利用以下技术绕过限制:- SSDT Hook(System Service Descriptor Table):篡改
NtCreateFile、NtOpenFile等系统调用,过滤对杀软路径的访问请求。 - Direct Kernel Object Manipulation (DKOM):直接操作EPROCESS结构体,隐藏自身或终止目标进程。
- CR0寄存器修改:临时禁用写保护模式,强行写入受保护内存页。
6. 特征库构建:静态与动态双轨识别
Sality内置一个压缩加密的“杀软特征数据库”,包含如下维度的数据:
识别维度 具体条目 数据来源 进程名 egui.exe, avp.exe, bdagent.exe 社区泄露样本分析 服务名 ekrn, mfefire, wscsvc MITRE ATT&CK 框架 文件MD5前缀 9f86d08..., e99a18... VirusTotal批量查询 数字证书SHA1 3af8...b4e2 (Symantec) 证书透明日志 注册表键路径 HKLM\SOFTWARE\KasperskyLab 自动化沙箱监控 网络C2域名 update.kaspersky.com DNS日志关联分析 内存特征码 "KAS\0", "BD_INIT" IDA Pro逆向提取 驱动设备名 \Device\Klif, \Device\Bdrtflt WinDbg内核调试 7. 技术演进趋势与防御建议
近年来,Sality开始融合无文件攻击(fileless execution)、反射式DLL注入以及UAC绕过技术,使其检测难度显著上升。针对此类威胁,企业级防护应考虑:
- 启用基于行为的EDR解决方案,监控异常进程终止与大量文件删除事件。
- 部署固件级完整性校验(如Secure Boot + HVCI)防止驱动劫持。
- 限制本地管理员权限,减少恶意代码提权机会。
- 定期审计注册表自动启动项与服务列表。
8. 流程图:Sality清除杀软的整体执行逻辑
graph TD A[Sality驻留内存] --> B[枚举进程列表] B --> C{是否存在可疑进程?} C -- 是 --> D[提取进程名与PID] D --> E[调用WinVerifyTrust校验签名] E --> F{签名是否属于已知杀软?} F -- 是 --> G[查询注册表确认安装路径] G --> H[终止进程 OpenProcess + TerminateProcess] H --> I[递归遍历安装目录] I --> J[删除或覆写关键模块] J --> K[尝试加载恶意驱动提升权限] K --> L[Hook SSDT/DKOM维持控制] L --> M[完成清除,继续传播] C -- 否 --> N[进入潜伏或感染阶段]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报