免责声明
文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。
本文主要针对CobaltStrike(原生)在正常环境上线非钓鱼形式现状,现代杀软对于静态层面可以说是比较放松,这里我单独排除赛门铁克这个静态杀神,但就大家熟悉的卡巴斯基,eset,defender,趋势,360,bitdefender等其实对于静态层没有太多的关注点,重心几乎都在行为查杀和内存查杀上,也就是我们俗称的动态查杀。(今天不讲动态查杀对抗)
静态查杀点
hash值以及二进制特征
这个hash和二进制特征依赖于杀软自身的杀软特征库,举个例子你用cs原生生成的exe或者bin文件是基本上100%被杀软识别的,也就是说原生文件有特征是被各大厂商所识别的,毕竟cs作为以前的主流c2,其特征早就被各大厂商分析透彻了。如何比避免bin文件被识别,最简单的方式就是使用rc4 或者 aes对你的bin文件进行加密。
iat表
当我们使用尤其是内存申请的 VirtualAlloc 或者修改内存属性的VirtualProtect这样的高危函数都会存在于iat表中,杀软识别到函数名是有很大概率而会认为你的loader是一个不合法程序从而隔离或者直接查杀,如何解决这个问题最简单的方法就是使用动态调用的方式去重写函数,当然这里还有一个更好的方式通过peb+apihash的方式去获取函数地址也是一个可以隐藏iat表函数的方式(这种方式就避免了动态加载时频繁的调用LoadLibrary或者GetModuleHandle)。
争议
对于是否给你的exe添加图标,以我的经验是完全不需要的,甚至添加图标会被杀软表示为特征。其次就是签名,之前用过的py盗取签名的方式其实是非常糟糕的,在实践环境中,所有这就是为什么现在基本上使用白加黑的原因,当然这里不得不说360,我个人的对抗环境是不存在360和火绒的和一些国内的杀软,但有朋友希望我做bypass 360时,我发现360基本上通杀白加黑并且system32下的dll劫持基本上都被杀,如果你改了dll名字就是正常的,这样你也就无法加载你的黑dll了,所以对于360,我最终是用loader+bin的形式bypass核晶+鲲鹏,并执行cmd操作。
简单总结一下
首先我是使用c语言进行的loader编写,在体积上更具优势,并且更接近底层,调用win32 api更为快捷,代码混淆层面除非是白加黑的情况下我才回去混淆分离式,是不混淆的(工作环境原因),言归正传对于静态的免杀只需要做好前面的两点基本上稳过静态扫描的。其实对于静态是很轻松的,但作为落地执行的第一步依旧是一个需要专注的点。
原文始发于微信公众号(泾弦安全):CobaltStrike静态免杀技术深探:突破防线的关键一步
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论