Skip to main content

LSASS 本地安全机构子系统服务

在上个小节讨论 LSA 机密的时候,提及了一下 LSA,即本地安全机构。在 Windows 上,有这么一个进程 lsass.exe,绝对是攻击者的首要攻击目标之一。虽然我们中的一些人知道可以从 lsass.exe 提取凭证,但 LSASS 本质上是什么呢,与 LSA 的联系又是什么呢?让我们先搞清楚这些。

名词与概念

本地安全机构 (LSA) 和本地安全机构子系统服务 (LSASS) 是 Windows 操作系统中处理安全和用户身份认证的密切相关组件。

本地安全机构

LSA 是 Windows 操作系统的一个组件,可执行安全策略并管理用户身份认证。它为各种安全支持提供程序 (SSP) 提供框架,这些提供程序处理特定的身份验证协议,例如 NTLM、Kerberos 等。LSA 负责根据 SSP 提供的身份验证数据生成访问令牌和管理用户会话。LSA 还维护 SAM 数据库。


本地安全机构子系统服务

LSASS 是一个 Windows 进程 (lsass.exe),实现了 LSA 概念并管理 SSP。它负责代表 LSA 执行安全策略和处理用户身份验证请求。LSASS 进程是 Windows 安全模型的重要组成部分,并以高权限运行,这使其成为寻求提取敏感信息(如密码或身份验证令牌)的攻击者的常见目标。

总之,LSA 是 Windows 中管理用户身份认证和执行安全策略的安全组件,而 LSASS 是实现 LSA 并运行 SSP 的进程。 两者相互关联,LSASS 进程负责 LSA 组件的功能。

认证包/安全支持提供程序 AP/SSP

AP/SSP 通过分析登陆数据来认证 Windows 用户,不同的 AP/SSP 对多种登陆过程以及认证协议提供支持。AP/SSP 以 DLL 形式存在,被 LSA 所加载和使用。常见的 AP/SSP 有 NTLM,Kerberos,WDigest,Credman 等。


从 lsass.exe 进程中导出凭证

正因为 LSASS 用于处理用户身份认证,因此在内存中保存了凭证,而当攻击者获得提升特权后,可以从中提取出明文或哈希形式的凭证。大家所知的 Mimikatz 中的 sekurlsa::logonpasswords 正是用于从 LSASS 内存中提取凭证的命令,该命令针对多种被 Windows 所使用的 AP/SSP,例如 Kerberos,MSV,WDigest。

Cobalt Strike 自带 mimikatz 的功能,考虑到 sekurlsa::logonpasswords 的使用频率很高,也有着 logonpasswords 短命令的形式,功能是一样的。我们能看到,以下截图中的用户 (包括主机账户) 的凭证可以来源于多个 SSP,甚至存在着明文形式的密码。

image.png

image.png

除了在线从 lsass.exe 中提取凭证,也可以将 lsass.exe 进程 (甚至整个内存) 导出成文件,让 mimikatz 等工具离线分析并提取凭证。导出的方式多种多样,使用系统内置方法的话,可以是任务管理员,导出 lsass.exe 进程。

image.png

Windows 的 system internal 中的 ProdDump

procdump64.exe -64 -accepteula -ma lsass.exe lsass.dmp

image.png

将导出的文件下载到自己主机,用 pypykatz (https://github.com/skelsec/pypykatz) 离线解析。

image.png

此外,BOF nanodump (https://github.com/fortra/nanodump) 可以在进程内导出 lsass,避免了工具落入文件系统,通过反射式加载在进程内执行导出行为。而且 nanodump 支持多种特性与参数,以增强 OPSEC,甚至绕过特定的安全控制。

克隆了该项目之后,导入 cna 脚本

image.png

根据 Gitub 中的案例,我们通过“克隆”进程以间接地打开 lsass.exe 的句柄并导出。

image.png

总之,如今实现导出 lsass.exe 进程的工具与方法很多,我们需要尽可能以更 OPSEC 的方式去达成。