一种绕过现代杀软主动防御功能的思路
一种绕过现代杀软主动防御功能的思路
因为杀毒软件与病毒的特征及启发的对抗及反对抗已经非常激烈了.每次的病毒库升级.都需要很大的成本.所以大量的厂商采用了"主动防御"技术
主动防御技术就是通过对程序行为链的监控来判断程序是否有害.主防一般分为两种:
1.传统hips模式.此时杀毒软件不对程序否有害进行判断.只是将"可能有威胁"的动作报告给用户.由用户判定;
2.综合主动防御模式,只是将"可造成无法挽回损失"的动作报告给用户.而其他动作通过主防日志记录.并通过动作序列来进行判定是否有害.当判定有害时.通过主防日志将病毒行为逆向操作来补救.
目前看来.主动防御技术在很大程度上已经是完美的了.但是因为hips的单步模式误报很大,而通过多次动作序列来判定程序是否有害的模式漏报很多(如一些网购木马).
所以.大量的主动防御软件.均采用了"白名单技术与传统hips相结合"的方式,这种方式不仅可以完成很多软件的信任(不会被误报),还可以对不认识的(非白名单)软件进行多次阻拦
虽然这可以非常好的防止病毒渗透.但是这种模式有一个非常显而易见的劣势.就是对白名单维护人员的要求很高.并且一般需要层层把关.当然现在优秀的此类杀软均采用"云"技术,来实时更新维护最新的白名单
不过.即使采用了云技术.我们也可以针对白名单维护的弱点来对杀软进行攻击,以达到免杀杀毒软件从而在系统中驻留的目的.
来说说此类免杀的目的.我们的最终目的是将一个可以执行恶意代码的文件加入到杀软的白名单.并且该文件不会被自动化处理掉(自动化的云可以将主动加载恶意pe文件的白名单文件从白名单中剔除)
那么,说了这么多,方法呢?
其实这种思路的攻击已经持续很久了.比如最近很知名的"白加黑"模式.就是通过一个存在dll加载漏洞的在杀软白名单的exe程序对杀软的检测机制进行攻击.以达到绕过主动防御检测的目的.
但是现代主动防御技术.还对大多数的load方式进行了过滤.也对进程内存进行了检查.比如重复加载同名dll等利用特征出现时(对系统dll的利用.如lpk.dll).即可认为此文件已经被恶意dll文件挟持了eip,也就说程序以后的运行过程是不可知的,不可信的.
而对于本身存在内部dll的加载漏洞的程序似乎想不到什么比较好的应对办法.不过显而易见的是.360对其找到了针对办法.
通过以上的了解,我们知道现在杀软对白加黑的解决方法.基本都是通过内存存在不可信模块的方式来检测的,那么我们从而得到一种办法.就是通过数据文件来完成对杀软的欺骗
具体流程举例:
设计一个exe文件.使其加载12.dll,而12.dll需要被设计为需要加载目录下的test.uuu文件.
test.uuu文件是以zip加密压缩过的.在 test.uuu文件的头部加标记.标记后面跟异或过的密钥,同时末尾加编号.当编号为1时则表明跳入test.uuu文件解密出来的代码中执行(在跳入前需要解除dep)
还有一种办法.就是通过意外的溢出.模拟自己软件被攻击.比如在dll中配置一个变量.然后检查末尾的标记.当符合时.关闭dep保护,然后通过内存复制的方式将test.uuu的解密后内容拷贝进去.以完成一次溢出.(记得关闭gs)
当然了,以上条目中最重要的一点就是.设计的EXE文件必须具备一个正常的功能,并且该功能有足够的理由开机启动.同时12.dll文件也必须本身具备一个功能(如数字签名校验功能.可信列表通过目录下test.uuu来获取.每次读取前先校验test.uuu的云地md5.当MD5不同时.则从云端同步.这样即可完成一次越过杀软检测)
当你完成了以上的条件后.你将你的软件发给杀毒软件厂商做安全验证.一般很容易通过(此时通过云端发布正常的test.uuu文件),然后通过其他的抓鸡手段将自己的软件发布到大量的机器后.将云端的md5表和test.uuu文件修改为包含恶意代码的文件即可完成
不要以为此类攻击与我们很遥远,要知道当各种依靠成名软件的漏洞都被封死后.病毒作者只有一条路可以走.就是自己制造带有"正常漏洞"的软件.然后自己利用自己的漏洞.
这类攻击之所以不好防御(我想到的只是见一个处理一个),就是因为你没有任何理由指责发布公司,因为对方的一句"我们的服务器遭到攻击",即可免除责任(金山作为杀软攻击都成功被攻破过服务器,不要说些小软件的服务器了)
还有一种办法是利用其他厂商软件的云指令完全信任漏洞:有很多厂商对自己服务器下发的指令并没有做长度检查.是"完全信任"的.那么,通过修改hosts文件,或挟持dns来让域名指向攻击者构建的指令站点,也可以利用其他厂商的内部漏洞来进行攻击.
对于此类攻击我想到的办法只是:一般没有软件会主动关闭自己的dep保护,监控好dep即可
但是不保证本身函数内通过_asm nop的方式扩充了很大一块可执行区域,通过将shellcode植入到已经预设好的函数中运行,也无法保证恶意软件本身就是通过申请"可执行内存"来执行恶意代码.
