天天看點

《黑客大曝光:移動應用安全揭秘及防護措施》一3.1 了解iPhone

本節書摘來自華章出版社《黑客大曝光:移動應用安全揭秘及防護措施》一書中的第3章,第3.1節,作者 (美)neil bergman ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

ios有一段很有趣的曆史,這有助于在學習入侵ios平台時增進對ios的了解。20世紀80年代中期,史蒂夫•喬布斯離開了蘋果,創立了next,在這裡,他開發了ios的雛形。next開發了一系列旨在用于教育和其他非消費市場的高端工作站。next選擇開發自己的作業系統,并在最初命名為nextstep。nextstep的開發基本上是對一些開源軟體進行内部開發優化,再組合在一起。nextstep最基礎的系統主要是衍生于卡内基•梅隆大學mach核心,并借鑒了一些bsd unix核心。next對于此平台的程式設計語言做了一個有趣的決定:選擇采用objective-c這一程式設計語言,并以此語言為他們的平台提供絕大多數接口。這是對傳統的突破,因為當時在其他平台上的應用開發程式設計語言中,c語言占據着主導的地位。nextstep系統上的應用由objective-c語言開發,結合了next提供的擴充類庫。

1996年,蘋果公司收購了next公司,以及其開發的nextstep系統(同時,将其重新命名為openstep系統)。nextstep系統被選擇作為代替老式的經典mac os的下一代作業系統的基礎。新平台的預先發行版本的代号為rhapsody,這個平台中的接口被進行了修改以符合mac os 9的風格。這種風格樣式最終被替換為mac os x(代号為aqua)的界面風格。随着界面的改變,作業系統和附帶應用的開發工作還在繼續,到2001年5月24日,蘋果公司公開向全世界釋出了他們的下一代作業系統—mac os x。

6年後,在2007年,蘋果公司帶着iphone大舉進入移動手機市場。iphone是一款令人興奮的新型智能手機,擁有許多新穎的功能,包括手機本身先進的工業設計以及一個最初叫做iphone os新型的移動手機作業系統。iphone os之後被頗有争議地改為ios(因為它與思科公司的網際網路作業系統internetwork operating system即ios很相似),它從nextstep和mac os x家族衍生,或多或少是mac os x的一個精簡分支。ios的核心仍然采用基于mach和bsd的一個類似的程式設計模型,應用開發模型也仍然基于objective-c語言,并高度依賴蘋果公司提供的類庫。

随着iphone的釋出,一些其他的基于ios的裝置也陸續由蘋果公司釋出,包括ipod touch 1g(2007)、apple tv(2007)、ipad(2010)以及ipad mini(2012)。ipod touch 和ipad在軟硬體方面都與iphone非常相似。apple tv與其他産品有一點不同,因為它主要是針對家庭使用者的一個嵌入式裝置,而不是一個移動裝置。不管怎樣,apple tv始終還是基于ios系統,實作的功能大體上也相同(最值得一提的不同點就是使用者界面,以及缺乏官方對于應用的安裝和運作的支援)。

從安全的角度來看,上面所述的是一些有關ios裝置攻擊或安全保護重點的提示。那麼注意力必然要轉移到對作業系統架構的學習,包括怎麼編寫mach核心,以及應用程式程式設計模型的指導,特别是怎樣一起工作、分析、設計,以及修改主要基于objective-c語言和蘋果提供的架構的程式。

最後需要注意的有關ios裝置的一點是蘋果公司所選擇的硬體平台。迄今為止,所有基于ios的裝置的核心都是一個arm處理器,這種處理器與x86或一些其他類型的處理器是對立的。arm處理器結構與其他類型的處理器之間有很大不同,是以當在ios平台上進行工作時必須對這些不同點了解清楚。最明顯的就是在開發時,所有指令、寄存器、值等等都與其他平台上的不同。在某種程度上,arm處理器的使用更為簡便。例如,所有arm指令的長度都是固定的(2比特或者4比特);指令集包含的指令數較其他平台而言更少;暫時不需要擔心64位的擴充,因為現在的iphone和其他類似的産品所使用的arm處理器都隻是32位。

 為了簡便起見,在本章将使用iphone來代表所有基于ios的裝置。同時,當需要差別的時候,我們也會分别使用iphone和ios來描述。

在讨論ios安全之前,如果你有興趣學習更多有關ios内部結構或arm結構的知識,這裡有一些參考文獻可供進一步的閱讀:

mac os x internal: a systems approach, amit singh (addison-wesley, 2006)

mac os x and ios internals: to the apple抯 core, jonathan levin (wrox, 2012)

os x and ios kernel programming, ole henry halvorsen (apress, 2011)

ios hacker抯 handbook, charlie miller et al. (wiley, 2012)

the mac hacher抯 handbook, charlie miller et al. (wiley, 2009)

programming under mach, joseph boykin et al. (addison-wesley, 1993)

arm system developer抯 guide: designing and optimizing system software, andrew sloss et al. (morgan kaufmann, 2004)

arm reference manuals, infocenter.arm.com/help/topic/com.arm.doc.subset. architecture. reference/index.html#reference

the base operating sytem source code for mac os x,opensource.apple.com(這些代碼中的一部分是與ios共享使用的,是以在試圖确定ios如何實作一些功能的時候很有幫助。)

繼續閱讀