查看原文
其他

Webshell通用免杀的思考

The following article is from 七夜安全博客 Author 七夜安全

本文经授权转载自“七夜安全博客”公众号

作者:七夜安全

原文链接:WebShell通用免杀的思考

     

前言

良好的习惯是人生产生复利的有力助手

最近一段时间,看了很多认知方面的书,对我的改变还是很大的。

之前看待事物总是看其一角,做技术也是囿于一面,思维不是很开阔,经过不断地看书,思考,认知慢慢有了 改变,获益良多。

作为技术人员,我的建议是不要总是看技术书籍或者一心研究技术,多看看哲学,认知,效率,商业方面的书籍,可以让你看到人生多种可能性,同时反哺技术上的视野和思考模式。

现在遇到技术项目,尽量不再立即着眼于解决它,而是选择如何看待它,比如会问自己一些问题:

  • 它是否真是一个全新项目 ?

  • 它的存在是否合理 ?

  • 它的边界是什么?

。。。。。。


前面只是一些自己的感悟,如果对大家有启发,有帮助的话,那就最好不过了。言归正传,在上一篇文章中,讲解了webshell如何绕过RASP的方法论,并根据方法论设计了 webshell。

虽然有一些绕过方法,但RASP依然是webshell检测中最强的存在,如果再和HIDS联动,那些绕过方法在数据捕获层面都会失效,纵深防御不是说说而已

今天说的承接上文,依然是webshell的绕过,不过不叫绕过,叫免杀。对付的不再是RASP(实时检测手段),而是其它离线的检测手段,目的是以攻促防。

这次讲的内容主要是方法论,我给的是思考方法,而不会直接给一个通杀的webshell,因为没有意义。如果你还在追求这种浮躁的方式,只能说还是没脱离“脚本小子”的范畴。

        

        


一.思考

检测方案的边界

在绕过任何一个检测引擎之前,思考是很关键的,尤其是新手。新手特别喜欢的干的是 找一大批样本上传,看看能不能命中一个,这其实对你是没有任何提高的。首先要做的是思考,下面我画了一张思维导图,理了理思路。 

思考过程分为了四个部分,层层递进,应用在其他方案绕过上,也是可以的,接下来我会根据这四个部分进行解释。

二.认知

知己知彼

任何一个检测引擎的大部分检测手段,都是已知的,就算有创新,那毕竟是很少的一部分,因此首要的入手点是熟悉已知的主流检测方案,对已知的检测方案至少有一个原理性的了解。在之前的《Webshell检测能力进化笔记》 一文中,简要概括了主流的检测手段及缺陷:

1.基于正则文本特征检测

初期对付webshell基本上都是这种方案,根据已知webshell使用的函数和参数,使用正则表达式制定相应的黑规则。

但是正则文法表达能力不足,加上webshell语法灵活,很容易通过混淆绕过这种方式。

2.基于统计特征的文本检测

之后为了对付混淆,人们把视野放到了统计学上,通过统计文本熵,字符串长度,特殊符号个数,重合指数,压缩比等信息制定告警阈值,在对付混淆上有一定的威力。之后随着机器学习的兴起,阈值设置就交给了算法。

但是这种方式着眼于全局,无法顾及局部细节,将混淆的恶意代码插入到正常文件中,基本上就失效了。

3.基于AST的语法特征检测

为了弥补统计特征的不足,进一步深化,进行语法检测,关注于每个函数和参数,这种方式精确,误报较少。但是对于PHP这种动态特性很多的语言,检测就比较吃力,AST是无法了解语义的。

4.动/静态符号执行

其实本质上是数据流分析, 如果用户可控的外部变量进入特殊的函数,那么我们就可以判定这个样本的危险系数很高。举例:

  1. <?php

  2. $func = $_REQUEST[i];

  3. $arr = array('test'=>1,$_REQUEST[j]=>2);

  4. uasort($arr,$func);

对数据流进行跟踪分析的话,就会得出如下有向图,这种检测方法覆盖率高,误报少。

数据流分析分为静态和动态两种,静态分析通过语法树遍历的方式,对数据流进行跟踪,如果做的好的话,可以对混淆的变量和函数进行还原。动态分析不用做变量还原,但难度更高,不过基本原理是一致的。


5.机器学习/深度学习 

这个不是很主流,也算一种辅助手段,特征主要来源于opcode序列和文本分词,遇到问题和2类似。

6.沙箱

沙箱在这方面检测就比较鸡肋了,输入参数未知,沙箱是很难发现威胁的,只是作为一个补充。


这几种检测方案都属于离线检测方式,除了他们自身解决方案的缺陷外,还有一个本质的缺陷就是信息不完备,我们给webshell传参,它是无法得知的。正是因为这个原因,以上检测方案的效果,从原理上是弱于RASP的。(RASP的性能如果做的很高就好了,就不需要其他的了)

三.“敌人”

在了解主流的检测方案后,并不急于设计免杀webshell绕过引擎,你需要了解你的对手,这个时候需要进入探测阶段,是非常重要的一环。我一般从五个方面着手,包括覆盖率,误报率,容忍度,验证已知手段,猜测未知手段。

覆盖率,误报率,容忍度

我一般会准备一些常见的webshell,但是种类必须不同,测试一下引擎的覆盖率。

接着制造一些有敏感函数,但是无恶意功能的样本,测试一下引擎的误报率。例如:

  1. eval("echo 2323;")

最后,找一些正常样本,然后不断添加敏感函数和参数,测试一下引擎的容忍度。

验证已知手段

已知手段主要分为两大类,静态和动态,每种方式又包含很多小类,如何验证具体手段属于静态或者动态中的哪一个?

选择一个普通的webshell,不要一直换,然后对这个webshell的函数名,参数名进行逐步隐藏,一一验证已知的手段。

  1. <?php echo shell_exec($_GET[‘cmd‘]);?>


猜测未知手段

既然是猜测,那就看造化了,还是建议不要一直换webshell,只会让你混乱,而是逐步变形,有创新手法也不会离开静态和动态的圈子。

四.“磨刀”

通过上面的手段,对引擎有了个基本的了解,下面要积累自己的力量,磨刀霍霍了。

公开免杀方法

这时候要去涨涨经验了,看看其他人是如何绕过各种检测引擎的,他们对付的是哪种检测手段,需要大家自己总结。我给大家准备了一下资料,足够大家学习一波了。

https://xz.aliyun.com/t/7151 https://xz.aliyun.com/t/3959 https://klionsec.github.io/2017/10/11/bypasswaf-for-webshell/ https://blkstone.github.io/2016/07/21/php-webshell/ https://www.cnblogs.com/littlehann/p/3522990.html

只是看文章还是不够,去github上找一下大家贡献的webshell,看看他们的免杀有什么可取之处。 


php手册

php手册是最权威的php资料,中文版网址:https://www.php.net/manual/zh/。

 

php的语法灵活,内置函数丰富,大家通过php手册可以随时查询自己想要的功能。


练手

1、http://www.d99net.net/down/WebShellKill_V2.0.9.zip

2、百度WEBDIR+

https://scanner.baidu.com/ 

3、河马

https://www.shellpub.com/ 

4、Web Shell Detector

https://github.com/emposha/PHP-Shell-Detector

5、CloudWalker(牧云)

https://webshellchop.chaitin.cn/

https://github.com/chaitin/cloudwalker

6、深度学习模型检测PHP Webshell

http://webshell.cdxy.me/

五.精准打击

对引擎也熟悉了,对免杀的知识也有了积累,下面就可以根据缺陷和问题进行降维打击了。一般情况下,很多人绕不过的时候,有时候会问能不能给点思路,引擎把XXX给封锁了,遇到XXX就会告警。

其实你发现的问题就是解决问题的方向

举个例子:

  1. <?php

  2. system("ls");

样本中出现system就会报警,那你要做的就是根据你发现的问题,将system隐藏掉。可以变量替换,可以字符串拼接,旋转加解密。

  1. <?php

  2. $a='sys'."tem"

  3. $a("ls");

这时候还报警的话,那就可能会有静态变量还原,动态分析的可能。这个时候再变化,自己写函数生成 system,同时需要外部变量的参与才行。

  1. <?php

  2. $a='sys'.$_GET[i];

  3. $a("ls");

就这样按照发现的问题,结合现有手段,一步一步变换。


最后

感谢青藤团队的邀请,【雷火引擎】公测赛,欢迎大家来对抗。同时,腾讯安全平台洋葱团队开发的WebShell检测引擎下个月也会进行众测,以攻促防,欢迎大家参与。具体详情可关注TSRC和青藤云安全官方微信公众号。



即刻挑战


诸神之战来袭,百万赏金,挑战极限,你会是最耀眼的白帽英雄吗?扫描二维码立即报名!


-完-




其它精彩阅读:

我写下了开头,这次却真的猜不到结局

腾讯lake2 :Webshell检测的前世今生

诸神之战来袭,看顶级白帽眼中的Webshell大杀器如何接招?

百万赏金等你来拿:青藤联合22家SRC共同举办『雷火引擎』公测活动

解决安全顽疾:“WebShell强对抗检测平台”开启定向邀测......

更多关于ATT&CK:

基于ATT&CK框架的红蓝对抗,有效提升检测能力

最具影响力的三大安全架构:零信任、ATT&CK、自适应安全

一文看懂ATT&CK框架以及使用场景实例

细述MITRE ATT&CK框架的实施和使用方式


关于青藤云安全

青藤云安全以服务器安全为核心,采用自适应安全架构,将预测、防御、监控和响应能力融为一体,构建基于主机端的安全态势感知平台,为用户提供持续的安全监控、分析和快速响应能力,帮助用户在公有云、私有云、混合云、物理机、虚拟机等多样化的业务环境下,实现安全的统一策略管理,有效预测风险,精准感知威胁,提升响应效率,全方位保护企业数字资产的安全与业务的高效开展。




QINGTENG CUSTOMERS

他们都在使用青藤




-政府机构-

外交部 | 公安部 | 交通运输部 | 水利部 | 新华通讯社 | 中央广播电视总台 | 国家信访局 | 国家药品监督管理局 | 中国地震局 | 中国日报 | 人民网 | 北京市公安局 | 广东省公安厅 | 青海省卫生健康委员会

-金融行业-

中国农业发展银行 | 中国银行 | 交通银行 | 中国人寿 | 中国平安 | 中国银联 | 招商银行 | 兴业银行 | 中信银行 | 光大银行 | 中信证券 |  国泰君安 | 广发证券  | 安信基金 | 博时基金 | 华融资产 | 泰康资产 | 江苏银行 | 宁波银行

-运营商-

 中国移动 | 中国电信 | 中国联通 

-大型企业-

国家电网 | 中国一汽 | 中国储备粮管理集团 | 中国化工 | 中国煤炭地质总局 | 上汽集团 | 上海机场 | 科大讯飞 | vivo | OPPO | 吉利控股集团 | 顺丰速递 | 韵达快递 | 中通快递 | 百胜中国 | TCL | 深圳航空 | 九阳股份

-互联网-

京东集团 | BiliBili | 斗鱼 | 医渡云 | 游族 | WiFi万能钥匙 | 新东方 | 团车网 | 途牛网 | 映客 | 猎豹移动 | 陌陌 | 春雨医生 | 好大夫在线  | 天极网 | 智联招聘 | 51Talk


-互联网金融-

陆金所 | 大智慧 | 度小满 | 91金融 | 玖富 | 易宝支付 | 宜信 | 人人贷 | 普惠家 | 有利网

 点阅读原文,即刻参与【雷火引擎】公测赛


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存