第十九章:web安全之webshell知识分享——webshell木马的的检测(一)

更新于:2019-10-19 18:59:11

三、webshell木马的检测


当自己的网站不幸中招了,如何去检测?


Webshell的运行流程:hacker -> HTTP Protocol -> Web Server -> CGI。

简单来看就是这样一个顺序:

黑客通过浏览器以HTTP协议访问Web Server上的一个动态脚本文件。


棘手的是,webshell就是一个合法的TCP连接,在TCP/IP的应用层之下没有任何特征(当然不是绝对的),只有在应用层进行检测。


有关检测webshell木马的手段大致分成两种:


黑客入侵服务器,使用webshell,不管是传文件还是改文件,必然有一个文件会包含webshell代码,很容易想到从文件代码入手,这是静态特征检测;


webshell运行后,B/S数据通过HTTP交互,HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测。


①静态特征检测


直接查看脚本代码有没有出现危险的写法。


检测一个文件是不是webshell木马,需要总结下一个木马文件都会实现哪些功能?在形形色色的“大马”中不难总结其中典型的功能有:


文件操作:上传、下载、编辑、删除。

数据库操作:连接数据库、脱库、插入数据。

命令执行:提交自定义命令、“大马”预制命令。

当然通常讲的“大马”的功能远不止。


知道了木马的行为,就可以以此为特征来检验。


1)来检查下有没有存在实现这些功能的函数存在,以正则匹配的方式去查找。


举一些比较危险的函数

eval|exec|system|passthru|shell_exec|assert|preg_replace|create_function|array_map|call_user_func|call_user_func_array|array_filter|usort|uasort


2)检查下有没有一些恶意的关键字,例如赌球|百家乐|六合彩|足球比分|即时比分|bet365|葡京|博彩|娱乐城|组专用大马|提权|木马|pass|passsword


3)检查有没有cmd命令行字符串,包括其他一些软件的命令字符串,系统重要文件的路径。


4)有没有出现网址字符串,通常黑客拿到webshell会在网站上挂一个JS链接。即便当前文件不是webshell木马,也能从中获知网站被人挂马,网站中可能存在webshell木马。


5)检查有没有一些可疑加密字符串。


根据以上5点,可尽可能收集写成规则。通过与这些规则匹配检索出高危脚本文件,效率高,缺点是误杀漏杀也高。在本节学习代码中楠神分享一个PHP webshell检测规则文件 php_rules.xml,感兴趣的可以下载来看看。


有些函数比如修改文件的一些函数,网站程序本身自用的地方就很多,定义为危险函数,规则写不好就会误报。


webshell木马的变形


黑客写的木马为了躲避正规地检测与查杀,会做一些“变形”处理,让有特征变成无特征。


1)函数名拼接

1.png


把create_function函数名赋值给一个变量$d,以可变函数的形式来运行,这样就不容易扫描到。


2)参数值拼接

1.png


3)函数名变形

1.png

get_defined_functions函数


详解:返回所有已定义函数的数组。

1.png


4)PHP代码加密

1.png


把PHP代码加密后也无法检测。


5)有多个文件变形组成webshell木马

1.png

1.png

把真正的一句话木马写到test1.jpg文件中,伪装成图片文件,然后有test1.php的代码读取并被执行。


6)特别说下eval这个“函数”:

1.png


<?php @eval($_POST['pass']);?>


太容易辨认,有些杀毒软件会专杀,需要对一句话木马进行伪装。但是eval是个语言构造器,它不支持可变函数。


<?php $a = eval;@$a($_POST['pass']);?>

这样写是错误的。


可以这样变形:


<?php $a = $_POST['pass'];$b = $a;@eval($b);?>


或者用create_function函数代替。


附:推荐两个可以扫描webshell木马的应用


1)百度提供的web版的webshell木马扫描应用

https://scanner.baidu.com


1.png

函数名拼接的webshell木马它也可以扫描,所以它不是单纯地依靠正则匹配特征去识别木马。它也只是单个文件扫描,无法关联多个文件找出木马。PHP文件加密后检查不出来。


2)使用网站安全狗软件


查杀webshell木马比较强,但误杀率挺高的。


使用肉眼检测:


对于一些没有变形的,特征性强的可以通过正则匹配出webshell。对于那些特征性弱的可以由人工去判断。要解决误报和漏报,就不能拘泥于代码级别。


1)通过ftp软件查看文件列表,本地与线上文件数量、大小做比对。并且需要特别注意下大于100k的文件。


2)通过ftp软件查看文件列表,发现某个文件创建、修改时间出现异常,其中包括二进制文件(如图片文件)。


3)查看文件属主有没有异常。比如,把网站的源文件定义为nobody用户,Apache的用户是www-data,PHP是Apache的一个模块,PHP创建的文件所属用户也是www-data,通过比对发觉异常。


4)打开一个脚本文件,如果发现有超长字符串,毫无疑问他是加密后的一整串字符串,极有可能是webshell。


5)查看web日志和PHP日志。黑客在挂马前可能会进行多次尝试,可以通过PHP的错误日志里找到蛛丝马迹。从web日志里找到post方式的陌生路径,或带有大量加密参数的路径。可以先锁定黑客的IP,通过IP搜索都访问过哪些路径。


本节学习代码》》》