UUID免杀可行不

极客

UUID免杀可行不?我折腾了三天三夜,说点大实话

大家好,我是老刘,一个在安全圈摸爬滚打了七八年的老油条,今天想跟你们聊聊一个最近被问爆了的话题——UUID免杀可行不?

UUID免杀可行不

先说结论吧,免得你们说我吊胃口:可行,但没你想的那么神。

为啥突然聊这个?

事情是这样的,上周群里有个小兄弟私信我,说他在某论坛看到有人吹UUID免杀,说什么“过所有杀软”、“永不失效”,问我是不是真的,我当时就笑了,这味儿太熟悉了,每年都有人换个壳子出来割韭菜。

但笑归笑,我还是决定亲自下场试一试,毕竟咱不能光凭经验拍脑袋,对吧?于是花了整整三天,各种环境各种测,今天就把结果摊开来跟你们唠唠。

UUID免杀到底是个啥原理?

先给不太懂的朋友科普一下,免得后面听懵。

UUID是啥?就是那种 550e8400-e29b-41d4-a716-446655440000 格式的字符串,本来是用来做唯一标识的,那它跟免杀有啥关系呢?

简单说,就是有人发现,可以把恶意代码拆散、编码,然后塞进一堆UUID字符串里,运行时再通过特定的API把这些UUID还原成原始shellcode,最后执行,因为UUID字符串本身看起来就是一堆正常的字符,静态扫描的时候很容易蒙混过关。

听起来是不是挺巧妙?我一开始也觉得有点意思。

我实际测试的结果

好了,重点来了,我拿了一个常用的C2框架生成的payload,分别用传统方式和UUID方式做了对比测试,测试环境是Windows 10 + 某数字杀软 + 某绒 + Windows Defender,都是最新病毒库。

第一轮:静态扫描

UUID方式确实过了某数字和某绒的静态扫描,Defender也放行了,这点得承认,UUID字符串本身没有明显的恶意特征,签名匹配不到。

第二轮:动态行为

好戏来了,当payload开始执行,调用VirtualAlloc分配可执行内存、调用CreateThread创建线程的时候——三家杀软全部报警。

是的,你没看错,全部。

为啥?因为杀软早就不是只看文件长啥样了,现在主流杀软都是行为监控+内存扫描+云端联动的组合拳,你UUID编码得再花哨,最后总得还原成shellcode吧?总得分配可执行内存吧?总得执行吧?这几个动作一出来,跟脱了裤子放屁一样,该抓还是抓。

第三轮:换姿势再试

我不死心啊,又试了UUID+异或加密、UUID+API哈希、UUID+回调函数执行这些组合,说实话,效果确实好了一些,Defender和某绒能过,但某数字还是稳如老狗,而且整个过程复杂度飙升,写代码的时间够我喝三壶茶了。

所以UUID免杀到底可行不?

我的答案是:作为免杀链条里的一环,可行;当作万能钥匙,扯淡。

UUID编码本质上只是一种混淆手段,它能帮你绕过静态特征匹配,但绕不过行为监控和内存扫描,现在的杀软厂商又不是吃干饭的,人家工程师年薪百万,你一个UUID就想通杀,是不是有点不尊重人了?

而且我特别烦那些把UUID免杀吹上天的文章,动不动就“永久免杀”、“过一切”,你信他个鬼,真要有这技术,人家早闷声发大财了,还轮得到在论坛发帖教你?

给想尝试的朋友几句掏心窝子的话

  1. 别指望单一技术,免杀是个系统工程,UUID、加密、混淆、反射加载、白利用,得组合着来。
  2. 动态行为才是关键,与其在静态特征上死磕,不如研究怎么让行为更隐蔽,比如合法进程注入、系统调用直接调用这些。
  3. 持续更新,今天能过不代表明天能过,杀软一天更新好几次,你得跟着迭代。
  4. 别碰违法的东西,技术是中性的,但用在哪里得想清楚,我写这些纯粹是技术探讨,别拿去干坏事。

最后说两句

那个问题——UUID免杀可行不?可行,但别神化它,它就像是你工具箱里的一把螺丝刀,有用,但你不能指望一把螺丝刀就盖起一栋楼。

技术这东西,踏踏实实研究比啥都强,那些天天喊着“一招鲜吃遍天”的,要么是骗子,要么是傻子。

好了,今天就唠到这儿,有啥想法欢迎评论区交流,我看到都会回,觉得有用的话,转发给身边还在踩坑的兄弟,别让他们被那些吹牛的文章忽悠了。

咱们下期见!


本文仅供技术交流学习,请勿用于任何非法用途。

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]