(讀書筆記)解析OS X & iOS操作系統(tǒng):沙盒嚎花、進程、線程

BSD相關特性

OS X由BSD衍生而來呀洲,具有很多BSD特性紊选,包括:POSIX,系統(tǒng)調用道逗,BSD擴展兵罢,BSD強制訪問控制層等。

但OS X還增加了很多復雜的功能滓窍,比如沙盒機制:每個應用程序被孤立起來卖词,實現(xiàn)安全性。

XNU核心是Mach吏夯,但是用戶態(tài)展現(xiàn)出來的主要接口是BSD接口此蜈。OS X和iOS都提供了一組POSIX兼容的系統(tǒng)調用。還提供了一些BSD特有的調用噪生。

OS X和iOS安全機制

代碼簽名

在確認軟件的安全性之前裆赵,首先必須對軟件的來源進行真實性驗證。如果一個程序從網上下載的跺嗽,那么該程序是惡意軟件的風險就特別大战授,但是,如果能夠驗證軟件的來源桨嫁,那么風險會大大降低陈醒,同時還可以驗證程序在傳輸過程中是否被篡改。

代碼簽名就是為了實現(xiàn)這個目的瞧甩。蘋果將證書保存在了OS X和iOS的鑰匙鏈中钉跷,使得蘋果才是唯一具有root權限的實體,而且這些系統(tǒng)鑰匙鏈還能導出肚逸。

在OS X中爷辙,代碼簽名是可選的,但是iOS中卻是強制的朦促,如果某個未簽名的程序被嘗試加載膝晾,都會導致這個應用程序進程被內核殺掉。

隔離機制(沙盒化)

應用程序都必須在一個獨立的隔間中運行务冕,隔間就是一個隔離的環(huán)境血当,在該環(huán)境中所有操作都會受到限制。

iOS沙盒的限制:

  • 無法突破程序目錄之外的位置。因此程序無法知曉系統(tǒng)上安裝的其他程序臊旭,因為無法訪問文件系統(tǒng)落恼。
  • 無法訪問系統(tǒng)上的其他進程,即使具有同樣UID的進程离熏。應用程序會認為自己就是系統(tǒng)上唯一的進程佳谦。
  • 無法直接使用任何硬件設備,只能通過蘋果提供的框架滋戳。
  • 無法動態(tài)生成代碼钻蔑。mmap(2)和mprotect(2)系統(tǒng)調用的底層實現(xiàn)被修改,防止任何可寫內存頁面設置為可執(zhí)行的企圖奸鸯。
  • 除了用戶mobile能執(zhí)行的操作的一個子集外咪笑,無法執(zhí)行任何其他操作。應用程序根本不可能有root權限娄涩。

進程和線程

進程是一個正在執(zhí)行的程序的實例窗怒,是UNIX的一個基本概念。該實例可以通過Process ID(PID)來唯一辨別钝满。盡管同一個可執(zhí)行程序可以并發(fā)啟動多個實例兜粘,但每一個實例都有一個不同的PID申窘。進程可以屬于進程組弯蚜。進程組的主要作用是讓用戶可以同時控制多個進程。通常是向一個進程組發(fā)送信號控制這些進程剃法,而不是單獨發(fā)送碎捺。

進程還會將和父進程的親屬關系保存在父進程ID中。父進程可以通過fork創(chuàng)建子進程贷洲,并且預期子進程會消亡收厨。

UNIX進程生命周期:運行,然后在運行結束后返回一個整數优构。子進程返回的整數由父進程手機诵叁。

線程是操作系統(tǒng)操作的基本單元。線程是一組寄存器的狀態(tài)钦椭,一個進程可以存在多個線程拧额。一個進程內的所有線程都共享虛擬內存空間,文件描述符和各種句柄彪腔。進程被抽象成一個或者多個線程的容器保存下來侥锦。

多線程的優(yōu)點:一個線程的狀態(tài)可以獨立于其他線程,當一個線程睡眠時德挣,另一個線程可以被調度到CPU上執(zhí)行恭垦。線程會在可運行、正在運行以及睡眠之間來回切換。

可以通過一個信號番挺,是一個進程停止執(zhí)行唠帝,相當于凍結了進程,同時掛起這個進程所有的線程建芙。

可執(zhí)行文件

進程是特殊文件在內存中加載得到的結果没隘。這種文件必須使用操作系統(tǒng)能夠理解的格式。這樣操作系統(tǒng)才能解析這個文件禁荸,建立所需要的依賴右蒲,初始化運行時環(huán)境開始執(zhí)行。

chmod+x命令將文件標記為可執(zhí)行文件赶熟,但其實并不能保證能執(zhí)行瑰妄,因為只是告訴系統(tǒng)這個文件讀入內存,然后尋找一個頭簽名映砖,據此確定精確的可執(zhí)行格式间坐。這個頭簽名稱為魔數magic,這是預先定義好的邑退,而且通常是任意選擇的一個常量值竹宋。魔數可以判斷二進制格式,如果是支持的格式地技,則會調用正確的加載器函數蜈七。

#!:UNIX腳本和一些解釋器使用的格式,主要用于shell腳本莫矗。內核尋找#!后面跟著的字符串飒硅,然后執(zhí)行這個字符串表示的命令。

程序崩潰

當進程異常終止時作谚,自動觸發(fā)Crash Reporter三娩,生成詳細的崩潰日志。該機制在進程消亡前進行快速簡單的分析妹懒,并且在崩潰日志中記錄重要的內容雀监。

iOS和OS X中,Crash Reporter日志都保存在用戶的library/logs/carshreporter目錄或系統(tǒng)的對應目錄下眨唬。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末会前,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子单绑,更是在濱河造成了極大的恐慌回官,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂橙,死亡現(xiàn)場離奇詭異歉提,居然都是意外死亡笛坦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門苔巨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來版扩,“玉大人,你說我怎么就攤上這事侄泽〗嘎” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵悼尾,是天一觀的道長柿扣。 經常有香客問我,道長闺魏,這世上最難降的妖魔是什么未状? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮析桥,結果婚禮上司草,老公的妹妹穿的比我還像新娘。我一直安慰自己泡仗,他們只是感情好埋虹,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娩怎,像睡著了一般搔课。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峦树,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天辣辫,我揣著相機與錄音旦事,去河邊找鬼魁巩。 笑死,一個胖子當著我的面吹牛姐浮,可吹牛的內容都是我干的谷遂。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼卖鲤,長吁一口氣:“原來是場噩夢啊……” “哼肾扰!你這毒婦竟也來了?” 一聲冷哼從身側響起蛋逾,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤集晚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后区匣,有當地人在樹林里發(fā)現(xiàn)了一具尸體偷拔,經...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莲绰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欺旧。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛤签,靈堂內的尸體忽然破棺而出辞友,到底是詐尸還是另有隱情,我是刑警寧澤震肮,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布称龙,位于F島的核電站,受9級特大地震影響戳晌,放射性物質發(fā)生泄漏茵瀑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一躬厌、第九天 我趴在偏房一處隱蔽的房頂上張望马昨。 院中可真熱鬧,春花似錦扛施、人聲如沸鸿捧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匙奴。三九已至,卻和暖如春妄荔,著一層夾襖步出監(jiān)牢的瞬間泼菌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工啦租, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哗伯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓篷角,卻偏偏與公主長得像焊刹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恳蹲,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內容