iOS開發(fā)安全

這篇文章之前自己在公司的技術(shù)分享學(xué)院發(fā)表了⊥╇現(xiàn)在發(fā)到自己的博客上。

現(xiàn)在很多iOS的app沒有做任何的安全防范措施。今天我們就聊聊iOS開發(fā)人員平時怎么做才更安全分蓖。

一、網(wǎng)絡(luò)方面

用抓包工具可以抓取手機(jī)通信接口的數(shù)據(jù)尔许。以Charles為例么鹤,用Charles可以獲取http的所有明文數(shù)據(jù),配置好它的證書后就可以模擬中間人攻擊母债,獲取https加密前的明文數(shù)據(jù)午磁。

先簡要的說下什么是中間人攻擊:

①客戶端:“我是客戶端,給我你的公鑰”-> 服務(wù)端(被中間人截獲)毡们。

所以現(xiàn)在是:

客戶端->中間人迅皇,

②然后中間人把消息轉(zhuǎn)給服務(wù)端,也就是:

中間人->服務(wù)端衙熔。

③服務(wù)端把帶有公鑰的信息發(fā)送給客戶端登颓,但是被中間截獲。所以是:

服務(wù)端-[服務(wù)端的公鑰] ->中間人红氯。

④中間人把服務(wù)端的公鑰替換成自己的公鑰框咙,發(fā)送給客戶端咕痛,聲稱是服務(wù)端的公鑰:

中間人-[中間人的公鑰] ->客戶端

⑤客戶端用得到的公鑰加密,實際是用的中間人的公鑰進(jìn)行的加密喇嘱,所以中間人可以用自己的私鑰解密茉贡,獲取原始數(shù)據(jù),然后再用服務(wù)端的公鑰對原始數(shù)據(jù)(或者修改原始數(shù)據(jù)內(nèi)容)加密后發(fā)送給服務(wù)端者铜。

這樣中間人就可以獲取到雙方的通信數(shù)據(jù)腔丧,并可以制造虛假數(shù)據(jù)。

下面開始說如何防范:

1作烟、SSL Pinning

SSL Pinning的原理就是把服務(wù)端的公鑰存到客戶端中愉粤,客戶端會校驗服務(wù)端返回的證書是否和客戶端保存的一致,這樣就避免了中間人替換證書進(jìn)行的攻擊拿撩。

SSL Pinning的實現(xiàn)比較簡單衣厘,只需要把CA證書放入項目中,通過Security framework實現(xiàn)NSURLSession上的SSL Pinning压恒。如果用的是AFNetworking影暴,代碼更簡單一點(diǎn):

image

這樣通過Charles抓包就會報錯。

image

證書驗證有可以只驗證公鑰(AFSSLPinningModePublicKey)涎显,也可以完全驗證證書(AFSSLPinningModeCertificate)坤检。

但是用SSL Pinning有個很嚴(yán)重的問題,就是如果證書有問題期吓,只有發(fā)布新版本才能解決早歇。如果新版本一直審核不通過,app的網(wǎng)絡(luò)通信就全部掛掉了讨勤。

比如賽門鐵克(Symantec)證書被google和iOS12不信任的問題箭跳。如果app內(nèi)置了證書,就必須要重新發(fā)版潭千。

2谱姓、接口內(nèi)容進(jìn)行加密

很多的app接口只對請求的參數(shù)進(jìn)行加密和各種驗證,而接口返回過來的數(shù)據(jù)就是明文刨晴。如果不用SSL Pinning來防止中間人攻擊屉来,也可以把接口返回的數(shù)據(jù)也進(jìn)行加密,這樣抓包工具抓到包后也依然不能破解狈癞。

比如微信茄靠,微信中的接口用的是http協(xié)議,但是內(nèi)容全部進(jìn)行了加密蝶桶。

image

現(xiàn)在常用的是對稱加密慨绳,加密效率比較快。如果app里有的數(shù)據(jù)特別重要,還是要用非對稱加密脐雪,非對稱加密更安全厌小,但是效率會比較慢。

二战秋、日志

1璧亚、Swift日志

Swift中打印日志的語法可以用print,也可以用NSLog获询。但是盡量別用NSLog涨岁,因為Swift中用NSLog,系統(tǒng)日志中是能查到的吉嚣。可以通過pp助手蹬铺、iTools或者Xcode的Devices and Simulators 來查看系統(tǒng)日志尝哆。

用print打印日志就不會出現(xiàn)在系統(tǒng)日志中。

2甜攀、OC日志

在release環(huán)境下不要輸出NSLog日志秋泄。一般大家都會用宏定義解決,比如:

image

三规阀、信息的存儲

1恒序、密鑰

大部分的程序員喜歡直接把密鑰放到宏或者常量里。

如:#define AES_KEY @“aaa123"

這樣做很容易就可以被反編譯出來谁撼。安全性比較差歧胁。可以用以下方法加強(qiáng)安全厉碟,增加破解的難度喊巍。

1.1、對密鑰(A)進(jìn)行加密后定義為宏(B)箍鼓,使用的時候進(jìn)行解密得到密鑰(A)崭参。其中對密鑰A加密的密鑰為C。

因為在宏定義的時候我們?nèi)绻x成字符串款咖,會直接存在data段何暮,這樣破解者很容易獲取到。比較安全的做法是把C和B定義成uint8_t[]數(shù)組铐殃,這樣每個字符就會放到text段的每個單獨(dú)指令中海洼。指令執(zhí)行后生成字符串。這樣就會很安全背稼。

1.2贰军、用一段長文本,按規(guī)則提取出里面的密鑰,密鑰是隨機(jī)的词疼。

在服務(wù)端和客戶端定義一段長文本俯树,app端隨機(jī)生成起始位置和長度,把起始位置和長度進(jìn)行移位等操作贰盗,生成相應(yīng)的數(shù)字许饿,對數(shù)字進(jìn)行Base64編碼,生成的字符串 傳給服務(wù)端舵盈,服務(wù)端根據(jù)這個字符串 就能 解析出相關(guān)的密鑰陋率。

代碼如下:

image

這樣只是增加了破解者獲取密鑰的難度,其實并不能完全阻止破解者獲取秽晚。

2瓦糟、Keychain

越獄的iPhone可以查看導(dǎo)出Keychain保存的信息。Keychains的內(nèi)容存放在sqlite中赴蝇,目錄為:/private/var/Keychains菩浙。可以通過keychain-dump可以查看鑰匙串里存放的的內(nèi)容句伶。

所以保存到Keychain的數(shù)據(jù)一定要是加密之后的數(shù)據(jù)劲蜻。

3、plist考余、sqlite

plist先嬉、sqlite可以直接在ipa安裝文件中獲取到,所以不要在這些文件中存放重要信息楚堤,如果要保存疫蔓,就進(jìn)行加密后再存放。

四钾军、app加固

1鳄袍、代碼混淆

代碼混淆就是把易讀的類名、方法名替換成不易讀的名字吏恭。常用的方法有宏替換和腳本替換拗小。

比如本來方法名為:- (void)loadNetData; 進(jìn)行代碼混淆后,用class-dump導(dǎo)出頭文件后會顯示成修改后的方法名:- (void)showxhevaluatess;

2樱哼、用C語言

核心代碼用C語言寫哀九,但是C語言的函數(shù)也可以被hook,比如用fishhook搅幅。開發(fā)人員可以用靜態(tài)內(nèi)聯(lián)函數(shù)來防止hock阅束,破解者就只能去理解代碼的邏輯。

3茄唐、檢測tweak

可以檢測/Library/MobileSubstrate/DynamicLibraries 下的plist 文件里是否包含自己app的bundle id息裸。如果包含蝇更,可以進(jìn)行限制app的功能、提示該手機(jī)不安全 等呼盆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末年扩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子访圃,更是在濱河造成了極大的恐慌厨幻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腿时,死亡現(xiàn)場離奇詭異况脆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)批糟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門格了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徽鼎,你說我怎么就攤上這事笆搓。” “怎么了纬傲?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肤频。 經(jīng)常有香客問我叹括,道長,這世上最難降的妖魔是什么宵荒? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任汁雷,我火速辦了婚禮,結(jié)果婚禮上报咳,老公的妹妹穿的比我還像新娘侠讯。我一直安慰自己,他們只是感情好暑刃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布厢漩。 她就那樣靜靜地躺著,像睡著了一般岩臣。 火紅的嫁衣襯著肌膚如雪溜嗜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天架谎,我揣著相機(jī)與錄音炸宵,去河邊找鬼。 笑死谷扣,一個胖子當(dāng)著我的面吹牛土全,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裹匙,長吁一口氣:“原來是場噩夢啊……” “哼瑞凑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幻件,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤拨黔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绰沥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篱蝇,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年徽曲,在試婚紗的時候發(fā)現(xiàn)自己被綠了零截。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秃臣,死狀恐怖涧衙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奥此,我是刑警寧澤弧哎,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站稚虎,受9級特大地震影響撤嫩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蠢终,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一序攘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寻拂,春花似錦程奠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朴皆,卻和暖如春帕识,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遂铡。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工肮疗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扒接。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓伪货,卻偏偏與公主長得像们衙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碱呼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,521評論 0 13
  • 一蒙挑、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信愚臀。所有信息明文傳播忆蚀,帶來了三大風(fēng)險。 (1)竊聽風(fēng)險...
    XLsn0w閱讀 10,529評論 2 44
  • 原文: 高性能網(wǎng)絡(luò)瀏覽器-第四章傳輸層安全性(Transport Layer Security,TLS) 翻譯: ...
    夢很想家閱讀 4,620評論 2 6
  • 落雪姑裂,初雪馋袜。 逃離一場大難,算來也是過了許久舶斧。我亦不貪心欣鳖,卻真的未曾料到,如今茴厉,場面泽台。 窗外的雪紛落,像是舉行一場...
    珞珞玉煙閱讀 328評論 0 0
  • "世界在說謊矾缓,青春在謊言兩旁怀酷。" 來自 木馬樂隊《果凍帝國》
    伍丁零閱讀 244評論 0 0