文章目录
- 一、Webshell概述
-
- 什么是Webshell
- Webshell分类
- [Webshell 检测方法](#Webshell 检测方法)
- 二、常规处置方法
- 三、技术指南
-
- 1、初步预判
- [2、 Webshell排查](#2、 Webshell排查)
- 3、Web日志分析(查找攻击路径及失陷原因)
- 4、系统排查
-
- [4.1 Windows](#4.1 Windows)
- [4.2 Linux](#4.2 Linux)
- 5、系统日志
- 6、流量分析
- 案例
一、Webshell概述
什么是Webshell
shell
的概念源于操作系统,就是一个解析字符串命令并执行的程序。为了动态执行某些功能,编程语言一般会提供一些函数,将用户输入的字符串解析为语言代码,或解析为操作系统命令。典型的PHP一句话木马
:
php
<?php
eval($_GET['cmd']);
?>
通过网络IO(socket API),获得cmd
,eval()
将cmd字符串
当作操作系统命令执行。Webshell就是指JSP、ASP、PHP等编程语言(网页脚本)的程序,一般带有命令执行、文件操作等功能。通过Web服务器来通信和调用,并具有shell
的功能,称为Webshell。
Webshell分类
基于编程语言
理论上只要是编程语言都可以,只要实现相应的Web框架就行。
基于文件大小/提供的功能多少
- 大马
- 小马
- 一句话木马
Webshell 检测方法
- 基于流量:通过流量还原数据包,并对HTTP数据包中的字符串做正则匹配
- 基于文件:
- 计算文件的哈希值,创建Webshell样本hash库
- 检测文件属性(创建时间、文件权限等)
- 基于日志:分析日志中进行了什么可疑行为,溯源Webshell
二、常规处置方法
- 入侵时间确定
- Webshell 文件的创建时间 ---> 攻击的时间范围(根据此时间进行溯源分析、追踪攻击者活动路径)
- Web日志分析
- 重点关注入侵时间前后的日志记录,寻找攻击路径、所利用的漏洞
- 漏洞分析
- 通过日志中发现的问题,针对攻击者的活动路径,排查网站存在的漏洞,进行分析
- 漏洞复现
- 对发现的漏洞进行复现,还原攻击者的活动路径
- 漏洞修复
- 清除Webshell,修复存在的漏洞
三、技术指南
1、初步预判
1)事件表现:植入webshell,系统可能出现的异常现象
- 网页被篡改
- 安全设备告警
2)判断Webshell事件发生时间
- 根据异常现象发生能时间,结合Webshell创建时间,定位事件发生的时间段
3)判断系统架构(定位系统可能存在的漏洞)
项目 | 内容 |
---|---|
服务器 | Windows、Linux等 |
CMS | Jeecms、Wordpress、Drupal、TRS WCM、Phpcms、Dedecms等 |
中间件 | Tomcat、IIS、Apache、WebLogics、JBoss、Websphere、Jetty等 |
框架 | Struts2、Thinkphp、Spring、Shiro、Fastjson等 |
数据库 | MySQL |
脚本语言 | ASP、PHP、JSP等 |
业务架构 | 前端网页是否是后端通过FTP上传的 等 |
2、 Webshell排查
Windows:D盾、河马
Linux:河马、常用搜索命令
3、Web日志分析(查找攻击路径及失陷原因)
Windows下常见的中间件/Web服务器/HTTP服务器/Web容器
默认日志路径
Linux下的路径
常用日志检索的命令:
4、系统排查
攻击者上传Webshell之后,往往还会执行进一步操作,如提权、添加用户、写入系统后门等,实现持久化驻留。因此还需要做系统排查。
4.1 Windows
到了系统排查这一步,其实是利用操作系统提供的相关组件与配置信息,查找攻击者的痕迹。在Win10里,Windows提供的相关工具在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
都有相应快捷方式,打开到文件所在目录,这些工具几乎都在C:\Windows\system32
目录下。其他版本的,请自行百度
在Windows Server 2019下,按win键
,直接搜索"管理工具",
用户信息排查
- 用户排查:
net user
查看用户信息 (看不到隐藏用户)net user username
查看某个账户的详细信息
- 隐藏用户排查
- 打开【计算机管理】->【本地用户和组】(家庭版无该组件)
进程排查
- 进程名称(异常、不常见的名称要注意)
- 进程的路径、CPU占用信息
服务排查
- 服务说到底就是进程。比较新的Windows可以直接在任务管理器中看到服务
- 我们可以在【系统信息】->【软件环境】->【服务】下,看到服务的启动情况及其对应启动文件
网络连接排查
netstat -ano
-->查看当前网络连接情况,定位可疑的ESTABLISHED
连接
启动项
可以在按win键
搜【系统配置】,也可以在命令行输msconfig
,下图为我新装的win server 2019
计划任务
任务计划日志通常存放在C:\Windows\System32\Tasks
目录,可以直接打开系统的【任务计划程序】进行查看
文件排查
攻击想进一步扩大战果,就要上传一些远控木马等恶意文件。我们需要排查相关敏感目录,确定是否存在异常文件。
- temp相关目录
C:\Windows\temp
C:\users\Administrator\AppData\Local\temp
- recent 相关目录
C:\Documents and Settings\Administrator\recent
C:\Documents and Settings\Default User\recent
重点查看攻击时间范围内的文件,比如在非系统System32和Syswow64目录下的svchost.exe
文件基本为恶意文件,.ps1
为Powershell文件,可以直接编辑查看。
4.2 Linux
用户排查
cat /etc/passwd
,是否有未知用户- 重点分析
UID
为 0 的用户
进程排查 ps aux
, 优先关注CPU、内存占用比较高的进程
-
根据PID,使用
ls -alh /proc/PID
,查看其对应可执行程序,或使用lsof -p PID
。 -
lsof -i:port
,查看指定端口对应的可执行程序 -
查看隐藏进程,需下载
unhide
工具 -
查看系统运行的服务
systemctl --type service
网络连接
netstat -anp
,优先关注对外连接的进程,或连接高危端口的进程
netstat 命令详解
启动项
Linux中,系统启动内核挂载跟文件系统,然后启动并运行一个init
程序,init 是非内核进程中第一个被启动运行的,PID为1。init 读取其配置文件来进行初始化工作,init 的配置文件如下
操作系统 | 配置文件 |
---|---|
CentOS 5 | /etc/inittab |
CentOS 6 | /etc/inittab、/etc/init/*.conf |
CentOS 7 | /etc/systemd/ststem、/usr/lib/systemd/system |
init 进程的会运行开机启动程序,Linux 为不同的场合分配不同的开机启动程序,有称为"运行级别"(runlevel)
运行级别 | 说明 |
---|---|
运行级别0 | 系统停机状态,系统默认运行级别不能为0,否则不能正常启动 |
运行级别1 | 单用户工作状态,root 权限,用于系统维护,禁止远程登录 |
运行级别2 | 多用户状态(没有NFS) |
运行级别3 | 完全的多用户状态(有NFS),登陆后进入控制台命令行模式 |
运行级别4 | 系统未使用,保留 |
运行级别5 | X11 控制台,登陆后进入GUI模式 |
运行级别6 | 系统正常关闭并重启,系统默认运行级别不能为6,否则将不能正常启动 |
7个运行级别对应7个目录,在/et/c/rc[0-6].d
,里面的软链接,真实文件都在/etc/rc.d/init.d
(内核较新或者不同发行版目录会有差异)。init.d
目录通常存放一些脚本,类似Windows中的注册表;rc.local
文件会在用户登陆前读取,每次系统启动时都会执行一次。(内核较新的都用systemd,这些文件会舍弃,下图是rc.local文件的内容)
关于systemd
cat /etc/init.d/rc.local
cat /etc/rc.local
ls -alt /etc/init.d
定时任务
crontab
可以设置定时任务,直接用crontab -e
编辑的是用户级别的定时任务,保存在/var/spool/cron/crontabs/{user}
下,/etc/crontab
是系统级别的定时任务;/etc
下还有cron.daily
等周期性执行脚本。
crontab -l
,查看当前用户的定时任务,检查是否有后门木马程序启动相关信息ls /etc/cron*
查看 etc 目录下系统及定时任务相关文件
文件排查
ls -al
查看隐藏文件find / -mtime 0
查看最近24小时内修改过的文件stat filename
查看文件的修改、创建、访问时间ls -alh /tmp
查看 tmp 目录文件ls -alh /root/.ssh
查看是否存在恶意 ssh 公钥