@EricaHe
2015-12-17T06:01:21.000000Z
字数 3979
阅读 915
论文笔记
SSL
作者:Chad Brubaker、Suman Jana、Baishakhi Ray、Sarfraz Khurshid、Vitaly Shmatikov
单位:Google、The University of Texas at Austin、University of California, Davis
论文开发了一种叫做Frankencert的工具,可以自动对SSL/TLS实现的证书认证进行测试。
方法:
1. 随机生成Frankencert——从真实的证书中随机构造生成的一种证书,可以保证语法正确,并且涵盖了各种常见或非常见的extensions和constrains
2. differential test——将生成的Frankencert发送给不同的SSL/TLS实现,如果有实现的表现与其他不同,则可预测此处或许存在问题。
困难:
1. 生成测试证书
证书结构复杂,难以随机生成,或人工制造大量的测试样本,而且对于测试而言,一些在日常使用的证书中不太常见的可能也需要一并考虑在内,以防攻击者伪造证书进行攻击。
2. 解释测试结果
仅仅根据SSL/TLS实现的是否接受一张证书,并不能确切地说明此处发生了什么样的问题,所以自动化测试还要求程序能够正确分析出该实现接受或拒绝一张证书的原因。
Key Challenge:
1. 生成能够被解释的X.509证书
2. 生成的证书要包含有极少或从不在正常证书中出现的部分
由于收集得到的证书都是X.509证书,所以为了测试SSL/TLS实现在面对其他证书时的表现,还另外加了一些证书。
Frankcert生成过程:
随机从证书集中抽取一些证书的一部分来构成证书,除了RSA密钥以及Issuer,这两者是另外赋值的,从而使得Frankencert可以被当做一张中间证书来使用。每张Frankencert的Issuer域必须等于当前证书链中更高一级的证书对象。
从下面的伪代码中可以看出其生成过程。
证书扩展的确定过程:
一些参数:
1. 用了2个CA作为信任根,各自有一张X.509 version1和X.509 version3证书。
2. 每个证书链包含0-3个Frankencert。然而尽管证书链的构造是无误的,依然有可能会由于一些中间证书的随机内容而被SSL/TLS实现拒绝,例如一张中间证书的keyUsage扩展被标记为keyCertSign。
目的:测试SSL/TLS实现在面对符合X.509的ASN.1语法,却不符合X.509规范的证书时是如何表现的。
方法:
1. 获得一张Frankencert中所有扩展的critical bit和extension value
2. 针对每一个extension value,将其替换为一个随机的ASN.1字符串,并可能会将一个空字符插入其中
3. 随机将扩展标记为重要的或不重要的
通过Frankencert Generator,作者共产生了8127600份Frankencert,发现了208个SSL/TLS实现错误,由62022份Frankencert触发。
Differential Test
如果一份Frankencert引发了SSL/TLS实现间的不同反应,程序就会将该证书进行分类。例如,如果A接受了这份证书,B报出了错误34,C报出了错误1,那么该证书就会被分类到0-34-1这一分类下。
当所有的错误都被发现后,就需要对其进行人工检查,去查看其源代码并分析原因。但并不是每一个错误都一定存在安全漏洞,因为X.509的确有一部分并没有明确规定,而是交由实现自身去进行判断。
这种测试方法应该不存在误报率,但会存在漏报。比如在GnuTLS中存在一个漏洞,由语法上存在问题的证书引发的——这就不会被Frankencert检测到,因为Frankencert都是遵循X.509语法的。同样,在所收集到的证书集中不存在的扩展漏洞自然不会被检测到。
通过找到的208个错误中,作者分析并将其归并为15个造成该错误的根本原因,如下表所示。
A.Incorrect checking of basic constraints
B.Incorrect checking of name constraints
上级CA可以限制下级CA的签发域名范围,但是GnuTLS、MatrixSSL和CyaSSL忽略了这一步的检查。
C.Incorrect checking of time
X.509都有notBefore和notAfter的时间戳,但PolarSSL忽视了notBefore时间戳的检查,而当检查notAfter时,它用了当地时间,而不是GMT或任何指定的时区。
D.Incorrect checking of key usage
E.Other discrepancies in extension checks
F. "Users...don't go for the commercial CA racket"
G.Security problems in error reporting
E:Expired
I:Bad issuer
N:Bad name
H.Other checks