原創|行業資訊|編輯:龔雪|2014-06-10 09:53:24.000|閱讀 496 次
概述:iOS應用程序因為其特殊性,被攻擊的可能也是很高的。在開發過程中,需要從三個方面考慮程序安全性。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
安全地傳輸用戶密碼
大 部分的iOS應用都需要連網,通過和服務器端進行通信,獲得最新的信息并且將內容展現給用戶。由于網絡傳輸過程中有可能經過不安全的中間節點,所以我們應 該對敏感數據加密,用于保證用戶信息的安全。黑客可以在受害者的手機上設置網絡通信的代理服務器,從而截獲所有的網絡請求。即使是HTTPS的加密通信, 黑客也可以通過中間人攻擊(Man-In-The-Middle Attack,指的是攻擊者與通信的兩端分別創建獨立的聯系,并交換其所收到的數據,使通信的兩端認為他們正在通過一個私密的連接與對方直接對話,但事實 上,整個會話都被攻擊者完全控制)來截取通信內容。
黑客可以在Mac下使用Charles軟件(如果在Windows下,可以使用 Fiddler軟件)來將自己的電腦設置成代理服務器,從而截取應用的網絡請求,分析目標應用在通信協議上是否有安全問題。為了測試,我選取了在國內最大 的兩家租車公司(神州租車和一嗨租車)的iOS應用。
圖1
從圖1可以看到,神州租車和一嗨租車在用戶登錄時,均采用明文的方式,將密碼直接發送給服務器。其中一嗨租車不但采用明文方式發送密碼,而且在發送 時使用了Http Get的方式,而GET的URL數據一般都會保存在服務器的Access Log中,所以黑客一旦攻破服務器,只需要掃描Acesss Log,則可以輕易獲得所有用戶的明文密碼(在本文發表前,一嗨租車已修改了登錄協議,采用了POST的方式來登錄,但仍然傳遞的是明文密碼)。
如 果每一個移動應用都像以上兩種應用那樣,明文傳輸用戶密碼,那么我們可以想象這樣一個場景:黑客在咖啡館或機場等一些公共場所,將自己的電腦設置成與該場 所一樣名字的免費Wi-Fi,受害者只要不小心使用了該Wi-Fi,則可能泄漏自己的明文密碼。對于大多數普通人來說,他們會使用一樣的密碼登錄他的所有 的賬號,這就意味著他的其他賬號:例如淘寶或網上銀行賬號也有被盜的風險。
正 確的做法應該是這樣:事先生成一對用于加密的公私鑰,客戶端在登錄時,使用公鑰將用戶的密碼加密后,將密文傳輸到服務器。服務器使用私鑰將密碼解密,然后 加鹽(Salt,在密碼學中是指,通過在密碼任意固定位置插入特定的字符串,讓散列后的結果和使用原始密碼的散列結果不相符,這個過程稱為“加鹽”),之 后再多次求MD5,然后再和服務器原來存儲的用同樣方法處理過的密碼匹配,如果一致,則登錄成功。這樣的做法保證黑客即使截獲了加密后的密文,由于沒有私 鑰,也無法還原出原始的密碼。而服務器即使被黑客攻陷,黑客除了暴力嘗試,也無法從加鹽和多次MD5后的密碼中還原出原始的密碼。這就保證了用戶密碼的安 全。
防止通信協議被輕易破解
除了上面提到的明文傳輸密碼的問題外,移動端應用還要面對黑客對于通信協議的破解的威脅。
在 成功破解了通信協議后,黑客可以模擬客戶端登錄,進而偽造一些用戶行為,可能對用戶數據造成危害。例如騰訊出品的消除游戲《天天愛消除》,在淘寶上就有很 多售價僅為1元的代練服務,如果真正是人工代練,是不可能賣這么便宜的,只有可能是該游戲的通信協議被破解,黑客制作出了代練的機器人程序。通信協議被破 解除了對于移動端游戲有嚴重危害外,對于應用也有很大的危害。例如針對微信,黑客可以制作一些僵尸賬號,通過向微信公共賬號后臺發送垃圾廣告,達到贏利的 目的。而iPhone設備上的iMessage通信協議居然也被破解了,所以很多iPhone用戶會收到來自iMessage的垃圾廣告。
對 于以上提到的問題,開發者可以選擇類似ProtoBuf(Google提供的一個開源數據交換格式,其最大的特點是基于二進制,因此比傳統的JSON格式 要短小得多)之類的二進制通信協議或自己實現通信協議,對于傳輸的內容進行一定程度的加密,以增加黑客破解協議的難度。圖2是我截取的淘寶客戶端的通信數 據,可以看到其中的值都不能直觀地猜出內容,所以這對于通信協議是有一定的保護作用。
圖2
驗證應用內支付的憑證
iOS 應用內支付(IAP)是眾多應用贏利的方式,通過先讓用戶免費試用或試玩,然后提供應用內支付來為愿意付費的用戶提供更強大的功能,這種模式特別適合不習 慣一開始就掏錢的中國用戶。但國內越獄用戶的比例較大,所以我們也需要注意應用內支付環節中的安全問題。簡單來說,越獄后的手機由于沒有沙盒作為保護,黑 客可對系統進行任意地修改,所以在支付過程中,蘋果返回的已付款成功的憑證可能是偽造的。客戶端拿到付款憑證后,還需要將憑證上傳到自己的服務器上,進行 二次驗證,以保證憑證的真實性。
另外,我們發現越獄用戶的手機上,很可能被黑客用中間人攻擊技術來劫持支付憑證。這對于黑客有什么好處呢? 因為蘋果為了保護用戶的隱私,支付憑證中并不包含任何用戶的賬號信息,所以我們的應用和服務器無法知道這個憑證是誰買的,而只能知道這個憑證是真的還是假 的。所以在驗證憑證時,哪個賬號發起了驗證請求,我們就默認這個憑證是該賬號擁有的。如果黑客將憑證截獲,就可以偽裝成真實用戶來驗證憑證或者轉手出售獲 利。
打個比方,這就類似于很多商場的購物卡一樣,由于是不記名的,黑客如果將你買的購物卡偷竊然后去刷卡購物,商場是無法簡單地區分出來的。因此,對于應用內支付,開發者除了需要仔細地驗證購買憑證外,也需要告知用戶在越獄手機上進行支付的風險。
資源分享:
原文地址://www.csdn.net/article/2014-05-28/2819994
通信安全工具:
IP*Works! Internet Toolkit v9.0
IP*Works! S/MIME v9.0 IP*Works! SSH IP*Works! SSL
代碼混淆工具:
.NET Reactor v4.9 Dotfuscator DashO Pro v7.3
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn