一次性付费进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
互联网公司Web类的应用服务占较大比例,在此攻击面上的攻防入侵场景中占比非常高,几乎Web安全成了攻防对抗的代名词。而在Web入侵中最重要的一个环节就是“getshell”,也就是放置Web后门webshell。那么Web安全能力中一个最重要的指标就是webshell检测能力。以至于很多中小型安全产品,从诞生之初就以webshell检测能力作为核心任务。
webshell通常是一个文件,那么静态文件的扫描检测是常见做法,但由于攻防技术的对抗发展,静态文件的变形越来越多,已不足以满足检出率要求,于是出现了流量检测、运行时检测等方案。
1、静态检测
静态文件检测是常规做法,在Linux系统里,一个webshell检测模块运作流程如图1所示。
图1 webshell检测模块运作流程
文件静态扫描基于黑名单特征字符串,以及几个“高危函数”出现概率的组合,通常一个业务CGI文件,几乎不可能存在文件读写、命令执行、代码执行、DB操作文件上传几类函数同时出现的情况。
对于只会使用工具的普通scriptkids来说,静态检测已经够用,但对稍微经验老道些的攻击者就力不从心了。特别是php webshell,由于php语法变化多端,变形webshell检测难度极大。
tiny php shell一句话webshell:http://h.ackack.net/tiny-php-shell.html<?=($_=@$_GET[2]).@$_($_GET[1])?>
Non alphanumeric webshell不含alpha字符的webshell:http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/<?$_="";$_[+""]='';$_="$_"."";$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");?>
从代码上看,特征字符串方式的检测真的是绝望了。于是乎也有从统计学角度的检测方案,同样观察上述代码,不难发现特殊字符的出现比例明显过大,同时根据对自身业务代码计算信息熵,必定能区别恶意代码。
或许上述有些过于学院派,大家未必能有直观的理解。根据实践来看,在大型互联网企业中,由于各业务部门代码风格多变,特别是汉字在代码中对信息熵的采集比对分析影响特别大,不是特别推荐。那么还有没有其他“简单粗暴”的方案呢?答案是肯定的!
安全圈往往会流传这样的一段话,“三分技术,七分管理”,虽然不能简单苟同,但是技术结合“管理”手段,确实能带来事半功倍的效果。一个攻击者写入的webshell和业务CGI文件其实有太多的不同,假设您的企业有严格的发布管理流程、运维治理环境的话,好坏CGI文件的辨别更是轻而易举。这里列举可使用的维度。
表1列举了常见可利用的业务特点,其实当您分析清楚业务环节的特点之后,可以指定出更多的检测维度。
表1 可用维度
我们的webshell检测流程如图2所示。
图2 webshell检测流程改进
2、流量监测
本地静态扫描方法至少需要一部分开发工作量,如果仅有accesslog可以用,或者能够获取到网络流量的时候,从http请求记录中也可以挖掘可能存在的webshell,以及webshell攻击行为。
对于一些常见的webshell来说,对于webshell的http请求应该是固定的,包括“cookie”,post data,功能函数参数等等,如图3所示。
图3 webshell请求特征(cookie&post data)
这些细节,对于scriptkids来说不会想到甚至没有能力去修改,对于检测常见webshell非常好用。
如果有一定CGI代码开发能力的攻击者,从静态代码和http请求特征检测就不那么好使了。解决这个问题之前,首先回顾一下入侵场景。
如图4所示,从用户对网站的访问行为以及记录上看和攻击者是有明显区别的,表2逐一列举。
图4 正常和异常URL访问行为差异
表2 观察结果
根据上述各维度的对比不难看出黑客对webshell URL访问行为和正常的用户对网站业务CGI访问的区别非常大。对此类检测方案有一个webserver日志分析脚本https://github.com/xti9er/LogForensics/blob/master/LogForensics.pl,利用此日志分析脚本,从大量用户访问中抓取可疑的记录,并根据第一次抓取的特征IP或URL继续跟进,抓出可能的webshell和攻击请求流量。流量分析挖掘异常攻击请求如下所示:
微信公众号:计算机与网络安全
ID:Computer-network