# 溯源取证总结
# 类型
- 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 | 1. 整站打包用webshell扫描工具扫 |
1 | find /var/www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|(gunerpress| |
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 | 小总结 |
# 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 用户列表 |
文件日期、新增文件、可疑 / 异常文件、最近使用文件、浏览器下载文件 |
# 日志
这里附上一张图片

补充
1 | /var/log/wtmp 登录进入,退出,数据交换、关机和重启纪录,即last |
利用正则表达式筛选条件
| 正则表达式筛选条件 | 效果 |
|---|---|
| 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 | misc 杂 |
# Windows 取证
思维导图

# 文件
分析文件路径
1 | 文件路径 |
# 日志
| 日志类型 | 命令 |
|---|---|
| 系统日志,程序日志,安全日志 | 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 | 新增用户 |
# 进程
1 | tasklist /svc | findstr pid 查看服务进行 |
1 | 扩展powershell命令 |
# 端口
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 | HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run |
1 | (ProfilePath)\Start Menu\Programs\Startup 启动项 |
# 计划任务
1 | C:\Windows\System32\Tasks\ |
# 注册表
| 注册表位置 | 对应信息 |
|---|---|
| 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
