一.进程排查
1.Windows
-
任务管理器查看
- 在 Windows 系统中,可通过任务管理器查看进程信息。操作步骤为:在任务管理器界面,于 “查看” 选项中选择 “选择列”,随后添加 “映像路径名称” 和 “命令行”,以此查看更多进程详情。
-
使用 tasklist 命令
- 查看进程与服务对应情况:使用命令 tasklist /svc
- 针对某些 DLL 恶意进程:执行 tasklist /m
- 查看调用特定模块进程:若要查看调用 ntdll.dll
- 利用 /fi 进行过滤:如 tasklist /svc/fi "PID eq 2820"
-
通过 netstat 进行排查
-
查看当前网络连接:输入 netstat -ano | findstr "ESTABLISHED"
-
联合定位程序:先通过 “netstat” 定位出 PID,再借助 “tasklist” 命令进行程序定位,示例:
- “wmic process where name="firefox.exe" get processid,executablepath,name”
- “wmic process where processid=602444 get processid,executablepath,name”
- 快速定位端口对应程序(需管理员权限):netstat -anb
-
-
使用 Powershell 进行排查
-
进入 Powershell 后,输入 get-wmiobject win32_process | select name,processid,parentprocessid,path ,可获取进程的相关详细信息。
-
-
wmic 查询
-
以 csv 格式显示数据:
- wmic process list full /format:csv
- wmic process get name,parentprocessid,processid /format:csv
- wmic process get executablepath,processid /format:csv
- 根据进程 ID 查询:wmic process where processid=2020 get executablepath,processid /format:csv
- 根据进程名称查询:wmic process where name="httpd.exe" get executablepath,processid /format:csv
-
2.Linux
-
查看进程:netstat -anptl
-
查看特定进程可执行程序及打开文件:
- 先通过 “netstat” 查看到如 “3364” 进程,再执行 “ls -alt /proc/3364” 查看其可执行程序。
- 查看进程打开的文件则使用 “lsof -p 3364”。
-
处理恶意进程:
- 若判断为恶意进程,可杀掉进程:kill -9 3364
- 接着删除可疑木马,执行 rm -rf 木马文件
-
处理文件属性问题:
- 若无法删除文件,可能文件被加上 “i” 属性,此时先使用 lsattr 文件名 查看属性。
- 再用 chattr -i 文件名 移除 “i” 属性,之后便可删除文件。
- 查杀守护进程:若进程无法删除,可疑先查杀守护进程,然后再尝试删除。
- 查看资源占用率高的进程:通过 “top” 命令查看相关资源占用率比较高的进程。
二.服务排查
1.Windows
- 在 Windows 下,按 Win + R 调出 “运行” 对话框,输入 “services.msc” 回车,就能打开 “服务” 窗口,查看服务名、描述、状态等信息。
2.Linux
-
基于 Red Hat 系
- 对 Red Hat 系列 Linux 系统,用 chkconfig --list 可查看系统运行服务,但它有系统适配性,仅适用于 Red Hat 系及其兼容系统。
-
Debian 系(如 Ubuntu)及通用方式
-
在 Debian 系(如 Ubuntu)中,因系统特性无 “chkconfig” 命令,可用 service --status-all 查看所有服务即时状态。
-
三.文件痕迹排查
确定应急响应事件时间点后,对该时间点前后的文件以及带有特定特征的恶意软件进行排查。特征包括代码关键字、关键函数、文件权限特征等。
1.敏感目录
-
Windows:
-
检查各个盘下的 temp(tmp)相关目录,恶意程序释放子体常投放于此,可查看临时目录下是否存在异常文件。对于人工入侵事件,需重点排查浏览器历史记录、下载文件和 cookie 信息。
-
查看用户 Recent 文件:Recent 文件存储最近运行文件快捷方式,可分析排查可疑文件,存储位置为 C:\Users\Administrator\Recent、C:\Users\ 用户名 \Recent,或通过 “运行” 输入 “recent”。
-
预读取文件夹查看:Prefetch 是预读取文件夹,存放系统访问过文件的预读取信息,扩展名为 pf,可加快系统启动进程。Windows 7 可保存最近 128 个可执行文件信息,Windows 8 和 Windows 10 可记录最近 1024 个可执行文件,位置为 % SystemRoot%\Prefetch\,可在 “运行” 对话框输入 prefetch 或 % SystemRoot%\Prefetch\,或打开 C:\Windows\Prefetch。
-
-
-
linux:
常见敏感目录有 /tmp 目录和命令目录 /usr/bin、/usr/sbin 等,常作为恶意软件下载或文件被替换目录;~/.ssh 以及 /etc/ssh 也常作为后门配置路径,需重点排查。
2.时间点
介绍:确认应急响应事件时间点,排查该时间点前后文件变动情况以缩小范围。
-
Windows
通过列出攻击日期内新增的文件来发现相关恶意软件。在 Windows 系统中,使用 forfiles 命令查找相应文件。
-
命令示例:
- 显示对 2024/1/17 后的创建的 txt 文件进行搜索:forfiles /m *.txt /d +2024/1/17 /s /p c:\ /c "cmd /c echo @path @fdate @ftime" 2>null
- 显示 2024/1/17 之后 pptx 名字包含” 网络 “的文件:forfiles /m *网络*.pptx /p f:\ /d +2024/1/17 /s /c "cmd /c echo @path @fdate @ftime" 2>null
- 显示 2024/1/17 后所有访问过的文件:forfiles /m *.* /p f:\ /d +2024/1/17 /s /c "cmd /c echo @path @fdate @ftime" 2>null
- 注:2>null 表示将错误输出重定向到空设备,即不输出错误信息。
-
排查注意事项:对文件的创建时间、修改时间、访问时间进行排查。对于人工入侵的应急响应事件,攻击者可能会使用如 “菜刀” 这类工具修改文档时间以掩饰入侵行为、规避排查策略。若文件相关时间存在明显逻辑问题(如创建时间为 2024,修改时间为 2022),则需重点排查,很可能是恶意文件。
-
-
Linux
通过列出攻击日期内变动的文件来发现相关恶意文件,使用 find 命令对某一时间内增加的文件进行查找。
-
find 命令参数说明:
- find:在指定的目录下查找文件。
- -type b/d/c/p/l/f:查找块设备、目录、字符设备、管道、符号链接、普通文件。
- -mtime -n +n:按文件更改时间来查找文件,-n 指 n 天以内,+n 指 n 天前。
- -atime -n +n:按文件访问时间来查找。
- -ctime -n +n:按照文件创建时间来查找。
-
命令示例:
- 查找一天内新增的 txt 文件:find / -ctime 0 -name ".*txt"
- 查找 3 天内新增的 txt 文件:find / -ctime -3 -name "*.txt"
- 查看目录按照时间排序:ls -alt | head -n 10(查看前 10 条的内容)
-
时间排查要点:对文件的创建时间、修改时间、访问时间进行排查。使用 stat 命令可以查看文件详细信息,若修改时间距离应急响应事件日期接近且有线性关联,说明文件有可能被篡改。
-
-
Linux特殊文件
- 特殊权限文件查找:例如,查找 /tmp 目录下权限为 777 的文件:find /tmp -perm 777
- webshell 查找:webshell 排查可以通过文件、流量、日志分析。基于文件的命名特征和内容特征操作相对较高。例如查找 /var/www 下所有 php 文件:find /var/www/ -name "*.php";进一步对找到的 php 文件进行特定内容搜索:find /var/www/ -name "*.php" | xargs egrep "assert|eval|base64_decode|shell_exec|passthru|(\$\_\POST\["
3.WebShell
WebShell(网站入侵脚本)在通过上述时间点相关文件筛选方法之后,还可以使用 D 盾、HwsKill、webshellKill 等工具对目录下的文件进行规则查询。
四.日志分析
1.Windows日志分析
-
日志文件位置
-
Windows XP/windows server 2003:
- 系统日志:C:\Windows\System32\config\SysEvent.evt
- 安全性日志:C:\Windows\System32\config\SecEvent.evt
- 应用程序日志:C:\Windows\System32\config\AppEvnet.evt
-
Windows vista/windows 7/windows8/windows10/Windows server2008 之后:
- 系统日志为 C:\Windows\System32\winevt\Logs\System.evtx
- 安全性日志为 C:\Windows\System32\winevt\Logs\Security.evtx
- 应用程序日志为 C:\Windows\System32\winevt\Logs\Application.evtx
- 或者打开 “运行”,输入 eventvwr.msc
-
-
不同类型日志介绍
- 系统日志:指 Windows 系统中的各个组件在运行中产生的各种事件,可分为系统中各种驱动程序、操作系统的多种组件及应用软件在运行中出现重大问题等情况,如重要数据丢失、错误及系统崩溃行为等。
- 安全性日志:主要记录各种与安全相关的事件,包括各种登录与退出系统的成功或不成功信息,以及对系统中各种重要资源进行的操作。
- 应用程序日志:主要记录各种应用程序产生的各类事件,如 SQL server 数据库程序在受到暴力破解攻击时会有相关记录及详细信息。
- 其他日志:在应急响应中经常也会用到 PowerShell 日志。
-
日志分析方法
- 通过内置的日志筛选器进行分析:使用日志筛选器可以对记录时间、事件级别、任务类别、关键字等信息进行筛选。
- 使用 Powershell 对日志进行分析:在使用 powershell 进行日志分析时,需要管理员权限。常用命令有 Get-EventLog(只获取传统事件日志)、Get-WinEvent(从传统事件日志和新 windows 事件日志技术生成的事件日志中获取事件,还会获取 windows 事件跟踪(ETW)生成的日志文件中的事件,需要 windows vista/windows server2008 及更高版本的 windows 系统,还需要.NET Framework 3.5 及以上版本)。例如获取安全性日志下事件 ID 为 4624(登录成功)的所有日志信息:get-eventlog security -instanceid 4624;get-winevent -filterhashtable @{logname='security';id='4624'}。
2.Linux日志分析
-
日志存放位置
Linux 系统中日志一般存放在目录 /var/log/ 下,具体功能如下:
- /var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即 last,是一个二进制文件,可以使用 last 查看。
- /var/log/cron:记录与定时任务相关的日志信息。
- /var/log/messages:记录系统启动后的信息和错误日志,使用 cat /var/log/messages 查看。
- /var/log/apache2/access.log:记录 Apache 的访问日志。
- /var/log/auth.log:记录系统授权信息,包括用户登录和使用的权限机制等。
- /var/log/userlog:记录所有等级用户信息的日志。
- /var/log/xferlog(vsftpd.log):记录 linux FTP 的日志。
- /var/log/lastlog:记录登录的用户,可以使用命令 lastlog 查看。
- /var/log/secure:记录大多数应用输入的账户和密码,以及登录成功与否。
- /var/log/faillog:记录登录系统不成功的账号信息。
- ls -alt /var/spool/mail:查看邮件相关记录文件。
- cat /var/spool/mail/root:可发现对 80 端口的攻击行为(当 web 访问异常时,及时向当前系统配置的邮箱地址发送报警邮件)。
-
日志分析方法
对 Linux 系统日志分析主要使用 grep、sed、sort、awk 等命令。查看日志的方法如下:
- 查看最后 10 行日志:tail -n 10 test.log。
- 查看 10 之后的所有日志:tail -n +10 test.log。
- 查询头 10 行的日志:head -n 10 test.log。
- 查询除了最后 10 条的所有日志:head -n -10 test.log。
3.其他日志
-
IIS日志位置
- %SystemDrive%\inetpub\logs\LogsFiles
- %SystemRoot%\System32\LogFiles\W3SVC1
- %SystemDrive%\inetpub\logs\LogFiles\W3SVC1
- %SystemDrive%\Windows\System32\LogFiles\HTTPERR
-
Apache 日志位置
- /var/log/httpd/access.log
- /var/log/apache/access.log
- /var/log/apache2/access.log
- /var/log/httpd-access.log
-
Nginx日志位置
- 默认在 /usr/local/nginx/logs 目录下,accessl.log 代表访问日志,error.log 代表错误日志,若没有在默认路径下,则可以到 nginx.conf 配置文件中查找。
-
Tomcat日志位置
- 默认在 TOMCAT_HOME/logs/ 目录下,有 catalina.out、catalina.YYYY-MM-DD.log、localhost.YYYY-MM-DD.log、localhost_access_log.YYYY-MM-DD.txt、hostmanager.YYYY-MM-DD.log、manager.YYYY-MM-DD.log 等几类日志。
-
Weblogic日志位置
在默认情况下,WebLogic 有三种日志,分别是 access log、server log 和 domain log。
- access log 的位置:$MW_HOME\user_projects\domains<domain_name>\server<server_name>\logs\access.log
- server log 的位置:$MW_HOME\user_projects\domains<domain_name>\server<server_name>\logs<server_name>.log
- domain log 的位置:$MW_HOME\user_projects\domains<domain_name>\server<adminserver_name>\logs<domain_name>.log
-
数据库日志
- Oracle 数据库:使用 select * from v$logfile 命令,可查询日志路径,在默认情况下,日志文件记录在 $ORACLE/rdbms/log。使用 select * from v$sql 命令,查询之前用过的 SQL。
- MySQL 数据库:使用 show variables like '%log_%' 命令,可查看是否启用日志,如果日志已开启,则默认路径为 /var/log/mysql,使用 show variables like '%general%' 命令,可查看日志位置。
- MsSQL 数据库:一般无法直接查看,需要登录到 SQL Server Management Studio,在 “管理 - SQL Server 日志” 中进行查看。