探寻Mimikatz神器之SSP

在本系列产品的第一部分中,大家逐渐深入分析 Mimikatz。这一念头非常简单便是为了更好地表明 Mimikatz 是怎样使出它的魔法的及其表明怎样开发设计自定的和特殊的重力梯度。 假如你都还没机遇去...

在本系列产品的第一部分中,大家逐渐深入分析 Mimikatz。这一念头非常简单便是为了更好地表明 Mimikatz 是怎样使出它的魔法的及其表明怎样开发设计自定的和特殊的重力梯度。 假如你都还没机遇去一探究竟,请先移景到本系列产品文0章的第一部分。 下面,在本文中,大家将回望一下提升微软公司增加的避免 凭证转储的安全管理(如 Credential Guard)的一种好方法并获取受害人提供的凭证。 自然,这也是 Mimikatz 适用 SSP 的缘故。

安全性适用提供程序流程(Security Support Provider,SSP)是一个 DLL,它容许开发者公布在一些身份认证和受权恶性事件期内启用的很多回调。 如同我们在上一篇文章中见到的,WDigest 提供了应用这一准确的插口开展凭证缓存文件的工作能力。

Mimikatz 提供了一些不一样的技术性来利用 SSP。 最先是"Mimilib",它是一个含有各种各样作用的 DLL,在其中一个便是完成 Security Support Provider 插口。 次之,也有"memssp",它是此外一种趣味的完成同样总体目标的方法,但它取决于运行内存补丁下载,而不是根据载入一个 DLL 完成。

使我们从载入 SSP 的传统式方式——Mimilib 逐渐生命之初。

留意: 如同在上一篇文章中提及的,本文很多应用了 Mimikatz 的源码及其开发者花销的成千上万時间。 谢谢 Mimikatz, Benjamin Delpy 和 Vincent Le Toux 优异的科学研究工作中。

Mimilib

Mimilib 很象变色龙,适用 ServerLevelPluginDll 根据 RPC、DHCP 网络服务器 Callout 开展横着挪动,乃至还能够做为 WinDBG 的拓展。 殊不知,出自于大家的目地,大家将科学研究这一库怎样做为一个 SSP,为网络攻击提供一种方式来查找由受害人键入的凭证。

Mimilib 的原理是利用 SSP 插口应用明文凭证启用Security Support Provider。 这代表着凭证被以明文的方法露出。 Mimilib 的 SSP 作用的通道点能够在 kssp.c 文档中寻找,关键的通道是 kssp_SpLsaModeInitialize。 该涵数根据 mimilib.def 这一界定文档从 DLL 中导出来名叫 SpLsaModeInitialize 的涵数,并由 lsass 过程用以复位一个包括好几个回调的建筑结构。

以 Mimilib 为例子,申请注册的回调方法以下:

· SpInitialize – 用以复位 SSP 并提供函数指针目录

· SpShutDown – 在卸载掉 SSP 时提供释放出来資源的机遇

· SpGetInfoFn – 提供关于 SSP 的信息内容,包含版本号、名字和叙述

· SpAcceptCredentials – 接受 LSA 传送的明文凭证,并由 SSP 开展缓存文件

自然,假如你阅读文章了上一篇文章,你能发觉 WDigest 应用 SpAcceptCredentials 来缓存文件凭证,因而,这造成造成了大家很多年来一直在“享受”的系统漏洞。

伴随着每一个回调的添充,而且了解系统软件将根据一个明文凭证的副原本启用 SpAcceptCredentials,以后 Mimilib 所必须做的便是按提供的方法储存凭证,这恰好是 kssp_SpAcceptCredentials 所做的事儿:

NTSTATUS NTAPI kssp_SpAcceptCredentials(SECURITY_LOGON_TYPE LogonType, PUNICODE_STRING AccountName, PSECPKG_PRIMARY_CRED PrimaryCredentials, PSECPKG_SUPPLEMENTAL_CRED SupplementalCredentials)

{

FILE *kssp_logfile;

#pragma warning(push)

#pragma warning(disable:4996)

if(kssp_logfile=_wfopen(L"kiwissp.log", L"a"))

#pragma warning(pop)

{

klog(kssp_logfile, L"[\bx:\bx][\bx]%wZ\\\\%wZ (%wZ) ", PrimaryCredentials->LogonId.HighPart, PrimaryCredentials->LogonId.LowPart, LogonType, &PrimaryCredentials->DomainName, &PrimaryCredentials->DownlevelName, AccountName);

klog_password(kssp_logfile, &PrimaryCredentials->Password);

klog(kssp_logfile, L"

");

fclose(kssp_logfile);

}

return STATUS_SUCCESS;

}

如今,我不会觉得 mimikatz.exe 提供了适用立即载入 Mimilib 的作用,可是大家从微软公司的文本文档中能够了解,根据加上注册表文件键和并重启,就可以加上 SSP。

殊不知,历经一番检索,我发现这条文章:

推文的意思自然是在说对 API AddSecurityPackage 的引入,这事实上是@mattifestation 撰写的 Install-SSP.ps1 脚本制作中载入 SSP 所应用的方式。 这代表着,事实上我们可以不在重启系统软件的状况下载入 Mimilib。 载入后,大家发觉每一次获取凭证的试着都是会造成凭证被载入到 kiwissp.log 文档中:

如今,在完善的自然环境中应用 SSP 有一个缺陷,那便是 SSP 务必在 lsass 过程中开展申请注册。 这促使防御者在尝试追踪故意主题活动时能够应用很多的产品工件,不论是为引入 SSP 而建立的注册表项,還是 lsass 过程中的某一个异常的 DLL 控制模块。 大家还能够见到 SSP 公布了名字和注解这两个字段名,能够应用 EnumerateSecurityPackages 涵数开展枚举类型,以下:

#define SECURITY_WIN32

#include

#include

#include

int main(int argc, char **argv){

ULONG packageCount=0;

PSecPkgInfoA packages;

if (EnumerateSecurityPackagesA(&packageCount, &packages)==SEC_E_OK){

for (int i=0; i

如同我们可以在下面所见到的,輸出数据显示了每一个已载入的 SSP 的信息内容,这代表着 Mimilib 很有可能较为醒目:

那麼,大家该怎么做才可以防止一眼就看得出 Mimilib 呢? 不言而喻的作法是改动 Mimilib 的 SpGetInfo 回调所回到的叙述,这一回调被硬编码为以下內容:

  • 发表于 2021-04-05 13:40
  • 阅读 ( 296 )
  • 分类:互联网

0 条评论

请先 登录 后评论
Q96
Q96

705 篇文章

你可能感兴趣的文章

相关问题