我希望能够测试TLS的POODLE漏洞。
已经有几种方法可以实现,例如Qualys SSLLabs,但它太过局限(只能测试互联网上的TCP端口443服务器)。
还有这个链接,但我在测试时得到了很多误报和漏报:http://www.exploresecurity.com/testing-for-poodle_tls-manually/ 因此,我现在正在尝试修改OpenSSL 1.0.2d的TLS实现,以便能够发送无效数据包(使用openssl s_client ...),并观察服务器的行为。
即使我不太熟悉C语言,我也能在OpenSSL中找到一个有趣的代码实现AES-CBC-SHA的填充(根据RFC 2246),位于
我将其修改为以下内容,以更改第一个填充字节,使其不符合RFC规范:
然后进行编译和测试:
已经有几种方法可以实现,例如Qualys SSLLabs,但它太过局限(只能测试互联网上的TCP端口443服务器)。
还有这个链接,但我在测试时得到了很多误报和漏报:http://www.exploresecurity.com/testing-for-poodle_tls-manually/ 因此,我现在正在尝试修改OpenSSL 1.0.2d的TLS实现,以便能够发送无效数据包(使用openssl s_client ...),并观察服务器的行为。
即使我不太熟悉C语言,我也能在OpenSSL中找到一个有趣的代码实现AES-CBC-SHA的填充(根据RFC 2246),位于
crypto/evp/e_aes_cbc_hmac_sha1.c
的第518行:/* pad the payload|hmac */
plen += SHA_DIGEST_LENGTH;
for (l = len - plen - 1; plen < len; plen++)
out[plen] = l;
我将其修改为以下内容,以更改第一个填充字节,使其不符合RFC规范:
/* pad the payload|hmac */
plen += SHA_DIGEST_LENGTH;
for (l = len - plen - 1; plen < len; plen++) {
if (plen == len - l - 1)
out[plen] = (l + 1) % 256;
else
out[plen] = l;
}
然后进行编译和测试:
./config
make
./apps/openssl s_client -connect www.google.com:443 -servername www.google.com -tls1 -cipher AES128-SHA
我能够连接并发起HTTP请求,并得到响应……
所以我的问题是:我修改的是正确的文件吗?还是其他什么原因呢?
非常感谢您的帮助。