Android HTTPS中間人劫持漏洞淺析

Android HTTPS中間人劫持漏洞淺析

FromFreeBuf By Jason_HZ


Android HTTPS中間人劫持漏洞描述

        在密碼學和計算機安全領域中,中間人攻擊 (Man-in-the-middleattack,通常縮寫爲MITM)是指攻擊者與通訊的兩端分別創建獨立的聯繫,並交換其所收到的數據,使通訊的兩端認爲他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話並插入新的內容。


AndroidHTTPS中間人攻擊漏洞源於:

  • 1. 沒有對SSL證書進行校驗;
  • 2. 沒有對域名進行校驗;
  • 3. 證書頒發機構(CertificationAuthority)被攻擊導致私鑰泄露等。攻擊者可通過中間人攻擊,盜取賬戶密碼明文、聊天內容、通訊地址、電話號碼以及信用卡支付信息等敏感信息,甚至通過中間人劫持將原有信息替換成惡意鏈接或惡意代碼程序,以達到遠程控制、惡意扣費等攻擊意圖。

          在各大漏洞平臺上,有大量存在HTTPS證書不校驗漏洞,例如國內絕大部分Android APP存在信任所有證書漏洞、亞馬遜最新官方Android版存在一處信任所有證書漏洞、Yahoo雅虎在國內訪問遭遇SSL中間人攻擊、攜程旅遊網最新Android客戶端https未校驗證書導致https通信內容完全被捕獲。


影響範圍

Android系統


漏洞分析

1)中間人攻擊漏洞位置:

X509TrustManager、HostnameVerifier 、setHostnameVerifier (X509HostnameVerifier hostnameVerifier)


2) 漏洞觸發前提條件:

  • 自定義的X509TrustManager不校驗證書;
  • 或實現的自定義HostnameVerifier不校驗域名接受任意域名;
  • 或使用setHostnameVerifier (ALLOW_ALL_HOSTNAME_VERIFIER);

3) 漏洞原理:

       由於客戶端沒有校驗服務端的證書,因此攻擊者就能與通訊的兩端分別創建獨立的聯繫,並交換其所收到的數據,使通訊的兩端認爲他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話並插入新的內容。


4) Android HTTPS中間人攻擊漏洞證明

(1) 客戶端不校驗SSL證書(包含簽名CA是否合法、域名是否匹配、是否自簽名證書、證書是否過期)包含以下幾種編碼錯誤情況:

a. 自實現的不校驗證書的X509TrustManager接口的Java代碼片段 (其中的

checkServerTrusted()方法實現爲空,即不檢查服務器是否可信):



b. 不檢查站點域名與站點證書的域名是否匹配的Java代碼片段:



c. 接受任意域名的Java代碼片段:

SSLSocketFactory sf;

……

sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

(2)針對某個不校驗SSL證書的客戶端進行中間人攻擊演示如下圖所示,可通過中間人劫持獲取到登錄用戶名和密碼(該密碼參數只是對明文密碼進行了一次MD5):

修復建議

對SSL證書進行強校驗

出於安全考慮,建議對SSL證書進行強校驗(簽名CA是否合法、證書是否是自簽名、主機域名是否匹配、證書是否過期等),詳細修復方案請參照Google官方關於SSL的安全建議。

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