Android安全之Https中間人攻擊漏洞web
0X01 概述算法
HTTPS,是一種網絡安全傳輸協議,利用SSL/TLS來對數據包進行加密,以提供對網絡服務器的身份認證,保護交換數據的隱私與完整性。
中間人攻擊,Man-in-the-middle attack,縮寫:MITM,是指攻擊者與通信的兩端分別建立獨立的聯繫,並交換其所收到的數據,使通信的兩端認爲他們正在經過一個私密的鏈接與對方直接對話,但事實上整個會話都被攻擊者徹底控制。
https在理論上是能夠抵禦MITM,可是因爲開發過程當中的編碼不規範,致使https可能存在MITM攻擊風險,攻擊者能夠解密、篡改https數據。
安全
0X02 https漏洞服務器
Android https的開發過程當中常見的安全缺陷:
1)在自定義實現X509TrustManager時,checkServerTrusted中沒有檢查證書是否可信,致使通訊過程當中可能存在中間人攻擊,形成敏感數據劫持危害。
2)在重寫WebViewClient的onReceivedSslError方法時,調用proceed忽略證書驗證錯誤信息繼續加載頁面,致使通訊過程當中可能存在中間人攻擊,形成敏感數據劫持危害。
3)在自定義實現HostnameVerifier時,沒有在verify中進行嚴格證書校驗,致使通訊過程當中可能存在中間人攻擊,形成敏感數據劫持危害。
4)在setHostnameVerifier方法中使用ALLOW_ALL_HOSTNAME_VERIFIER,信任全部Hostname,致使通訊過程當中可能存在中間人攻擊,形成敏感數據劫持危害。
網絡
0X03 漏洞案例編碼
案例一:京東金融MITM漏洞
京東金融Ver 2.8.0因爲證書校驗有缺陷,致使https中間人攻擊,攻擊者直接能夠獲取到會話中敏感數據的加密祕鑰,另外因爲APP沒有作應用加固或混淆,所以能夠輕鬆分析出解密算法,利用獲取到的key解密敏感數據。
御安全掃描結果:加密
以下是登錄過程當中捕獲到的數據:
spa
其中的secretkey用於加密後期通訊過程當中的敏感數據,因爲APP中使用的是對稱加密,攻擊者能夠還原全部的通訊數據。
案例二:中國移動和包任意消費漏洞
HTTPS證書校驗不嚴格,可被MITM;
加密算法不安全,可被破解;
關鍵數據保存在sdcard卡上,可被任意訪問;
代碼混淆度低,業務邏輯,關鍵數據泄漏;
消息簽名算法比較簡單,數據可被修改;
通訊數據以下:3d
POST https://mca.cmpay.com:28710/ccaweb/CCLIMCA4/2201194.dor HTTP/1.1 Cookie: JSESSIONID=CHGmYSZLTMRAx_1sSEuUP6Q4vmRI9gWiRPM6ANGnH7eZWv0NhErE!221531807 ....... Content-Length: 521 Host: mca.cmpay.com:28710 Connection: Keep-Alive Cookie: JSESSIONID=CHGmYSZLTMRAx_1sSEuUP6Q4vmRI9gWiRPM6ANGnH7eZWv0NhErE!221531807 Cookie2: $Version=1 <?xml version="1.0" encoding="UTF-8" ?><ROOT><HEAD><IMEI>866697029909260</IMEI><MCID>201603241008185gye5tKk6EPB4iliO7</MCID><TXNCD>2201194</TXNCD><VERSION >4.3.82</VERSION ><UA>Android_21-1794*1080-HUAWEI GRA_UL10</UA><SOURCE>2009</SOURCE><PLAT>3</PLAT><DEVID>CAS00016</DEVID><SERLNO>991</SERLNO></HEAD><BODY><IMEI>866697029909260</IMEI><ENTRY>10</ENTRY><MAC>50:a7:2b:c5:e2:d8</MA
在用戶開啓免密支付的前提下,結合以上安全問題,能夠實現本地或遠程攻擊,直接盜取和包用戶資金,如給任意帳號充值等,給用戶帶來直接經濟損失。
code
0X04 安全建議
1) 建議自定義實現X509TrustManager時,在checkServerTrusted中對服務器信息進行嚴格校驗
2)在重寫WebViewClient的onReceivedSslError方法時,避免調用proceed忽略證書驗證錯誤信息繼續加載頁面
3)在自定義實現HostnameVerifier時,在verify中對Hostname進行嚴格校驗
4)建議setHostnameVerifier方法中使用STRICT_HOSTNAME_VERIFIER進行嚴格證書校驗,避免使用ALLOW_ALL_HOSTNAME_VERIFIER
0X05 參考
https://en.wikipedia.org/wiki...
https://en.wikipedia.org/wiki...
http://drops.wooyun.org/tips/... (騰訊御安全技術博客)