2014-10-16 479 views
2

有沒有一種更容易的方法來找出在構建openssl期間指定的選項,例如當時是否定義了OPENSSL_NO_SRTP? 我只能從:
openssl version -a
命令中閃爍有限的信息。但是,如果我只有二進制文件,是否有辦法找出這些選項?此問題背後的原因是,如果未使用此選項編譯openssl,則會引入一個漏洞「CVE-2014-3513」。openssl:如何找到openssl編譯的配置選項

回答

1

如果OpenSLL編譯OPENSSL_NO_SRTP然後ssleay32.dll不包含SRTP supprt相關的功能:SSL_CTX_set_tlsext_use_srtpSSL_get_selected_srtp_profileSSL_set_tlsext_use_srtpSSL_get_srtp_profiles。幸運的是,它們的名稱都有「srtp」,因此您可以使用dumpbin來檢查DLL是否包含這些函數。例如:

dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp"

對我來說,它發現了這些功能,所以我OpenSSL的編譯沒有OPENSSL_NO_SRTP

dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp" 358 57 00026CD0 SSL_CTX_set_tlsext_use_srtp 357 AA 00026D00 SSL_get_selected_srtp_profile 360 B4 00026D10 SSL_get_srtp_profiles 354 E8 00026D40 SSL_set_tlsext_use_srtp

我希望幫助解決你的問題。

P.S. 不幸的是,據我所知,OpenSSL沒有記錄編譯時間選項。

+0

謝謝。真正需要粗體的「無」。 :-) – Khanna111 2014-10-17 18:14:39

+0

沒問題,我認爲「nm」會更容易使用:「nm -C​​.so | grep srtp」 – sirgeorge 2014-10-17 23:29:14

0

感謝@sirgeorge的回答。我忘了指定Linux作爲平臺,因此Linux中的等價物檢查:

$ objdump -f libssl.so -x | grep -i SRTP 
    0000000000000000 l df *ABS* 0000000000000000    d1_srtp.c 
    00000000002609e0 l  O .data 0000000000000030    srtp_known_profiles 
    000000000003d100 g  F .text 0000000000000012    SSL_set_tlsext_use_srtp 
    000000000003cb40 g  F .text 0000000000000149    ssl_parse_serverhello_use_srtp_ext 
    000000000003d120 g  F .text 0000000000000012    SSL_CTX_set_tlsext_use_srtp 
    000000000003ca90 g  F .text 00000000000000ab    ssl_add_serverhello_use_srtp_ext 
    000000000003ca50 g  F .text 0000000000000029    SSL_get_srtp_profiles 
    000000000003ca80 g  F .text 0000000000000008    SSL_get_selected_srtp_profile 
    000000000003cc90 g  F .text 0000000000000128    ssl_add_clienthello_use_srtp_ext 
    000000000003cdc0 g  F .text 0000000000000210    ssl_parse_clienthello_use_srtp_ext 
2

可以約通過version command安裝openssl的配置信息得到大部分(全部?)。特別是,

openssl version -f 

將列出在構建時指定的所有編譯器標誌。