探究Mimikatz神器之SSP | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

探究Mimikatz神器之SSP

申博_安全预警 申博 52次浏览 未收录 0个评论

在本系列的第一部份中,我们最先深切研讨 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"[%08x:%08x] [%08x] %wZ\\%wZ (%wZ)\t", PrimaryCredentials->LogonId.HighPart, PrimaryCredentials->LogonId.LowPart, LogonType, &PrimaryCredentials->DomainName, &PrimaryCredentials->DownlevelName, AccountName);
		klog_password(kssp_logfile, &PrimaryCredentials->Password);
		klog(kssp_logfile, L"\n");
		fclose(kssp_logfile);
	}
	return STATUS_SUCCESS;
}

如今,我不认为 mimikatz.exe 供应了支撑直接加载 Mimilib 的功用,然则我们从微软的文档中可以晓得,经由历程增加注册表键和并从新启动,就可以增加 SSP。

然则,经由一番搜刮,我发明了这条推文:

探究Mimikatz神器之SSP

推文的意义固然是在说对 API  AddSecurityPackage 的援用,这现实上是@mattifestation 编写的 Install-SSP.ps1 剧本中加载 SSP 所运用的要领。 这意味着,现实上我们可以在不从新启动体系的状况下加载 Mimilib。 加载后,我们发明每次提取凭据的尝试都邑致使凭据被写入到 kiwissp.log 文件中:

探究Mimikatz神器之SSP 

如今,在成熟的环境中运用 SSP 有一个瑕玷,那就是 SSP 必须在 lsass 历程中举行注册。 这使得防御者在试图跟踪歹意运动时可以运用大批的工件,无论是为援用 SSP 而建立的注册表项,照样 lsass 历程中的某一个不一般的 DLL 模块。 我们还可以看到 SSP 公然了称号和解释这两个字段,可以运用 EnumerateSecurityPackages 函数举行罗列,以下:

#define SECURITY_WIN32

#include <stdio.h>
#include <Windows.h>
#include <Security.h>

int main(int argc, char **argv) {
	ULONG packageCount = 0;
	PSecPkgInfoA packages;

	if (EnumerateSecurityPackagesA(&packageCount, &packages) == SEC_E_OK) {
		for (int i = 0; i < packageCount; i++) {
			printf("Name: %s\nComment: %s\n\n", packages[i].Name, packages[i].Comment);
		}
	}
}

正如我们可以在下面所看到的,输出结果显现了每一个已加载的 SSP 的信息,这意味着 Mimilib 可以比较显眼:

 探究Mimikatz神器之SSP

那末,我们该怎么做才防止一眼就看出 Mimilib 呢? 不言而喻的做法是修正 Mimilib 的 SpGetInfo 回调所返回的形貌,这个回调被硬编码为以下内容:

NTSTATUS NTAPI kssp_SpGetInfo(PSecPkgInfoW PackageInfo)
{
    PackageInfo->fCapabilities = SECPKG_FLAG_ACCEPT_WIN32_NAME | SECPKG_FLAG_CONNECTION;
    PackageInfo->wVersion   = 1;
    PackageInfo->wRPCID     = SECPKG_ID_NONE;
    PackageInfo->cbMaxToken = 0;
    PackageInfo->Name       = L"KiwiSSP";
    PackageInfo->Comment    = L"Kiwi Security Support Provider";
    return STATUS_SUCCESS;
}

我们转变了 Name 和 Comment 字段后,输出结果以下:

 探究Mimikatz神器之SSP

明显如许做照样不够好(纵然已修正过 Name 和 Comment 字段)。 请记着, Mimilib 不须要移除和从新编译,它包含了一系列功用,而不仅仅是充任一个 SSP。

那末我们怎样处置惩罚这个题目呢? 还好 Mimikatz 也支撑 misc::memssp,它为我们供应了一个不错的挑选。

MemSSP

MemSSP 可以追溯到处置惩罚 lsass 历程内存的历程,这一次是经由历程辨认和补丁函数来完成重定向实行。

让我们看看最最先时所实行的函数 kuhl_m_misc_memssp。 这里我们看到 lsass 历程被翻开,并最先搜刮 msv1_0.dll 这个 DLL,它是一个支撑交互式身份考证的身份考证包:

NTSTATUS kuhl_m_misc_memssp(int argc, wchar_t * argv[])
{
...
if(kull_m_process_getProcessIdForName(L"lsass.exe", &processId))
  {
    if(hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION | PROCESS_QUERY_INFORMATION, FALSE, processId))
    {
    if(kull_m_memory_open(KULL_M_MEMORY_TYPE_PROCESS, hProcess, &aLsass.hMemory))
      {			if(kull_m_process_getVeryBasicModuleInformationsForName(aLsass.hMemory, L"msv1_0.dll", &iMSV))
        {
...

下一步是在内存中搜刮一个形式,一样类似于我们在 WDigest 中看到的:

...
sSearch.kull_m_memoryRange.kull_m_memoryAdress = iMSV.DllBase;
sSearch.kull_m_memoryRange.size = iMSV.SizeOfImage;
if(pGeneric = kull_m_patch_getGenericFromBuild(MSV1_0AcceptReferences, ARRAYSIZE(MSV1_0AcceptReferences), MIMIKATZ_NT_BUILD_NUMBER))
{
  aLocal.address = pGeneric->Search.Pattern;
  if(kull_m_memory_search(&aLocal, pGeneric->Search.Length, &sSearch, TRUE))
  {
...

如今,让我们停息对代码的审计,然后进入 Ghidra,搜刮正在运用的形式后跳到了下图所示的代码处:

 探究Mimikatz神器之SSP

这里我们展现了现实发作的状况… memssp 被用于 HOOK  msv10.dll 的 SpAcceptCredentials 函数来恢复凭据。 让我们跳转到调试器,看看增加钩子后的结果怎样。

起首,我们确认 SpAcceptCredentials 包含一个钩子:

 探究Mimikatz神器之SSP

接下来,当我们单步实行时,我们发明我们被绑定到一个存根上,经由历程在客栈上构建一个文件名并将其通报给 fopen 来建立一个日记文件:

 探究Mimikatz神器之SSP

探究Mimikatz神器之SSP

一旦翻开这个日记文件,通报给 SpAcceptCredentials 的凭据就会被写入这个文件:

 探究Mimikatz神器之SSP

末了,实行回到了 msv1_0.dll 中的代码:

探究Mimikatz神器之SSP

假如你想检察这个钩子的代码,现实的源代码可以在 kuhl_m_misc.c 文件的 misc_msv1_0_SpAcceptCredentials 函数中找到。

那末,我们运用这类手艺的风险是什么呢? 我们可以看到,上面的钩子是经由历程 kull_m_memory_copy 复制到 lsass 历程中的,它现实上运用了 WriteProcessMemory 这个 API。 依据环境的差别,对另一个历程实行 WriteProcessMemory 挪用可以会被杀软检测到或被标记为可疑行动,当针对 lsass 历程实行如许的操纵时更是如此。

如今,探究 Mimikatz 内部手艺细节的长处之一就是许可我们转变与 lsass 历程互动的配置文件,使得防御者更难说清楚他们的检测逻辑并说”啊,我之前见过这一连串的事宜,那是 Mimikatz!” 。 那末让我们来看看我们能做些什么来疑惑一下防御者。

没必要 WriteProcessMemory 从新建立 memssp 的要领

在回忆了上面供应的手艺以后,我们可以晓得每种手艺都有长处和瑕玷。

看我如何利用Mac官方AppStore中的应用程序获取root权限

一、前言 在本篇文章中,“Objective by the Sea”的演讲者Csaba Fitzl撰写了一篇有趣的方法,通过官方Mac AppStore中的应用程序来获取root权限。 他的研究最开始是在“Objective by the Sea”v2.0中提出的,演讲时展示的PPT请参考这里。 二、背景 这篇文章主要讲述了我的研究过程,我想展示一下我是如何在快速的研究过程中发现问题的,我最终在macOS中发现了一个本地权限提升漏洞。除了成功发现的漏洞之外,我还想讨论我在研究过程中遇到的所有障碍和失败,尽管人们通常不会谈论这一些,但我认为,当我们

第一种要领(Mimilib)依赖于注册 SSP,可以经由历程 EnumerateSecurityPackages 返回注册的供应顺序列表显现已注册的 SSP。 另外,假如 Mimilib 库没有举行修正,那末另有一大堆附加功用与 DLL 绑缚在一起。 另外,当加载 AddSecurityProvider 时,注册表值将被修正为在从新体系时期坚持 SSP。 只管如此,这类手艺照旧有一个很大的上风就是,它不须要一个具有潜伏风险的 WriteProcessMemory API 挪用来到达其目标。

第二个要领(memssp)严峻依赖于受监控的 API 挪用,比方 WriteProcessMemory,该 API 用于将钩子加载到 lsass历程 中。 然则,这类手艺的一个很大的长处是,它不会出如今已注册的 SSP 列表中,也不会作为加载的 DLL 涌现。

那末,我们能做些什么来转变现状呢? 我们可以潜伏地将这两种要领结合起来,运用 AddSecurityProvider 加载我们的代码,同时防止显现在已注册的 SSP 列表中暴露我们本身的 SSP。 我们是不是可以找到一种防止直接挪用 AddSecurityProvider API 的要领,这个要领应当有助于处置惩罚任何烦人的 AV 或 EDR HOOK 这个函数。

起首,让我们来看看 AddSecurityPackage 是怎样注册一个 SSP 的,这意味着我们将须要举行一些逆向事变。 我们将从公然这个 API 的 secur32.dll 这个 DLL 文件最先。

在 Ghidra 翻开这个 DLL 文件,我们很快发明这现实上只是一个挪用 sspcli.dll 的包装器:

 探究Mimikatz神器之SSP

在 sspcli.dll 中反汇编 AddSecurityPackage,迥殊须要注重的是这个函数所运用的 API 挪用,我们看到了对 NdrClientCall3 的援用,这意味着这个函数运用了 RPC 挪用体式格局。这是有原理的,由于这个挪用须要以某种体式格局向 lsass 历程发出信号,通知 lsass 历程应加载新的 SSP:

 探究Mimikatz神器之SSP

在挪用 NdrClientCall3 时,我们发明通报了以下参数:

 探究Mimikatz神器之SSP

这里给出了一个值是3 的 nProcNum 参数,假如我们深切研讨 sspirpc_ProxyInfo 构造体,就会发明 RPC 接口的 UUID 为 4f32adc8-6052-4a04-8701-293ccf2096f0:

 探究Mimikatz神器之SSP

如今我们已有充足的信息应用 RpcView 剖析 sspisrv.dll 暴露出的 SspirCallRpc 这个 RPC 挪用:

 探究Mimikatz神器之SSP

要运用这个挪用,我们须要晓得通报的参数,这些参数固然可以从 RpcView 恢复,详细以下:

long Proc3_SspirCallRpc(
  [in][context_handle] void* arg_0,
  [in]long arg_1,
  [in][size_is(arg_1)]/*[range(0,0)]*/ char* arg_2,
  [out]long* arg_3,
  [out][ref][size_is(, *arg_3)]/*[range(0,0)]*/ char** arg_4,
  [out]struct Struct_144_t* arg_5);

然则,在完成这个挪用之前,我们须要晓得作为参数 arg_2 所通报的参数值(arg_1 被标记为 arg_2 的大小,arg_3、arg_4和 arg_5 都被标记为“out”)。 我发明最简朴的要领就是启动调试器,在 AddSecurityPackage 挪用 NdrClientCall3 之前增加一个断点:

 探究Mimikatz神器之SSP

一旦停息实行以后,我们就可以转储通报给每一个参数的参数值。 让我们运用 dq rsp+0x20 L1 猎取在 arg_1 参数中通报的缓冲区的大小:

 探究Mimikatz神器之SSP

因而我们可以晓得,在这类状况下,通报的缓冲区长度为 0xEC 个字节。 如今我们就可以转储参数 arg_2:

 探究Mimikatz神器之SSP

经由一番发掘,我可以将这些参数值中的大部份联系起来。 让我们把输出的要求从新花样化为 QWORD 并标记出来,如许我们就可以看到我们所处置惩罚的是什么内容了:

 探究Mimikatz神器之SSP

如今我们已映射了大部份被通报的数据,我们可以尝试并发出一个 RPC 挪用,而没必要直接挪用 AddSecurityPackage 这个 API。 你可以在这个 Gist 中取得我经心编写的代码。

如今我们已完成经由历程不直接挪用 AddSecurityPackage 加载包的才,接下来,让我们看看是不是可以进一步夹杂这些内容。

让我们将 sspisrv.dll 丢到 Ghidra 中,并剖析服务端是怎样处置惩罚 RPC 挪用的。 我们在反汇编 SspirCallRpc 时所碰到的直接题目是,实行是经由历程 gLsapSspiExtension 通报的:

 探究Mimikatz神器之SSP

这现实上是一个指向函数数组的指针,经由历程 lsasrv.dll 添补,并指向 LsapSspiExtensionFunctions:

 探究Mimikatz神器之SSP

我们对 SspiExCallRpc 异常感兴致,它与我们在 RPCView 中发明的函数异常类似。这个函数考证参数并将实行通报给 LpcHandler:

 探究Mimikatz神器之SSP

LpcHandler 担任在最终将实行通报给 DispatchApi 之前进一步搜检所供应的参数:

 探究Mimikatz神器之SSP

一样,另一个函数指针数组用于分发挪用,由 LpcDispatchTable 指向这个函数指针数组:

 探究Mimikatz神器之SSP

如今,我们应当对这个数组发生兴致,由于我们可以会依据它的称号来查找 s_AddPackage,而且索引也与我们在要求中找到的0xb “Function ID”  索引相匹配。

让我们进一步深切这个“兔子洞”,我们剖析到了 WLsaAddPackage,这个函数起首搜检我们是不是有充足的特权经由历程模仿衔接客户机挪用 RPC 要领,然后试图用读和写权限翻开 HKLM\System\CurrentControlSet\Control\Lsa 的注册表项:

探究Mimikatz神器之SSP

假如这个操纵可以胜利(注重这多是一个新的提权后门) ,那末实行就会转移到 SpmpLoadDll 上,它经由历程 LoadLibraryExW 将我们供应的 SSP 加载到 lsass 历程中:

 探究Mimikatz神器之SSP

假如 SSP 胜利加载,DLL 就会被增加到注册表中以便自动加载:

探究Mimikatz神器之SSP

从上面的全部剖析历程来看,我们可以愿望跳过末了的注册表谁人点,由于我们不会用它来完成权限的持久性,而且最好防止读写注册表。 在抱负状况下,我们也愿望防止在有疑心的状况下,像 ProcessExplorer 之类的剖析东西在 lsass 历程中列出我们本身的 DLL。 因而,我们可以做的就是运用 RPC 挪用通报我们的 DLL,并经由历程从这个 DLL 的 DllMain 进口函数返回 FALSE 来强迫 SSP 在加载时失利。 如许就可以跳过注册表的修正操纵,也意味着从历程中卸载掉了我们的 DLL。

我运用 Mimikatz memssp 作为模板,经心制造了一个经由历程 RPC 挪用加载的 DLL,这个 DLL 会运用 Mimikatz 所运用的钩子手艺对 SpAddCredentials 举行补丁。可以在这个 Gist 取得代码。

让我们看看怎样运用 AddSecurityPackage 的原始 RPC 挪用加载 DLL:

[点击寓目视频]经由历程 AddSecurityPackage 的原始 RPC 挪用加载 memssp DLL

你也没必要局限于从当地体系加载 DLL,由于经由历程 RPC 挪用通报一个 UNC 途径也可以一般加载 DLL(只管你须要确保目标环境中的 EDR 不会将这类体式格局标记为可疑行动)。

固然,你也不应当仅限于运用 AddSecurityPackage 加载 DLL。 由于我们已经心制造了一个自力的 DLL 来实行 memssp 补丁。让我们从上一篇博客文章中提取 SAMR RPC 剧本,让这个剧本经由历程 LoadLibrary 加载我们的 DLL,并经由历程 SMB 同享写回登录尝试:

[点击寓目视频]经由历程长途 DLL 加载实行 memssp

固然,除此以外另有许多要领可以进步这些例子的效力,然则和第一部份文章一样,我愿望这篇文章可以为你供应一个关于怎样制造你本身的 SSP 的主意。 虽然这篇文章只是引见了几种把 SSP 加载到 lsass 历程中时可以用到的要领,然则经由历程相识 Mimikatz 供应这类功用的内部细节以后,在你试图绕过 AV 或 EDR 时,或许只是想测试一下防御者所标记的 Mimilib 和 memssp 以外的检测才时,愿望你有才依据目标环境调解你的有效载荷。

原文地点: https://www.4hou.com/system/18912.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明探究Mimikatz神器之SSP
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址