远控免杀专题(74)-基于Go的条件触发式免杀
2020年初,从网上搜集了多种免杀工具和方式,汇总整理了远控免杀专题文章的工具篇、代码篇、白名单篇等,共70余篇文章。现时隔一年,计划把这个系列继续补充一些,内容也都是来自互联网,汇总到一起只是方便大家查阅参考,如有侵权请联系删除。有些免杀方式已经效果一般,但很多思路还是值得去学习的。
免杀专题文章及工具:https://github.com/TideSec/BypassAntiVirus
免杀专题在线文库:http://wiki.tidesec.com/docs/bypassav
0x00 引用说明
本文内容参考节选自以下资料:
bypassAV
项目地址:https://github.com/pureqh/bypassAV
条件触发式远控:https://pureqh.top/?p=5412
免杀基础入门篇:https://xz.aliyun.com/t/10369
0x01 关于GO的加载器
现在很多免杀都是基于Go来做免杀或者使用Go来写加载器,比如之前在 32.远控免杀专题(32)-Go加载免杀-3种方式(VT免杀率7-70) :https://mp.weixin.qq.com/s/TmfDQgRfEp2qg9SKbD0Quw
一文中,就介绍了两种基本的方式:一种是将shellcode嵌入go代码然后编译exe,一种是使用go加载器。
在里面也提到了brimstone
使用Go做的加载器:https://github.com/brimstone/go-shellcode
,算是比较早的用Go写的加载器了,而现在网上在Go加载器基础上做的各种花式免杀也已经有很多了。
今天介绍的就是pureqh
提出的一种条件触发式的免杀,本文大部分内容也都是来自他的博客和Github。
0x02 免杀测试
用Go做免杀有个较大的劣势,那就是生成的文件大一些(当然比py生成的exe要小一点的且兼容性更好),另外就是无法做到0免杀。
我先用一个Hello做个测试,代码很简单就一行。
然后发现生成的文件都是1.3M了
就这一个hello程序,在VT上都是6/67的查杀率,微软都会报毒。
为了缩小体积,一般都会用upx压缩一下,压缩后变成了530k大小,VT上是9/66的查杀率。
所以现在用Go做免杀注定了很难做到0免杀。
0x03 杀软查杀原理
本节内容引用自《免杀基础入门篇》https://xz.aliyun.com/t/10369
现在的杀软检测一般有静态查杀和动态查杀两种。
3.1 静态查杀
1.特征码识别: 杀软有自己的病毒库,里面有很多样本,扫描时会抽取扫描对象的一段特征并与病毒库里作比较,如果匹配,那就会认为是病毒。抽取的代码要有适当长度,一方面维持特征代码的唯一性,另一方面又不要有太大的空间与时间的开销。如果一种病毒的特征代码增长一字节,要检测3000种病毒,增加的空间就是3000字节。在保持唯一性的前提下,尽量使特征代码长度短些,以减少空间与时间开销。
主要扫描的有:
hash、文件名、函数名、敏感字符串、敏感api等等
2.云查杀: 云查杀的不同点在于它的病毒库是放在服务器端的,而不是本地客户端,意思是只要联网病毒库就会同步更新,这种病毒库更加强大。
3.校验和法 根据正常文件的内容,计算其校验和,定期不定期的检查文件的校验是否与正常的校验和一样。其实本质还是特征码,万变不离其宗。
4.启发式扫描:
启发式则是将一类病毒总结后,归纳其特征,其后的演变都为一类病毒,这就是启发式算法。具体启发式算法可以由杀软来定,比如可以使用机器学习把家族病毒聚类,或简单的通过使用通用型yara规则,例如文件大小小于100kb,且没有图标则可以识别为病毒,以此达到查杀病毒。
3.2 动态查杀
动态查杀指的是程序在运行的过程中执行了某些敏感操作,导致杀软查杀,目前主要用的是沙盒检测,沙盒查杀也叫启发式查杀,通过模拟计算机的环境执行目标文件再观察特征行为。
沙盒模拟的常见特征:
特征 | 原因 | bypass |
---|---|---|
内存较小 | 不影响计算机正常运行 | 检测计算机内存是不是很小(判断是否是真实计算机) |
时间较快 | 沙盒内置的时间速度比现实世界要快,提高查杀速度,沙盒中的时间流逝很快 | c语言函数判断1s是否有1000ms/判断是否是utc时间 |
进程或文件不完整 | 减少杀毒软件运行时对计算机的消耗 | 判断操作系统进程的个数/调用不可能存在的文件 |
io设备缺失 | 鼠标键盘等事件大部分沙盒都没有 | 检测驱动 usb等/判断鼠标的移动速度等 |
其实主要就是找一台真实的计算机和沙盒的区别到底在哪,找到那些真实的计算机具有而模拟的计算机无法具有的特征,进行绕过即可,思路很简单,也很广,自己拓展会发现更多有意思的点。
0x03 杀软沙盒测试
本文的条件触发式免杀就是对程序执行条件进行控制,这样可以避免沙盒的检测。
我先写个简单的url访问,扔VT上看一下沙盒会不会做联网检测。
额,这个查杀率比上面的helloword稍好点。
不过dnslog上显示还是有两个沙盒允许联网的。
0x04 条件触发式免杀
条件触发式免杀就是给程序设置一个执行条件,这个执行条件可以是一个人工添加的参数,也可以是访问某个url资源,只有当满足这个条件时才会执行后面的语句,从而规避杀软沙盒的部分检测。
我这就直接采用pureqh
的github上的方法,先把shellcode用Python脚本处理一下。
在不使用条件触发的时候测试一下免杀,VirusTotal上10/71。
4.1 参数触发
使用参数触发,要求比如输入某个参数,不然不执行。
要求必须是加参数 -tide
才能执行。这里你也可以使用flag
库解析参数,不过那样生成的程序会增大0.2M。
VirusTotal上9/71。
4.2 url检测触发
采用pureqh
提到的http验证方式,访问一个内网web,能访问到才执行shellcode。
因为使用了http包,所以生成的程序马上从1.3M到了4.2M。
VirusTotal上7/70。
不过这样直接执行的话还是会被360查杀。
4.3 简单的伪装
给生成的木马加了个伪签名、又加了个360的图标。具体可以参考https://github.com/TideSec/BypassAntiVirus
中的《远控免杀专题(68)-Mimikatz免杀实践》。
发现这样就能直接过360、火绒和defender了。
4.4 webshell下执行
使用phpstudy搭了个php环境,假设已经获取了webshell权限,在目标服务器装有360、火绒和defender的情况下,尝试执行上面做过免杀的小马。
不过因为是执行用冰蝎执行exe文件,所以360直接拦截了。
退出360后,再次执行,火绒和defender没有预警,可正常上线。
这里需要注意的是x64位的程序可能无法执行,这和目标web服务器的架构有直接关系。我也是换了x86的shellcode,重新编译的x86的程序才正常上线。
0x05 在线免杀平台
基于上述原理,我在潮影在线免杀平台 http://bypass.tidesec.com/ 上添加了go-exe模块,对应就是使用了这样方式。
平台使用帮助:https://github.com/TideSec/Papers
主要使用了随机变量、AES/RC4/多重Base64/异或算法、伪造签名、随机图标等方式,在本地测试的时候效果还是不错的,但发现放到在线平台后,可能样本被上传的比较多,免杀效果就比较一般了。但目前来说过火绒和360卫士还是没有问题的。
0x06 参考资料
免杀专题Github:https://github.com/TideSec/BypassAntiVirus
免杀专题在线文库:http://wiki.tidesec.com/docs/bypassav
bypassAV
项目地址:https://github.com/pureqh/bypassAV
条件触发式远控:https://pureqh.top/?p=5412
免杀基础入门篇:https://xz.aliyun.com/t/10369
微信扫码关注该文公众号作者