应急响应

windows

文件排查

(1)开机启动有无异常文件 【开始】➜【运行】➜【msconfig】

(2)各个盘下的 temp(tmp)相关目录下查看有无异常文件 :Windows 产生的临时文件

(3)Recent 是系统文件夹,里面存放着你最近使用的文档的快捷方式,查看用 户 recent 相关文件,通过分析最近打开分析可疑文件: 【开始】➜【运行】➜【%UserProfile%\Recent】

(4)根据文件夹内文件列表时间进行排序,查找可疑文件。当然也可以搜索指 定日期范围的文件及文件

(5)查看文件时间,创建时间、修改时间、访问时间,黑客通过菜刀类工具改 变的是修改时间。所以如果修改时间在创建时间之前明显是可疑文件

进程排查

(1)netstat -ano 查看目前的网络连接,定位可疑的 ESTABLISHED

netstat 显示网络连接、路由表和网络接口信息; 参数说明:

-a 显示所有网络连接、路由表和网络接口信息

-n 以数字形式显示地址和端口号

-o 显示与每个连接相关的所属进程 ID

-r 显示路由表

-s 显示按协议统计信息、默认地、显示 IP

常见的状态说明:

LISTENING 侦听状态

ESTABLISHED 建立连接

CLOSE_WAIT 对方主动关闭连接或网络异常导致连接中断

1
netstat -ano | findstr ESTABLISHED

(2)根据 netstat 定位出的 pid,再通过 tasklist 命令进行进程定位

tasklist 显示运行在本地或远程计算机上的所有进程;

1
tasklist | findstr 7320

(3)根据 wmic process 获取进程的全路径 [任务管理器也可以定位到进程路 径]

1
wmic process | findstr "simple-obfs.exe"

系统信息排查

(1)查看环境变量的设置

【我的电脑】➜【属性】➜【高级系统设置】➜【高级】➜【环境变量】

排查内容:temp 变量的所在位置的内容;后缀映射 PATHEXT 是否包含有非windows 的后缀;有没有增加其他的路径到 PATH 变量中(对用户变量和系统变 量都要进行排查);

(2)Windows 计划任务

【程序】➜【附件】➜【系统工具】➜【任务计划程序】

(3)Windows 帐号信息,如隐藏帐号等

【开始】➜【运行】➜【compmgmt.msc】➜【本地用户和组】➜【用户】 (用户名以$结尾的为隐藏用户,如:admin$)

命令行方式:net user,可直接收集用户信息(此方法看不到隐藏用户),若需查 看某个用户的详细信息,可使用命令

1
net user username

(4)查看当前系统用户的会话

使用query user 查看当前系统的会话,比如查看是否有人使用远程终端登录 服务器

1
query user

(5)查看 systeminfo 信息,系统版本以及补丁信息

例如系统的远程命令执行漏洞 MS17-010(永恒之蓝)、MS08-067、MS09-001 … 若进行漏洞比对,建议自建使用 Windows-Privilege-Escalation-Exploit;

Github 源码:https://github.com/neargle/win-powerup-exp-index

工具排查

(1)PC Hunter

PC Hunter 是一个 Windows 系统信息查看软件

下载地址:http://www.xuetr.com/

1.进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能

2.内核驱动模块查看,支持内核驱动模块的内存拷贝

3.SSDT、Shadow SSDT、FSD、KBD、TCPIP、Classpnp、Atapi、Acpi、SCSI、IDT、GDT 信息查看,并能
检测和恢复 ssdt hook 和 inline hook

4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego 等
Notify Routine 信息查看,并支持对这些 Notify Routine 的删除

5.端口信息查看,目前不支持 2000 系统

6.查看消息钩子

7.内核模块的 iat、eat、inline hook、patches 检测和恢复

8.磁盘、卷、键盘、网络层等过滤驱动检测,并支持删除

9.注册表编辑

10.进程 iat、eat、inline hook、patches 检测和恢复

11.文件系统查看,支持基本的文件操作

12.查看(编辑)IE 插件、SPI、启动项、服务、Host 文件、映像劫持、文件关联、系统防火墙规则、IME

13.ObjectType Hook 检测和恢复

14.DPC 定时器检测和删除

15.MBR Rootkit 检测和修复

16.内核对象劫持检测

17.WorkerThread 枚举

18.Ndis 中一些回调信息枚举

19.硬件调试寄存器、调试相关 API 检测

20.枚举 SFilter/Fltmgr 的回调

(2)ProcessExplorer

Windows 系统和应用程序监视工具;

(3)Microsoft Network Monitor

一款轻量级网络协议数据分析工具;

日志排查

(1)Windows 登录日志排查

a)打开事件管理器

【开始】➜【管理工具】➜【事件查看】

【开始】➜【运行】➜【eventvwr】

b)主要分析安全日志,可以借助自带的筛选功能

可以把日志导出为文本格式,然后使用 notepad++ 打开,使用正则模式去匹配 远程登录过的 IP 地址,在界定事件日期范围的基础

正则:

1
((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

(2)IIS 日志排查

a)查找 IIS 日志存放位置

【开始】➜【IIS 管理器】➜【网站】➜【日志】

IIS7.0:%SystemDrive%\inetpub\logs\LogFiles

b)Log Parser 快速日志分析工具

Log Parser 是一个用于日志文件分析的使用简单又强大的工具,多用于分析 IIS web 服务器的日志,支持基于文本的日志文件、XML 文件、CSV(逗号分隔 符)文件以及注册表、文件系统等内容,它可以把相应的分析结果以图形的形式 展现出来,大大地方便了运营人员;

下载地址: https://www.microsoft.com/en-us/download/confirmation.aspx?id=24659

用法:

1
LogParser.exe "select top 10 time, c-ip,cs-uri-stem, sc-status, time-taken from C:\Users\liuhao02\Desktop\排查\样本\iis.log" -o:datagrid

Log Parser Lizard 是一款用 Vc++.net 写的 logParser 增强工具。主要有以下特 点:

a) 封装了 logParser 命令,带图形界面,大大降低了 LogParser 的使用难度。

b) 集成了几个开源工具,如 log4net 等。可以对 IIS logs\EventLogs\active directory\log4net\File
Systems\T-SQL 进行方便的查询。

c) 集成了 Infragistics.UltraChart.Core.v4.3、Infragistics.Excel.v4.3.dll 等,使查询结果可以方便的以图表或
EXCEL 格式展示。

d) 集成了常见的查询命令,范围包含六大模块:IIS

e) 可以将查询过的命令保存下来,方便再次使用。

linux

文件排查

1)敏感目录的文件分析

ls 用来显示目标列表

-a 显示所有档案及目录(ls 内定将档案名或目录名称为“.”的视为影藏,不会列出);

-C 多列显示输出结果。这是默认选项

-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、
硬连接数、所有者、组、文件大小和文件的最后修改时间等;

-t 用文件和目录的更改时间排序;

2) 查看 tmp 目录下的文件

1
ls –alt /tmp/

3) 查看开机启动项内容

1
ls -alt /etc/init.d/

/etc/init.d 是 /etc/rc.d/init.d 的软链接

4) 按时间排序查看指定目录下文件

1
ls -alt | head -n 10

针对可疑文件可以使用 stat 进行创建修改时间、访问时间的详细查看,若 修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他。

(1)Access Time:简写为 atime,表示文件的访问时间。当文件内容被访问时,更新这个时间。

(2)Modify Time:简写为 mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这
个时间。

(3)Change Time:简写为 ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例
如文件的链接数,大小,权限,Blocks 数。

5) 查看历史命令记录文件~/.bash_history

1
sudo cat /root/.bash_history | more

6) 查看操作系统用户信息文件/etc/passwd

其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell

7) 查看新增文件

find:在指定目录下查找文件

​ # -name //根据文件名查找(精确查找)

​ # -iname //根据文件名查找,但是不区分大小写

​ # -user //根据属主来查找文件

​ # -group //根据属组来查找文件

​ #find /tmp -uid 500 //查找uid是500 的文件

​ #find /tmp -gid 1000 // 查找gid是1000的文件

​ # -o 连接两个不同的条件(两个条件满足其一即可)

​ # -not 对条件取反的

​ -type

​ f // 普通文件

​ d //目录文件

​ l //链接文件

​ b //块设备文件

​ c //字符设备文件

​ p //管道文件

​ s //socket文件

[查找完执行的action]

​ # -print //默认情况下的动作

​ # -ls //查找到后用ls 显示出来

​ # -ok [commend] //查找后执行命令的时候询问用户是否要执行

​ # -exec [commend] //查找后执行命令的时候不询问用户,直接执行

find /tmp -name "*.sh" -exec chmod u+x {} ; //这里要注意{}的使用:替代查找到的文件

find /tmp -name "*.sh" -exec cp {} {}.old ; //这里要注意{}的使用:替代查找到的文件

find /tmp -atime +30 –exec rm –rf {} \; //删除查找到的超过30天没有访问过文件

find /var/www/ -type f -name '*.php'|xargs grep 'eval' |more //使用xargs来对查找到的文件进一步操作

-mtime -n +n 按文件更改时间来查找文件,-n 指 n 天以内,+n 指 n 天前

-atime -n +n 按文件访问时间来查找文件,-n 指 n 天以内,+n 指 n 天前

-ctime -n +n 按文件创建时间来查找文件,-n 指 n 天以内,+n 指 n 天前

1
2
find ./ -mtime 0 -name "*.php"	(查找 24 小时内被修改的 php 文件)
find / -ctime 2 (查找 72 小时内新增的文件)

8) 特殊权限的文件查看

1
find / *.jsp -perm 4777

9)隐藏的文件(以 "."开头的具有隐藏属性的文件)

1
ls -ar | grep "^\."

10)查看分析任务计划

1
crontab -u <-l, -r, -e>

-u 指定一个用户

-l 列出某个用户的任务计划

-r 删除某个用户的任务

-e 编辑某个用户的任务(编辑的是/var/spool/cron 下对应用户的 cron 文件,也可以直接修改
/etc/crontab 文件)

  • 通过 crontab –l 查看当前的任务计划有哪些,是否有后门木马程序启动相 关信息;
  • 查看 etc 目录任务计划相关文件,ls /etc/cron*

进程排查

1)用 netstat 网络连接命令,分析可疑端口、可疑 IP、可疑 PID 及程序进程

选项参数:

-a 显示所有连线中的 Socket。

-n 直接使用 IP 地址,而不通过域名服务器。

-t 显示 TCP 传输协议的连线状况。

-u 显示 UDP 传输协议的连线状况。

-v 显示指令执行过程。

-p 显示正在使用 Socket 的程序识别码和程序名称。

-s 显示网络工作信息统计表。

1
netstat –antlp | more

a) "Recv-Q"和"Send-Q"指的是接收队列和发送队列。

b) Proto 显示连接使用的协议;RefCnt 表示连接到本套接口上的进程号;Types 显示套接口的类型;
State 显示套接口当前的状态;Path 表示连接到套接口的其它进程使用的路径名。

c) 套接口类型:
-t TCP

-u UDP

-raw RAW 类型

--unix UNIX 域类型

--ax25 AX25 类型

--ipx ipx 类型

--netrom netrom 类型

d)状态说明:

LISTENING 侦听状态

ESTABLISHED 建立连接

CLOSE_WAIT 对方主动关闭连接或网络异常导致连接中断

2)根据 netstat 定位出的 pid,使用 ps 命令,分析进程

1
ps aux | grep pid | grep –v grep

-a 代表 all。同时加上 x 参数会显示没有控制终端的进程

-aux 显示所有包含其他使用者的行程(ps -aux --sort -pcpu | less 根据 cpt 使用率进行排序)

-C 显示某的进程的信息

-axjf 以树形结构显示进程

-e 显示所有进程。和 -A 相同。

-f 额外全格式

-t ttylist by tty 显示终端 ID 在 ttylist 列表中的进程

将 netstat 与 ps 结合

3)以下相关步骤只针对挖矿、DDoS相关安全事件的排查,以便快速、高效解决问题。其他安全事件按照通用事件排查步骤即可。

1
2
top -c : 快速查看进程信息,并获取进程文件位置
kill -9 PID : 杀死进程

根据恶意进程、文件特征如:文件名、文件大小、文件创建时间进行全盘搜索

1
2
3
4
5
6
7
8
9
10
11
grep -rni "shell.name" * : 根据文件名特征查找

find / -size 1223123c : 根据文件大小特征查找

find / -mtime 1 -name * : 根据文件创建时间查找

lsof -p PID:查看进程占用信息

cd /proc/PID : 进入到进程中

cat * |strings -n 5 |more : 读取该进程内存中的信息

lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
>-a:列出打开文件存在的进程;
>-c<进程名>:列出指定进程所打开的文件;
>-g:列出GID号进程详情;
>-d<文件号>:列出占用该文件号的进程;
>+d<目录>:列出目录下被打开的文件;
>+D<目录>:递归列出目录下被打开的文件;
>-n<目录>:列出使用NFS的文件;
>-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
>-p<进程号>:列出指定进程号所打开的文件;
>-u:列出UID号进程详情;
>-h:显示帮助信息;
>-v:显示版本信息。
>

检测网络

1
2
3
4
5
6
7
lsof -i:5000 : 查看5000端口的占用情况

netstat -nap : 查看不正常端口

netstat -an | grep tcp | awk '{print $5}' : 查看TCP连接

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more : 查看SYN连接

日志排查

Linux 系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录, 并可以从中检索出我们需要的信息。大部分 Linux 发行版默认的日志守护进程为 syslog,位于/etc/syslog/etc/syslogd/etc/rsyslog.d,默认配置文件为/etc/syslog.confrsyslog.conf,任何希望生成日志的程序都可以向 syslog 发 送信息。 Linux 系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信 息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到 日志文件中去。完成这个过程的程序就是 syslog。syslog 可以根据日志的类别和 优先级将日志保存到不同的文件中。

1)日志类型

(4)日志配置

linux 系统日志相关配置文件为/etc/rsyslog.conf(syslog.conf),以下是对配置文 件各项配置;

(5)日志分析

日志查看分析,主要为 grep,sed,sort,awk 的综合运用;

5.1、基于时间的日志管理:

5.1.1、/var/log/wtmp

  • /var/log/wtmp 是一个二进制文件,记录每个用户的登录次数和持续时间等 信息;
  • last 命令 last 命令用于显示用户最近登录信息。单独执行 last 命令,它会读取 /var/log/wtmp 的文件,并把该给文件的内容记录的登入系统的用户名单全 部显示出来;

-f: <记录文件>:指定记录文件

-a: 把从何处登入系统的主机名称或 ip 地址,显示在最后一行

5.1.2、/var/run/utmp

/var/run/utmp 是一个二进制文件,记录当前登录系统的用户信息。可用 who 命 令显示当中的内容,Who 的缺省输出包括

5.1.3、/var/log/lastlog

/var/log/lastlog 记录用户最后登录的时间和登录终端的地址,可使用 lostlog 命 令查看;

5.2、系统日志

/var/log/secure

安全日志 secure 包含验证和授权方面信息,比如最常用的远程管理协议 ssh, 就会把所有授权信息都记录在这里。所以通过查看该日志,我们就能查看是否有 人爆破 ssh,通过查看存在过爆破记录的 ip 是否有成功登录的行为,我们就能知 道是否有攻击者通过 ssh 暴力破解的方式成功攻击进来了。通过时间的纬度去判 断,可以查看出是机器行为还是人为的,机器登录事件间隔特别密; 主要分析点:是否有 ip 爆破 ssh 成功

定位有多少 IP 在爆破主机的 root 帐号:

1
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的 IP 有哪些:

1
grep "Accepted " /var/log/ secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。

1
2
3
4
5
6
7
8
9
10
>-c或——count:在每列旁边显示该行重复出现的次数;
>-d或--repeated:仅显示重复出现的行列;
>-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
>-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
>-u或——unique:仅显示出一次的行列;
>-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
>sort file.txt | uniq -u 只显示单一行
>sort file.txt | uniq -c 统计各行在文件中出现的次数
>sort file.txt | uniq -d 在文件中找出重复的行
>

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

1
2
3
4
5
6
7
8
9
10
11
12
13
>-b:忽略每行前面开始出的空格字符;
>-c:检查文件是否已经按照顺序排序;
>-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
>-f:排序时,将小写字母视为大写字母;
>-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
>-m:将几个排序号的文件进行合并;
>-M:将前面3个字母依照月份的缩写进行排序;
>-n:依照数值的大小排序;
>-o<输出文件>:将排序后的结果存入制定的文件;
>-r:以相反的顺序来排序;
>-t<分隔字符>:指定排序时所用的栏位分隔字符;
>+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
>

5.3、中间件日志

Web 攻击的方法多种多样,但是默认情况下 Web 日志中所能记录的内容并不算丰富,最致命的是 web 日志是不会记录 post 内容的,想要从 Web 日 志中直接找出攻击者的 webshell 是非常难的,所以一般来说我们的分析思路都 是先通过文件的方式找到 webshell,然后再从日志里找到相应的攻击者 ip,再去 分析攻击者的整个攻击路径,来回溯攻击者的所有行为;

但各种各样的原因,如黑客在入侵完了之后把 webshell 删除了,通过文件搜 索的方式找不到 webshell 或者只能通过分析 web 日志去发现 webshell,比如这 时候要排查的话,难度会稍大。Web 日志主要分析 access_log,本文以常见的中 间件 apache 为例,其他中间件日志格式和分析思路大同小异;

Apache 默认自动生成两个日志文件,访问日志 access_log 和 error_log;

在 url 中视图搜索所有关键词为“union”的请求,可以发现 172.24.123.120 在尝试 SQL 注入,类似,通过通过特殊的关键词搜索 web 攻击。如/etc/passwd, alert 等。但单凭 web 日志无法判断攻击者是否攻击成功了,只能知道攻击者在 尝试攻击;

1
cat access.log.1 | grep "union"

查询访问量前十的 IP 地址:

取第一列的值,以 ' ' 分割,sort排序,uniq去重

1
2
3
4
5
6
7
cat /etc/passwd | sort -t ':' -nk 3			#从小到大,以冒号为分隔符,第三列。
cat /etc/passwd | sort -t ':' -nnk 3 #从大到小
ls -lA | grep ^- | sort -nrk 5    #-代表文件,默认以空格分隔
sort 1.txt | uniq #去重,有多行的只显示一行
cat 1.txt |sort |uniq -c #显示每一项重复的次数
cat 1.txt |sort |uniq -c |sort -rnk 1  #输出行重复的次数,按重复次数从大到小的顺序输出
cat test.txt |sort |uniq -u #输出没有重复的行
1
cat acccess.log.1 | cut -f 1 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10

查询访问量前十的 URL:

1
cat acccess.log.1 | cut -f 7 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10

cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令。

1
2
3
4
5
6
7
8
9
10
>-b:仅显示行中指定直接范围的内容;
>-c:仅显示行中指定范围的字符;
>-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
>-f:显示指定字段的内容;
>-n:与“-b”选项连用,不分割多字节字符;
>--complement:补足被选择的字节、字符或字段;
>--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
>--help:显示指令的帮助信息;
>--version:显示指令的版本信息。
>

统计访问量前十 QPS 的时间点:

1
cat acccess.log.1 | cut -f 4 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10

5.4、数据库日志

数据库日志以常用的数据库 Mysql 数据库为例。Mysql 数据库有五种日志,错误 日志、查询日志、慢查询日志、更新日志、二进制日志,重点关注查询日志; 查看是否开启查询日志:

1
mysql> show global variables like '%log%'

查看数据库文件:路径为/var/log/mysql/,记录一次数据库的连接、查询和退出 中间的数据库操作

检查计划任务

crontab -u root -l : 查看root用户的计划任务

cat /etc/crontab : 查看/etc/crontab

ls -al /etc/cron.* : 查看cron文件是否变化的详细信息

ll /var/spool/cron/ : 查看/var/spool/cron/

检查系统命令

ls -alt /bin/ | head -n 10

ls -alt /usr/sbin/ | head -n 10

ls -alt /usr/bin/ | head -n 10

后门排查

(1)系统后门排查

➜chkrootkit:

chkrootkit 是用来监测 rootkit 是否被安装到当前系统中的工具。rootkit ,是一 类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这 类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途 径。所以,我们要用 chkrootkit 来定时监测系统,以保证系统的安全。 下载链接:(www.chkrootkit.org)

chkrootkit 主要功能:

  • 检测是否被植入后门、木马、rootkit
  • 检测系统命令是否正常
  • 检测登录日志

a) chkrootkit 安装:

1
rpm -ivh chkrootkit-0.47-1.i386.rpm

b) 检测

1
chkrootkit –n;

如果发现有异常,会报出“INFECTED”字样。

c) 定时检测

chkrootkit 自带的脚本并没有包括定时检测部分,而考虑到该工具的作用。 建议编写一个脚本,并加入计划任务中。并把脚本加入 crontab 中:cp -p ./chkrootkit.sh /etc/cron.daily/

➜Rkhunter:

rkhunter 是 Linux 系统平台下的一款开源入侵检测工具,具有非常全面的扫 描范围,除了能够检测各种已知的 rootkit 特征码以外,还支持端口扫描、常用 程序文件的变动情况检查。

rkhunter 主要功能:

  • 系统命令(Binary)检测,包括 Md5 校验
  • Rootkit 检测
  • 本机敏感目录、系统配置、服务及套间异常检测

➜RPM check 检查

系统完整性也可以通过 rpm 自带的-Va 来校验检查所有的 rpm 软件包,有哪 些被篡改了,防止 rpm 也被替换,上传一个安全干净稳定版本 rpm 二进制到服务 器上进行检查。

1
./rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示 出来。输出格式是 8 位长字符串,c 用以指配置文件, 接着是文件名. 8 位字符的 每一个 用以表示文件与 RPM 数据库中一种属性的比较结果 。 . (点) 表示测试 通过。.下面的字符表示对 RPM 软件包进行的某种测试失败

5 MD5 校验码

S 文件尺寸

L 符号连接

T 文件修改日期

D 设备

U 用户

G 用户组

M 模式 e (包括权限和文件类型)

下图可知 ps, pstree, netstat, sshd 等等系统关键进程被篡改了:

webshell check

Webshell 的排查可以通过文件、流量、日志三种方式进行分析,基于文件的 命名特征和内容特征,相对操作性较高,在入侵后排查过程中频率也比较高。

a)Webshell 的排查可以通过可根据 webshell 特征进行命令查找,简单的可使用(当然会存在漏报和误报)

1
2
find /var/www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval
\(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode'

b)Github 上存在各种版本的 webshell 查杀脚本,各有各的自己的特点,可使用河马 shell 查杀
(shellpub.com)

综上所述,通过 chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得 出以下应对措施:

1.根据进程、连接等信息关联的程序,查看木马活动信息。

2.假如系统的命令(例如 netstat ls 等)被替换,为了进一步排查,需要下载一新的或者从其他未感染的
主机拷贝新的命令。

3.发现可疑可执行的木马文件,不要急于删除,先打包备份一份。

4.发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连 IP 地址、加密方式、关键字(以
便扩大整个目录的文件特征提取)等。

2)手工 Webshell 排查

通过文件内容中的危险函数,去找到网站中的 web 后门。最常见的 Webshell 文件内容中常见的恶意函数:

PHP

1
Eval、System、assert、……

JSP

1
getRunTime、 FileOutputStream、……

ASP

1
eval、execute、 ExecuteGlobal、……
1
find /var/www/html/ -type f -name  '*.php'|xargs grep 'eval' |more

有时候黑客在上传完 webshell 后门,获取到自己想要的信息后,就会删除掉 webshell,又或者遇到了一些变形过的 webshell 后门,我们的关键字没有搜索到, 这时候通过文件去找到 webshell 的方法就不适用了。那么这个时候就只能通过 分析 web 日志,来找到黑客的 webshell 文件。直接分析 web 日志的最直接方式 就是通过 web 日志中的特征来判断是否存在恶意的 webshell 后门,比如上面列 表展示的这些常见 webshell 会传递的 get 参数。常见 webshell 后门日志特征如 下:

1
2
3
4
5
Darkblade:goaction=login
JspSpy:o=login
PhpSpy:action=phpinfo
Regeorg: cmd=connect
Other:cmd=

不过这种方式能发现的问题不多,因为很多时候 web 后门接收参数的方式 都是 post,前面说了大部分中间件默认情况下只能记录 get,如果需要记录 post 的话,就需要安装第三方模块

Ps:常规黑客攻击流程,一个黑客通常通过 web 漏洞获取管理员密码进入后台,然后上传 webshell,这
个 webshell 文件在以前的访问记录是没有的,那么我们就可以通过统计每天访客所访问过的动态脚本文
件,来列出每天新增加的文件入口的记录,快速查找 webshell 后门,最后我们可以根据统计低频访问的
动态脚本文件,来找出可能是 webshell 的文件,因为一般来说 webshell 的访问 ip 只有几个,并且访问
的次数也不多,那么根据这个分析模型,我们就可以发现可能是恶意的动态脚本文件。此排查需要懂一
点了解编程,作为思路了解。

参考:

https://mp.weixin.qq.com/s/JP_CteKXJ48y4zKtmPx7Zw

https://mp.weixin.qq.com/s/ul29FxC_c2PAOZ5vwvtedA

-------------本文结束感谢您的阅读-------------