1. Android HTTPS中間人劫持漏洞描述
在密碼學和計算機安全領域中,中間人攻擊 ( Man-in-the-middle attack,通常縮寫爲MITM )是指攻擊者與通訊的兩端分別創建獨立的聯繫,並交換其所收到的數據,使通訊的兩端認爲他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話並插入新的內容[1]。
Android HTTPS中間人攻擊漏洞源於:1沒有對SSL證書進行校驗;2沒有對域名進行校驗;3. 證書頒發機構(Certification Authority)被攻擊導致私鑰泄露等。攻擊者可通過中間人攻擊,盜取賬戶密碼明文、聊天內容、通訊地址、電話號碼以及信用卡支付信息等敏感信息,甚至通過中間人劫持將原有信息替換成惡意鏈接或惡意代碼程序,以達到遠程控制、惡意扣費等攻擊意圖。
在烏雲漏洞平臺上,有大量存在HTTPS證書不校驗漏洞,例如國內絕大部分Android APP存在信任所有證書漏洞[2]、亞馬遜最新官方android版存在一處信任所有證書漏洞[3]、Yahoo雅虎在國內訪問遭遇SSL中間人攻擊[4]、攜程旅遊網最新android客戶端https未校驗證書導致https通信內容完全被捕獲[5]。
2. Android HTTPS中間人攻擊漏洞影響範圍
Android系統
3. Android HTTPS中間人攻擊漏洞詳情
1) 中間人攻擊漏洞位置:
X509TrustManager 、HostnameVerifier 、 setHostnameVerifier (X509HostnameVerifier hostnameVerifier)
2) 漏洞觸發前提條件:
自定義的X509TrustManager不校驗證書;
或實現的自定義HostnameVerifier不校驗域名接受任意域名;
或使用setHostnameVerifier (ALLOW_ALL_HOSTNAME_VERIFIER);
3) 漏洞原理:
由於客戶端沒有校驗服務端的證書,因此攻擊者就能與通訊的兩端分別創建獨立的聯繫,並交換其所收到的數據,使通訊的兩端認爲他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話並插入新的內容[1]。
4. Android HTTPS中間人攻擊漏洞證明
1) 客戶端不校驗SSL證書(包含簽名CA是否合法、域名是否匹配、是否自簽名證書、證書是否過期)包含以下幾種編碼錯誤情況:
a. 自實現的不校驗證書的X509TrustManager接口的Java代碼片段 (其中的checkServerTrusted()方法實現爲空,即不檢查服務器是否可信):
b. 不檢查站點域名與站點證書的域名是否匹配的Java代碼片段:
c. 接受任意域名的Java代碼片段:
1 2 3 | SSLSocketFactory sf; …… sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); |
2)針對某個不校驗SSL證書的客戶端進行中間人攻擊演示如下圖所示,可通過中間人劫持獲取到登錄用戶名和密碼(該密碼參數只是對明文密碼進行了一次MD5):
5. Android HTTPS中間人攻擊漏洞修復建議
1. 對SSL證書進行強校驗
出於安全考慮,阿里聚安全建議對SSL證書進行強校驗(簽名CA是否合法、證書是否是自簽名、主機域名是否匹配、證書是否過期等),詳細修復方案請參照Google官方關於SSL的安全建議[6];
引用
[1] http://zh.wikipedia.org/wiki/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB
[2] http://www.wooyun.org/bugs/wooyun-2010-079358
[3] http://www.wooyun.org/bugs/wooyun-2010-079350
[4] http://www.wooyun.org/bugs/wooyun-2010-080117
[5] http://www.wooyun.org/bugs/wooyun-2010-081966
[6] https://developer.android.com/training/articles/security-ssl.html
轉載自:http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.OxUtgu&id=60