0


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

文章目录


一、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"|xargsgrep"exec("find ./ type f -name "*.php"|xargsgrep"eval("find ./ type f -name "*.asp"|xargsgrep"execute("find ./ type f -name "*.aspx"|xargsgrep"eval(" 

//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php"|xargsgrep"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.logIISC:\inetpublogs\LogFiles、C:WINDOWS\system32LogFilesTomcattomcat\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_logNginx/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、采用白名单机制上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。


本文转载自: https://blog.csdn.net/sycamorelg/article/details/123516928
版权归原作者 七天啊 所有, 如有侵权,请联系我们删除。

“网络安全应急响应----9、WebShell应急响应”的评论:

还没有评论