远控免杀专题(74)-基于Go的条件触发式免杀

2022-08-24 5,013

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/R**/多重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


本文作者:TideSec

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/186054.html

Tags:
评论  (0)
快来写下你的想法吧!

TideSec

文章数:112 积分: 185

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号