铲除网站中的WebShell木马

2020-12-30 07:49河南许红军
网络安全和信息化 2020年2期

■河南 许红军

WebShell木马其实就是以ASP、PHP、JSP或CGI等网页文件形式存在的恶意文件,其本质上是一种非法的命令执行环境,或者可称为网页后门。当黑客在入侵了一个网站后,通常会将ASP或PHP等后门文件与网站正常的网页文件混在一起,然后就可以使用浏览器来访问ASP或者PHP等后门,得到一个命令执行环境,以达到控制网站服务器的目的。

实战清除WebShell木马

某单位网站无法访问,对其进行检测后,发现其采用的是Nginx+Tomcat+MySQL的架构,前端的Nginx服务器将请求发送给后端的多台Tomcat服务器,实现负载均衡功能。

这些服务器上安装的都是CentOS6.X系统,硬件配置较高,按照常理是不会出现反应迟缓之类的问题的。在Nginx服务器上执行“top”命令,在“load average”栏中显示系统的负载并不高,Nginx进程的CPU占用率并不高,内存是比较充裕的。总和来看,Nginx服务器的运行状态是正常的。

但是,在Tomcat服务器上执行“top”命令后,发现系统的符合处于很高的状态,内存使用率居高不下,可用内存只有两三百兆。多个Java进程的CPU占用率都长时间处于100%状态,启用Java进程的是普通账户。对多台Tomcat服务器进行检测,发现情况都大体相似。

要想发现问题所在,最好的办法是查看相关的日志。在某台Tomcat服务器上执行“tail -f access_log.2019-07-21 .txt”命令,发现存在一些异常的访问信息,例如“Get/www/779.html HTTP/1.1”等内容。

执行“tail-f access_log.2019-07-21 .txt|grep 779.html”命令,显示和该奇怪的“779.html”的所有信息。执行“cat access_log.2019-07-21 |grep 779.html wc-l”命令,显示访问该网页文件的次数。发现针对该页面的访问数量巨大,远远超出了日常实际的访问量。进入网站目录,执行“ls”命令,发现存在很多名称异常的HTML文件,这显然不是系统生成的。打开问这些来历不明的HTML文件,发现都是一些涉嫌欺诈的广告信息。毫无疑问,网站一定被黑客渗透,并植入了WebShell木马。

在网站目录中仔细搜索,发现一个名为“welcome.jsp”的文件极为可疑,因为根据日期判断,该JSP文件创建的时间较新,和网站正常的JSP文件明显不同。打开该JSP文件,发现设置一个JSP木马程序,因为在程序内部发现了诸如“process=Runtime.getRuntime().exe(cmd)”之类的语句,毫无疑问,这是在执行提交的命令。很显然,黑客只需在访问该JSP 的地址后面添加注入“?cmd=ls”之类的内容,就可以很轻松地执行提交的命令,进入对服务器进行各种非法操作。

例如,黑客可以利用“touch”命令,在网站指定路径写入文件等。不过,因为启用Tomcat 进程的是普通用户,所以黑客在执行各种非法操作时,会因为权限问题无法对系统造成更大的破坏。如果是以Root 账户启动Tomacat 进程的话,那么危害就太大了。黑客肯定不会满足于此,一定会采用其他的方法方法来执行提权操作,来获取更大的权限。执行“netstat -n|awk '/^tcp/{++S[$NF]}END {for (a in S) print a,S[a]}'”命令,分析服务器的网络连接信息。

发现在“Time_Wait”和“ESTABLISHED”栏中显示大量的连接数,前者表示连接被主动关闭,正在等待远程Socket 关闭连接,后者表示正在使用的连接。这两类连接比较高,说明外界正在大量的和该服务器建立间接,服务器疲于应对,消耗了大量资源,无法对这些连接做出正常响应才造成无法正常访问的故障。

通过对网站进行分析,发现被恶意注入了大量的垃圾广告页面和SEO 搜索信息,造成大量的无关访问。执行“tail -f access_log.2019-07-21 .txt |grep xxxspider|wc”命令,果然在Tomcat日志中发现和某些搜索引擎相关的连接信息,其中的“xxx”为具体的搜索引擎名称。

针对以上分析,黑客之所以可以在网站网站中传入WebShell 木马,肯定是利用了对网站的某些漏洞。经过对网站程序的分析,发现一段验证代码存在安全问题,造成黑客破解了后台管理页面的登录信息,进而上传了WebShell 木马。

因此,首先对网站程序进行修补,加强了安全性。为了防止恶意网络爬虫对网站进行袭扰,可以打开Nginx的配置文件“nginx.conf”,在其中对应的“{server}”段中添加“if ($http_user_agent~* "qihoobot|xxxS pider|yyyspider")”,“{”,“return 403;”,“}”等行,禁止指定的网络爬虫搜索本站。

其中的“xxx”“yyy”表示具体的爬虫名称,可以根据需要进行修改和添加,爬虫名称之间以“|”连接。这样,当这些爬虫搜索本站时,就会得到403 的错误信息让其无功而返。对网站文件进行全面的扫描,发现并删除大量的包含垃圾广告内容的页面,清除发现的JSP 木马程序。因为黑客植入的都是静态页面,后端的Tomcat 擅长处理动态页面,对于静态页面处理的能力有限。

因此,为了提高网站性能,最后利用动静分离技术将静态页面交由Nginx 处理,让Tomcat 只处理动态页面,这样可以优化网站结构,具体的实现方法这里就不再赘述了。

经过仔细的清除删除操作,网站终于恢复到了正常的状态。

WebShell 木马的危害

针对以上和WebShell木马的较量,可以看到WebShell 木马具有很强的隐蔽性和破坏力。WebShell木马一般会隐藏在正常文件中,并修改自身文件时间来逃避搜索,甚至有些WebShell 木马还会利用服务器的某些漏洞进行深度隐藏。比较狡猾的WebShell木马还会藏身到正常的网页文件中,利用特定的参数来运行,这大大提高了其排查的难度。

WebShell 木马可以很轻松突破服务器防火墙,因为其是利用TCP 80 端口和黑客通讯,因此不会遭到防火墙的拦截。WebShell 的活动状态一般不会被系统日志记录下来,只会在在网站的Web日志中留下一些踪迹,缺乏经验的管理员一般是难以发现其行踪的。对于黑客来说,一般会使用扫描器对网站进行扫描,探测存在的漏洞,进而获取管理员的后台密码登录到后台管理环境。

之后利用后台的管理工具,向网站特定位置写入WebShell 木马,黑客还可能自定义上传文件类型,来非法上传PHP、JSP 等木马文件。对于操作系统来说,也可能存在漏洞,黑客可以通过扫描这些漏洞,在系统中植入WebShell 木马。有些网站在前台程序中提供有上传功能,这也给黑客的入侵带来了便利,如果网站存取权限或者上传目录权限控制有漏洞的话,就很容易招致黑客的攻击。

防御WebShell 木马的策略

对于动态网页来说,要从根本上提高脚本的安全问题,必须做到防注入、防爆库、防COOKIES 欺骗、防跨站攻击(xss)等。

例如对于可写目录来说,不要设置执行权限,有执行权限的目录不要设置写权限等。在维护网站时,最好使用FTP 来上传文件,尽量不要使用ASP、PHP 等上传程序。ASP/JSP 等上传程序的调用必须进行身份认证,只允许信任用户使用上传程序。

网站后台的管理员账户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。对于网站数据库名称和存放路径来说,不要使用默认路径,要进行适当的修改,数据库名称要有一定复杂性。要尽量保持程序是最新版本,防范存在的漏洞。不要在网页上添加后台管理程序登录页面链接。为防止程序有未知漏洞,可以在维护后删除后台管理程序的登录页面,下次维护时再通过上传即可。要时常备份数据库等重要文件,在平常的维护时,要细心查看是否存在来历不明的脚本文件。

利用合适的规则上传文件,禁止上传存在安全风险的文件类型,上传目录权限遵循最小权限原则。总的来说,需要对网站进行定期的扫描和安全监测,及时修复存在的漏洞,对于程序的上传功能来说,要进行必要的限制和优化,强化对于权限的管理,重要的目录必须限制脚本的运行权限,甚至禁止脚本的运行。后台网站密码要仅可能的复杂,后台路径不要使用“Login”“Admin”等易于被猜测到的路径名等。

操作系统要做好基础的安全维护工作,例如封锁危险的端口,配置严格的安全策略,及时打上最新的补丁等,让黑客无机可乘,使其无法利用WebShell 木马来攻击网站。