23、Https加密流量解析技术分析

加密技术是最常用的安全保密手段,能够保护数据不被窥视,但是也产生了新的问题,一方面是应用系统业务流量加密后,企业自身基于流量内容分析的旁路安全设备将失效,另一方面,攻击者会借助加密流量实施恶意攻击,避开各类NTA产品的检测。

针对加密流量,目前主流的攻击分析手段包括解密后分析和不解密分析。现在网上大多数的文章都是针对“不解密条件下识别和阻断恶意流量”进行分析,在和客户沟通过程中,发现大家其实一直对“如何进行业务加密流量解密分析”存在疑问,只知道针对现有HTTPS的业务,将加密流量通过镜像的方式转发给安全设备探针,安全设备即使导入了证书和服务端私钥也没法解析出内容,却不知道为什么。另外,众多安全厂商宣称其Tap镜像网、数据防泄漏、邮件审计、流量分析产品有旁路解密方案,又是如何做到的?我们慢慢往下看。

本文主要针对HTTPS业务,解析安全设备对其流量进行解密的条件和原理,未尽之处,欢迎大家探讨指正。

HTTPS加解密原理

要知道HTTPS业务的流量加解密原理,首先要知道HTTPS业务的加解密方式和流程。如下图,HTTPS在HTTP的基础上,通过传输加密和身份认证来保证传输过程的安全性,利用TLS和SSL对通信协议进行加密。

为什么HTTPS要用对称+非对称加密?

我们首先来复习一下对称加密、非对称加密和散列函数

对称加密指的是加密和解密使用同一个秘钥,对称加密只有一个秘钥。优点:计算量小、加密速度快、加密效率高,缺点:秘钥的管理和分发非常困难,不够安全。

非对称加密指的是加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥,公钥加密的信息,只有私钥才能解密,私钥加密的信息,只有公钥才能解密,私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。优点:安全性更高,公钥是公开的,秘钥是自己保存的,密匙分发和密匙管理相对简单。缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

散列函数是一种单向密码体制,指的是对信息进行加密,生成不可逆的固定长度的哈希值,一般用于完整性验证和数字签名场景,如验证数据在传输过程中没有被篡改。

总的来说,对称加密算法效率高,可以防窃听,但是要解决密钥交换安全问题;非对称加密的加解密效率低,适合用于认证,不适合用于内容传输,可以防窃听和防仿冒;散列函数不可逆的特性可以防止信息被非法篡改。

HTTPS将如上的技术整合,达到性能和安全的最大化。在HTTPS的交互流程中,客户端发起 HTTPS 请求,服务端返回CA证书,客户端对证书进行身份验证,验证通过后本地生成用于对称加密算法的随机数,通过CA证书中提取的服务器公钥对随机数进行加密传输到服务端,服务端接收后通过服务器私钥解密得到随机数,之后的数据交互通过对称加密算法,使用随机数生成的对称密钥进行加解密。

HTTPS通过非对称加密算法防止”中间人“攻击,同时可以为网站提供身份证明,并通过对称加密对HTTPS 的内容传输进行加密。

HTTPS加解密和数据传输流程

简单来说,HTTPS业务的加解密和数据传输流程可以分三个阶段:证书验证、密钥交换、数据交换。

从上图可以看出:

数据交换阶段主要用于应用系统业务数据的加解密,也就是我们常规理解的数据加密,而该阶段的对话密钥是通过密钥交换阶段计算生成的,对称加密算法实现了业务数据的高效加解密。

密钥交换阶段实现了对称密钥在不安全环境的安全交换,如DH算法,就是利用离散对数计算问题,通过对方的公开值和自己的私有值计算出对称密钥,实现密钥安全交换。

证书验证阶段通过CA证书和数字签名,验证服务器身份,此处使用了非对称加密和散列函数算法,防止用户文件被篡改或伪造。

为什么我有证书和私钥,

还是不能看加密镜像流量?

在这里,回到最开始的第一个问题“针对现有HTTPS的业务,将加密流量通过镜像的方式发给安全设备探针,安全设备即使导入了证书和服务端私钥也没法解析出业务数据内容”,我们可以发现关键节点在于密钥交换环节,如果我们能够通过服务器私钥或者其他某种方式,将密钥交换环节中的保密随机数进行解析,就能获得整个数据交换环节的业务数据内容。

显然,通过RSA算法进行密钥交换时,只要中间人拿到服务端私钥就可以实现明文解包,也就是说,如果我们的HTTPS业务使用的密钥交换算法是RSA,是可以将加密镜像流量进行解密的,那为什么实际业务中解密不了呢?

如上图, DH的加密算法创造的目的就是防止这种解密方式,所以只要了解DH的原理,就能回答这个问题。

DH算法原理介绍

简单来说DH算法是双方协商用同一个大素数p和 素数p的原根q,各自生成随机数X,Y。请求方将q的X次方mod p产生的数值发送给接收方,接收方将q的Y次方mod p产生的数值发送给请求方。请求方再对接收的数值做X次方运算,接收方对接收的数值做Y次方运算,最终生成一样的共享密钥,完成密钥的交换。

①A发给B:A的公钥

②B根据A的公钥,创建只针对A使用的公钥(AB-公)和私钥(AB-私)

③B发给A:AB-公

④A用自己的私钥和对方的公钥算出S:A的私钥+AB-公=S1=S

⑤B用自己的私钥和对方的公钥算出S:AB-私+A的公钥=S2=S

⑥A和B交互的数据,都可以用S解密。所以此时双方就可以正常加密通信了。

举个例子

①首先A和B协商一个随机二元组,q.p(3.7)。

A和B各自在(1,p-1)中取一个随机保密数da、db

并根据da、db算出pa、pb。

A和B所属范围(1,6)——da=05、db=6

pa=q^da mod p = 3^5 mod 7 = 5

pb=q^da mod p = 3^6 mod 7 = 1

②a和b对pa、pb值进行交互,并计算出共享秘钥S

S=pb^da mod p = pa^db mod p = 1

DH如何防止流量被劫持后通过暴力破解的方式进行解密?

中间人劫持流量能够拿到的信息有:q.p(3.7),pa、pb。中间人只需要算出da或者S就能对流量进行解密了。所以题目变成了:

已知公式:pa=q^da mod p,S=pb^da mod p

已知数:q、p、pa、pb

已知范围:da(q.p-1)

求S的值。

我们设N为mod后的商,商一定为整数。则可以得知:

da=log(q)(p*n+pa) 因为da(q.p-1)

所以n的取值范围为:(q^q-pa)/p到(q^(p-1)-pa)/p

因为pa是除以p的余数所以pa<p,< font="">可以忽略不计。

n的取值范围约等于q^q/p到(q^(p-1))/p

最终算出公式:s=pb^log(q)(p*n+pa) mod p,其中q、p、pa、pb为已知数,n为已知范围内的整数,看上去只需要进行遍历就可以破解秘钥了。

用q.p(3.7)套进去计算发现:

n为1-103 ,s唯一值=1,

但是当用q.p(3.1004535809)套进去计算发现:

n约有3^1004535809个,通过暴力破解的方式计算出来已经失去了时效性。甚至当p值更大时,这个值已经无法计算了。

哪些情况下可以实现旁路解密
在目前实际HTTPS业务中,基本采用DH类具备前向安全性的密钥交换算法,所以通过服务端私钥解密的方式在目前基本行不通了,如下图是一个实际HTTPS业务从浏览器看到的内容,可以看出密钥交换算法是ECDHE(DH的升级版),签名加密算法是RSA,会话加密算法是AES。

回到最开始的第二个问题,“众多安全厂商宣称其Tap镜像网、数据防泄漏、邮件审计、流量分析产品有旁路解密方案,又是如何做到的?”。我们来看看某厂商的《xx产品解密算法说明》。

可以发现,里面列了一长串的支持协议,但是用于解密的关键——密钥交换协议都是RSA,如果用了dh之类的前向安全协议,旁路就解密不了,这个场景在现在来看还是比较少见的。

讲到这里,也就解答了“业务加密流量解密分析”涉及的一些技术原理,我们知道了流量解密的关键在于密钥交换使用的是RSA还是DH,我们知道目前大部分 HTTPS 流量用的都是 ECDHE 密钥交换,那我们对明文流量做分析可以怎么做呢?安全设备如何部署和发挥作用呢?我们下次再来回答这些问题,针对负载均衡、waf等具备解包功能的产品进行分析,详细了解其在不同密钥交换方式、不同部署方式下的区别。