概述
红队作战时,远控平台是不可或缺的一个工具,随着各大安全厂商对Cobal Strike等C2的检测查杀趋于完善和严格,不少攻击者们把目标转向了新兴C2以逃避检测。本文将介绍一款命令与控制框架Hardhat。该项目与Covenant相似,基于.NET开发,旨在协助红队作战和渗透测试。
01 架构
HardHat包含三个主要组件:ASP.NET Core团队服务器、Blazor .NET 客户端和基于 C# 的Engineer。因为HardHat整体由.Net Core开发,所以支持跨平台。
项目架构如下图所示。
Manager是监听器,对应Cobal Strike的listner,支持HTTP、HTTPS、tcp、smb通信,不支持DNS。
Engineer是植入物,对应Cobal Strike中的beacon,支持植入方式有shellcode、powershell、exe、dll、serviceExe,但所有的植入物都是无阶段的。
Teamserver采用ASP.NET Core + WebAPI的模式开发。Teamserver主要负责用户、Enginneer、Manager的管理,例如用户与角色的创建修改、Manager的创建删除等,这些都涉及到了数据库交互,HardhatC2默认使用Sqlite轻量数据库,直接访问Teamserver端默认会定向到Swagger界面。
Client采用ASP.NET Core Blazor Server模式开发,通过signaIR或webAPI与Teamserver进行实时通信(如指令下发和engineer生成),除了负责处理与Teamserver的通信,还负责Manager、Engineer和一些辅助功能的可视化。
框架本身在认证方面使用JWT进行认证,JWT的生成Key默认会放在appsetting.json中。
在授权方面使用RBAC进行鉴权,HardhatC2默认有10个不同权限的角色组。
02 Engineer分析
特点:
-
采用Roslyn .NET 编译器动态编译,利用模板参数替换掉Engineer项目中的Program.cs中的预定义参数(如C2 profile、监听器地址和端口等)。然后使用 ilrepacking 将任何所需的 DLL 合并到默认的程序集中,以创建最终的植入文件,最后生成命名形式为Enginner_xxxx.exe的文件;
-
众所周知,Cobal Strike大量使用了反射注入dll,而在HardHat里,相对应的是所有指令动态加载,涉及到WinAPI调用使用D-Invoke,免杀效果较好;
-
线程注入技术支持简单线程注入、MapViewAPCResumeThread(Early Bird技术)、MapViewCreateThread三种;
-
使用ConfuseEx混淆代码;
-
指令主要靠调用C#语言层面的API和系统API实现大部分的功能;
-
支持Bof执行,相关代码位置在EngineerModulesBofExecution.cs;
缺点:
-
生成的程序集太大,280k,包含全部命令需要500多k;
-
所有的植入物只有stageless;
-
HardHat的C2 profile只包含了一些基础流量特征,如下图所示;
其他常见 的C2 配置文件选项,例如睡眠、jitter、kill时间、窃取令牌掩码、注入技术等,被设置为了指令。
-
支持beacon类型太少,其他方式像钓鱼攻击、web delivery、office宏不支持。
03 HTTP通信流程浅析
下面是Engineer、Client、Teamserver间通信流程。
用户在client端输入指令,点击Send,触发Interact页面MudButton组件中的SendTask函数,该函数会使用RestClient封装Http请求,向TeamserverIP/engineer/{engineer.Id}发起Post请求,该url匹配Temserver的Engineer控制器中的TaskEngineer方法。
该方法会调用HardHub类方法,HardHub会通过rpc的方式调用client端同名方法进行client的界面通知和设置,然后向localhost:5000/{engineer.id}/tasks/taskID发起请求,匹配到GetTaskResult方法,获取到Engineer端命令执行的结果。
下面是Engineer端的处理流程,beacon端将teamserver返回结果第一次aes解密,反序列化解密字符串为List,结构如下
如果PathMessage数量=1,则用硬编码密钥再次AES解密TaskData数据,接着反序列化为List,但不是直接执行,而是加入HttpEmm类的Inbound属性,这是个待执行任务并发队列。
任务的执行位于Tasking类的DealWithTasks(List),该方法首先会将CancellationTokenSource和taskID绑定存到字典中,这是为了执行CancelTask命令。然后判断任务是否阻塞,无阻塞,则直接异步执行;阻塞则同步执行。
Engineer端会根据sleep时间定期向teamserver发起请求。如果是https类型的Manager,请求发起是由EngHttpComm.Checkin方法完成的。
04 其他分析
免杀
先来看一下免杀情况。VirusTotal查杀结果如下,可以看到,像CrowdStrike、Google等厂商已经把该项目标记了,但国内厂商还没有标记。
沙箱检测指出,Engineer匹配到了ATT&CK矩阵中的执行、防御规避、发现、收集四个战术中的一些技术。
360核晶无检测,上线成功。
执行常规cmd命令不会拦截。
如果执行敏感操作,360还是会拦截的。
defender无检测,上线成功。
指令
与Cobal Strike相比,HardHat没有cs灵活强大的C2 Profile,但是HardHat将C2 Profile的功能拆成了一个个的指令,可以在动态编译Engineer时选择是否添加。不少指令采用了新技术实现。HardHat包含了Cobal Strike的大部分指令,实现方式也大致相同,例如getsystem、stealtoken、sleep、spawn、文件操作等指令。除此之外,还有一些比较有特点的指令,主要涉及PE和.Net Assembly的执行,这些指令对于权限维持和提升带来非常大的便利。所有的指令代码位置在EngineerCommands目录下:
cancelTask:
该指令可以取消正在执行的任务。由于beacon端使用基于Task的异步编程,再加上每次执行指令前会把TaskID存到一个字典中,因此只需调用对应TaskID的CancellationTokenSource.Cancel() 方法就可以取消任务线程的执行。
Remote-Exec:
该指令用于横向移动,有五种形式可以利用,分别是psexec、wmic、wmic-powershell、winrm、dcom。五种利用方式都是自实现。
LoadAssembly:
该指令会手动装载PE文件,然后执行名为Main的导出函数。这里既可以运行非托管程序,也可以运行.Net程序集,但要设置程序集的导出信息。详细内容可参照参考链接3。
execute-PE:
该指令借鉴了RunPE项目,可以在不创建新进程的情况下,手动将非托管程序映射到内存中,经过修复导入表、重定位表、设置内存页权限后,执行入口点,实现了PE loader
ExecuteAssembly:
该指令主要通过shellcode注入执行PE文件,方式如下:创建子进程notepad.exe,然后注入shellcode形式的程序集。
InlineAssembly:
该指令主要用于在Engineer进程内加载程序集并运行,通过Assembly.load加载,支持在新建Appdomain和默认Appdomain内加载。
InlineDll:
该指令会手动装载Dll,然后调用指定的导出函数。
LdapSearch:
域内常用的ldap搜索实现
Patch AMSI与Patch ETW:
InlineHook修复AMSI和ETW
05 检测防御
针对此工具的检测,本文作抛砖引玉。首先该工具的Teamserver端和Client具有web页面,则可以针对页面指纹或者端口提取特征;其次,可以考虑从Teamserver和Client默认的X.509证书入手,另外,默认的C2Profile具有很明显的请求头与响应头特征;最后,从代码角度,请求特有路由判断是否能够击中目标。
06 总结
本文从代码和实用性两方面,介绍和分析了基于.Net开发的HardHatC2,并从几个角度简要介绍了如何检测防御。在实用性方面,客户端web页面用户交互操作性较差,有待改进。但HardHatC2的指令非常丰富和强大,很适合在目标上线后进行后渗透操作,几乎每一个都可以单独提取为工具,可结合个人实际需要,有所修改,以增强防御规避能力和提高交互体验。
附录 参考文献
https://github.com/DragoQCC/HardHatC2
https://github.com/nettitude/RunPE
https://blog.xpnsec.com/rundll32-your-dotnet/
绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。
研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。
M01N Team公众号
聚焦高级攻防对抗热点技术
绿盟科技蓝军技术研究战队
官方攻防交流群
网络安全一手资讯
攻防技术答疑解惑
扫码加好友即可拉群
原文始发于微信公众号(M01N Team):HardHatC2技术剖析