HTTPS可信证书
11月9日维基解密曝光了名为Vault8的新一系列CIA网络武器,其中公布蜂巢Hive工具的源代码。在Hive框架中,为了躲避管理员的检测,CIA开发了几款虚假的数字证书,以逃过类似卡巴斯基杀毒软件的查杀。
Hive是一个植入框架,目的是让CIA能够非常隐蔽地控制其部署在受感染机器上的恶意软件。它提供针对多种系统的定制植入并实现了多种平台植入任务的后台控制工作,协助CIA从植入恶意软件的目标机器中以HTTPS协议和数据加密方式执行命令和窃取数据。
在VPN环境下,恶意软件经过认证会在后台和恶意网站通信,恶意软件相关的流量会被隐藏在Blot的CIA服务器上,用于向恶意软件操作管理端口(蜜罐)发送流量,Hive的结构框架图如下所示。

其中,植入程序认证的数字证书是由CIA冒充现有实体产生的。在源代码中为卡巴斯基实验室构建了假证书,假装由开普敦的Thawte Premium Server CA签署。这样一来,即便目标组织查看到了网络流量,也可能错误地以为流量来自那些CIA冒充的实体。这里对这部分内容进行实验,记录一下。
理论知识
- 数字证书是一种网络上证明持有者身份的文件,同时还包含有公钥。证书的真伪需要一个验证方式,而验证方需要认同这种验证方式,以完成证书的颁发过程。一个https的站点需要和一个证书绑定,客户端通过维护一个“根受信任机构列表”完成站点的可信识别过程,而客户端是否信任这个站点的证书取决于客户端程序是否导入了证书颁发者的根证书。
- 以下证书生成过程基于openssl,它是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。我们应用它构造密钥并进行X.509证书伪造。
- X.509证书是一种通用的证书格式,符合ITU-T X.509国际标准,它主要包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密;
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名;
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息。 - 了解linux中Apache服务的相关知识,对其配置文件:/etc/apache2/sites-
available/default-ssl.conf有基础的了解;了解linux下提供dns服务器的bind9服务相关配置。
实验过程
服务端
服务器配置:apache2+bind9+openssl
证书颁发过程如下:
- 开启Apache2的SSL模块,详见/etc/apache2/sites-available/default-ssl.conf:
1
2# 开启SSL模块
SSLEngine on
这段配置代码的作用是将我们生成的证书导入到网站中从而实现https安全访问。
- 首先生成一个私钥,用于对通信过程中数据的加解密;生成私钥后,创建证书签名请求并发送给证书颁发机构;证书颁发机构验证请求者的身份之后,出具签名证书。本实验通过openssl实现证书颁发过程。
- 生成RSA密钥文件KEY。用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密。
- 生成证书请求文件CSR,用于提交给证书颁发机构(CA)对证书签名。
- 生成CA证书。前面提过X.509证书的认证者总是CA或由CA指定的人,所以得先生成CA的证书。
- 生成自颁证书。用上一步生成的CA证书给自己颁发证书
1
2
3
4
5
6
7
8
9
10
11# 生成rsa私钥、2048位强度、密钥文件名server.key
openssl genrsa -out server.key 2048
# 生成请求文件。依次输入国家,地区,城市,组织,组织单位,Common Name和Email。
# Common Name应该与域名保持一致,否则会引起浏览器警告。
openssl req -new -key server.key -out server.csr
# 生成CA证书 ca.crt是根证书
openssl req -new -x509 -key server.key -out ca.crt -days 3650
# 自颁证书。server.crt有证书持有人信息,持有人公钥以及签署者的签名等信息
openssl x509 -req -days 3650 -in server.csr \
-CA ca.crt -CAkey server.key \
-CAcreateserial -out server.crt
至此,证书生成过程完成。分别生成如下文件
server.key 私钥
server.csr 证书请求文件
ca.crt CA证书
server.crt 自颁发的证书
最后,将生成的用于加解密的密钥和签署的自颁证书文件导入到Apache服务器配置文件/etc/apache2/sites-available/default-ssl.conf中
1 | # 存放签署过的证书 |
客户端
在浏览器“受信任的根证书颁发机构”中导入根证书文件ca.crt,实现https安全访问网站。
参考链接
- 本文链接:https://fr4nk404.github.io/2017/11/15/https原理及部署/
- 版权声明:Copyright © 2019 fr4nk404's Blog. Powered by Hexo. Theme by Cho.