http://wiki.wireshark.org/SSL
http://wirewatcher.wordpress.com/2010/07/20/decrypting-ssl-traffic-with-wireshark-and-ways-to-prevent-it/
去年在打金盾獎決賽時遇到的一個題目,給你一個內含SSL封包的pcap檔,要求你來解密.
Wireshark這個功能聽起來好像很炫,很神奇.
但如果你了解SSL加密的情況時,就會知道你還是需要一把ssl server的private key才可以.
因為在PKI架構下,雖然packet本身的加密是使用client的對稱式key來加密,
但這把key一開產生出來時會用server的public key來加密,
傳給server, 告訴server說之後的通訊都用這把對稱式key來加解密.
也因此要解出這把對稱式key,你也就要有server的private key才行.
(或是直接從browser得知自己client產生的對稱式key來解密SSL封包,
Firefox外掛的httpfox應該就是用這種方式,
burpsuite套件是使用類似MITM的手法來監視,修改封包)
Wireshark官網提供了一組 example檔讓你來練習,這個example檔是用
印度蛇油的 CA key來加密的.
聽名稱就知道這個是騙人的東西,所以它一般也附在各Linux distribution裡面.
補充說明:
有些SSL server和browser支援更安全的協定ECDHE(橢圓曲線的DH金鑰交換演算法)
它最主要就是增加一個特色Perfect Forward Secrecy,
這特色用來保護就算以後Server的私鑰外流了
攻擊者在外流前就算測錄了所有封包也無法解密,因為封包的加密的過程有用到DH演算法
的一個暫時性變數(就是使用DH協定時,雙方只有自己知道的數值,白話一點的就解釋就是,DH每次的對話,公私鑰都是隨機生成的,所以你這次的私鑰外流了,只能解出這次的對稱式金鑰還有明文而已,但用RSA交換金鑰的話,因為RSA公私鑰是固定的,所以一但私鑰外流,過去所加密的對稱式金鑰以及明文都會被破解),
沒有這變數就算你拿到Server私鑰也無法解密封包.
在SSL協定的Cipher Suite列表中,有使用ECDHE的Cipher Suite會比較建議排在前面
再來是DHE最後是沒有使用金鑰交換協議的協定.
可以參考維基百科主機的SSL server test(目前測試被評為A+)
https://www.ssllabs.com/ssltest/analyze.html?d=en.wikipedia.org&hideResults=on
關於Perfect Forward Secrecy詳細介紹可以參考Vincent Bernat寫的這篇文章
SSL/TLS & Perfect Forward Secrecy
在SSL cipher Suite列表裡,如果你的金鑰交換協議採用 Diffie-Hellman的話
只有採用 Ephemeral 的 DH 金鑰交換協議的 DHE 或 ECDHE
才有支援 Forward Secrecy,如果只是 DH 或 ECDH 的話 則沒有保證 Forward Secrecy
因為這時候的 DH 私鑰會是永久的,基本上是會儲存在硬碟裡面,被偷走的話就整個GG了
而採用 Ephemeral 的情況下,通常金鑰會存在RAM裡面一段時間就換新了,所以可以保證
過去加密的資料不會在未來被解密.
所以整個SSL/TLS加密過程中,目前大部份的情況是
DHE/ECDHE拿來做為 symmetric key 的 key exchange protocols(早期有些情況未採用)
RSA的 public key(搭配CA的簽署) 拿來做為身證驗證
AES加密整個之後的通訊封包,因為 symmetric key加解密的速度比較快
留言列表