常规安全检查
案例操作系统为 Windows Server 2016 root 账户来模拟普通用户账户 Administrator 为管理员账户 admin$ 账户来模拟隐藏普通账户 Windows 命令行常规情况下是不区分大小写的,因此大小写都可以
0x00 杀毒软件 ¶ 如果应急响应过程中允许,使用杀毒程序进行全盘杀毒肯定非常有帮助的,目前很多企业都有自己的终端管控程序,其中部分自带病毒库和杀毒功能,如果允许可以考虑异构排查
需要注意,大部分杀毒软件都有白名单等功能,全盘查杀可能会跳过这些内容,建议注意是否存在白名单情况,对白名单详细排查
0x01 近期活动 ¶ 这部分偏取证一些,不过对于很多应急场景,例如恶意文件被删除了,分析程序执行非常有用,这部分主要参考以下网址,感谢分享
https://www.sans.org/posters/windows-forensic-analysis/ https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6%E6%89%A7%E8%A1%8C%E8%AE%B0%E5%BD%95%E7%9A%84%E8%8E%B7%E5%8F%96%E4%B8%8E%E6%B8%85%E9%99%A4 https://ericzimmerman.github.io/#!index.md
1. LastActivityView ¶
https://www.nirsoft.net/utils/computer_activity_view.html
LastActivityView 可以显示多种活动记录,包括文件访问、程序启动和关闭、系统休眠和唤醒、网络活动、打印作业等。它收集并显示这些活动记录的详细信息,如活动时间、活动类型、操作描述、文件路径等。
下载 LastActivityView 及其对应的语言配置文件,将语言配置文件放在与 LastActivityView 同路径下会自动加载语言配置文件
这里可以看到任务运行、打开文件或文件夹、选择打开/保存文件对话框等近期操作,可以通过点击查看,选择一些便于查看的选项
可以导出 html 版本的报告,可以通过筛选功能进行筛选
通过在项上右击属性,查看该项的来源,当然也可以通过调整栏目大小,在后面的栏目中找到
2. 组策略-审核进程创建 ¶ 默认 Windows Server 2016 中没有开启审核进程创建的组策略,但是默认还是会记录部分进程创建,主要是系统上的默认程序
日志位置为 Windows 日志 -> 安全
进程事件ID : 4688
如果组策略开启后,会记录进程创建
Windows + r 输入 gpedit.msc
计算机配置 -> Windows设置 -> 安全设置 -> 高级审核策略配置 -> 详细跟踪 -> 审核进程创建
如果开启,则会记录命令行程序进程创建
3. Amcache ¶ Amcache跟踪已安装的应用程序、已执行(或当前)的程序、加载的驱动程序等。使这个工件与众不同的是,它还跟踪可执行文件和驱动程序的SHA1散列。(在Win7+中可用)
以下是Amcache的一些功能和用途:
应用程序兼容性:Amcache记录了应用程序的元数据,包括应用程序的名称、版本、文件路径等信息。这些元数据可以用于识别和解决应用程序的兼容性问题。当应用程序启动时,Amcache会检查其元数据,并根据预定义的兼容性规则和设置来确定是否需要应用特定的兼容性修复。
应用程序白名单:Amcache还用于应用程序白名单功能,这是一种安全机制,用于限制系统上可以运行的应用程序。管理员可以配置白名单,只允许特定的应用程序在系统上运行,其他应用程序则被阻止。Amcache记录了白名单中的应用程序信息,并与系统上运行的应用程序进行比对,以确定是否允许其运行。
性能优化:Amcache还可以提高应用程序的启动性能。通过缓存应用程序的元数据和执行信息,系统可以更快地检索和加载应用程序,从而减少启动时间和响应延迟。
Amcache数据存储在系统的Amcache.hve文件中,通常位于 C:\Windows\AppCompat\Programs 目录下。这个文件是一个二进制格式的注册表文件,包含了所有应用程序的元数据和执行信息。
txt 文件可以直接查看
解析工具
https://github.com/EricZimmerman/AmcacheParser https://github.com/yoda66/GetAmCache/blob/master/Get-Amcache.ps1
AmcacheParser.exe -f "C:\Windows\appcompat\Programs\Amcache.hve" --csv result
4. ShimCache ¶ ShimCache(也称为AppCompatCache)是Windows操作系统中的一个功能,用于记录和缓存应用程序的兼容性信息。它主要用于加快应用程序的启动速度,并提供对应用程序的兼容性修复和调整的支持。
以下是ShimCache的一些功能和用途:
加速应用程序启动:ShimCache会缓存应用程序的兼容性信息,包括应用程序的修复补丁、设置和调整等。当用户再次启动一个应用程序时,Windows会检查ShimCache以获取该应用程序的兼容性信息,从而加快应用程序的启动速度。
兼容性修复和调整:ShimCache可以存储应用程序的兼容性修复和调整信息。当应用程序启动时,Windows会应用这些修复和调整来解决潜在的兼容性问题,以确保应用程序在当前操作系统上正常运行。
应用程序兼容性数据库:ShimCache实际上是一个应用程序兼容性数据库,其中包含了大量应用程序的兼容性信息。这些信息包括修复补丁、设置、调整和其他与应用程序兼容性相关的数据。Windows可以根据这些信息自动应用修复和调整,以提高应用程序的兼容性。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
解析工具
https://github.com/EricZimmerman/AppCompatCacheParser/
AppCompatCacheParser.exe --csv ./ --csvf results.csv
生成的 csv 文件可以通过 Excel 或者 WPS 文件打开
这里面标记了文件上次修改的时间、是否执行过等信息
5. UserAssist ¶ UserAssist记录基于GUI的程序执行的元数据,UserAssist 数据储存在注册表中,路径通常是
当前用户 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist 所有用户 HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
其中包含多个子键,每个子键对应一个用户接口包GUID,每个GUID下记录了特定类型的用户活动,如对explorer、IE浏览器以及其他程序的使用情况。
具体而言,UserAssist 存储的信息可能包括但不限于:
应用程序的启动次数
应用程序最后一次被访问的时间
用户在应用程序内的活动频率和持续时间
可能还记录了一些额外的参数,反映用户的操作习惯
检查工具
https://www.nirsoft.net/utils/userassist_view.html
下载检查工具的同时,下载语言配置文件,放到工具同目录会自动加载
6. MUICache ¶ MUICache 是 Windows 操作系统中的一个功能,用于记录和缓存多语言用户界面(MUI)文件的信息。它主要用于加快多语言应用程序的启动速度,并提供对多语言资源的访问支持。
MUICache是Windows操作系统注册表中的一项,位于
当前用户 HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache 所有用户 HKEY_USERS\<sid>\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache Vista 之前 HKEY_USERS\<sid>\Software\Microsoft\Windows\ShellNoRoam\MUICache HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Explorer\MUICache HKEY_USERS\<sid>\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
解析工具
http://www.nirsoft.net/utils/muicache_view.html
7. RunMRU ¶ RunMRU (Most Recently Used Run) 是Windows操作系统注册表中的一个键值,它位于
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
这个键用于存储用户最近在“运行”对话框中输入过的命令历史记录。
当你按下 Win + R 键打开“运行”对话框并在其中输入命令执行程序、打开文件或网址后,这些输入的历史记录就会被保存在 RunMRU 注册表键下。每个曾经输入过的命令都会作为一个独立的值存储在该键的右侧窗口中,键名为一个顺序编号,键值则是对应输入的命令字符串。
8. AppCompatFlags Registry Keys ¶ AppCompatFlags Registry Keys 是Windows操作系统中的一组注册表键,用于记录和管理应用程序的兼容性修复和设置。它们主要用于解决旧版本应用程序在较新版本的Windows上可能出现的兼容性问题。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
9. Prefetch ¶ Prefetch 是Windows操作系统中的一项技术,用于加速应用程序的启动速度和系统的整体性能。它通过在系统启动或应用程序首次运行时预先读取相关文件和数据,以减少后续访问时的延迟。
文件位于 C:\Windows\Prefetch\ ,扩展名为pf
解析工具
https://github.com/EricZimmerman/PECmd
PECmd.exe -d C:\Windows\Prefetch --csv c:\temp
Windows Server 2016 中该文件夹下无文件,应该是默认没有开启 Prefetch
10. Application-Experience ¶ Application-Experience 日志是 Windows 操作系统中的一个事件日志,用于记录与应用程序体验和兼容性相关的事件和信息。它提供了有关应用程序的启动、运行和兼容性修复的记录。以下是关于 Application-Experience 日志的一些含义:
应用程序启动和运行:, Application-Experience, 日志记录了应用程序的启动和运行事件。这些事件可以包括应用程序的启动时间、运行时错误、异常终止等。通过分析这些事件,可以了解应用程序的执行情况,以便进行故障排除和优化。
兼容性修复:当应用程序在当前操作系统上遇到兼容性问题时,Windows 操作系统可能会尝试自动应用兼容性修复措施。, Application-Experience, 日志会记录这些兼容性修复的相关信息,例如应用程序的设置更改、注册表修复、文件替换等。这些记录可以帮助了解应用程序的兼容性修复过程和结果。
应用程序兼容性评估:, Application-Experience, 日志还记录了应用程序的兼容性评估结果。这些评估可能涉及检查应用程序的兼容性数据库、比较应用程序的配置与兼容性规则等。通过这些评估记录,可以确定应用程序在当前操作系统上的兼容性状况。
应用程序配置和设置:, Application-Experience, 日志可能还包含与应用程序配置和设置相关的事件和信息。这些信息可以包括应用程序的配置更改、注册表设置、文件路径更改等。通过记录这些事件,可以了解应用程序的配置变化和对应的影响。
具体位置为
应用程序与服务日志 -> Microsoft -> Windows -> Application-Experience
这里有 5 个日志文件
Program-Compatibility-Assistant(程序兼容性助手): 这个日志文件记录了与程序兼容性助手相关的操作和事件。程序兼容性助手是 Windows 操作系统中的一个功能,用于检测和解决应用程序在当前操作系统上的兼容性问题。该日志文件记录了兼容性助手执行的操作、应用程序的兼容性问题和解决方案等信息。
Program-Compatibility-Troubleshooter(程序兼容性故障排除): 这个日志文件记录了与程序兼容性故障排除相关的操作和事件。程序兼容性故障排除是 Windows 操作系统中的一个功能,用于自动检测和解决应用程序的兼容性问题。该日志文件记录了故障排除执行的操作、检测到的兼容性问题和解决方案等信息。
Program-Inventory(程序清单): 这个日志文件记录了与程序清单相关的操作和事件。程序清单是 Windows 操作系统中的一个功能,用于跟踪和记录已安装的应用程序的信息。该日志文件记录了应用程序的安装、卸载、更新等操作,以及与程序清单相关的元数据和事件。
Program-Telemetry(程序遥测): 应用程序遥测日志通常包含了应用程序运行时的行为和性能数据,可能包括启动时间、资源使用情况、功能使用统计等。在Application Experience服务下,这类日志有助于微软或其他开发者了解应用的运行状况以便改进其兼容性和用户体验。
Steps-Recorder(步骤记录器): 这个日志文件记录了使用步骤记录器工具期间的事件和操作。步骤记录器是 Windows 操作系统中的一个实用工具,用于记录用户在计算机上执行的操作步骤,以便在需要时进行故障排除和问题解决。该日志文件记录了用户的操作步骤、屏幕截图和其他相关信息。
这几个日志文件都可以查看一下
11. Jump Lists ¶ Jump Lists(跳转列表)是Windows操作系统中的一个功能,用于提供快速访问应用程序的常用任务和最近打开的文件。它可以让用户更方便地启动应用程序、访问常用功能以及快速打开最近使用的文件
%APPDATA%\Microsoft\Windows\Recent %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\
与 Win + r 输入 Recent 是一样的
解析工具
https://github.com/EricZimmerman/JumpList https://ericzimmerman.github.io/#!index.md
12. SRUM ¶ SRUM(System Resource Usage Monitor)是Windows操作系统中的一个组件,用于跟踪和记录系统资源的使用情况。它可以提供有关应用程序、进程和用户在系统上使用的资源的详细信息,包括CPU时间、内存使用、网络活动和磁盘活动等。
以下是SRUM的一些功能和用途:
资源管理和性能分析:SRUM可以帮助系统管理员和开发人员监视和分析系统资源的使用情况。通过SRUM,可以了解特定应用程序、进程或用户在系统上使用资源的方式,以及它们对系统性能的影响。这可以帮助优化系统配置、调整应用程序性能和识别资源瓶颈。
安全审计和威胁检测:SRUM还可以用于安全审计和威胁检测。通过监视系统资源的使用情况,可以检测到异常或可疑的活动模式,例如异常的CPU或内存使用、异常的网络活动或大量的磁盘写入操作。这有助于发现潜在的恶意软件活动、内部滥用或异常行为。
用户活动分析:SRUM可以跟踪和记录用户在系统上的活动,例如登录时间、应用程序使用情况、网络连接和文件访问等。这可以用于分析用户行为模式、用户习惯和工作模式,从而改进用户体验、优化资源分配或进行用户行为分析。
文件位置
C:\Windows\System32\sru\SRUDB.dat
解析工具
https://github.com/EricZimmerman/Srum
在 Windows Server 2016 中默认不存在该目录以及文件,如果你的系统里有该文件,使用该解析工具前记得看一下 Github 的注意事项,不然可能会报错
13. LastVisitedMRU ¶ LastVisitedMRU是Windows操作系统中的一个注册表键名(Registry key),用于跟踪用户使用的应用程序以及应用程序访问的最后一个文件的目录位置。
LastVisitedMRU保存在注册表中的以下路径下:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU
14. 最近打开的文件 ¶ 这是一个注册表项跟踪最后打开的文件和文件夹。用于在某些开始菜单中的“最近”菜单等地方填充数据。
位置
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs HKEY_USERS\<sid>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
0x02 证书排查 ¶ 这一部分主要是查看一下是否存在恶意程序安装的证书,因为这可能影响后续的签名校验等排查
1. certmgr.msc ¶
主要就是对比是否存在和系统默认不一样的证书,尤其是多出来的
【 Windows Server 2016 】默认情况
受信任的跟证书颁发机构 -> 证书
颁发给 颁发者 截止日期 预期目的 友好名称 状态 证书模板 AAA Certificate Services AAA Certificate Services 2029/1/1 客户端身份验证, 代码签名, 加密文件系统, 安全电子邮件, IP 安全隧道终止, IP 安全用户, 服务器身份验证, 时间戳 Sectigo (AAA) Class 3 Public Primary Certification Authority Class 3 Public Primary Certification Authority 2028/8/2 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证 VeriSign Class 3 Public Primary CA Copyright (c) 1997 Microsoft Corp. Copyright (c) 1997 Microsoft Corp. 1999/12/31 时间戳 Microsoft Timestamp Root DigiCert Assured ID Root CA DigiCert Assured ID Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Global Root CA DigiCert Global Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Global Root G2 DigiCert Global Root G2 2038/1/15 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert Global Root G2 DigiCert High Assurance EV Root CA DigiCert High Assurance EV Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Trusted Root G4 DigiCert Trusted Root G4 2038/1/15 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert Trusted Root G4 Microsoft Authenticode(tm) Root Authority Microsoft Authenticode(tm) Root Authority 2000/1/1 安全电子邮件, 代码签名 Microsoft Authenticode(tm) Root Microsoft Root Authority Microsoft Root Authority 2020/12/31 <所有> Microsoft Root Authority Microsoft Root Certificate Authority Microsoft Root Certificate Authority 2021/5/10 <所有> Microsoft Root Certificate Authority Microsoft Root Certificate Authority 2010 Microsoft Root Certificate Authority 2010 2035/6/24 <所有> Microsoft Root Certificate Authority 2010 Microsoft Root Certificate Authority 2011 Microsoft Root Certificate Authority 2011 2036/3/23 <所有> Microsoft Root Certificate Authority 2011 NO LIABILITY ACCEPTED, (c)97 VeriSign, Inc. NO LIABILITY ACCEPTED, (c)97 VeriSign, Inc. 2004/1/8 时间戳 VeriSign Time Stamping CA Parallels IP Holdings GmbH Symantec Class 3 Extended Validation Code Signing CA - G2 2018/6/25 代码签名 <无> Symantec Enterprise Mobile Root for Microsoft Symantec Enterprise Mobile Root for Microsoft 2032/3/15 代码签名 <无> Thawte Timestamping CA Thawte Timestamping CA 2021/1/1 时间戳 Thawte Timestamping CA USERTrust RSA Certification Authority USERTrust RSA Certification Authority 2038/1/19 客户端身份验证, 代码签名, 加密文件系统, 安全电子邮件, IP 安全隧道终止, IP 安全用户, 服务器身份验证, 时间戳 Sectigo VeriSign Class 3 Public Primary Certification Authority - G5 VeriSign Class 3 Public Primary Certification Authority - G5 2036/7/17 <所有> <无> VeriSign Universal Root Certification Authority VeriSign Universal Root Certification Authority 2037/12/2 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 VeriSign Universal Root Certification Authority
中间证书颁发机构 -> 证书
颁发给 颁发者 截止日期 预期目的 友好名称 状态 证书模板 Microsoft Windows Hardware Compatibility Microsoft Root Authority 2002/12/31 代码签名, Windows 硬件驱动程序验证 <无> Root Agency Root Agency 2040/1/1 <所有> <无> Symantec Class 3 Extended Validation Code Signing CA - G2 VeriSign Class 3 Public Primary Certification Authority - G5 2024/3/4 代码签名 <无> VeriSign Class 3 Public Primary Certification Authority - G5 VeriSign Class 3 Public Primary Certification Authority - G5 2036/7/17 <所有> <无> www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign Class 3 Public Primary Certification Authority 2016/10/25 服务器身份验证, 客户端身份验证, 2.16.840.1.113730.4.1, 2.16.840.1.113733.1.8.1 <无>
中间证书颁发机构 -> 证书吊销列表
颁发者 生效日期 下一次的更新时间 VeriSign Commercial Software Publishers CA, "VeriSign, Inc.", Internet 2001/3/24 2004/1/8
第三方根证书颁发机构 -> 证书
颁发给 颁发者 截止日期 预期目的 友好名称 状态 证书模板 AAA Certificate Services AAA Certificate Services 2029/1/1 客户端身份验证, 代码签名, 加密文件系统, 安全电子邮件, IP 安全隧道终止, IP 安全用户, 服务器身份验证, 时间戳 Sectigo (AAA) Class 3 Public Primary Certification Authority Class 3 Public Primary Certification Authority 2028/8/2 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证 VeriSign Class 3 Public Primary CA DigiCert Assured ID Root CA DigiCert Assured ID Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Global Root CA DigiCert Global Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Global Root G2 DigiCert Global Root G2 2038/1/15 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert Global Root G2 DigiCert High Assurance EV Root CA DigiCert High Assurance EV Root CA 2031/11/10 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert DigiCert Trusted Root G4 DigiCert Trusted Root G4 2038/1/15 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 DigiCert Trusted Root G4 USERTrust RSA Certification Authority USERTrust RSA Certification Authority 2038/1/19 客户端身份验证, 代码签名, 加密文件系统, 安全电子邮件, IP 安全隧道终止, IP 安全用户, 服务器身份验证, 时间戳 Sectigo VeriSign Universal Root Certification Authority VeriSign Universal Root Certification Authority 2037/12/2 客户端身份验证, 代码签名, 安全电子邮件, 服务器身份验证, 时间戳 VeriSign Universal Root Certification Authority
Sparkle -> 证书
颁发给 颁发者 截止日期 预期目的 友好名称 状态 证书模板 DigiCert Trusted Root G4 DigiCert Trusted Root G4 2040/1/1 <所有> <无> Sparkle Sparkle 2040/1/1 <所有> <无>
2. Powershell ¶ 使用 Powershell 可以直接获取个人和本地计算机的证书并进行比较,完成比较需要四个脚本
script1.ps1
用于采集操作系统默认的证书信息,所以是放在一个与受害服务器相同的纯净的操作系统中执行的,目的就是获取到默认证书信息
# 导出本地计算机和当前用户证书存储区 $certStores = @("My", "Root", "CA", "Trust", "AuthRoot", "TrustedPublisher", "TrustedPeople") $defaultCerts = @{} $systemTempDir = "C:\Windows\Temp" $defaultCertsDir = Join-Path -Path $systemTempDir -ChildPath "DefaultCertificates" foreach ($store in $certStores) { $certs = @( Get-ChildItem -Path "Cert:\LocalMachine\$store" Get-ChildItem -Path "Cert:\CurrentUser\$store" ) foreach ($cert in $certs) { $certDir = Join-Path -Path $defaultCertsDir -ChildPath $store # 确保目录存在 if (-not (Test-Path -Path $certDir)) { New-Item -ItemType Directory -Path $certDir | Out-Null } $certPath = Join-Path -Path $certDir -ChildPath "$($cert.Thumbprint).cer" $cert | Export-Certificate -FilePath $certPath # 将指纹存储到哈希表中,便于后续对比 $defaultCerts[$cert.Thumbprint] = @{ Path = $certPath Subject = $cert.Subject Issuer = $cert.Issuer NotBefore = $cert.NotBefore NotAfter = $cert.NotAfter } } } # 将哈希表保存为JSON文件 $defaultCertsJsonPath = Join-Path -Path $defaultCertsDir -ChildPath "defaultCerts.json" $defaultCerts | ConvertTo-Json | Set-Content -Path $defaultCertsJsonPath Write-Output "默认证书和JSON文件已导出到: $defaultCertsJsonPath"
defaultCerts.json 就是默认证书的情况
script2.ps1
用于采集被检查服务器的证书信息
# 导出本地计算机和当前用户证书存储区 $certStores = @("My", "Root", "CA", "Trust", "AuthRoot", "TrustedPublisher", "TrustedPeople") $currentCerts = @{} $systemTempDir = "C:\Windows\Temp" $currentCertsDir = Join-Path -Path $systemTempDir -ChildPath "CurrentCertificates" foreach ($store in $certStores) { $certs = @( Get-ChildItem -Path "Cert:\LocalMachine\$store" Get-ChildItem -Path "Cert:\CurrentUser\$store" ) foreach ($cert in $certs) { $certDir = Join-Path -Path $currentCertsDir -ChildPath $store # 确保目录存在 if (-not (Test-Path -Path $certDir)) { New-Item -ItemType Directory -Path $certDir | Out-Null } $certPath = Join-Path -Path $certDir -ChildPath "$($cert.Thumbprint).cer" $cert | Export-Certificate -FilePath $certPath # 将指纹存储到哈希表中,便于后续对比 $currentCerts[$cert.Thumbprint] = @{ Path = $certPath Subject = $cert.Subject Issuer = $cert.Issuer NotBefore = $cert.NotBefore NotAfter = $cert.NotAfter } } } # 将哈希表保存为JSON文件 $currentCertsJsonPath = Join-Path -Path $currentCertsDir -ChildPath "currentCerts.json" $currentCerts | ConvertTo-Json -Depth 10 | Set-Content -Path $currentCertsJsonPath Write-Output "当前证书和JSON文件已导出到: $currentCertsJsonPath"
currentCerts.json 文件就是当前系统的证书情况
script3.ps1
该脚本是用来比较两个文件的
param ( [string]$defaultCertsPath = ".\defaultCerts.json", [string]$currentCertsPath = ".\currentCerts.json" ) # 读取JSON文件 $defaultCerts = Get-Content -Path $defaultCertsPath | ConvertFrom-Json $currentCerts = Get-Content -Path $currentCertsPath | ConvertFrom-Json $differencesFound = $false # 比较当前证书是否在默认证书中 foreach ($thumbprint in $currentCerts.PSObject.Properties.Name) { if (-not $defaultCerts.PSObject.Properties.Name.Contains($thumbprint)) { Write-Output "-----------------------------------------------" Write-Output "新增的证书: $($currentCerts.$thumbprint.Path)" Write-Output " 主题: $($currentCerts.$thumbprint.Subject)" Write-Output " 颁发者: $($currentCerts.$thumbprint.Issuer)" Write-Output " 有效期: $($currentCerts.$thumbprint.NotBefore) - $($currentCerts.$thumbprint.NotAfter)" $differencesFound = $true } } # 检查默认证书是否被篡改 foreach ($thumbprint in $defaultCerts.PSObject.Properties.Name) { if ($currentCerts.PSObject.Properties.Name.Contains($thumbprint)) { if ($defaultCerts.$thumbprint.Subject -ne $currentCerts.$thumbprint.Subject -or $defaultCerts.$thumbprint.Issuer -ne $currentCerts.$thumbprint.Issuer -or $defaultCerts.$thumbprint.NotBefore -ne $currentCerts.$thumbprint.NotBefore -or $defaultCerts.$thumbprint.NotAfter -ne $currentCerts.$thumbprint.NotAfter) { Write-Output "被篡改的证书: $($currentCerts.$thumbprint.Path)" Write-Output " 原始主题: $($defaultCerts.$thumbprint.Subject)" Write-Output " 当前主题: $($currentCerts.$thumbprint.Subject)" Write-Output " 原始颁发者: $($defaultCerts.$thumbprint.Issuer)" Write-Output " 当前颁发者: $($currentCerts.$thumbprint.Issuer)" Write-Output " 原始有效期: $($defaultCerts.$thumbprint.NotBefore) - $($defaultCerts.$thumbprint.NotAfter)" Write-Output " 当前有效期: $($currentCerts.$thumbprint.NotBefore) - $($currentCerts.$thumbprint.NotAfter)" $differencesFound = $true } } } if (-not $differencesFound) { Write-Output "未发现恶意证书。" }
将 defaultCerts.json 、 currentCerts.json 、 script3.ps1 放在同级目录下,执行 script3.ps1
可以发现当前系统相对于纯净的系统,多了很多证书,接下来就要判断这些证书是否为恶意攻击者留下的
这并不简单,分两步走,一方面是在线校验这些证书是否签名有效,证书链完整
此时用到 script4.ps1
# 定义证书文件所在的目录路径 $certificateDirectory = '.\' # 获取指定目录下的所有证书文件 $certFiles = @( Get-ChildItem -Path $certificateDirectory -Filter '*.cer' Get-ChildItem -Path $certificateDirectory -Filter '*.crt' ) # 遍历每个证书文件 foreach ($file in $certFiles) { try { # 读取证书文件 $certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($file.FullName) # 初始化证书链 $chain = New-Object System.Security.Cryptography.X509Certificates.X509Chain $chain.ChainPolicy.RevocationMode = [System.Security.Cryptography.X509Certificates.X509RevocationMode]::Online $chain.ChainPolicy.UrlRetrievalTimeout = [TimeSpan]::FromMinutes(1) $chain.ChainPolicy.VerificationFlags = [System.Security.Cryptography.X509Certificates.X509VerificationFlags]::NoFlag # 构建证书链并检查状态 if (!$chain.Build($certificate)) { # 证书验证失败时输出证书的详细信息 Write-Host "----------------------------------------------------------------------------" Write-Host "Validation failed for certificate: $($file.Name)" Write-Host "Subject: $($certificate.Subject)" Write-Host "Issuer: $($certificate.Issuer)" Write-Host "Not Before: $($certificate.NotBefore)" Write-Host "Not After: $($certificate.NotAfter)" Write-Host "Thumbprint: $($certificate.Thumbprint)" Write-Host "Serial Number: $($certificate.SerialNumber)" Write-Host "" # 输出错误信息,每个错误后面紧跟分号,最后一行不带分号 foreach ($status in $chain.ChainStatus) { Write-Host "Error: $status.Status - $($status.StatusInformation)" -NoNewline } } } catch { Write-Host "Failed to process file '$($file.Name)': $_" } }
将上述证书复制一份到与 script4.ps1 同一级目录,并执行 script4.ps1
可以看到这里有两个证书是校验失败了的,对于校验失败的证书,我们需要严格对待,与运维相关人员做详细确认,是否为正常程序留下的证书
对于校验成功的证书,我们要进行第二部,找到证书使用者或者说被颁发者信息( script3.ps1 得到的结果中 CN 对应字符串),之后去威胁情报平台或者搜索引擎中查找相关信息
0x03 账号信息 ¶ 1. 查看用户 ¶ cmd中输入
此时,会显示出相关的系统账号:
此命令无法看到隐藏账号的情况,例如 admin$
2. 查看用户组 ¶ 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 命令成功完成。
3. 查找隐藏账户 ¶ 1) lusrmgr.msc 查看隐藏用户 ¶ lusrmgr.msc 为打开本地用户和组
win + r / cmd 中输入
lusrmgr能够看到 常规的隐藏账户 情况,即 net user admin$ 123456 /add 这类方式添加的隐藏账号
右键用户查看属性即可看到相关用户信息
【 Windows Server 2016 】 默认情况
其他组均为空
2) 注册表查看隐藏账户 ¶ regedit 为打开注册表编辑器快捷指令
win + r 中输入
不同版本的操作系统位置不同
Windows 2016
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names SAM 目录需要赋予权限, 应急结束时记得取消权限
也可以通过命令行命令查询注册表
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 reg query 遇到空格的处理方法多少有些奇怪,整体用双引号引上不行,反斜线也不太行,得用双引号把空格引上 - 如果一个用户只是被创建了而没有登录,在注册表中可能是看不到这一项的,因此做实验的朋友们记得登录一次
【Windows Server 2016 】 默认情况
3) wmic查询用户 ¶ 可以通过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
4) Powershell 查找隐藏账户 ¶ 直接打开 Powershell 窗口或在 cmd 窗口中输入 Powershell 进入 Powershell 命令行
Get-WmiObject -Class Win32_UserAccount Get-WmiObject -Class Win32_UserAccount | Select-Object Name, SID
【 Windows Server 2016 】 默认情况
5) 安全软件排查 ¶ D 盾是一个有效的工具
https://www.d99net.net/
4. 删除隐藏账户 ¶ 常规删除账户可以通过命令行或者图形化删除,但是对于一些隐藏账户会删除失败,可以通过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 权限打开注册表编辑器就可以了, 一定要确定好删除的是恶意账号,别删除错了
0x04 登录信息 ¶ 1. 命令行查询本地/远端会话 ¶ query user # 当前系统的 user 登录情况 query session # 当前系统的用户会话情况 Get-SmbSession # 当前系统的 SMB 信息
该命令为查看当前系统的会话,查看是否有人使用远程终端登录服务器,所以同样可以看到账号异常
2. 任务管理器 ¶
任务管理器默认看不到 SMB 连接会话
0x05 启动项 ¶ 启动项排查主要有以下方法和内容,包含了常规的检查办法,还有基本的启动项目录,都需要检查一遍,同时注册表是作为启动项检查方式之一,存在固定的注册表位置和语句,以下也有列举。
1. msconfig ¶ msconfig 为打开系统配置程序,内含开机自启项目
win + r 输入
不是很建议使用这个程序来查看开机自启,只能作为查缺补漏项
可以查看到常规系统启动项,并且可以右键查看相应的启动项文件位置,也可以通过右键属性查看相应信息, 但是此方法无法看到组策略自启动脚本,实测注册表自启动项也看不到
【 Windows Server 2016 】 默认情况
2. 全局登录自启动目录 ¶ win + r 输入
一般具体路径如下:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
该目录下存在的程序会在用户登录时,以登录用户的权限自动执行程序
【 Windows Server 2016 】 默认情况
3. 用户登录自启动目录 ¶ 具体路径如下:
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 】 默认情况
4. 注册表查看启动项 ¶ 以下为注册表中启动项相关的所有位置,建议都排查一遍:
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 HKEY_LOCAL_MACHINE\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\SYSTEM\CurrentControlSet\Control\Print\Monitors // 打印处理器 HKEY_LOCAL_MACHINE\SYSTEM\[CurrentControlSet or ControlSet001]\Control\Print\Environments\[Windows architecture: e.g., Windows x64]\Print Processors\[user defined]\Driver // Active Setup HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\*\StubPath // 登录脚本 HKEY_CURRENT_USER\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\DefaultUser
用户配置文件:每个用户在其用户文件夹中的 NTUSER.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>
5. 组策略启动脚本 ¶ gpedit.msc 为打开本地组策略编辑器
win+r中输入:
打开本地组策略中心
计算机配置 => 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
组策略中心启动/关机的程序或脚本位置并不是固定的,可以随意指定,也就是说最终执行以组策略配置处为准。即使上面的目录中存在程序或脚本,但是在组策略配置处没有添加,也不会执行
相关注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Logoff HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Logon
【 Windows Server 2016 】 默认情况
6. 安全工具检查 ¶ 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 】
0x06 计划任务 ¶
定时任务经常是病毒、后门、权限维持等恶意行为的常见操作对象,通过添加新的定时任务,启动恶意脚本、Powershell或者其他命令行语句来达到权限维持或者扩散的目的
排查计划任务开始前,需要先开启计划任务记录,以防相关任务未记录导致无法排查
此处计划任务建议主要以 注册表 排查为主,清晰明了,同时展示内容也相对省去了很多不必要的内容。
1. taskschd.msc 任务计划程序 ¶ taskschd.msc 为打开任务计划程序
win + r 中输入
可以看到近期活动的计划任务
该处需要注意的是,右侧的两个选项卡
显示所有正在运行的任务
开启/禁用所有任务历史记录
如右侧显示 开启所有任务历史记录 ,请点击开启,该选项会开启定时任务运行历史记录,有助于排查
点击 显示所有正在运行的任务 选项卡,可以显示当前正在运行的定时任务
计划任务中,任务详情需点击相关的计划任务,下面会显示该计划任务属性详情
需要着重注意以下选项卡: 触发器、操作和历史记录
其中都会存储定时任务相关的信息,可以帮助排查
以下为病毒创建的计划任务,属性->操作 里可以看到该计划任务所执行的具体操作
点击左侧 任务计划程序(本地) ,显示如下
任务状态可以选择时间,假设选择 24 小时,下面显示的是从现在起,向前数 24 小时,在这时间段启动的任务状态
计划任务状态有以下几种
已准备就绪(Ready):任务已经配置好,并且等待触发执行。
运行中(Running):任务当前正在执行中。
已停止(Stopped):任务已经停止,不再执行。
禁用(Disabled):任务已被禁用,不会触发执行。
活动任务指的是当前正在运行的计划任务。这些任务是已经被触发并且正在执行中的任务。活动任务可能包括自动触发的任务和手动触发的任务,任务未过期
2. schtasks 查看定时任务列表 ¶ 在Windows中通常用 at 和 schtasks 命令添加计划任务,其中 at 命令默认是以System权限执行,但是从 Win8开始不再支持 at 命令,所以以下以 schtasks 命令来进行介绍
cmd中输入:
即可看到计划任务命令相关用法
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 创建的计划任务的
3. 注册表查看计划任务 ¶ 我们将注册表部分分为两类
计划任务服务本身的注册表
计划任务实际任务的注册表
就像是房屋售卖机构,一个是房屋售卖机构的位置,也就是售楼处;一个是售卖的房屋的位置
1) 计划任务本身的注册表 ¶ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule
AtTaskMaxHours:指定计划任务执行的最大小时数。
DependOnService:指定计划任务服务所依赖的其他服务。该项列出了计划任务服务所需依赖的其他服务的名称。, 注意 REG_MULTI_SZ 是多字符串值,也就是说表示多个字符串,字符串不能包含空格
Description:计划任务服务的描述信息,用于提供关于该服务功能的说明。
DisplayName:计划任务服务的显示名称,用于在服务列表和管理工具中显示。
ErrorControl:指定计划任务服务启动时的错误处理行为。常见取值为:, 0x00000000(忽略):忽略启动错误,继续启动服务。
0x00000001(正常):如果启动错误,则系统会尝试重新启动服务。
0x00000002(严重):如果启动错误,则系统会将其视为严重错误。 - FailureActions:指定计划任务服务失败时采取的操作。该项包含了一系列定义了服务失败时的行为的设置,例如重启计算机、重新启动服务等。 - Group:计划任务服务所属的服务组的名称。 - ImagePath:计划任务服务的可执行文件路径。该项指定了计划任务服务可执行文件的位置和名称。 - ObjectName:指定计划任务服务运行的用户或身份。该项定义了服务的安全上下文。 - RequiredPrivileges:指定计划任务服务所需的特权。该项列出了计划任务服务所需的特权名称。 - ServiceSidType:指定计划任务服务的服务安全标识符(SID)类型。常见取值包括:, 0x00000001(None):未指定服务的SID类型。
0x00000002(Unrestricted):服务的SID具有无限制权限。
0x00000003(Restricted):服务的SID具有受限权限。 - Start:指定计划任务服务的启动类型。常见取值为:, 0x00000002(自动启动):计划任务服务在系统启动时自动启动。
0x00000003(手动启动):计划任务服务需要手动启动。
0x00000004(禁用):计划任务服务被禁用,无法启动。 - Type:指定计划任务服务的类型。常见取值为:, 0x00000110:计划任务服务是一个内核驱动程序服务。
0x00000120:计划任务服务是一个文件系统驱动程序服务。
这个注册表中包含两项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Parameters
ServiceDll:该值指定计划任务服务的动态链接库 (DLL) 文件路径和名称。这个 DLL 包含了计划任务服务的实现代码。
ServiceDllUnloadOnStop:该值指示当计划任务服务停止时是否卸载 ServiceDll 指定的 DLL。如果该值为 1,则服务停止时会卸载 DLL;如果该值为 0,则 DLL 不会在服务停止时卸载。
ServiceMain:该值是一个字符串,指定计划任务服务的入口点函数。这个函数在计划任务服务启动时被调用,并负责初始化服务。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule\Security
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
2) 计划任务中任务的注册表 ¶ 计划任务的 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
Id:这个值表示计划任务树中特定任务的唯一标识符。每个计划任务都有一个唯一的 ID,用于标识和区分不同的任务。
Index:这个值指示任务在计划任务树中的索引位置。它表示任务在树中的相对位置,可以用来确定任务的顺序或层次关系。, 不过实际上测试发现 Index 值很奇怪,以 0x3 为主,括号里面的值就是前面的值的十进制值
SD:这个值存储了任务的安全描述符(Security Descriptor)。安全描述符定义了对任务的访问权限和安全设置,包括哪些用户或组有权访问、更改或删除任务。
得到 Id 值后,就可以在下面的注册表中查看具体该计划任务具体配置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\
可以通过搜索来找到对应的计划任务配置
Actions:这个项存储了任务的操作(Actions)。它包含了任务执行时要执行的操作的详细信息,例如要运行的程序或脚本以及相关的参数。
Author:这个项表示任务的作者或创建者。它记录了任务创建时的作者信息。
Date:这个项表示任务的日期。它记录了任务的创建或修改日期。
DynamicInfo:这个项存储了任务的动态信息(Dynamic Information)。它可能包含任务最近执行的状态、结果或其他与任务执行相关的信息。
Hash:这个项存储了任务的哈希值(Hash)。哈希值是根据任务的属性和内容计算得出的唯一标识符,用于验证任务的完整性和一致性。
Path:这个项表示任务的路径。它记录了任务所在的文件路径或注册表路径。
Schema:这个项存储了任务的架构(Schema)。它定义了任务的结构和属性,包括触发器、操作和其他相关信息。
Triggers:这个项存储了任务的触发器(Triggers)。它包含了触发任务执行的条件和设置,例如计划时间、事件触发或系统状态变化等。
URI:这个项表示任务的统一资源标识符(URI)。它是一个唯一的标识符,用于标识任务的位置或资源。
所以也就是说将该注册表中的内容都看一遍,就可以获取到所有的计划任务
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Schedule\TaskCache\Tasks\
4. 计划任务目录文件 ¶ 计划任务服务会讲所有设置的计划任务保存一份儿到文件,具体路径为
C:\Windows\System32\Tasks
使用记事本打开相关文件
这里提一点,修改计划任务文件不会影响计划任务的执行,通过计划任务程序修改计划任务的属性或者禁止计划任务再启动后,会将计划任务内容写入到计划任务文件中
删除计划任务文件不耽误计划任务执行,也不耽误计划任务显示
5. 计划任务日志文件 ¶ 打开日志管理器
应用程序和服务日志 -> Microsoft -> Windows -> TaskScheduler
Maintenance 计划任务的维护事件
Operational 计划任务的操作和状态事件
默认计划任务不记录操作日志,点击 启用所有任务历史记录 后,操作日志就会被记录下来了
点击后如下
日志部分主要查看 Operational 日志
可以看到这段时间的详细日志
Windows Server 2016 中计划任务日志相关的事件 id 我并没有在官方材料中找到准确的描述,因此这里通过手动测试
创建计划任务
运行计划任务
新增操作
禁用计划任务
删除计划任务
事件 ID
任务类别
100
计划任务启动
102
任务已完成
106
计划任务注册
110
计划任务由用户触发
129
已创建计划任务
140
任务注册已更新(修改属性)
141
任务注册已删除(直接删除计划任务)
142
任务已禁用
200
操作已启动(这就是实际执行了操作)
201
操作已完成
6. 采用工具排查 ¶ Autoruns 是 SysinternalsSuite 套件中一款工具,可以很方便查看包括计划任务等启动项排查
https://learn.microsoft.com/zh-cn/sysinternals/downloads/sysinternals-suite
可以在可疑的计划任务上右键,从计划任务程序打开该计划任务
经过测试发现,如果在 Microsoft 新建文件夹,之后在新建文件夹中创建计划任务, Autoruns 默认无法发现
此时需要取消选中 Hide Microsoft entries 和 Hide Windows entries
这就显示出来了
7. 隐藏计划任务排查 ¶ 如果上面的方法你都找不到计划任务,可以参考我们的文章 《计划任务的攻防战 | Window 应急响应》
https://mp.weixin.qq.com/s/y9_9P6ggxGMrdGMFT-I34A
0x07 网络连接 ¶ 1. netstat ¶ cmd中输入:
命令解释如下:
可以通过如下命令,获取当前所有UDP和TCP连接,同时列出所有的进程PID和进程执行程序及对应的服务简称
netstat -a -n -o -b //-anob同理
连接状态有以下几种
LISTENING:表示监听 ,表示这个端口处于开放状态, 可以提供服务
ESTABLISHED”:表示是对方与你已经连接 正在通信交换数据
CLOSING:表示关闭的 表示端口人为或者防火墙使其关闭(也许服务被卸载)
TIME WAIT :表示正在等待连接 就是你正在向该端口发送请求连接状态
2. nbtstat ¶ 用于显示与 NetBIOS 相关的网络连接和统计信息
nbtstat -c // 列出远程[计算机]名称及其 IP 地址的 NBT 缓存
3. PowerShell ¶ Get-NetTCPConnection # 获取 tcp 连接 Get-NetUDPEndpoint # 获取 udp 连接
4. Get-NetworkConnection ¶
这是一个开源脚本,通过 Powershell 编写,可以获取网络连接的时间戳 https://github.com/IllusiveNetworks-Labs/Get-NetworkConnection
https://systeminformer.sourceforge.io/ Process Hacker 的升级版
0x08 IPC 共享 ¶
【 Windows Server 2016 】默认情况
0x09 进程 ¶ 1. 任务管理器 ¶ 任务栏右键选择 任务管理器 或者使用快捷键 Ctrl+Shift+Esc 快速打开任务管理器,如下图:
可以对进程右键,进一步查看进程信息
2. tasklist ¶ cmd中输入:
常用命令解析:
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)
1) 查询指定用户权限的进程 ¶ tasklist /fi "USERNAME eq NT AUTHORITY\SYSTEM"
2) 查询指定用户正在运行中的进程 ¶ tasklist /FI "USERNAME eq Administrator" /FI "STATUS eq running" /v
3) 根据pid查询进程 ¶ tasklist /FI "PID eq 7768" /V
4) 查询指定进程使用的模块 ¶ tasklist /FI "PID eq 7768" /M /V
3. taskkill ¶ taskkill 主要为终止进程操作, 需要注意的是使用该命令时,cmd 命令行最好使用管理员权限 ,常用命令如下:
taskkill /pid 9688 taskkill /f /pid 9688 //强制终止进程pid为9688的进程,/f为强制终止 taskkill /t /pid 9688 //终止pid为9688进程及其子进程,/t为终止指定的进程和由它启用的子进程
4. Powershell ¶ poweshell为windows自带的一种更深入系统内部的命令行脚本环境,可以通过相应的命令对进程进行查询及操作。
win+r输入: Powershell
cmd中输入: Powershell
Powershell的命令结构一般是动词+名词
打开Powershell环境后,可以通过
get-help *process* //查找所有process相关命令的帮助,*为通配符
本次只涉及如下命令
Get-Process //相当于, tasklist, 命令,直接列出进程
Format-list * //组合使用,列出进程的详细信息
Stop-Process //暂停进程
1) Get-Process ¶ 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进程的程序路径
2) Stop-Process ¶ 该命令为停止相关进程,通过 get-help stop-process 获取帮助
演示:
spps -id 8828 //停止8828进程 spps -name “msedge” //停止名字为msedge的进程
5. wmic ¶ 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
6. query 查看当前用户启动的进程 ¶ cmd中输入:
query process //查看当前用户所启动的进程
7. tlist.exe官方调试工具 ¶ tlist.exe是Microsoft官方提供的windows调试工具包中的工具之一,用于操作进程。
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/tlist-commands
下载后,放在目录下,使用cmd命令行进行操作:
1) 通过 pid 查询进程信息 ¶ tlist 2796 # 直接跟对应进程的pid,会列出该进程的详细信息,可以看到具体的进程命令、内存信息、dll信息等 tlist msedge # 直接跟进程名称,也同样列出相关信息,此处可以使用通配符 tlist msedg* # 通配符,列出所有msedg*相关进程的详细信息 tlist -v 2796 # -v查看详细信息
2) 查看进程之间的关联关系 ¶ tlist -g # -g会列出所有进程及所关联的进程,会在进程前面标注[1234],代表该进程是1234关联的进程,但是只能在win7以上系统使用 tilst -g 2796 # 列出指定pid进程的父进程[0] tlist -g -t # 列出所有进程的进程树及关联的进程,-t为按照进程树列出,退格表示父子进程
可以看到以下进程前面有 [0] ,是相关进程的父进程:
通过缩紧来表示进程关系,缩紧表示父子关系:
3) 查看进程关联的活动服务 ¶ tlist -s //列出所有进程关联的活动服务 tlist -s 10296 //列出指定进程的关联活动服务
4) 其他命令解析 ¶ tlist -p msedge //-p返回该进程的pid,如果该进程不存在就返回-1,如果多个,就返回首个进程的pid tlist -w //返回所有进程的位数,64/32
8. Process Explorer ¶
SysinternalsSuite 的一部分 https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer
可以较为清晰地看到进程之间的关系,可以看作是大号的任务管理器
https://systeminformer.sourceforge.io/ Process Hacker 的升级版
这个可以看作是大号的 Process Explorer 了,但这个不是微软官方开发的
10. OpenArk ¶
https://openark.blackint3.com/ https://github.com/BlackINT3/OpenArk
OpenArk 也是一款集成性的安全排查工具,用于对抗 Rootkit
11. 系统信息(msinfo32) ¶ 不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息
可以看到进程开始的时间
0x10 环境变量 ¶
可以重点关注 path 和 pathext
1. GUI 环境变量查询 ¶ 常规查询方式如下:
右键此电脑-属性-高级系统设置-环境变量
也可以直接通过搜索栏搜索 环境变量
【 Windows Server 2016 】默认情况
2. set 命令查询基本信息 ¶ cmd中输入:
【 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
3. Powershell 查看环境变量 ¶ 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
4. 系统信息(msinfo32) ¶ 不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息
5. 环境变量 CLR 劫持排查 ¶
CLR相关知识引用: CLR :公共语言运行库(Common Language Runtime,CLR)是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境;所以.NET 的程序,都是在CLR中运行的。 使用基于CLR的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。 MS的一些语言,例如C#、VB、F#,都是在 CLR 中运行的,所以可以将CLR理解为他们的运行环境。
CLR劫持的根本思路就是在于:利用一个叫做托管代码分析器的东西( Managed Profiler ) ,用于性能分析、调试和诊断.NET应用程序的工具,它可以捕获应用程序的执行信息、方法调用、资源使用情况等,并提供详细的分析报告。如果我们将托管代码分析器设置为恶意程序,那就可以劫持所有 .net 框架程序的执行
基本操作为:
CLR 需配置环境变量才能完全劫持 .Net
增加 COR_ENABLE_PROFILING 值为 1, 这个环境变量是告诉 .NET Framework 运行时加载托管代码分析器(Managed Profiler)
设置 COR_PROFILER 值为 CLSID, 这个环境变量指定托管代码分析器(Managed Profiler)的 CLSID(Class ID)
CLSID 可以为任意值,但不能与系统默认原有的CLSID冲突,可参照计算机原有CLSID修改,使之更不易被察觉
利用方式如下:
# 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, 的键值
# //列出该注册表项下所有CLSID,如果有就可以继续递归排查 reg query HKEY_CURRENT_USER\Software\Classes\CLSID\
0x11 系统基本信息及补丁 ¶ 1. 系统基本信息查询 ¶ cmd中输入命令:
列出系统信息后,主要关注补丁信息:
2. wmic查询补丁信息 ¶ cmd中输入:
wmic qfe list //列出系统内补丁信息
3. Windows-Exploit-Suggester ¶ 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
Windows-Exploit-Suggester.py脚本地址:
https://github.com/AonCyberLabs/Windows-Exploit-Suggester/blob/master/windows-exploit-suggester.py
需要python 2.X环境,及外部库,自行pip install安装即可
使用方法如下:
python windows-exploit-suggester.py --update //进行更新微软漏洞库文件,建议每次都先update一下
2.将目标服务器的, systeminfo, 命令执行的结果复制保存到本地
3.本地使用, systeminfo, 命令结果进行检测:
python windows-exploit-suggester.py -d 2022-03-10-mssb.xls -i win10.txt
命令结果如下:
4. WES-NG ¶
Windows Exploit Suggester - Next Generation (WES-NG) https://github.com/bitsadmin/wesng 声称是下一代 Windows Exploit Suggester
具体使用方法可以查看 Github 上的项目详情
0x12 系统日志分析 ¶ 无论大家使用哪款程序来帮助分析日志,我都建议大家先把日志备份一份儿,同时在同款主机上测试一下工具的可用性
1. 事件查看器 ¶ win+r 中输入,打开系统事件查看器:
eventvwr.msc # windows事件查看器
主要关注以下日志内容:
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。
当安全日志被删除时,可通过以下日志查看RDP连接日志
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS\Operational
Microsoft-Windows-TerminalServices-RemoteConnectionManager\Operational
261 已收到一个连接
1149 远程桌面服务: 身份验证成功
Microsoft-Windows-TerminalServices-LocalSessionManager\Operationa 这个日志包含本地登录和RDP网络登录
21 RDP远程登录成功
22 已收到 shell 启动通知(22总是伴随着21)
23 会话注销成功
24 会话断开连接
25 会话重新连接成功
39 与会话断开连接
40 与会话断开连接原因代码
针对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
清理日志
4778
用户重新连接到会话
4779
用户结束了一个会话
4648
runas 登录
其中每个登录事件日志中,还会有 登录类型 字段,该字段代表为所使用的登录方式为哪种,如下表:
登录类型
描述
说明
2
交互式登录(Interactive)
用户在本地进行登录
3
网络(Network)
最常见的情况就是连接到共享文件夹或共享打印机时
4
批处理(Batch)
通常表明某计划任务启动
5
服务(Service)
每种服务都被配置在某个特定的用户账号下运行
7
解锁(Unlock)
屏保解锁/RDP会话重连接
8
网络明文(NetworkCleartext)
登录的密码在网络上是通过明文传输的,如FTP
9
新凭证(NewCredentials)
使用带/Netonly参数的RUNAS命令运行一个程序
10
远程交互(RemoteInteractive)
通过终端服务、远程桌面或远程协助访问计算机
11
缓存交互(CachedInteractive)
以一个域用户登录而又没有域控制器可用
可以通过筛选当前安全日志的方式,查看是否存在爆破纪录,如果存在大量、且时间连续的4625日志,说明存在爆破记录:
也可以筛选上面敏感的事件id进行分析,当前日志分析的前提是 日志完好的保存且记录配置正确
2. 日志文件 ¶ 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
3. wevtutil ¶ 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
4. PowerShell ¶ 除非你想快速确认某些内容并且有写好的 Powershell 脚本或者做自动化日志分析处理,不然不是很建议使用 Powershell 查询日志
Windows PowerShell同样提供了日志查询的相关命令程序:
Get-WinEvent
Get-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
用于旧版本的 Windows PowerShell,与 Windows Event Log 服务交互
可以获取指定日志名称的事件日志条目
常见用法示例:Get-EventLog -LogName System
Get-WinEvent
https://learn.microsoft.com/zh-cn/Powershell/module/microsoft.Powershell.diagnostics/get-winevent?view=Powershell-7.2
用于较新版本的 Windows PowerShell(从 Windows PowerShell 3.0 开始)
通过 Windows 事件日志 API(Event Log Service)与事件日志交互
提供更丰富的选项,例如条件过滤、排序、格式化等
可以使用强大的筛选器来选择特定的事件日志条目
常见用法示例:Get-WinEvent -LogName System
1) Get-WinEvent ¶ 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
这样就可以选择了
2) Get-EventLog ¶ 查询登录成功的日志
Get-EventLog -LogName Security -InstanceId 4624
如果想查询实际内容,与上面内容一样
5. Log Parser ¶ 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 以此类推
message, 使用“ ”(空格)对数据进行分割,方法与上面相同
上述帮助描述可以从官方文档中找到
根据上面的表格,我们即可通过相应的SQL语句进行查询:
查询事件id为登录失败的日志,并且要最近的开始展示, select * from security.evtx where eventid=4625 order by timegenerated desc
查询某个时间内的登录成功日志,并且要看所使用的用户名,ip,登录时间
extract_token(strings,5,‘|’) 结果为账户名
extract_token(message,38,’ ‘) 结果为登录ip,null为本地登录
timegenerated 结果为日志产生时间
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
以下为常用的查询语句:
查询登录成功的事件, 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'
6. LogParser Lizard ¶ LogParser Lizard是基于LogParser的GUI图形化程序。
这个程序也有几年没有更新了
https://www.lizard-labs.com/log_parser_lizard.aspx
优点:
相比于纯命令行化的LogParser,易于使用。
可以提前写好查询日志的SQL语句,即可直接使用。
展示结果来说,相比LogParser个人感觉要更好。
缺点:
官方安装包100MB+,并不适用很多环境。
需要安装,然后设置编写查询命令,也并不适用很多应急场景。
截图于官方网站:
7. evtxLogParser ¶
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返回结果样子完全一样
8. sysmon ¶ sysmon 是由 Windows Sysinternals 出品的一款 Sysinternals 系列工具之一,以系统服务和设备驱动程序的方式安装在系统上,会在系统重新启动时保持驻留状态,以监视和记录系统活动到Windows事件日志中,可以提供进程创建、网络连接、文件创建相关信息,同时收集或SIEM代理收集它生成的事件并随后对其进行分析,可以识别恶意或异常活动,并了解入侵者和恶意软件如何在用户网络上运行。
Sysmon不会对其生成的事件进行分析,也不会尝试保护自己免受攻击者攻击,因此仅作为监控工具而存在,允许其监视计算机上的某些活动并将其记录到Windows事件查看器。
在打开应用或者任何进程创建的行为发生时,Sysmon 会使用sha1(默认)、MD5、SHA256 或 IMPHASH 记录进程镜像文件的 hash 值,包含进程创建过程中的进程 GUID,每个事件中包含 session 的 GUID。除此之外记录磁盘和卷的读取请求 / 网络连接(包括每个连接的源进程,IP 地址,端口号,主机名和端口名),重要的是还可在生成初期进程事件能记录在复杂的内核模式运行的恶意软件。
优点:
系统服务级别的监控,监控信息详细且全面,具体的进程信息全部能够获取到。
轻量化,对系统影响非常小,安装完成后,就开始监控,同时耗费资源非常小。
缺点:
需要安装,适用于一些现场段时间排查无发现的情况下,可以尝试监控一段时间。
配合sysmontools里的sysmon view能够更好的分析,也不算是缺点,但是相关工具蛮大的。
相关配置文件繁琐复杂,编写难度比较高,github上有已经配置好的配置文件,但是生成的日志还是会有些多,所以单独编写配置文件过滤日志难度较高。
准备工作:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon
sysmonconfig-export.xml 配置文件下载链接:
https://github.com/SwiftOnSecurity/sysmon-config
https://github.com/nshalabi/SysmonTools
1) 安装 ¶ 首先下载 sysmon 安装程序,包含以下文件:
使用命令进行安装,安装之前需要将下载的 sysmonconfig-export.xml 配置文件放到当前文件夹,然后使用以下命令进行安装,需要注意的是, 安装过程需要用管理员权限,所以需要管理员启动cmd :
sysmon64.exe -accepteula -i sysmonconfig-export.xml # 默认设置进行安装,使用指定的配置文件xml
看到如下截图即代表安装完成:
2) 使用方法 ¶ 在事件查看器中,找到:
事件查看器–> 应用程序和服务日志–> Microsoft–> Windows–> Sysmon–> Operational
当前模块下所有日志即为sysmon监控记录的日志,可以点击某条日志,在下面板查看日志详情内容。
3) sysmon view可视化分析 ¶ 在 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)上报告任何错误。
9. LogonTracer ¶
https://github.com/JPCERTCC/LogonTracer
LogonTracer 是一种通过可视化和分析 Windows Active Directory 事件日志来调查恶意登录的工具。此工具将主机名(或 IP 地址)和帐户名关联到与登录相关的事件中,并将其显示为图形。这样,就可以查看哪个帐户尝试以及使用了哪个主机。
借用官网的图
10. FullEventLogView ¶
https://www.nirsoft.net/utils/full_event_log_view.html
FullEventLogView 是一款查看 Windows 日志的利器,可以将所有的日志根据时间线进行聚合显示,而且可以加载离线的日志文件,非常推荐使用
0x13 命令历史 ¶ 1) cmd命令行历史 ¶ Windows cmd命令行同样存在命令历史,可以通过相关命令/操作进行查询,但是需要注意的是:
cmd命令历史只能在未关闭的cmd命令窗中进行查询,如果cmd窗口关闭,或未通过cmd命令窗进行的命令操作,是不会记录的
原理为每次新建cmd窗口时,进程会开辟一处缓冲区用来写入相关命令历史,如果关闭窗口,即会清空
未关闭的cmd窗口 中输入:
doskey /? # 获取命令帮助 doskey /history # 获取当前cmd窗的命令历史
未关闭的cmd窗口中键入F7 :
2) Powershell 历史 ¶ Powershell 有两种历史记录的方式
参考 https://learn.microsoft.com/zh-cn/Powershell/module/microsoft.Powershell.core/about/about_history?view=Powershell-7.4
内置会话记录
和 cmd 的历史记录一样,也是关掉窗口就没了
还有三个简写命令,主打一个越来越简
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 的日志中记录的信息不是很有帮助,这里就不展示了
0x14 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
默认情况下都不存在这些文件
0x15 PowerShell 日志 ¶ Win + r 输入 eventvwr
应用程序和服务日志 -> Windows Powershell
0x16 PowerShell Alias ¶ 直接在 Powershell 命令行输入
【 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
0x17 服务程序 ¶ Windows服务是在Microsoft Windows操作系统中运行的后台应用程序。服务是一种特殊类型的进程,它们被设计为在操作系统启动时自动启动,并在操作系统运行期间持续运行,即使用户没有登录到系统也是如此。这使得它们能够在系统背后执行各种任务,如网络通信、文件共享、打印管理、安全性等。
1. services.msc ¶ win + r 中输入:
需要关注的点有:
1) 服务名称、描述等信息 ¶ 服务描述是否为空,为空项需要重点查看关注下
服务名称是否有明显异常的,异常的需要关注一下
2) 可执行文件、参数、启动类型 ¶ 点击服务项后,右键选择属性 -> 常规
关注 可执行文件 、 启动参数 、 启动类型
启动类型有以下几种
自动(延迟启动)是介于自动启动和手动启动之间的一种选项。当一个服务被配置为自动(延迟启动)时,在系统启动时并不会立即启动该服务,而是会延迟一段时间后再启动。这个延迟时间是由操作系统进行动态调整的,以确保系统启动过程的平稳性和效率。
3) 启动失败默认操作 ¶ 点击服务项后,右键选择属性 -> 恢复
这里定义了服务失败时触发的操作,如果设置的是运行一个程序,并且在图中运行程序处指定了非默认程序,则需要重点关注
4) 依存关系 ¶ 点击服务项后,右键选择属性 -> 依存关系
可疑的服务需要关注依存关系,停止服务时可能需要将依存关系服务都需要停止,依存次服务的服务可能也是异常服务
2. SC 命令 ¶ 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
3. PowerShell ¶
https://learn.microsoft.com/zh-cn/Powershell/scripting/samples/managing-services?view=Powershell-7.4
直接执行会显示所有的服务
这个信息可以用来对比被害系统是否有哪些默认不存在的服务
【 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 | 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" }
4. wmic ¶
这样会显示出所有服务的所有信息,比较乱套,尝试选择部分写入到 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
5. 注册表 ¶ 1) 服务列表 ¶ 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 来完成
$microsoftCNS = @('Microsoft Corporation', 'Microsoft Windows', 'Microsoft Windows Hardware Compatibility Publisher', 'Microsoft Update', 'Microsoft Windows Publisher') # 定义函数来进行签名校验 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') { $publisher = $signature.SignerCertificate.Subject # 解析发布者信息以提取 CN 字段的值 $cnValues = @(($publisher -split ', ' | Where-Object { $_ -like 'CN=*' }).Substring(3)) if ($cnValues.Count -eq 1) { $cnValue = $cnValues[0] # Write-Output "CN 字段的值: $cnValue" # 判断 CN 字段是否为微软官方 if ($microsoftCNS -contains $cnValue) { # Write-Output "CN 字段值为微软官方。" return "Valid" } } } return "Invalid" } 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 】默认情况
3) ServiceDll ¶ 服务启动部分是由 Windows 直接启动的,还有一部分是通过 svchost.exe 启动的
svchost.exe 是一个通用的 Windows 进程,用于托管和执行多个系统服务。它负责启动和管理在计算机上运行的许多服务。
以下是 svchost.exe 启动服务的工作原理:
服务注册:每个服务都在注册表中的特定位置注册,指定了服务的名称、可执行文件路径和其他相关信息。
svchost.exe, 根据注册表信息:当计算机启动时,操作系统读取注册表中的服务配置信息,并确定哪些服务需要由, svchost.exe, 托管。
创建, svchost.exe, 进程:根据注册表中的配置信息,操作系统创建一个或多个, svchost.exe, 进程,并为每个进程分配一个唯一的服务组标识。
加载 DLL:每个, 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 进行排查
$microsoftCNS = @('Microsoft Corporation', 'Microsoft Windows', 'Microsoft Windows Hardware Compatibility Publisher', 'Microsoft Update', 'Microsoft Windows Publisher') # 定义函数来进行签名校验 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') { $publisher = $signature.SignerCertificate.Subject # 解析发布者信息以提取 CN 字段的值 $cnValues = @(($publisher -split ', ' | Where-Object { $_ -like 'CN=*' }).Substring(3)) if ($cnValues.Count -eq 1) { $cnValue = $cnValues[0] # Write-Output "CN 字段的值: $cnValue" # 判断 CN 字段是否为微软官方 if ($microsoftCNS -contains $cnValue) { # Write-Output "CN 字段值为微软官方。" return "Valid" } } } return "Invalid" } 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 的升级版
属性里可以看到服务的类型
按照执行方式和运行上下文进行分类,有以下几个常见的服务类型
内核驱动程序(Kernel Driver):内核驱动程序是在操作系统内核级别运行的服务,用于提供对硬件设备或系统资源的访问和控制。这些驱动程序通常提供底层的系统功能和硬件驱动。
文件系统驱动程序(File System Driver):文件系统驱动程序是一种特殊类型的内核驱动程序,用于管理和处理文件系统的操作。它们负责将文件和目录的操作转化为物理存储设备上的读写操作。
独立进程(Own Process):独立进程服务以其自己的进程运行,每个服务实例都有自己的进程空间。这意味着每个服务实例都在单独的进程中运行,并且具有独立的内存空间。
共享进程(Share Process):共享进程服务以与其他服务共享的进程中运行。多个服务实例可以在同一个进程中运行,共享进程资源和内存空间。这种共享可以减少系统资源的使用。
而且可以看到 Permissions ,也就是权限
这里定义了服务的权限,网络上很多文章都是通过设置所有用户/用户组均不可以查询、更改服务,导致这些查询方法查询失败
7. Autoruns ¶ Autoruns 是 SysinternalsSuite 套件中一款工具,可以很方便查看包括计划任务等启动项排查
https://learn.microsoft.com/zh-cn/sysinternals/downloads/sysinternals-suite
8. 系统信息(msinfo32) ¶ 不知道这个程序是从哪代 Windows 加进来的,可以查看的信息不少
win + r 之后输入 msinfo32 或者直接搜索系统信息
9. 服务相关日志 ¶ Windows Server 2016 中主要在以下位置
服务相关的日志ID
事件ID 7034 – 服务意外崩溃
事件ID 7035 – 服务发送启动/停止控制。
事件ID 7036 – 服务启动或停止
事件ID 7040 – 启动类型更改(启动 | 按需 | 禁用)
事件ID 7045 – 系统上安装了一个服务
重点关注 7045 事件
10. 排查隐藏的服务 ¶ 针对仅通过 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 服务隐藏与排查
11. 进阶性排查 ¶ 排查所有的服务的启动文件签名情况,部分攻击者可能利用权限配置的不合理,通过替换服务启动的应用程序进行提权或者权限维持
$microsoftCNS = @('Microsoft Corporation', 'Microsoft Windows', 'Microsoft Windows Hardware Compatibility Publisher', 'Microsoft Update', 'Microsoft Windows Publisher') # 定义函数来进行签名校验 function Verify-FileSignature { param ( [Parameter(Mandatory=$true)] [string]$FilePath ) if (Test-Path -Path $FilePath -PathType Leaf) { $signature = Get-AuthenticodeSignature -FilePath $FilePath if ($signature.Status -eq 'Valid') { $publisher = $signature.SignerCertificate.Subject # 解析发布者信息以提取 CN 字段的值 $cnValues = @(($publisher -split ', ' | Where-Object { $_ -like 'CN=*' }).Substring(3)) if ($cnValues.Count -eq 1) { $cnValue = $cnValues[0] # 判断 CN 字段是否为微软官方 if ($microsoftCNS -contains $cnValue) { return "Valid" } } } return "Invalid" } return "File Not Found" } # 获取所有服务 $services = Get-WmiObject -Class Win32_Service | Where-Object { $_.PathName -ne $null } foreach ($service in $services) { $path = $service.PathName # 去掉双引号 if ($path.StartsWith('"') -and $path.EndsWith('"')) { $path = $path.Trim('"') } # 处理路径中包含空格的情况 $potentialPaths = @() $parts = $path -split ' ' for ($i = 0; $i -lt $parts.Length; $i++) { $potentialPath = ($parts[0..$i] -join ' ') if (Test-Path -Path $potentialPath -PathType Leaf) { $potentialPaths += $potentialPath } elseif (Test-Path -Path "$potentialPath.exe" -PathType Leaf) { $potentialPaths += "$potentialPath.exe" } if ($potentialPaths.Length -ge 1) { break } } # 逐个验证找到的可执行文件路径 foreach ($potentialPath in $potentialPaths) { $result = Verify-FileSignature -FilePath $potentialPath if ($result -ne 'Valid') { Write-Host "---------------------------------------" Write-Host "Service Name: $($service.Name)" Write-Host "Executable Path: $potentialPath" Write-Host "Signature Status: $result" Write-Host "" } } }
【 Windows Server 2016 】默认情况
0x18 远程桌面 RDP ¶ 1. 注册表查询 RDP 记录 ¶ 所有本机连接过的远程桌面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 连接其他服务器的信息,每台服务器只会记录最后一次登录的账户信息
0x19 DLL 检查 ¶ 在安全模式下 DLL 搜索顺序如下
DLL 重定向
API sets
SxS manifest redirection
Loaded-module list
Known DLLs
流程的包依赖关系图 (, Windows 11,版本 21H2 (10.0;内部版本 22000) 及更高版本, )
应用程序的文件夹
系统文件夹 (, C:\Windows\System32, ) 使用, GetSystemDirectoryA, 函数检索此文件夹的路径
16 位系统文件夹 (, C:\Windows\System, ) 没有获取此文件夹路径的函数,但会对其进行搜索
Windows 文件夹 (, 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 排查其实分散在常规安全检查的各种部分
1. 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
这里需要注意,检测过程中会启动被检测的应用程序,请在隔离的虚拟机里测试
2. DLL 注入 ¶ DLL注入涉及的注册表项是 AppInit_DLLs 。它是一个注册表键值, AppInit_DLLs 注册表项的作用是指示操作系统在每个用户登录时加载指定的 DLL 文件
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows中 Appinit_Dlls 的值
【 Windows Server 2016 】默认情况
AppInit_DLLs 键的值是空的
3. KnownDLLs ¶ 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"
应急响应过程中可以看看是否有缺少的
0x20 WMI 排查 ¶ WMI 主要是创建 WMI 事件订阅实现持续控制,通常事件订阅是临时性的,会话结束后就会停止, WMI永久事件订阅 ,可以创建长期有效的订阅,即使订阅会话已经结束,订阅仍然持续存在。
WMI 事件订阅中有三个角色
事件过滤器(Event Filter):事件过滤器定义了订阅的事件条件。它指定了需要监听的WMI对象或类以及要监控的属性或方法的条件。事件过滤器使用WMI查询语言(WQL)来描述事件的筛选条件。
事件消费者(Event Consumer):事件消费者定义了在事件发生时要执行的操作。它可以是一个命令行、脚本或可执行文件,也可以是自定义的WMI操作。事件消费者根据事件的特定属性执行相应的操作。
绑定(Binding):绑定将事件过滤器和事件消费者连接起来,以建立订阅关系。绑定将事件过滤器与事件消费者相关联,使得在事件满足过滤器条件时,相应的事件消费者将被触发执行。
这听起来很像是 if…then 或者说信号与槽
攻击者通过事件过滤器定义要监听的操作,之后再定义监听到操作后要执行的动作,最后将两者绑定起来
排查思路就是找出当前系统所有命名空间的过滤器、消费者、绑定
经过测试发现, \root\subscription 和 \root\DEFAULT 两个命名空间均可以实现事件订阅后门,这在很多文章中并未提及,大家需要额外注意
部分文章指出 Autoruns 删除 WMI 后门效果不好,这不严谨,详情可以看后续部分
1. wmic ¶ 查询过滤器
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
过滤器
消费者
绑定
2. Powershell ¶ 查询过滤器
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 】默认情况
过滤器
消费者
绑定
脚本执行情况
3. Autoruns ¶ Autoruns 是由 Sysinternals(微软的一部分)提供的免费工具,它可以显示 Windows 启动时加载的所有程序、服务、驱动程序和其他自启动项。您可以从 Microsoft 官网下载并使用它。
https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns
Autoruns 默认会监控上面提到的两个命名空间的绑定( binding )信息,可以右键进行删除
4. 删除 WMI 后门 ¶ 这里以 \root\subscription 命名空间为例
1) wmic ¶ 删除过滤器
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
2) Powershell ¶ 删除过滤器
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() }
3) Autoruns ¶
部分文章指出 Autoruns 删除 WMI 效果不好,其实这种表述是不严谨的
Autoruns 删除并不是将过滤器、消费者、绑定都删除,而是只删除消费者,经过测试发现,过滤器、消费者、绑定三者之一任何一个删除 WMI 事件订阅效果都会立即消失
所以 Autoruns 删除消费者是有效的,而且是一种相对合理的方式,因为如何直接将三者均删掉,可能过滤器和绑定原本就是运维人员需要的,只是消费者被篡改了,这样可以保护过滤器和绑定
所以应急响应过程中,确定好三者,不要着急删除
5. 非常规查询 ¶ 这部分不是常规的检查,属于是比较严谨的检查,可以根据实际情况考虑是否排查
主要排查以下内容
当前操作系统中的, WMI, 命名空间
所有, WMI, 命名空间中包含, CommandLineEventConsumer, 类
所有, WMI, 中存在的过滤器、消费者、绑定
1. 查询 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
2. 查询包含 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 】默认情况
3. 查询所有 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 剩下都是空的
0x21 最近打开的文件 ¶ 是windows下用户打开的文档历史文件记录
win + r 输入 Recent
这一般用户确定某个用户已经失陷,之后切到该用户后排查的项
0x22 敏感文件夹检查 ¶
临时目录
垃圾桶目录
被删除用户的家目录
public 目录
web目录
1. 临时目录 ¶ 1) 用户临时目录 ¶
每个用户都有临时目录,通常为 C:\Users\AppData\Local\Temp
2) 系统临时目录 ¶
2. 垃圾桶目录 ¶ 每个本地硬盘分区都有一个隐藏的系统文件夹用于存储该分区删除的文件。回收站的实际物理路径通常是:
如何进入该目录呢?
cd /d %SystemDrive%\$Recycle.Bin
3. 被删除的用户家目录 ¶ 经过测试,默认情况下如果用户被删除,其家目录是不会被删除的,可以通过对比用户家目录和用户,查看是否存在异常
4. public 目录 ¶ 也就是公用目录,如上图所示
5. web 目录 ¶ web 目录具体位置就取决于使用的 web 服务器的配置了可以考虑使用 webshell 检测工具和杀毒软件进行检测
0x23 系统完整性检查 ¶
sigverif 是一个用于验证 Windows 系统文件签名的命令行工具。它可以检查系统文件是否被篡改或损坏,以确保系统的完整性和安全性。
sigverif 命令可以检查所有系统文件,包括驱动程序、系统组件、应用程序等。它通过比较系统文件的哈希值与已知的正确哈希值来验证文件的完整性。如果文件的哈希值与已知的正确哈希值匹配,则文件未被篡改;如果不匹配,则文件可能已被篡改或损坏。
如果想看详细的内容,可以点击高级,去日志中查看
0x24 Bits Job 检查 ¶ bitsadmin /list /allusers /verbose
列出所有任务
Windows Server 2016 中提示 bitsadmin 已经被弃用了,现在都通过 Powershell 来管理 bits 服务
如果发现存在攻击者留下的 Job ,可以使用下面的命令删除
Remove-BitsTransfer -BitsJob <BitsJob>
0x25 浏览器排查 ¶ 浏览器排查主要有三个方面
这里还是以自带的 ie 浏览器为例, Chrome、Edge、Firefox 大家肯定都会检查
1. 下载记录 ¶
2. 访问记录 ¶
3. 浏览器插件 ¶
0x26 屏幕保护排查 ¶
HKEY_CURRENT_USER\Control Panel\Desktop
SCRNSAVE.exe, 设置为恶意 PE 路径
ScreenSaveActive, - 设置为“1”以启用屏幕保护程序
ScreenSaverIsSecure, - 设置为“0”无需密码即可解锁
ScreenSaveTimeout, - 在执行屏幕保护程序之前设置用户不活动超时
在 Windows Server 2016 中,默认没有 SCRNSAVE.exe ,如果检查过程中发现该项,可以重点关注
【 Windows Server 2016 】默认情况
0x27 NetSh 排查 ¶
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
0x28 辅助功能程序 ¶ 比较经典的是替换粘滞键,未登录情况下通过连按 5 下 shift 进行获取shell
功能名称
文件位置
粘滞键
C:\Windows\System32\sethc.exe
实用程序管理器
C:\Windows\System32\utilman.exe
屏幕键盘
C:\Windows\System32\osk.exe
放大镜
C:\Windows\System32\Magnify.exe
讲述人
C:\Windows\System32\Narrator.exe
显示切换器
C:\Windows\System32\DisplaySwitch.exe
应用程序切换器
C:\Windows\System32\AtBroker.exe
可以通过沙箱或者签名进行验证,这里需要注意: cmd.exe 这种程序也是有微软签名的,不能仅用签名进行验证
签名验证可以参考知识点附录 -> 如何验证程序签名
0x29 AppCert DLLs ¶
AppCert DLLs是一个Windows注册表项,通常用于控制应用程序的证书验证。当有进程使用了CreateProcess、CreateProcessAsUser、CreateProcessWithLoginW、CreateProcessWithTokenW或WinExec等函数时,这些进程会获取HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\AppCertDlls注册表项,此项下的dll都会加载到此进程。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\AppCertDlls
存在后门时可能是这个样子
图片来源 https://blog.csdn.net/qq_36374896/article/details/107005578
【 Windows Server 2016 】默认情况
Windows Server 2016 中默认没有这个注册表项
0x30 AppInit DLL ¶ AppInit DLL(Application Initialization DLL)是一种在Windows操作系统中使用的动态链接库(DLL)。它的作用是在应用程序加载时,可以用于执行自定义的初始化和配置操作。
下面是AppInit DLL的一些常见用途和功能:
应用程序初始化:AppInit DLL可以用于执行应用程序的初始化操作。例如,它可以加载应用程序所需的其他依赖项、设置环境变量、初始化全局变量等。
钩子和拦截:AppInit DLL可以用于创建钩子(hook)和拦截应用程序的函数调用。通过拦截应用程序的API调用,AppInit 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 】默认情况
默认情况下存在该键,两个位置都是空的
0x31 Application Shimming ¶ 这是一种在Windows操作系统中使用的兼容性技术,旨在解决应用程序在不同操作系统版本上的兼容性问题。Application Shimming 的原理是在应用程序执行时,通过注入特定的代码或修改应用程序的行为,来实现兼容性修复或功能增强。这些修改通常是通过Shim引擎来实现的,Shim引擎会拦截和修改应用程序的API调用。
攻击者可能会利用Application Shimming 来创建后门的原因包括:
拦截和修改应用程序的行为:Shim引擎可以拦截应用程序的API调用,并修改它们的行为。攻击者可以利用这一特性,将恶意代码注入到应用程序中,以实现远程控制、数据窃取、命令执行等恶意操作。
绕过安全措施:Application Shimming 可以绕过一些安全措施,如防火墙、杀毒软件等。攻击者可以利用这一特性,使恶意行为在被安全软件检测之前或之后执行,从而避免被检测和阻止。
持久性访问:由于Application Shimming 通常是通过注册表设置或文件劫持来实现的,攻击者可以利用这些机制来维持持久性访问。他们可以修改注册表项或替换系统文件,以确保每次应用程序启动时都会加载恶意的Shim代码。
默认 Windows 安装程序 ( sdbinst.exe ) 当前安装的所有填充码的列表保存在:
%WINDIR%\AppPatch\sysmain.sdb
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
自定义数据库存储在:
%WINDIR%\AppPatch\custom & %WINDIR%\AppPatch\AppPatch64\Custom
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom
缓存位置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
这里都是二进制数据,虽然能看到字符,建议只用来做参考
【 Windows Server 2016 】默认情况
默认
自定义
0x32 IFEO Injection 排查 ¶ 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 将软件功能划分为独立的组件,每个组件可以独立开发、测试和部署。这样的组件化方式使得软件开发更加模块化、可维护性更强。
接口定义:COM 使用接口(Interface)来定义组件之间的通信规范。每个组件提供一个或多个接口,其他组件可以通过接口访问组件的功能。
组件注册:COM 组件需要在操作系统中进行注册,以便其他应用程序能够找到和使用这些组件。注册表中存储了组件的相关信息,包括组件的唯一标识符(CLSID)和接口标识符(IID)等。
运行时环境:COM 提供了一个运行时环境,负责加载和实例化组件,并管理组件之间的通信。运行时环境处理了组件的生命周期、对象的创建和销毁、接口的查询和调用等。
COM 劫持与 DLL 劫持原理差不多,都是在文件寻找过程上下文章,默认情况下也是不太好检查,可以想象一下,无非就是一下几种情况
在加载顺序更靠前的地方放置同名文件
直接替换要被读取的文件
向要被读取的文件中注入自定义恶意代码
通常是通过注册表找到具体要读取的文件,查找注册表顺序如下
HKEY_CURRENT_USER\Software\Classes\CLSID
HKEY_CLASSES_ROOT\CLSID
HKEY_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 劫持
1. 排查注册表 ¶ 我们首先要进行的检查就是 HKCU\Software\Classes\CLSID\ 下所有的 COM 组件
这些注册表项中的子项 InprocServer32 是我们要关注的,它指定了COM组件的DLL文件路径。
【 Windows Server 2016 】默认情况
默认情况下 HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID 是空的
如果排查过程中发现存在相关设置,可以重点关注,通过验证签名,病毒扫描等方式进行检查
如果攻击者比较变态,直接替换了文件或者向文件中注入了恶意代码,而不是劫持加载顺序,那么上面的排查就不会发现了,我们尝试将验证所有的 COM 组件的 DLL 签名
当然了,还是用 Powershell 来实现
$microsoftCNS = @('Microsoft Corporation', 'Microsoft Windows', 'Microsoft Windows Hardware Compatibility Publisher', 'Microsoft Update', 'Microsoft Windows Publisher') # 定义函数来进行签名校验 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') { $publisher = $signature.SignerCertificate.Subject # 解析发布者信息以提取 CN 字段的值 $cnValues = @(($publisher -split ', ' | Where-Object { $_ -like 'CN=*' }).Substring(3)) if ($cnValues.Count -eq 1) { $cnValue = $cnValues[0] # Write-Output "CN 字段的值: $cnValue" # 判断 CN 字段是否为微软官方 if ($microsoftCNS -contains $cnValue) { # Write-Output "CN 字段值为微软官方。" return "Valid" } } } return "Invalid" } 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 组件
3. 杀毒程序扫描 ¶ 这个就不多说了,大家选择已有或者合适的杀毒程序
0x34 Password Filter ¶ 密码过滤器是一种安全功能,用于在用户更改密码时对密码进行验证和强制规则。它允许系统管理员定义一组自定义规则和策略,以确保用户设置的密码符合安全要求。
密码过滤器的主要目的是增强密码的复杂性和强度,从而提高系统的安全性。它可以执行以下任务:
强制密码策略:密码过滤器可以强制实施密码策略,例如密码长度、复杂性、过期时间等要求。这有助于确保用户选择的密码具有足够的复杂性,不容易被猜测或破解。
检查常见密码:密码过滤器可以检查用户设置的密码是否属于常见密码列表中。这有助于防止使用容易猜测的密码,如, 123456, 、, password, 等。
自定义验证规则:管理员可以定义自定义验证规则,以满足特定的安全需求。例如,要求密码包含特定字符、不允许使用特定单词或模式等。
通知和警告:密码过滤器可以向用户提供有关密码复杂性要求的通知和警告,以帮助他们创建符合要求的密码。
通过密码过滤器,管理员可以确保用户设置的密码符合组织的安全策略,并提高整个系统的安全性。它是一项重要的安全措施,用于防止弱密码和密码猜测攻击,从而降低系统遭受密码相关威胁的风险。
攻击者常常利用这个功能窃取用户的明文密码,当然主要是新用户
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\ 的 Notification Packages 键对应的值
这些都是 DLL 只不过这里不写 .dll
【 Windows Server 2016 】默认情况
0x35 Network Provider ¶ 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
0x36 Winsock NSP ¶ WinSock NSP(WinSock Namespace Provider)是指在 Windows 操作系统中实现网络套接字编程接口(Socket API)的组件之一。它负责提供网络通信的底层功能,使应用程序能够通过网络进行数据传输。
WinSock NSP 通过一组动态链接库(DLL)来实现,这些 DLL 包含了实现网络协议栈和通信协议的代码。它们提供了一种标准化的编程接口,使开发人员能够使用常见的网络协议(如TCP/IP、UDP)进行网络通信。
通过 WinSock NSP,开发人员可以创建套接字、建立连接、发送和接收数据等网络操作。它提供了一系列函数和数据结构,使应用程序能够方便地进行网络编程,实现网络通信功能
WinSock NSP 后门的原理如下:
劫持或替换 Namespace Provider DLL:攻击者通过劫持或替换系统中的 Namespace Provider DLL 文件来实现后门功能。Namespace Provider DLL 是实现命名空间提供者功能的动态链接库,用于处理网络命名空间的解析和操作。
注册恶意 Namespace Provider:攻击者可以注册一个恶意的 Namespace Provider,将其注入到系统的 Namespace Provider 链表中。这样,当应用程序进行网络命名空间解析时,恶意的 Namespace Provider 将被调用,攻击者可以在其中进行拦截、篡改或记录网络流量。
修改 Namespace Provider 设置:攻击者可以修改系统中的 Namespace Provider 设置,例如修改优先级顺序、修改默认的命名空间解析规则等。这样,攻击者可以将网络流量重定向到恶意的服务器或进行其他恶意操作。
注册表位置
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 ,之后进行签名验证
$microsoftCNS = @('Microsoft Corporation', 'Microsoft Windows', 'Microsoft Windows Hardware Compatibility Publisher', 'Microsoft Update', 'Microsoft Windows Publisher') # 定义函数来进行签名校验 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') { $publisher = $signature.SignerCertificate.Subject # 解析发布者信息以提取 CN 字段的值 $cnValues = @(($publisher -split ', ' | Where-Object { $_ -like 'CN=*' }).Substring(3)) if ($cnValues.Count -eq 1) { $cnValue = $cnValues[0] # Write-Output "CN 字段的值: $cnValue" # 判断 CN 字段是否为微软官方 if ($microsoftCNS -contains $cnValue) { # Write-Output "CN 字段值为微软官方。" return "Valid" } } } return "Invalid" } 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 】默认情况
0x37 Windows Defender 日志 ¶ 1. 通过 Defender 程序 ¶ 直接搜索 Defender
这三个项都可以查看详细信息看一下
2. 通过事件查看器 ¶
应用程序和服务日志 -> Microsoft -> Windows -> Windows Defender -> Operational
相关事件 ID
事件ID
事件内容
1000
反恶意软件扫描启动
1001
反恶意软件扫描已完成
1002
反恶意软件扫描在完成之前已停止
1003
反恶意软件扫描已暂停
1005
反恶意软件扫描失败
1006
反恶意软件引擎发现恶意软件或其他可能不需要的软件
1007
反恶意软件平台执行了一项操作来保护系统免受恶意软件或其他可能不需要的软件的攻击
1008
反恶意软件平台尝试执行操作来保护系统免受恶意软件或其他可能不需要的软件的攻击,但操作失败
1009
反恶意软件平台从隔离区中还原了项
1011
反恶意软件平台从隔离区中删除了项目
1013
反恶意软件平台删除了恶意软件和其他可能不需要的软件的历史记录
1015
反恶意软件平台检测到可疑行为
1116
反恶意软件平台检测到恶意软件或其他可能不需要的软件。
1117
反恶意软件平台执行了一项操作来保护系统免受恶意软件或其他可能不需要的软件的攻击
更多事件ID以及含义查看以下官方链接 https://learn.microsoft.com/zh-cn/microsoft-365/security/defender-endpoint/troubleshoot-microsoft-defender-antivirus?view=o365-worldwide
0x38 防火墙配置 ¶ 1. 防火墙开关 ¶ 查看防火墙当前状态
win+r 中输入:
firewall.cpl # 快速打开Windows Defender 防火墙设置页面
进行查看当前防火墙状态
2. 防火墙允许的应用 ¶ 允许应用或功能通过 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
网络发现与系统最初设置有关
3. 防火墙出入站策略 ¶ win + r 中输入
【 Windows Server 2016 】 默认情况
0x39 pathext 排查 ¶ pathext 是 Windows 的一个环境变量,它的意义是当执行 testapp 时,该如何查找要执行的文件
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
通过 pathext 环境变量可以明确,会按照下面的顺序查找
testapp.com
testapp.exe
testapp.bat
…
至于去那里查找,那就是当前目录以及 PATH 环境变量的事情了。 我们需要关注的是 pathext 是否被增加了其他后缀,是否存在劫持的可能
【 Windows Server 2016 】默认情况
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
0x40 Sandbox 排查 ¶ 部分恶意攻击者开始使用 Windows 自带的 Sandbox 来制造隔离环境,逃避杀软检测,目前该技术只在 Windows ^10^⁄11 等系统中存在
Windows Sandbox 默认关闭,可以使用下面的 PowerShell 命令进行查看
Get-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM"
也可以通过 DISM 命令查询
DISM /Online /Get-FeatureInfo /FeatureName:Containers-DisposableClientVM
参考文章: https://www.welivesecurity.com/en/eset-research/operation-akairyu-mirrorface-invites-europe-expo-2025-revives-anel-backdoor/ https://blog-en.itochuci.co.jp/entry/2025/03/12/140000
0x41 Windows 空格路径截断排查 ¶ 在 Windows 系统中,部分程序在解析程序路径时,遇到存在空格的路径,如果没有使用双引号包裹,可能存在截断的问题,这个问题我们在 Windows 服务的文章中已经有提到,但是我发现不同程序的处理是不一样的,因此我们采取相对严格的排查策略
如果系统中存在 C:\t m p\a b c.exe ,那么我们应该检查以下文件是否存在 - C:\t - C:\t.com - C:\t.exe
其他后缀,具体根据 pathext 环境变量
C:\t m
C:\t m.com
C:\t m.exe
其他后缀,具体根据 pathext 环境变量
C:\t m p\a
C:\t m p\a.com
C:\t m p\a.exe
其他后缀,具体根据 pathext 环境变量
C:\t m p\a b
C:\t m p\a b.com
C:\t m p\a b.exe
其他后缀,具体根据 pathext 环境变量
下面提供 PowerShell 和 Go 语言两个版本的排查脚本
https://github.com/Just-Hack-For-Fun/Check_Path_Blank
PowerShell ¶ check_path_blank.ps1 <path>
可以指定检查路径,例如 C:\ ,如果不加参数。默认会检查所有的盘符的所有路径,包括共享盘符
param( [Parameter(ValueFromRemainingArguments = $true)] [string[]]$Paths ) $startTime = Get-Date # 如果没有参数,获取所有本地盘符 if (-not $Paths -or $Paths.Count -eq 0) { $Paths = (Get-PSDrive -PSProvider 'FileSystem' | Where-Object { $_.Root -match '^[A-Z]:\\$' }).Root } # 获取可执行扩展名数组 $pathexts = $env:PATHEXT.ToLower().Split(';') | ForEach-Object { $_.TrimStart('.') } | Where-Object { $_ } Write-Host "`n检测带空格路径的截断前缀可执行文件风险" -ForegroundColor Cyan foreach ($rootPath in $Paths) { Write-Host "`n扫描路径: $rootPath" -ForegroundColor Gray # 递归扫描所有文件和文件夹 Get-ChildItem -LiteralPath $rootPath -Recurse -Force -ErrorAction SilentlyContinue | Where-Object { $_.FullName -match '\s' } | # 路径含空格 ForEach-Object { $fullPath = $_.FullName $baseRoot = $rootPath if ($fullPath.StartsWith($baseRoot)) { $relativePath = $fullPath.Substring($baseRoot.Length) } else { $relativePath = $fullPath } if (-not $_.PSIsContainer) { $spaceIndexes = (0..($relativePath.Length - 1)) | Where-Object { $relativePath[$_] -eq ' ' } foreach ($spaceIdx in $spaceIndexes) { $prefix = $relativePath.Substring(0, $spaceIdx) $checkBase = Join-Path $baseRoot $prefix if (Test-Path $checkBase -PathType Leaf) { Write-Host "发现可疑文件: $checkBase (截断自 $fullPath)" -ForegroundColor Yellow } foreach ($ext in $pathexts) { $exePath = "$checkBase.$ext" if (Test-Path $exePath -PathType Leaf) { Write-Host "发现可疑可执行文件: $exePath (截断自 $fullPath)" -ForegroundColor Red } } } } } } $endTime = Get-Date $duration = $endTime - $startTime Write-Host "`n扫描开始时间: $startTime" Write-Host "扫描结束时间: $endTime" Write-Host ("总耗时: {0:hh\:mm\:ss}" -f $duration)
Golang ¶ # 编译 go build -o check_path_blank.exe check_path_blank.go # 使用 check_path_blank.exe <path>
可以指定检查路径,例如 C:\ ,如果不加参数。默认会检查所有的盘符的所有路径,包括共享盘符
Golang 语言的程序可能比 PowerShell 效率更高一些
package main import ( "fmt" "os" "path/filepath" "strings" "time" ) // 获取当前系统的 PATHEXT 并返回小写的扩展名(不带点) func getPathexts() []string { pathext := os.Getenv("PATHEXT") if pathext == "" { pathext = ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL" } items := strings.Split(strings.ToLower(pathext), ";") var result []string for _, ext := range items { ext = strings.TrimSpace(ext) ext = strings.TrimPrefix(ext, ".") if ext != "" { result = append(result, ext) } } return result } // 获取所有本地盘符(大写且存在的) func getAllDrives() []string { var drives []string for c := 'C'; c <= 'Z'; c++ { drive := fmt.Sprintf("%c:\\", c) if _, err := os.Stat(drive); err == nil { drives = append(drives, drive) } } return drives } // 针对每个空格前缀检查是否有风险文件 func checkPrefixRisk(fullPath string, baseRoot string, pathexts []string) { if !strings.Contains(fullPath, " ") { return } relativePath := fullPath // 计算相对路径 if strings.HasPrefix(strings.ToLower(fullPath), strings.ToLower(baseRoot)) { relativePath = fullPath[len(baseRoot):] } spaceIndexes := []int{} for idx, c := range relativePath { if c == ' ' { spaceIndexes = append(spaceIndexes, idx) } } for _, idx := range spaceIndexes { prefix := relativePath[:idx] base := filepath.Join(baseRoot, prefix) if fi, err := os.Stat(base); err == nil && !fi.IsDir() { fmt.Printf("[可疑文件] %s (截断自 %s)\n", base, fullPath) } for _, ext := range pathexts { exePath := base + "." + ext if fi, err := os.Stat(exePath); err == nil && !fi.IsDir() { fmt.Printf("[可疑可执行文件] %s (截断自 %s)\n", exePath, fullPath) } } } } func main() { startTime := time.Now() args := os.Args[1:] var rootDirs []string if len(args) == 0 { rootDirs = getAllDrives() if len(rootDirs) == 0 { fmt.Println("未找到任何可用盘符。") return } } else { rootDirs = args } pathexts := getPathexts() fmt.Printf("检测带空格路径的截断前缀可执行文件风险\n") fmt.Printf("开始扫描,请耐心等待... 开始时间: %v\n", startTime.Format("2006-01-02 15:04:05")) for _, root := range rootDirs { fmt.Printf("\n扫描路径: %s\n", root) filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { if err != nil { return nil } if !d.IsDir() { checkPrefixRisk(path, root, pathexts) } return nil }) } endTime := time.Now() duration := endTime.Sub(startTime) fmt.Printf("\n扫描开始时间: %v\n", startTime.Format("2006-01-02 15:04:05")) fmt.Printf("扫描结束时间: %v\n", endTime.Format("2006-01-02 15:04:05")) fmt.Printf("总耗时: %v\n", duration.Round(time.Second)) }
【 Windows Server 2016 】默认情况
检测带空格路径的截断前缀可执行文件风险 扫描路径: C:\ 发现可疑文件: C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps (截断自 C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps Icons) 发现可疑文件: C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps (截断自 C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps Icons-journal) 发现可疑文件: C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64) 发现可疑文件: C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 Critical) 发现可疑文件: C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 Critical) 发现可疑文件: C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 Critical) 发现可疑文件: C:\Windows\System32\Tasks\Microsoft\Windows\Data Integrity Scan\Data Integrity Scan (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\Data Integrity Scan\Data Integrity Scan for Crash Recovery) 发现可疑可执行文件: C:\Windows\WinSxS\amd64_microsoft-windows-iis-legacysnapin_31bf3856ad364e35_10.0.14393.0_none_ae953f82c8b8a231\IIS6.msc (截断自 C:\Windows\WinSxS\amd64_microsoft-windows-iis-legacysnapin_31bf3856ad364e35_10.0.14393.0_none_ae953f82c8b8a231\IIS6 Manager.lnk) 发现可疑可执行文件: C:\Windows\WinSxS\amd64_microsoft-windows-iis-managementconsole_31bf3856ad364e35_10.0.14393.0_none_b54808dbd1ca2029\IIS.msc (截断自 C:\Windows\WinSxS\amd64_microsoft-windows-iis-managementconsole_31bf3856ad364e35_10.0.14393.0_none_b54808dbd1ca2029\IIS Manager.lnk)
检测带空格路径的截断前缀可执行文件风险 开始扫描,请耐心等待... 开始时间: 2025-07-17 21:55:58 扫描路径: C:\ [可疑文件] C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps (截断自 C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps Icons) [可疑文件] C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps (截断自 C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default\HubApps Icons-journal) [可疑文件] C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64) [可疑文件] C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 Critical) [可疑文件] C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64 Critical) [可疑文件] C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 Critical) [可疑文件] C:\Windows\System32\Tasks\Microsoft\Windows\Data Integrity Scan\Data Integrity Scan (截断自 C:\Windows\System32\Tasks\Microsoft\Windows\Data Integrity Scan\Data Integrity Scan for Crash Recovery) [可疑可执行文件] C:\Windows\WinSxS\amd64_microsoft-windows-iis-legacysnapin_31bf3856ad364e35_10.0.14393.0_none_ae953f82c8b8a231\IIS6.msc (截断自 C:\Windows\WinSxS\amd64_microsoft-windows-iis-legacysnapin_31bf3856ad364e35_10.0.14393.0_none_ae953f82c8b8a231\IIS6 Manager.lnk) [可疑可执行文件] C:\Windows\WinSxS\amd64_microsoft-windows-iis-managementconsole_31bf3856ad364e35_10.0.14393.0_none_b54808dbd1ca2029\IIS.msc (截断自 C:\Windows\WinSxS\amd64_microsoft-windows-iis-managementconsole_31bf3856ad364e35_10.0.14393.0_none_b54808dbd1ca2029\IIS Manager.lnk)
参考文章: https://mp.weixin.qq.com/s/_OLwgWbrnAhXLGdc0n_Kaw