0x00概述
中間人攻擊(Man-in-the-Middle Attack没龙,簡稱“MITM攻擊”)是一種“間接”的入侵攻擊,這種攻擊模式是通過各種技術(shù)手段將受入侵者控制的一臺計算機虛擬放置在網(wǎng)絡(luò)連接中的兩臺通信計算機之間,這臺計算機就稱為“中間人”。通過中間人攻擊可以竊取信息、進行篡改、欺騙等多種攻擊犁功。
對于Android平臺上的中間人攻擊已經(jīng)討論的比較多,今天來聊聊iOS平臺上的中間人攻擊婚夫,以及iOS的可信證書管理浸卦。
0x01中間人攻擊
在未做特殊說明的情況下,本文所有實驗環(huán)境為:
iPhone 5 + iOS 8.1.2 + 已越獄案糙。
1.1 中間人攻擊分級
iOS平臺上根據(jù)中間人攻擊的難度限嫌,可以將中間人攻擊分為3個等級:
1) level1:在沒用向手機中安裝攻擊者證書的情況下可以進行中間人攻擊
2) level2:在向手機中安裝攻擊者證書的情況下可以進行中間人攻擊
3) level3:在向手機中安裝攻擊者證書的情況下也不可以進行中間人攻擊
對于這三種情況靴庆,我們以一個例子分別對這三種情況進行說明。借用Owasp關(guān)于iOS https中間人演示的例子萤皂,稍做修改撒穷。正常情況下,程序啟動時如圖1裆熙,點擊“Fetch Secret”程序請求server端數(shù)據(jù)并顯示端礼,如圖2。
1.1.1 不導(dǎo)入證書可中間人
在此次連接的NSURLConnection對象的delegate類中只實現(xiàn)一個connection:didReceiveAuthenticationChallenge:方法入录,如圖3蛤奥。
設(shè)置burp suite,開啟代理僚稿,如圖4凡桥。
手機設(shè)置代理為burp suite運行pc的地址,如圖5蚀同。
運行程序缅刽,點擊“Fetch Secret”,程序正常獲取到了與圖2相同的數(shù)據(jù)蠢络,burp suite也截獲了所有信息衰猛,如圖6,中間人攻擊成功刹孔。
圖 6 burp suite截獲數(shù)據(jù)
1.1.2 導(dǎo)入證書可中間人
修改程序啡省,在NSURLConnection對象的delegate類中實現(xiàn)connection:willSendRequestForAuthenticationChallenge:方法,如圖7髓霞。
其他設(shè)置與1.1.1小節(jié)完全相同卦睹,程序發(fā)現(xiàn)連接異常,終止獲取數(shù)據(jù)方库,如圖8结序,burp suite也理所當然獲取數(shù)據(jù)失敗。
此時纵潦,向手機中安**urp suite證書笼痹,如圖9。
重新打開應(yīng)用酪穿,點擊“Fetch Secret”,應(yīng)用正常獲取數(shù)據(jù)晴裹,burp suite也截獲了全部數(shù)據(jù)被济,中間人攻擊成功。
1.1.3 導(dǎo)入證書不可中間人
繼續(xù)對程序進行修改涧团,將公鑰證書放入應(yīng)用中只磷,并修改connection:didReceiveAuthenticationChallenge:方法在連接過程中獲取證書信息经磅,對server端證書進行強校驗,如圖10钮追。同時预厌,注釋掉connection:willSendRequestForAuthenticationChallenge:方法,因為如圖實現(xiàn)了這個方法元媚,方法connection:didReceiveAuthenticationChallenge:將不會被調(diào)用轧叽。
其他設(shè)置不變,手機中依然安裝有burp suite證書刊棕,打開應(yīng)用炭晒,點擊“Fetch Secret”,應(yīng)用無法正常獲取數(shù)據(jù)甥角,如圖11网严,burp suite也不能截獲數(shù)據(jù),中間人攻擊失敗嗤无。
1.1.4 一些建議
一般來說震束,建議應(yīng)用信任手機中的所有證書即可,在應(yīng)用中置入公鑰證書對連接進行強校驗確實最為安全当犯,但會引發(fā)諸多問題垢村,如證書更新、證書過期灶壶、證書作廢等肝断。
如果需要更新客戶端證書,都必須升級客戶端版本驰凛,而升級客戶端是一個較為漫長的過程胸懈。 例如證書被黑客竊取,需要緊急作廢證書恰响,而許多用戶卻有沒有及時升級客戶端的習(xí)慣趣钱,這將可能導(dǎo)致大面積用戶使用出現(xiàn)網(wǎng)絡(luò)異常的情況。就目前來看胚宦,也確實很少看到有應(yīng)用將安全級別做到level3首有。
0x02可信證書管理
上一章節(jié)中談到向手機中導(dǎo)入可信證書的問題,小生在編寫一個iOS工具的時候無意發(fā)現(xiàn)iOS證書管理的一個有趣的地方枢劝。通過“Settings”->“General”->“Profiles”可以查看當前設(shè)備信任的證書列表井联,但這個列表就真的是設(shè)備信任的證書列表嗎?
2.1奇葩的中間人攻擊情形
按照上一章節(jié)建議您旁,將應(yīng)用防中間人級別設(shè)置為level2烙常,即應(yīng)用信任當前設(shè)備上的所有證書,如果要使用burp suite對該應(yīng)用進行中間人攻擊鹤盒,需要向設(shè)備中安**urp的證書蚕脏,而目前設(shè)備上的信任證書如圖13所示侦副,設(shè)備上只有一個用于連接公司內(nèi)網(wǎng)的員工證書。
在這樣的情況下驼鞭,burp suite應(yīng)該不能獲取到應(yīng)用的通信內(nèi)容餐曹,而結(jié)果如何了蜀备。為了排除結(jié)果受到iOS系統(tǒng)在https通信時的10分鐘緩存機制,先對設(shè)備進行重啟或靜置10分鐘;啟動應(yīng)用進行通信讲婚,發(fā)現(xiàn)應(yīng)用正常獲取到了與圖2所示相同的數(shù)據(jù)忍些,而burp suite也成功截獲了與圖6所示相同的通信內(nèi)容撬统。這是什么鬼……
2.2 TrustStore.sqlite3
iOS系統(tǒng)下有一個有一個sqlite3文件缝呕,其絕對路徑為:
“/private/var/Keychains/TrustStore.sqlite3”
該文件中存儲的才是當前設(shè)備真正信任的證書列表,而通過“Settings”->“General”->“Profiles”查看到的證書列表與該文件中存儲的證書列表可以不同步皂甘,如果我們手動對該sqlite3文件進行更改玻驻,就能讓手機實際的可信證書列表與在“Profiles”中看到的完全不一樣。小生寫了一個工具偿枕,對該sqlite3文件進行管理璧瞬,查看該文件中的存儲,如圖14渐夸。
其中嗤锉,ID為0的證書是圖12中看到的用于連接公司內(nèi)網(wǎng)的員工證書;ID為1的證書為burp suite證書墓塌,而這張證書沒有在“Profiles”中顯示瘟忱。這就是導(dǎo)致能中間人的原因。
我們刪除掉該sqlite3文件中的ID為1的證書苫幢,如圖15访诱,并對設(shè)備進行重啟或靜置10分鐘,再進行2.1章節(jié)中的實驗韩肝。
打開應(yīng)用触菜,點擊“Fetch Secret”,應(yīng)用報錯哀峻,如圖16涡相。
如果重新將burp suite證書手動插入TrustStore.sqlite3文件中,如圖16剩蟀,并對設(shè)備進行重啟或靜置10分鐘催蝗,再進行2.1章節(jié)中的實驗,發(fā)現(xiàn)中間人攻擊成功育特。而本文中對TrustStore.sqlite3文件的所有手動操作生逸,都不會影響到“Profiles”中的任何顯示,“Profiles”始終只顯示一張員工證書。
2.3不顯示證書的中間人攻擊(越獄后環(huán)境)
根據(jù)2.1和2.2小節(jié)的描述槽袄,如果攻擊者通過越獄插件、甚至是通過某些猥瑣手段逃過App Store檢查的惡意應(yīng)用锋谐,對已越獄的iphone手機上的文件“/private/var/Keychains/TrustStore.sqlite3”進行修改遍尺,向其中插入了一張攻擊者證書,例如burp suite證書涮拗,攻擊者就可以在受害者的網(wǎng)關(guān)上神不知鬼不覺的進行中間人攻擊(當然level3安全級別下的應(yīng)用是沒門的)乾戏,受害者完全不知情,因為受害者通過“Settings”->“General”->“Profiles”查看可信證書的時候三热,不會發(fā)現(xiàn)任何異常鼓择,即可以在不顯示證書的情況下竊取受害者數(shù)據(jù)、進行篡改等就漾。
所以呐能,對于已越獄的手機,不要以為“Settings”->“General”->“Profiles”下沒有安裝一些奇奇怪怪的證書就高枕無憂了抑堡。
0x03小節(jié)
iOS系統(tǒng)的中間人攻擊方法與防范措施摆出,總結(jié)在在0x01章節(jié)中,小生認為普通應(yīng)用只需要信任當前設(shè)備上的所有可信證書即可首妖。關(guān)于iOS系統(tǒng)的可信證書列表偎漫,越獄過的朋友還是去檢查下“/private/var/Keychains/TrustStore.sqlite3”文件中是否有“Profiles”中未顯示或顯示不對等的情況。