网络安全应急响应技术实战指南-Win系统排查
系统排查
在进行受害主机排查时,首先要对主机系统进行基本排查,方便对受害主机有一个初步的了解。
系统基本信息
在基础排查时,可以使用 Microsoft 系统信息工具(Msinfo32.exe),它是Microsoft Windows NT 诊断工具(Winmsd.exe)的更新版本。
系统信息工具
在命令行中输入【msinfo32】命令,打开【系统信息】窗口,可以显示出本地计算机的硬件资源、组件和软件环境的信息。除了各方面的概述信息,还可以对正在运行任务、服务、系统驱动程序、加载的模块、启动程序等进行排查。
正在运行任务
在【系统信息】窗口中,单击【软件环境】中的【正在运行任务】选项,可查看正在运行任务的名称、路径、进程 ID 等详细信息。
服务
在【系统信息】窗口中,单击【软件环境】中的【服务】选项,可查看服务的名称、状态、路径等详细信息。
系统驱动程序
在【系统信息】窗口中,单击【软件环境】中的【系统驱动程序】选项,可查看系统驱动程序的名称、描述、文件等详细信息。
加载的模块
在【系统信息】窗口中,单击【软件环境】中的【加载的模块】选项,可查看加载的模块的名称、路径等详细信息。
启动程序
在【系统信息】窗口中,单击【软件环境】中的【启动程序】选项,可查看启动程序的命令、用户名、位置等详细信息。
如果只是简单了解系统信息,还可以通过在命令行中输入【systeminfo】命令实现,可查看主机名、操作系统版本等详细信息。
用户信息
在服务器被入侵后,攻击者可能会建立相关账户(有时是隐藏或克隆账户),方便进行远程控制。攻击者会采用的方法主要有如下几种:第 1 种是最明目张胆的,即直接建立一个新的账户(有时是为了混淆视听,账户名称与系统常用名称相似);第 2 种是激活一个系统中的默认账户,但这个账户是不经常使用的;第 3 种是建立一个隐藏账户(在 Windows 系统中,一般在账户名称最后加$)。无论攻击者采用哪种方法,都会在获取账户后,使用工具或是利用相关漏洞将这个账户提升到管理员权限,然后通过这个账户任意控制计算机。
对于 Windows 系统中的恶意账户排查,主要有以下 4 种方法。
命令行方法
在命令行中输入【net user】命令,可直接收集用户账户信息(注意,此方法看不到以$结尾的隐藏账户),若需查看某个账户的详细信息,可在命令行中输入【net user username】命令(username 为具体的用户名)。使用【net user k8h3d】命令,查看 k8h3d 账户的详细信息。
net user admin$ 11qq@MannixM /add
图形界面方法
打开【计算机管理】窗口,单击【本地用户和组】中的【用户】选项,可查看隐藏账户,名称以$结尾的为隐藏账户。也可以在命令行中输入【lusrmgr.msc】命令,直接打开图形界面,查看是否有新增/可疑的账户。
注册表方法
打开【注册表编辑器】窗口,选择【HKEY_LOCAL_MACHINE】下 的【SAM】选项,为该项添加【允许父项的继承权限传播到该对象和所有子对象。包括那些在此明确定义的项目】和【用在此显示的可以应用到子对象的项目替代所有子对象的权限项目】权限,使当前用户拥有 SAM 的读取权限。
添加权限完成后按【F5】键,刷新后即可访问子项并查看用户信息。
同时,在此项下导出所有以 00000 开头的项,将所有导出的项与 000001F4(该项对应 Administrator 用户)导出内容做比较,若其中的 F 值相同,则表示可能为克隆账户。
对导出的 F 值进行比较,发现相同,说明系统中存在克隆账户。
wmic 方法
wmic 扩展 WMI(Windows Management Instrumentation,Windows管理工具),提供从命令行接口和批命令脚本执行系统管理支持。在命令行中输入【wmic useraccount get name,SID】命令,可以查看系统中的用户信息。
启动项
启动项是开机时系统在前台或者后台运行的程序。操作系统在启动时,通常会自动加载很多程序。启动项是病毒后门等实现持久化驻留的一种常用方法,在应急响应中也是排查的必要项目。
Windows 系统中的自启动文件是按照 2 个文件夹和 5 个核心注册表子键来自动加载程序的。除了通过相关的工具查看,还可以通过以下两种方法进行查看。
通过【系统配置】对话框查看
在命令行中输入【msconfig】命令,打开 Windows 系统中的【系统配置】对话框,单击【启动】选项卡,可查看启动项的详细信息。
通过注册表查看
注册表是操作系统中一个重要的数据库,主要用于存储系统所必需的信息。
注册表以分层的组织形式存储数据元素。数据项是注册表的基本元素,每个数据项下面不但可以存储很多子数据项,还可以以键值对的形式存储数据。注册表的启动项是恶意程序的最爱,很多病毒木马通过注册表来实现在系统中的持久化驻留。特别是我们在安装了新的软件程序后,一定不要被程序漂亮的外表迷惑,需要看清楚它的本质,是否是木马的伪装外壳或是捆绑程序,必要时可以根据备份来恢复注册表。
注册表目录的含义如下。
(1)HKEY_CLASSES_ROOT(HKCR):此处存储的信息可确保在 Windows 资源管理器中执行时打开正确的程序。它还包含有关拖放规则、快捷方法和用户界面信息的更多详细信息。
(2)HKEY_CURRENT_USER(HKCU):包含当前登录系统的用户的配置信息,有用户的文件夹、屏幕颜色和控制面板设置。
(3)HKEY_LOCAL_MACHINE(HKLM):包含运行操作系统的计算机硬件特定信息,有系统上安装的驱动器列表及已安装硬件和应用程序的通用配置。
(4)HKEY_USERS(HKU):包含系统上所有用户配置文件的配置信息,有应用程序配置和可视设置。
(5)HKEY_CURRENT_CONFIG(HCU):存储有关系统当前配置的信息。
这里以“驱动人生”病毒作为查询案例,通过注册表和命令进行查询,会发现“驱动人生”建立了 WebServers 和Ddriver 两个键值,分别是病毒的信息窃取模块和病毒的主程序。
任务计划
由于很多计算机都会自动加载“任务计划”,“任务计划”也是恶意病毒实现持久化驻留的一种常用手段,因此在应急响应事件排查时需要重点排查。
任务计划是 Windows 系统的一个预置实现某些操作的功能,利用这个功能还可实现自启动的目的,获取任务计划的方法有以下几种。
(1)打开【计算机管理】窗口,选择【系统工具】中【任务计划程序】中的【任务计划程序库】选项,可以查看任务计划的名称、状态、触发器等详细信息。
(2)在 PowerShell 下输入【Get-ScheduledTask】命令,可查看当前系统中所有任务计划的信息,包括任务计划的路径、名称、状态等详细信息。
(3)在命令行中输入【schtasks】命令,可获取任务计划的信息。该命令是一个功能更为强大的超级命令行计划工具,它含有【at】(在较旧的系统中才可以用)命令行工具中的所有功能,获取任务计划时要求必须是本地Administrators 组的成员。
其他
Windows 系统防火墙最基本的用途是对出、入的数据包进行检测。
防火墙规则包括入站规则和出站规则。入站规则:根据规则中的过滤条件,过滤从公网到本地主机的流量。出站规则:根据规则中的过滤条件,过滤从本地主机到公网的流量。两种规则都可以按需自定义流量过滤的条件。换句话说,入站规则与进入主机的流量有关。如果在主机上运行一个 Web 服务器,那就必须告诉防火墙允许外部用户访问主机。出站规则与流出主机的流量有关,会将应用程序分类,允许部分应用程序访问外网,而其他应用则不能。如果想让浏览器(IE、火狐、Safari、Chrome、Opera 等)访问外网,但同时阻止访问某些网站,则可以在出站规则中插入命令,表示允许或不允许哪些网站通过防火墙。有些恶意软件会通过设置防火墙策略进行流量转发等操作,如驱动人生病毒对防火墙的设置。
打开【Windows 防火墙】窗口,单击【高级设置】,然后选择【入站规则】或【出站规则】可查看防火墙的入站规则或出站规则。
也可以在命令行中输入【netsh】命令进行查看。使用【netsh Firewall show state】命令,可显示当前防火墙的网络配置状态。
新操作系统使用新命令
netsh advfirewall firewall show rule name=all dir=in type=dynamic
进程排查
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在面向线程设计的计算机结构中,进程是线程的容器。无论是在 Windows 系统还是 Linux 系统中,主机在感染恶意程序后,恶意程序都会启动相应的进程,来完成相关的恶意操作,有的恶意进程为了能够不被查杀,还会启动相应的守护进程对恶意进程进行守护。
对于 Windows 系统中的进程排查,主要是找到恶意进程的 PID、程序路径,有时还需要找到 PPID(PID 的父进程)及程序加载的 DLL。对于进程的排查,一般有如下几种方法。
通过【任务管理器】查看
比较直观的方法是通过【任务管理器】查看可疑程序。但是需要在打开【任务管理器】窗口后,添加【命令行】和【映射路径名称】等进程页列,以方便获取更多进程信息。
在排查进程时,可重点关注进程的映像路径名称及命令行是否可疑,从而进一步进行排查。
使用【tasklist】命令进行排查
在命令行中输入【tasklist】命令,可显示运行在计算机中的所有进程,可查看进程的映像名称、PID、会话名等信息。
使用【tasklist】命令并添加特定参数,还可以查看每个进程提供的服务,如添加 svc 参数,即输入【tasklist /svc】命令,可以显示每个进程和服务的对应情况。
对于某些加载 DLL 的恶意进程,可以通过输入【tasklist /m】命令进行查询。
要想查询特定 DLL 的调用情况,可以使用命令【tasklist /m 名称】。
同时,【tasklist】命令还有过滤器的功能,可以使用【fi】命令进行条件筛选,结合关系运算符【eq】(等于)、【ne】(不等于)、【gt】(大于)、【lt】(小于)、【ge】(大于等于)、【le】(小于等于)等命令进行有效过滤。
使用【netstat】命令进行排查
在命令行中输入【netstat】命令,可显示网络连接的信息,包括活动的 TCP 连接、路由器和网络接口信息,是一个监控 TCP/IP 网络的工具。相关参数如下。
-a:显示所有连接和侦听端口。
-b:显示在创建每个连接或侦听端口时涉及的可执行程序。
-e:显示以太网统计信息。可以与-s 结合使用。
-f:显示外部地址的完全限定域名(FQDN)。
-n:以数字形式显示地址和端口号。
-o:显示拥有的与每个连接关联的进程 ID。
-p proto:显示 proto 指定的协议的连接。
-q:显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。
-r:显示路由表。
-s:显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。
-t:显示当前连接卸载状态。
-x:显示 NetworkDirect 连接、侦听器和共享终结点。
-y:显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
interval:重新显示选定统计信息,每次显示之间暂停时间间隔(以秒计)。
常见的网络状态说明如下。
LISTENING:侦听状态。
ESTABLISHED:建立连接。
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断。
在排查过程中,一般会使用【netstat -ano | findstr "ESTABLISHED"】命令查看目前的网络连接,定位可疑的 ESTABLISHED。
通过【netstat】命令定位出 PID,再通过【tasklist】命令进行程序定位,发现PID 为 2856 的进程有大量网络连接后,使用【tasklist | find "2856"】命令可查看具体的程序。
也可以通过【netstat -anb】命令(需要管理员权限)快速定位到端口对应的程序。
使用 PowerShell 进行排查
有时对于有守护进程的进程,还要确认子父进程之间的关系,可以使用
PowerShell 进行查看,一般 PowerShell 在查询时会调用 Wmi 对象【Get-WmiObject Win32_Process | select Name, ProcessId, ParentProcessId, Path】命令中 Get-WmiObject Win32_Process 表示获取进程的所有信息,select Name, ProcessId, ParentProcessId, Path 表示选择 Name, ProcessId, ParentProcessId, Path 4 个字段,整个命令表示显示所有进程信息中的 Name, ProcessId, ParentProcessId, Path 4 个字段的内容。
使用【wmic】命令进行查询
(1)在命令行中使用【wmic process】命令,可以对进程情况进行查询。但使用【wmic process list full /format:csv】命令,即以 csv 格式列出进程的所有信息,此时命令列出的信息过多,不便于阅读。因此,可以使用【wmic process getname,parentprocessid,processid /format:csv】命令,以 csv 格式来显示进程的名称、父进程 ID、进程 ID。
其他类似命令如下。
【wmic process get ExecutablePath, processid /format:csv】命令表示以 csv 格式来显示进程路径、进程 ID 信息。
【wmic process get name, ExecutablePath, processid, parentprocessid /format:csv | findstr /I "appdata"】命令表示以 csv 格式来显示进程的名称、进程路径、进程 ID、父进程 ID 信息。
(2)同时【wmic】命令还可以结合条件对进程进行筛选。
【wmic process where processid=[PID] get parentprocessid】命令表示以 PID 的值作为条件来获取其父进程的 PID 情况。
其他类似命令如下。
【wmic process where processid=[PID] get commandline】命令表示以 PID 的值作为条件来获取其命令行。
(3)在使用【wmic process】命令查出恶意进程后,会结束恶意进程,一般使用如下命令结束恶意进程。
【wmic process where name="malware.exe" call terminate】命令是指删除"malware.exe"恶意程序的进程。
【wmic process where processid=[PID] delete】命令是指删除PID为某值的进程。
服务排查
服务可以理解为运行在后台的进程。这些服务可以在计算机启动时自动启动,也可以暂停和重新启动,而且不显示任何用户界面。服务非常适合在服务器上使用,通常在为了不影响在同一台计算机上工作的其他用户,且需要长时间运行功能时使用。在应急响应排查过程中,服务作为一种运行在后台的进程,是恶意软件常用的驻留方法。
打开【运行】对话框,输入【services.msc】命令,可打开【服务】窗口,查看所有的服务项,包括服务的名称、描述、状态等。
网 络 安 全 应 急 响 应 信 息 收 集 记 录 单 | ||
应用系统名称 | ||
主管单位 | ||
主要负责人 | ||
运维单位 | ||
直接负责人 | ||
应用系统url | ||
所属网络 | ||
外网IP | ||
内网IP | ||
攻击IP | ||
攻击时间 | ||
发现时间 | ||
阻断时间 | ||
应用系统漏洞存在位置 | ||
事件类型 | ||
后门位置 | ||
处置措施 | ||
青藤扫描结果 | ||
涉及主机情况 | ||
系统排查 | 异常任务 | |
异常驱动 | ||
异常模块 | ||
异常程序 | ||
用户信息 | 异常账号 | |
异常登录 | ||
启动项 | 异常启动项 | |
任务计划 | 异常任务计划 | |
进程排查 | 异常进程 | |
异常连接 | ||
服务排查 | 异常服务 | |
文件痕迹排查 | 敏感目录 | |
时间点查找 | ||
特殊文件 | ||
系统命令 | ||
内存后门检测 | ||
历史命令 | ||
WebShell | ||
日志分析 | 系统日志 | |
应用日志 | ||
影响危害 | ||
结论 |