0x00 序
由于IOS是一種閉源的操作系統(tǒng),源碼恐怕也只有幾個(gè)人見(jiàn)過(guò)狐榔,其安全性究竟如何我們不得而知,突然想起一段話:恐懼來(lái)源于我們的無(wú)知。好在國(guó)內(nèi)早有大牛團(tuán)隊(duì)—盤(pán)古團(tuán)隊(duì)總是走在世界的前沿給我們帶來(lái)最新鮮的IOS安全詳解.
為了能讓文章具有原創(chuàng)性紊馏,如下我將結(jié)合我接觸過(guò)的APP進(jìn)行幾個(gè)簡(jiǎn)單方面的詳細(xì)解釋。
0x01 敏感信息泄露之不定時(shí)炸彈
本地存儲(chǔ)的敏感數(shù)據(jù):首先我們需要一個(gè)越獄手機(jī)蒲犬,還需要iTools工具來(lái)幫助我們朱监。其實(shí)過(guò)程很簡(jiǎn)單,用iTools連接你的iPhone原叮,通過(guò)共享文件打開(kāi)某一APP赫编,里邊的結(jié)構(gòu)一目了然巡蘸。其中Document目錄:目錄存儲(chǔ)用戶數(shù)據(jù)或其他應(yīng)該定期備份的信息。AppName.app目錄:這是應(yīng)用程序的程序包目錄擂送,包括應(yīng)用程序本身悦荒,在AppStore上下載的APP是需要脫殼的才能將程序用IDA反編譯的。Library目錄:這個(gè)目錄下有兩個(gè)子目錄Caches和Preference嘹吨,Caches目錄存儲(chǔ)應(yīng)用程序?qū)S玫闹С治募嵛叮4鎽?yīng)用程序再次啟動(dòng)過(guò)程中需要的信息,而Preference目錄包含程序的偏好設(shè)置蟀拷。
招商銀行IOS客戶端目錄結(jié)構(gòu)
那么哪些文件是可能透露敏感信息的呢身腻?以plist、db匹厘、xml嘀趟、log、txt為后綴的文件需要重點(diǎn)監(jiān)控愈诚,例如中國(guó)銀聯(lián)的銀聯(lián)手機(jī)支付APP將用戶名和密碼居然以明文的方式存儲(chǔ)在了unionpay.db的文件中她按;蘇寧的某款理財(cái)APP同樣的也是將手機(jī)號(hào)碼和密碼存儲(chǔ)在了以plist為后綴的文件中;當(dāng)然也見(jiàn)過(guò)xml和log文件中存有敏感信息的APP炕柔。還有各種的txt或其他文檔酌泰,光大銀行的某款A(yù)PP里的111.txt文件中就記錄了交易明細(xì)、轉(zhuǎn)賬匯款匕累、手機(jī)任意轉(zhuǎn)等多種操作的URL陵刹,這給滲透測(cè)試人員大大的方便。還有更奇葩的是見(jiàn)過(guò)某銀行APP中的某文件中記錄著“這個(gè)項(xiàng)目TMD難做了欢嘿!”
銀聯(lián)支付IOS客戶端用戶名和密碼明文存儲(chǔ)
光大銀行IOS客戶端存在方便滲透測(cè)試的文件
還有一些敏感數(shù)據(jù)是需要一些腳本來(lái)處理的衰琐,例如Cookie.Binarycookies文件、keychain文件等炼蹦。例如浦發(fā)銀行的某款A(yù)PP和團(tuán)貸網(wǎng)的APP就是將自己的cookie信息存儲(chǔ)于本地的Cookie.binarycookies中的羡宙,可以使用cookies-binarycookies-reader腳本讀取里邊的詳細(xì)內(nèi)容;keychain文件中存儲(chǔ)了ios系統(tǒng)及第三方應(yīng)用的一些信息掐隐,keychain數(shù)據(jù)庫(kù)是hacker們最關(guān)注的數(shù)據(jù)源頭之一狗热,我們可以使用Keychain-Dumper導(dǎo)出keychain的值。
團(tuán)貸網(wǎng)IOS客戶端存有cookie信息
這里同時(shí)再介紹幾款較為給力的軟件:ikeymonitor虑省、introspy匿刮、iFile,其中ikeymonitor軟件是可以監(jiān)控你的鍵盤(pán)的探颈,如果銀行使用了自定義鍵盤(pán)可以使用該軟件來(lái)測(cè)試其是否起到了保護(hù)作用熟丸;introspy可以追蹤分析應(yīng)用程序,念茜在其微博里就記錄了如何使用該軟件查看支付寶APP采取了什么加密措施膝擂,你的手勢(shì)密碼是什么虑啤,銀行卡是什么都記錄在案隙弛,甚至記錄了哪些信息存儲(chǔ)在了什么文件中,親測(cè)好用狞山;iFile可以在手機(jī)上直接查看某款A(yù)PP的目錄結(jié)構(gòu)全闷,也可以直接打開(kāi)db文件,非常好用萍启。
網(wǎng)絡(luò)上的敏感信息泄露:其實(shí)這一點(diǎn)本想放到下一節(jié)來(lái)說(shuō)的总珠,但是好多APP都有這個(gè)問(wèn)題還是拿到這里來(lái)說(shuō)吧。這里不是拿HTTP說(shuō)事勘纯,而是說(shuō)一種設(shè)計(jì)方式的缺陷局服。曾見(jiàn)過(guò)多款A(yù)PP是這樣設(shè)計(jì)的:每當(dāng)我在APP上進(jìn)行一次操作時(shí)APP會(huì)發(fā)數(shù)據(jù)包給服務(wù)端,其中每次發(fā)數(shù)據(jù)包時(shí)為了校驗(yàn)身份都會(huì)把用戶名和密碼以明文的方式發(fā)出驳遵。這是一種什么樣的概念呢淫奔,我在公共場(chǎng)所連接wifi,使用某APP五分鐘堤结,我的明文密碼就在網(wǎng)絡(luò)上明文傳輸了十幾次(因?yàn)槊看尾僮鞫家r?yàn)身份)唆迁。還有一種情況,蘇寧某產(chǎn)品因?yàn)樯婕百Y金安全所以有手勢(shì)密碼的功能竞穷,盡管使用的是HTTPS協(xié)議唐责,但是只要我未注銷我的賬戶再次打開(kāi)APP時(shí),APP跳轉(zhuǎn)到了輸入手勢(shì)密碼的頁(yè)面瘾带,你的用戶名和密碼已經(jīng)通過(guò)數(shù)據(jù)包發(fā)往了服務(wù)端鼠哥,這樣手勢(shì)密碼就形同虛設(shè)。詳情見(jiàn):http://www.wooyun.org/bugs/wooyun-2015-0119249看政。
蘇寧某IOS客戶端校驗(yàn)手勢(shì)密碼時(shí)存在的問(wèn)題
解決方案:數(shù)據(jù)盡量不要本地存儲(chǔ)或者用后即刪朴恳,可能要考慮用戶體驗(yàn)有些敏感數(shù)據(jù)一定要存儲(chǔ)于本地,那么請(qǐng)將數(shù)據(jù)進(jìn)行加密帽衙,數(shù)據(jù)庫(kù)要添加訪問(wèn)限制菜皂。前幾天銀聯(lián)忽略了我提交的賬戶密碼明文存儲(chǔ)的漏洞,其實(shí)這是不應(yīng)該的厉萝,因?yàn)橐苿?dòng)設(shè)備和PC畢竟不一樣,移動(dòng)設(shè)備容易丟失榨崩,如果不幸的話可能你的錢(qián)也會(huì)一起丟失的谴垫。在給銀行做安全審計(jì)的時(shí)候,其實(shí)這些都算是中危漏洞的母蛛,因?yàn)殂y行要保證資金在最糟糕的情況下也是安全的翩剪。對(duì)于網(wǎng)絡(luò)上敏感數(shù)據(jù)的應(yīng)對(duì)策略,客戶端和服務(wù)端最好用加密后的數(shù)據(jù)進(jìn)行身份的校驗(yàn)彩郊,就在我截稿的前三天前弯,蘇寧的IOS開(kāi)發(fā)小伙伴微信加我為好友說(shuō)道:由于身份校驗(yàn)的接口較老蚪缀,所以無(wú)法處理加密后的用戶名和密碼,但是他們已經(jīng)向上級(jí)申請(qǐng)?zhí)岣呱矸菪r?yàn)接口的安全性了恕出。
0x02 HTTP or HTTPS更安全询枚?
可能很多人看了這個(gè)標(biāo)題都想說(shuō)一句:“這不是廢話么,如果HTTP安全的話那還要HTTPS有何用浙巫?”其實(shí)我并不是說(shuō)哪個(gè)協(xié)議更安全金蜀,而是想說(shuō)設(shè)計(jì)者不要過(guò)分的依賴于某種技術(shù)而放松對(duì)其他問(wèn)題的警惕性,下面我將分別拿真實(shí)案例說(shuō)一下的畴。
雖然使用了HTTP卻依然很安全:這里拿華夏銀行來(lái)說(shuō)吧渊抄,他的APP使用了HTTP協(xié)議,我使用Fiddler成功的攔截到了數(shù)據(jù)包丧裁,但是我卻發(fā)現(xiàn)無(wú)從下手护桦。APP發(fā)出的數(shù)據(jù)和服務(wù)端發(fā)出的數(shù)據(jù)洋洋灑灑的很長(zhǎng)最關(guān)鍵的是加鹽加密的,我們不知道哪段是你的用戶名煎娇,我們不知道哪段是你的轉(zhuǎn)款金額二庵,我們不知道錢(qián)要轉(zhuǎn)給誰(shuí)。我隨意更改一個(gè)字母逊桦,數(shù)據(jù)包自己的完整性校驗(yàn)都過(guò)不去眨猎。那好,我轉(zhuǎn)款時(shí)重放數(shù)據(jù)包强经,會(huì)不會(huì)有源源不斷的錢(qián)轉(zhuǎn)到我的錢(qián)包里呢睡陪?APP設(shè)置了時(shí)間戳,我們能想到的地方基本上都無(wú)法攻破匿情,曾經(jīng)見(jiàn)過(guò)最坑的APP:無(wú)論是發(fā)出的還是返回的數(shù)據(jù)從始至終均是密文兰迫,除非逆向否則你毫無(wú)思路画株。當(dāng)然這的確暴漏了一些問(wèn)題的關(guān)鍵:即在這層面紗的掩護(hù)下很有可能存在越權(quán)的情況怒竿,如果逆向分析得到關(guān)鍵的key,那么后果不堪設(shè)想疼电。
華夏銀行某IOS客戶端使用HTTP協(xié)議
華住酒店的IOS客戶端返回?cái)?shù)據(jù)的可識(shí)別度極低
即使使用了HTTPS但很危險(xiǎn):終于可以講關(guān)于HTTPS的一些奇葩經(jīng)歷了玲躯。有很多APP包括銀行在內(nèi)的据德,盡管使用的是HTTPS協(xié)議但其漏洞卻多的可怕,究其原因是其過(guò)分的相信了某一技術(shù)跷车。先從今年的四月份Freebuf轉(zhuǎn)載的一篇文章說(shuō)起:《流行iOS網(wǎng)絡(luò)通信庫(kù)AFNetworking曝SSL漏洞棘利,影響銀聯(lián)、中國(guó)銀行朽缴、交通銀行在內(nèi)的2.5萬(wàn)個(gè)iOS應(yīng)用》善玫,看到這篇文章我首先做的是看看哪些銀行中槍了,然后就是判斷其危險(xiǎn)性密强。漏洞為:如果APP使用了AFNETworking框架的2.5.3之前的版本茅郎,攻擊者就可以使用任何可信的證書(shū)機(jī)構(gòu)(CA)發(fā)布的SSL證書(shū)解密和加密數(shù)據(jù)蜗元;在此之前還有一個(gè)漏洞是:攻擊者可以使用自簽名的證書(shū)截聽(tīng)iOS應(yīng)用與服務(wù)器之間的加密的敏感數(shù)據(jù)。
有人會(huì)問(wèn)那這意味著什么系冗?很簡(jiǎn)單你的APP信任任何證書(shū)奕扣,如果你在星巴克連接上了wifi,而又信任了不該信任的證書(shū)毕谴,那么你在網(wǎng)上的行為早被一覽無(wú)余成畦。其實(shí)說(shuō)了這么多我一直沒(méi)有說(shuō)到重點(diǎn):好多使用了HTTPS協(xié)議的銀行IOS客戶端其數(shù)據(jù)都是明文,因?yàn)樗J(rèn)為HTTPS足夠安全涝开,所以在設(shè)計(jì)的時(shí)候根本就沒(méi)想到如果數(shù)據(jù)包在中途被改了怎么辦循帐?這樣假設(shè)某APP的數(shù)據(jù)在傳輸過(guò)程中轉(zhuǎn)賬金額被篡改了,而自己卻渾然不知舀武,因?yàn)榘l(fā)出的數(shù)據(jù)沒(méi)有完整性校驗(yàn)拄养,本想轉(zhuǎn)出10塊結(jié)果卻轉(zhuǎn)出了100塊。(此段是從受害者的角度出發(fā)的)
上海某銀行的理財(cái)客戶端使用了AFNetworking通信庫(kù)
這里可能又有人會(huì)說(shuō)银舱,沒(méi)事我們的APP沒(méi)有使用AFNetworing通信庫(kù)瘪匿,我們的APP只信任自己的證書(shū)。但是做安全的都應(yīng)該聽(tīng)說(shuō)過(guò)hook技術(shù)寻馏,沒(méi)錯(cuò)這里我們可以hook IOS相關(guān)的API棋弥,以此來(lái)繞過(guò)APP校驗(yàn)證書(shū)合法性的過(guò)程,這樣APP就可以信任任何證書(shū)诚欠,我們一樣可以正常抓到包顽染,這給滲透或者惡意者極大的便利。這里舉個(gè)例子:某電商的理財(cái)產(chǎn)品轰绵,雖然其APP只信任自己的證書(shū)粉寞,但是仍然可以通過(guò)hook一些關(guān)鍵函數(shù)來(lái)繞過(guò)證書(shū)的校驗(yàn)過(guò)程,在對(duì)通信數(shù)據(jù)的審計(jì)過(guò)程中發(fā)現(xiàn)左腔,存在越權(quán)可泄露任意用戶的姓名唧垦、銀行卡號(hào)和手機(jī)號(hào)。由于返回的數(shù)據(jù)也都是明文未做加密處理液样,我們甚至可以通過(guò)修改幾個(gè)關(guān)鍵參數(shù)繞過(guò)安全問(wèn)題振亮,達(dá)到重置支付密碼的目的。(此段是從惡意者角度出發(fā)的) 這里我不放截圖了因?yàn)閺S商還沒(méi)有修復(fù)鞭莽,請(qǐng)參考蘇寧易付寶錢(qián)包IOS客戶端存在賬戶越權(quán)可泄漏任意用戶姓名/銀行卡號(hào)/手機(jī)號(hào)等双炕;中國(guó)銀聯(lián)某移產(chǎn)品設(shè)計(jì)不當(dāng)可繞過(guò)密保問(wèn)題重置任意用戶密碼,另外推薦深度好文撮抓。
So,不是HTTPS不安全摇锋,而是工程師過(guò)分的信任了某項(xiàng)技術(shù)的安全性而忽略了潛在的危險(xiǎn)丹拯,在這里提醒開(kāi)發(fā)者參數(shù)校驗(yàn)要放到服務(wù)端來(lái)做站超,安全要做到雙保險(xiǎn)。還有就是要警惕一些開(kāi)源的開(kāi)發(fā)庫(kù)乖酬,盡管這些開(kāi)源開(kāi)發(fā)庫(kù)給我?guī)?lái)了諸多便利死相,但是他也是一顆定時(shí)炸彈。
解決方案:只使用HTTP協(xié)議的采用HTTPS咬像,采用HTTPS協(xié)議的工程師學(xué)習(xí)學(xué)習(xí)只使用HTTP協(xié)議的小伙伴的安全方案算撮,通信數(shù)據(jù)要做到讓人看了就煩的地步∠匕海總之安全要做到雙保險(xiǎn)肮柜。如果有機(jī)會(huì),希望以后可以詳細(xì)的講一下繞過(guò)認(rèn)證的幾種方法倒彰。
0x03 中間人攻擊之放長(zhǎng)線釣大魚(yú)
這里可能和上面的內(nèi)容有些重復(fù)审洞,不過(guò)這的重點(diǎn)是如何釣魚(yú)。在烏云上看到好多廠商對(duì)PC端的中間人攻擊漏洞采取了積極處理待讳,而移動(dòng)端的卻總是被忽略芒澜,在這里我想為移動(dòng)端討些說(shuō)法。隨著時(shí)代的變遷wifi已經(jīng)變得越來(lái)越普及了创淡,當(dāng)然如果你是土豪一直用流量那么我無(wú)話可說(shuō)痴晦,但是畢竟土豪總是少數(shù)人么,今年的315就現(xiàn)場(chǎng)演示了一把什么是黑wifi琳彩。所謂黑wifi并不只是在你和服務(wù)器之間有一雙眼在偷偷的看著你在干什么誊酌,更有甚者他是想在你的移動(dòng)設(shè)備上裝些什么,用一個(gè)比較專業(yè)的詞叫中間人攻擊汁针。
2015年315晚會(huì)關(guān)于wifi的新聞
曾遇到過(guò)IOS端的多款A(yù)PP更新時(shí)返回更新鏈接术辐,當(dāng)我點(diǎn)擊更新時(shí)會(huì)跳轉(zhuǎn)到AppStore或者自己的APP發(fā)放平臺(tái)那里,如果這里沒(méi)有對(duì)返回?cái)?shù)據(jù)進(jìn)行合法性校驗(yàn)的話很容易招到中間人攻擊施无。這里拿58同城的IOS客戶端做一個(gè)例子辉词,當(dāng)我打開(kāi)APP時(shí)他會(huì)自動(dòng)檢查軟件更新,如果存在新版本則立即返回更新提示猾骡,這里我修改返回鏈接為其他APP的下載鏈接瑞躺,那么下載的應(yīng)用就是其他的APP。也可以修改為其他應(yīng)用的URL Scheme兴想,例如支付寶的URL Scheme(alipass://)幢哨,這樣我點(diǎn)擊更新時(shí)便直接跳轉(zhuǎn)到了支付寶,如果越獄了可能還會(huì)安裝一些惡意木馬嫂便。其實(shí)處理這類問(wèn)題很簡(jiǎn)單捞镰,數(shù)據(jù)包里加一個(gè)完整性的校驗(yàn),當(dāng)客戶端發(fā)現(xiàn)數(shù)據(jù)包被篡改時(shí)可自動(dòng)注銷或提示用戶存在風(fēng)險(xiǎn)。
58同城IOS客戶端更新可被劫持
可能有人會(huì)說(shuō)了岸售,我使用HTTPS協(xié)議不怕你們的所謂中間人践樱。可是實(shí)際上真的是這樣么凸丸?這里的關(guān)鍵是如何讓用戶信任一個(gè)第三方的證書(shū)拷邢,現(xiàn)在大多的公共免費(fèi)wifi連接后需要登錄web進(jìn)行驗(yàn)證,驗(yàn)證過(guò)程中需要輸入手機(jī)號(hào)和驗(yàn)證碼然后點(diǎn)擊下一步屎慢。沒(méi)錯(cuò)瞭稼,我們可以在下一步的按鈕上做文章,釣魚(yú)wifi的名稱可以設(shè)置為“XXX銀行免費(fèi)WIFI”腻惠,當(dāng)用戶連接后跳轉(zhuǎn)到手機(jī)認(rèn)證處环肘,我們將下一步的按鈕的鏈接設(shè)置為下載證書(shū)的鏈接(例如:http://localhost:8888/FiddlerRoot.cer),只要用戶點(diǎn)擊下一步妖枚,證書(shū)就會(huì)自動(dòng)下載廷臼,安裝證書(shū)則需要用戶再次點(diǎn)擊。為了能讓用戶更容易上當(dāng)绝页,完全可以在驗(yàn)證手機(jī)號(hào)碼的頁(yè)面上寫(xiě)到“為保證用戶的數(shù)據(jù)安全荠商,使用我銀行的免費(fèi)wifi時(shí)請(qǐng)先安裝證書(shū),點(diǎn)擊下一步即可安裝”续誉±趁唬可能在從事安全行業(yè)的人眼里我們是不會(huì)輕易信任任何證書(shū)的,但是使用wifi的人大多不懂安全酷鸦,更不懂得什么是證書(shū)饰躲,如若用戶不小心連接了釣魚(yú)wifi,那么估計(jì)也有百分之八十的人會(huì)去信任這個(gè)非法的證書(shū)臼隔。而在IOS中嘹裂,CA頒發(fā)的證書(shū)被標(biāo)識(shí)為可信,而自簽名的證書(shū)被標(biāo)識(shí)為不可信摔握,可這在一個(gè)著急想蹭免費(fèi)wifi的人眼里有什么區(qū)別么寄狼?
這是自簽名的證書(shū)IOS顯示不可信
解決方案:即使客戶端使用了較為嚴(yán)格的數(shù)據(jù)自我校驗(yàn)體系,即使客戶端使用了HTTPS協(xié)議氨淌,那么也要為廣大的普通用戶考慮泊愧,不要讓壞人成為中間人來(lái)對(duì)我們的手機(jī)做壞事。呼吁廠商不要忽略中間人攻擊的漏洞盛正。
0x04 小結(jié)
本來(lái)是想寫(xiě)到0x005的删咱,但是發(fā)現(xiàn)篇幅有點(diǎn)太長(zhǎng),希望下次有機(jī)會(huì)繼續(xù)寫(xiě)吧豪筝。這里我們做一個(gè)簡(jiǎn)單的小結(jié):1痰滋、數(shù)據(jù)請(qǐng)勿本地存儲(chǔ)摘能,用后請(qǐng)刪或添加訪問(wèn)限制;2即寡、不要過(guò)分的信任某項(xiàng)技術(shù)徊哑,安全要做到雙保險(xiǎn);3聪富、誘騙一個(gè)用戶并不是很難。