CIA Hive Beacon Infrastructure 复现2——使用 Apache mod_rewrite 实现 https 流量分发

发布于 2024-09-25 22:45:55 字数 8949 浏览 30 评论 0

0x00 前言

上篇文章介绍了使用 Apache 的 mod_rewrite 模块来实现 http 流量分发,本文将在此基础上介绍 https 的流量分发,对客户端的证书进行判断,若证书有效,才会将流量转发至真实服务器。

0x01 简介

本文将要介绍以下内容:

  • Windows 系统下配置 Apache 开启 ssl
  • Ubuntu 系统下配置 Apache 开启 ssl
  • 使用 openssl 生成证书的方法和难点
  • Apache Https 双向认证的配置
  • 实现 https 流量分发的过程

0x02 Windows 系统下配置 Apache 开启 ssl

1、下载包含 openssl 的 Apache

地址:http://httpd.apache.org/download.cgi

选择需要的版本,测试版本 Apache 2.4.33,下载地址:https://www.apachehaus.com/cgi-bin/download.plx?dli=wUWZ1allWW00kej9iUG5UeJVlUGRVYRdnWzQmW

2、安装

解压后通过命令行安装:

cd \Apace24\bin
httpd -k install

3、配置 httpd.conf

位于 \Apace24\conf\httpd.conf

(1)

定位:

#LoadModule ssl_module modules/mod_ssl.so

去掉#

(2)

定位:

<IfModule ssl_module>
Include conf/extra/httpd-ahssl.conf
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include conf/extra/httpd-ahssl.conf 改为 Include conf/extra/httpd-ssl.conf

注:httpd-ahssl.conf 是 Apache 自带的 ssl 配置,默认生成了可用的私钥和证书(位于 \Apace24\conf\ssl ),也可以直接修改 httpd-ahssl.conf 进行配置

4、配置 httpd-ssl.conf

位于 \Apache24\conf\extra\httpd-ssl.conf

(1)

定位:

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs"
ServerName www.example.com:443

修改为:

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs"
ServerName test.com:443

(2)

定位:

SSLCertificateFile "${SRVROOT}/conf/server.crt"

修改为自己证书文件的路径(后面会介绍生成方法)

(3)

定位:

SSLCertificateKeyFile "${SRVROOT}/conf/server.key"

修改为自己私钥文件的路径(后面会介绍生成方法)

5、重启 apache

httpd.exe -k restart

0x03 Ubuntu 系统下配置 Apache 开启 ssl

1、安装 apache

sudo apt-get install apache2

2、安装 openssl

sudo apt-get install openssl

3、开启 Apache SSL 模块

a2enmod ssl

4、编辑文件 /etc/apache2/sites-enabled/default-ssl.conf

指定私钥文件和签名证书的路径

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/test.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/test.com.key

5、启用 Apache 默认的 SSL 虚拟主机

a2ensite default-ssl

6、重启 Apache:

sudo /etc/init.d/apache2 restart

0x04 生成 SSL 证书的流程

1、客户端生成一对公钥和私钥(.key 文件)

2、客户端生成证书请求文件(.csr 文件)

将 csr 文件发送给 CA 机构进行校验,若审核通过,CA 机构使用自己的私钥对 csr 文件进行签名,生成证书文件(.crt 文件),发给用户,用户使用该证书证明自己的身份

生成方法:

输入:

  • 用户私钥
  • 用户信息

输出:

csr 文件,包括用户公钥和用户信息

3、CA 审核请求,生成证书文件(.crt)

一般是将 csr 文件发送到证书签发机构 CA 进行校验,但是我们可以自己对其审核,生成一个自签名证书(可用于测试,无法保证可信)

0x05 使用 openssl 生成 SSL 证书

Ubuntu 安装 openssl 后可直接运行 openssl

Windows 安装 Apache 后默认安装 openssl,位于 \Apache24\bin

1、常规方法:

(1) 生成 2048 位的加密私钥

openssl genrsa -out server.key 2048

(2) 生成证书签名请求

openssl req -new -key server.key -out server.csr

接着依次填入配置信息, Common Name 项要同域名对应(测试域名为 test.com)

(3) 生成自签名证书

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

2、快捷方法:

通过网站自动生成 openssl 配置参数,地址如下:https://myssl.com/csr_create.html

填入配置信息后自动生成 openssl 参数,如下图

Alt text

参数如下:

openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout test.com.key -out test.com.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=11/OU=22/CN=test.com"

生成私钥文件 test.com.key 和证书签名请求 test.com.csr

接着生成自签名证书:

openssl x509 -req -days 3650 -in test.com.csr -signkey test.com.key -out test.com.crt

实际测试:

(1) 修改 apache 服务器的 ssl 配置

SSLCertificateFile 指向自签名证书(.crt 文件) 路径

SSLCertificateKeyFile 指向私钥文件(.key 文件) 路径

重启 apache 服务

(2) 客户端修改 hosts 文件:

apache 服务器 ip 对应 test.com

如下图

Alt text

(3) 客户端将自签名证书安装到 受信任的根证书颁发机构

安装后如下图

Alt text

(4) 客户端访问 Apache 服务器

访问失败,提示 它的安全证书没有指定主题备用名称 ,如下图

Alt text

常规方法和快捷方法生成的证书均存在这个问题

3、解决方法

证书缺少主题备用名称 SAN (Subject Alternate Name),需要通过配置文件进行添加

参考资料:https://support.citrix.com/article/CTX135602_

新建文件 req.cnf,内容如下:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = test.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = test.com

注:CN 和 DNS.1 都需要设定为域名(测试域名为 test.com)

生成私钥和自签名证书:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout test.com.key -out test.com.crt -config req.cnf -sha256

修改 apache 服务器的 ssl 配置,指定新的私钥文件(test.com.key) 和证书文件(test.com.crt),重启 apache 服务

客户端安装自签名证书文件 test.com.crt

访问 Apache 服务器,证书有效,一切正常,如下图

Alt text

补充:

在未来,openssl 有可能支持设置参数 DNS.1 ,相关资料:https://github.com/openssl/openssl/pull/4986

0x06 规则配置实现 https 流量分发

1、开启双向认证

服务器验证客户端证书,如果客户端证书有效,客户端才能正常访问网页,否则无法访问

(1) Windows 系统

1.生成客户端证书

openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout user.key -out user.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=11/OU=22/CN=user"
openssl x509 -req -days 365 -in user.csr -signkey user.key -out user.crt
openssl pkcs12 -export -cacerts -inkey user.key -in user.crt -out user.p12

2.服务器编辑文件 \Apache24\conf\extra\httpd-ssl.conf

添加客户端证书的路径,指向 user.crt

SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/test.com.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/test.com.key"
SSLCACertificateFile "${SRVROOT}/conf/user.crt"

开启客户端认证:

SSLVerifyClient require  
SSLVerifyDepth  10

3.重启 Apache

httpd.exe -k restart

4.客户端安装证书 user.p12

访问网页时弹框提示,确认证书后正常访问,如下图

Alt text

(2) Ubuntu 系统

1.生成客户端证书

openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout user.key -out user.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=11/OU=22/CN=user"
openssl x509 -req -days 365 -in user.csr -signkey user.key -out user.crt
openssl pkcs12 -export -cacerts -inkey user.key -in user.crt -out user.p12

2.服务器编辑文件 /etc/apache2/sites-enabled/default-ssl.conf

指定私钥文件、签名证书和客户端证书的路径

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/test.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/test.com.key
SSLCACertificateKeyFile /etc/apache2/ssl/user.crt

开启客户端认证:

SSLVerifyClient require  
SSLVerifyDepth  10

3.重启 Apache

sudo /etc/init.d/apache2 restart

4.客户端安装证书 user.p12

正常访问

2、流量转发

配置方法参照上篇文章,本文不再赘述

最终能实现对 Https 的流量进行判断,如果证书有效,转发到真实服务器

如果证书无效,可选择转发到 Cover Server 或是不提供服务

0x07 小结

本文介绍了 Windows 系统和 Ubuntu 系统下配置 Apache https 的方法,分享 SSL 证书生成方法和配置过程,在技术研究的角度实现了对 Https 的流量判断,根据条件进行 https 流量的分发。

至此,成功实现 Hive 的流量分发功能。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文