近期遇到了次 PHP+360
全家桶的环境,尝试了使用处理过的桌管工具、CS
样本免杀、以及 DLL劫持
等手法均未成功上线,最后通过 php
写的小脚本结合 Burp
实现了内网资产扫描,反思了下作为一个德智体美全面发展的新时代安全人,应该 remark
一下(本文仅针对 PE样本
免杀做研究,与实战思路不同)
杀软识别
上手 tasklist /svc
然后,推一下团队的在线杀软识别网站,确实挺不错的 (手动狗头)
http://42.193.251.15/tasklist.php
有研究的一般都去针对性过杀软了,没研究的一般提前囤点 loader
也能冲
其实这就是个知己知彼的事,比如x绒
、df
、诺顿
可能就对 powshell
检测能力一般,360
就比较难刚
同理,杀软针对静态样本主要就是扫描一些样本侧的特征字符串,文件 hash
,针对运行态样本就是利用比如 yara
做内存查杀,针对行为做标记分析等等。当然,样本被标记之后大概率就被拿走了,被杀软上传云查或者人工分析
静态查杀
样本在静态上最明显的两个特征就是 shellcode
和一些 Winhex/IDA
打开后的硬编码字符特征,其次就是针对程序流混淆,扰乱 杀软/人
的静态分析,还有一些比如资源上的小 tips
,比如文件后缀加空格才能绕过某杀软,远古时期 360图标
也能免杀。这里我简单列举一些常见对抗手法和部分案例。
shellcode特征处理
这里的 base64
可以替换为 异或/AES/DES/佛论禅/八卦
等等加密手法,也可以自己实现一套加密逻辑,同时可以在首尾填充垃圾字符。
测试了下 base64
效果不太好 自己实现了一套国学加密算法,效果还阔以。当然,如果环境允许,分离免杀的效果肯定是比样本里进行各种 shellcode
加密混淆效果要好的。
特征码修改
直接使用 CCL+winhex
进行特征码修改即可
-
加壳/花指令/签名
-
略
动态查杀
一般来说,杀软会通过对 ntdll
的关键 API
进行 hook
,实现对程序的 API
监控,同时在内核中注册一系列的回调函数实现对行为的监控。所以这里针对动态查杀可操作空间相对就比较大了,涉及杀软程序的云查、ASR
、行为标记、通信流量等等,AMSI
也会拦截很多恶意样本。
云查杀
针对云查杀应该 99%
的人都是通过反沙箱技术实现的,个人也在前前东家做过这方面的研究,针对国内沙箱或多或少也都专门提过一些特征,比如 xx
的 host
文件将 127.0.0.1
指向自家域名,xx
的时间加了几十倍速,xx
的杀箱的 Office
全家桶。
当然也有些强特征比如内存大小,虚拟服务,开机时间、临时文件数量等等,个人常用就是把特有特征加上之后,针对强特征生成一个五元组,符合三个以上的特征则进入 sleep
通信流量
C2profiles
可以修改一些流量特征,甚至还能修改 beacon
运行的部分内存特征,手动修改一个自己用的 profile
可以避免比较初级的流量查杀,同样的,使用域前置、域借用、域隐藏也能比较好的在流量上隐藏特征。
内存特征
这几年大家都玩烂了的 syscall
,以及各种各样的系统级的 syscall
函数,比如 NtCreateThreadEx
,各种各样的获取函数地址的方法 loadlibrary
、loaddll
、mustloaddll
等等。
目前应该有一部分杀软厂商解决了这部分的检测手段,相信目前没有未来也会有。这里可以强行对抗别人写好的 yara
检测规则,路子野一点也可以像针对 AMSI
的降级绕过一样,直接加驱动 kill
杀软或者 EDR
启发式查杀
如果有分析过一些杀软应该知道很多杀软程序都会有一套自己的加减分的权重判断恶意的机制,这就是启发式查杀,比如分析某数字杀软会看到其在 system
中加载的一个叫做 Fsxxx.sys
的驱动,其对进程、端口、文件、注册表进行了相应监控
在文件落地后也会有杀软挂起相应的 dll
文件,甚至 wscript
程序运行也会让该杀软挂起一个进程。因此在我们拿到权限之后尽量使用类似 BOF
实现命令执行同时注意避免敏感操作。
总结
(中途去参加了一场线下赛导致文章现在才编辑好,结果当然是日常发挥失常)
针对杀软绕过这里其实还有好多知识点没有提,一方面是因为免杀手法本来就是千人千面,最后马子好用就行,另一方面这是一个比较大的框架,涉及的技术知识点太多了,而且这方面技术需要与时俱进,就像新出的 lolbin
没多久就G了,免杀技术一直以来都是见光死,希望这篇水文能给 reader
带来一些思路借鉴。
原文始发于微信公众号(晴天组织):聊聊PE文件免杀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论