如何劫持https的請求

  突然被問到https網站就一定是安全的嗎?如果想要對其發起攻擊,有可能嗎?
  我當時想到跨域了,然後就說不一定是安全的,如果不對跨域做出限制的話,還有兩種方法可以實現。更改端口號和域名。因爲不對跨域做限制是可以發起CSRF(跨站請求僞造cross-site request forgery)的攻擊的。
看到這篇博客總結的很詳細,所以轉載過來總結一下:

  • 黑客用自己的證書+自己的域名
  • 證書劫持+用自己的域名
  • 域名劫持+自己的證書
  • DNS域名劫持+證書劫持
  • 域名入侵
  • 中間人證書欺騙攻擊
  • httpsStrip
黑客用自己的證書+自己的域名

方法描述: 黑客精心做一個類似於qq.com的網站: oq.com, 並且給自己的網站申請https證書。粗心的用戶打開這個長得很像qq.com的網站時,看到瀏覽器中亮起了綠色的小鎖,誤以爲是安全的qq網站。

這方法相當於做一個釣魚網站,這裏所有https證書都是黑客自己的,並沒有入侵一說。僅僅是釣魚而已。對待這種攻擊,我們平常要非常小心的去看下地址欄裏的網址,不要打開陌生人給的鏈接。

證書劫持+用自己的域名

這樣做是毫無意義的,因爲既然黑客要用自己的域名釣魚了,直接用自己的證書就行了,幹嘛要去竊取目標網站的證書。。。

不過從技術上來看的話,由於服務器證書是可以公開的,訪問網站服務器自動就會把證書發送給瀏覽器。 所以我們確實可以劫持目標網站傳來的證書,把證書拿來作爲自己釣魚網站的證書來使用。
但這樣瀏覽器會報錯的,別忘了https原理中我們講到的證書校驗的三步驟;瀏覽器校驗時除了驗證證書本身是否是CA機構頒發的,而且要驗證證書內容和當前訪問的網站是否一致,如果不一致也會爆出證書錯誤的提示的。

如果用戶看到瀏覽器警告證書錯誤後,依然點擊 繼續訪問 那這樣花樣作死的行爲誰也擋不住。

域名劫持+用自己的證書

例如黑客將域名劫持,指向自己的服務器,自己服務器上放置自己生成的私有證書(黑客只能這樣做,因爲他沒有域名控制權是無法向CA機構申請該域名的證書的)。 這種情況瀏覽器會報錯嗎?

答案是肯定的,你自己造一個hack.com域名的合法CA證書,在瀏覽器端對證書進行簽名校驗時會發現這個證書不屬於全球公認的合法CA機構頒發的, 會報出證書錯誤

DNS域名劫持+證書劫持

上面方法還是有缺陷的,會因爲證書和網站信息不匹配而被瀏覽器警告,畢竟現在瀏覽器的警告做的越來越鮮豔,我們不能指望小白用戶去點擊繼續訪問。

所以,我又想到一個辦法,我們能否既把用戶的DNS劫持掉、也把目標網站的證書也劫持掉,直接讓他們訪問目標網站時指向我的服務器,而且還用的是他訪問的目標網站的合法證書呢?

DNS劫持這一步,顯然是可以的做到,而且現在越來越簡單可以做到;

盜取真實網站的證書也是可以的,畢竟證書是公開的。

然而,要實現https欺騙還是不行。因爲雖然我們劫持了目標網站的證書,但是我們沒有目標服務器的私鑰。 所以儘管在客戶端進行證書驗證階段確實是能欺騙成功的,但由於握手階段計算sessionkey(後續會話祕鑰key)的時候,是有一次對隨機數的非對稱解密的(客戶端會使用公鑰加密一個隨機數給服務器,服務器把它解密出來作爲會話祕鑰的一個算法來源)。

此時作爲中間人你是無法解開客戶端用真正網站服務器的公鑰加密過的隨機數的;這就導致SSL握手的第四步無法完成。我司的https專家羅成也告訴我,這會爆出 SSL連接錯誤; 好吧,我們又不能優雅的進行入侵了。

域名入侵

域名入侵這個應該不能簡單的理解爲劫持了,而是直接入侵目標網站的域名服務器或者域名賬戶控制權。黑客通過拿到域名控制權然後去CA機構給自己的公鑰申請數字證書,則黑客就可以拿到 合法 的一本證書,而且黑客是擁有跟這個證書匹配的私鑰的。

有了這些,下一步就只需要通過DNS劫持等手段,讓用戶訪問到黑客的服務器了。 然而,連域名都入侵了,我們還需要DNS劫持嗎,顯然不需要了,此時直接把域名指向我們自己的服務器就行了。

當然,這個幾乎不可能發生,畢竟第一域名是比較難入侵而且能持續很長時間不被發現的;另外即使入侵了域名,你想重新申請到CA證書也是比較難的,因爲知名公司的CA證書申請都是要提交營業執照等東西的。 但事實上在國外還真的發生過一起針對銀行的大型攻擊事件,黑客真的做到了 http://news.cnblogs.com/n/567978

中間人證書欺騙攻擊

既然上面的方法都那麼難,還有什麼辦法可以攻擊呢。這時候,我們想到了一種 中間人攻擊 的手法。

所謂中間人攻擊,就是我們DNS劫持後,我們自己不對用戶提供Web服務,我們作爲一箇中轉,當用戶請求過來時,我們給用戶提供一個用自己的私鑰頒發的私有的假的證書(當然這個假證書肯定會導致用戶這邊發出證書不是CA機構頒發的警告,我們要通過其他辦法來讓用戶繼續訪問這個網站)

只要用戶信任了中間人的證書,這樣中間人跟用戶建立https連接後,用戶的信息對中間人來說是可解析的(因爲中間人是擁有此本證書私鑰的,可以正常管理當前建立的這個https連接);

然後用戶跟中間人建立握手連接的過程中,中間人順便跟後方的目標服務器建立一個同樣的https連接(此時中間人的角色是客戶端);接下來,用戶SSL握手的所有請求以及後續的內容請求,中間人都在中間負責做內容中轉–即先解析出明文再傳遞給另外一端。

在這裏插入圖片描述

顯然這種方法,是可以竊取到https的信息明文的。當然,唯一需要你做的,就是取用戶電腦上幫他點一下 “繼續瀏覽”…. 其實這就是mac上的charles對https抓包的原理, 所以如果你的手機需要抓包,則需要在手機上安裝Charles的證書。 (如果你是windows用戶,則fiddler的原理也是一樣的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章