THM-核心Windows进程(Core Windows Processes)
任务管理器
使用任务管理器可以管理系统中常见的进程,以及进程的相关信息
右键其中的名称
或者PID
等列选择列
,可以选择一些平常看不到的信息,例如路径名称、命令行
系统自带的任务管理器的功能是有限的,这里推荐使用方便查看的工具
- ProcessExplorer: https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer
- PorcessExplorer是微软官方提供的进程查看软件
- processhacker: https://processhacker.sourceforge.io/
系统进程(System)
我们一般使用的程序的进程中,都是系统随机分配的,但是系统进程不一样,是固定的。
系统进程(System)的进程ID是4
,这是无法更改和替代的,负责管理和调度系统资源。它是由Windows NT操作系统创建的,用于启动和管理其他系统进程和服务
用户模式和内核模式
- 用户模式是应用程序在用户模式下运行,只能使用CPU支持指令集的一个子集,只能访问用户空间中的内存,并且不能直接访问硬件。所有的Windows应用程序都工作于用户模式。位于用户空间的代码都工作于用户模式。应用程序只能通过Windows规定的一些API访问内核模式的代码和数据
- 内核模式是核心操作系统组件在内核模式下运行。多个驱动程序在内核模式下运行,但某些驱动程序也在用户模式下运行。工作在内核模式的程序不受任何限制,可以使用CPU支持的任意指令,可以访问任意的内存空间,可以直接访问硬件。位于内核空间的代码都工作于内核模式
使用processhacker查看
右键properties
查看该进程的详细信息
需要注意的点:
- 程序路径: C:\Windows\system32\ntoskrnl.exe
- 父进程: System Idle Process (0)
常见的异常情况:
- 父进程不是0
- 有多个
system
进程 PID
不是4
- 运行回话不是
0
System -> smss.exe
下一个进程是smss.exe
(会话管理子系统)。该进程也称为Windows 会话管理器,负责创建新会话。它是内核启动的第一个用户模式进程
此进程启动 Windows 子系统的内核和用户模式.该子系统包括win32k.sys(内核模式)、winsrv.dll(用户模式)和csrss.exe(用户模式)
重点:
smss.exe会在会话0中启动csrss.exe(Windows 子系统)
、wininit.exe
,
在会话1中启动csrss.exe
和winlogon.exe
。
注意会启动两个csrss.exe
,其中一个会话为0,一个会话为1
SMSS 还负责创建环境变量、虚拟内存分页文件并启动 winlogon.exe(Windows 登录管理器)
异常情况:
- 父进程不是System(4)
- 程序路径不是C:\Windows\System32\smss.exe
- 有多个该进程正在运行
- 运行的用户不是
SYSTEM
csrss.exe
csrss.exe
(客户端服务器运行时进程)是 Windows 子系统的用户模式端。该进程始终运行,对系统运行至关重要。如果该进程偶然终止,将会导致系统故障。该进程负责Win32控制台窗口和进程线程的创建和删除。对于每个实例,都会加载 csrsrv.dll、basesrv.dll 和 Winsrv.dll
注意:回想一下,会话 1 启动时从 smss.exe
调用 csrss.exe
和 winlogon.exe
其中有两个csrss.exe
,都是有smss.exe
生成的
异常情况:
- 有一个实际的父进程(smss.exe在生成csrss.exe会结束)
- 程序路径不是C:\Windows\System32\csrss.exe
- 使用如容易看出的拼写错误
- 运行的用户不是
SYSTEM
wininit.exe
Windows初始化进程wininit.exe
负责在会话 0 中启动 services.exe
(服务控制管理器)、lsass.exe
(本地安全机构)和 lsaiso.exe
。它是另一个在后台运行的关键 Windows进程,及其子进程
我们可能看不到lsaiso.exe
,那是因为没有启动Credential Guard
异常情况:
- 有一个实际的父进程(smss.exe在生成wininit.exe会结束进程)
- 程序路径不是C:\Windows\System32\wininit.exe
- 利用微妙的拼写错误
- 运行的账户不是
SYSTEM
wininit.exe -> services.exe
services.exe是服务控制管理器(SCM-Service Control Manager),。它的主要职责是处理系统服务:加载服务、与服务交互以及启动或结束服务。它维护一个数据库,可以使用 Windows 内置实用程序sc.exe
对服务进程进行管理
常见的服务在注册表HKLM\System\CurrentControlSet\Services
中存储
此进程是其他几个关键进程的父进程:svchost.exe
、spoolsv.exe
、msmpeng.exe
和 dllhost.exe
等
异常情况:
- 父进程不是
wininit.exe
- 程序路径不是C:\Windows\System32\services.exe
- 使用微妙的拼写错误
- 多个同名程序
- 运行的用户不是
SYSTEM
wininit.exe > services.exe > svchost.exe
svchost.exe是服务主机(Service Host)(Windows 服务的主机进程)负责托管和管理 Windows 服务
该进程中运行的服务被实现为DLL
。要实现的 DLL
存储在服务注册表中的子项Parameters
下ServiceDLL
HKLM\SYSTEM\CurrentControlSet\Services\服务名称\Parameters
使用PorcessHacker
右键svchost.exe
可以看到一个services
,随便找到一个服务,选择Go to servie
注意截图会显示他的二进制程序路径,注意这里有一个关键的参数-k
-k 参数用于将相似的服务分组以共享相同的进程。这个概念是基于操作系统设计并实现的,以减少资源消耗。从Windows 10 版本 1703 开始,分组到主机进程的服务发生了变化。在运行内存超过 3.5 GB 的计算机上,每个服务将运行自己的进程。
由于svchost.exe
在任何Windows系统
中都会有多个运行的进程,他是一直被恶意利用的目标。攻击者常常伪装恶意软件利用此进程。可以利用稍微的拼写错误,例如:scvhost.exe
异常情况:
- 父进程不是
services.exe
- 路径不是C:\Windows\System32\svchost.exe
- 利用微妙的程序名拼写错误
- 运行的二进制文件缺少
-k
参数
lsass.exe
本地安全机构子系统服务 ( LSASS ) 是 Microsoft Windows 操作系统中的一个进程,负责在系统上实施安全策略。它验证登录到 Windows 计算机或服务器的用户、处理密码更改并创建访问令牌。它还会写入 Windows 安全日志
它为 SAM(安全帐户管理器)、AD(Active Directory)和 **NETLOGON **创建安全令牌。
lsass.exe
常被用于密码窃取,最常见的工具就是mimikate
异常情况:
- 父进程不是
wininit.exe
- 程序路径不是C:\Windows\System32\wininit.exe
- 利用拼写错误
- 有多个
lsass.exe
运行实例 - 运行的账户不是
SYSTEM
用户
winlogon.exe
Windows登录winlogon.exe
负责处理安全注意序列( SAS)。常见的使用例如:用户按下 ALT+CTRL+DELETE 组合键即可输入用户名和密码
该进程还负责加载用户配置文件。它将用户的 NTUSER.DAT
加载到 HKCU 中,而 userinit.exe
加载用户的 shell
注册表路径:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
还记得smss.exe
吗,他在会话1启动了csrss.exe
和winlogon.exe
程序,需要记住这点
异常情况:
- 有一个实际的父进程(smss.exe启动winlogon.exe后会结束)
- 程序路径不是C:\Windows\System32\winlogon.exe
- 利用拼写错误
- 注册表中的
Shell
值有除了explorer.exe
的值 - 运行的账户不是
SYSTEM
系统用户
explorer.exe
最后一个进程是 Windows 资源管理器explorer.exe
。此过程使用户可以访问其文件夹和文件。它还提供其他功能,例如“开始”菜单和任务栏
如前所述,Winlogon
进程运行 userinit.exe
,它启动HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
. Userinit.exe
在生成 explorer.exe
后退出。因此,父进程不存在
异常情况:
- 有一个实际的父进程(userinit.exe在创建explorer.exe后会结束)
- 程序路径不是C:\Windows\explorer.exe
- 利用拼接错误
- 运行的账户位置
- 有外部的
TCP
或者UDP
数据包连接