01、简介
简单介绍一下,LSASS(本地安全机构子系统服务)在本地或域中登录Windows时,用户生成的各种凭证将会存储在LSASS进程的内存中,以便用户不必每次访问系统时重新登录。
攻击者在获得起始攻击点后,需要获取目标主机上的相关凭证,以便通过用户凭证进行横向移动,这个技术点最容易关联到的就是获取LSASS内存中保存的用户凭证。
一般LSASS窃取凭证有两种方式,第一种就是直接从LSASS内存解析获取密码,第二种是将LSASS进程转储到本地进行离线解析。
02、LSASS窃取凭证
(1)mimikatz
mimikatz仅需一行命令,就可以直接从lsass内存中提取用户hash。
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > log.txt
在众多的Windows安全日志中,通过监测访问lsass,exe的进程,可发现异常进程,因此可以将事件ID:4663 作为关键日志特征。
事件ID:4663 显示已使用访问权限,4663是没有失败事件的,可以看到进程名mimikatz.exe 尝试访问内存对象lsass.exe。
(2)Procdump转储
procdump是微软官方提供的一个小工具,可以将lsass.exe进程转储为dump文件,将lsass.dmp文件下载到本地进行离线破解。
Procdump64.exe -accepteula -ma lsass.exe lsass.dmp
在Windows事件ID:4663 中,可以看到进程名Procdump64.exe 尝试访问内存对象lsass.exe。
(3)MSF中的mimikatz
MSF加载mimikatz模块,抓取明文密码
meterpreret > load mimikatz
meterpreret > wdigest
在Windows事件ID:4663 中,可以看到进程名shell.exe 尝试访问内存对象lsass.exe。
(4)CS模块获取用户哈希
使用hashdump或logopasswords 获取用户密码哈希值
在Windows事件ID:4663 中,可以看到进程名rundll32.exe 尝试访问内存对象lsass.exe。
03、LSASS凭证窃取攻击检测
基于几种常见的LSASS进程窃取凭证的方式以及识别到的AD Event日志特征,可以实时监测异常进程访问lsass,exe,找到哪个用户什么时间执行了异常进程访问了lsass.exe进程,从而实现LSASS凭证窃取攻击的检测。
eventtype=wineventlog_security EventCode=4663 Object_Name="*lsass.exe"
| regex process="^((?!MsMpEng|vmtoolsd|VsTskMgr|WmiPrvSE).)*$"| stats count min(_time) as start_time max(_time) as end_time by dest user Object_Name Process_Name
| eval start_time=strftime(start_time,"%Y-%m-%d %H:%M:%S")| eval end_time=strftime(end_time,"%Y-%m-%d %H:%M:%S") |eval message="在"+start_time+"到"+end_time+"时间内,服务器:"+dest +" 检测到lsass窃取凭证,进程名:" +Process_Name+" 操作账号:"+user+" 操作次数:"+count+"次"
|table start_time end_time dest message user
安全告警效果如下图: