应急响应:系统入侵排查指南

目录

系统基本信息排查

Windows系统排查

Linux系统排查

CPU信息

操作系统信息

载入模块排查

用户排查

Windows系统用户排查

排查所有账户

Linux用户排查

root账户排查

查看所有可登录账户  

查看用户错误的登录信息

查看所有用户最后登录信息

排查空口令账户

启动项排查

Windows系统启动项排查

任务管理器

注册表排查

Linux系统启动项排查

计划任务排查

Windows系统计划任务排查

计划任务程序库

Powershell命令查看

Linux计划任务排查

日志排查

Windows系统日志排查

日志位置

系统日志

安全性日志

应用程序日志

日志筛选器分析日志

第三方日志分析工具:FullEventLogView       Event Log Explorer

Linux系统日志排查

日志位置 /var/log

其它应用程序位置

进程排查

Windows系统进程排查

任务管理器

tasklist命令查询

Linux进程排查

服务排查

Windows服务排查

Linux服务排查


系统基本信息排查

Windows系统排查

命令行输入 msinfo32 ,就会打开系统信息窗口,可以显示本地计算机的硬件资源、组件、软件环境、正在运行的任务、服务、系统驱动程序、加载模块、启动程序等。

重点关注以下几个位置即可

Linux系统排查

CPU信息

命令行输入 lscpu 命令,查看CPU相关信息

操作系统信息

命令行输入 uname -a ,查看当前操作系统信息

命令行速录 cat /proc/version 命令,查看Linux版本

载入模块排查

命令行速录 lsmod 命令,查看Linux已载入模块信息

用户排查

攻击者会采用的方法主要有如下几种:

  1. 直接建立一个新的账户(有时是为了混淆视听,账户名称与系统常用名称相似)
  2. 激活一个系统中的默认账户,但这个账户是不经常使用的
  3. 建立一个隐藏账户 (在 Windows 系统中,一般在账户名称最后加$)

Windows系统用户排查

关于Windows系统的用户,用户组管理可以参考这篇文章:应急响应之系统排查方法_世界尽头与你的博客-CSDN博客

排查所有账户

黑客创建的某些隐藏账户通过dos指令无法发现, 但是当我们查看注册表时就可以发现

通过注册表检查是否存在账户名为“xxx$”或修改注册表创建的隐藏账户,再检查是否存在可疑账户,并进行禁用

注册表路径:

给SAM目录添加当前用户可读写属性

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

同时,在此项下导出所有以 00000 开头的项,将所有导出的项与 000001F4 (该项对应Administrator用户)导出内容做比较,若其中的 F 值相同,则表示可能为克隆账户

命令行输入 wmic useraccount get name,SID 查看系统中的用户信息

Linux用户排查

命令行输入 cat /etc/passwd 查看所有用户信息

用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell

最后显示的 /bin/bash 表示该用户可登录 ; sbin/nologin  不可登录

root账户排查

输入命令 awk -F: '{if($3==0) print $1}' /etc/passwd  可查询可登录账户 UID 为0的账户,root是 UID为0的可登录账户,如果出现其他为 0 的账户,就要重点排查

查看所有可登录账户  

命令行输入 cat /etc/passwd | grep '/bin/bash' 或者 cat /etc/passwd | grep '/bin/zsh'

查看用户错误的登录信息

命令行输入 lastb  可查看显示用户错误的登录列表,包括错误的登录方法、IP 地址、时间等

查看所有用户最后登录信息

命令行输入 lastlog  

排查空口令账户

命令行输入 awk -F: 'length($2)==0 {print $1}' /etc/shadow

如果有用户是空口令就会显示出来

启动项排查

启动项是系统开机时在前台或者后台运行的程序,攻击者有可能通过启动项使用病毒后门等实现持久化控制。

Windows系统启动项排查

任务管理器

命令行输入 msconfig

注册表排查

很多病毒木马通过注册表实现持久化驻留

开机启动项排查:命令行输入 regedit 即可

注册表中重点关注以下三个:

HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce

查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。

Linux系统启动项排查

命令行输入 ls -alt /etc/init.d

计划任务排查

Windows系统计划任务排查

计划任务程序库

命令行输入  taskschd.msc  可以查看任务的名称,状态,触发器等信息

Powershell命令查看

Powershell命令行输入  Get-ScheduledTask  可以查看计划任务的路径,名称,状态

Powershell命令行输入  schtasks

Linux计划任务排查

查看当前的计划任务 crontab -l

查询到一个挖矿恶意程序的任务计划设置,其会每隔 12 分钟远程下载恶意网站上的 crontab.sh 脚本文件

日志排查

Windows系统日志排查

日志位置

在Windows系统中,日志文件包括:系统日志、安全性日志及应用程序日志,其位置如下。

在Windows 2000专业版/Windows XP/Windows Server 2003系统中:

系统日志的位置为:
C:\WINDOWS\System32\config\SysEvent.evt
安全性日志的位置为:
C:\WINDOWS\System32\config\SecEvent.evt
应用程序日志的位置为:
C:\WINNT\System32\config\AppEvent.evt

在Windows Vista/Windows7/Windows8/Windows10/Windows Server2008及以上版本系统中:

系统日志的位置为:
%SystemRoot%\System32\Winevt\Logs\System.evtx
安全性日志的位置为:
%SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志的位置为:
%SystemRoot%\System32\Winevt\Logs\Application.evtx

系统日志

系统日志主要是指 Windows 系统中的各个组件在运行中产生的各种事件。这些事件一般可以分为:系统中各种驱动程序Q在运行中出现的重大问题、操作系统的多种组件在运行中出现的重大问题及应用软件在运行中出现的重大问题等。这些重大问题主要包括重要教据的丢失、错误,以及系统产生的崩溃行为等

例如:事件ID=10016

安全性日志

安全性日志主要记录了各种与安全相关的事件。构成该日志的内容主要包括:各种登录与退出系统的成功或不成功的信息,对系统中各种重要资源进行的各种操作,如对系统文件进行的创建、删除、更改等操作

应用程序日志

应用程序日志主要记录各种应用程序所产生的各类事件。例如,系统中 SQL Server 数据库程序在受到暴力破解攻击时,日志中会有相关记录

 日志常用ID

 登录相关事件ID

日志筛选器分析日志

第三方日志分析工具:FullEventLogView       Event Log Explorer

Linux系统日志排查

日志位置 /var/log

可以使用 cat 命令查看 

/var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即 last。
/var/log/cron:记录与定时任务相关的日志信息。
/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:记录登录系统不成功的账号信息。

其它应用程序位置

IIS日志位置

%SystemDrive%\inetpub\logs\LogFiles
%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/Togs 目录下,access.log 代表访问日志error.log 代表错误日志。若没有在默认路径下,则可以到nginx.conf 配置文件中香找

Tomcat 日志的位置:
默认在 TOMCAT HOME/Logs/ 目录下,有 catalina.out、catalina.YYYY-MM- DD.og、localhost.YYYY-MM-DD.og.ocalhost access log.YYYY-MM-DD.txt、host-manager.YYYY-MM-DD.g、manager.YYYY-MM-DD.log 等几类日志

WebLogic 日志的位置:
在默认情况下,WebLogic 有三种日志,分别是 access og、server log 和 domain log

access.log
$MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\access.log

server.log
$MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\<server_name>.log

domain.log
$MW_HOME\user_projects\domains\<domain_name>\servers\<adminserver_name>\logs\<domain_name>.log

进程排查

Windows系统进程排查

对于 Windows 系统中的进程排查,主要是找到恶意进程的 PID、程席路径,有时还需要找到 PPID (PID 的父进程)及程序加载的DLL。对于进程的排查,一般有如下几种方法。

任务管理器

tasklist命令查询

命令行输入 tasklist 可以显示计算机上的所有进程

命令行输入 tasklist /m 可显示进程加载DLL情况

tasklist /m ntdll.dll 查看特定DLL调用的进程

netstat可以显示网络连接信息

命令行输入命令  netstat -ano | findstr "ESTABLISHED"  定位可疑的ESTABLISHED

PID=12306有大量的网络连接

命令行输入 tasklist | find "12306" 查看具体的程序

Linux进程排查

命令行输入 netstat 网络连接命令,分析可疑端口,可疑IP,可疑PID

PID=2963存在恶意外链的情况

根据 PID 的值,利用  ls -alt /proc/PID  命令,可查看其对应的可执行程序

也可以利用  Lsof -D PID  命令,查看进程所打开的文件。使用  Lsof -p 2963  命令,可查看 PID 为2963 的进程所打开的文件,发现文件mbrn 为可疑文件

命令行输入指令,杀死进程  kill -9 PID  kill -9 2535

命令行输入指令,删除文件  rm -rf filename   rm -rf mbrn

如果 root 用户都无法删除相关文件,那么很可能是因为该文件被加上了 i 属性。使用 Lsatter filename  命令,可查看文件属性,然后使用  chattr -i filename   命令,可移除 i 属性,进而删除文件。也有的进程因为存在守护进程而无法删除,我们可以先把进程挂起,查杀守护进程后,再返回将进程删除

有时攻击者会隐藏进程,需要学会查看隐藏进程,一次输入以下指令即可查看

ps -ef  awkprint sort -n uniq >1

ls /proc sort -n uniq >2

diff 1 2

服务排查

Windows服务排查

命令行输入 services.msc ,之后会打开服务窗口,查看所有服务项,名称,描述,状态

Linux服务排查

命令行输入 chkconfig --list  查看系统运行的服务

其中,0、1、2、3、4、5、6 表示等级,具体含义如下:

  • 1 表示单用户模式,
  • 2 表示无网络连接的多用户命令行模式;
  • 3 表示有网络连接的多用户命令行模式
  • 4表示不可用;
  • 5 表示带图形界面的多用户模式:
  • 6 表示重新启动。

命令行输入 service --status-all  可以查看所有服务的状态

猜你喜欢

转载自blog.csdn.net/qq_61553520/article/details/131173515