系统分为4个特权级,从RING0到RING3,RING3即用户模式,RING0即内核模式。windows采用消息机制,来反映用户的操作,甚至是刷新一下。 消息从RING3层层递进到RING0,再由CPU来处理,然后再把结果反馈给RING3,即用户界面,我们也就看到了效果。 我们都知道系统有好多API(函数接口),那么这些API就是处理消息/事件的一个过程,但是Win32 API仅仅是微软提供给我们的一个RING3下的函数接口,这些函数实际上没有什么太大的作用,而是把要处理的事情传递给RING0来处理,这就诞生了一个表(SSDT),这个表描述了Win32 API到Native API(原生函数,即内核里面的函数)的一个映射,也就是把事件/消息传递给底层的函数来处理,也许有人要问,既然Win32 API没什么用还要它干什么呢?实际上就是检查函数参数是否非法,简单的处理事件和确认事件无误后才传递给内核函数来处理,还有就是在RING3模式下是无法直接调用RING0函数的,为什么?问微软老总去。。。我们还要知道,内核函数如果出错等待你的就是蓝屏。 主动防御是依靠程序的行为来判断是否为木马,那么就要知道程序调用了那些函数,怎么知道的呢?通过HOOK API(也就是与函数挂钩),函数一旦被调用,杀软就收到了函数调用的消息并判断是否为木马,然后再反馈给用户进行操作。好了,重点就是杀软如何来 HOOK函数。大部分杀软的主动都是采用了HOOK SSDT的方法,比如微点,HOOK的作用就是修改SSDT表里面的函数地址,在把事件/消息传递给底层函数之前跳转到杀软的程序里面,进行判断,如果没有相应的主动特征,就放行,也就是把事件/消息传递给RING0来处理,否则就不传递这个事件并结束该进程,木马也就失效了。 当然HOOK API在RING3下也是可以的,但治标不治本,这里就不多说了。主动防御也是反映了一个从系统表面到系统底层的技术提高,免杀与被杀的斗争从来没有停止过。 下面就来说说主动的绕过。主动最牛的杀软就是卡巴了,也是HOOK了SSDT,其它杀软技术大都一样。那么想要绕过主动就要避免被杀软拦截到函数的调用。前面提到了主动的拦截是通过HOOK SSDT来实现的,那么就要找出原来函数的地址并还原SSDT表即可,这种方法不用进RING0即可实现,但是后来杀软就改变了HOOK的方法,采用 Inline HOOK,也就是不修改函数的地址,仅仅修改该函数入口的前5个字节为JMP XXXXXXXX跳转到杀软的程序里来拦截函数的调用,这种HOOK方法比较新,突破的方法也就是进RING0了,通过加载一个驱动来实现,一旦进了 RING0,那么可以说,任何杀软都是摆设,但话是这么说,杀软会让你平安加载驱动吗?卡巴7可以,卡巴8就不行了,现在带有主动防御的杀软一般是都不允许加载驱动的,必须经过用户的同意才可以,好了说了那么多大家一定很失望,想突破杀软就要加载驱动,可是杀软又不让加载驱动。确实是费脑筋,但是杀软不让加载驱动也就是HOOK了LoadDriver这个函数,当然还有其它的,普通的加载不可以我们可以绕路,通过0Day可以实现,也就避免了杀软的拦截,神不知鬼不觉的跳转到了函数的地址。当然用0Day也是不现实的。这里我仅仅是说方法而已。 好了说了那么多大家肯定还是比较失望的,毕竟没有什么明确的方法来突破主动,但是主动也是有特征的(我不是说瑞星主动的字符特征),就是函数调用的顺序,杀软通过程序调用函数的顺序组合来判断是否符合木马的特征。这样我们就有了突破口,改变函数的调用形式和顺序,或者调用类似的函数来实现功能,就可以绕过主动了。还有就是,主动并不是万能了,总有漏失的地方,总有没有HOOK的函数,我们就可以大做文章了。 大体就主要说这些,希望大家不仅仅是为了抓鸡而免杀,应该提高技术,不断突破自我。 下面来说说针对杀软主动的方法: 卡巴: 1.加签名 2.修改配置信息,尽量避免敏感函数的调用 3.用OD修改程序,使之变异,尤其是敏感函数,这样应该也是可以的 瑞星:它不仅仅是是通过字符来判断的,也是拦截函数,我知道的就是注入了,在配置的时候不要勾选注入程序应该就可以了。比如鸽子。 360:通过判断是否增加了系统服务来提醒用户,可以用ActiveX启动来绕过.
过卡巴瑞星2010主动
最新推荐文章于 2024-01-09 19:59:42 发布