首页 > 关于效率源 > 新闻和事件 > 技术视界
【技术视界】网站防入侵,如何检测webshell?
2019年07月18日

1563441799860044917.jpg

世界上没有绝对安全的系统
当一名黑客获得你的访问控制权限
他可以操作你的服务器
你的数据库,你的后台
甚至,你的一切……

网站被入侵了?
办案人员常常接到这样的案件:某单位网站遭黑客入侵,被非法上传webshell,首页被修改,系统功能不能正常使用,网站目录下面被上传了大量的asp、php、htm的页面,网站数据库数据被窃取,黑客还赤裸裸的留下大名。

那到底什么是webshell?它有什么危害?如何检测及防范?今天我们就好好来说道说道。(欢迎行业老司机们补充指正~)

1.初识webshell

Webshell是web入侵的脚本攻击工具,简单来说,webshell就是一个asp或php木马后门。当黑客在入侵企业网站时,通常要通过各种方式上传webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。入侵完成后,将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起,让人难辨真假。因此,检测webshell对网站的安全非常重要。

分类

1563441838782060836.jpg

原理
▲jsp的简单的webshell
<%Runtime.getRuntime().exec(request.getParameter("xxx"));%>

▲asp的简单的webshell
<%evalrequest("xxx")%>

▲php的简单的webshell
<?php $a=eval($_GET["xxx"]);?>

webshell含有相同的本质,即:
执行系统命令的函数+接收web参数的功能函数

使用webshell就像是打开一个特殊的web页面,只有当传入的参数正确时才能顺利使用。

例如:1.php 
内容为:<?php @eval(@_POST["A"]);?>

只有打开1.php页面且数据包参数有"A"时,才能正确连接使用该后门。

通过连接webshell,执行系统命令,可以查看计算机本机文件,查看用户、密码等敏感信息,还可以直接生成、修改文件(生成木马病毒文件或者网页挂马,数据库添加xss代码等),以及直接下载上传更多文件。

特点

1.存在系统调用的命令执行函数,如eval,system,cmd_shell,assert等;
2.存在系统调用的文件操作函数,如fopen,fwrite,readdir等;
3.存在数据库操作函数,调用系统自身的存储过程来连接数据库操作;
4.隐匿性与伪装性,可隐藏到正常的web源码中;
5.访问ip、次数少,页面孤立;
6.会产生payload流量,可以通过流量镜像与web日志进行检测;
7.变种多,通过各种函数加密,绕过检测。

变种类型

1.函数调用

3.jpg

最终结果: eval(base64_encode${"_POST"}['xxxx'])

2.拼接语句

4.png

最终结果: assert(${"_POST"}['sz']);

3.字符操作

1563441947627046122.jpg

4.编码混淆

1563441973878078018.jpg

5 其他:文件名利用

7.png

危害

1.长期控制web服务器、主机;
2.上传任意文件或者其他危害性病毒例如(勒索,挖矿病毒),也可以从主机下载任意文件;
3.修改web主页,篡改图片,造成不良社会印象(例如篡改国旗);
4.偷窃删除数据(数据库数据,用户密码,个人信息之类);
5. 控制服务器当肉鸡、攻击跳板,对其他用户实现DDos等攻击。

2.webshell案例分析

对于新手或者经验较少者,很多时候并不能认识或者了解各种各样的文件。不知道那些文件是什么,有什么样的功能,更不敢乱动或者删除。即使发现了可疑的文件也不敢轻举妄动。

在这里举个webshell的分析案例,一步步清理、确认、分析这个webshell的功能与入侵者是如何使用。

原始文件如下,代码混乱

1563442021128065808.jpg

去除注释、排版

1563442038613038401.jpg

分析代码发现,大部分的代码都是通过字符串的|、^、.操作赋值,只有最后两行代码是关键性的代码,而其中的变量都是通过前面的初始化或者是运算得到的。那么我们就可以注释最后两行代码,输出其中所有的变量。

结果如下:

1563442076442020720.jpg

带入到最后的两行代码中,得到:
if(md5(getenv('HTTP_A'))=='5d15db53a91790e913dc4e05a1319c42') $bIywY=create_function('$a,$b,$c',getenv('HTTP_X_UP_CALLING_LINE_ID');

payload

11.png

分析如下

当接受参数A时,如果md5(A)== '5d15db53a91790e913dc4e05a1319c42'
则创建匿名函数bIywY,功能为接收('HTTP_X_UP_CALLING_LINE_ID')
然后执行此函数。

黑客入侵时,只需要在HTTP_X_UP_CALLING_LINE_ID部分添加命令即可执行。

3.如何检测webshell?

WebShell检测是攻防对抗中的一个重要环节,是安全防护人员必修之课。如何快速检测Web Server是否已经被植入WebShell文件或代码,对网站安全来说至关重要。

动态检测

跟踪代码执行的函数/变量。

通过PHP扩展的webshell实时动态检测方法,可以基于PHP扩展对PHP代码的编译执行进行监控并结合外部输入变量的标记追踪、黑白名单机制来进行webshell的实时动态检测。

优点:可以有效针对变形、加密的webshell进行检测
缺点:当文件过多时的处理速度可能较慢,不满足用户需求

静态检测

对脚本文件中所使用的关键词、高危函数、文件修改时间、文件权限、 文件所有者以及和其它文件的关联性等多个维度的特征进行检测,即先建立一个恶意字符串特征库。

1.危险函数

① 命令执行函数
php:exec()eval()assert()shell_exec()system()
jsp:Runtime.exec(String cmd)

②接受web参数函数
php:$_POST $_GET $_REQUEST
jsp:request.getParameter()

③变形函数(编码/字符串变形)
php:base64,sha1,md5, preg_replace,pack(hex)

④文件操作函数
php:fpassthru()fsockopen()

⑤其他函数
php:create_fuction()//匿名函数

优点:可快速检测,快速定位
缺点:容易误报,无法对加密或者经过特殊处理的Webshell文件进行检测。尤其是针对窃密型Webshell无法做到准确的检测:窃密型Webshell通常具有和正常的WEB脚本文件具有相似的特征

2.样貌特征

①文件名

12.png

或者部分比较直观的名字

13.png

②伪装的文件

1563442171052060019.jpg

③加密类型

 

1563442277819049699.jpg

1563442277866027061.jpg

1563442277882001884.jpg

 

优点:可以人工肉眼直观的找出不正常,不合理的文件
缺点:对于隐藏在正常文件中的后门以及大马(被恶意使用的大段正常代码)无法做出判断

流量检测

1、抓取工具特征流量

18.jpg

根据抓取的流量显示,对WebShell所做的操作的结果,都会以字符串的形式返回给菜刀进行处理,并显示出来。字符串形式为 "->|xxxx|<-",为菜刀WebShell的特征字符。若发现成功利用菜刀WebShell的行为,基于该特征字符,将会发现此类攻击事件。

优点:可实时检测并阻止,还原攻击场景,快速定位主机和入侵者
缺点:无法检测加密payload,流量镜像部署成本,甚至有可能拖累服务

日志分析

1.访问特征

少量IP访问,总访问次数少,页面孤立。

2.路径特征

不同手段植入的webshell路径各有特征;自动生成文件名,然后放在特定的目录下。

3.时间特征

新创建页面视为异常页面。

注:日志分析只能作为辅助判断或增加异常权重的指标。

优点:可以帮助过滤数据,快速寻找检测的方向与切入点
缺点:不能作为绝对准确的判断手法,更多的是作为辅助方案

统计学检测

1.信息熵

数学上的抽象概念,这里把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低。反之,一个系统越是混乱,信息熵就越高,为webshell的可能性越高。

2.文件中的最长单词

正常文件中单词是比较短的,当一个文件中的最长单词很长时,这些长单词是很可疑的。一般webshell经过base64编码后会形成一个长字符串。

优点:对于混淆代码的识别能力较强
缺点:限制于代码编写者的写作习惯与混淆方式,对于附加在正常文件里的恶意代码检测能力较弱

已知后门对比

1.文件相似度

大部分入侵者为脚本小子的级别,并不会自己生成webshell,而是从网上获取他人的脚本且几乎不改变,这种情况下文件相似度极大。

2.文件hash,md5值对比

优点:准确率高

缺点:需要大量的数据组成样本库,且大量文件对比的情况下检测速度较慢

机器学习

Webshell 必然有一些规律,比如执行了某些操作(执行获取到的命令、列出目录文件、上传文件、查看文件等等)。如果直接用源代码分析,会出现很多的噪音,比如注释内容、花操作等等。如果我们将Webshell的源代码转化成仅含执行语句操作的内容,就会一定程度上,过滤掉这些噪音。通过采用词袋,词频等方法来进行提取关键特征。最后使用分类的算法来进行训练。

优点:准确率高

缺点:需要大量的训练数据与优秀的数学建模,提升成本

4.如何防止系统被植入WebShell?

关闭危险函数、系统命令函数的使用功能
注意敏感信息隐藏。例如,不回显上传文件路径,报错信息等
加强输入、上传文件的检查
关闭上传文件夹的代码执行权限
对上传的文件进行改名
关闭危险或不需要的端口
及时加固,打补丁
使用waf之类的安全工具

本文详细介绍了入侵取证过程中常见的webshell木马以及7种检测木马的方案方法,可以为防范入侵以及计算机取证工作带来更多的思路和线索。

文章部分内容参考于网络,如对文中的操作、描述有任何疑问,或者有任何入侵取证、计算机取证需求,欢迎拨打热线电话028-85211099或直接在微信公众号给我们留言,我们会尽快联系您。

本期投稿:蔡文杰
本期编辑:源妹

 

【拓展阅读】

【技术视界】巧用抓包工具,轻松捕获智能手机应用云端数据(内含详细步骤)

【技术视界】语音文件如何进行数据恢复?

【新品发布】业内首款数据库取证分析产品上线,邀你免费体验

【新品发布】大数据时代的全新取证工作站

【产品升级】VIP新增视频转码和多通道分割工具,快速完成证据审查分析工作