zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

网络安全应急响应----9、WebShell应急响应

响应网络安全 ---- 应急 webshell
2023-09-11 14:17:07 时间



一、Webshell简介

Webshell通常指以JSP、ASP、 PHP等网页脚本文件形式存在的一种服务器可执行文件,一般带有文件操作、命令执行功能,是一种网页后门。攻击者在入侵网站后,通常会将Webshell后门文件与网站服务器Web目录下正常的网页文件混在一起,使用浏览器或专用客户端进行连接,从而得到一个服务器操作环境,以达到控制网站服务器的目的。

1、常见webshell

jsp:
<%Runtime.getRuntime().exec(request.getParameter("));%>
asp:
<%eval request("cmd")% >
php:
<?php
	$a=exec($_GET["input"]);
	echo $a;
?>

2、Webshell检测

2.1、基于流量的Webshell检测
基于流量的Webshel检测方便部署,我们可通过流量镜像直接分析原始信息。基于payload的行为分析,我们不仅可对已知的Webshell进行检测,还可识别出未知的、伪装性强的Webshell,对Webshell的访问特征 (IP/UA/Cookie) 、payload特征、 path特征、 时间特征等进行关联分析,以时间为索引,可还原攻击事件。

2.2、基于文件的Webshell检测
我们通过检测文件是否加密(混淆处理) ,创建Webshell样本hash库,可对比分析可疑文件。对文件的创建时间、修改时间、文件权限等进行检测,以确认是否为Webshell。

2.3、基于日志的Webshell检测
对常见的多种日志进行分析,可帮助我们有效识别Webshell的上传行为等。通过综合分析,可回溯整个攻击过程。


二、Webshell应急响应流程

1、判断是否被植入webshell

系统被植入Webshell,可能出现以下几个异常
1、网页被篡改,或在网站中发现非管理员设置的内容;
2、出现攻击者恶意篡改网页或网页被植入暗链的现象;
3、安全设备报警,或被上级部门通报遭遇Webshell等。

2、临时处置

1、删除检测到的Webshell文件,对文件进行备份,方便后续取证溯源。
2、对系统进行隔离,防止影响其他系统的。

扫描工具
1、D盾
Webshell查杀、可疑文件隔离;端口进程查看、base64解码,以及克隆用户检测等;文件监控。

2、河马Webshell查杀
河马Webshell查杀拥有海量Webshell样本和自主查杀技术,采用传统特征+云端大数据双引擎的查杀技术,支持多种操作系统。


3、Webshell排查

1、Windows系统排查
利用Webshell扫描工具(如D盾)对应用部署目录进行扫描,如网站D: \WWW\目录,或者将当前网站目录文件与此前备份文件进行比对,查看是否存在新增的不一致内容,确定是否包含Webshell相关信息, 并确定Webshel位置及创建时间。然后利用文本文件打开,进一步分析发现可疑内容。

2、Linux系统排查
在Windows系统中使用的Webshell检测方法在Linux系统中同样适用。在Linux系统中,可用河马Webshell查杀工具扫描,也可手工搜索可能包含Webshell特征的文件。

//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec(" 
find ./ type f -name "*.php" | xargs grep "eval(" 
find ./ type f -name "*.asp" | xargs grep "execute(" 
find ./ type f -name "*.aspx" | xargs grep "eval(" 

//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode" 

判断Webshell事件发生时间:根据异常现象发生时间,结合网站目录中Webshell文件的创建时间,可大致定位事件发生的时间段。以便后续依据此时间进行溯源分析、追踪攻击者的活动路径。

对攻击路径进行溯源分析:如果网站被植入暗链或出现单击链接跳转到其他网站(如博彩网站、色情网站等)的情况,应首先排查网站首页相关js,查看是否被植入了恶意跳转的js。
若网站首页被篡改或有其他被攻击的现象,可以根据网站程序信息,如程序目录、文件上传目录、war包部署目录,使用工具(如D盾)和搜索关键词(如eval、 base64_ decode、assert)方式,定位到Webshell文件并清除。然后根据日志进行溯源分析,同时除了进行Web应用层排查,还应对系统层进行全面排查,防止攻击者在获取Webshel后执行了其他的权限维持操作。

判断系统架构:收集系统信息,为快速溯源分析提供前期准备工作

项目内容
服务器Windows、Linux等
内容管理系统(CMS)Jeecms、Wordpress、 Drupal、 TRS WCM、Phpcms、 Dedecms 等
中间件Tomcat、IIS、 Apache、 WebLogic、 JBoss、 Websphere、 Jetty 等
框架Struts2、Thinkphp、 Spring、 Shiro、 Fastjson 等
数据库Tomcat、IIS、 Apache、 WebLogic、 Struts、 MySQL等
脚本语言ASP、PHP、JSP 等
业务架构如前端网页内容是否是后端通过FTP上传的(新闻网偏多)等

4、系统排查

攻击者上传Webshell后,往往还会执行进一步的操作,如提权、添加用户、写入系统后门等,实现持久化驻留。因此,还需要对系统进行排查,主要排查内容如下。

4.1、Windows系统排查

1、用户信息排查
用户排查:
使用net user命令,可直接查看用户信息(此方法看不到隐藏用户),若发现存在非管理员使用账户,则可能为异常账户;
如果需查看某个账户的详细信息,可使用net user username命令。
隐藏用户排查:
打开计算机管理-->本地用户和组,可查询隐藏用户。用户名称以$结尾的为隐藏用户。

克隆用户排查:
可使用注册表,利用F值进行对比,以排查克隆用户。也可直接使LP_Check工具排查克隆用户。

2、进程、服务、驱动、启动项排查
进程排查:
在排查可疑进程时,可以关注进程名称,对于异常的、不常见的名称要格外注意,另外可以重点观察进程的路径、CPU占用信息等。打开系统信息任务管理器窗口,均可查看进程名称及其对应的执行文件。

进程信息还可以使用PCHunter工具查看,信息中黑色的条目代表微软进程;
蓝色的条目代表非微软进程,可能是第三方应用程序的进程,蓝色缺少文件厂商信息的进程需多加关注;
红色的条目代表可疑进程、隐藏服务、被挂钩函数。

服务排查:
系统信息窗口-->软件环境-->服务,可查看服务的启动情况及其对应的启动文件;或使用services.msc 命令,也可直接查看服务。查找异常服务。

驱动、启动项排查:
命令行msconfig打开启动项;
Get-WmiObject Win32_PnPSignedDriver| select DeviceName, DriverVersion命令可查看驱动;

3、网络连接排查
使用系统自带的netstat -ano]命令,可查看当前网络连接情况,如果当前服务器只允许对指定IP地址建立连接,那么若发现未在指定范围内的连接情况,则很可能是异常连接。

也可以使用工具(如TCPView)查看网络连接详细信息。TCPView可用于检测当前系统中的进程及其对应的连接状态。当进程标记为绿色时,表示该连接为新发起的连接,当进程标记为红色时,表示该连接为结束状态。

4、任务计划排查
攻击者在攻击成功后,添加任务计划往往是为了持久化控制。任务计划日志通常存放在C:\WINDOWS\System32\Tasks目录下,可以直接打开系统自带的任务计划程序窗口进行查看。若发现非自定义的任务计划,则较为可疑,需进行排查。

5、文件排查
攻击者在攻击成功后可能会在本地留下过程文件,这时需要应急响应工程师排查各个盘符下的
相关敏感目录,以便确定是否存在异常文件。
temp相关目录:
temp指系统临时文件夹,用于存储系统临时文件。在Windows系统中,常见temp目录主要分
布在如下位置:

C:\Windows\temp
C:\Users\Administrator\AppData\Local\temp

在寻找可疑文件时,先重点查看攻击时间范围内的文件,然后通过文件命令来判断。一般凡是在非系统System32或Syswow64目录下的svchost.exe文件基本为恶意文件;另外,命名特殊的文件也要重点排查。发现可疑文件后,可以提取样本做进一步的鉴定。
recent相关目录:
可通过查看最近打开的文件,判断可疑文件,目录如下:

C:\Documents and Settings\Administrator\recent
C:\Documents and Settings\Default User\recent

4.2、Linux系统排查

1、用户信息排查

//查看UID为0的用户
awk -F: '{if($3==0)print $1}' /etc/passwd
//查看能够登录的用户
cat /etc/passwd | grep -v "nologin"grep -v "false"
//查看是否存在空口令用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow

2、进程、服务、网络连接排查
ps aux 命令查看系统进程;
kill -9 PID 命令,可结束PID;
netstat -anp 命令,可查看网络连接、进程、端口及对应的PID等,排查时可优先关注对外连接的进程,或连接高危端口的进程;
ls -alh /proc/PID,可查看其对应的可执行程序;
rm -rf filename命令删除进程;

如果root用户都无法删除相关文件,那么可能是文件被加上了i属性(设定文件不能被删除、改名、设定连接关系,同时不能写入或新增内容)。可以使用lsatter filename命令查看文件属性,然后使用chattr -i filename命令移除i属性,然后执行删除命令。

lsof -p PID命令查看PID对应的可执行程序。
lsof -i:port命令查看指定端口对应的可执行程序。
top命令:可以根据CPU、内存占用率查看可疑进程。

查看隐藏进程。可以借助unhide工具排查隐藏进程。unhide是一个小巧的网络取证工具,能发现隐藏的进程和TCP/UDP端口。该工具在Linux、UNIX、MS-Windows等操作系统中都可用。

chkconfig --list命令,可查看系统运行的服务,核查是否存在异常服务。

3、开机自启动排查
攻击者在攻击成功后往往会设置开机自启动,以实现持久化控制。
在Linux系统中,系统启动内核挂载根文件系统,然后启动并运行一个init程序,init进程的任务就是运行开机启动的程序,init是非内核进程中第一个被启动运行的,因此它的PID的值总是1,init读取其配置文件来进行初始化工作。

Linux系统为不同的场合分配不同的开机启动程序,又称为“运行级别”(run level) ,如下表所示:

运行级别说明
运行级别0系统停机状态,系统默认运行级别不能为0,否则将不能正常启动
运行级别1单用户工作状态,root 权限,用于系统维护,禁止远程登录
运行级别2多用户状态(没有NFS )
运行级别3完全的多用户状态(有NFS),登录后进入控制台命令行模式
运行级别4系统未使用,保留
运行级别5X11控制台,登录后进入GUI模式
运行级别6系统正常关闭并重启,默认运行级别不能为6,否则将不能正常启动
7个运行级别分别对应7个目录,对应/etc/rc[0-6].d下的7个文件夹(rc0.d--->rc6.d),每个目录下有对应的启动文件,具体文件路径都是在/etc/rc.d/init.d/目录中。
其中,文件名:字母S[K]+两位数字+程序名”的形式。字母S表示Start,启动;字母K表示Kill,关闭。
在这里插入图片描述
旧版本的linux下/etc/rc.d/目录下还有init.d目录和rc.local文件;新版本linux是在/etc目录下查看。
init.d目录通常用于存放一些脚本, 包括linux系统中以rpm包安装时设定的一些服务的启动脚本,类似于Windows系统中的注册表;
在这里插入图片描述

rc.local文件会在用户登录之前读取,在每次系统启动时都会执行一次,也就是说,如果有任何需要在系统启动时运行的工作,那么只需写入/etc/rc.d/rc.local配置文件即可。
点击查看Linux中没有rc.local文件的解决方法

进行应急响应处置时应重点关注以下目录文件(依系统而定) :
1、查看运行级别:
	# runlevel
2、配置运行级别
	# vi  /etc/inittab
	# id=5:initdefault  系统开机后直接进入哪个运行级别
3、查看启动项文件:
	# more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
4、查看init.d下的所有文件信息
	# ls -alt /etc/init.d
5、查看init.d下的rc.local文件内容
	# cat /etc/init.d/rc.local
6、rc.local为开机启动配置文件,查看rc.local文件内容
	# cd /etc/rc.local
	# cd /etc/rc.d/rc[0~6].d

4、定时任务排查
攻击者通常用定时任务来进行持久化控制:
crontab -l命令是用户级别的,保存在/var/spool/cron/{user}中,每个用户都可以使用crontab -e命令编辑自己的定时任务列表。使用crontab -I命令,可查看当前用户的定时任务,检查是否有后门]木马程序启动相关信息。

/etc/crontab是系统级别的定时任务,只有root账户可以修改。另外,还需要注意的有/etc/cron.hourly、/etc/cron.daily、 /etc/cron.weekly、/etc/cron.monthly等周期性执行脚本的目录。
使用ls /etc/cron*命令,可查看etc目录系统级定时任务相关文件。例如,攻击者若想每小时执行一个脚本,则只需将脚本放到/etc/cron.hourly下,并且赋予执行权限即可。

5、rootkit排查
rootkit是种特殊的恶意软件,功能是在安装目标上隐藏自身及指定的文件、 进程和网络连接
等信息。rootkit一般会与木马、后门等其他恶意程序结合使用。

ls -alt /bin命令,可查看相关系统命令的修改时间,判断是否有更改。
ls -alh /bin 命令,可查看相关文件大小,若明显偏大,则很可能被替换。
rpm -Va命令,可查看发生过变化的软件包,若一切校验结果均正常,则不会产生任何输出。
第三方查杀工具,如chkrootkit、 rkhunter进行查杀 。

6、文件排查
通过对一些敏感文件及敏感目录的排查,可判断是否存在攻击者的攻击存留文件,以及修改访
问过的文件。
ls -al命令,可查看隐藏的文件。
find / mtime 0命令,可查看最近24小时内修改过的文件。
stat filename命令,可查看文件的修改、创建、访问时间。应重点关注与事件发生时间接近的文件的情况,或者修改、创建、访问时间存在逻辑错误的文件的情况。
ls -alh /tmp命令,可查看/tmp目录文件。
ls -alh /root/.ssh/命令,可查看是否存在恶意的ssh公钥,一旦发现非已知ssh公钥,则很可能是攻击者写入的。

4.3、Web日志分析

对访问网站的Web日志进行分析,重点关注已知的入侵时间前后的日志记录,从而寻找攻击者漏洞分析通过日志中发现的问题,针对攻击者活动路径,可排查网站中存在的漏洞,并进行分析。
1、Windows系统排查
对Web日志进行分析,以查找攻击路径及失陷原因,常见Web中间件默认路径如下表所示:

Web中间件默认路径默认路径
Apacheapache\logs\error.log、apache\logs\access.log
IISC:\inetpublogs\LogFiles、C:WINDOWS\system32LogFiles
Tomcattomcat\access_log
查看安全日志,多关注其中的特殊事件
事件ID描述
--
1102清理审计日志
4624用户登录成功时会产生的日志,
4625用户登录失败时会产生的日志(解锁屏幕并不会产生这个日志),
4672特权用户登录成功时会产生的日志,如登录Administrator,,一般会看到4624和4672日志一起出现
4720创建用户时会产生的日志
4722启用用户时会产生的日志
4724试图重置账号、密码
4726删除用户时会产生的日志
4728将成员添加到启用安全的全局组中
4729将成员从安全的全局组中移除
4732已向启用了安全的本地组中添加某个成员,如通常在将创建的用户添加到Administrators管理员组时会产生该日志
%SystemRoot%\System32\Winevt\Logs目录下还存在大量其他日志。例如:远程桌面会话日志会记录通过RDP登录的信息,包含登录源网络地址、登录用户等,在Webshell应急响应中也应当关注。其中:
事件ID为21,表示远程桌面会话登录成功;
事件ID为24,表示远程桌面会话断开连接;
事件ID为25,表示远程桌面会话重新连接成功。

2、Linux系统排查
在Linux系统中,常见Web中间件默认路径如下表所示。

Web中间件默认路径
Apache/etc/httpd/logs/access_log、/var/log/httpd/access_log
Nginx/usr/local/nginx/logs

Linux系统日志一般位于/var/log目录下,几乎保存了系统所有的操作记录,包括用户认证时产生的日志、系统定期执行任务计划时产生的日志、系统某些守护进程产生的日志、系统邮件日志、内核信息等。
在这里插入图片描述
常排查的系统日志:

系统日志描述
boot.log记录系统在引导过程中发生的事件,即Linux系统在开机自检过程中显示的信息
messages需启用rsyslog,记录Linux系统常见的系统和服务错误信息
secure/auth.logLinux系统安全日志,记录用户和工作组变化情况、用户登录认证情况
lastlog记录最后一次用户成功登录的时间、登录IP地址等信息
btmp记录Linux系统登录失败的用户、时间及远程IP地址
wtmp永久记录每个用户登录、注销及系统启动、停机的事件,使用last查看
maillog记录系统中运行的邮件服务器的日志信息
bash_history记录之前使用过的shell命令

在Linux日志排查时,常用日志检索命令如下:
定位具体的IP地址或文件名:
find . access_log | grep xargs ip
find . access_log | grep xargs filename |
查看页面访问排名前十的IP地址:
cat access.log | cut -f1 -d "" | sort | uniq -c | sort -k 1 -r | head -10
查看页面访问排名前十的URL地址:
cat access.log | cut -f4 -d "" | sort | uniq -c | sort -k 1 -r | head -10

3、数据库日志排查
MySQL日志
Windows:MySQL的默认配置路径:C: Windows\my.ini C: Windows\mysql\my.ini
Linux:MySQL的默认配置路径:/etc/mysql/my.cnf

MySQL常见的日志记录格式:
windows系统:
log-error=E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/ mysql.log"
long_query_time=2
log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"
linux系统:
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries= /usr/local/mysql/log/slowquery.log

4.4、网络流量排查

网络流量排查主要利用现场部署的网络安全设备,通过网络流量排查分析以下内容:服务器高危行为、Webshell连接行为、数据库危险操作、邮件违规行为、非法外连行为、异常账户登录为等。在缺少流量分析设备时,Windows系统可以借助抓包工具Wireshark辅助分析。

要注意的是,若数据包中带有z0、eval、 base64_decode,则该数据包很可能是中国菜刀客户端连接一句话木马时产生的。
若数据包中带有特殊的Referer、Accept-Language,则一般是攻击者利用Weevely Webshell工具连接产生的。
如果攻击者在攻击成功后利用msf中的reverse_ tcp 上线,那么在Wireshark数据包中一般会有
PSH标志位。

4.5、清除加固

清除加固的方法如下:
1、处置时先断网,清理发现的Webshell;
2、如果网站被挂黑链或者被篡改首页,那么应删除篡改内容,同时务必审计源码,保证源码中不存在恶意添加的内容;
3、在系统排查后,及时清理系统中隐藏的后门及攻击者操作的内容,若发现存在rootkit类后门,则建议重装系统;
4、对排查过程中发现的漏洞利用点进行修补,切断攻击路径,必要时可以做黑盒渗透测试,全面发现应用漏洞;
5、待上述操作处置完成,重新恢复网站运行。


三、Webshell防御方法

1、配置必要的防火墙,并开启防火墙策略,防止暴露不必要的服务为攻击者提供利用条件。
2、对服务器进行安全加固,例如,关闭远程桌面功能、定期更换密码、禁止使用最高权限用户运行程序、使用HTTPS加密协议等。
3、加强权限管理,对敏感目录进行权限设置,限制上传目录的脚本执行权限,不允许配置执行权限等。
4、安装Webshell检测工 具,根据检测结果对已发现的可疑Webshell痕迹立即隔离查杀,并排查漏洞。
5、时常备份数据库等重要文件。
6、需要保持日常维护,并注意服务器中是否有来历不明的可执行脚本文件。
7、采用白名单机制上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。