对于“证书认证中间人攻击漏洞”的验证
2006-8-24
一、 背景
Internet Explorer的SSL实现存在问题,远程攻击者可以利用这个漏洞进行中间人攻击。
在通常情况下,WEB站点的管理员通过SSL进行通信加密,要实现加密通信,管理员需要生成证书并由CA证书授权中心签发,该WEB站点的URL会保存在证书的识别名小节中的CN(公用名)字段中。
CA会验证管理员是否合法拥有的CN字段中的URL,签发证书并返回证书。假定管理员尝试对www.thoughtcrime.org进行加密,就有如下的证书签发过程:
[CERT - Issuer: VeriSign / Subject: VeriSign]
-> [CERT - Issuer: VeriSign / Subject: www.thoughtcrime.org]
当WEB浏览器接收到这个证书时,必须验证CN字段是否与它刚连接的那个域名匹配,并且是否是由一个了已知的CA证书签名,这种情况下攻击者不可能使用合法的CN名和合法的签名来替代证书,所以不存在中间人攻击。
但是有些情况下,为了方便会使用本地授权,因此这种情况下www.thoughtcrime.org会从本地授权中获得如下的证书链结构:
[Issuer: VeriSign / Subject: VeriSign]
-> [Issuer: VeriSign / Subject: Intermediate CA]
-> [Issuer: Intermediate CA / Subject: www.thoughtcrime.org]
当WEB浏览器接收到此信息时,它必须验证分支证书的CN字段是否与它刚连接的那个域名匹配,以及该证书是否是由中间CA所签发,并且中间CA签发的证书是否由已知CA证书签发。最后,WEB浏览器还应该检查所有中间证书是否有合法的CA Basic Constraints,也就是说这些分支证书是否有合法授权进行证书签发。
但Internet Explorer存在设计漏洞,没有检查CA Basic Constraints信息,这样,具有任意域一个名合法CA签发证书的攻击者可以生成任意其他域名的合法CA证书。
假设攻击者是www.thoughtcrime.org的合法管理者,他可以首先可以生成一合法证书并从VeriSign中请求签名:
[CERT - Issuer: VeriSign / Subject: VeriSign]
-> [CERT - Issuer: VeriSign / Subject: www.thoughtcrime.org]
然后为任意域如(www.amazon.com)生成一证书,并使用自己的证书进行签名:
[CERT - Issuer: VeriSign / Subject: VeriSign]
-> [CERT - Issuer: VeriSign / Subject: www.thoughtcrime.org]
-> [CERT - Issuer: www.thoughtcrime.org / Subject: www.amazon.com]
由于IE不会检查www.thoughtcrime.org的Basic Constraints信息,IE就会按照这个证书链合法接收www.amazon.com域。
任何人拥有任何CA签发的证书(和相应的私钥)可以欺骗任何用户。
http://www.microsoft.com/technet/security/bulletin/MS02-050.mspx
二、 准备工作
1. 签发根CA
n openssl genrsa -des3 -out myrootca.key 1024
n openssl req -new -key myrootca.key -out myrootca.req
n openssl x509 -req -days 7305 -extfile rootca.conf -signkey myrootca.key -in myrootca.req -out myrootca.crt
2. 签发中级CA
n openssl genrsa -out subca.key 1024
n openssl req -new -key subca.key -out subca.req
n openssl x509 -req -days 3650 -sha1 -extfile subca.conf -CA myrootca.crt -CAkey myrootca.key -CAserial myrootca.srl -CAcreateserial -in subca.req -out subca.crt
三、 流程一:使用子CA签发服务器证书
1. 使用IIS产生一个证书请求名为certreq.csr
2. 使用中级CA签发一个服务器证书
openssl x509 -req -days 3650 -sha1 -extfile server.conf -CA subca.crt -CAkey subca.key -CAserial subca.srl -CAcreateserial -in certreq.txt -out serverbysubca.crt
3. 安装服务器证书到IIS
4. 正常建立SSL连接
四、 流程二:使用根CA签发的服务器证书签发下级服务器证书
1. 使用根CA签发一个服务器证书
openssl x509 -req -days 3650 -sha1 -extfile server.conf -CA myrootca.crt -CAkey myrootca.key -CAserial myrootca.srl -CAcreateserial -in myhost.req -out myhost.crt
2. 使用IIS产生一个证书请求名为certreqsub.txt
3. 使用服务器证书签发一个下级服务器证书
openssl x509 -req -days 3650 -sha1 -extfile server.conf -CA myhost.crt -CAkey myhost.key -CAserial myhost.srl -CAcreateserial -in certreqsub.txt -out serverbyhost.crt
4. 安装到服务器证书到IIS,能够启动SSL,但是无法验证
5. 在IE里面导入根CA签发的服务器证书到“中级证书颁发机构”
结果直接察看证书显示为:
此时,IIS的SSL无法建立。
五、 结论
此漏洞现于2002年,对于安装了补丁的系统就不存在这样的漏洞。
六、 附录A 签发证书的扩展项
1. 根CA :rootca.conf
basicConstraints = CA:true keyUsage = keyCertSign, cRLSign
|
2. 子CA:subca.conf
basicConstraints = CA:true,pathlen:0 keyUsage = keyCertSign, cRLSign nsCertType = sslCA, emailCA, objCA |
3. 服务器SSL证书:server.conf
basicConstraints = CA:false keyUsage=digitalSignature,keyEncipherment,dataEncipherment, keyAgreement nsCertType = server extendedKeyUsage = serverAuth, msSGC, nsSGC |
七、 附录B 已现的SSL漏洞
1. 当IE通过点击图像<img>或者在帧<iframe>中连接到一个服务器时,IE只检查SSL证书是否是由可信的根服务商提供的,而没有验证证书有效期以及其他内容。(MS00-039)
2. 在同一个IE会话中,一旦成功的建立了SSL连接,对于新的SSL连接,IE将不再对证书进行任何的检查。(MS00-039)
3. 证书认证中间人攻击漏洞:IE不检查中间证书是否有合法的CA Basic Constraints,任何人拥有任何CA签发的证书(和相应的私钥)可以签发下级证书来欺骗任何用户。(MS02-050)
Certificate Validation Flaw Could Enable Identity Spoofing (Q328145)
4. SSL漏洞 CAN-2004-0120 风险级别 高
微软安全套接层(Microsoft Secure Sockets Layer)函数库提供对安全通讯协议的支持,这些协议包括Transport Layer Security 1.0 (TLS 1.0), Secure Sockets Layer 3.0 (SSL 3.0),Secure Sockets Layer 2.0 (SSL 2.0), 和Private Communication Technology 1.0 (PCT 1.0)协议。windows的SSL函数库没有有效检查输入的数据,恶意的攻击者可以构造特殊的SSL请求,这些请求可能导致win2000和winxp的SSL函数库停止响应,而在win2003中可能会导致系统重新启动。(MS04-011)