Webshell安全检测篇(3)-基于行为分析来发现“未知的Webshell”

一 “已知”or “未知”

已知的已知,已知的未知,未知的未知,这个最近安全行业也谈的比较多,目前圈内热炒的“威胁情报”,其实应该属于“已知的未知”,对本地来说是未知威胁,其实是别的地方已经发生过的威胁。真正的“未知的未知”怎么办,虽然从没发生过的威胁首次在我们身上发生的概率很小很小,但是目前好多攻击都是窃取管理员的身份或者合法用户身份去做一些貌似合法的操作,这些内部发生的“异常”行为,没有外部的“威胁情报”等数据可对比。

3-1

加密会逐步成为网络流量的常态,基于“协议异常或行为异常”将成为无法解读内容情景下安全威胁检测的重要手段。 基于“内容”检测和基于“行为”检测互补来发现威胁。异常不一定是威胁,但一般来说威胁一定首先是异常。下图也表达了基于白名单的异常行为分析的重要性。

3-2

当下的安全攻防一个特点就是,未知攻击会越来越多,你所面临的攻击工具可能是从来没有使用过(或者身边的监控视野范围没有看到过),你手上的webshell样本再多,攻击者总是能制作出新的更轻量级功能更全的webshell,如何发现未知的webshell?如何做到天网恢恢疏而不漏?

二 基于流量的Webshell的行为检测

webshell运行后,B/S数据通过HTTP交互,HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测先前我们说到过webshell通信是HTTP协议。基于payload的行为分析,不仅对已知webshell进行检测,还能识别出未知的、伪装性强的webshell。

3-3

(1)对webshell的访问特征(IP/UA/Cookie)、payload特征、path特征、时间特征等进行关联分析,以时间为索引,还原攻击事件。

3-4

(2)基于异常的HTTP请求

Webshell总有一个HTTP请求,如果在网络层监控HTTP请求(没有监控Apache/IIS日志),有一天突然出现一个新的PHP文件请求或者一个平时是GET请求的文件突然有了POST请求,还返回的200,这里就有问题了。

三 基于沙箱技术的行为特征分析

我们知道中间件需要由某个系统账户来完成启动,所有的WEB脚本文件都通过中间件来完成相应的动作,通过监视系统进程和SQL查询被中间件使用的情况就可以初步的确定在网站中Webshell的存在并且正在运行。再通过中间件来确定最终发起操作的具体脚本文件就可以完成达到最终检测、发现Webshell的目的。

本部分笔者了解有限,就简单的列举出来几条发现具体Webshell的方法。

(1)数据库层面检测:通常一个正常的网站所有的数据库操作都通过统一的API来进行的,如果某个脚本文件通过另一种方式来尝试操作数据库的话就可以追踪到这个具体的文件;

(2)中间件层面检测:通过第三方的定制化插件来和中间件结合能够实现对发起操作的脚本文件的检测;

(3)系统层面行为检测:webshell起来如果执行系统命令的话,会有进程。比如Linux下就是nobody用户起了bash,Win下就是IIS User启动cmd,这些都是动态特征。

下片导言:

基于流量,通过对payload的分析发现webshell的攻击行为,笔者会通过实际的环境进行抓包分析,并将原始的数据表以及分析的过程和结果进行总结。

相关文章《Webshell安全检测篇(4)-基于流量的Webshell分析样例

[via@守望者实验室]