前言
免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
而免杀的话我认为就是应该从杀毒软件去着手,正是因为有了各种杀软,各种的 EDR,所有才会衍生出免杀的这项技术,根据每个杀软的特性,针对性的去绕过。目前免杀就是围绕两大流派吧,一是二进制流,利用汇编配合上 C++,调用系统底层函数进内核的方式免杀。杀软如果直接在用户态检测其行为特征会比较困难。二是新工具新项目、小众工具流,其主要思想是寻找反病毒厂商未覆盖的方法和工具,一个是寻找新的语言工具和项目,跟厂商比速度。
免杀用在哪里
最常见的就是我们用 C2 生成的一些木马,或者还有我们常用的工具 fscan,mimikatz,frp,提权工具 EXP 等等
然后简单的介绍 C2 是什么:全称 Command & Control Server,又称 C&C 服务器,也就是命令控制服务器,常见于病毒木马控制主机后,攻击者通过 C2 服务器转发命令,常见的几个大家肯定都认识,比如 CS,Metasploit 等等
这里说一嘴,如果你能自己写一个 C2,那么过杀软肯定是轻轻松松,因为是你自己写的,那么这个 agent 的特征就不会被一些杀软收录
免杀技术的核心
主动式对抗
这个就是强对抗,写出来的东西去对抗各种杀软,让杀软识别不到你的这个 exe 到底是要去干什么,但是这个的话就是很局限,因为如果真的人家要去上一些 XDR,尤其是国外的那3
个 top 级 XDR(火眼、猎鹰、哨兵一号),使用 CS 等大众的 C2 无疑是在自投罗网。对于上述中的绝大多数杀软来说,不论是静态流量还是行为特征,早就是被分析的体无完肤了。而且他们是云端总控的模式,只要被识别到,样本就会被发送到云端,24 小时全程人工在线,要去和这些分析病毒的工程师去对抗,无疑是雪上加霜。
被动式绕过
加解密、混淆、编码
文件伪装
这个比较常见的就是一些 APT 组织,他们伪装的好的,甚至可以潜伏一年不被发现,还有就是 HVV 行动中的钓鱼什么的
权限维持
改注册表 计划任务等等,别一关机然后木马就失效了,前功尽弃了
杀软检测的东西
特征检测
这个就是一些特征码,一些 C2 常有的
行为检测
动态查杀,检测 exe 的行为比如要加用户 net user add net1.exe,对这一项进行监控,或者是加计划任务,改注册表,如果添加了,修改了就会触发告警
云查杀
可疑文件进行上传,跑沙箱,返回结果,正常文件还是恶意文件
内存扫描
扫关键区域,卡巴斯基、Windows Defender
主动防御检测
内置检测规则,触发规则进行拦截
启发式
对特征码的补充,解决未知特征的情况,分为初级 中级 和高级 ,在 Ai 引擎加持上,模拟行为(沙箱)
关于编程语言的选择
不管你用什么语言,他只是做到一个静态免杀的效果,动态查杀和你用什么语言没有任何关系
一般我喜欢的就是 C 和 C++去做免杀,它文件体积小,用 OLLVM 静态混淆 exe 文件,然后 C#是中间语言嘛,如果不做好混淆的话,dnSpy 直接反编译就出源码了
Golang golang 免杀效果好,和 py 比,文件体积小,但是 360 核晶和 windows Defender 对 golang 的马非常敏感,他们很有在研究 golang 写出来的马
Rust 文件比较大,泄漏编译路径,但自带 llvm 的混淆
结尾
挺水的,说了说概念而已,还有就是强调两个点
一个是不要把写好的马放到 VT 上面去扫,VT 提取未知文件的信息,静态扫描+动态沙箱判断是不是恶意文件,信息更新同步给各大杀软厂商,然后可能一开始马是能过各大杀软的,后面慢慢的就不行了,云传也不要 VT
还有一个就是不同的编译器在编译同样的一个项目的时候,编译出来的 exe 的免杀效果也是不尽相同,比如 VS 和 MSVC 编译出来可能放 VT 上面 4/72,但 gcc 编译出来就是 2/72 还有一个就是不同的编译器在编译同样的一个项目的时候,编译出来的 exe 的免杀效果也是不尽相同,比如 VS 和 MSVC 编译出来可能放 VT 上面 4/72,但 gcc 编译出来就是 2/72