网络安全应急响应----9WebShell应急响应
Posted 七天啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络安全应急响应----9WebShell应急响应相关的知识,希望对你有一定的参考价值。
文章目录
一、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 | 系统未使用,保留 |
运行级别5 | X11控制台,登录后进入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中间件默认路径 | 默认路径 |
---|---|
Apache | apache\\logs\\error.log、apache\\logs\\access.log |
IIS | C:\\inetpublogs\\LogFiles、C:WINDOWS\\system32LogFiles |
Tomcat | tomcat\\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.log | Linux系统安全日志,记录用户和工作组变化情况、用户登录认证情况 |
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、采用白名单机制上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。
应急响应介绍
作为安全人员,被入侵后的应急响应是非常重要的一个环节,那么如何进行应急响应,则是安全人员应该学习的地方。本文就将带领大家学习入侵响应的基本知识。
安全事件分类
- Web入侵:挂马、篡改、Webshell
- 系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞
- 病毒木马:远控、后门、勒索软件
- 信息泄漏:脱裤、数据库登录(弱口令)
- 网络流量:频繁发包、批量请求、DDOS攻击
首先是对入侵的安全事件进行分类,确认安全事件属于哪类入侵,然后用相应的方法应急。
安全事件分级
I 级事件 -- 特别重大突发事件
- 网络大面积中断
- 主要业务大规模瘫痪
- 大规模用户/业务数据泄漏
II 级事件 -- 重大突发事件
- 大规模主机入侵
- 大规模业务数据损坏
- 小规模数据泄漏
- 政治敏感事件:官网挂黑页
III 级事件 -- 较大突发事件
- 部分业务系统遭受入侵
- 主要业务遭受DDOS
IV 级事件 -- 一般突发事件
- 部分业务系统宕机
- 部分业务系统异常/无法访问
通过对安全事件的定级,确认属于什么级别的事故,采取相应的应急预案和紧急程度的确认。
安全响应执行流程
- 事件发生(运维监控人员、客服审核人员等),发现问题的开始,及时通报
- 事件确认:判断事件的严重性,评估出问题的严重等级,是否向上进行汇报等
- 事件响应:各部门通力合作,处理安全问题,具体解决阶段
- 事件关闭:处理完事件之后,需要关闭事件,并写出安全应急处理分析报告,完成整个应急过程
被入侵的主机排查流程
- 定位被入侵的主机并且立即对该主机进行断网隔离
- 确定攻击类型
- 确定被入侵的时间范围
- 定位恶意文件和入侵痕迹
- 溯源入侵来源
- 清理恶意文件/修复漏洞
- 事件复盘
其实这是web安全工作人员最常见的排查流程,因为例如ddos这类的事件可能托管在运维侧,而安全工程师常常是应急网站被入侵后的安全事件。
被入侵的主机排查方法
1.检测补丁情况:看看有没有打了最新的补丁,看看是不是用漏洞搞进来的
- systeminfo | uname -a
2.日志分析:定位入侵路线,是系统配置出了问题(ssh 弱口令,域管理员hash 泄漏)还是WEB 服务出了问题(传马,WEB 漏洞利用)
- eventvwr | /var/log , .bash_history
- access.log mysql_log.log
3.账户信息:先看看是不是帐户有弱口令,再看看用户的登录时间,也观察一下有没有给留后门账户
- quser | who last
4.进程分析:定位一下看看有没有运行恶意进程
- procxp , pchunter | ps -aux , chkrootkit , rkhunter
5.文件分析:找找Shell 和后门,看看这个是什么样的Shell
- lchangedfiles | find / -ctime -1 -print
6.系统分析:计划任务,自启动服务等
Linux :
- history (cat /root/.bash_history) 查看执行过的命令,排查和溯源
- /etc/passwd 分析用户
- awk -F: ‘{if($3==0)print $1}‘ /etc/passwd 查看UID 为0 的帐号
- cat /etc/passwd | grep -E "/bin/bash$" 查看可以登录的帐号
- crontab /etc/cron* 查看计划任务
- rc.local /etc/init.d chkconfig 查看Linux 自启动程序
- last 查看最近用户登录信息
- lastb 查看最近用户登录错误信息
- $PATH 系统路径环境变量
- strings 提取字符串
Windows :
- 查看系统变量
- Windows 计划任务
- Windows 帐号信息
- SAM 文件
- Windows-Exploit-Suggester
附上常用应急命令:
以上是关于网络安全应急响应----9WebShell应急响应的主要内容,如果未能解决你的问题,请参考以下文章