SSL: 鮮為人知的安全大漏勺
一月份我曾經(jīng)寫過一篇名為 SSL: Really broken this time的文章,其中提到了如果證書簽發(fā)機構使用了MD5算法進行數(shù)字簽名,那么證書是可以被偽造的。當然,這個漏洞很容易被糾正,只要證書頒發(fā)機構都采用SHA-1 而不是MD5算法就可以了。盡管如此,很多人還是認為,不久之后 SHA-1也會步MD5的后塵。

SSLsniff
其實破解 SHA-1 只是時間問題了。也許你還記得Moxie Marlinspike,他曾經(jīng)開發(fā)了一個非常先進的黑客工具SSLsniff。 這個工具可以發(fā)現(xiàn)Internet Explorer中的漏洞,即使在使用SSL也可以發(fā)動 中間人攻擊 (MitM)。 微軟最終修補了這個漏洞。
但是即使修補了漏洞, SSLsniff仍然是一款功能強大的工具。比如SSLsniff 可以用來在密碼破解者組織(如我上面說的MD5破解組織)中進行MitM攻擊演示。
SSLstrip
Moxie Marlinspike最新開發(fā)的升級版黑客工具叫做SSLstrip。這款工具的目的很簡單,就是讓惡意攻擊者在任何加密情況下獲取用戶的敏感信息。Moxie Marlinspike注意到大部分用戶在上網(wǎng)時都不會要求進行連接加密(HTTPS),甚至一些對信息敏感的網(wǎng)站也沒有全程使用加密頁面,比如下圖中的網(wǎng)站,因此他決定要繞過加密過程。

最初的網(wǎng)站首頁都是沒有加密的,在用戶輸入了某些信息后,HTTPS才會啟用,如下圖所示:

SSLstrip是一個MitM協(xié)議,在這個例子中,它抓住了用戶和銀行網(wǎng)站服務器之間的一個漏洞。接下來,讓我們看看這個漏洞是怎么被SSLstrip利用的:
1. 首先,我在瀏覽器中輸入http://www.usbank.com進入銀行網(wǎng)站首頁
2. 輸入我的用戶名并點擊回車
3. SSLstrip 抓取了銀行網(wǎng)站URL和我的用戶名
4. SSLstrip 連接到銀行網(wǎng)站服務器,并提交了我的用戶名
5. SSLstrip 接著向瀏覽器返回銀行Web服務器所返回的新頁面
6. 我在新頁面中輸入自己的密碼。
7. SSLstrip再次獲取我的密碼,并將密碼提交給銀行網(wǎng)站服務器。此時銀行網(wǎng)站服務器就認為我已經(jīng)登錄了。
8. SSLstrip再次將銀行網(wǎng)站返回的新頁面提交到瀏覽器上,在我看來,我已經(jīng)正常登錄并可以進行下一步操作了。
也許你會問,為什么HTTP后面沒有加“s”,銀行網(wǎng)站的鏈接不都是HTTPS形式的嗎?在這個例子里是沒有“s”的,因為SSL連接是建立在被攻擊的電腦和銀行網(wǎng)站服務器間的。我只是將所有正確的頁面通過SSLstrip返回給了瀏覽器,但是這個過程并沒有安全隧道。那么誰獲得了我的密碼也就可想而知了吧?
我注意到,有一些警惕性很強同時觀察力很好的用戶,會發(fā)現(xiàn)這種花招,但是對于大部分用戶來說,很可能會毫無察覺。要了解更多有關這個漏洞的細節(jié),可以參考Moxie Marlinspike在Black Hat上的演講幻燈片New Tricks for Defeating SSL in Practice (PDF格式)。整個過程都解釋的很詳細。
附加功能
在Moxie Marlinspike的演講幻燈片中,他還指出了SSLstrip的其他幾個功能,可以讓不安全的網(wǎng)站看上去更安全,從而達到欺騙用戶的目的。因為大部分網(wǎng)站都會在自己的網(wǎng)站域名前加上一個網(wǎng)站圖標,而SSLstrip利用了這個特點,可以讓攻擊者自己制定一個圖標顯示在非安全的網(wǎng)址前面,比如下面這個圖標。

鎖是代表安全的物體,如果在網(wǎng)址前加上了一個鎖形的圖標,那么大部分用戶都會以為自己所訪問的網(wǎng)站是安全的。

如果有人要求,攻擊者甚至會提供一個真正的SSL連接,而URL與用戶應該訪問的只有些許不同。不同之處在于網(wǎng)址的最后多了幾個字符。Moxie Marlinspike在幻燈片中是這樣解釋的:

升級瀏覽器
我們人類都有有些與生俱來的習性,這是任何人都不能反駁的。因此我也只能老實說,我并不是每次都能敏銳的發(fā)現(xiàn)黑客設下的陷阱。幸運的是,這個問題已經(jīng)有人討論過了。之前 TechRepublic的總編Jason Hiner就給我發(fā)了一篇George Ou的文章HTTPS 網(wǎng)頁劫持從理論走進現(xiàn)實。
文章中建議開發(fā)人員應該賦予網(wǎng)頁瀏覽器更多的智能性,讓瀏覽器知道在什么情況下應該使用SSL加密協(xié)議,如果該使用SSL的時候卻沒有使用,就斷開與Web服務器的連接。 George還表示, Google在它的Chrome 2.o瀏覽器中就針對這個問題進行了研發(fā)。希望其他瀏覽器開發(fā)人員也能考慮到這一點。
總 結
首先我要感謝 Black Hat 允許我使用他們的Logo ,并感謝Moxie Marlinspike允許我使用他的演示幻燈片作為文章的部分內容。另外,他希望廣大網(wǎng)民都對SSL攻擊有所認識的努力也讓我感到敬佩。
另外,我注意到,本文所說的攻擊,是在用戶不經(jīng)意的情況下才會發(fā)生的。幸運的是,經(jīng)過我的提醒,很多人已經(jīng)能夠注意到URL上的細微差別,從而有可能避免落入黑客的陷阱。如果你覺得自己足夠警惕,那么回憶一下上次你訪問使用SSL的網(wǎng)站時,有沒有留意過URL前面的HTTPS標記呢?起碼我是沒有。