Skip to content

19入侵排查:阻断与追踪黑客

本套课程花了不少篇幅讲解各种常见的 Web 漏洞攻防知识,但很多情况下,我们是无法保证 100% 的绝对安全。

如果你的网站真的被入侵攻击了,那应该怎么办呢?如何将损伤控制到最小?如何防止被再一次入侵?如何去追踪黑客的攻击来源?

所以,这节课我们就重点聊下如何进行入侵排查去阻断与追踪黑客。

网站被入侵的常见方法是上传 Webshell,这些在《13 | 文件上传漏洞:种植服务器木马的捷径》中都介绍过。因此本节课主要针对利用漏洞入侵后上传 Webshell 获取控制权的情况,介绍一些 Webshell 入侵应急处理方法,并会结合前面课程演示过的入侵过程,以实例来讲解入侵排查过程。

这一过程,我们仍然以 Linux 平台为主。

网站入侵检测

想要获取被入侵的情况,除了外部报告、网页被篡改这两种途径,你自己还需要建立完善的入侵检测能力。

毕竟多数情况下,外部报告是为了获取奖金,看看国内外的 SRC 平台就知道;而网页被篡改通常是为了炫耀,这种反而不多,因此攻击者都会以隐藏为主,以保持对服务器的长期控制。

基于上述情况,如果你想更加主动、及时、全面地感知到网站被入侵,就需要有一套自己的入侵检测系统,可以自研或者采购,常见的网站入侵检测方法有以下三种。

  • 基于流量检测

通过收集服务器的网络流量进行数据分析,检测攻击者发送的 payload 攻击特征,特别是 Webshell 特征进行检测和告警,以便及时发现被入侵情况。

  • 基于文件检测

通过分析文件判断是否为恶意后门,与我们平常的病毒扫描一样,同时排查日志文件也可以发现入侵过程,有利于回溯整个攻击过程,比如稍后会介绍的河马检测工具。

  • 基于行为检测

通过动态检测系统上的执行行为来判断是否为恶意行为,是否被入侵攻击。《08 | SQL 注入:漏洞的检测与防御》已介绍过的 RASP 也是检测入侵攻击的手段,比如通过 hook java/php 底层的命令执行函数,来判断当前是否执行到命令执行函数,若是,就表明可能已经被外部入侵。

应急处置流程

网站入侵,通常是由于网站漏洞的存在,导致被上传了 Webshell 文件。所以围绕漏洞,你可以采取以下步骤进行应急处置。

1.关闭外网进行排查

为防止被进一步入侵窃取敏感信息,或者被内网渗透,应该在第一时间关闭外网,保留现场环境进行排查,等处理完善后再上线。先用 IPConfig 查看公司 IP 所在的网卡,比如是 eth1,那么就可以使用 ifdown eth1 关闭外网。

2.Webshell 检测、分析与清除

  • 检测Webshell 可以使用一些现成工具,比如 Windows 上的 D 盾、支持 Windows 和 Linux 的河马,还有支持 Linux 的长亭云牧,使用都很简单,指定目录/文件进行扫描即可。

更具体的使用介绍可以参考下文的"常用的排查工具"。

  • 通过分析Webshell 文件的创建时间,也可以推测出入侵事件发生的时间段,不过有时候文件创建时间也可能被篡改,注意结合日志信息来综合判断;接着就是分析 Webshell 的行为,看是否还有其他后门存在,或者一些破坏性行为。

  • 最后清除所有后门文件,清除前先留存一份,方便后续分析。

3.Web 日志分析

上一节课《18 | 构建防线:服务器安全加固》中就提到要开启 Web 日志,目的就用于此处。通过分析日志,帮助我们找到漏洞的位置,回溯整个攻击过程,同时通过定位 IP 来追踪黑客。

不同的服务器系统有不同的日志位置:

4. 系统后门与日志排查

攻击者为了实现对服务器的长期控制,通常会在系统上留存后门等恶意程序。

所以在清除 Webshell 后,还应该对系统进行全面排查,比如是否有可疑文件、进程,进行一次本地病毒的查杀,确保所有恶意程序都被清除干净;否则,即使你修复漏洞了,攻击者仍可通过后门控制你的服务器,再一次遭遇被入侵的局面。

为方便你使用,我整理了一份常用的排查命令和工具的使用列表。

5. 漏洞分析、复现与修复

通过前面分析 Web 日志来定位漏洞,通过访问 Webshell 的 IP 来收集此 IP 的所有访问记录,根据记录我们可以推测出以下两种情况:

  • 比如,访问上传接口后就访问 Webshell,那就有可能存在上传文件漏洞;

  • 比如,大批量地尝试登录后台,那可能是在暴力破解密码,可以看攻击者是否成功访问后台,来判断是否破解成功。

之后就是去尝试重现 漏洞,以验证前面的推测。若确认漏洞存在,就需要进行修复,修复后才能上线。

6. 安全加固后上线

可参考《18 | 构建防线:服务器安全加固》介绍的服务器加固方法进行安全加固,此处不再赘述,等加固完成后再上线恢复业务。

常用的排查工具

1.河马

专注于 Webshell 查杀研究的工具,采用传统特征与云端大数据双引擎的查杀技术,支持 Windows 与 Linux 平台,跨平台的工具比较方便,使用也简单,通过指定目录路径即可开启扫描:

java
hm scan ./Web目录
hm deepscan ./Web目录

2.牧云(CloudWalker)

牧云是由长亭科技开发的一款开源的 Webshell 检测工具,支持 macOS 与 Linux 系统,可以输出 Html 检测报告。目前检测结果分为 5 个级别(Risk:1~5),如下图所示,级别越高说明检测出 Webshell 的可能性越高,如果没有级别则说明不存在 Webshell 风险。

该开源工具已停止更新,长亭已经转做企业版收费,不再开源。

牧云使用如下命令扫描指定目录并生成报告:

$ ./webshell-detector -html -output result.html /path/to/web-root/

牧云

3.PHP Malware Finder

PHP Malware Finder 是一款基于 yara 规则检测 Webshell 和恶意软件混淆代码的工具,在检测一些混淆编码的 Webshell 时比较有效。

使用如下命令来扫描指定目录以检测是否存在恶意的 Webshell:

java
./phpmalwarefinder  [-cfhtv] [-l (php|asp)] <file|folder> 
yara -r ./php.yar /var/www

4.D 盾

D 盾是 Windows 平台上的 Web 防火墙,但它也支持 Webshell 查杀。目前它仅支持 Windows,是 Windows 上使用比较广泛的 Web 查杀软件;若 Linux 系统也需要用,可以拷贝文件到 Windows 上进行扫描,或者尝试使用 Wine。

D 盾 Web 查杀

5.Lorg:Apache 日志分析工具

Lorg 是一款 Apache 日志的安全分析工具,可以帮助你识别日志中潜在的 Web 漏洞攻击行为,便于你快速定位漏洞位置,支持多种常见 Web 漏洞类型的识别,支持 html、json、xml、csv 多个格式的检测报告输出。

使用如下命令来指定访问日志路径进行分析:

java
./lorg -d phpids -u -g /path/to/access_log

实例演示

接下来,我们以《13 | 文件上传漏洞:种植服务器木马的捷径》的上传文件漏洞为例,在利用漏洞上传 Webshell 完成入侵后,按照刚刚"应急处置流程"中讲解的步骤,从防御者的角度来看如何应急响应。

1.关闭外网进行排查

先关闭外网,然后登录服务器进行排查。先借助 Wappalyzer 插件看下目标网站的指纹信息,如下图所示,可以看到是 Apache、Ubuntu 与 PHP 的环境,Apache 的网站目录通常位于 /var/www/html,直接打开验证下就知道(DVWA 靶场也确实位于此目录下)。

DVWA 靶场网站指纹

2.Webshell 检测

接下来用河马对网站根目录进行 Webshell 扫描,采用深度扫描模式,否则它会扫描指定目录,而不会循环遍历目录扫描:

java
root@346953e9d6e9:/# ./hm scan /var/www/html
                                 {1.8.2 hm#linux-amd64.24fbb40}
 __
|  |--.-----.--------.---.-.
|     |  -__|        |  _  |
|__|__|_____|__|__|__|___._|
                                 http://www.shellpub.com

[*] 扫描预处理 2021-02-12 08:13:18
[*] 开始扫描 2021-02-12 08:13:18
ERRO[0001] cloud invalid error: invalid character '<' looking for beginning of value 
+------+----------+------+
| 类型 | 深度查杀 | 数量 |
+------+----------+------+
| 后门 |        0 |    0 |
| 疑似 |        0 |    0 |
+------+----------+------+
|          总计   |  0   |
+------+----------+------+
[*] 恭喜!没有发现网站后门,  请您继续保持!

为什么扫不到呢?这是河马扫描机制的一个缺陷,因为 /var/www/html 是个指向 /app 的软链接:

java
root@346953e9d6e9:/# ll /var/www/html
lrwxrwxrwx 1 root root 4 Feb 15  2016 /var/www/html -> /app/

所以应该直接扫描 /app 目录:

java
root@346953e9d6e9:/# ./hm scan /app
                                 {1.8.2 hm#linux-amd64.24fbb40}
 __
|  |--.-----.--------.---.-.
|     |  -__|        |  _  |
|__|__|_____|__|__|__|___._|
                                 http://www.shellpub.com

[*] 扫描预处理 2021-02-12 08:16:21
[*] 开始扫描 2021-02-12 08:16:21
|----------| 0/584   0% [elapsed: 56.037µs left: 0s,  0.00 iters/sec]2021/02/12 08:16:22 
 cloud scan error: invalid character '<' looking for beginning of value
ERRO[0002] cloud invalid error: invalid character '<' looking for beginning of value 
+------+----------+------+
| 类型 | 深度查杀 | 数量 |
+------+----------+------+
| 后门 |        0 |    1 |
| 疑似 |        0 |    7 |
+------+----------+------+
|          总计   |  8   |
+------+----------+------+
[*] 详细结果已经保存到结果路径的result.csv文件中
|##########| 584/584 100% [elapsed: 1.000189195s left: 0s, 583.89 iters/sec]

扫到一个后门,打开 result.csv 看下:

java
root@346953e9d6e9:/# cat result.csv 
序号,类型,路径
1,冰蝎3.0 PHP-PHP后门,建议清理,/app/hackable/uploads/shell.php
2,疑似PHP后门-建议人工确认,/app/external/phpids/0.6/lib/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/HTML/Color.php
3,疑似PHP后门-建议人工确认,/app/external/phpids/0.6/tests/IDS/MonitorTest.php
4,疑似PHP后门-建议人工确认,/app/vulnerabilities/exec/source/high.php
5,疑似PHP后门-建议人工确认,/app/vulnerabilities/exec/source/impossible.php
6,疑似PHP后门-建议人工确认,/app/vulnerabilities/exec/source/low.php
7,疑似PHP后门-建议人工确认,/app/vulnerabilities/exec/source/medium.php
8,疑似PHP后门-建议人工确认,/app/vulnerabilities/upload/help/help.php

非常明确地识别出 /app/hackable/uploads/shell.php 是冰蝎 Webshell,其他一些疑似 PHP 后门大多是存在漏洞的代码,在实际应用中,我们需要进一步去排查这些疑似文件。

3.Web 日志分析

找到此 shell.php,我们就可以通过分析日志去定位攻击者,主要还是用于回溯攻击过程,因为攻击上传此 shell.php 后一般都会去访问或执行其他操作。

Apache 日志位于 /var/log/apache2/access.log,先定位访问 shell.php 的 IP 地址是 172.17.0.1。

java
root@346953e9d6e9:/var/log/apache2# cat access.log|grep shell.php
172.17.0.1 - - [12/Feb/2021:07:45:51 +0000] "GET /hackable/uploads/shell.php HTTP/1.1" 404 516 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
172.17.0.1 - - [12/Feb/2021:07:45:55 +0000] "GET /hackable/uploads/shell.php HTTP/1.1" 404 515 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
......
172.17.0.1 - - [12/Feb/2021:08:13:35 +0000] "POST /hackable/uploads/shell.php HTTP/1.1" 200 3995 "-" "Mozilla/5.0 (iPod; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1"
172.17.0.1 - - [12/Feb/2021:08:20:35 +0000] "POST /hackable/uploads/shell.php HTTP/1.1" 200 4527 "-" "Mozilla/5.0 (iPod; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1"

4.漏洞定位与复现

从输出结果看,访问此 Webshell 的最早时间是 2021-02-12 07:45:51,再看下此时间之间该攻击者还访问了哪些地址。

java
root@346953e9d6e9:/var/log/apache2# cat access.log|grep 172.17.0.1
172.17.0.1 - - [12/Feb/2021:07:43:03 +0000] "GET / HTTP/1.1" 302 385 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
172.17.0.1 - - [12/Feb/2021:07:43:03 +0000] "GET /login.php HTTP/1.1" 302 384 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
172.17.0.1 - - [12/Feb/2021:07:43:03 +0000] "GET /setup.php HTTP/1.1" 200 1822 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
......
172.17.0.1 - - [12/Feb/2021:07:43:42 +0000] "GET /vulnerabilities/upload/ HTTP/1.1" 200 1838 "http://127.0.0.1:8081/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
......
172.17.0.1 - - [12/Feb/2021:07:45:51 +0000] "GET /hackable/uploads/shell.php HTTP/1.1" 404 516 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"

可以看到,攻击者在访问 shell.php 前 GET 请求 /vulnerabilities/upload/ 地址,直接构造链接去访问下http://127.0.0.1/vulnerabilities/upload/,上传入口就显现出来了。

上传页面

由此可以推测出攻击者可能是利用上传漏洞上传 Webshell,从而控制服务器的,我们可以重现下漏洞攻击过程,以验证前面的推测是否准确。

关于文件上传漏洞的测试过程在《13 | 文件上传漏洞:种植服务器木马的捷径》已经讲过,此处不再赘述。

5.清除与加固

接下来,我们就可以删除 /app/hackable/uploads/shell.php,同时排查 下系统上是否还其他恶意程序,然后修复上传漏洞后再恢复网站。

此处演示中,我并没有留取 rootkit 或者前面内网渗透演示中的回连后门。你可以在完成前面内网渗透操作后,按照本课程的思路去进一步排查,看能否自己发现攻击者的渗透过程,并采取相应的安全解决方案。

小结

本节课主要介绍了网站入侵的检测方法,以及应急处理流程。

其中重点介绍 Webshell 查杀的方法和工具,并列举了一些在 Linux 平台下常用的命令工具,用于排查系统上的可疑进程和文件,以确保一些后门的恶意程序已被清除干净;否则单独补个漏洞,删除个 Webshell,并不能完全防止二次入侵。

同时自己应注意做好数据备份,防止被恶意删除文件后无法恢复,造成严重的业务经济损失。在用备份恢复数据时,注意提前入侵排查,建议提供备份好相关的恶意文件,以留后续分析,防止有遗落的恶意行为和文件未被发现,同时为制作相应的防御方案提供参考。


课程评价入口,挑选 5 名小伙伴赠送小礼品~