前言
凭证访问包括窃取凭证(如 Cookie、API 密钥和密码)的技术。它是攻击生命周期中几乎必然发生的最重要的策略之一,范围从网络钓鱼到信息窃取恶意软件,再到更复杂的后渗透技术。因此,从不同角度进行覆盖可以增加早期检测和预防的机会。Elastic Endpoint Security 7.15 添加了新的文件和注册表事件,以便为防御者提供更好的可见性,了解涉及某种形式的敏感文件和/或注册表对象访问的技术和过程。
- T1555.003 来自 Web 浏览器的凭证
- T1003.002 安全帐户管理器
- T1003.004 LSA 机密
- T1003.005 缓存的域凭证
- T1552.001 文件中的凭证
- T1555.004 Windows 凭据管理器
搜索凭证访问
启用 Endpoint Security 集成后,您可以使用通用的 KQL 或 EQL 查询来探索这些新事件
用于查看文件和注册表事件的 KQL 和 EQL 查询。
// EQL via Security -> Timelines -> New -> Correlation
any where event.category in ("file", "registry")
and event.action in ("query", "open")
// KQL via Discover
event.category : ("file" or "registry")
and event.action : ("open" or "query")
下面,您可以看到运行两个已知的安全评估工具的结果,这些文件事件被记录下来:Lazagne 和 Seatbelt。这些工具包括对常用软件中使用的多种凭证和有趣文件的检查
以下是一些示例注册表事件,这些事件是由于运行 Mimikatz(lsadump::sam、cache、lsa 和 secrets 子模块)和 Seatbelt(PuttyHostKeys SSH 枚举)的结果而记录的
利用 EQL 的关联功能,将这些新事件与其他事件类别(例如进程、注册表、网络和/或
身份验证)联系起来,是检测和搜索的一个重要工具。
process.entity_id 字段是一个全局唯一标识符,用于缓解 PID 重复使用以及随着时间的推移识别特定进程。
此 EQL 查询使用 process.entity_id 字段来检测在短时间内访问多个敏感文件的进程,这通常比查找单个文件访问的置信度更高
在短时间内访问多个敏感文件的进程
sequence by process.entity_id with maxspan=1m
[process where event.action == "start"]
// at least 3 unique file.paths, runs=* is supported in EQL 7.16+
[file where event.action == "open"] with runs=3
这是一个匹配 3 种不同且不相关的凭证类型(电子邮件、DPAPI 系统 MasterKey 和 Sysprep 无人值守)的示例
现在,让我们搜索通过 SMB 远程访问敏感文件,例如以下内容
我们可以使用 EQL 检测此行为,EQL 将远程登录事件(4624)与同一用户的敏感文件访问相关联
将远程登录与敏感文件访问相关联
sequence by host.id with maxspan=5m
[authentication where event.action == "logged-in" and
/* event 4624 need to be logged */
winlog.logon.type : "Network" and
event.outcome == "success" and source.ip != null and
source.ip != "127.0.0.1" and
source.ip != "::1"] by winlog.event_data.TargetUserSid
/* requires Elastic Endpoint Security Integration 7.15+ */
[file where event.action == "open" and process.pid == 4] by user.id
上述查询结果关联了相关字段,如 source.ip、user.id 和 file.path
行为保护
除了能够在检测规则中使用这些事件外,Elastic Endpoint Security 还包括内置的恶意行为保护规则,这些规则可以自动响应高可信度、高度可疑的敏感文件/注册表访问。
例如,在这里我们可以看到 Elastic Endpoint 的行为保护规则捕获到
- LSASecretsdumper - 使用 LsaOpenSecret 和 LsaQuerySecret API 窃取 LSA 机密。
- Mimikatz(lsadump:sam 和 secrets 模块) - 用于从 SAM 和 LSA 注册表项转储凭据的模块。
- Lazagne(DPAPI MasterKeys 访问)- 窃取 MasterKey 以解密 DPAPI 保护的资源。
以下是不同信息窃取者(Poulight Stealer、AgentTesla)对 Chrome 登录数据文件访问的检测,包括 lolbins(powershell 脚本)
以下是一些常见的窃取者 AgentTesla 和 FormBook 访问 Windows 凭据管理器存储的示例检测
受监控的文件和注册表路径
下面列出了当前受监控的文件和注册表路径列表。由于数据量和性能问题,对于列表中的给定文件或注册表模式,Elastic Endpoint 仅针对每个 process.entity_id 生成一个事件。从检测的角度来看,这不会造成任何可见性差距,因为我们在任何进程执行的第一次文件或注册表访问时发出事件。
受监控的注册表路径
registry_paths:
# SAM - Encrypted Local Account Pwd hashes
- '\REGISTRY\MACHINE\SAM'
- '\REGISTRY\MACHINE\SAM\SAM\Domains\*'
# SYSTEM - Bootkey/Syskey GBG, JD, Skew1
- '\REGISTRY\MACHINE\SYSTEM\ControlSet00?\Control\Lsa\JD'
- '\REGISTRY\MACHINE\SYSTEM\ControlSet00?\Control\Lsa\Skew1'
- '\REGISTRY\MACHINE\SYSTEM\ControlSet00?\Control\Lsa\GBG'
# SECURITY - LSA key, encrypted domain cached pwd and machine account pwd
- '\REGISTRY\MACHINE\SECURITY\CACHE*'
- '\REGISTRY\MACHINE\SECURITY\POLICY\SECRETS\*'
# Registry - Putty SSH Keys
- '\Registry\Machine\Software\SimonTatham\PuTTY\SshHostKeys\*'
- '\Registry\User\*\Software\SimonTatham\PuTTY\SshHostKeys\*'
# Sysadmin - WinSCP
- '\REGISTRY\User\*\software\Martin Prikryl\WinSCP 2\Sessions\*\Password*'
# Sysadmin - TeamViewer
- '\REGISTRY\Machine\SOFTWARE\WOW6432Node\TeamViewer\PrxyPassword*'
# Sysadmin - OpenVPN
- '\REGISTRY\User\*\Software\OpenVPN-GUI\Configs\auth-data*'
# Outlook Passwords
- '\Registry\User\*\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001\*Password'
- '\Registry\Users\*\Software\Microsoft\Office\*.0\Outlook\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676'
受监控的注册表路径
file_paths:
# DPAPI - User MasterKey
# DPAPI - CREDHIST
- 'C:\Users\*\AppData\Roaming\Microsoft\Protect\*'
# DPAPI - System MasterKey
- '?:\Windows\System32\Microsoft\Protect\S-1-5-18\User\*'
# CredVault - User
- '?:\Users\*\AppData\Roaming\Microsoft\Vault\*'
- '?:\Users\*\AppData\Local\Microsoft\Vault\*'
# CredVault - System
- '?:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Vault\*'
# CredMan - Users
- '?:\Users\*\AppData\Roaming\Microsoft\Credentials\*'
- '?:\Users\*\AppData\Local\Microsoft\Credentials\*'
# CredMan - System
- '?:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Credentials\*'
- '?:\Windows\System32\config\systemprofile\AppData\Roaming\Microsoft\Credentials\*'
# CredMan - Service
- '?:\Windows\ServiceProfiles\LocalService\AppData\Local\Microsoft\Credentials\*'
- '?:\Windows\ServiceProfiles\LocalService\AppData\Roaming\Microsoft\Credentials\*'
- '?:\Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Credentials\*'
- '?:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\Credentials\*'
# Unattended creds
- '?:\Windows\Panther\Unattend.xml'
- '?:\Windows\Panther\Unattended.xml'
- '?:\Windows\Panther\Unattend\Unattended.xml'
- '?:\Windows\Panther\Unattend\Unattend.xml'
- '?:\Windows\System32\Sysprep\unattend.xml'
- '?:\Windows\System32\Sysprep\Panther\unattend.xml'
# Browser
- '*\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*.default*\key*.db'
- '*\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*.default*\logins.json'
- '*\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*.default*\cert*.db'
- '*\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*.default*\cookies.sqlite'
- '*\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*.default*\signons.sqlite'
- '*\Users\*\User Data\Default\Login Data'
- '*\users\*\AppData\Local\*\User Data\Default\Cookies'
- '*\Users\*\AppData\Roaming\Opera Software\Opera Stable\*'
# RDP
- '*\Users\*\AppData\Local\Microsoft Corporation\Remote Desktop Connection Manager\RDCMan.settings'
- '*\Users\*\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings'
# Database - SVN
- '?:\Users\*\AppData\Roaming\Subversion\auth\svn.simple'
# Database - postgresql
- '?:\Users\*\AppData\Roaming\postgresql\pgpass.conf'
# Database - robomongo
- '?:\Users\*\.3T\robo-3t\*\robo3t.json'
- '?:\users\*\.3T\robomongo\*\robomongo.json'
- '?:\users\*\.config\robomongo\*\robomongo.json'
# Database - squirrel
- '?:\Users\*\.squirrel-sql\SQLAliases23.xml'
# Database - DbVisualizer
- '?:\Users\*\.dbvis\config70\dbvis.xml'
# Database - SQL Developer
- '?:\Users\*\AppData\Roaming\SQL Developer\system*\o.jdeveloper.db.connection.*\connections.xml'
- '?:\Users\*\AppData\Roaming\SQL Developer\system*\o.sqldeveloper.*\product-preferences.xml'
# Cloud - AWS
- '?:\Users\*\.aws\credentials\*'
# Cloud - GCloud
- '?:\Users\*\AppData\Roaming\gcloud\*'
# Cloud - Azure
- '?:\Users\*\.azure\*'
# Cloud - Github
- '?:\Users\*\.config\git\credentials'
# Cloud - iCloud
- '?:\users\*\AppData\Roaming\Apple Computer\Preferences\*'
# Private Keys & Certs & Keepass
- '*.pem'
- '*.pfx'
- '*.p12'
- '*.pvk'
- '*.key'
- '*.ppk'
- '*.rdg'
- '*.kdb'
- '*.kdbx'
# Config - IIS Connection Strings
- '?:\inetpub\wwwroot\*\web.config'
# FileZilla Creds
- '?:\Users\*\AppData\Roaming\FileZilla\*'
# Jenkins Creds
- '*\credentials.xml'
- '*\secrets\master.key'
- '*\secrets\hudson.util.Secret'
# SSH and SSL
- '?:\users\*\.ssh\*'
# WIFI
- '?:\\ProgramData\\Microsoft\\Wlansvc\\Profiles\\Interfaces\\*\\*.xml'
# Collab
- '?:\Users\*\AppData\Roaming\Slack\Cookies\*'
- '?:\Users\*\AppData\Roaming\Slack\storage\slack-downloads\*'
# GPP - 'Creds (legacy domains)
- '?:\ProgramData\Microsoft\Group Policy\History\*\MACHINE\Preferences\Groups\Groups.xml'
- '?:\ProgramData\Microsoft\Group Policy\History\*\MACHINE\Preferences\DataSources.xml'
- '?:\ProgramData\Microsoft\Group Policy\History\*\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml'
- '?:\ProgramData\Microsoft\Group Policy\History\*\MACHINE\Preferences\Services\Services.xml'
- '?:\ProgramData\Microsoft\Group Policy\History\*\MACHINE\Preferences\Registry\registry.xml'
- '?:\Users\*\AppData\Roaming\KeePass\KeePass*'
# Thunderbird
- '?:\Users\*\AppData\Roaming\Thunderbird\Profiles\*.default*\*'
# VPN
- '?:\Users\*\AppData\Local\NordVPN\NordVPN.exe*\user.config'
# NTDS.DIT
- '*\NTDS.DIT'
# SAM
- '*\SAM'
结束语
利用我们的内核模式驱动程序收集的新事件,这些事件不受用户模式篡改的影响,我们扩大了对凭证发现和访问的检测和预防覆盖范围。此外,将其与 Elastic EQL 的关联功能相结合,我们可以为各种场景创建有趣的搜索和检测规则,并且误报率极低。
参考
- https://github.com/AlessandroZ/LaZagne
- https://github.com/GhostPack/Seatbelt
- https://posts.specterops.io/operational-guidance-for-offensive-user-dpapi-abuse-1fb7fac8b107
- https://github.com/gtworek/PSBits/tree/master/LSASecretDumper
- https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Mimikatz.md