關(guān)于HTTPS,我經(jīng)常會(huì)提到的就是中間人攻擊,那究竟什么是中間人攻擊呢?中間人攻擊,即所謂的Main-in-the-middle attack(MITM),顧名思義,就是攻擊者插入到原本直接通訊的雙方,讓雙方以為還在直接跟對(duì)方通訊,但實(shí)際上雙方的通訊對(duì)方已變成了中間人,信息已經(jīng)是被中間人獲取或篡改。

由前文我們知道,HTTPS在建立了TCP連接之后,會(huì)進(jìn)行SSL握手(SSL Handshake)來(lái)校驗(yàn)證書(shū),協(xié)商加密協(xié)議和對(duì)稱加密的密鑰,之后就會(huì)使用協(xié)商好的密鑰來(lái)進(jìn)行傳輸。所以HTTPS攻擊一般分為SSL連接建立前的攻擊,以及HTTPS傳輸過(guò)程中的攻擊;
常見(jiàn)的HTTPS中間人攻擊,首先需要結(jié)合ARP、DNS欺騙等技術(shù),來(lái)對(duì)會(huì)話進(jìn)行攔截,
1、SSL證書(shū)欺騙攻擊
此類攻擊較為簡(jiǎn)單常見(jiàn)。首先通過(guò)ARP欺騙、DNS劫持甚至網(wǎng)關(guān)劫持等等,將客戶端的訪問(wèn)重定向到攻擊者的機(jī)器,讓客戶端機(jī)器與攻擊者機(jī)器建立HTTPS連接(使用偽造證書(shū)),而攻擊者機(jī)器再跟服務(wù)端連接。這樣用戶在客戶端看到的是相同域名的網(wǎng)站,但瀏覽器會(huì)提示證書(shū)不可信,用戶不點(diǎn)擊繼續(xù)瀏覽就能避免被劫持的。所以這是最簡(jiǎn)單的攻擊方式,也是最容易識(shí)別的攻擊方式。

防范措施 :
釣魚(yú)類攻擊,App直接調(diào)用系統(tǒng)API創(chuàng)建的HTTPS連接(NSURLConnection)一般不會(huì)受到影響,只使用默認(rèn)的系統(tǒng)校驗(yàn),只要系統(tǒng)之前沒(méi)有信任相關(guān)的偽造證書(shū),校驗(yàn)就直接失敗,不會(huì)SSL握手成功;但如果是使用WebView瀏覽網(wǎng)頁(yè),需要在UIWebView中加入較強(qiáng)的授權(quán)校驗(yàn),禁止用戶在校驗(yàn)失敗的情況下繼續(xù)訪問(wèn)。
2 SSL剝離攻擊(SSLStrip)
SSL剝離,即將HTTPS連接降級(jí)到HTTP連接。假如客戶端直接訪問(wèn)HTTPS的URL,攻擊者是沒(méi)辦法直接進(jìn)行降級(jí)的,因?yàn)镠TTPS與HTTP雖然都是TCP連接,但HTTPS在傳輸HTTP數(shù)據(jù)之前,需要在進(jìn)行了SSL握手,并協(xié)商傳輸密鑰用來(lái)后續(xù)的加密傳輸;假如客戶端與攻擊者進(jìn)行SSL握手,而攻擊者無(wú)法提供可信任的證書(shū)來(lái)讓客戶端驗(yàn)證通過(guò)進(jìn)行連接,所以客戶端的系統(tǒng)會(huì)判斷為SSL握手失敗,斷開(kāi)連接。
該攻擊方式主要是利用用戶并不會(huì)每次都直接在瀏覽器上輸入https://xxx.xxx.com 來(lái)訪問(wèn)網(wǎng)站,或者有些網(wǎng)站并非全網(wǎng)HTTPS,而是只在需要進(jìn)行敏感數(shù)據(jù)傳輸時(shí)才使用HTTPS的漏洞。中間人攻擊者在劫持了客戶端與服務(wù)端的HTTP會(huì)話后,將HTTP頁(yè)面里面所有的 https:// 超鏈接都換成 http:// ,用戶在點(diǎn)擊相應(yīng)的鏈接時(shí),是使用HTTP協(xié)議來(lái)進(jìn)行訪問(wèn);這樣,就算服務(wù)器對(duì)相應(yīng)的URL只支持HTTPS鏈接,但中間人一樣可以和服務(wù)建立HTTPS連接之后,將數(shù)據(jù)使用HTTP協(xié)議轉(zhuǎn)發(fā)給客戶端,實(shí)現(xiàn)會(huì)話劫持。
這種攻擊手段更讓人難以提防,因?yàn)樗褂肏TTP,不會(huì)讓瀏覽器出現(xiàn)HTTPS證書(shū)不可信的警告,而且用戶很少會(huì)去看瀏覽器上的URL是 https:// 還是 http:// 。特別是App的WebView中,應(yīng)用一般會(huì)把URL隱藏掉,用戶根本無(wú)法直接查看到URL出現(xiàn)異常。

防范措施:
該種攻擊方式同樣無(wú)法劫持App內(nèi)的HTTPS連接會(huì)話,因?yàn)锳pp中傳入請(qǐng)求的URL參數(shù)是固定帶有“https://” 的;但在WebView中打開(kāi)網(wǎng)頁(yè)同樣需要注意,在非全網(wǎng)HTTPS的網(wǎng)站,建議對(duì)WebView中打開(kāi)的URL做檢查,檢查應(yīng)該使用 “https://” 的URL是否被篡改為 “http://” ;也建議服務(wù)端在配置HTTPS服務(wù)時(shí),加上“HTTP Strict Transport Security”配置項(xiàng)。
3 針對(duì)SSL算法進(jìn)行攻擊
上述兩種方式,技術(shù)含量較低,而且一般只能影響 WebApp,而很難攻擊到 Native App , 所以高階的 Hacker,會(huì)直接針對(duì)SSL算法相關(guān)漏洞進(jìn)行攻擊,期間會(huì)使用很多的密碼學(xué)相關(guān)手段。由于本人非專業(yè)安全相關(guān)人員,沒(méi)有多少相關(guān)實(shí)踐經(jīng)驗(yàn),所以本節(jié)不會(huì)深入講解相關(guān)的攻擊原理和手段,有興趣的同學(xué)可以查看以下拓展閱讀:
OpenSSL漏洞
常見(jiàn)的HTTPS攻擊方法
防范措施:
這類攻擊手段是利用SSL算法的相關(guān)漏洞,所以最好的防范措施就是對(duì)服務(wù)端 SSL/TLS 的配置進(jìn)行升級(jí):
只支持盡量高版本的TLS(最低TLS1);
禁用一些已爆出安全隱患的加密方法;
使用2048位的數(shù)字證書(shū);
防范措施:
不要隨意連入公共場(chǎng)合內(nèi)的WiFi,或者使用未知代理服務(wù)器
不要安裝不可信或突然出現(xiàn)的描述文件,信任偽造的證書(shū);
App內(nèi)部需對(duì)服務(wù)器證書(shū)進(jìn)行單獨(dú)的對(duì)比校驗(yàn),確認(rèn)證書(shū)不是偽造的;
使用WireShark模擬中間人證書(shū)偽造攻擊http://blog.csdn.net/phunxm/article/details/38590561
**使用Charles模擬中間人證書(shū)偽造攻擊
**http://www.itdecent.cn/p/a81b496348bc