Android安全之Https中間人攻擊漏洞
0X01?概述
HTTPS,是一種網(wǎng)絡(luò)安全傳輸協(xié)議顶燕,利用SSL/TLS來(lái)對(duì)數(shù)據(jù)包進(jìn)行加密,以提供對(duì)網(wǎng)絡(luò)服務(wù)器的身份認(rèn)證凑保,保護(hù)交換數(shù)據(jù)的隱私與完整性。
中間人攻擊割岛,Man-in-the-middle?attack愉适,縮寫(xiě):MITM犯助,是指攻擊者與通訊的兩端分別創(chuàng)建獨(dú)立的聯(lián)系癣漆,并交換其所收到的數(shù)據(jù),使通訊的兩端認(rèn)為他們正在通過(guò)一個(gè)私密的連接與對(duì)方直接對(duì)話剂买,但事實(shí)上整個(gè)會(huì)話都被攻擊者完全控制惠爽。
https在理論上是可以抵御MITM,但是由于開(kāi)發(fā)過(guò)程中的編碼不規(guī)范瞬哼,導(dǎo)致https可能存在MITM攻擊風(fēng)險(xiǎn)婚肆,攻擊者可以解密、篡改https數(shù)據(jù)坐慰。
0X02?https漏洞
Android?https的開(kāi)發(fā)過(guò)程中常見(jiàn)的安全缺陷:
1)在自定義實(shí)現(xiàn)X509TrustManager時(shí)较性,checkServerTrusted中沒(méi)有檢查證書(shū)是否可信,導(dǎo)致通信過(guò)程中可能存在中間人攻擊结胀,造成敏感數(shù)據(jù)劫持危害赞咙。
2)在重寫(xiě)WebViewClient的onReceivedSslError方法時(shí),調(diào)用proceed忽略證書(shū)驗(yàn)證錯(cuò)誤信息繼續(xù)加載頁(yè)面糟港,導(dǎo)致通信過(guò)程中可能存在中間人攻擊攀操,造成敏感數(shù)據(jù)劫持危害。
3)在自定義實(shí)現(xiàn)HostnameVerifier時(shí)秸抚,沒(méi)有在verify中進(jìn)行嚴(yán)格證書(shū)校驗(yàn)速和,導(dǎo)致通信過(guò)程中可能存在中間人攻擊,造成敏感數(shù)據(jù)劫持危害剥汤。
4)在setHostnameVerifier方法中使用ALLOW_ALL_HOSTNAME_VERIFIER颠放,信任所有Hostname,導(dǎo)致通信過(guò)程中可能存在中間人攻擊吭敢,造成敏感數(shù)據(jù)劫持危害碰凶。
0X03 漏洞案例
案例一:京東金融MITM漏洞
京東金融Ver?2.8.0由于證書(shū)校驗(yàn)有缺陷,導(dǎo)致https中間人攻擊省有,攻擊者直接可以獲取到會(huì)話中敏感數(shù)據(jù)的加密秘鑰痒留,另外由于APP沒(méi)有做應(yīng)用加固或混淆,因此可以輕松分析出解密算法蠢沿,利用獲取到的key解密敏感數(shù)據(jù)伸头。
御安全掃描結(jié)果:
如下是登陸過(guò)程中捕獲到的數(shù)據(jù):
其中的secretkey用于加密后期通信過(guò)程中的敏感數(shù)據(jù),由于APP中使用的是對(duì)稱加密舷蟀,攻擊者可以還原所有的通信數(shù)據(jù)恤磷。
案例二:中國(guó)移動(dòng)和包任意消費(fèi)漏洞
HTTPS證書(shū)校驗(yàn)不嚴(yán)格面哼,可被MITM;
加密算法不安全扫步,可被破解魔策;
關(guān)鍵數(shù)據(jù)保存在sdcard卡上,可被任意訪問(wèn)河胎;
代碼混淆度低闯袒,業(yè)務(wù)邏輯,關(guān)鍵數(shù)據(jù)泄漏游岳;
消息簽名算法比較簡(jiǎn)單政敢,數(shù)據(jù)可被修改;
通信數(shù)據(jù)如下:
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
866697029909260201603241008185gye5tKk6EPB4iliO722011944.3.82Android_21-1794*1080-HUAWEI?GRA_UL1020093CAS000169918666970299092601050:a7:2b:c5:e2:d8
在用戶開(kāi)啟免密支付的前提下胚迫,結(jié)合以上安全問(wèn)題喷户,可以實(shí)現(xiàn)本地或遠(yuǎn)程攻擊,直接盜取和包用戶資金访锻,如給任意賬號(hào)充值等褪尝,給用戶帶來(lái)直接經(jīng)濟(jì)損失。
0X03 安全建議
1)?建議自定義實(shí)現(xiàn)X509TrustManager時(shí)期犬,在checkServerTrusted中對(duì)服務(wù)器信息進(jìn)行嚴(yán)格校驗(yàn)
2)在重寫(xiě)WebViewClient的onReceivedSslError方法時(shí)河哑,避免調(diào)用proceed忽略證書(shū)驗(yàn)證錯(cuò)誤信息繼續(xù)加載頁(yè)面
3)在自定義實(shí)現(xiàn)HostnameVerifier時(shí),在verify中對(duì)Hostname進(jìn)行嚴(yán)格校驗(yàn)
4)建議setHostnameVerifier方法中使用STRICT_HOSTNAME_VERIFIER進(jìn)行嚴(yán)格證書(shū)校驗(yàn)哭懈,避免使用ALLOW_ALL_HOSTNAME_VERIFIER
0X04 參考
https://en.wikipedia.org/wiki/MITM
https://en.wikipedia.org/wiki/HTTPS
http://drops.wooyun.org/tips/3296
(騰訊御安全技術(shù)博客:http://yaq.qq.com/blog/13)