Webshell Bypass Windows Defender
Windows Defender绕过
0x00 绕过之前做的事
绕过webshell查杀的方式有很多种,避免使用常见的类和方法,避开常见的高危字符串,增加随机字符代码等等。本次绕过主要基于对静态查杀的理解:
(1)Defender大部分情况下还是基于特征识别,也就是说,可以通过确定特征的位置,在加减字符串,替换危险函数和类进行绕过检测。
(2)Defender有内置Sandbox,个人猜测分析,认为Sandbox更多应该是操作系统调用exe可执行文件层面的动态监测和拦截,而对于webshell,本身很难直接基于操作系统直接运行起来(需要对应的web环境),但如果微软选择直接注入进程的方式(举例)做监测,这样的成本应该很大,而且误报应该回很高,因为在操作webshell的时候,在操作系统看来就是一个java,或者php或者asp.net相关的进程在操作。
0x01 Defender本地查杀API
windows的官网提供了查杀的EXE调用接口
https://docs.microsoft.com/zh-cn/microsoft-365/security/defender-endpoint/command-line-arguments-microsoft-defender-antivirus?view=o365-worldwide
因此可以通过调用命令行进行Fuzz&Bypass内置的特征规则。当然,人工也可以,但是如果在面对多行代码进行fuzz&bypass,工作量很大。因此需要一个自动化工具调用做监测。于是写了一个小工具进行fuzz feature。
工具的原理是:
(1)向前扫描最短字符串,直到告警为止
(2)取出(1)中的最短字符串,从最后开始倒数扫描
(3)最终确定最短范围字符串。
(4)以";"号为分隔符,做代码切割,并将得到的多段代码进行删减组合(以正顺序的方法),比如123,可以有:1,2,3,12,13,23这几种方式确定最终的代码特征。
0x02 最后改进
(1)在上一小节的第4个步骤中,可能存在函数内嵌套调用如a(b(c()))后续会为了确定真正的特征,可能需要做一些简单的提取(不知道算不算语法或者词法分析,个人认为严格来说应该不算)。
(2)如果特征散布在各个角落,将会使得确定的特征范围过大,因此可以通过多次反复运行脚本进行绕过fuzz。