CIA Hive Beacon Infrastructure 复现2——使用 Apache mod_rewrite 实现 https 流量分发
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 参数,如下图
参数如下:
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
如下图
(3) 客户端将自签名证书安装到 受信任的根证书颁发机构
安装后如下图
(4) 客户端访问 Apache 服务器
访问失败,提示 它的安全证书没有指定主题备用名称
,如下图
常规方法和快捷方法生成的证书均存在这个问题
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 服务器,证书有效,一切正常,如下图
补充:
在未来,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
访问网页时弹框提示,确认证书后正常访问,如下图
(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 技术交流群。
上一篇: 使用 LUA 脚本绕过 Applocker 的测试分析
下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论