# 溯源取证总结

# 类型

  • web 入侵:挂马、网页篡改(博彩 / 黑帽 SEO 等)、植入 webshell,黑页,暗链等
  • 主机入侵:病毒木马、勒索软件、远控后门、系统异常、RDP 爆破、SSH 爆破、主机漏洞、数据库入侵等
  • 网络攻击:DDOS 攻击、DNS/HTTP 劫持、ARP 欺骗等
  • 路由器 / 交换机异常:内网病毒,配置错误等

# 初步信息收集

  • 客户属性:如名称 / 区域 / 领域等
  • 入侵范围:如主机数 / 网段等
  • 入侵现象:如 cpu 过高,勒索界面,异常网络链接,安全设备告警等
  • 客户需求:是否要求溯源,是否要求协助修复等
  • 收集信息:操作系统版本,补丁,数据库版本,中间件 / 服务器,网络拓扑,受害范围,处置情况,提取日志(主机,安全设备,数据库等)

应急响应资源:https://github.com/theLSA/hack-er-tools

# 分析流程image-20210505094445689

# Web 应急响应

各类中间件/服务器日志默认存放位置

服务名 服务器日志默认存放位置
IIS C:\WINDOWS\system32\LogFiles
apache Linux:/usr/local/apache/logs/
Windows:apache/logs/
tomcat conf/logging.properties
logs/catalina.xx.log
logs/host-manager.xx.log
logs/localhost.xx.log
logs/manager.xx.log
主要记录系统启、关闭日志、管理日志和异常信息
weblogic domain_name/servers/server_name/logs/
server_name.log:server 启停日志
access.log:安装在该 server 之上的应用 http 访问日志
jboss LOG4J 配置默认 Deploy/conf/
如 jboss/server/default/conf/jboss-log4j.xml

# webshell 排查

1
2
1. 整站打包用webshell扫描工具扫
2. 利用Linux find命令查询木马
1
2
3
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
1
grep -i –r eval($_post /app/website/*
1
find /app/website/ -type f|xargs grep eval($_post

# 数据库排查

mysql和mssql日志

日志类型 (mysql)
错误日志 默认开启,hostname.error
查询日志 记录用户的所有操作。默认关闭,general_log_file(常见 getshell 手法)
慢查询日志 记录执行时间超过指定时间的查询语句,slow_query_log_file(慢查询 getshell)
事务日志 ib_logfile0
二进制日志 记录修改数据或有可能引起数据改变的 mysql 语句,log_bin,默认在数据目录,如
mysql-bin.000001
日志类型 (mssql) 版本 **** 默认路径
SQL SERVER 2005 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG
SQL SERVER 2008 Program Files\Microsoft SQL Server\MSSQL10. 实例名 \MSSQL\LOG
SQL SERVER 2008 R2 Program Files\Microsoft SQL Server\MSSQL10_50. 实例名 \MSSQL\LOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
小总结
1. mysql\lib\plugin目录的异常文件

2. select * from mysql.func的异常

3. mssql检查xp_cmdshell等存储过程

4. 异常数据库登录

5. 数据库用户弱口令

6. mysql相关命令
show global variables like '%log%';
show global variables like '%gene%';
show master status;
systemmore /mydata/data/stu18_slow.log;
showbinary logs;
showmaster logs;
showbinlog events in 'mysql-bin.000011';
show processlist;

# Linux 应急响应

# 文件

Linux 命令 说明
ls -alt 按时间排序以长字符串的形式显示所有文件
find / -ctime 2 查找 72 小时内新增的文件
find ./ -mtime 0 -name “*.jsp” 查找 24 小时内被修改的 JSP 文件
ls -al /tmp |grep “Feb 27” 根据确定时间去反推变更的文件
find / *.jsp -perm 4777 查找 777 的权限的文件
strings /usr/bin/.sshd |egrep ‘1-9.1-9.’ 分析 sshd 文件是否包括 IP 信息
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime 0 更改的信息
find /tmp -iname “*” -atime 1 -type f 访问的信息
/var/run/utmp 有关当前登录用户的信息记录
~/.ssh
/etc/passwd 用户列表
文件日期、新增文件、可疑 / 异常文件、最近使用文件、浏览器下载文件

# 日志

这里附上一张图片

image-20210505103536118

补充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/var/log/wtmp 登录进入,退出,数据交换、关机和重启纪录,即last
/var/log/lastlog 文件记录用户最后登录的信息,即lastlog
/var/log/secure 记录登入系统存取数据的文件,如 pop3/ssh/telnet/ftp
/var/log/cron 与定时任务相关的日志信息,记录crontab命令是否被正确的执行
/var/log/message 系统启动后的信息和错误日志,包括整体系统信息
/var/log/apache2/access.log apache有关权限日志
/var/log/auth.log 包含系统授权信息,包括用户登录和使用的权限机制等
/var/log/userlog 记录所有等级用户信息的日志
/var/log/xferlog(vsftpd.log)记录Linux FTP日志
/var/log/secure 记录大多数应用输入的账号与密码,登录成功与否
/var/log/faillog 记录登录系统不成功的账号信息
扩展(历史记录)
history (cat /root/.bash_history)
mysql-history (cat /root/.mysql_history)

利用正则表达式筛选条件

正则表达式筛选条件 效果
grep ‘Failed’ /var/log/secure |awk ‘{print $11}’ |sort |uniq -c |sort -nr 查看爆破失败的 IP
grep ‘Accepted’ /var/log/secure |awk ‘{print $11}’ |sort |uniq -c |sort -nr 查看登录成功的 IP
grep “Failed password for root” /var/log/auth.log |awk ‘{print $11}’ |sort |uniq -c |sort -nr |more 定位有多少 IP 在爆破主机的 root 帐号
grep "Accepted " /var/log/auth.log |awk ‘{print $11}’ |sort |uniq -c |sort -nr |more 登录成功的 IP
tail -400f demo.log 监控最后 400 行日志文件的变化 等价与 tail -n 400 -f (-f 参数是实时)
uniq -c demo.log 标记该行重复的数量,不重复值为 1
grep -c ‘ERROR’ demo.log
cat /var/log/secure |grep 'Accepted password‘
输出文件 demo.log 中查找所有包行 ERROR 的行的数量
grep "Accepted " /var/log/secure* |awk ‘{print $1,$2,$3,$9,$11}’ 查看登录成功的日期、用户名及 IP
grep “refused” /var/log/secure* |awk {‘print $9’} |sort |uniq -c |sort -nr |more (开启 iptables 的情况)
grep “Failed password” /var/log/secure* |grep -E -o “((0-9).(0-9).(0-9).(0-9))” |uniq -c (没开启防火墙的情况)
查看试图爆破主机的 IP
grep “Failed password for root” /var/log/secure |awk ‘{print $11}’ |sort 查看爆破主机的 ROOT 账号的 IP
grep “Failed password” /var/log/secure |awk {‘print $9’} |sort |uniq -c |sort -nr 查看爆破用户名字典
grep -o “Failed password” /var/log/secure|uniq -c
grep "Accepted " /var/log/secure |awk ’
查看爆破用户名字典

# 用户

Linux 命令 效果
last 显示用户最近登录信息
cat /etc/shadow 查看密码登陆相关信息
uptime 查看用户登陆时间
/etc/sudoers sudo 用户列表
awk -F: ‘($3==0){print$1}’ /etc/passwd 查看 UID 为 0 的帐号
awk -F: ‘($2==""){print$1}’ /etc/shadow 查看密码为空的账号
cat /etc/passwd |grep -E “/bin/bash$” 查看能够登录的帐号
lastlog 系统中所有用户最近一次登录信息
lastb 用户错误的登录列表
more /etc/sudoers |grep -v “#|$” |grep “ALL=(ALL)” 查看 sudo 权限的用户
who 查询 utmp 文件并报告当前登录的每个用户
w 查询 utmp 文件并显示当前系统中每个用户和它所运行的进程信息
users 打印当前登录的用户,每个用户名对应一个登录会话。如果一个用户不止一个登录会话,其用户名显示相同次数

# 进程

进程命令 效果
lsof 列出当前系统打开文件的工具
ps aux |grep pid |grep –v grep 查看对应的进程信息
lsof -i:1677 查看指定端口对应的程序
lsof -p 1234 检查 pid 号为 1234 进程调用情况
strace -f -p 1234 跟踪分析 pid 号为 1234 的进程
lsof -g gid 找恶意文件关联的 lib 文件
ps -ef 查看全格式的全部进程
pstree -a 以树状图的方式展现进程之间的派生关系
ps -ef |awk ‘{print}’ |sort -n |uniq >1
ls /proc |sort -n |uniq >2
隐藏进程查看
diff 1 2 比较文本文件的异同处
netstat -anptl 显示网络状态,端口信息
top 实时显示系统中各个进程的资源占用状况

# 自启动

启动配置文件 特征
~/.bashrc 用户 HOME 家目录启动文件
/etc/rc.local 开机启动程序
/etc/init.d/ 服务 服务启动关闭
/etc/cron* 定时任务
chkconfig --list |grep “3:on|5:on” 查看开机自启动服务

# 计划任务

查看计划任务命令
crontab -l & cat /etc/crontab & ls /etc/cron.* 查看计划任务
crontab -e 进行修改计划任务
crontab -u root -l 显示 root 用户计划任务
配置文件
/var/spool/cron/* root 用户执行的就会在 /var/spool/cron/ 下面创建 root 文件
/etc/cron.d cron 任务可以根据调度来执行
/etc/cron.daily/ 每日计划 *
/etc/cron.hourly/ 小时计划 *
/etc/cron.monthly/ 月计划 *
/etc/cron.weekly/ 周计划
/etc/anacrontab Anacrontab 的配置入口
/var/log/cron* 日志计划程序
1
2
3
4
5
6
7
8
9
misc 杂
stat 命令查看文件或文件系统的状态时间等属性
echo $PATH 查看环境变量
/rpm -Va > rpm.log 校验所有的RPM软件包,查找丢失的文件
kill -9 强制杀死进程
chattr –i 取消锁定文件
setfacl / getfacl ACL权限设置
chmod 000 去执行权限
strings /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.' ssh后门快速判断

# Windows 取证

思维导图

image-20210505135434533

# 文件

分析文件路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
文件路径
C:\Documents and Settings\Administrator\Recent
C:\Documents and Settings\Default User\Recent
%UserProfile%\Recent 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件
下载目录
回收站文件
程序临时文件
历史文件记录
应用程序打开历史
搜索历史
快捷方式(LNK)
c:\windows\temp\
Window 2003 C:\Documents and Settings
Window 2008R2 C:\Users\
时间排序文件
findstr /s /m /I “UploadFiles” *.log 查看指定时间范围包括上传文件夹的访问请求
findstr /s /m /I “x.js” *.asp 关键信息是x.js

# 日志

日志类型 命令
系统日志,程序日志,安全日志 eventvwr.msc
服务器日志 FTP 连接日志和 HTTPD 事务日志:% systemroot% \system32\LogFiles\
IIS 日志默认存放在 System32\LogFiles 目录下,使用 W3C 扩展格式
操作系统日志 登录成功的所有事件:
LogParser.exe -i:EVT –o:DATAGRID “SELECT * FROM c:\Security.evtx where EventID=4624″
指定登录时间范围的事件: LogParser.exe -i:EVT –o:DATAGRID “SELECT * FROM c:\Security.evtx where TimeGenerated>’2018-
06-19 23:32:11′ and TimeGenerated<’2018-06-20 23:34:00′ and EventID=4624″
提取登录成功的用户名和 IP LogParser.exe -i:EVT –o:DATAGRID “SELECT EXTRACT_TOKEN(Message,13,’ ‘)as
EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,’|’) as
Username,EXTRACT_TOKEN(Message,38,’ ‘) as Loginip FROM c:\Security.evtx where EventID=4624″
登录失败的所有事件 LogParser.exe -i:EVT –o:DATAGRID “SELECT * FROM c:\Security.evtx where EventID=4625″
提取登录失败用户名进行聚合统计 LogParser.exe -i:EVT “SELECT EXTRACT_TOKEN(Message,13,’ ‘) as
as user,count(EXTRACT_TOKEN(Message,19,’ ‘)) as Times,EXTRACT_TOKEN(Message,39,’ ‘) as Loginip FROM c:\Security.evtx where
EventID=4625GROUP BY Message”
系统历史开关机记录 LogParser.exe -i:EVT –o:DATAGRID “SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006″

常用事件 ID 含义

Event ID(2000/XP/2003) Event ID(Vista/7/8/2008/2012) 描述 日志名称
528 4624 成功登录 Security
529 4625 失败登录 Security
680 4776 成功 / 失败的账户认证 Security
624 4720 创建用户 Security
636 4732 添加用户到启用安全性的本地组中 Security
632 4728 添加用户到启用安全性的全局组中 Security
2934 7030 服务创建错误 System
2944 7040 IPSEC 服务服务的启动类型已从禁用更改为自动启动 System
2949 7045 服务创建 System

登录类型 ID

成功 / 失败登录事件提供的有用信息之一是用户 / 进程尝试登录(登录类型),但 Windows 将此信息显示为数字,下面是数字和对应的说明:

录类型 登录类型 描述
2 Interactive 用户登录到本机
3 Network 用户或计算手机从网络登录到本机,如果网络共享,或使用 net use 访问网络共享,net view 查看网络共享
4 Batch 批处理登录类型,无需用户干预
5 Service 服务控制管理器登录
7 Unlock 用户解锁主机
8 NetworkCleartext 用户从网络登录到此计算机,用户密码用非哈希的形式传递
9 NewCredentials 进程或线程克隆了其当前令牌,但为出站连接指定了新凭据
10 Remotelnteractive 使用终端服务或远程桌面连接登录
11 Cachedlnteractive 用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志
12 CachedRemotelnteractive 与 Remotelnteractive 相同,内部用于审计目的
13 CachedUnlock 登录尝试解锁

# 账号

1
2
3
4
5
6
7
8
9
10
新增用户
隐藏/克隆帐号
管理员对应键值
lusrmgr.msc 查看账户变化
net user 列出当前登录账户
wmic UserAccount get 列出当前系统所有账户
net localgroup administrators 列出管理员组用户
注册表-管理员键值:HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users
D盾查杀
日志-登录时间/用户名

# 进程

1
2
3
4
5
tasklist /svc | findstr pid  查看服务进行
netstat -ano
wmic process | find "Proccess Id" > proc.csv
powershell: Get-WmiObject -Class Win32_Process
msinfo32 查看自己电脑配置详情
1
2
3
4
5
6
扩展powershell命令
wmic process get caption,commandline /value
wmic process where caption=”svchost.exe” get caption,commandline /value
wmic service get name,pathname,processid,startname,status,state /value
wmic process get CreationDate,name,processid,commandline,ExecutablePath /value
wmic process get name,processid,executablepath| findstr "7766"

# 端口

netstat -ano

端口状态 说明
CLOSED 无连接活动或正在进行
LISTEN 监听中等待连接
SYN_RECV 服务端接收了 SYN
SYN_SENT 请求连接等待确认
ESTABLISHED 连接建立数据传输
FIN_WAIT1 请求中止连接,等待对方 FIN
FIN_WAIT2 同意中止,请稍候
ITMED_WAIT 等待所有分组死掉
CLOSING 两边同时尝试关闭
TIME_WAIT 另一边已初始化一个释放
LAST_ACK 等待原来的发向远程 TCP 的连接中断请求的确认
CLOSE-WAIT 等待关闭连接

# 自启动

注册表位置

1
2
3
4
5
6
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunonceEx
1
2
3
4
5
6
(ProfilePath)\Start Menu\Programs\Startup 启动项
shell:startup 查看开机自启
msconfig 启动选项卡
gpedit.msc 组策略编辑器
开始>所有程序>启动
wmic startup list full

# 计划任务

1
2
3
4
5
6
7
C:\Windows\System32\Tasks\
C:\Windows\SysWOW64\Tasks\
C:\Windows\tasks\
schtasks
taskschd.msc
at
开始-设置-控制面板-任务计划

# 注册表

注册表位置 对应信息
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 临时配置文件
HKLM\SAM\Domains\Account\ 用户信息
hklm:\Software\Microsoft\Windows\CurrentVersion\policies\system UAC 注册表位置
hklm:\Software\Microsoft\Active Setup\Installed Components 安装的组件信息
hklm:\Software\Microsoft\Windows\CurrentVersion\App Paths 软件环境变量
hklm:\software\microsoft\windows nt\CurrentVersion\winlogon 系统启动
hklm:\software\microsoft\security center\svc 安全中心报警
hkcu:\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths 让源管理器中的地址栏不记录文件的打开记录
hkcu:\Software\Microsoft\Windows\CurrentVersion\explorer\RunMru 禁止自动保存运行记录
hklm:\Software\Microsoft\Windows\CurrentVersion\explorer\Startmenu 软件自动启动项
hklm:\System\CurrentControlSet\Control\Session Manager 装载 Win32 子系统内核模式部分
hkcu:\Software\Microsoft\Internet Explorer\Extensions 记录最后下载软件的存储位置
hklm:\Software\Microsoft\Windows\CurrentVersion\ShellExtensions\Approved 系统或者用户已注册的外壳扩展功能模块
hklm:\System\CurrentControlSet\Control\Session Manager\AppCertDlls 后门及持久化访问

本文内容借鉴:应急响应实战 checklist pdf

博客:https://xz.aliyun.com/t/2524

更新于

请我喝[茶]~( ̄▽ ̄)~*

chun 微信支付

微信支付

chun 支付宝

支付宝