# 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](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/st6xXEgAyg6aFv1z-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/st6xXEgAyg6aFv1z-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/X37fzk30wTSP2NQa-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/X37fzk30wTSP2NQa-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/eNxrEXgiaXRcrArf-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/eNxrEXgiaXRcrArf-image.png)

Windows 的 system internal 中的 **ProdDump**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/dv1ZqKGKSu8oaRxT-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/dv1ZqKGKSu8oaRxT-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/agNLdhl59GXagQhg-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/agNLdhl59GXagQhg-image.png)

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

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/kCpMc0MLaDlIcBhT-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/kCpMc0MLaDlIcBhT-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/g5j2dCToK0763Lon-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/g5j2dCToK0763Lon-image.png)

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