多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > iOS應用安全開發,你不知道的那些事

iOS應用安全開發,你不知道的那些事

來源:程序員人生   發布時間:2014-09-26 08:00:00 閱讀次數:2826次

聯網領域,安全已然是一個老生常談的話題。許多大公司都設置有專門的安全部門,用于檢測自己產品的安全性。但即便是這樣,業界仍然時常爆出許多安全問題引發的新聞。就在不久前,烏云曝光了攜程網在支付過程中,為了調試方便,記錄了用戶的信用卡卡號和CVV碼等信息,而調試接口可以被外網訪問,這樣造成黑客可能通過調試接口讀取用戶的信用卡信息。雖然最終沒有造成實際上的用戶損失,但此次事件再一次給互聯網公司敲響了安全的警鐘。

除了國內,國外的互聯網安全問題同樣讓人擔憂。2013年由于曝出Apache Struts2的漏洞,蘋果公司多次重置開發者的密碼,并且最終為了用戶數據的安全,將整個開發者后臺全部停止服務,花了2周多時間將后臺有潛在問題的功能重寫后,才重新開放服務。而4月份剛剛曝光的OpenSSL的漏洞,則讓全球三分之二的網站受到影響。在移動互聯網快速發展的今天,iOS應用由于直接運行在用戶的手機上,相比運行在服務器的后臺服務,更有可能被黑客攻擊。本文接下來將從三個方面概述iOS移動應用在安全方面所面臨的挑戰以及應對措施。

網絡安全

1. 安全地傳輸用戶密碼

大部分的iOS應用都需要連網,通過和服務器端進行通信,獲得最新的信息并且將內容展現給用戶。由于網絡傳輸過程中有可能經過不安全的中間節點,所以我們應該對敏感數據加密,用于保證用戶信息的安全。黑客可以在受害者的手機上設置網絡通信的代理服務器,從而截獲所有的網絡請求。即使是HTTPS的加密通信,黑客也可以通過中間人攻擊(Man-In-The-Middle Attack,指的是攻擊者與通信的兩端分別創建獨立的聯系,并交換其所收到的數據,使通信的兩端認為他們正在通過一個私密的連接與對方直接對話,但事實上,整個會話都被攻擊者完全控制)來截取通信內容。

黑客可以在Mac下使用Charles軟件(如果在Windows下,可以使用Fiddler軟件)來將自己的電腦設置成代理服務器,從而截取應用的網絡請求,分析目標應用在通信協議上是否有安全問題。為了測試,我選取了在國內最大的兩家租車公司(神州租車和一嗨租車)的iOS應用。

從圖1可以看到,神州租車和一嗨租車在用戶登錄時,均采用明文的方式,將密碼直接發送給服務器。其中一嗨租車不但采用明文方式發送密碼,而且在發送時使用了Http Get的方式,而GET的URL數據一般都會保存在服務器的Access Log中,所以黑客一旦攻破服務器,只需要掃描Acesss Log,則可以輕易獲得所有用戶的明文密碼(在本文發表前,一嗨租車已修改了登錄協議,采用了POST的方式來登錄,但仍然傳遞的是明文密碼)。



圖1 神州租車和一嗨租車的登錄協議

如果每一個移動應用都像以上兩種應用那樣,明文傳輸用戶密碼,那么我們可以想象這樣一個場景:黑客在咖啡館或機場等一些公共場所,將自己的電腦設置成與該場所一樣名字的免費Wi-Fi,受害者只要不小心使用了該Wi-Fi,則可能泄漏自己的明文密碼。對于大多數普通人來說,他們會使用一樣的密碼登錄他的所有的賬號,這就意味著他的其他賬號:例如淘寶或網上銀行賬號也有被盜的風險。

正確的做法應該是這樣:事先生成一對用于加密的公私鑰,客戶端在登錄時,使用公鑰將用戶的密碼加密后,將密文傳輸到服務器。服務器使用私鑰將密碼解密,然后加鹽(Salt,在密碼學中是指,通過在密碼任意固定位置插入特定的字符串,讓散列后的結果和使用原始密碼的散列結果不相符,這個過程稱之為“加鹽”),之后再多次求MD5,然后再和服務器原來存儲的用同樣方法處理過的密碼匹配,如果一致,則登錄成功。這樣的做法,保證黑客即使截獲了加密后的密文,由于沒有私鑰,也無法還原出原始的密碼。而服務器即使被黑客攻陷,黑客除了暴力嘗試,也無法從加鹽和多次MD5后的密碼中還原出原始的密碼。這樣就保證了用戶密碼的安全。

2. 防止通信協議被輕易破解

除了上面提到的明文傳輸密碼的問題外,移動端應用還要面對黑客對于通信協議的破解的威脅。

在成功破解了通信協議后,黑客可以模擬客戶端登錄,進而偽造一些用戶行為,可能對用戶數據造成危害。例如騰訊出品的消除游戲《天天愛消除》,在淘寶上就有很多售價僅為1元的代練服務,如果真正是人工代練,是不可能賣這么便宜的,只有可能是該游戲的通信協議被破解,黑客制作出了代練的機器人程序。通信協議被破解除了對于移動端游戲有嚴重危害外,對于應用也有很大的危害。例如針對微信,黑客可以制作一些僵尸賬號,通過向微信公共賬號后臺發送垃圾廣告,達到贏利的目的。而iPhone設備上的iMessage通信協議居然也被破解了,所以很多iPhone用戶會收到來自iMessage的垃圾廣告。

對于以上提到的問題,開發者可以選擇類似ProtoBuf(Google提供的一個開源數據交換格式,其最大的特點是基于二進制,因此比傳統的JSON格式要短小得多)之類的二進制通信協議或自己實現通信協議,對于傳輸的內容進行一定程度的加密,以增加黑客破解協議的難度。圖2是我截取的淘寶客戶端的通信數據,可以看到其中的值都不能直觀地猜出內容,所以這對于通信協議是有一定的保護作用。


圖2 淘寶客戶端通信協議

3. 驗證應用內支付的憑證

iOS應用內支付(IAP)是眾多應用贏利的方式,通過先讓用戶免費試用或試玩,然后提供應用內支付來為愿意付費的用戶提供更強大的功能,這種模式特別適合不習慣一開始就掏錢的中國用戶。但由于國內越獄用戶的比例比較大,所以我們也需要注意應用內支付環節中的安全問題。簡單來說,越獄后的手機由于沒有沙盒作為保護,黑客可以對系統進行任意地修改,所以在支付過程中,蘋果返回的已付款成功的憑證可能是偽造的。客戶端拿到付款憑證之后,還需要將憑證上傳到自己的服務器上,進行二次驗證,以保證憑證的真實性。

另外,我們發現越獄用戶的手機上,很可能被黑客用中間人攻擊技術來劫持支付憑證。這對于黑客有什么好處呢?因為蘋果為了保護用戶的隱私,支付憑證中并不包含任何用戶的賬號信息,所以我們的應用和服務器無法知道這個憑證是誰買的,而只能知道這個憑證是真的還是假的。所以在驗證憑證時,哪個賬號發起了驗證請求,我們就默認這個憑證是該賬號擁有的。如果黑客將憑證截獲,就可以偽裝成真實用戶來驗證憑證或者轉手出售獲利。

打個比方,這就類似于很多商場的購物卡一樣,由于是不記名的,黑客如果將你買的購物卡偷竊然后去刷卡購物,商場是無法簡單地區分出來的。因此,對于應用內支付,開發者除了需要仔細地驗證購買憑證外,也需要告知用戶在越獄手機上進行支付的風險。

本地文件和數據安全

1. 程序文件的安全

iOS應用的大部分邏輯都是在編譯后的二進制文件中,但由于近年來混合式(Hybrid)編程方式的興起,很多應用的部分功能也采用內嵌Web瀏覽器的方式來實現。例如騰訊QQ iOS客戶端的內部,就有部分邏輯是用Web方式實現的。由于iOS安裝文件其實就是一個zip包,所以我們可以通過解壓,看到包內的內容。以下是我解開騰訊QQ客戶端,看到的其qqapi.js文件的內容。


可以看到,這些文件都有著完整清晰的注釋。通過分析這些JavaScript文件,黑客可以很輕松地知道其調用邏輯。在越獄手機上,還可以修改這些JavaScript代碼,達到攻擊的目的。

我也曾嘗試查看支付寶客戶端中的彩票功能,通過分析,也可以找到其完整的、帶著清晰注釋的JavaScript代碼,如圖3所示(支付寶現在已對相應代碼進行了加密)。

通過將JavaScript源碼進行混淆和加密,可以防止黑客輕易地閱讀和篡改相關的邏輯,也可以防止自己的Web端與Native端的通信協議泄漏。


圖3 支付寶應用的JavaScript文件

本地數據安全

iOS應用的數據在本地通常保存在本地文件或本地數據庫中。如果對本地的數據不進行加密處理,很可能被黑客篡改。比如一款名為《LepsWorld 3》的游戲,打開它的本地文件,可以很容易地找到,它使用了一個名為ItempLifes的變量保存生命數值(如圖4所示)。于是我們可以簡單修改該值,達到修改游戲參數的目的。而在淘寶上,也可以找到許多以此掙錢的商家。對于本地的重要數據,我們應該加密存儲或將其保存到keychain中,以保證其不被篡改。


圖4 《LepsWorld 3》的本地數據

源代碼安全

通過file、class-dump、theos、otool等工具,黑客可以分析編譯之后的二進制程序文件,不過相對于這些工具來說,IDA的威脅最大。IDA是一個收費的反匯編工具,對于Objective-C代碼,它常常可以反匯編到可以方便閱讀的程度,這對于程序的安全性,也是一個很大的危害。因為通過閱讀源碼,黑客可以更加方便地分析出應用的通信協議和數據加密方式。

下面分別示例了一段代碼的原始內容和通過IDA反匯編之后的結果。可以看到,IDA幾乎還原了原本的邏輯,而且可讀性也非常高。

原始代碼:


反匯編后:


反匯編的代碼被獲得后,由于軟件內部邏輯相比匯編代碼來說可讀性高了很多。黑客可以用來制作軟件的注冊機,也可以更加方便地破解網絡通信協議,從而制作出機器人(“僵尸”)賬號。最極端的情況下,黑客可以將反匯編的代碼稍加修改,植入木馬,然后重新打包發布在一些越獄渠道上,這將對用戶產生巨大的危害。

對于IDA這類工具,我們的應對措施就比較少了。除了可以用一些宏來簡單混淆類名外,也可以將關鍵的邏輯用純C語言來實現。例如微信的iOS端的通信底層,就是用C語言實現的。這樣的方式除了能保證通信協議的安全外,也可以在iOS和Android等多個平臺使用同一套底層通信代碼,達到復用的目的。

總結

由于移動互聯網的快速發展,人們的購物、理財等需求也在移動端出現,這使得移動應用的安全性越來越重要。由于部署在用戶終端上,移動應用比服務器應用更容易被攻擊,大家也需要在移動應用的網絡通信、本地文件和數據、源代碼三方面做好防范,只有這樣才能保證應用的安全。 

作者唐巧:資深iOS開發者,曾開發有道云筆記和猿題庫,維護了iOS開發的博客(http://blog.devtang.com)和微信公共賬號(iOSDevTips),微博:@唐巧_boy

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线高清观看 | 99热色 | 中文字幕乱码在线 | 亚洲精品视频免费看 | 一区二区三区四区免费视频 | 国产精品亚洲综合第一区 | 老司机福利免费 | 欧美一级日韩一级亚洲一级 | 国产高清成人吃奶成免费视频 | 欧美成人网在线综合视频 | 三级成人做爰视频 | 免费在线播放视频 | 国产精品jizz视频 | 男人天堂久久 | 欧美自拍视频在线 | 男女爱爱免费网站视频在线观看 | 护士一级aaaaaa毛片 | jizzjizz黄大片 | 男人懂得成a人v网站 | 欧美一级精品高清在线观看 | 日本久久影视 | 国产呦合第一系 | 国产精品视频国产永久视频 | 欧美日韩福利视频一区二区三区 | 波多野结衣被强在线视频 | 日本成人在线网站 | 亚洲欧美日韩人成 | 毛片影视| 国产综合久久 | 中文字幕一区二区三区视频在线 | www.狠狠操 | 性xxxxfreexxxxx国产| 视频免费在线 | 欧美x性| 精品久久成人免费第三区 | 另类小说校园春色 | 亚洲天堂网站在线 | 波多野结衣视频一区二区 | 国产亚洲欧美成人久久片 | 24小时免费观看www日本 | 男女啪啪片 |