案例操作系统为 Windows Server 2016 root 账户来模拟普通用户账户 Administrator 为管理员账户 admin$ 账户来模拟隐藏普通账户 Windows 命令行常规情况下是不区分大小写的,因此大小写都可以
如果应急响应过程中允许,使用杀毒程序进行全盘杀毒肯定非常有帮助的,目前很多企业都有自己的终端管控程序,其中部分自带病毒库和杀毒功能,如果允许可以考虑异构排查
查看防火墙当前状态
win+r 中输入:
firewall.cpl # 快速打开Windows Defender 防火墙设置页面
进行查看当前防火墙状态



允许应用或功能通过 Windows 防火墙

【 Windows Server 2016 】 默认情况




名称 | 专用 | 公用 |
|---|---|---|
“播放到设备”功能 | 1 | 1 |
AllJoyn 路由器 | 1 | 0 |
Cortana (小娜) | 1 | 1 |
DiagTrack | 1 | 1 |
DIAL 协议服务器 | 1 | 0 |
mDNS | 1 | 1 |
SmartScreen 筛选器 | 1 | 1 |
Windows Shell Experience | 1 | 1 |
Windows 默认锁屏界面 | 1 | 1 |
Windows 远程管理 | 1 | 1 |
Xbox Game UI | 1 | 1 |
电子邮件和帐户 | 1 | 1 |
工作或学校帐户 | 1 | 1 |
核心网络 | 1 | 1 |
你的帐户 | 1 | 1 |
网络发现 | 1 | 0 |
网络发现与系统最初设置有关
win + r 中输入
gpedit.msc

【 Windows Server 2016 】 默认情况




cmd中输入
net user
此时,会显示出相关的系统账号:

此命令无法看到隐藏账号的情况,例如 admin$
cmd中输入
net localgroup # 查看所有组
net localgroup Users # 查看指定组
此时,会显示出所有的用户组:


【 Windows Server 2016 】 默认情况

-------------------------------------------------------------------------------
*Access Control Assistance Operators
*Administrators
*Backup Operators
*Certificate Service DCOM Access
*Cryptographic Operators
*Distributed COM Users
*Event Log Readers
*Guests
*Hyper-V Administrators
*IIS_IUSRS
*Network Configuration Operators
*Performance Log Users
*Performance Monitor Users
*Power Users
*Print Operators
*RDS Endpoint Servers
*RDS Management Servers
*RDS Remote Access Servers
*Remote Desktop Users
*Remote Management Users
*Replicator
*Storage Replica Administrators
*System Managed Accounts Group
*Users
命令成功完成。
lusrmgr.msc 为打开本地用户和组
win + r / cmd 中输入
lusrmgr.msc

lusrmgr能够看到常规的隐藏账户情况,即net user admin$ 123456 /add 这类方式添加的隐藏账号
右键用户查看属性即可看到相关用户信息

【 Windows Server 2016 】 默认情况








其他组均为空

regedit为打开注册表编辑器快捷指令
win + r 中输入
regedit
不同版本的操作系统位置不同
Windows 2016
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\NamesSAM 目录需要赋予权限,应急结束时记得取消权限




也可以通过命令行命令查询注册表
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\ProfileList\ /s
reg query HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names


也可以过滤一下
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\ProfileList\ /s | For /F "tokens=3" %i in ('findstr ProfileImagePath') do @echo %i

Tips:
【Windows Server 2016 】 默认情况






可以通过wmic命令进行查询用户,并且该命令可以直接查询到用户的详细数据,包括隐藏账户
wmic useraccount get /value # 查询用户的详细数据
wmic useraccount get Name,Status,sid # 查询目前有哪些用户,以及是否启用,Status标志位为:OK/Degraded,OK为启用状态



【 Windows Server 2016 】默认情况


AccountType=512
Caption=WIN-UBB04JA2U5V\Administrator
Description=管理计算机(域)的内置帐户
Disabled=FALSE
Domain=WIN-UBB04JA2U5V
FullName=
InstallDate=
LocalAccount=TRUE
Lockout=FALSE
Name=Administrator
PasswordChangeable=TRUE
PasswordExpires=TRUE
PasswordRequired=TRUE
SID=S-1-5-21-3421588695-3868107595-1594673911-500
SIDType=1
Status=OK
AccountType=512
Caption=WIN-UBB04JA2U5V\DefaultAccount
Description=系统管理的用户帐户。
Disabled=TRUE
Domain=WIN-UBB04JA2U5V
FullName=
InstallDate=
LocalAccount=TRUE
Lockout=FALSE
Name=DefaultAccount
PasswordChangeable=TRUE
PasswordExpires=FALSE
PasswordRequired=FALSE
SID=S-1-5-21-3421588695-3868107595-1594673911-503
SIDType=1
Status=Degraded
AccountType=512
Caption=WIN-UBB04JA2U5V\Guest
Description=供来宾访问计算机或访问域的内置帐户
Disabled=TRUE
Domain=WIN-UBB04JA2U5V
FullName=
InstallDate=
LocalAccount=TRUE
Lockout=FALSE
Name=Guest
PasswordChangeable=FALSE
PasswordExpires=FALSE
PasswordRequired=FALSE
SID=S-1-5-21-3421588695-3868107595-1594673911-501
SIDType=1
Status=Degraded
AccountType=512
Caption=WIN-UBB04JA2U5V\root
Description=
Disabled=FALSE
Domain=WIN-UBB04JA2U5V
FullName=
InstallDate=
LocalAccount=TRUE
Lockout=FALSE
Name=root
PasswordChangeable=TRUE
PasswordExpires=TRUE
PasswordRequired=TRUE
SID=S-1-5-21-3421588695-3868107595-1594673911-1001
SIDType=1
Status=OK
直接打开 powershell 窗口或在 cmd 窗口中输入 powershell 进入 powershell 命令行
Get-WmiObject -Class Win32_UserAccount
Get-WmiObject -Class Win32_UserAccount | Select-Object Name, SID



【 Windows Server 2016 】 默认情况


D 盾是一个有效的工具
https://www.d99net.net/


常规删除账户可以通过命令行或者图形化删除,但是对于一些隐藏账户会删除失败,可以通过D盾工具或直接去注册表删除
以 admin$ 克隆 Administrator 账户的 F 值为例,D盾检测出来后,右键删除其实是删除了
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\admin$
这个注册表项,但是对于下面的注册表并没有删除
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA
这种删除有效,但严格来说不够完整,可以去注册表删除用户对应的注册表



删除注册表失败可能是权限不够,修改权限或者通过 psexec以 SYSTEM 权限打开注册表编辑器就可以了,一定要确定好删除的是恶意账号,别删除错了
query user # 当前系统的 user 登录情况
query session # 当前系统的用户会话情况
Get-SmbSession # 当前系统的 SMB 信息
该命令为查看当前系统的会话,查看是否有人使用远程终端登录服务器,所以同样可以看到账号异常


任务管理器默认看不到 SMB 连接会话
启动项排查主要有以下方法和内容,包含了常规的检查办法,还有基本的启动项目录,都需要检查一遍,同时注册表是作为启动项检查方式之一,存在固定的注册表位置和语句,以下也有列举。
msconfig为打开系统配置程序,内含开机自启项目
win + r 输入
msconfig
**不是很建议使用这个程序来查看开机自启,只能作为查缺补漏项 **
可以查看到常规系统启动项,并且可以右键查看相应的启动项文件位置,也可以通过右键属性查看相应信息,但是此方法无法看到组策略自启动脚本,实测注册表自启动项也看不到

【 Windows Server 2016 】 默认情况

win + r 输入
shell:Common Startup

一般具体路径如下:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
该目录下存在的程序会在用户登录时,以登录用户的权限自动执行程序

【 Windows Server 2016 】 默认情况

具体路径如下:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\Users\root\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
// 对于新创建的用户,设置其家目录时会从下面这个目录拷贝文件,完成家目录的创建,本身并不会自动执行
C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
本目录下存放着用户登录自启的程序及相关文件等,同时在本目录下的启动文件

【 Windows Server 2016 】 默认情况



以下为注册表中启动项相关的所有位置,建议都排查一遍:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce [此条默认不存在,创建可用]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx [此条默认不存在,创建可用]
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx [此条默认不存在,创建可用]
// 下面两个其他文章中可能没写过,甚至官方的 autoruns 也发现不了
// 其中 {SID} 替换成用户的 SID 值
HKEY_USERS\{SID}\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_USERS\{SID}\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon [自动登录相关的注册表项]
// 用于设置启动文件夹项
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
// 用于设置服务自动启动 (默认并不存在)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
// 通过策略设置启动项
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
// 利用身份验证包自启动和SSP
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ 的 Authentication Packages 和 Security Packages 的值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\OSConfig
// 事件提供程序
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\
// Winlogon 帮助程序,主要是用户登录时执行的程序,需要检查注册表下的子注册表当前的键值对
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
// 端口监视器
HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors
// 打印处理器
HKLM\SYSTEM\[CurrentControlSet or ControlSet001]\Control\Print\Environments\[Windows architecture: e.g., Windows x64]\Print Processors\[user defined]\Driver
// Avtive Setup
HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\StubPath
// 登录脚本
HKCU\Environment\UserInitMprLogonScript
// 以下注册表可能不存在,如果存在也需要关注
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
这里需要注意:上面包含 {SID} 的两条每个用户只能查看自己的内容,无法查看其他用户的,即使你是管理员,所以如果你发现恶意程序是以某个用户起的,一定查查该用户对应的注册表项
利用 reg query 和 & 进行命令拼接进行查询,如下(建议使用 & 而不是 &&):
reg query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run & reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run & reg query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce & reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

我给大家准备了 powershell 查询脚本,可以将要查询的内容填写进去,下面代码里只填写了几条作为案例
$registryPaths = @(
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",
"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run",
"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce",
"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx"
)
foreach ($path in $registryPaths) {
$hive = $path.Substring(0, $path.IndexOf("\"))
switch ($hive) {
"HKEY_LOCAL_MACHINE" { $root = "HKLM:" }
"HKEY_CURRENT_USER" { $root = "HKCU:" }
"HKEY_CLASSES_ROOT" { $root = "HKCR:" }
"HKEY_USERS" { $root = "HKU:" }
"HKEY_CURRENT_CONFIG" { $root = "HKCC:" }
default {
Write-Host "Invalid registry hive: $hive"
continue
}
}
$subKey = $path.Substring($path.IndexOf("\") + 1)
if (Test-Path "$root\$subKey") {
Write-Host "Registry Path: $path"
Write-Host "---------------------------"
$keys = Get-ItemProperty -Path "$root\$subKey"
if ($keys) {
foreach ($key in $keys.PSObject.Properties) {
if ($excludedProperties -notcontains $key.Name) {
Write-Host "Key : $($key.Name)"
Write-Host "Value : $($key.Value)"
Write-Host
}
}
} else {
Write-Host "No keys found."
}
} else {
Write-Host "Registry Path: $path - Not Found"
Write-Host
}
Write-Host
}

Windows 系统级注册表文件存储位置如下
%SystemRoot%\System32\Config 目录下的以下文件:DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM%SystemRoot%\System32\Config\RegBack 目录下的备份文件(备份文件的扩展名为 .bak)%SystemRoot%\System32\Config\Default%SystemRoot%\System32\Config\DefaultUserNTUSER.DAT 文件当然不建议直接修改该文件,当然了,默认情况也不让直接修改
【 Windows Server 2016 】 默认情况


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AutoRestartShell REG_DWORD 0x1
Background REG_SZ 0 0 0
CachedLogonsCount REG_SZ 10
DebugServerCommand REG_SZ no
DisableBackButton REG_DWORD 0x1
EnableSIHostIntegration REG_DWORD 0x1
ForceUnlockLogon REG_DWORD 0x0
LegalNoticeCaption REG_SZ
LegalNoticeText REG_SZ
PasswordExpiryWarning REG_DWORD 0x5
PowerdownAfterShutdown REG_SZ 0
PreCreateKnownFolders REG_SZ {A520A1A4-1780-4FF6-BD18-167343C5AF16}
ReportBootOk REG_SZ 1
Shell REG_SZ explorer.exe
ShellCritical REG_DWORD 0x0
ShellInfrastructure REG_SZ sihost.exe
SiHostCritical REG_DWORD 0x0
SiHostReadyTimeOut REG_DWORD 0x0
SiHostRestartCountLimit REG_DWORD 0x0
SiHostRestartTimeGap REG_DWORD 0x0
Userinit REG_SZ C:\Windows\system32\userinit.exe,
VMApplet REG_SZ SystemPropertiesPerformance.exe /pagefile
WinStationsDisabled REG_SZ 0
scremoveoption REG_SZ 0
DisableCAD REG_DWORD 0x1
LastLogOffEndTimePerfCounter REG_QWORD 0x29d2fe81
ShutdownFlags REG_DWORD 0x8000022b
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\AlternateShells
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells
DefaultShell REG_SZ explorer.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells
30000 REG_SZ cmd.exe /c "cd /d "%USERPROFILE%" & start cmd.exe /k runonce.exe /AlternateShellStartup"
60000 REG_SZ explorer.exe

C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\AutoLogonChecked
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\VolatileUserMgrKey
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey\1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey\2
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\VolatileUserMgrKey\1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey\1\S-1-5-21-1129105344-1658940625-3319276557-500
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\VolatileUserMgrKey\1\S-1-5-21-1129105344-1658940625-3319276557-500
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\VolatileUserMgrKey\2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey\2\S-1-5-21-1129105344-1658940625-3319276557-500
C:\Users\Administrator>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon\VolatileUserMgrKey\2\S-1-5-21-1129105344-1658940625-3319276557-500
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\VolatileUserMgrKey\2\S-1-5-21-1129105344-1658940625-3319276557-500
contextLuid REG_QWORD 0x6c96c
C:\Users\Administrator>
gpedit.msc为打开本地组策略编辑器
win+r中输入:
gpedit.msc
打开本地组策略中心
计算机配置 => Windows设置 => 脚本(启动/关机) 用户配置 => Windows设置 => 脚本(登录/注销)
此处可以添加开机启动的程序、批处理文件和powershell脚本,开机时就会根据脚本自动运行添加到程序或任务
此处的任务是不会显示在启动或msconfig里的

以下目录对应的相应的脚本存放目录
//计算机设置处
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
//用户配置处
C:\Windows\System32\GroupPolicy\User\Scripts\Logon
组策略中心启动/关机的程序或脚本位置并不是固定的,可以随意指定,也就是说最终执行以组策略配置处为准。即使上面的目录中存在程序或脚本,但是在组策略配置处没有添加,也不会执行
【 Windows Server 2016 】 默认情况











Autoruns 是由 Sysinternals(微软的一部分)提供的免费工具,它可以显示 Windows 启动时加载的所有程序、服务、驱动程序和其他自启动项。您可以从 Microsoft 官网下载并使用它。
https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns

除了上面介绍的部分以外, Autoruns 还支持很多启动项排查
我的系统使用了 PD 虚拟机,同时安装了虚拟机工具,所以会有很多大家实际环境没有的
【 Windows Server 2016 】默认情况


上面是总的,可能比对不够清晰,下面为分项
【 Logon 】

【 Explorer 】

【 Scheduled Tasks 】

【 Service 】

【 Drivers 】

【 Image Hijacks 】

【 Known DLLs 】

定时任务经常是病毒、后门、权限维持等恶意行为的常见操作对象,通过添加新的定时任务,启动恶意脚本、powershell或者其他命令行语句来达到权限维持或者扩散的目的
排查计划任务开始前,需要先开启计划任务记录,以防相关任务未记录导致无法排查
此处计划任务建议主要以 注册表 排查为主,清晰明了,同时展示内容也相对省去了很多不必要的内容。
taskschd.msc为打开任务计划程序
win + r 中输入
taskschd.msc
可以看到近期活动的计划任务

该处需要注意的是,右侧的两个选项卡
显示所有正在运行的任务选项卡,可以显示当前正在运行的定时任务

计划任务中,任务详情需点击相关的计划任务,下面会显示该计划任务属性详情
需要着重注意以下选项卡:触发器、操作和历史记录
其中都会存储定时任务相关的信息,可以帮助排查

以下为病毒创建的计划任务,属性->操作 里可以看到该计划任务所执行的具体操作

点击左侧 任务计划程序(本地),显示如下

任务状态可以选择时间,假设选择 24 小时,下面显示的是从现在起,向前数 24 小时,在这时间段启动的任务状态
计划任务状态有以下几种
活动任务指的是当前正在运行的计划任务。这些任务是已经被触发并且正在执行中的任务。活动任务可能包括自动触发的任务和手动触发的任务,任务未过期
在Windows中通常用at和schtasks命令添加计划任务,其中at命令默认是以System权限执行,但是从 Win8开始不再支持 at 命令,所以以下以schtasks命令来进行介绍
cmd中输入:
schtasks /?
即可看到计划任务命令相关用法
schtasks /query //查看当前所有计划任务列表

schtasks /query /fo LIST /v
可以列出计划任务的信息,但是默认也会非常长,建议输出到文件中查看

schtasks 的 query 指令有三种输出格式, TABLE、LIST、CSV,如果希望以表格的形式查看,也可以尝试
schtasks /query /fo TABLE /v
schtasks /query /fo CSV /v
经过测试,table 的效果不是很好,可以导出到文件中进行查看。CSV 格式还是不错的,可以导出成 CSV 文件

如果不希望每一大项都有一份标题,可以考虑保留一份标题,之后输出纯内容,当然,也可以直接在 excel 中去重等方式完成
schtasks /query /fo CSV /v > 1.csv
# 去掉内容,仅保留第一行
schtasks /query /fo CSV /v /NH >> 1.csv

如果想查看某一项的内容,可以使用路径+名称的方式


位置+名称则为
\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser
如果想查找指定的计划任务,需要使用 /TN 参数,schtasks 命令对于空格处理允许整体使用双引号,也允许仅仅把空格用双引号引上
schtasks /query /fo LIST /v /TN \Microsoft\Windows\Application" "Experience\Microsoft" "Compatibility" "Appraiser
# 也可以使用双引号将整体引住
schtasks /query /fo LIST /v /TN "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser"

虽然我们只查询了这一条计划任务,但这里显示的结果不止一条,而是 3 条,这个条数是根据该条计划任务触发器的数量来决定的

触发器这里是三条,查询出来的内容就是三条
schtasks 是可以看到 Windows Api 创建的计划任务的
我们将注册表部分分为两类
就像是房屋售卖机构,一个是房屋售卖机构的位置,也就是售楼处;一个是售卖的房屋的位置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule

REG_MULTI_SZ 是多字符串值,也就是说表示多个字符串,字符串不能包含空格这个注册表中包含两项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Security

【 Windows Server 2016 】默认情况

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule
AtTaskMaxHours REG_DWORD 0x48
DisplayName REG_SZ @%SystemRoot%\system32\schedsvc.dll,-100
ErrorControl REG_DWORD 0x1
Group REG_SZ SchedulerGroup
ImagePath REG_EXPAND_SZ %systemroot%\system32\svchost.exe -k netsvcs
Start REG_DWORD 0x2
Type REG_DWORD 0x20
Description REG_SZ @%SystemRoot%\system32\schedsvc.dll,-101
DependOnService REG_MULTI_SZ RPCSS\0SystemEventsBroker
ObjectName REG_SZ LocalSystem
ServiceSidType REG_DWORD 0x1
RequiredPrivileges REG_MULTI_SZ SeIncreaseQuotaPrivilege\0SeChangeNotifyPrivilege\0SeAuditPrivilege\0SeImpersonatePrivilege\0SeAssignPrimaryTokenPrivilege\0SeTcbPrivilege\0SeRestorePrivilege\0SeBackupPrivilege
FailureActions REG_BINARY 805101000000000000000000030000001400000004000000000000000100000060EA00000000000000000000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Security

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Parameters
ServiceDll REG_EXPAND_SZ %systemroot%\system32\schedsvc.dll
ServiceDllUnloadOnStop REG_DWORD 0x1
ServiceMain REG_SZ ServiceMain

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Security
Security REG_BINARY 01001480900000009C000000140000003000000002001C000100000002801400FF010F000101000000000001000000000200600004000000000014008D00020001010000000000050B00000000001800DD010E000102000000000005200000002002000000001400FF010F00010100000000000512000000000018008D00020001020000000000052000000021020000010100000000000512000000010100000000000512000000
计划任务的 Id、Index、SD 在此位置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree
计划任务的具体配置在此位置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{id}

Tree 下为计划任务位置,其中包含计划任务的 Id、Index、SD

Index 值很奇怪,以 0x3 为主,括号里面的值就是前面的值的十进制值得到 Id 值后,就可以在下面的注册表中查看具体该计划任务具体配置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\

可以通过搜索来找到对应的计划任务配置

所以也就是说将该注册表中的内容都看一遍,就可以获取到所有的计划任务
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Schedule\TaskCache\Tasks\


计划任务服务会讲所有设置的计划任务保存一份儿到文件,具体路径为
C:\Windows\System32\Tasks

使用记事本打开相关文件

这里提一点,修改计划任务文件不会影响计划任务的执行,通过计划任务程序修改计划任务的属性或者禁止计划任务再启动后,会将计划任务内容写入到计划任务文件中
删除计划任务文件不耽误计划任务执行,也不耽误计划任务显示
打开日志管理器
eventvwr
应用程序和服务日志 -> Microsoft -> Windows -> TaskScheduler

默认计划任务不记录操作日志,点击启用所有任务历史记录后,操作日志就会被记录下来了

点击后如下

日志部分主要查看 Operational 日志

可以看到这段时间的详细日志
Windows Server 2016 中计划任务日志相关的事件 id 我并没有在官方材料中找到准确的描述,因此这里通过手动测试

事件 ID | 任务类别 |
|---|---|
100 | 计划任务启动 |
102 | 任务已完成 |
106 | 计划任务注册 |
110 | 计划任务由用户触发 |
129 | 已创建计划任务 |
140 | 任务注册已更新(修改属性) |
141 | 任务注册已删除(直接删除计划任务) |
142 | 任务已禁用 |
200 | 操作已启动(这就是实际执行了操作) |
201 | 操作已完成 |
Autoruns 是 SysinternalsSuite 套件中一款工具,可以很方便查看包括计划任务等启动项排查
https://learn.microsoft.com/zh-cn/sysinternals/downloads/sysinternals-suite

可以在可疑的计划任务上右键,从计划任务程序打开该计划任务


经过测试发现,如果在 Microsoft 新建文件夹,之后在新建文件夹中创建计划任务, Autoruns 默认无法发现


此时需要取消选中 Hide Microsoft entries 和 Hide Windows entries


这就显示出来了
如果上面的方法你都找不到计划任务,可以参考我们的文章 《计划任务的攻防战 | Window 应急响应》
https://mp.weixin.qq.com/s/y9_9P6ggxGMrdGMFT-I34A
cmd中输入:
netstat /?
命令解释如下:

可以通过如下命令,获取当前所有UDP和TCP连接,同时列出所有的进程PID和进程执行程序及对应的服务简称
netstat -a -n -o -b //-anob同理
连接状态有以下几种

用于显示与 NetBIOS 相关的网络连接和统计信息
nbtstat -c // 列出远程[计算机]名称及其 IP 地址的 NBT 缓存

Get-NetTCPConnection # 获取 tcp 连接
Get-NetUDPEndpoint # 获取 udp 连接


这是一个开源脚本,通过 powershell 编写,可以获取网络连接的时间戳 https://github.com/IllusiveNetworks-Labs/Get-NetworkConnection

https://systeminformer.sourceforge.io/ Process Hacker 的升级版

net share

【 Windows Server 2016 】默认情况

任务栏右键选择***任务管理器*** 或者 使用快捷键***Ctrl+Shift+Esc*** 快速打开任务管理器,如下图:


可以对进程右键,进一步查看进程信息



cmd中输入:
tasklist /?
常用命令解析:
tasklist //直接列出进程列表
//“/m /v /svc“三个命令不能同时使用
tasklist /m //进程使用了哪些模块、dll等
tasklist /m user32.dll //哪些进程使用了该user32.dll
tasklist /svc //显示每个进程中的服务信息
tasklist /v //显示详细信息内容,包含会话、内存、用户等信息
tasklist /fi "USERNAME ne NT AUTHORITY\SYSTEM" /fi "STATUS eq running"
//“/fi”后面跟的是查询语句,列出系统中正在运行的非“SYSTEM“状态的所有进程,ne为不等于,eq为等于
常用
/fi 查询关键字
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
SESSIONNAME eq, ne 会话名称
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 小时,
mm - 分钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位)
USERNAME eq, ne 用户名,格式为
[域\]用户
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
模块 eq, ne DLL 名称
//运算符
相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于或等于(LE)、大于或等于(GE)
tasklist /fi "USERNAME eq NT AUTHORITY\SYSTEM"


tasklist /FI "USERNAME eq Administrator" /FI "STATUS eq running" /v

tasklist /FI "PID eq 7768" /V

tasklist /FI "PID eq 7768" /M /V

taskkill 主要为终止进程操作,需要注意的是使用该命令时,cmd 命令行最好使用管理员权限,常用命令如下:
taskkill /pid 9688
taskkill /f /pid 9688 //强制终止进程pid为9688的进程,/f为强制终止
taskkill /t /pid 9688 //终止pid为9688进程及其子进程,/t为终止指定的进程和由它启用的子进程


poweshell为windows自带的一种更深入系统内部的命令行脚本环境,可以通过相应的命令对进程进行查询及操作。
win+r输入:powershell
cmd中输入:powershell
powershell的命令结构一般是动词+名词
打开powershell环境后,可以通过
get-help *process* //查找所有process相关命令的帮助,*为通配符

本次只涉及如下命令
tasklist命令,直接列出进程powershell里输入:
get-help get-process //获取get-process命令的帮助

常规用法:gps -name “*{进程名}*”
gps -name "*edge*" //查询列出所有“edge”字样的进程

组合format-list *使用
gps -name "*edge*"|format-list * //列出名称包含“edge”进程的详细信息,包含内容非常多
gps -pid 8828 |format-list * //列出pid为8828进程的详细信息
gps -pid 8828 |format-list path //列出pid为8828进程的程序路径




该命令为停止相关进程,通过get-help stop-process获取帮助

演示:
spps -id 8828 //停止8828进程
spps -name “msedge” //停止名字为msedge的进程


wmic 为 WMI(Windows Management Instrumentation,Windows管理工具)的扩展 ,提供了从命令行接口和批处理脚本执行系统管理的支持
可以支持快速查询系统进程相关信息,尤其是可以查询进程命令内容,这对于常规挖矿等进程,可以直接看到进程中的远程矿池地址
cmd/powershell中输入:
# 列出进程列表,与tasklist命令相通
wmic process list brief
# 重要:【查看所有运行中进程的命令行参数和程序目录】
wmic process get caption,executablepath,commandline /value
# 精确查找
wmic process where caption="notepad.exe" get caption,commandline /value
# 模糊查找
wmic process where="caption like 'notepad%'" get caption,commandline /value
# 重要:【列出svchost进程的名称、进程命令、启动程序路径】
wmic process where caption="svchost.exe" get caption,commandline,executablepath /value

cmd中输入:
query process //查看当前用户所启动的进程

tlist.exe是Microsoft官方提供的windows调试工具包中的工具之一,用于操作进程。
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/tlist-commands
下载后,放在目录下,使用cmd命令行进行操作:
tlist /? //获取命令帮助

tlist 2796 # 直接跟对应进程的pid,会列出该进程的详细信息,可以看到具体的进程命令、内存信息、dll信息等
tlist msedge # 直接跟进程名称,也同样列出相关信息,此处可以使用通配符
tlist msedg* # 通配符,列出所有msedg*相关进程的详细信息
tlist -v 2796 # -v查看详细信息



tlist -g # -g会列出所有进程及所关联的进程,会在进程前面标注[1234],代表该进程是1234关联的进程,但是只能在win7以上系统使用
tilst -g 2796 # 列出指定pid进程的父进程[0]
tlist -g -t # 列出所有进程的进程树及关联的进程,-t为按照进程树列出,退格表示父子进程
可以看到以下进程前面有 [0] ,是相关进程的父进程:

通过缩紧来表示进程关系,缩紧表示父子关系:

tlist -s //列出所有进程关联的活动服务
tlist -s 10296 //列出指定进程的关联活动服务

tlist -p msedge //-p返回该进程的pid,如果该进程不存在就返回-1,如果多个,就返回首个进程的pid
tlist -w //返回所有进程的位数,64/32
SysinternalsSuite 的一部分 https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer

可以较为清晰地看到进程之间的关系,可以看作是大号的任务管理器
https://systeminformer.sourceforge.io/ Process Hacker 的升级版

这个可以看作是大号的 Process Explorer了,但这个不是微软官方开发的
不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息



可以看到进程开始的时间
可以重点关注
path和pathext
常规查询方式如下:
右键此电脑-属性-高级系统设置-环境变量
也可以直接通过搜索栏搜索 环境变量


【 Windows Server 2016 】默认情况

cmd中输入:
set //列出系统OS系统变量和用户环境变量

【 Windows Server 2016 】 默认情况
Administrator 用户

Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\Administrator\AppData\Roaming
CommonProgramFiles C:\Program Files\Common Files
CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
CommonProgramW6432 C:\Program Files\Common Files
COMPUTERNAME WIN-2MTJ8IQ5VEA
ComSpec C:\Windows\system32\cmd.exe
HOMEDRIVE C:
HOMEPATH \Users\Administrator
LOCALAPPDATA C:\Users\Administrator\AppData\Local
LOGONSERVER \\WIN-2MTJ8IQ5VEA
NUMBER_OF_PROCESSORS 4
OS Windows_NT
Path C:\Program Files (x86)\Parallels\Parallels Tools\Applications;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\...
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION 9e0d
ProgramData C:\ProgramData
ProgramFiles C:\Program Files
ProgramFiles(x86) C:\Program Files (x86)
ProgramW6432 C:\Program Files
PROMPT $P$G
PSModulePath C:\Users\Administrator\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC C:\Users\Public
SESSIONNAME Console
SystemDrive C:
SystemRoot C:\Windows
TEMP C:\Users\ADMINI~1\AppData\Local\Temp
TMP C:\Users\ADMINI~1\AppData\Local\Temp
USERDOMAIN WIN-2MTJ8IQ5VEA
USERDOMAIN_ROAMINGPROFILE WIN-2MTJ8IQ5VEA
USERNAME Administrator
USERPROFILE C:\Users\Administrator
windir C:\Windows
powershell中输入:
ls env: | Format-Table -Wrap
$env:path -Split ";" # 快速列出环境变量 path


【 Windows Server 2016 】 默认情况
Administartor 用户

Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\Administrator\AppData\Roaming
CommonProgramFiles C:\Program Files\Common Files
CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
CommonProgramW6432 C:\Program Files\Common Files
COMPUTERNAME WIN-2MTJ8IQ5VEA
ComSpec C:\Windows\system32\cmd.exe
HOMEDRIVE C:
HOMEPATH \Users\Administrator
LOCALAPPDATA C:\Users\Administrator\AppData\Local
LOGONSERVER \\WIN-2MTJ8IQ5VEA
NUMBER_OF_PROCESSORS 4
OS Windows_NT
Path C:\Program Files (x86)\Parallels\Parallels Tools\Applications;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\User
s\Administrator\AppData\Local\Microsoft\WindowsApps;
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION 9e0d
ProgramData C:\ProgramData
ProgramFiles C:\Program Files
ProgramFiles(x86) C:\Program Files (x86)
ProgramW6432 C:\Program Files
PROMPT $P$G
PSModulePath C:\Users\Administrator\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC C:\Users\Public
SESSIONNAME Console
SystemDrive C:
SystemRoot C:\Windows
TEMP C:\Users\ADMINI~1\AppData\Local\Temp
TMP C:\Users\ADMINI~1\AppData\Local\Temp
USERDOMAIN WIN-2MTJ8IQ5VEA
USERDOMAIN_ROAMINGPROFILE WIN-2MTJ8IQ5VEA
USERNAME Administrator
USERPROFILE C:\Users\Administrator
windir C:\Windows

C:\Program Files (x86)\Parallels\Parallels Tools\Applications
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps
不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息



CLR相关知识引用: CLR :公共语言运行库(Common Language Runtime,CLR)是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境;所以.NET 的程序,都是在CLR中运行的。 使用基于CLR的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。 MS的一些语言,例如C#、VB、F#,都是在 CLR 中运行的,所以可以将CLR理解为他们的运行环境。
CLR劫持的根本思路就是在于:利用一个叫做托管代码分析器的东西(Managed Profiler) ,用于性能分析、调试和诊断.NET应用程序的工具,它可以捕获应用程序的执行信息、方法调用、资源使用情况等,并提供详细的分析报告。如果我们将托管代码分析器设置为恶意程序,那就可以劫持所有 .net 框架程序的执行
基本操作为:
.NetCOR_ENABLE_PROFILING 值为 1.NET Framework 运行时加载托管代码分析器(Managed Profiler)COR_PROFILER 值为 CLSIDManaged Profiler)的 CLSID(Class ID)利用方式如下:
# cmd中运行以下命令:
SETX COR_ENABLE_PROFILING 1
SETX COR_PROFILER {AABBCCDD-1234-1234-1234-AABBCCDDEEFF} # {}为CLSID内容

# msf.dll为msf生成的后门dll文件
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{AABBCCDD-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /VE /T REG_SZ /D "C:\msf.dll" /F
# 设置ThreadingModel = Apartment
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{AABBCCDD-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F

所以在排查思路上,就可以重点关注环境变量内容
COR_ENABLE_PROFILING 和 COR_PROFILER 的键值set COR # 列出COR相关的环境变量


# //列出该注册表项下所有CLSID,如果有就可以继续递归排查
reg query HKEY_CURRENT_USER\Software\Classes\CLSID\


cmd中输入命令:
systeminfo
列出系统信息后,主要关注补丁信息:

cmd中输入:
wmic qfe list //列出系统内补丁信息

Windows-Exploit-Suggester.py脚本根据Microsoft官方的漏洞补丁库与本地系统信息进行比较,列出当前系统可能存在的漏洞及对应补丁
但是已经很久没更新了
http://www.microsoft.com/en-gb/download/confirmation.aspx?id=36982 http://download.microsoft.com/download/6/7/3/673E4349-1CA5-40B9-8879-095C72D5B49D/BulletinSearch.xlsx
https://github.com/AonCyberLabs/Windows-Exploit-Suggester/blob/master/windows-exploit-suggester.py
使用方法如下:
python windows-exploit-suggester.py --update //进行更新微软漏洞库文件,建议每次都先update一下
systeminfo命令执行的结果复制保存到本地
3.本地使用systeminfo命令结果进行检测:
python windows-exploit-suggester.py -d 2022-03-10-mssb.xls -i win10.txt
命令结果如下:

Windows Exploit Suggester - Next Generation (WES-NG) https://github.com/bitsadmin/wesng 声称是下一代 Windows Exploit Suggester
具体使用方法可以查看 Github 上的项目详情
无论大家使用哪款程序来帮助分析日志,我都建议大家先把日志备份一份儿,同时在同款主机上测试一下工具的可用性
win+r 中输入,打开系统事件查看器:
eventvwr.msc # windows事件查看器

主要关注以下日志内容:
针对windows安全日志分析,主要是查看各事件ID,同时查看事件内容,以下为常见的事件ID代表的含义:
Microsoft官方事件ID含义对应表 https://docs.microsoft.com/zh-cn/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor
事件ID | 说明 |
|---|---|
4624 | 登录成功 |
4625 | 登录失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4672 | 使用超级用户(如管理员)进行登录 |
4720 | 创建用户 |
4722 | 启用用户 |
4726 | 删除用户 |
1102 | 清理日志 |
其中每个登录事件日志中,还会有登录类型字段,该字段代表为所使用的登录方式为哪种,如下表:
登录类型 | 描述 | 说明 |
|---|---|---|
2 | 交互式登录(Interactive) | 用户在本地进行登录 |
3 | 网络(Network) | 最常见的情况就是连接到共享文件夹或共享打印机时 |
4 | 批处理(Batch) | 通常表明某计划任务启动 |
5 | 服务(Service) | 每种服务都被配置在某个特定的用户账号下运行 |
7 | 解锁(Unlock) | 屏保解锁 |
8 | 网络明文(NetworkCleartext) | 登录的密码在网络上是通过明文传输的,如FTP |
9 | 新凭证(NewCredentials) | 使用带/Netonly参数的RUNAS命令运行一个程序 |
10 | 远程交互(RemoteInteractive) | 通过终端服务、远程桌面或远程协助访问计算机 |
11 | 缓存交互(CachedInteractive) | 以一个域用户登录而又没有域控制器可用 |

可以通过筛选当前安全日志的方式,查看是否存在爆破纪录,如果存在大量、且时间连续的4625日志,说明存在爆破记录:

也可以筛选上面敏感的事件id进行分析,当前日志分析的前提是***日志完好的保存且记录配置正确***
Windows Server 2016 的日志存储位置为
C:\Windows\System32\winevt\Logs\
其中包含各种日志

安全日志系统默认存放位置:
C:\Windows\System32\winevt\Logs\Security.evtx

系统日志默认存放位置:
C:\Windows\System32\winevt\Logs\System.evtx

应用程序日志默认存放位置:
C:\Windows\System32\winevt\Logs\Application.evtx

wevtutil.exe 是 Windows 自带的查询日志的命令行工具

查询日志来源为默认的 evtx 日志文件:
C:\Windows\System32\winevt\Logs\ # 日志文件目录
相关参数的简单用法官方文档内有部分解释:
https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/wevtutil
findstr搭配使用常用参数 | 解析 | 示例 | 示例解析 |
|---|---|---|---|
qe | 从指定的某类日志中查询 | wevtutil qe Security | 查询安全日志 |
/q | 自定义 XPath格式查询事件可以多语句查询 | /q:"Event/System/EventID=4624" | 筛选事件id为4624的日志 |
/f | 输出格式一般有xml、text等 | /f:text | text格式输出 |
/c | 理解为输出的条数默认为倒序所以直接输出都是最早的日志 | /c:10 | 输出10条 |
/rd | 正序查询或倒序查询默认true为倒序false为正序 | /rd:false | 正序查找,从最近开始 |
/epl | 导出日志 | /epl System xxx.evtx | 将System日志导出到xxx.evtx |
根据常用查询参数,编写了部分查询命令,可以自行根据想要的信息更改参数
需要注意的是/q后跟为XPath格式查询语句,内容非常多,此处只是列举部分常规排查会用得到的参数
展示的内容一般比较多,与findstr搭配查询关键字
查找安全日志中,事件ID为4624(登录成功)的日志,输出最近10条:
wevtutil qe Security /q:"Event/System/EventID=4624" /f:text /rd:false /c:10

查找安全日志中,事件ID为4624(登录成功),并且登陆类型为10(远程 RDP 登录)的日志,输出最近3条:
wevtutil qe security /q:"*[EventData[Data[@Name='LogonType']='10'] and System[(EventID=4624)]]" /f:text /rd:false /c:3

当前操作系统没有被远程 RDP 登录过,所以为空
查找安全日志中,目标账户名为'XXX'的日志:
wevtutil qe security /q:"Event/EventData/Data[@Name='TargetUserName']='XXX'" /f:text /rd:false /c:3

查找安全日志中,在2022-06-28 20:13到2022-06-28 22:06期间所有事件id为4624(登录成功)的日志:
wevtutil qe security /q:"*[System [TimeCreated[@SystemTime <'2022-06-28T14:06:20' and @SystemTime >'2022-06-28T12:13:51']]] and Event/System/EventID=4624" /f:text /rd:false
需要注意的是:时间查询也支持时间戳查询,但是建议时间区间查询按照如上方式 ,是在日志中详细信息选项内获取
同时该时间格式 2022-06-28T12:13:51.598599500Z
T表示分隔符,Z表示的是UTC。UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
换算可得:2022-06-28T12:13:51.598599500Z <==> 2022-06-28 20:13:51

除非你想快速确认某些内容并且有写好的 powershell 脚本或者做自动化日志分析处理,不然不是很建议使用 powershell 查询日志
Windows PowerShell同样提供了日志查询的相关命令程序:
Get-WinEventGet-EventLog这两个PowerShell的命令程序优点是它们将结果作为PowerShell对象返回,所以可以支持用户操作和格式化这些返回,如 Select、Select-String、Format-List
关于这两个命令程序的区别,腾讯云开发者社区的雷龙写了一篇文章,从功能性到效率都做了讲解,推荐看下:
《Get-WinEvent和Get-EventLog的区别及效率》 https://cloud.tencent.com/developer/article/1879732
Get-EventLog
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1&viewFallbackFrom=powershell-7.2
Get-WinEvent
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.diagnostics/get-winevent?view=powershell-7.2
Get-WinEvent可以查询上百种日志,其中包括更加详细的 Applications and Services Logs,Get-WinEvent是从 Windows Vista 才开始引入的。
需要注意的是,尽量使用管理员权限进行操作 powershell,不然部分日志会返回错误
Get-WinEvent 命令可以查询日志非常全面,可以通过 Get-WinEvent -ListLog * 来查看具体能够查询那些日志,同时所查询日志都在windows日志目录下:

基本用法:

查询登录成功的日志(事件id: 4624)
Get-WinEvent -LogName Security -FilterXPath '*/System/EventID=4624' | Select *

如果直接 Select * 会查处一堆,包括查询到的所有的内容,当然我们限制查询条数
Get-WinEvent -LogName Security -FilterXPath '*/System/EventID=4624' -MaxEvents 1 | Select *


如果只想看其中几项,可以在 Select 后面指定,但是如何知道到底有哪些项呢?
Get-WinEvent -LogName Security -FilterXPath '*/System/EventID=4624' | Get-Member

这样就可以选择了
查询登录成功的日志
Get-EventLog -LogName Security -InstanceId 4624
如果想查询实际内容,与上面内容一样
Log Parser 是一款由 Microsoft 开发的强大的命令行工具,用于分析和查询各种日志文件和数据源。它可以帮助你从多种格式的日志文件中提取信息,并执行复杂的查询和分析操作。
Log Parser 支持多种数据源,包括文本文件(如日志文件、CSV 文件)、事件日志、注册表、IIS 日志、数据库等。它使用一种类 SQL 的查询语言,让你能够执行各种过滤、排序、统计和聚合操作。
官方下载地址:
https://download.microsoft.com/download/f/f/1/ff1819f9-f702-48a5-bbc7-c9656bc74de8/LogParser.msi
它使用 SQL 语句一样查询分析这些数据,所以使用起来稍微复杂一些,需要对SQL查询语句操作熟悉
以下语句中的 sercurity.evtx 都是从日志目录下复制到工具目录内,如果不进行复制就需要管理员启动cmd命令行来进行查询
查询系统日志EVTX语句格式:
LogParser.exe -i:EVT -o:DATAGRID {SQL语句}
安全日志中的可查询字段内容:
字段名 | 字段内容 | 查询方式 |
|---|---|---|
eventlog | 所查询的日志路径 | 无需关注 |
recordnumber | 该条日志索引序号 | 无需关注 |
timegenerated | ※日志产生的时间 | 比较运算符<,>,=,<>建议结合order by xxx desc使用 |
timewritten | 日志写入的时间 | 比较运算符<,>,=,<> |
eventid | ※事件id | 比较运算符等于=4624不等于<>4624 |
eventtype | ※事件类型 | 比较运算符<,>,=,<> |
eventtpyename | 事件类型描述一般是审核成功/失败 | 无需关注 |
eventcategory | 事件数字类型类别 | 无需关注 |
eventcategoryname | 事件类别描述 | 无需关注 |
sourcename | 日志来源通常情况下是Microsoft-Windows-Security-Auditing | 无需关注 |
strings | ※事件关联数据内容登录信息登录账户登录域登录时间登录ip等信息 | 内容用|分割可以使用extract_token(strings,5,'|')进行分割筛选 |
computername | 生成事件的主机名 | 涉及到特殊登录时可以关注 |
sid | 与事件关联的安全标识符 | 无需关注 |
message | ※事件消息内容包含登录信息等 | 内容用“ ”空格分割可以使用extract_token(message,13,' ') |
data | 二进制数据 | 无需关注 |
其中需要注意的是两个字段:
|对数据进行分割EXTRACT_TOKEN(Strings, 0, '|')提取S-1-5-18
EXTRACT_TOKEN(Strings, 5, '|')提取 IP 以此类推
上述帮助描述可以从官方文档中找到

根据上面的表格,我们即可通过相应的SQL语句进行查询:
查询事件id为登录失败的日志,并且要最近的开始展示
select * from security.evtx where eventid=4625 order by timegenerated desc
查询某个时间内的登录成功日志,并且要看所使用的用户名,ip,登录时间
select extract_token(strings,5,'|') as Username,extract_token(message,38,' ') as Loginip,timegenerated from security.evtx where timegenerated > '2022-01-01 00:00:00' and timegenerated < '2022-01-02 00:00:00' and eventid = 4624

extract_token(strings,5,'|') 结果为账户名extract_token(message,38,' ') 结果为登录ip,null为本地登录timegenerated 结果为日志产生时间以下为常用的查询语句:
查询登录成功的事件
LogParser.exe -i:EVT -o:DATAGRID "select * from security.evtx where EventID=4624"
查询登录失败的事件
LogParser.exe -i:EVT -o:DATAGRID "select * from security.evtx where EventID=4625"
查询指定时间范围内的登录成功/失败日志
TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00'
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"
筛选指定IP的远程登录成功日志
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4624" and extract_token(strings,8,"|")='10' and extract_token(strings,5,'|') = '192.168.1.1'
LogParser Lizard是基于LogParser的GUI图形化程序。
这个程序也有几年没有更新了
https://www.lizard-labs.com/log_parser_lizard.aspx
优点:
缺点:
截图于官方网站:

https://tools.lz520520.com/files/lz520520/logparse/evtxLogparse1.3.zip 使用方法参考文章 https://sec.lz520520.com/2019/10/298/
evtxLogParser是基于LogParser做了一个简单的命令调用,工具内预先写了关于 smb 和 rdp 两个协议的日志筛选规则,可以筛选日志内smb协议和rdp协议的登录成功或失败的日志。
虽然内置规则简单,但是胜在方便快捷,对应场景下使用简单方便。
工具使用如下:
evtxLogparse.exe -r success/fail xxx.evtx # 筛选指定日志里rdp成功或失败的日志
evtxLogparse.exe -s success/fail xxx.evtx # 筛选指定日志里smb成功或失败的日志
# 存在以上相关筛选结果,返回的结果与LogParser返回结果样子完全一样

sysmon 是由 Windows Sysinternals 出品的一款 Sysinternals 系列工具之一,以系统服务和设备驱动程序的方式安装在系统上,会在系统重新启动时保持驻留状态,以监视和记录系统活动到Windows事件日志中,可以提供进程创建、网络连接、文件创建相关信息,同时收集或SIEM代理收集它生成的事件并随后对其进行分析,可以识别恶意或异常活动,并了解入侵者和恶意软件如何在用户网络上运行。
Sysmon不会对其生成的事件进行分析,也不会尝试保护自己免受攻击者攻击,因此仅作为监控工具而存在,允许其监视计算机上的某些活动并将其记录到Windows事件查看器。
在打开应用或者任何进程创建的行为发生时,Sysmon 会使用sha1(默认)、MD5、SHA256 或 IMPHASH 记录进程镜像文件的 hash 值,包含进程创建过程中的进程 GUID,每个事件中包含 session 的 GUID。除此之外记录磁盘和卷的读取请求 / 网络连接(包括每个连接的源进程,IP 地址,端口号,主机名和端口名),重要的是还可在生成初期进程事件能记录在复杂的内核模式运行的恶意软件。
优点:
缺点:
准备工作:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon
https://github.com/SwiftOnSecurity/sysmon-config
https://github.com/nshalabi/SysmonTools
首先下载 sysmon 安装程序,包含以下文件:

使用命令进行安装,安装之前需要将下载的 sysmonconfig-export.xml 配置文件放到当前文件夹,然后使用以下命令进行安装,需要注意的是,安装过程需要用管理员权限,所以需要管理员启动cmd:
sysmon64.exe -accepteula -i sysmonconfig-export.xml
# 默认设置进行安装,使用指定的配置文件xml
看到如下截图即代表安装完成:

在事件查看器中,找到:
事件查看器--> 应用程序和服务日志--> Microsoft--> Windows--> Sysmon--> Operational
当前模块下所有日志即为sysmon监控记录的日志,可以点击某条日志,在下面板查看日志详情内容。


在 sysmon 目录下管理员启动 cmd,输入如下命令,会在当前目录下生成 eventlog.xml 文件:
WEVTUtil query-events "Microsoft-Windows-Sysmon/Operational" /format:xml /e:sysmonview > eventlog.xml
使用sysmon view工具导入eventlog.xml文件:
File--> Import Sysmon Event Logs
选择已经生成好的eventlog.xml文件,导入完成后即可看到所有运行程序及进程信息。
尝试使用mimikatz:



尝试使用net user /add admin$
同样可以抓取到具体进程和命令

筛选查看对应日志:

sysmon日志事件ID含义:
以下内容摘自官方文档 https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon
事件ID 1:流程创建
流程创建事件提供有关新创建流程的扩展信息。完整的命令行提供了有关流程执行的上下文。ProcessGUID字段是整个域中此过程的唯一值,以简化事件关联。哈希是文件的完整哈希,其中包含HashType字段中的算法。
事件ID 2:一个进程更改了文件创建时间
当进程显式修改文件创建时间时,将注册更改文件创建时间事件。此事件有助于跟踪文件的实际创建时间。攻击者可能会更改后门的文件创建时间,以使其看起来像与操作系统一起安装。请注意,许多进程会合理地更改文件的创建时间。它不一定表示恶意活动。
事件ID 3:网络连接
网络连接事件记录计算机上的TCP / UDP连接。默认情况下禁用。每个连接都通过ProcessId和ProcessGUID字段链接到流程。该事件还包含源和目标主机名IP地址,端口号和IPv6状态。
事件ID 4:Sysmon服务状态已更改
服务状态更改事件报告Sysmon服务的状态(已启动或已停止)。
事件ID 5:进程终止
进程终止时报告进程终止事件。它提供了进程的UtcTime,ProcessGuid和ProcessId。
事件ID 6:驱动程序已加载
驱动程序加载事件提供有关在系统上加载驱动程序的信息。提供配置的哈希值以及签名信息。出于性能原因,签名是异步创建的,并指示在加载后是否删除了文件。
事件ID 7:图像已加载
图像加载事件记录在特定过程中加载模块的时间。默认情况下,此事件是禁用的,需要使用–l选项进行配置。它指示模块的加载过程,哈希和签名信息。出于性能原因,签名是异步创建的,并指示在加载后是否删除了文件。应仔细配置此事件,因为监视所有图像加载事件将生成大量事件。
事件ID 8:CreateRemoteThread
CreateRemoteThread事件检测一个进程何时在另一个进程中创建线程。恶意软件使用此技术来注入代码并隐藏在其他进程中。该事件指示源和目标进程。它提供了有关将在新线程中运行的代码的信息:StartAddress,StartModule和StartFunction。请注意,将推断StartModule和StartFunction字段,如果起始地址在已加载的模块或已知的导出函数之外,则它们可能为空。
事件ID 9:RawAccessRead
RawAccessRead事件检测进程何时使用\。\表示从驱动器进行读取操作。恶意软件通常使用此技术来对已锁定以供读取的文件进行数据泄漏,并避免使用文件访问审核工具。该事件指示源进程和目标设备。
事件ID 10:ProcessAccess
当一个进程打开另一个进程时,该进程访问事件报告,该操作通常伴随着信息查询或读写目标进程的地址空间。这样可以检测黑客工具,这些工具读取诸如本地安全机构(Lsass.exe)之类的进程的内存内容,以窃取凭据以用于“哈希传递”攻击。如果存在活动的诊断实用程序,这些实用程序会反复打开进程以查询其状态,则启用它可能会产生大量的日志记录,因此通常只应使用删除预期访问的过滤器来启用它。
事件ID 11:FileCreate
创建或覆盖文件时,将记录文件创建操作。该事件对于监视自动启动位置(如启动文件夹)以及临时目录和下载目录很有用,这些位置是恶意软件在初始感染期间掉落的常见位置。
事件ID 12:RegistryEvent(对象创建和删除)
注册表项和值的创建和删除操作映射到此事件类型,这对于监视注册表自动启动位置的更改或特定的恶意软件注册表修改很有用。
Sysmon使用注册表根键名的缩写版本,具有以下映射:
键名 | 缩写 |
|---|---|
HKEY_LOCAL_MACHINE | HKLM |
HKEY_USERS | HKU |
HKEY_LOCAL_MACHINE\System\ControlSet00x | HKLM\System\CurrentControlSet |
HKEY_LOCAL_MACHINE\Classes | HKCR |
事件ID 13:RegistryEvent(值集)
此注册表事件类型标识注册表值修改。该事件记录为DWORD和QWORD类型的注册表值写入的值。
事件ID 14:RegistryEvent(键和值重命名)
注册表键和值重命名操作映射到此事件类型,记录重命名的键或值的新名称。
事件ID 15:FileCreateStreamHash
此事件在创建命名文件流时记录,并生成事件,该事件记录该流所分配到的文件内容(未命名流)以及命名流的内容的哈希。有一些恶意软件变体会通过下载浏览器来删除其可执行文件或配置设置,并且该事件旨在基于基于附加了Zone.Identifier“网络标记”流的浏览器来捕获它们。
事件ID 16:ServiceConfigurationChange
此事件记录Sysmon配置中的更改-例如,更新过滤规则时。
事件ID 17:PipeEvent(已创建管道)
创建命名管道时,将生成此事件。恶意软件通常使用命名管道进行进程间通信。
事件ID 18:PipeEvent(已连接管道)
在客户端和服务器之间建立命名管道连接时,将记录此事件。
事件ID 19:WmiEvent(检测到WmiEventFilter活动)
注册WMI事件筛选器(恶意软件执行该方法)后,此事件将记录WMI名称空间,筛选器名称和筛选器表达式。
事件ID 20:WmiEvent(检测到WmiEventConsumer活动)
此事件记录WMI使用者的注册,记录使用者名称,日志和目的地。
事件ID 21:WmiEvent(检测到WmiEventConsumerToFilter活动)
当使用者绑定到过滤器时,此事件记录使用者名称和过滤器路径。
事件ID 22:DNSEvent(DNS查询)
当进程执行DNS查询时,无论结果是否成功,是否缓存,都会生成此事件。
事件ID 23:FileDelete(检测到文件删除)
文件已删除
事件ID 255:错误
Sysmon中发生错误时,将生成此事件。如果系统负载沉重,某些任务无法执行,或者Sysmon服务中存在错误,则可能发生这种情况。您可以在Sysinternals论坛或Twitter(@markrussinovich)上报告任何错误。
https://github.com/JPCERTCC/LogonTracer
LogonTracer 是一种通过可视化和分析 Windows Active Directory 事件日志来调查恶意登录的工具。此工具将主机名(或 IP 地址)和帐户名关联到与登录相关的事件中,并将其显示为图形。这样,就可以查看哪个帐户尝试以及使用了哪个主机。
借用官网的图

LogonTracer 示例
Windows cmd命令行同样存在命令历史,可以通过相关命令/操作进行查询,但是需要注意的是:
cmd命令历史只能在未关闭的cmd命令窗中进行查询,如果cmd窗口关闭,或未通过cmd命令窗进行的命令操作,是不会记录的
原理为每次新建cmd窗口时,进程会开辟一处缓冲区用来写入相关命令历史,如果关闭窗口,即会清空
未关闭的cmd窗口中输入:
doskey /? # 获取命令帮助
doskey /history # 获取当前cmd窗的命令历史

未关闭的cmd窗口中键入F7:

powershell 有两种历史记录的方式
参考 https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_history?view=powershell-7.4
内置会话记录
和 cmd 的历史记录一样,也是关掉窗口就没了
Get-History

还有三个简写命令,主打一个越来越简
history
ghy
h

PSReadLine
PSReadLine 在 PowerShell 控制台中提供改进的命令行编辑体验。 https://learn.microsoft.com/zh-cn/powershell/module/psreadline/about/about_psreadline?view=powershell-7.4
PSReadLine 维护一个历史记录文件,其中包含从命令行输入的所有命令和数据。 历史记录文件是一个名为 (host.Name)_history.txt 的文件。
在 Windows 系统上,历史记录文件存储在 $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine 中
在非 Windows 系统上,历史记录文件存储在 env:XDG_DATA_HOME/powershell/PSReadLine 或 env:HOME/.local/share/powershell/PSReadLine 中。

Windows Server 2016 中默认为
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine


默认情况下并不记录时间,无法像 Linux 那样通过配置环境变量的方法让已经记录的命令显示时间
经过测试,重启后不会删除记录
默认情况下 powershell 的日志中记录的信息不是很有帮助,这里就不展示了
cmd 没有类似于 bash 的配置文件,但是 powershell 是有的
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.4
powershell 配置文件的位置可以通过 powershell 变量 $PROFILE 的值来确定
powershell 中执行
$PROFILE | Select-Object *

AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
这些配置文件中都可以类似 Bash 配置文件一样,在其中放置后门程序
排查时记得查看不同用户的文件夹
具体情况可以查看 知识点附录 -> 0x11 PowerShell 配置文件实验
【 Windows Server 2016 】默认情况

AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

默认情况下都不存在这些文件
Win + r 输入 eventvwr
应用程序和服务日志 -> Windows Powershell

直接在 powershell 命令行输入
alias

【 Windows Server 2016 】默认情况

CommandType Name Version Source
----------- ---- ------- ------
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias asnp -> Add-PSSnapin
Alias cat -> Get-Content
Alias cd -> Set-Location
Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility
Alias chdir -> Set-Location
Alias clc -> Clear-Content
Alias clear -> Clear-Host
Alias clhy -> Clear-History
Alias cli -> Clear-Item
Alias clp -> Clear-ItemProperty
Alias cls -> Clear-Host
Alias clv -> Clear-Variable
Alias cnsn -> Connect-PSSession
Alias compare -> Compare-Object
Alias copy -> Copy-Item
Alias cp -> Copy-Item
Alias cpi -> Copy-Item
Alias cpp -> Copy-ItemProperty
Alias curl -> Invoke-WebRequest
Alias cvpa -> Convert-Path
Alias dbp -> Disable-PSBreakpoint
Alias del -> Remove-Item
Alias diff -> Compare-Object
Alias dir -> Get-ChildItem
Alias dnsn -> Disconnect-PSSession
Alias ebp -> Enable-PSBreakpoint
Alias echo -> Write-Output
Alias epal -> Export-Alias
Alias epcsv -> Export-Csv
Alias epsn -> Export-PSSession
Alias erase -> Remove-Item
Alias etsn -> Enter-PSSession
Alias exsn -> Exit-PSSession
Alias fc -> Format-Custom
Alias fhx -> Format-Hex 3.1.0.0 Microsoft.PowerShell.Utility
Alias fl -> Format-List
Alias foreach -> ForEach-Object
Alias ft -> Format-Table
Alias fw -> Format-Wide
Alias gal -> Get-Alias
Alias gbp -> Get-PSBreakpoint
Alias gc -> Get-Content
Alias gci -> Get-ChildItem
Alias gcm -> Get-Command
Alias gcs -> Get-PSCallStack
Alias gdr -> Get-PSDrive
Alias ghy -> Get-History
Alias gi -> Get-Item
Alias gjb -> Get-Job
Alias gl -> Get-Location
Alias gm -> Get-Member
Alias gmo -> Get-Module
Alias gp -> Get-ItemProperty
Alias gps -> Get-Process
Alias gpv -> Get-ItemPropertyValue
Alias group -> Group-Object
Alias gsn -> Get-PSSession
Alias gsnp -> Get-PSSnapin
Alias gsv -> Get-Service
Alias gu -> Get-Unique
Alias gv -> Get-Variable
Alias gwmi -> Get-WmiObject
Alias h -> Get-History
Alias history -> Get-History
Alias icm -> Invoke-Command
Alias iex -> Invoke-Expression
Alias ihy -> Invoke-History
Alias ii -> Invoke-Item
Alias ipal -> Import-Alias
Alias ipcsv -> Import-Csv
Alias ipmo -> Import-Module
Alias ipsn -> Import-PSSession
Alias irm -> Invoke-RestMethod
Alias ise -> powershell_ise.exe
Alias iwmi -> Invoke-WMIMethod
Alias iwr -> Invoke-WebRequest
Alias kill -> Stop-Process
Alias lp -> Out-Printer
Alias ls -> Get-ChildItem
Alias man -> help
Alias md -> mkdir
Alias measure -> Measure-Object
Alias mi -> Move-Item
Alias mount -> New-PSDrive
Alias move -> Move-Item
Alias mp -> Move-ItemProperty
Alias mv -> Move-Item
Alias nal -> New-Alias
Alias ndr -> New-PSDrive
Alias ni -> New-Item
Alias nmo -> New-Module
Alias npssc -> New-PSSessionConfigurationFile
Alias nsn -> New-PSSession
Alias nv -> New-Variable
Alias ogv -> Out-GridView
Alias oh -> Out-Host
Alias popd -> Pop-Location
Alias ps -> Get-Process
Alias pushd -> Push-Location
Alias pwd -> Get-Location
Alias r -> Invoke-History
Alias rbp -> Remove-PSBreakpoint
Alias rcjb -> Receive-Job
Alias rcsn -> Receive-PSSession
Alias rd -> Remove-Item
Alias rdr -> Remove-PSDrive
Alias ren -> Rename-Item
Alias ri -> Remove-Item
Alias rjb -> Remove-Job
Alias rm -> Remove-Item
Alias rmdir -> Remove-Item
Alias rmo -> Remove-Module
Alias rni -> Rename-Item
Alias rnp -> Rename-ItemProperty
Alias rp -> Remove-ItemProperty
Alias rsn -> Remove-PSSession
Alias rsnp -> Remove-PSSnapin
Alias rujb -> Resume-Job
Alias rv -> Remove-Variable
Alias rvpa -> Resolve-Path
Alias rwmi -> Remove-WMIObject
Alias sajb -> Start-Job
Alias sal -> Set-Alias
Alias saps -> Start-Process
Alias sasv -> Start-Service
Alias sbp -> Set-PSBreakpoint
Alias sc -> Set-Content
Alias select -> Select-Object
Alias set -> Set-Variable
Alias shcm -> Show-Command
Alias si -> Set-Item
Alias sl -> Set-Location
Alias sleep -> Start-Sleep
Alias sls -> Select-String
Alias sort -> Sort-Object
Alias sp -> Set-ItemProperty
Alias spjb -> Stop-Job
Alias spps -> Stop-Process
Alias spsv -> Stop-Service
Alias start -> Start-Process
Alias sujb -> Suspend-Job
Alias sv -> Set-Variable
Alias swmi -> Set-WMIInstance
Alias tee -> Tee-Object
Alias trcm -> Trace-Command
Alias type -> Get-Content
Alias wget -> Invoke-WebRequest
Alias where -> Where-Object
Alias wjb -> Wait-Job
Alias write -> Write-Output
Windows服务是在Microsoft Windows操作系统中运行的后台应用程序。服务是一种特殊类型的进程,它们被设计为在操作系统启动时自动启动,并在操作系统运行期间持续运行,即使用户没有登录到系统也是如此。这使得它们能够在系统背后执行各种任务,如网络通信、文件共享、打印管理、安全性等。
win + r 中输入:
services.msc # 打开“服务”面板

需要关注的点有:
服务描述是否为空,为空项需要重点查看关注下
服务名称是否有明显异常的,异常的需要关注一下

点击服务项后,右键选择属性 -> 常规
关注 可执行文件、启动参数、启动类型

启动类型有以下几种
自动(延迟启动)是介于自动启动和手动启动之间的一种选项。当一个服务被配置为自动(延迟启动)时,在系统启动时并不会立即启动该服务,而是会延迟一段时间后再启动。这个延迟时间是由操作系统进行动态调整的,以确保系统启动过程的平稳性和效率。
点击服务项后,右键选择属性 -> 恢复

这里定义了服务失败时触发的操作,如果设置的是运行一个程序,并且在图中运行程序处指定了非默认程序,则需要重点关注
点击服务项后,右键选择属性 -> 依存关系
可疑的服务需要关注依存关系,停止服务时可能需要将依存关系服务都需要停止,依存次服务的服务可能也是异常服务

sc.exe 是操作服务控制管理器的命令行程序,此处可以用来查询可疑服务的快捷操作,在cmd中输入:
sc # 直接列出参数列表
sc queryex # 列出所有服务的扩展状态,包含可执行文件路径、可执行文件参数等
sc qc "ServiceName" # 查询某项服务的配置信息
sc 如果想查询完整的所有信息似乎没有一个现成的指令,可以使用下面的 bat 来操作,设置服务名称
如果输出的文件中文乱码,尝试将第二行的 REM 去掉
@echo off
REM chcp 65001 > nul
setlocal
set "serviceName=ServiceName"
set "outputFile=service_info.txt"
REM 查询基本信息
echo === 基本信息 === >> %outputFile%
sc queryex %serviceName% >> %outputFile%
REM 查询详细信息
echo === 服务配置 === >> %outputFile%
sc qc %serviceName% >> %outputFile%
REM 查询描述信息
echo === 描述 === >> %outputFile%
sc qdescription %serviceName% >> %outputFile%
REM 查询故障恢复配置
echo === 故障恢复 === >> %outputFile%
sc qfailure %serviceName% >> %outputFile%
REM 查询触发器信息
echo === 触发器信息 === >> %outputFile%
sc qtriggerinfo %serviceName% >> %outputFile%
REM 查询安全描述
echo === 安全描述 === >> %outputFile%
sc sdshow %serviceName% >> %outputFile%
REM 查询服务SID
echo === 服务SID === >> %outputFile%
sc showsid %serviceName% >> %outputFile%
REM 打开输出文件
start notepad %outputFile%
endlocal

https://learn.microsoft.com/zh-cn/powershell/scripting/samples/managing-services?view=powershell-7.4
Get-Service
直接执行会显示所有的服务

这个信息可以用来对比被害系统是否有哪些默认不存在的服务
【 Windows Server 2016 】默认情况
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
Stopped Appinfo Application Information
Stopped AppMgmt Application Management
Stopped AppReadiness App Readiness
Stopped AppVClient Microsoft App-V Client
Stopped AppXSvc AppX Deployment Service (AppXSVC)
Stopped AudioEndpointBu... Windows Audio Endpoint Builder
Stopped Audiosrv Windows Audio
Stopped AxInstSV ActiveX Installer (AxInstSV)
Running BFE Base Filtering Engine
Stopped BITS Background Intelligent Transfer Ser...
Running BrokerInfrastru... Background Tasks Infrastructure Ser...
Stopped Browser Computer Browser
Stopped bthserv 蓝牙支持服务
Stopped CDPSvc 连接设备平台服务
Running CDPUserSvc_448e2 CDPUserSvc_448e2
Stopped CertPropSvc Certificate Propagation
Stopped ClipSVC Client License Service (ClipSVC)
Running COMSysApp COM+ System Application
Running CoreMessagingRe... CoreMessaging
Running CryptSvc Cryptographic Services
Stopped CscService Offline Files
Running DcomLaunch DCOM Server Process Launcher
Stopped DcpSvc DataCollectionPublishingService
Stopped defragsvc Optimize drives
Stopped DeviceAssociati... Device Association Service
Stopped DeviceInstall Device Install Service
Stopped DevQueryBroker DevQuery Background Discovery Broker
Running Dhcp DHCP Client
Stopped diagnosticshub.... Microsoft (R) 诊断中心标准收集器服务
Running DiagTrack Connected User Experiences and Tele...
Stopped DmEnrollmentSvc 设备管理注册服务
Stopped dmwappushservice dmwappushsvc
Running Dnscache DNS Client
Stopped dot3svc Wired AutoConfig
Running DPS Diagnostic Policy Service
Stopped DsmSvc Device Setup Manager
Stopped DsSvc Data Sharing Service
Stopped Eaphost Extensible Authentication Protocol
Stopped EFS Encrypting File System (EFS)
Stopped embeddedmode 嵌入模式
Stopped EntAppSvc Enterprise App Management Service
Running EventLog Windows Event Log
Running EventSystem COM+ Event System
Stopped fdPHost Function Discovery Provider Host
Stopped FDResPub Function Discovery Resource Publica...
Running FontCache Windows Font Cache Service
Stopped FrameServer Windows Camera Frame Server
Running gpsvc Group Policy Client
Stopped hidserv Human Interface Device Service
Stopped HvHost HV 主机服务
Stopped icssvc Windows 移动热点服务
Stopped IKEEXT IKE and AuthIP IPsec Keying Modules
Running iphlpsvc IP Helper
Running KeyIso CNG Key Isolation
Stopped KPSSVC KDC Proxy Server service (KPS)
Stopped KtmRm KtmRm for Distributed Transaction C...
Running LanmanServer Server
Running LanmanWorkstation Workstation
Stopped lfsvc Geolocation Service
Running LicenseManager Windows 许可证管理器服务
Stopped lltdsvc Link-Layer Topology Discovery Mapper
Running lmhosts TCP/IP NetBIOS Helper
Running LSM Local Session Manager
Stopped MapsBroker Downloaded Maps Manager
Running MpsSvc Windows Firewall
Running MSDTC Distributed Transaction Coordinator
Stopped MSiSCSI Microsoft iSCSI Initiator Service
Stopped msiserver Windows Installer
Stopped NcaSvc Network Connectivity Assistant
Running NcbService Network Connection Broker
Stopped Netlogon Netlogon
Stopped Netman Network Connections
Running netprofm Network List Service
Stopped NetSetupSvc Network Setup Service
Stopped NetTcpPortSharing Net.Tcp Port Sharing Service
Stopped NgcCtnrSvc Microsoft Passport Container
Stopped NgcSvc Microsoft Passport
Running NlaSvc Network Location Awareness
Running nsi Network Store Interface Service
Running OneSyncSvc_448e2 同步主机_448e2
Running Parallels Coher... Parallels Coherence Service
Running Parallels Tools... Parallels Tools Service
Running PcaSvc Program Compatibility Assistant Ser...
Stopped PerfHost Performance Counter DLL Host
Stopped PhoneSvc Phone Service
Stopped PimIndexMainten... Contact Data_448e2
Stopped pla Performance Logs & Alerts
Running PlugPlay Plug and Play
Stopped PolicyAgent IPsec Policy Agent
Running Power Power
Stopped PrintNotify Printer Extensions and Notifications
Running PrlVssProvider PrlVssProvider
Running ProfSvc User Profile Service
Stopped QWAVE Quality Windows Audio Video Experience
Stopped RasAuto Remote Access Auto Connection Manager
Stopped RasMan Remote Access Connection Manager
Stopped RemoteAccess Routing and Remote Access
Stopped RemoteRegistry Remote Registry
Stopped RmSvc 无线电管理服务
Running RpcEptMapper RPC Endpoint Mapper
Stopped RpcLocator Remote Procedure Call (RPC) Locator
Running RpcSs Remote Procedure Call (RPC)
Stopped RSoPProv Resultant Set of Policy Provider
Stopped sacsvr Special Administration Console Helper
Running SamSs Security Accounts Manager
Stopped SCardSvr Smart Card
Stopped ScDeviceEnum Smart Card Device Enumeration Service
Running Schedule Task Scheduler
Stopped SCPolicySvc Smart Card Removal Policy
Stopped seclogon Secondary Logon
Running SENS System Event Notification Service
Stopped SensorDataService Sensor Data Service
Stopped SensorService Sensor Service
Stopped SensrSvc Sensor Monitoring Service
Stopped SessionEnv Remote Desktop Configuration
Stopped SharedAccess Internet Connection Sharing (ICS)
Running ShellHWDetection Shell Hardware Detection
Stopped smphost Microsoft Storage Spaces SMP
Stopped SNMPTRAP SNMP Trap
Running Spooler Print Spooler
Stopped sppsvc Software Protection
Running SSDPSRV SSDP Discovery
Stopped SstpSvc Secure Socket Tunneling Protocol Se...
Running StateRepository State Repository Service
Stopped stisvc Windows Image Acquisition (WIA)
Running StorSvc Storage Service
Stopped svsvc Spot Verifier
Stopped swprv Microsoft Software Shadow Copy Prov...
Stopped SysMain Superfetch
Running SystemEventsBroker System Events Broker
Stopped TabletInputService Touch Keyboard and Handwriting Pane...
Stopped TapiSrv Telephony
Stopped TermService Remote Desktop Services
Running Themes Themes
Stopped TieringEngineSe... Storage Tiers Management
Running tiledatamodelsvc Tile Data model server
Running TimeBrokerSvc Time Broker
Running TrkWks Distributed Link Tracking Client
Stopped TrustedInstaller Windows Modules Installer
Stopped tzautoupdate 自动时区更新程序
Running UALSVC User Access Logging Service
Stopped UevAgentService User Experience Virtualization Service
Stopped UI0Detect Interactive Services Detection
Stopped UmRdpService Remote Desktop Services UserMode Po...
Stopped UnistoreSvc_448e2 User Data Storage_448e2
Stopped upnphost UPnP Device Host
Stopped UserDataSvc_448e2 User Data Access_448e2
Running UserManager User Manager
Stopped UsoSvc Update Orchestrator Service for Win...
Running VaultSvc Credential Manager
Stopped vds Virtual Disk
Stopped vmicguestinterface Hyper-V Guest Service Interface
Stopped vmicheartbeat Hyper-V Heartbeat Service
Stopped vmickvpexchange Hyper-V Data Exchange Service
Stopped vmicrdv Hyper-V 远程桌面虚拟化服务
Stopped vmicshutdown Hyper-V Guest Shutdown Service
Stopped vmictimesync Hyper-V Time Synchronization Service
Stopped vmicvmsession Hyper-V PowerShell Direct Service
Stopped vmicvss Hyper-V 卷影复制请求程序
Stopped VSS Volume Shadow Copy
Running W32Time Windows Time
Stopped WalletService WalletService
Stopped WbioSrvc Windows Biometric Service
Running Wcmsvc Windows Connection Manager
Stopped WdiServiceHost Diagnostic Service Host
Stopped WdiSystemHost Diagnostic System Host
Stopped WdNisSvc Windows Defender Network Inspection...
Stopped Wecsvc Windows Event Collector
Stopped WEPHOSTSVC Windows Encryption Provider Host Se...
Stopped wercplsupport Problem Reports and Solutions Contr...
Stopped WerSvc Windows Error Reporting Service
Stopped WiaRpc Still Image Acquisition Events
Running WinDefend Windows Defender Service
Running WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...
Running Winmgmt Windows Management Instrumentation
Running WinRM Windows Remote Management (WS-Manag...
Stopped wisvc Windows 预览体验服务
Stopped wlidsvc Microsoft Account Sign-in Assistant
Stopped wmiApSrv WMI Performance Adapter
Stopped WPDBusEnum Portable Device Enumerator Service
Running WpnService Windows 推送通知系统服务
Stopped WpnUserService_... Windows 推送通知用户服务_448e2
Stopped WSearch Windows Search
Running wuauserv Windows Update
Running wudfsvc Windows Driver Foundation - User-mo...
Stopped XblAuthManager Xbox Live 身份验证管理器
Stopped XblGameSave Xbox Live 游戏保存
powershell 查询起来就很容易进行筛选了,可以使用以下命令查看可以显示和筛选的项
Get-Service | Get-Member

选择显示的内容(以名称、执行命令行、显示名字、启动类型为例)
Get-Service | Select Name, ExecuteCommand, DisplayName, StartType

如果想以其中一项作为筛选条件,可以通过以下格式进行,以服务名称为例
Get-Service -Name "ServiceName"| Select Name, ExecuteCommand, DisplayName, StartType

经过测试,发现这个命令在 Windows Server 2016 上并不能获取到启动执行参数
所以这里写了两个脚本,获取所有服务的信息以及获取指定某个服务的信息
获取所有的服务信息
$services = Get-WmiObject -Class Win32_Service
foreach ($service in $services) {
$serviceName = $service.Name
$displayName = $service.DisplayName
$description = $service.Description
$binaryPath = $service.PathName
$startParameters = [System.IO.Path]::GetFileName($binaryPath) -replace '"', '' -split ' '
$startType = $service.StartMode
# $failureActions = $service.FailureActions
# $dependencies = $service.Dependencies
Write-Host "--------------------------"
Write-Host "服务名称:$serviceName"
Write-Host "显示名称:$displayName"
Write-Host "描述:$description"
Write-Host "可执行文件路径:$binaryPath"
Write-Host "启动类型:$startType"
Write-Host "启动参数:"
foreach ($parameter in $startParameters) {
Write-Host "- $parameter"
}
}

查询某个服务的信息
$serviceName = "ServiceName"
$service = Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'"
# $serviceName = $service.Name
$displayName = $service.DisplayName
$description = $service.Description
$binaryPath = $service.PathName
$startParameters = [System.IO.Path]::GetFileName($binaryPath) -replace '"', '' -split ' '
$startType = $service.StartMode
# $failureActions = $service.FailureActions
# $dependencies = $service.Dependencies
Write-Host "--------------------------"
Write-Host "服务名称:$serviceName"
Write-Host "显示名称:$displayName"
Write-Host "描述:$description"
Write-Host "可执行文件路径:$binaryPath"
Write-Host "启动类型:$startType"
Write-Host "启动参数:"
foreach ($parameter in $startParameters) {
Write-Host "- $parameter"
}

wmic service

这样会显示出所有服务的所有信息,比较乱套,尝试选择部分写入到 CSV 文件中
wmic service get Name, DisplayName, Description, PathName, StartMode, StartName /FORMAT:CSV > services.csv

是以逗号为分隔符号的 CSV 文件,使用 Excel 打开需要设定分隔符为逗号




第一行会出现空行,可以删除掉,这样方便筛选

如果只想查询某一项服务
wmic service where "Name='ServiceName'" get Name, DisplayName, Description, PathName, StartMode, StartName

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

这获取得多快你说
有几个注册表项可以设置服务在启动期间自动启动,默认在系统上并不存在
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
【 Windows Service 2016 】默认情况
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET CLR Data
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET CLR Networking
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET CLR Networking 4.0.0.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET Data Provider for Oracle
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET Data Provider for SqlServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET Memory Cache 4.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NETFramework
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1394ohci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\3ware
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ACPI
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AcpiDev
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\acpiex
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\acpipagr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AcpiPmi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\acpitime
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ADOVMPPackage
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ADP80XX
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\adsi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ahcache
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AJRouter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ALG
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AmdK8
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AmdPPM
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\amdsata
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\amdsbs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\amdxata
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppID
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppIDSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Appinfo
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\applockerfltr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppMgmt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppReadiness
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppVClient
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppvStrm
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppvVemgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppvVfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppXSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\arcsas
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AsyncMac
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AudioEndpointBuilder
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Audiosrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AxInstSV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\b06bdrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BasicDisplay
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BasicRender
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BattC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bcmfn
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bcmfn2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Beep
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bfadfcoei
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bfadi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BFE
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BITS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bowser
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BrokerInfrastructure
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bthserv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\buttonconverter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bxfcoe
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bxois
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CapImg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cdfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CDPSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CDPUserSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CDPUserSvc_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cdrom
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertPropSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cht4iscsi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cht4vbd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CLFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ClipSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\clreg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\clr_optimization_v4.0.30319_32
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\clr_optimization_v4.0.30319_64
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CmBatt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CNG
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cnghwassist
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CompositeBus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\COMSysApp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\condrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CoreMessagingRegistrar
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CoreUI
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\crypt32
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CryptSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CSC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CscService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dam
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DCLocator
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DcomLaunch
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DcpSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\defragsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DeviceAssociationService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DeviceInstall
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DevQueryBroker
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dfsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\diagnosticshub.standardcollector.service
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DiagTrack
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DmEnrollmentSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmvsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmwappushservice
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dot3svc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DPS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DsmSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DsSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DXGKrnl
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\e1iexpress
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eaphost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ebdrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EhStorClass
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EhStorTcgDrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\elxfcoe
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\elxstor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\embeddedmode
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EntAppSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ErrDev
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ESENT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventSystem
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\exfat
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fastfat
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fcvsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fdc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fdPHost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FDResPub
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FileCrypt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FileInfo
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Filetrace
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\flpydisk
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FltMgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FontCache
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FrameServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FsDepends
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Fs_Rec
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\gencounter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\genericusbfn
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\GPIOClx0101
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\gpsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\GpuEnergyDrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HDAudBus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidBatt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidBth
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hidinterrupt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hidserv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidUsb
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HomeGroupListener
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HpSAMD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HvHost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hvservice
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hwpolicy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HyperVideo
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaLPSSi_GPIO
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaLPSSi_I2C
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStorAV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStorV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ibbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\icssvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IKEEXT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IndirectKmd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\inetaccs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\intelide
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\intelpep
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\intelppm
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iorate
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IpFilterDriver
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iphlpsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPMIDRV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPNAT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPsecGW
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\isapnp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iScsiPrt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdclass
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kdnic
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KeyIso
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KPSSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KSecDD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KSecPkg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ksthunk
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KtmRm
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ldap
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lfsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LicenseManager
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lltdio
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lltdsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lmhosts
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lsa
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LSI_SAS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LSI_SAS2i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LSI_SAS3i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LSI_SSS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LSM
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\luafv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MapsBroker
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\megasas
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\megasas2i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\megasr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mlx4_bus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MMCSS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Modem
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mouclass
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mouhid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mountmgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mpsdrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MpsSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mrxsmb
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mrxsmb10
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mrxsmb20
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsBridge
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC Bridge 4.0.0.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Msfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msgpiowin32
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mshidkmdf
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mshidumdf
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msisadrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSiSCSI
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsLbfoProvider
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsLldp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsRPC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSCNTRS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mssmbios
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MTConfig
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mup
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mvumis
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\napagent
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NcaSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NcbService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ndfltr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NdisCap
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NdisImPlatform
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NdisTapi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ndisuio
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NdisVirtualBus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NdisWan
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ndiswanlegacy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ndproxy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBIOS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetbiosSmb
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netman
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netprofm
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetSetupSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetTcpPortSharing
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netvsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netvscvfpp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NgcCtnrSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NgcSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Npfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\npsvctrig
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsiproxy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Null
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nvraid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nvstor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OneSyncSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OneSyncSvc_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parallels Coherence Service
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parallels Tools Service
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\partmgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PcaSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pciide
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pcmcia
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pcw
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pdc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PEAUTH
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\percsas2i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\percsas3i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfDisk
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfHost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfNet
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfOS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PhoneSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PimIndexMaintenanceSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PimIndexMaintenanceSvc_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pla
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PlugPlay
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Power
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PptpMiniport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PrintNotify
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PrlVssProvider
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_boot
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_dd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_fs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_memdev
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_mouf
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_strg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\prl_tg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Processor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ProfSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Psched
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ql2300i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ql40xx2i
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\qlfcoei
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\QWAVE
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\QWAVEdrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasAcd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasAgileVpn
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasAuto
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasGre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rasl2tp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasPppoe
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasSstp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\rdbss
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RDMANDK
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\rdpbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RDPDR
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RDPNP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RDPUDD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RdpVideoMiniport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ReFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ReFSv1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RegFilter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteRegistry
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RmSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcEptMapper
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcLocator
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RSoPProv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\rspndr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\s3cap
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sacdrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sacsvr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SamSs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sbp2port
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SCardSvr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ScDeviceEnum
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\scfilter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\scmbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\scmdisk0101
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SCPolicySvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sdbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sdstor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\seclogon
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SENS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SensorDataService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SensorService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SensrSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SerCx
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SerCx2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serenum
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sermouse
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SessionEnv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sfloppy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ShellHWDetection
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SiSRaid2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SiSRaid4
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\smbdirect
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\smphost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SMSvcHost 4.0.0.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMPTRAP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\spaceport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SpbCx
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\spldr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srv2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srvnet
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SSDPSRV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SstpSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\StateRepository
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stexstor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stisvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storahci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storflt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storqosflt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\StorSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storufs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storvsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\svsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\swenum
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\swprv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Synth3dVsc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SysMain
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SystemEventsBroker
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TabletInputService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TapiSrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP6TUNNEL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpipreg
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIPTUNNEL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tdx
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\terminpt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TieringEngineService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tiledatamodelsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TimeBrokerSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TPM
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TrkWks
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TrustedInstaller
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSDDD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TsUsbFlt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TsUsbGD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tsusbhub
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tunnel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tzautoupdate
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UALSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UASPStor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UcmCx0101
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UcmTcpciCx0101
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UcmUcsi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ucx01000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UdeCx
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\udfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UEFI
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UevAgentDriver
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UevAgentService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ufx01000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UfxChipidea
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ufxsynopsys
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UGatherer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UGTHRSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UI0Detect
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\umbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UmPass
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UmRdpService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UnistoreSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UnistoreSvc_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\upnphost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UrsChipidea
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UrsCx01000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UrsSynopsys
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbccgp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbehci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbhub
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBHUB3
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbohci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbprint
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbser
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbuhci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBXHCI
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UserDataSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UserDataSvc_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UserManager
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VaultSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vdrvroot
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VerifierExt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vhdmp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vhf
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmbus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMBusHID
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmgid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicguestinterface
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicheartbeat
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmickvpexchange
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicrdv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicshutdown
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmictimesync
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicvmsession
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmicvss
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\volmgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\volmgrx
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\volsnap
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\volume
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vpci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vsmraid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSTXRAID
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vwifibus
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WacomPen
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WalletService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wanarp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wanarpv6
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WbioSrvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wcifs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wcmsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wcncsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wcnfs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdBoot
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wdf01000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdFilter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdiServiceHost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdiSystemHost
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisDrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wecsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WEPHOSTSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wercplsupport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WerSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WFPLWFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WiaRpc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WIMMount
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinDefend
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Windows Workflow Foundation 4.0.0.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WindowsTrustedRT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WindowsTrustedRTProxy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinHttpAutoProxySvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinMad
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Winmgmt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinNat
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinRM
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Winsock
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WINUSB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinVerbs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wisvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WlanSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wlidsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WmiAcpi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WmiApRpl
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wmiApSrv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Wof
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\workerdd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WPDBusEnum
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpdUpFltr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpnService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpnUserService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpnUserService_448e2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ws2ifsl
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WSearch
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WSearchIdxPi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WudfPf
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WUDFRd
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wudfsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XblAuthManager
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XblGameSave
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xboxgip
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xinputhid
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xmlprov
以 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XblGameSave 为例
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XblGameSave

每个服务的注册表项都可以包含一个子项 Performance 用于监控服务的执行,部分 Windows 系统存在关于此项的 1day
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NET CLR Data\Performance

排查思路就是把服务的所有注册表项中包含 Performance 子项的,获取 Library 键的值,验证文件签名
通过 powershell 来完成
# 定义函数来进行签名校验
function Verify-FileSignature {
param (
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Leaf})]
[string]$FilePath
)
if (Test-Path -Path $FilePath -PathType Leaf) {
$signature = Get-AuthenticodeSignature -FilePath $FilePath
if ($signature.Status -eq 'Valid') {
return "Valid"
} else {
return "Invalid"
}
} else {
return "File Not Found"
}
}
# 定义函数来检查注册表地址
function Check-RegistryPaths {
param (
[Parameter(Mandatory=$true)]
[string[]]$RegistryPaths
)
$invalidSignatures = @()
foreach ($registryPath in $RegistryPaths) {
if (Test-Path -Path $registryPath) {
$subkeys = Get-ChildItem -Path $registryPath
foreach ($subkey in $subkeys) {
$performancePath = Join-Path -Path $subkey.PSPath -ChildPath "Performance"
if (Test-Path -Path $performancePath) {
$libraryValue = (Get-ItemProperty -Path $performancePath -Name "Library" -ErrorAction SilentlyContinue)."Library"
if ($libraryValue) {
$binaryFilePath = $libraryValue.Trim().Trim('"')
$binaryFilePath = [Environment]::ExpandEnvironmentVariables($binaryFilePath)
if (Test-Path $binaryFilePath) {
$result = Verify-FileSignature -FilePath $binaryFilePath
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $binaryFilePath
}
Write-Host "Signature is invalid for file: $binaryFilePath" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $binaryFilePath " -ForegroundColor Green
}
} else {
$dllFileName = Split-Path -Leaf $binaryFilePath
$found = $false
$searchPaths = @(
(Join-Path -Path $env:SystemRoot -ChildPath $dllFileName),
(Join-Path -Path $env:SystemRoot -ChildPath "System32\$dllFileName")
)
foreach ($path in $searchPaths) {
if (Test-Path $path) {
$found = $true
$result = Verify-FileSignature -FilePath $path
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $path
}
Write-Host "Signature is invalid for file: $path" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $path " -ForegroundColor Green
}
break
}
}
if (-not $found) {
Write-Host "Could not find file '$dllFileName' in default search paths. Skipping signature verification." -ForegroundColor Yellow
}
}
} else {
Write-Host "Binary file path is empty for subkey $($subkey.PSChildName)." -ForegroundColor Yellow
}
}
}
}
}
# 打印不通过的签名验证信息
if ($invalidSignatures.Count -gt 0) {
Write-Output ""
Write-Output ""
Write-Output "--------------------------------------------------------"
Write-Host "Invalid signatures:" -ForegroundColor Red
foreach ($invalidSignature in $invalidSignatures) {
$registryPath = $invalidSignature.RegistryPath
$binaryFilePath = $invalidSignature.BinaryFilePath
Write-Host "Registry path: $registryPath" -ForegroundColor Yellow
Write-Host "Binary file path: $binaryFilePath" -ForegroundColor Yellow
Write-Output ""
}
Write-Output "--------------------------------------------------------"
}
}
# 要检查的注册表地址数组
$registryPaths = @(
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\"
)
# 调用函数进行检查
Write-Host "Starting signature verification..."
Check-RegistryPaths -RegistryPaths $registryPaths
Write-Host "Signature verification completed."

如果检测发现存在系统默认不存在的可执行文件或者 DLL ,需要与开发人员确认,并通过沙箱或者杀毒软件进行排查
【 Windows Server 2016 】默认情况

服务启动部分是由 Windows 直接启动的,还有一部分是通过 svchost.exe 启动的
svchost.exe 是一个通用的 Windows 进程,用于托管和执行多个系统服务。它负责启动和管理在计算机上运行的许多服务。
以下是 svchost.exe 启动服务的工作原理:
svchost.exe 根据注册表信息:当计算机启动时,操作系统读取注册表中的服务配置信息,并确定哪些服务需要由 svchost.exe 托管。svchost.exe 进程:根据注册表中的配置信息,操作系统创建一个或多个 svchost.exe 进程,并为每个进程分配一个唯一的服务组标识。svchost.exe 进程根据其服务组标识加载相应的 DLL(动态链接库),这些 DLL 包含了实际的服务代码和逻辑。svchost.exe 进程加载服务所需的 DLL 后,会启动和执行每个服务。每个服务在 svchost.exe 进程中以独立的线程运行。这么多服务要通过 svchost.exe 来启动,所以 svchost.exe 按照这些服务的特征将其进行了分组
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost

但是这里是不会直接记录组内成员的服务 DLL 的,这些 DLL 记录在哪里呢?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<servicename>\Parameters\
在每个服务以上注册表位置的 ServiceDll 键对应的值


Parametersv6 键,它并不是一个固定的键,而是一种命名约定。Parametersv6 是用于区分不同版本的参数键,特别是在区分适用于 IPv6 的参数与适用于 IPv4 的参数时。
经过搜索,Windows Server 2016 中所有的默认服务注册表项只有 Dhcp 包含 Parametersv6 ,所以就不做为查询特征了
所以这部分排查就是将所有服务注册表中包含 Parameters 子项的所有的 ServiceDll 中指定的可执行程序验证签名
还是通过 powershell 进行排查
# 定义函数来进行签名校验
function Verify-FileSignature {
param (
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Leaf})]
[string]$FilePath
)
if (Test-Path -Path $FilePath -PathType Leaf) {
$signature = Get-AuthenticodeSignature -FilePath $FilePath
if ($signature.Status -eq 'Valid') {
return "Valid"
} else {
return "Invalid"
}
} else {
return "File Not Found"
}
}
# 定义函数来检查注册表地址
function Check-RegistryPaths {
param (
[Parameter(Mandatory=$true)]
[string[]]$RegistryPaths
)
$invalidSignatures = @()
foreach ($registryPath in $RegistryPaths) {
if (Test-Path -Path $registryPath) {
$subkeys = Get-ChildItem -Path $registryPath
foreach ($subkey in $subkeys) {
$ParametersPath = Join-Path -Path $subkey.PSPath -ChildPath "Parameters"
if (Test-Path -Path $ParametersPath) {
$libraryValue = (Get-ItemProperty -Path $ParametersPath -Name "ServiceDll" -ErrorAction SilentlyContinue)."ServiceDll"
if ($libraryValue) {
$binaryFilePath = $libraryValue.Trim().Trim('"')
$binaryFilePath = [Environment]::ExpandEnvironmentVariables($binaryFilePath)
if (Test-Path $binaryFilePath) {
$result = Verify-FileSignature -FilePath $binaryFilePath
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $binaryFilePath
}
Write-Host "Signature is invalid for file: $binaryFilePath" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $binaryFilePath " -ForegroundColor Green
}
} else {
$dllFileName = Split-Path -Leaf $binaryFilePath
$found = $false
$searchPaths = @(
(Join-Path -Path $env:SystemRoot -ChildPath $dllFileName),
(Join-Path -Path $env:SystemRoot -ChildPath "System32\$dllFileName")
)
foreach ($path in $searchPaths) {
if (Test-Path $path) {
$found = $true
$result = Verify-FileSignature -FilePath $path
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $path
}
Write-Host "Signature is invalid for file: $path" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $path " -ForegroundColor Green
}
break
}
}
if (-not $found) {
Write-Host "Could not find file '$dllFileName' in default search paths. Skipping signature verification." -ForegroundColor Yellow
}
}
} else {
Write-Host "Binary file path is empty for subkey $($subkey.PSChildName)." -ForegroundColor Yellow
}
}
}
}
}
# 打印不通过的签名验证信息
if ($invalidSignatures.Count -gt 0) {
Write-Output ""
Write-Output ""
Write-Output "--------------------------------------------------------"
Write-Host "Invalid signatures:" -ForegroundColor Red
foreach ($invalidSignature in $invalidSignatures) {
$registryPath = $invalidSignature.RegistryPath
$binaryFilePath = $invalidSignature.BinaryFilePath
Write-Host "Registry path: $registryPath" -ForegroundColor Yellow
Write-Host "Binary file path: $binaryFilePath" -ForegroundColor Yellow
Write-Output ""
}
Write-Output "--------------------------------------------------------"
}
}
# 要检查的注册表地址数组
$registryPaths = @(
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\"
)
# 调用函数进行检查
Write-Host "Starting signature verification..."
Check-RegistryPaths -RegistryPaths $registryPaths
Write-Host "Signature verification completed."

如果检测发现存在系统默认不存在的可执行文件或者 DLL ,需要与开发人员确认,并通过沙箱或者杀毒软件进行排查
【 Windows Server 2016 】默认情况

https://systeminformer.sourceforge.io/ Process Hacker 的升级版


属性里可以看到服务的类型

按照执行方式和运行上下文进行分类,有以下几个常见的服务类型
而且可以看到 Permissions ,也就是权限

这里定义了服务的权限,网络上很多文章都是通过设置所有用户/用户组均不可以查询、更改服务,导致这些查询方法查询失败
Autoruns 是 SysinternalsSuite 套件中一款工具,可以很方便查看包括计划任务等启动项排查
https://learn.microsoft.com/zh-cn/sysinternals/downloads/sysinternals-suite

不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息



针对仅通过 SDDL 进行权限控制的方式隐藏的,可以执行以下 powershell 检查
$services = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | ForEach-Object { $_.PSChildName }
$maliciousServices = foreach ($service in $services) {
$queryOutput = sc.exe query $service 2>&1
if ($queryOutput -like "*拒绝访问*") {
$configOutput = sc.exe qc $service
[PSCustomObject]@{
ServiceName = $service
Status = "拒绝访问"
Config = $configOutput
}
}
}
if ($maliciousServices) {
Write-Host "发现以下恶意服务:"
$maliciousServices | Format-Table -AutoSize -Property ServiceName, Status
foreach ($service in $maliciousServices) {
Write-Host "--------------------------------------------------"
Write-Host "Service Name: $($service.ServiceName)"
Write-Host "Status: $($service.Status)"
Write-Host "Service Config:"
$configLines = $service.Config -split "`n"
$configLines | ForEach-Object {
$configLine = $_.Trim()
if ($configLine -ne "" -and $configLine -notlike "[*]*") {
Write-Host $configLine
}
}
Write-Host "--------------------------------------------------"
}
} else {
Write-Host "未发现恶意服务."
}
在此基础上删除了注册表的隐藏任务主要通过日志进行排查

详细的排查与处置可以查看 知识点附录 -> 0x12 服务隐藏与排查
排查所有的服务的启动文件签名情况,部分攻击者可能利用权限配置的不合理,通过替换服务启动的应用程序进行提权或者权限维持
$services = Get-WmiObject -Class Win32_Service | Where-Object { $_.PathName -ne $null }
foreach ($service in $services) {
$executablePath = $service.PathName
if ($executablePath.StartsWith('"')) {
$executablePath = $executablePath.Split('"')[1]
} else {
$executablePath = $executablePath.Split(' ')[0]
}
if ($executablePath -ne $null) {
$fileInfo = Get-Item -LiteralPath $executablePath
$signatureStatus = Get-AuthenticodeSignature -FilePath $executablePath | Select-Object -ExpandProperty Status
if ($signatureStatus -ne 'Valid') {
Write-Host "---------------------------------------"
Write-Host "Service Name: $($service.Name)"
Write-Host "Executable Path: $executablePath"
Write-Host "Signature Status: $signatureStatus"
Write-Host ""
}
}
}

【 Windows Server 2016 】默认情况

所有本机连接过的远程桌面RDP,都会在注册表内记录,所以可以通过注册表进行排查RDP信息:
//注册表具体路径
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers
//命令查询,相关注册表内会包含登陆账号信息
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" && reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"

同时RDP还会存在Default.rdp文件,是最后一次连接的信息,双击打开即可看到
C:\Users\{username}\Documents\Default.rdp


也可以直接打开 mstsc

直接查看
Windows Server 2016 默认并不会记录全所有的 RDP 连接其他服务器的信息,每台服务器只会记录最后一次登录的账户信息
在安全模式下 DLL 搜索顺序如下
API setsSxS manifest redirectionLoaded-module listKnown DLLsC:\Windows\System32) 使用 GetSystemDirectoryA 函数检索此文件夹的路径C:\Windows\System) 没有获取此文件夹路径的函数,但会对其进行搜索C:\Windows) 使用 GetWindowsDirectoryA 函数获取此文件夹的路径PATH 目录这里要说两个
Loaded-module list 系统可以检查是否已将具有相同模块名称的 DLL 加载到内存加载的Known DLLs 如果 DLL 位于运行应用程序的 Windows 版本的已知 DLL 列表中,则系统会使用其已知 DLL参考文章 https://learn.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order
DLL 排查其实分散在常规安全检查的各种部分
系统已经存在的进程是否已经被 DLL 劫持不是很容易检测,建议可以使用安全防护软件进行全盘扫描检测
本部分主要从以下两个角度
DLL 劫持经常使用的注册表是否被修改DLL 劫持漏洞DLL 劫持经常使用的方式是根据 DLL 加载顺序进行劫持,这里涉及一个很重要的注册表项
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
当SafeDllSearchMode的值为0或未设置时,系统采用默认的搜索策略,即先在应用程序所在目录搜索 DLL 文件,然后在系统目录(如C:\Windows\System32)和系统路径(如PATH环境变量所指定的路径)中搜索。
然而,当SafeDllSearchMode的值为1时,系统将启用安全的 DLL 搜索模式。在安全模式下,系统会忽略应用程序所在目录,只在系统目录和系统路径中搜索 DLL 文件。这种行为旨在防止恶意 DLL 文件的劫持和欺骗。
参考文章 https://www.cnblogs.com/bmjoker/p/11031238.html
【 Windows Server 2016 】默认情况

Windows Server 2016 默认没有这个注册表项了
可以通过 rattler 检查某个程序是否存在 DLL 劫持漏洞
https://github.com/sensepost/rattler


这里需要注意,检测过程中会启动被检测的应用程序,请在隔离的虚拟机里测试
DLL注入涉及的注册表项是AppInit_DLLs。它是一个注册表键值,AppInit_DLLs 注册表项的作用是指示操作系统在每个用户登录时加载指定的 DLL 文件
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows中 Appinit_Dlls 的值
【 Windows Server 2016 】默认情况

AppInit_DLLs键的值是空的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
这个注册表用于指定系统已知的DLL文件列表。
在该注册表项中,每个子项对应一个已知的DLL文件,并且以DLL文件的名称作为子项的名称。例如,如果有一个名为 kernel32.dll 的子项,那么该子项指示系统已知并信任 kernel32.dll 这个DLL文件。
该注册表项的目的是为了提高系统的安全性。当应用程序需要加载一个DLL文件时,系统会首先检查该DLL文件是否在 KnownDLLs 注册表项中。如果是,系统将直接从指定的位置加载该DLL文件,而不会去搜索路径或其他目录。

也可以通过 Autoruns 进行查看

【 Windows Server 2016 】默认情况

右键导出为 reg 结果如下
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs]
"_Wow64"="Wow64.dll"
"_Wow64cpu"="Wow64cpu.dll"
"_Wow64win"="Wow64win.dll"
"advapi32"="advapi32.dll"
"clbcatq"="clbcatq.dll"
"combase"="combase.dll"
"COMDLG32"="COMDLG32.dll"
"coml2"="coml2.dll"
"DifxApi"="difxapi.dll"
"gdi32"="gdi32.dll"
"gdiplus"="gdiplus.dll"
"IMAGEHLP"="IMAGEHLP.dll"
"IMM32"="IMM32.dll"
"kernel32"="kernel32.dll"
"LPK"="LPK.dll"
"MSCTF"="MSCTF.dll"
"MSVCRT"="MSVCRT.dll"
"NORMALIZ"="NORMALIZ.dll"
"NSI"="NSI.dll"
"ole32"="ole32.dll"
"OLEAUT32"="OLEAUT32.dll"
"PSAPI"="PSAPI.DLL"
"rpcrt4"="rpcrt4.dll"
"sechost"="sechost.dll"
"Setupapi"="Setupapi.dll"
"SHELL32"="SHELL32.dll"
"SHLWAPI"="SHLWAPI.dll"
"user32"="user32.dll"
"WLDAP32"="WLDAP32.dll"
"WS2_32"="WS2_32.dll"
应急响应过程中可以看看是否有缺少的

WMI 主要是创建 WMI 事件订阅实现持续控制,通常事件订阅是临时性的,会话结束后就会停止,WMI永久事件订阅,可以创建长期有效的订阅,即使订阅会话已经结束,订阅仍然持续存在。
WMI 事件订阅中有三个角色
这听起来很像是 if...then 或者说信号与槽
攻击者通过事件过滤器定义要监听的操作,之后再定义监听到操作后要执行的动作,最后将两者绑定起来
排查思路就是找出当前系统所有命名空间的过滤器、消费者、绑定
经过测试发现,\root\subscription 和 \root\DEFAULT 两个命名空间均可以实现事件订阅后门,这在很多文章中并未提及,大家需要额外注意
部分文章指出 Autoruns 删除 WMI 后门效果不好,这不严谨,详情可以看后续部分
查询过滤器
wmic /namespace:"\\root\subscription" path __EventFilter get *
wmic /namespace:"\\root\DEFAULT" path __EventFilter get *

查询消费者
wmic /namespace:"\\root\subscription" path __EventConsumer get *
wmic /namespace:"\\root\DEFAULT" path __EventConsumer get *

查询绑定
wmic /namespace:"\\root\subscription" path __FilterToConsumerBinding get *
wmic /namespace:"\\root\DEFAULT" path __FilterToConsumerBinding get *

wmic 显示的内容实在是格式比较差,推荐使用 powershell 来调用 WMI 相关的模块进行查询,wmic 作为辅助
【 Windows Server 2016 】默认情况
\root\subscription
过滤器

消费者

绑定

\root\DEFAULT
过滤器

消费者

绑定

查询过滤器
Get-WmiObject -Namespace "root\subscription" -Query "SELECT * FROM __EventFilter"
Get-WmiObject -Namespace "root\DEFAULT" -Query "SELECT * FROM __EventFilter"

查询消费者
Get-WmiObject -Namespace "root\subscription" -Query "SELECT * FROM __EventConsumer"
Get-WmiObject -Namespace "root\DEFAULT" -Query "SELECT * FROM __EventConsumer"

查询绑定
Get-WmiObject -Namespace "root\subscription" -Class "__FilterToConsumerBinding"
Get-WmiObject -Namespace "root\DEFAULT" -Query "SELECT * FROM __EventConsumer"

当然,我给大家准备了脚本一键查询
$namespaces = @("root\subscription", "root\DEFAULT")
foreach ($nameSpace in $namespaces) {
$filterInstances = Get-WmiObject -Namespace "$nameSpace" -Query "SELECT * FROM __EventFilter"
$consumerInstances = Get-WmiObject -Namespace "$nameSpace" -Query "SELECT * FROM __EventConsumer"
$bindings = Get-WmiObject -Namespace "$nameSpace" -Class "__FilterToConsumerBinding"
Write-Host "【 NameSpace: $nameSpace 】"
Write-Host "-------------------------"
Write-Host "Event Filters:"
Write-Host "-----------------"
foreach ($filter in $filterInstances) {
$filterName = $filter.Name
$filterQuery = $filter.Query
Write-Host "Filter Name: $filterName"
Write-Host "Query: $filterQuery"
Write-Host ""
}
Write-Host "Event Consumers:"
Write-Host "-----------------"
foreach ($consumer in $consumerInstances) {
$consumerName = $consumer.Name
$consumerCommandLine = $consumer.CommandLineTemplate
$consumerTemplate = $consumer.ExecutablePath
Write-Host "Consumer Name: $consumerName"
Write-Host "Command Line: $consumerCommandLine"
Write-Host "Template: $consumerTemplate"
Write-Host ""
}
Write-Host "Bindings:"
Write-Host "-----------------"
foreach ($binding in $bindings) {
$filterPath = $binding.Filter
$consumerPath = $binding.Consumer
$filter = $filterInstances | Where-Object { $_.__RELPATH -eq $filterPath }
$consumer = $consumerInstances | Where-Object { $_.__RELPATH -eq $consumerPath }
if ($filter -and $consumer) {
$filterName = $filter.Name
$consumerName = $consumer.Name
Write-Host "Binding: "
Write-Host "Filter Name: $filterName"
Write-Host "Consumer Name: $consumerName"
Write-Host ""
}
}
}

【 Windows Server 2016 】默认情况
过滤器

消费者

绑定

脚本执行情况

Autoruns 是由 Sysinternals(微软的一部分)提供的免费工具,它可以显示 Windows 启动时加载的所有程序、服务、驱动程序和其他自启动项。您可以从 Microsoft 官网下载并使用它。
https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns

Autoruns 默认会监控上面提到的两个命名空间的绑定(binding)信息,可以右键进行删除
这里以 \root\subscription 命名空间为例
删除过滤器
wmic /NAMESPACE:"\\root\subscription" path __EventFilter where Name="FilterName" delete

删除消费者
wmic /NAMESPACE:"\\root\subscription" path CommandLineEventConsumer where Name="ConsumerName" delete

删除绑定
wmic /NAMESPACE:"\\root\subscription" path __FilterToConsumerBinding where Filter="__EventFilter.Name='FilterName'" delete

删除过滤器
Get-WmiObject -Namespace "root\subscription" -Class "__EventFilter" | Where-Object {$_.Name -eq "FilterName"} | ForEach-Object { $_.Delete() }

删除消费者
Get-WmiObject -Namespace "root\subscription" -Class "CommandLineEventConsumer" | Where-Object {$_.Name -eq "ConsumerName"} | ForEach-Object { $_.Delete() }

删除绑定
Get-WmiObject -Namespace "root\subscription" -Class "__FilterToConsumerBinding" | Where-Object {$_.Filter -eq "__EventFilter.Name='FilterName'"} | ForEach-Object { $_.Delete() }


部分文章指出 Autoruns 删除 WMI 效果不好,其实这种表述是不严谨的
Autoruns 删除并不是将过滤器、消费者、绑定都删除,而是只删除消费者,经过测试发现,过滤器、消费者、绑定三者之一任何一个删除 WMI 事件订阅效果都会立即消失
所以 Autoruns 删除消费者是有效的,而且是一种相对合理的方式,因为如何直接将三者均删掉,可能过滤器和绑定原本就是运维人员需要的,只是消费者被篡改了,这样可以保护过滤器和绑定
所以应急响应过程中,确定好三者,不要着急删除
这部分不是常规的检查,属于是比较严谨的检查,可以根据实际情况考虑是否排查
主要排查以下内容
WMI 命名空间WMI 命名空间中包含 CommandLineEventConsumer 类WMI 中存在的过滤器、消费者、绑定WMI 命名空间Get-CimInstance -ClassName __Namespace -Namespace "root" | Select-Object Name

【 Windows Server 2016 】默认情况

subscription
DEFAULT
CIMV2
msdtc
Cli
SECURITY
SecurityCenter2
RSOP
PEH
StandardCimv2
WMI
AccessLogging
directory
Policy
InventoryLogging
Interop
Hardware
ServiceModel
Microsoft
Appv
CommandLineEventConsumer 类的命名空间$namespaces = Get-WmiObject -Namespace "root" -Class "__NAMESPACE"
foreach ($namespace in $namespaces) {
$namespaceName = $namespace.Name
$query = "SELECT * FROM meta_class WHERE __class = 'CommandLineEventConsumer'"
$commandLineConsumerClass = Get-WmiObject -Namespace "root\$namespaceName" -Query $query
if ($commandLineConsumerClass) {
Write-Host "Namespace: $namespaceName"
}
}

包含 CommandLineEventConsumer 类的命名空间可以以执行命令的方式响应过滤器,如果存在非默认的命名空间,那就需要注意一下
我通过新建包含
CommandLineEventConsumer类的命名空间测试事件订阅后门,但是无法详细了解 subscription 命名空间的情况,没有执行成功,但这并不意味着攻击者也不会成功,所以如果你发现了,检查一下总是好的
【 Windows Server 2016 】默认情况

subscription
DEFAULT
WMI 中存在的过滤器、消费者、绑定$namespaces = Get-WmiObject -Namespace "root" -Class "__NAMESPACE"
foreach ($namespace in $namespaces) {
$namespaceName = $namespace.Name
$filterInstances = Get-WmiObject -Namespace "root\$namespaceName" -Query "SELECT * FROM __EventFilter"
$consumerInstances = Get-WmiObject -Namespace "root\$namespaceName" -Query "SELECT * FROM __EventConsumer"
$bindings = Get-WmiObject -Namespace "root\$namespaceName" -Class "__FilterToConsumerBinding"
Write-Host "【 Namespace: $namespaceName 】"
Write-Host "-------------------------"
Write-Host "Event Filters:"
Write-Host "-----------------"
foreach ($filter in $filterInstances) {
$filterName = $filter.Name
Write-Host "Filter Name: $filterName"
}
Write-Host "Event Consumers:"
Write-Host "-----------------"
foreach ($consumer in $consumerInstances) {
$consumerName = $consumer.Name
Write-Host "Consumer Name: $consumerName"
}
Write-Host "Bindings:"
Write-Host "-----------------"
foreach ($binding in $bindings) {
$filterPath = $binding.Filter
$consumerPath = $binding.Consumer
$filter = $filterInstances | Where-Object { $_.__RELPATH -eq $filterPath }
$consumer = $consumerInstances | Where-Object { $_.__RELPATH -eq $consumerPath }
if ($filter -and $consumer) {
$filterName = $filter.Name
$consumerName = $consumer.Name
Write-Host "Binding:"
Write-Host "Filter Name: $filterName"
Write-Host "Consumer Name: $consumerName"
}
}
Write-Host ""
}

【 Windows Server 2016 】默认情况
【 Namespace: subscription 】
-------------------------
Event Filters:
-----------------
Filter Name: SCM Event Log Filter
Event Consumers:
-----------------
Consumer Name: SCM Event Log Consumer
Bindings:
-----------------
Binding:
Filter Name: SCM Event Log Filter
Consumer Name: SCM Event Log Consumer
剩下都是空的
是windows下用户打开的文档历史文件记录
win + r 输入 Recent


这一般用户确定某个用户已经失陷,之后切到该用户后排查的项
echo %TMP%
echo %TEMP%
每个用户都有临时目录,通常为 C:\Users\<Username>\AppData\Local\Temp

C:\Windows\Temp
每个本地硬盘分区都有一个隐藏的系统文件夹用于存储该分区删除的文件。回收站的实际物理路径通常是:
C:$/$Recycle.Bin
如何进入该目录呢?
cd /d %SystemDrive%\$Recycle.Bin

经过测试,默认情况下如果用户被删除,其家目录是不会被删除的,可以通过对比用户家目录和用户,查看是否存在异常

也就是公用目录,如上图所示
C:\Users\Public

web 目录具体位置就取决于使用的 web 服务器的配置了可以考虑使用 webshell 检测工具和杀毒软件进行检测
sigverif
sigverif 是一个用于验证 Windows 系统文件签名的命令行工具。它可以检查系统文件是否被篡改或损坏,以确保系统的完整性和安全性。
sigverif 命令可以检查所有系统文件,包括驱动程序、系统组件、应用程序等。它通过比较系统文件的哈希值与已知的正确哈希值来验证文件的完整性。如果文件的哈希值与已知的正确哈希值匹配,则文件未被篡改;如果不匹配,则文件可能已被篡改或损坏。



如果想看详细的内容,可以点击高级,去日志中查看


bitsadmin /list /allusers /verbose
列出所有任务
Windows Server 2016 中提示 bitsadmin 已经被弃用了,现在都通过 powershell 来管理 bits 服务
Get-BitsTransfer

如果发现存在攻击者留下的 Job ,可以使用下面的命令删除
Remove-BitsTransfer -BitsJob <BitsJob>
浏览器排查主要有三个方面
这里还是以自带的 ie 浏览器为例,Chrome、Edge、Firefox 大家肯定都会检查









HKEY_CURRENT_USER\Control Panel\Desktop
SCRNSAVE.exe 设置为恶意 PE 路径ScreenSaveActive- 设置为“1”以启用屏幕保护程序ScreenSaverIsSecure- 设置为“0”无需密码即可解锁ScreenSaveTimeout- 在执行屏幕保护程序之前设置用户不活动超时在 Windows Server 2016 中,默认没有 SCRNSAVE.exe,如果检查过程中发现该项,可以重点关注
【 Windows Server 2016 】默认情况

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh

【 Windows Server 2016 】 默认情况

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh
2 REG_SZ ifmon.dll
4 REG_SZ rasmontr.dll
authfwcfg REG_SZ authfwcfg.dll
dhcpclient REG_SZ dhcpcmonitor.dll
dot3cfg REG_SZ dot3cfg.dll
fwcfg REG_SZ fwcfg.dll
hnetmon REG_SZ hnetmon.dll
netiohlp REG_SZ netiohlp.dll
nettrace REG_SZ nettrace.dll
nshhttp REG_SZ nshhttp.dll
nshipsec REG_SZ nshipsec.dll
nshwfp REG_SZ nshwfp.dll
peerdistsh REG_SZ peerdistsh.dll
rpc REG_SZ rpcnsh.dll
whhelper REG_SZ whhelper.dll
wshelper REG_SZ wshelper.dll
比较经典的是替换粘滞键,未登录情况下通过连按 5 下 shift 进行获取shell
C:\Windows\System32\sethc.exe可以通过沙箱或者签名进行验证,这里需要注意: cmd.exe 这种程序也是有微软签名的,不能仅用签名进行验证
签名验证可以参考知识点附录 -> 如何验证程序签名
AppCert DLLs是一个Windows注册表项,通常用于控制应用程序的证书验证。当有进程使用了CreateProcess、CreateProcessAsUser、CreateProcessWithLoginW、CreateProcessWithTokenW或WinExec等函数时,这些进程会获取HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\AppCertDlls注册表项,此项下的dll都会加载到此进程。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\AppCertDlls
存在后门时可能是这个样子

img
图片来源 https://blog.csdn.net/qq_36374896/article/details/107005578
【 Windows Server 2016 】默认情况

Windows Server 2016 中默认没有这个注册表项
AppInit DLL(Application Initialization DLL)是一种在Windows操作系统中使用的动态链接库(DLL)。它的作用是在应用程序加载时,可以用于执行自定义的初始化和配置操作。
下面是AppInit DLL的一些常见用途和功能:
因此,AppInit DLL 用来设置后门非常合适,注册表位置如下
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows

也可以通过 Autoruns 进行查看

【 Windows Server 2016 】默认情况


默认情况下存在该键,两个位置都是空的
这是一种在Windows操作系统中使用的兼容性技术,旨在解决应用程序在不同操作系统版本上的兼容性问题。Application Shimming 的原理是在应用程序执行时,通过注入特定的代码或修改应用程序的行为,来实现兼容性修复或功能增强。这些修改通常是通过Shim引擎来实现的,Shim引擎会拦截和修改应用程序的API调用。
攻击者可能会利用Application Shimming 来创建后门的原因包括:
默认 Windows 安装程序 (sdbinst.exe) 当前安装的所有填充码的列表保存在:
%WINDIR%\AppPatch\sysmain.sdbHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags

自定义数据库存储在:
%WINDIR%\AppPatch\custom & %WINDIR%\AppPatch\AppPatch64\CustomHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom


缓存位置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache

这里都是二进制数据,虽然能看到字符,建议只用来做参考
【 Windows Server 2016 】默认情况
默认


自定义


Image File Execution Options (IFEO) 是一个 Windows 调试功能,而不是一个后门。IFEO 的主要目的是允许开发人员调试和跟踪特定的可执行文件。
IFEO 提供了一种机制,使开发人员能够将一个调试器程序关联到特定的可执行文件,并在执行该可执行文件时启动调试器。这对于开发、调试和分析应用程序非常有用。
当给定的可执行文件被启动时,操作系统会检查注册表中的 IFEO 设置。如果找到了对应的注册表项,系统会自动启动所配置的调试器程序,并将目标可执行文件作为参数传递给调试器。这样,开发人员就可以使用调试器来监视和分析目标应用程序的运行过程,以便调试和解决问题。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

红框中就是可以被调试的程序,如果在这些项某个项,例如iexplore.exe 中新增一对键值,键的名字为 debugger ,值为要执行的程序,例如 calc.exe,就会在启动 iexplorer.exe 的时候启动计算器
这里需要注意,设置后点击ie浏览器并不会启动ie ,而是只启动调试器,也就是这里的计算器
当然了,聪明的攻击者肯定会在 Payload 中启动原程序,以达到隐藏的目录
这么老多目录,还是通过 powershell 来完成吧
$registryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"
$subKeys = Get-ChildItem -Path $registryPath
$debuggerItems = @()
foreach ($subKey in $subKeys) {
$keyName = $subKey.PSChildName
$keyValues = Get-ItemProperty -Path "$registryPath\$keyName"
foreach ($entry in $keyValues.PSObject.Properties) {
$entryName = $entry.Name
$entryValue = $entry.Value
if ($entryName -eq 'debugger') {
$debuggerItems += @{
Subkey = $keyName
Key = $entryName
Value = $entryValue
}
}
}
}
if ($debuggerItems.Count -gt 0) {
Write-Host "Debuggers found:"
Write-Host "----------------"
foreach ($item in $debuggerItems) {
Write-Host "Subkey: $($item.Subkey)"
Write-Host "Key : $($item.Key)"
Write-Host "Value : $($item.Value)"
Write-Host "----------------"
}
}
else {
Write-Host "No debuggers found."
}

【 Windows Server 2016 】默认情况

COM(Component Object Model)是一种微软公司开发的软件组件技术,用于在Windows操作系统中实现软件组件之间的通信和交互。COM 提供了一种标准的、可扩展的机制,使不同的应用程序能够通过接口进行相互通信和调用。
COM 的主要功能包括:
COM 劫持与 DLL 劫持原理差不多,都是在文件寻找过程上下文章,默认情况下也是不太好检查,可以想象一下,无非就是一下几种情况
通常是通过注册表找到具体要读取的文件,查找注册表顺序如下
HKEY_CURRENT_USER\Software\Classes\CLSIDHKEY_CLASSES_ROOT\CLSIDHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects\参考文章 https://paper.seebug.org/2030/
我们以计算器为例,通过 Process Monitor 查看进程加载文件和注册表等信息

这里可以看到,加载 COM 组件时先是去查找了下面的注册表位置,结果没找到
HKCU\Software\Classes\CLSID\{7ED96837-96F0-4812-B211-F13C24117ED3}\Instance
之后又去下面的位置进行寻找
HKCR\CLSID\{7ED96837-96F0-4812-B211-F13C24117ED3}\Instance
结果找到了
如果攻击者在 HKCU\Software\Classes\CLSID\{7ED96837-96F0-4812-B211-F13C24117ED3}\Instance 放置一个同名的组件,实现了原本的功能,还加入了恶意代码,此时就会造成 COM 劫持
我们首先要进行的检查就是 HKCU\Software\Classes\CLSID\ 下所有的 COM 组件
这些注册表项中的子项 InprocServer32 是我们要关注的,它指定了COM组件的DLL文件路径。

【 Windows Server 2016 】默认情况

默认情况下 HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID 是空的
如果排查过程中发现存在相关设置,可以重点关注,通过验证签名,病毒扫描等方式进行检查
如果攻击者比较变态,直接替换了文件或者向文件中注入了恶意代码,而不是劫持加载顺序,那么上面的排查就不会发现了,我们尝试将验证所有的 COM 组件的 DLL 签名
当然了,还是用 powershell 来实现
# 定义函数来进行签名校验
function Verify-FileSignature {
param (
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Leaf})]
[string]$FilePath
)
if (Test-Path -Path $FilePath -PathType Leaf) {
$signature = Get-AuthenticodeSignature -FilePath $FilePath
if ($signature.Status -eq 'Valid') {
return "Valid"
} else {
return "Invalid"
}
} else {
return "File Not Found"
}
}
# 定义函数来检查注册表地址
function Check-RegistryPaths {
param (
[Parameter(Mandatory=$true)]
[string[]]$RegistryPaths
)
$invalidSignatures = @()
foreach ($registryPath in $RegistryPaths) {
if (Test-Path -Path $registryPath) {
$subkeys = Get-ChildItem -Path $registryPath
foreach ($subkey in $subkeys) {
$inprocServer32Path = Join-Path -Path $subkey.PSPath -ChildPath "InprocServer32"
if (Test-Path -Path $inprocServer32Path) {
$defaultPropertyValue = (Get-ItemProperty -Path $inprocServer32Path -Name "(default)" -ErrorAction SilentlyContinue)."(default)"
if ($defaultPropertyValue) {
# 此处加 Trim('"') 是为了防止类似于 Defender 这种“有个性”的软件胡乱设置注册表
$binaryFilePath = $defaultPropertyValue.Trim().Trim('"')
$binaryFilePath = [Environment]::ExpandEnvironmentVariables($binaryFilePath)
if (Test-Path $binaryFilePath) {
$result = Verify-FileSignature -FilePath $binaryFilePath
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $binaryFilePath
}
Write-Host "Signature is invalid for file: $binaryFilePath" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $binaryFilePath " -ForegroundColor Green
}
} else {
$dllFileName = Split-Path -Leaf $binaryFilePath
$found = $false
$searchPaths = @(
(Join-Path -Path $env:SystemRoot -ChildPath $dllFileName),
(Join-Path -Path $env:SystemRoot -ChildPath "System32\$dllFileName")
)
foreach ($path in $searchPaths) {
if (Test-Path $path) {
$found = $true
$result = Verify-FileSignature -FilePath $path
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $path
}
Write-Host "Signature is invalid for file: $path" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $path " -ForegroundColor Green
}
break
}
}
if (-not $found) {
Write-Host "Could not find file '$dllFileName' in default search paths. Skipping signature verification." -ForegroundColor Yellow
}
}
} else {
Write-Host "Binary file path is empty for subkey $($subkey.PSChildName)." -ForegroundColor Yellow
}
}
}
}
}
# 打印不通过的签名验证信息
if ($invalidSignatures.Count -gt 0) {
Write-Output ""
Write-Output ""
Write-Output "--------------------------------------------------------"
Write-Host "Invalid signatures:" -ForegroundColor Red
foreach ($invalidSignature in $invalidSignatures) {
$registryPath = $invalidSignature.RegistryPath
$binaryFilePath = $invalidSignature.BinaryFilePath
Write-Host "Registry path: $registryPath" -ForegroundColor Yellow
Write-Host "Binary file path: $binaryFilePath" -ForegroundColor Yellow
Write-Output ""
}
Write-Output "--------------------------------------------------------"
}
}
# 要检查的注册表地址数组
$registryPaths = @(
"Registry::HKEY_CURRENT_USER\Software\Classes\CLSID",
"Registry::HKEY_CLASSES_ROOT\CLSID",
"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects\"
)
# 调用函数进行检查
Write-Host "Starting signature verification..."
Check-RegistryPaths -RegistryPaths $registryPaths
Write-Host "Signature verification completed."
如果后期大家发现其他关于 COM 相关的注册表,也可以加入到 $registryPaths 数组中,例如 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID


签名验证不通过并不代表这个程序是恶意的,可以先与开发人员确认,并且可以通过沙箱以及在线杀毒程序进行分析
【 Windows Server 2016 】默认情况

默认并不存在签名验证不通过的 COM 组件
这个就不多说了,大家选择已有或者合适的杀毒程序
密码过滤器是一种安全功能,用于在用户更改密码时对密码进行验证和强制规则。它允许系统管理员定义一组自定义规则和策略,以确保用户设置的密码符合安全要求。
密码过滤器的主要目的是增强密码的复杂性和强度,从而提高系统的安全性。它可以执行以下任务:
123456、password等。通过密码过滤器,管理员可以确保用户设置的密码符合组织的安全策略,并提高整个系统的安全性。它是一项重要的安全措施,用于防止弱密码和密码猜测攻击,从而降低系统遭受密码相关威胁的风险。
攻击者常常利用这个功能窃取用户的明文密码,当然主要是新用户
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\ 的 Notification Packages 键对应的值

这些都是 DLL 只不过这里不写 .dll
【 Windows Server 2016 】默认情况

Network Provider 类型的后门主要是窃取网络登录的明文密码,其实我觉得只要明文密码需要被处理,那么这个处理流程中的这些程序都会被发掘用来做后门
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
用于配置普通的网络提供程序 DLL 的顺序HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder
用于配置硬件网络提供程序的顺序。这些注册表路径允许用户和管理员管理和控制网络提供程序的加载顺序,以满足特定的网络连接需求和优先级

prl_fs,LanmanWorkstation,RDPNP
这些都是服务名称,在这些服务注册表中都存在 NetworkProvider 子项


也可以通过 Autoruns 进行查看,但更推荐通过注册表查看

【 Windows Server 2016 】默认情况


prl_fs,LanmanWorkstation,RDPNP
这里的 prl_fs 是我的PD 虚拟机的 tools 添加的,所以默认应该不存在

%SystemRoot%\System32\ntlanman.dll

%SystemRoot%\System32\drprov.dll

WinSock NSP(WinSock Namespace Provider)是指在 Windows 操作系统中实现网络套接字编程接口(Socket API)的组件之一。它负责提供网络通信的底层功能,使应用程序能够通过网络进行数据传输。
WinSock NSP 通过一组动态链接库(DLL)来实现,这些 DLL 包含了实现网络协议栈和通信协议的代码。它们提供了一种标准化的编程接口,使开发人员能够使用常见的网络协议(如TCP/IP、UDP)进行网络通信。
通过 WinSock NSP,开发人员可以创建套接字、建立连接、发送和接收数据等网络操作。它提供了一系列函数和数据结构,使应用程序能够方便地进行网络编程,实现网络通信功能
WinSock NSP 后门的原理如下:
注册表位置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries64
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries64
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Num_Catalog_Entries
前面四个注册表位置每个子键代表一个已注册的 WinSock Namespace Provider。检查这些子键的值,特别是以下几个值:
ProtocolChain:这个值指定了命名空间提供者的优先级顺序。确保优先级顺序中没有未知或可疑的提供者。LibraryPath:这个值指定了命名空间提供者 DLL 的路径。验证 DLL 的路径是否与已知的合法提供者相匹配。DisplayName:这个值提供了命名空间提供者的显示名称。确保名称与已知的合法提供者一致。最后一个注册表主要是表示注册的 WinSock Namespace Providers 的数量。确保该值与实际注册的数量一致,以排除任何异常情况。


这里思路还是通过 powershell 提取每个 dll ,之后进行签名验证
# 定义函数来进行签名校验
function Verify-FileSignature {
param (
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Leaf})]
[string]$FilePath
)
if (Test-Path -Path $FilePath -PathType Leaf) {
$signature = Get-AuthenticodeSignature -FilePath $FilePath
if ($signature.Status -eq 'Valid') {
return "Valid"
} else {
return "Invalid"
}
} else {
return "File Not Found"
}
}
# 定义函数来检查注册表地址
function Check-RegistryPaths {
param (
[Parameter(Mandatory=$true)]
[string[]]$RegistryPaths
)
$invalidSignatures = @()
foreach ($registryPath in $RegistryPaths) {
if (Test-Path -Path $registryPath) {
$subkeys = Get-ChildItem -Path $registryPath
foreach ($subkey in $subkeys) {
# $ParametersPath = Join-Path -Path $subkey.PSPath -ChildPath "Parameters"
$ParametersPath = $subkey.PSPath
if (Test-Path -Path $ParametersPath) {
$libraryValue = (Get-ItemProperty -Path $ParametersPath -Name "LibraryPath" -ErrorAction SilentlyContinue)."LibraryPath"
if ($libraryValue) {
$binaryFilePath = $libraryValue.Trim().Trim('"')
$binaryFilePath = [Environment]::ExpandEnvironmentVariables($binaryFilePath)
if (Test-Path $binaryFilePath) {
$result = Verify-FileSignature -FilePath $binaryFilePath
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $binaryFilePath
}
Write-Host "Signature is invalid for file: $binaryFilePath" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $binaryFilePath " -ForegroundColor Green
}
} else {
$dllFileName = Split-Path -Leaf $binaryFilePath
$found = $false
$searchPaths = @(
(Join-Path -Path $env:SystemRoot -ChildPath $dllFileName),
(Join-Path -Path $env:SystemRoot -ChildPath "System32\$dllFileName")
)
foreach ($path in $searchPaths) {
if (Test-Path $path) {
$found = $true
$result = Verify-FileSignature -FilePath $path
if ($result -eq "Invalid") {
$invalidSignatures += @{
RegistryPath = $subkey
BinaryFilePath = $path
}
Write-Host "Signature is invalid for file: $path" -ForegroundColor Red
} elseif ($result -eq "Valid") {
Write-Host "Signature is valid for file: $path " -ForegroundColor Green
}
break
}
}
if (-not $found) {
Write-Host "Could not find file '$dllFileName' in default search paths. Skipping signature verification." -ForegroundColor Yellow
}
}
} else {
Write-Host "Binary file path is empty for subkey $($subkey.PSChildName)." -ForegroundColor Yellow
}
}
}
}
}
# 打印不通过的签名验证信息
if ($invalidSignatures.Count -gt 0) {
Write-Output ""
Write-Output ""
Write-Output "--------------------------------------------------------"
Write-Host "Invalid signatures:" -ForegroundColor Red
foreach ($invalidSignature in $invalidSignatures) {
$registryPath = $invalidSignature.RegistryPath
$binaryFilePath = $invalidSignature.BinaryFilePath
Write-Host "Registry path: $registryPath" -ForegroundColor Yellow
Write-Host "Binary file path: $binaryFilePath" -ForegroundColor Yellow
Write-Output ""
}
Write-Output "--------------------------------------------------------"
}
}
# 要检查的注册表地址数组
$registryPaths = @(
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\",
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries64",
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries\",
"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries64"
)
# 调用函数进行检查
Write-Host "Starting signature verification..."
Check-RegistryPaths -RegistryPaths $registryPaths
Write-Host "Signature verification completed."

也可以通过 Autoruns 进行排查

【 Windows Server 2016 】默认情况

