HardHatC2技术剖析

渗透技巧 7个月前 admin
133 0 0
HardHatC2技术剖析

概述

红队作战时,远控平台是不可或缺的一个工具,随着各大安全厂商对Cobal Strike等C2的检测查杀趋于完善和严格,不少攻击者们把目标转向了新兴C2以逃避检测。本文将介绍一款命令与控制框架Hardhat。该项目与Covenant相似,基于.NET开发,旨在协助红队作战和渗透测试。


01 架构

HardHat包含三个主要组件:ASP.NET Core团队服务器、Blazor .NET 客户端和基于 C# 的Engineer。因为HardHat整体由.Net Core开发,所以支持跨平台。


项目架构如下图所示。

HardHatC2技术剖析


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只包含了一些基础流量特征,如下图所示;

HardHatC2技术剖析

其他常见 的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方法。

HardHatC2技术剖析


该方法会调用HardHub类方法,HardHub会通过rpc的方式调用client端同名方法进行client的界面通知和设置,然后向localhost:5000/{engineer.id}/tasks/taskID发起请求,匹配到GetTaskResult方法,获取到Engineer端命令执行的结果。

HardHatC2技术剖析


下面是Engineer端的处理流程,beacon端将teamserver返回结果第一次aes解密,反序列化解密字符串为List,结构如下

HardHatC2技术剖析


如果PathMessage数量=1,则用硬编码密钥再次AES解密TaskData数据,接着反序列化为List,但不是直接执行,而是加入HttpEmm类的Inbound属性,这是个待执行任务并发队列。

HardHatC2技术剖析
HardHatC2技术剖析


任务的执行位于Tasking类的DealWithTasks(List),该方法首先会将CancellationTokenSource和taskID绑定存到字典中,这是为了执行CancelTask命令。然后判断任务是否阻塞,无阻塞,则直接异步执行;阻塞则同步执行。


Engineer端会根据sleep时间定期向teamserver发起请求。如果是https类型的Manager,请求发起是由EngHttpComm.Checkin方法完成的。


04 其他分析

免杀

先来看一下免杀情况。VirusTotal查杀结果如下,可以看到,像CrowdStrike、Google等厂商已经把该项目标记了,但国内厂商还没有标记。

HardHatC2技术剖析


沙箱检测指出,Engineer匹配到了ATT&CK矩阵中的执行、防御规避、发现、收集四个战术中的一些技术。


HardHatC2技术剖析


360核晶无检测,上线成功。

HardHatC2技术剖析
HardHatC2技术剖析


执行常规cmd命令不会拦截。

HardHatC2技术剖析


如果执行敏感操作,360还是会拦截的。

HardHatC2技术剖析


defender无检测,上线成功。

HardHatC2技术剖析


指令

与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/


HardHatC2技术剖析

绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。

研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。


HardHatC2技术剖析

M01N Team公众号

聚焦高级攻防对抗热点技术

绿盟科技蓝军技术研究战队

HardHatC2技术剖析

官方攻防交流群

网络安全一手资讯

攻防技术答疑解惑

扫码加好友即可拉群

原文始发于微信公众号(M01N Team):HardHatC2技术剖析

版权声明:admin 发表于 2023年9月27日 下午6:00。
转载请注明:HardHatC2技术剖析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...