域凭证蜜罐检测
本文由 创作,已纳入「FreeBuf原创奖励计划」,未授权禁止转载
域凭证蜜罐最早由2016年由 JOE STEWART AND JAMES BETTKE 提出.其核心是利用 CreateProcessWithLogonW API将蜜罐凭证注入到内存中,以帮助运营人员发现异常的蜜罐账户活动.以下将详细介绍这一技术细节.
架构设计
Agent 端
Agent 端主要负责与API服务进行通信,将agent的宿主机信息上报给服务器端,并将服务器端返回的蜜罐凭证数据放入到内存中.
部分代码如下:
func injectCred(user, dm, pw string) uint32 {
path := "C:\\\\WINDOWS\\\\notepad.exe"
username := syscall.StringToUTF16Ptr(user)
password := syscall.StringToUTF16Ptr(pw)
domain := syscall.StringToUTF16Ptr(dm)
logonFlags := LOGON_NETCREDENTIALS_ONLY
applicationName := syscall.StringToUTF16Ptr(path)
commandLine := syscall.StringToUTF16Ptr(``)
creationFlags := CREATE_DEFAULT_ERROR_MODE
environment := ListToEnvironmentBlock(nil)
currentDirectory := syscall.StringToUTF16Ptr(`C:\\`)
startupInfo := &syscall.StartupInfo{}
startupInfo.ShowWindow = ShowWindow
startupInfo.Flags = startupInfo.Flags | STARTF_USESHOWWINDOW
processInfo := &syscall.ProcessInformation{}
_ = CreateProcessWithLogonW(
username,
domain,
password,
logonFlags,
applicationName,
commandLine,
creationFlags,
environment,
currentDirectory,
startupInfo,
processInfo)
return processInfo.ProcessId
}
其原理是调用Windows CreateProcessWithLogonW API,以使用指定的凭据创建新的进程,这样当使用Mimikatz等工具导出系统凭证时,就会显示我们使用CreateProcessWithLogonW注入的凭证了
服务端记录下发的凭证数据
检测引擎
当我们需要判断是否有可疑用户使用我们的凭据时,我们需要找到一个点可以帮助我们判断凭证是否泄露了,这块比较合适的位置就是Kerberos AS请求中的预身份验证信息.
PA-ENC-TIMESTAMP是由cname账户的NTLM值对时间戳做对称加密得出的值以及使用的对称加密算法的类型这两部分组成.这里我们已知对称加密的方式、对称加密密钥(NTLM),因此如果我们可以成功的还原出数据则代表凭证已经被泄露了.反之则代表是正常行为.
参考文章
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录