滥用 Tyk 的 API 网关提供的 API 路由转发能力隐藏恶意 C2 流量
2022-7-13 16:56:14 Author: 嘶吼专业版(查看原文) 阅读量:12 收藏

如今,通过合法渠道隐藏恶意的C2流量很难,尤其是当CDN提供商阻止所有已知的技术来使用域前置来隐藏恶意流量时。

出于这个原因,我在寻找一种服务,我可以使用它们的域转发和隐藏我的恶意C2流量,而不暴露我的原始攻击基础设施, tyk.io是一个云原生 API 管理全球许多应用程序使用的平台,用于通过云管理其 API 调用。

Tyk API网关可以让你管理你的API入口,并将它们路由到不同的终端,其中一些可以是内部的,但一些可以是公开的,你可以在调用你的API时添加一些用于认证目的的控件。

当使用Tyk云时,你将获得一个与 tyk.io 主域链接的自定义子域,例如:

使用此域,你将管理 API 的入口并将流量转发到多个路由。

那么,我们如何使用它来隐藏我们的信标活动呢?这很简单,我们将对 C2 的信标活动视为 API,并为它们构建自定义路由,以将流量从 TYK 域转发到我们的 C2 服务器。

我将使用Cobalt Strike作为我的C2,并将使用TYK API网关转发CS信标通信。

众所周知,Cobalt Strike 信标需要定义 4 条路径来在信标和teamserver之间进行通信,它们是:

http-get

http-post

x64 stager (uri_x64)

x86 stager (uri_x86)

我们可以使用 Cobalt Strike Malleable 配置文件来定义它。

我将在我的 Malleable 配置文件中使用以下变量。

请注意,你可以仅使用 GET 构建配置文件,但这不是我们的情况,我们不会在本文中讨论这个问题。

因此,为了明确这一点,TYK 只会处理传入的请求并将它们转发到由 Cobalt Strike teamserver处理的原始路由。

所以最终的信标行为应该如下所示:

让我们从创建一个 TYK 云免费帐户开始,为此,只需导航到此 URL 并填写表格,然后选择 Cloud Free 作为你的首选启动计划,如下所示:

之后,设置你的组织名称,在我的例子中是TestTraffic,如下所示:

提交组织名称后,TYK将为你创建一个新的部署,并发出一条提示消息,告诉你成功创建部署:

以下是我当前的部署详细信息:

在阅读框中,我们可以看到Ingress API管理仪表板,从这里我们可以创建路由,我们将用于与TYK云主机通信,并在我们的后端(Cobalt strike teamserver)中创建相应的路由。

现在让我们创建API终端,并开始配置它们以到达我们的teamserver中的后端路由,换句话说,此时我们将在TYK主机名中创建自定义路由,一旦向这些路由发送请求,这些路由将连接回我们的teamserver。

当你点击管理API 时,你将看到以下页面:

点击 Design new API,让我们填写第一个 API端,它将连接回我们在Malleable C2配置文件中设置为' / API /v2/login的http-getURI。

我们将使用的上游URL是我们的Cobalt Strike teamserver,它已在 https://cslabtest.live 上启动并运行。

注意,请确保你的teamserver使用有效的ssl证书,并且你使用的是https侦听器。

正如我提到的,我们将创建一个表示http-get URL的新路由,该URL将指向我们的主要CS teamserver后端。

我的测试后端服务器是https://cslabtest.live,所以我们将确保我们的TYK云主机将从我们的信标发送的http-get请求转发到原始后端“CS teamserver”https://cslabtest.live/api/v2/login。

因此,在填写完API名称和上游URL后,请点击CONFIGURE API开始配置API,一旦我们点击它,我们将拥有我们将用来调用此 API 终端的主机名:

如上所示,我们已经创建了一个新的API,并且我们获得了我们将在调用期间使用的主机名,即:

https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io

现在我们需要更改侦听路径值和目标URL值,侦听路径值将设置侦听路径,TYK主机将侦听该路径以接收请求,而目标URL值是请求将传递到的原始路径。

为了再次简化,我们所做的是将发送到https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io/api/v2/login的任何请求传递到https://cslabtest.live/api/v2/login。

现在让我们禁用另外两个与速率限制相关的选项,以确保我们的信标不会在很短的时间内发送太多请求时被阻塞,如果我们有一个短跨度的信标回调,这将很有帮助。

为此,只需向下滚动到 Rate Limiting 和 Quotas 并检查以下选项:

之后,我们需要做一件非常重要的事情,以确保我们的请求将传递到后端CS teamserver,为此我们需要关闭该终端上的任何身份验证,为此,只需向下滚动到页面末尾,直到你到达 Authentication 部分并选择 Open (Keyless) 选项。

该选项将保证请求将在不进行任何身份验证的情况下传递给TYK主机

最后要做的一件事是在这个终端上禁用缓存,这将确保我们不会缓存来自 CS 团队服务器的任何响应,这可能会阻止我们的信标按预期运行。

为此,导航到高级选项并取消选中启用缓存选项。

我们现在已准备好使用此端点,点击保存以保存终端的详细信息。

现在我们可以看到API表了,如下所示:

我们可以看到服务http-get请求的API调用已经就绪,现在让我们配置其余的终端。

现在创建一个新的 API 并重复相同的步骤,如下所示:

我们将Listen路径设置为/api/v2/status,此处的目标 URL 与我们在 Malleable C2 配置文件中使用的相同。

现在,像前面提到的那样禁用速率限制、身份验证和缓存。

同样,创建一个名为Stager-X86的新API,并设置以下选项:

我们将Listen路径设置为/api/v2/GetProfilePicture,此处的 Target URL 与我们在 Malleable C2 配置文件中使用的 URL 相同。

如上所述,禁用速率限制、身份验证和缓存。

最后,创建最后一个被称为Stager-X64的API,并设置以下选项:

如上所述,禁用速率限制、身份验证和缓存。

这是我们 API 调用的最终表格:

现在我们已经准备好测试信标了,但是在此之前,让我们基于TYK主机名在Cobalt Striketeamserver中创建一个新的HTTP侦听器。

现在你只需要在你的Cobalt Strike teamserver中配置一个新的HTTPS监听器,如下所示:

我用ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io作为我的HTTP主机,当然还有端口 443 作为我的监听端口。

现在,一起配置完成,一切都应该按预期工作,在我们生成一个信标之前,让我们尝试打开 http-get API,它是

`https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io/api/v2/login 获取以下信息:

我们从CSteamserver得到了预期的响应,如果我们配置它,其他一切都应该正常工作。

现在,让我们尝试创建一个“stage - less”信标并运行它,看看它是否会按预期工作。

让我们在windows 10上打开它,看看会发生什么!

我们可以看到我们收到了一个信标,并且所有工作都按预期工作!让我们尝试执行一个命令来测试 http-post 端点来测试它:

一切都按预期工作,我们可以看到命令结果。

我们可以使用一种通常用于通过 API 进行身份验证的身份验证机制来保护终端,我们将使用 Basic Auth 作为我们的身份验证机制,仅将其添加到我们的 htt-get 请求中,这样做是为了向你展示这个概念,但是你可以对所有其他终端使用相同的方法。

为此,我们需要将终端设置中的Authentication选项从Open (Keyless)更改为“Basic Authentication”,如下所示:

然后,我们需要添加一个策略来保护这个终端,我们可以在系统管理下的策略部分中做到这一点。

选择API,然后在Global Limits and Quota部分点击确保再次禁用速率限制:

我们现在需要做的最后一件事是配置策略名称并设置密钥过期,如下所示:

点击Create Policy保存新策略,之后我们可以在Polices中看到它:

我们需要做的最后一步是添加一个要使用的新密钥,这是我们需要在基本身份验证中使用的凭据,为此,请转到密钥部分并点击创建密钥,然后在应用策略下选择我们之前创建的策略,从 CHOOSE API 选项中选择我们需要应用这些凭据的 API。

最后,转到身份验证部分并输入你要用于对该终端进行身份验证的用户名和密码,在我的示例中,我将使用test作为我的用户名,“testtesttest作为我的密码,如下所示:

你将收到确认你的密钥已成功创建的消息,如下图所示:

现在让我们尝试导航到http-get终端,并检查基本身份验证是否已启用,如下所示:

这样我们就可以看到在这个终端上启用了 HTTP 身份验证,现在就可以进入最后一部分。

我们需要我们的信标来通过该身份验证,这只需通过向我们的请求传递 `Authorization HTTP 标头来完成,并且我们知道 `Authorization 标头的完整格式是:

所以在我们的例子中,它将是:

我们只需要将该标头添加到我们的Malleable C2配置文件中,如下所示:

在该示例中,CS信标将发送正确的身份验证标头来通过身份验证并到达原始终端。

让我们尝试一下,重新创建一个新的信标并测试它。

我们的信标现在可以通过该终端的身份验证。

当涉及到直接公开或公开访问这些终端响应时,添加这个功能可以增强OPSEC。

对于依赖于TYK云的企业或其任何服务正在使用TYK云的企业来说,这种技术是一种很好的技术,可以让你融入他们拥有的合法网络流量。

即使你的目标不直接使用 TYK 云,使用 TYK.io 域仍然是一个不错的选择,因为它是一个受信任的域并且很多服务都在使用它。

你可以将此技术与你最喜欢的 C2 一起使用,并使用 TYK.io 域使植入/信标隧道成为流量。

参考及来源:https://shells.systems/oh-my-api-abusing-tyk-cloud-api-management-service-to-hide-your-malicious-c2-traffic/


文章来源: http://mp.weixin.qq.com/s?__biz=MzI0MDY1MDU4MQ==&mid=2247545515&idx=3&sn=2bace4a43a984f06bac5652c497edb7d&chksm=e915e291de626b87966b96779bda0750e537efa9691ae6680584126f2554a96527ca37272d14#rd
如有侵权请联系:admin#unsafe.sh