"免杀"(AntiVirus Evasion)
完全不被检测 FUD(Fully undetectable)
github.com Topic: antivirus-evasion
- 静态扫描(Signatured Static Scanning) 即文件查杀
- 内存扫描(Run-time Analysis)
- 流量分析(NIPS/NIDS)
- 行为分析(Behavior Monitoring)
- 机器学习(Machine Learning)
- 对抗-静态扫描
- 1.shellcode加密
- 逃避原理:避免被杀软直接获取到真正shellcode(因为性能等原因 杀软不会暴力枚举以解密内容)
- 局限:使用了加解密函数 文件size可能会变大
- 2.文件不落地
- 逃避原理:文件不落地 难以被捕获样本
- 局限:不落地方案的任何操作都被提示。如Powershell的任何操作都会被杀软提示“是否允许执行”。另外微软为Powershell等程序提供了扫描接口
Antimalware Scan Interface (AMSI)
以便对接受的数据进行扫描。
- 3.源码级修改
- 逃避原理:自主开发程序,源码级的修改较容易实现"变种",避免杀软报毒(因为从未被捕获分析 应该不会被杀 所以建议一个样本仅对某一目标攻击)
- 局限:彻底改写源码难度大
- 其他
- 1.shellcode加密
- 对抗-内存扫描
- 1.DLL加载
- 逃避原理:杀软为了不影响系统性能,通常对DLL加载的审查宽松(加载途径:自己编程实现dll加载器 或 进行"dll hijacking")
- 局限:文件落地
- 2.自定义加载器(Customer Loader)
- 逃避原理:使用不同编程语言实现的shellcode Loader,运行机制较不同,杀软可能没有足够精力跟进各种形式的加载器(如C#使用虚拟机解释后运行 Golang编译运行 等)
- 局限:文件落地
- 其他
- 1.DLL加载
- 对抗-流量分析
- 1.白域名方法 - "Domain Fronting"
- 逃避原理:借用CDN实现"隐藏"C2服务器的真实ip 避免溯源分析 C2流量 -> CDN ip -> C2 Server ip
- 局限:使用CDN,可能需要实名认证(可考虑以其他身份注册)
- 2.白域名方法 - 借用知名网站
- 逃避原理:将"命令数据"加密处理发布在知名网站 即可实现被控端通过知名域名获取C2命令 避免流量特征告警 避免溯源分析
- 国内 可被公开访问的页面
weibo.com
users.qzone.qq.com
- 国外 可被公开访问的页面
google、twitter、pastbin、telegram ...
- 国内 可被公开访问的页面
- 局限:使用知名站点,可能需要实名认证(可考虑以其他身份注册)
- 逃避原理:将"命令数据"加密处理发布在知名网站 即可实现被控端通过知名域名获取C2命令 避免流量特征告警 避免溯源分析
- 3.DGA域名 - DGA域名生成算法
- 逃避原理:使用dga可以试图连接多个C2域名 从而避免"单一C2域名/ip特征被当作IoC后引发报警"这一报警机制(黑名单) 大大增加了C2架构稳定性
- 局限:dga生成的域名可能被机器学习识别为恶意的. dga需要注册不止一个域名. 可被持续追溯得到多个C2服务器ip.
- 4.DNS over HTTPS
- 逃避原理:通过https在线查询DNS记录(A TXT ...) 获取C2 server的IP. 参考实际案例Godlua Backdoor分析报告
- 局限:单次查询的数据传输量有限
- 其他
- 1.白域名方法 - "Domain Fronting"
- 对抗-行为分析
- 1.指定特定的运行条件
- 逃避原理:即符合一定的条件才会进行"恶意的"操作行为。从而避免该程序在VM、沙箱、逆向人员的眼皮底下进行恶意操作
- 局限:可能会限制运行环境,导致缩小可运行的目标范围(如只能在某个指定域中计算机才能运行该程序)
- 其他
- 1.指定特定的运行条件
- 对抗-逆向分析
- 1.加壳
- 逃避原理:通过加壳等方式延长被逆向分析人员彻底分析的时间
- 局限:没有绝对的反逆向保护,只能增加逆向分析难度
- 其他
- 1.加壳
- 对抗-机器学习
- client ML - 杀软客户端内置的轻量级机器学习模型
- Cloud ML - 相关ML技术及训练数据不得而知
注意:逃避技术是和杀软技术的长期对抗。所有高超的逃避技巧都迟早被威胁检测技术发现。因为他们有尖端的技术和人才。
名称 | 属性 | 针对目标 | 描述 |
---|---|---|---|
EgeBalci/Amber | go+asm | 仅针对 Windows | Reflective PE packer. 将PE文件打包成reflective payloads 可以无文件执行 像shellcode一样加载并执行自身 |
avet | C+shell+python | 仅针对Windows | AntiVirus Evasion Tool 运行于kali2 |
Veil-Evasion | shell+C+python2.7 | 可针对Windows exe | generate metasploit payloads that bypass common anti-virus solutions |
GreatSCT | python3 | / | / |
ASWCrypter | shell+python | / | An Bash&Python Script For Generating Payloads that Bypasses All Antivirus so far FUD.实测无法过360ZhuDongFangyu |
tokyoneon/Armor | shell | 仅针对MacOS | Armor is a simple Bash script designed to create encrypted macOS payloads capable of evading antivirus scanners. |
csvoss/onelinerizer | python | / | 把Python代码给编译成一句话的形式工具 Convert any Python file into a single line of code. |
- "无文件"的优势 - 不落地 样本难以被捕获
名称 | 描述 | 针对目标 |
---|---|---|
无文件攻击的现实实例FCL(Fileless Command Lines) | 包括:恶意软件名称/执行过程/恶意命令行/正则表达式用于检测/技术报告/沙箱报告链接/笔记 | windows |
渗透利器Cobalt Strike - 第2篇 APT级的全面免杀与企业纵深防御体系的对抗 - 先知社区
简介:使用Armor工具生成加密的payload,MacOS下的one_liner从远程地址获取加密payload,解密,执行。
参考作者介绍Hacking macOS: How to Create an Undetectable Payload « Null Byte
原理解析
预先创建一个MacOS下可执行的常规raw payload(shell command)
顺序 | 攻击机(使用Armor工具) | 网络 | 靶机 |
---|---|---|---|
1加密 | 使用密钥对payload进行加密,得到enc.txt | 攻击机的443端口与victim无通信流量 | / |
2待解密 | Ncat监听443端口 以供victim访问并获取解密密钥enc.key | 攻击机的443端口与victim无通信流量 | / |
3解密 | Ncat监听443端口 | 攻击机的443端口与victim通信该过程是https(抓到流量也无法得到解密密钥) | 执行enc.txt 第1步获取解密密钥:连接到攻击机的443端口 获取解密密钥enc.key 第2步:解密成功并执行 常规raw payload(shell command) |
4结束 | Ncat结束监听443端口 用于密钥传输的端口(默认443)只会被连接1次 传输完密钥后立即关闭 | 攻击机的443端口与victim无通信流量 | / |
- 实现效果
- 流量分析 流量分析无法获取密钥(https通信)
- 终端安全 杀软无法解密得到加密命令的含义(无密钥)