理解攻击,是为了更好地防御。
不知道你有没有想过一个问题:为什么明明装了杀毒软件,还是有企业被勒索、被入侵?答案很简单——杀毒软件不是万能的,它也很容易被"骗"。今天这篇文章,我们就从攻击者的视角,拆解一下杀毒软件和EDR到底是怎么工作的,它们有哪些弱点,以及作为防守方,我们该怎么补上这些短板。
一、先搞懂概念:什么是"免杀"?
在安全圈,有个词叫免杀。很多人一听这词就觉得是黑客干坏事用的。其实说白了,免杀就是让恶意程序绕过杀毒软件的检测。注意,它不是"关掉杀毒软件",而是让它"看不见"。

▲ 图1:免杀技术的核心思路——伪装,而不是关闭
理解了这一点,你就会明白:杀毒软件本质上是一个检测系统,而检测系统就一定有漏报和误报。攻防双方的对抗,本质上是一场检测与反检测的竞赛。
二、杀毒软件和免杀技术的"猫鼠游戏"
这场较量大致经历了四个阶段,一张图看懂演进路线:

第一回合(1990s-2005):特征码时代
早期的杀毒软件靠"签名"识别病毒——就像警察拿着通缉令比对犯人照片。
攻击者发现:只要改一个字节,签名就变了,杀软就不认识了。最简单的方法:加个壳(UPX、ASPack),整个文件的hash和结构全变了。
第二回合(2005-2012):启发式时代
杀毒软件学聪明了——不只对"照片",还看"行为"。比如,一个Word文档为什么要调用创建进程的API?可疑!
攻击者开始搞代码混淆——把代码变得面目全非,但功能不变。
第三回合(2012-2020):云端+AI时代
杀软开始把文件上传到云端分析,还用上了机器学习模型。
攻击者改策略:不落盘了,直接在内存里执行恶意代码;用沙箱检测技术识别虚拟环境,检测到就躺平装死。
第四回合(2020-至今):EDR全面对抗
企业开始部署EDR(端点检测与响应),能监控终端上的一举一动。
攻击者也开始"全链路对抗":绕AMSI、绕ETW、直接系统调用、进程挖空注入……现在的攻防对抗已经是系统工程级别了,单点技术根本不够用。
三、杀毒软件到底是怎么检测的?
很多人以为杀软就是个"黑名单比对器"——太天真了。
现代杀毒软件是一个多引擎、多层次的检测体系:


3.1 特征码检测 —— 最老但还在用
原理很简单:维护一个"坏人名单"(特征码库),扫到就报警。特征码不一定是文件hash,它可以是:
特定字节序列(比如 Metasploit 生成shellcode的特征头)
导入的API组合(
VirtualAlloc+CreateRemoteThread同时出现就很可疑)PE文件结构异常(节区名叫
.spam之类非标准名称)资源段里有高熵值数据(加密的shellcode藏在这)
守方提醒: 不能只靠特征码。这也是为什么后面几层检测至关重要。
3.2 启发式检测 —— "我觉得你可疑"
启发式不依赖已知签名,而是分析程序的"行为倾向"。
静态启发(不执行,直接分析):
| 看什么 | 怎么看 |
|---|---|
| API导入组合 | VirtualAlloc + WriteProcessMemory + CreateRemoteThread 三连?高度可疑 |
| 代码逻辑 | 有自解密循环?可疑 |
| PE结构 | 入口点指向了奇怪的地方?可疑 |
| 字符串 | 代码里硬编码了IP和URL?非常可疑 |
动态启发(在沙箱里跑一遍):

杀软在隔离环境里模拟执行几十秒,看你会不会连外网、创建进程、改注册表、注入其他进程。如果行为太像恶意软件,直接判黑。
守方提醒: 关注沙箱逃逸行为——正常用户不会检测自己是不是在虚拟机里。反沙箱检测行为本身就是告警信号。
3.3 行为分析 —— 运行时全程监控

重点监控的API:
VirtualAlloc—— 分配可执行内存(RWX)WriteProcessMemory—— 往别的进程里写数据CreateRemoteThread—— 在别的进程里创建线程NtMapViewOfSection—— 内存映射注入
Hook机制的运作方式:


守方提醒: 用户态Hook可以被绕过(直接syscall),需要配合内核回调(PsSetCreateProcessNotifyRoutine 等)实现内核态监控。
3.4 云检测 —— "上传到云端我帮你看看"
文件hash、行为日志、甚至整个文件,会被上传到厂商的云端进行深度分析。
VirusTotal 这类平台虽然方便,但上传样本后马上会被各大厂商拉黑——实际攻击中,攻击者会先检测目标用的是哪家杀软,只针对那一家做免杀,绝不会把样本公开。
守方提醒: 确保终端即使断网也有基本的本地检测能力。
3.5 熵值检测 —— "你的代码太随机了"
熵(Entropy),通俗讲就是数据的"混乱程度"。
正常程序的代码段熵值一般在 5.0-6.5 之间,而加密后的shellcode熵值能到 7.5-7.9。杀软一看:熵值 > 7.0?八成有鬼。
守方提醒: 熵值检测是低成本高效率的手段,建议在自研检测规则中加入。
3.6 AI/ML检测 —— "我训练了一个模型来判断你"
这是近几年各家杀软的重头戏。把PE文件的特征(元数据、字节分布、API序列等)喂给模型,让它自己学会分辨好坏。

▲ 图7:AI/ML恶意软件检测流水线——从特征提取到集成判定
但ML模型有个致命问题:对抗样本。和图像识别一样,精心构造的扰动可以让模型把一个恶意文件判定为安全文件。
这也是为什么攻防对抗进入了新阶段——不光是对抗规则,还要对抗AI。
四、EDR比传统杀软强在哪?
很多人以为 EDR 就是"高级版杀毒软件"。不是的。
| 维度 | 传统AV | EDR |
|---|---|---|
| 目标 | 阻止恶意软件 | 检测→调查→响应 |
| 方式 | 特征码为主 | 行为分析为主 |
| 数据 | 文件扫描 | 全链路遥测 |
| 时间 | 实时拦截 | 持续监控+事后溯源 |
EDR 相当于在你的终端上装了个"监控摄像头",记录下进程、网络、文件、注册表的一举一动。

EDR的四大核心武器:
内核回调——进程创建、线程创建、模块加载,都能在内核态感知
ETW(事件追踪)——Windows自带的事件框架,低开销、难检测
用户态Hook——在关键API上埋点
内存扫描——定期扫描进程内存,找"不该在那里的代码"
五、重点拆一下 Windows Defender
做安全的都绕不开 Defender,它是 Windows 自带、市场占有率最高的杀软。


▲ 图10:Windows Defender九步检测流程
三个关键机制:
AMSI——专门扫脚本和宏(PowerShell、VBA、JS),很多攻击的第一步就是从这里开始的
MAPS云查——文件会被上传到微软云做深度分析
EtwTi——利用 ETW 框架做威胁情报,可以感知到进程内存分配、远程线程创建等行为
写在最后
这篇文章只是开了个头。
真正要理解终端安全,你需要知道的知识远不止这些——shellcode是怎么生成和执行的、各种进程注入手法有什么区别、怎么绕过AMSI和ETW、内存保护机制怎么突破……
但有一个认知我希望你带走:
安全防御不能停留在"我有装杀毒软件"的水平。 你需要知道攻击者会从哪些角度绕过去,然后针对性地补上检测点。
多层次的检测 + 全链路的可观测性 + 持续的威胁情报更新,才是现代终端安全的正确姿势。
下一篇,我们会聊 Shellcode:它是怎么生成的、怎么在内存里执行的,以及为什么大多数杀软都拦不住它。
关注我们,不错过后续更新。
本公众号云息信安所提供的信息以及工具仅供安全测试人员用于授权测试,禁止用于未授权测试,请勿非法使用!!!造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号云息信安及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
夜雨聆风