You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何调试lsass.exe以定位导致AD账户周期性锁定的进程

如何调试lsass.exe以定位导致AD账户周期性锁定的进程

我完全理解你现在的困境——常规排查都试过了,就差最后深挖lsass.exe这一步,谁也不想轻易重装机器对吧?下面给你分享几个实战可行的方法,从相对安全的追踪到深度调试,一步步帮你揪出背后的元凶:

先试试安全的ETW追踪法(不用调试,风险低)

ETW(Windows事件追踪)可以捕获lsass处理的认证请求细节,不用暂停系统核心进程,是首选的排查方式:

  1. 以管理员身份打开PowerShell,运行以下命令启动LSA认证追踪:
    logman create trace LsaAuthTrace -ow -o C:\LsaAuth.etl -p Microsoft-Windows-LSA/Auditing 0xFFFF -ets
    
  2. 等待账户锁定事件触发(或者手动复现你之前的测试场景)。
  3. 事件发生后,停止追踪:
    logman stop LsaAuthTrace -ets
    
  4. 解析追踪日志为CSV格式方便查看:
    tracerpt C:\LsaAuth.etl -o C:\LsaAuth.csv -of CSV
    
  5. 打开CSV文件,搜索包含“Failure”的认证事件,里面会记录发起请求的进程ID和路径,直接定位到问题程序。

内存转储分析法(捕获快照后离线分析)

如果ETW没抓到足够信息,可以用ProcDump捕获lsass的内存快照,离线分析避免影响系统:

  1. 下载Sysinternals的ProcDump工具,以管理员身份运行;
  2. 等待锁定事件发生时,立即执行命令生成内存转储:
    procdump -ma lsass.exe C:\LsassDump.dmp
    
    -ma参数表示捕获完整内存,确保包含所有细节)
  3. 用WinDbg打开生成的LsassDump.dmp文件,执行以下命令查看调用栈和进程关联:
    • 输入 !process 0 0 列出所有进程,找到和锁定时间点相关的可疑进程
    • 输入 !lsasession 查看当前LSA会话,找到失败认证对应的会话信息
    • 结合调用栈命令 k 追踪发起认证请求的源头进程

深度调试lsass.exe(最后手段,注意风险)

如果上面的方法都没结果,再考虑直接调试lsass——但要注意,lsass是系统核心进程,调试会暂停它的运行,导致系统暂时无法处理认证,一定要在非业务高峰或测试机器上操作

  1. 先禁用LSA保护(RunAsPPL),否则Windows会阻止调试:
    • 打开注册表编辑器(regedit),导航到 HKLM\SYSTEM\CurrentControlSet\Control\Lsa
    • 右键新建DWORD值 RunAsPPL,设置值为0,然后重启电脑
    • 调试完成后务必改回1,恢复系统安全保护
  2. 安装WinDbg Preview(微软商店或Windows SDK均可),以管理员身份打开;
  3. 附加到lsass.exe:
    • 点击File -> Attach to Process,找到lsass.exe并选中,点击Attach
    • 选择“User-mode debugging”,确认暂停进程的提示(此时系统会暂时无法处理登录请求)
  4. 设置断点捕获认证请求:
    • 在命令窗口输入 bp advapi32!LogonUserW(这是最常用的用户认证函数,错误密码会触发这个调用)
    • 输入 g 让进程继续运行
  5. 当锁定事件触发时,调试器会自动断下来,输入 k 查看调用栈——栈里第一个非lsass模块的进程,就是发起错误认证的源头程序,你可以直接看到它的路径和函数名

额外提醒

  • 调试完成后一定要恢复LSA保护(把RunAsPPL改回1),避免系统暴露在安全风险中
  • 如果手动复现测试时,用你写的那段PowerShell脚本触发锁定,调试器会精准断在对应的调用点,更容易定位

备注:内容来源于stack exchange,提问作者David Trevor

火山引擎 最新活动