Jyo*_*Lys 9 c security ssl openssl cryptography
我希望能够通过TLS测试POODLE漏洞.
例如,Qualys SSLLabs已经有多种方法可以做到这一点,但它限制性太强(只有互联网上可用的服务器的TCP端口443).还有这个链接,但在测试时我得到了很多误报/否定:http://www.exploresecurity.com/testing-for-poodle_tls-manually/
所以现在我试图修改OpenSSL 1.0.2d的TLS实现,以便能够发送无效数据包(使用openssl s_client ...)并查看服务器的行为.
即使我不熟悉C,我也可以crypto/evp/e_aes_cbc_hmac_sha1.c
在第518行的OpenSSL中找到有趣的代码来实现AES-CBC-SHA(根据RFC 2246)的填充:
/* pad the payload|hmac */
plen += SHA_DIGEST_LENGTH;
for (l = len - plen - 1; plen < len; plen++)
out[plen] = l;
Run Code Online (Sandbox Code Playgroud)
我将其修改为此以便根据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;
}
Run Code Online (Sandbox Code Playgroud)
然后编译并测试:
./config
make
./apps/openssl s_client -connect www.google.com:443 -servername www.google.com -tls1 -cipher AES128-SHA
Run Code Online (Sandbox Code Playgroud)
我可以连接并发出一个得到响应的HTTP请求......
所以我的问题是:不是我修改过的好文件,还是其他的东西?
非常感谢你的帮助.
我遇到了同样的问题,在这里回答。基本上,您需要修改 ssl3_enc 函数(在 s3_enc.c 文件中)并替换
memset(&rec->input[rec->length], 0, i);
Run Code Online (Sandbox Code Playgroud)
和
for(size_t j = 0; j < i; ++j) {
rec->input[rec->length + j] = rand() % 256;
}
Run Code Online (Sandbox Code Playgroud)
当块对齐良好并且没有填充时,最好增加填充大小。为此,只需添加:
i += bs;
Run Code Online (Sandbox Code Playgroud)
就在这些行之前
/* we need to add 'i-1' padding bytes */
l += i;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1688 次 |
最近记录: |