虛擬內存與ASLR

一片部、虛擬內存

在早期的操作系統(tǒng)中沒有虛擬內存的概念,叫做物理地址。大概如下:

image.png

這個時候會將整個應用程序加載到內存肋拔,當內存不夠用的時候需要關閉應用程序才能打開新的應用程序。
隨著軟件的發(fā)展速度遠快于硬件呀酸,就存在一個問題 內存不夠用凉蜂。還有一個問題是如果用物理內存還有 安全問題(可以跨進程訪問別的應用程序數(shù)據(jù))。

當然我們現(xiàn)在都是虛擬內存性誉,那么怎么驗證呢窿吩?
很簡單,我們用Xcode跑兩個工程错览。在一個工程中找到一個內存地址纫雁,在另外一個工程中修改,然后再回到第一個工程看對應內存地址數(shù)據(jù)有沒有變化就能驗證了倾哺。

這個時候出現(xiàn)了內存映射表(頁表轧邪,iOS中地址空間4G,實際不會讓你用完4G):

image.png

內存映射表將應用程序和物理內存完全阻隔開羞海,應用程序訪問的虛擬內存相同忌愚,但是映射到物理內存是不同的地址。

之前的物理內存訪問存在兩個問題:

  1. 安全問題:能訪問別人的進程扣猫。
  2. 內存不夠用的問題。

通過頁表可以解決安全問題翘地,那么內存不夠用是怎么解決的呢申尤?
早期物理內存是將整個應用程序全部加載到內存癌幕,但是用戶并不會用到軟件的全部功能,很大一部分數(shù)據(jù)是沒有用到的昧穿。

如果內存映射表以字節(jié)為單位那么表會非常大勺远。這個時候就出現(xiàn)了內存分頁管理iOS一頁16kb)。

image.png

應用程序讀取第一頁的數(shù)據(jù)时鸵,虛擬頁表發(fā)現(xiàn)物理內存中沒有數(shù)據(jù)則去加載數(shù)據(jù)(這個時候觸發(fā)中斷pagefault)胶逢。如果已經加載則通過地址翻譯(MMU)去找物理內存。這個時候物理內存是隨機分配的(解決了安全問題)饰潜,并且應用程序只是用到的部分加載(內存不夠用解決)初坠。如果物理內存滿了則數(shù)據(jù)會被加載到最不活躍的地址去覆蓋數(shù)據(jù)。

Apple在物理內存中分配了一塊空間(需要申請)彭雾,不在特殊情況不會被覆蓋碟刺。這樣就實現(xiàn)了保活薯酝。比如音樂播放等半沽。

那么加了頁表需要查找物理內存會不會影響效率呢?

頁表查找物理內存是通過CPU上的硬件MMU(地址翻譯)完成的吴菠,并且CPU上有高速緩存對查找結果進行緩存者填。真正影響效率的地方是缺頁中斷(pagefault),不過這個用戶也感知不到做葵。

這也就是二進制重排的原理占哟,減少缺頁中斷。

二蜂挪、ASLR

ASLRAddress space layout randomization)是一種針對緩沖區(qū)溢出的安全保護技術重挑,通過對堆、棧棠涮、共享庫映射等線性區(qū)布局的隨機化谬哀,通過增加攻擊者預測目的地址的難度,防止攻擊者直接定位攻擊代碼位置严肪,達到阻止溢出攻擊的目的史煎。

目前大部分主流的操作系統(tǒng)已經實現(xiàn)了ASLR

  • Linux
    Linux已在內核版本2.6.12中添加ASLR驳糯。
  • Windows
    Windows Server 2008篇梭,Windows 7Windows Vista酝枢,Windows Server 2008 R2默認情況下啟用ASLR恬偷,但它僅適用于動態(tài)鏈接庫和可執(zhí)行文件。
  • Mac OS X
    AppleMac OS X Leopard10.5(2007年10月發(fā)行)中某些庫導入了隨機地址偏移帘睦,但其實現(xiàn)并沒有提供ASLR所定義的完整保護能力袍患。而Mac OS X Lion10.7則對所有的應用程序均提供了ASLR支持坦康。Apple宣稱為應用程序改善了這項技術的支持,能讓3264位的應用程序避開更多此類攻擊诡延。從OS X Mountain Lion10.8開始滞欠,核心及核心擴充(kext)與zones在系統(tǒng)啟動時也會隨機配置。
  • iOS(iPhone, iPod touch, iPad)
    AppleiOS4.3內導入了ASLR肆良。
  • Android
    Android 4.0提供地址空間配置隨機加載(ASLR)筛璧,以幫助保護系統(tǒng)和第三方應用程序免受由于內存管理問題的攻擊,在Android 4.1中加入地址無關代碼(position-independent code)的支持惹恃。

以前應用程序直接加載到物理內存中每次地址是隨機的夭谤。虛擬內存每次地址都是從0開始的。那么虛擬內存就固定了座舍,直接注入惡意程序就能直接訪問了沮翔。這個時候就出現(xiàn)了ASLR。模擬了物理內存每次隨機分配曲秉。

image.png

在上圖中
文件偏移地址file offset0x1a70采蚀。
虛擬內存地址VM Address0x100001a70
運行虛擬內存地址:ASLR + VM Address承二。

總結

  • 虛擬內存
    • 所有程序的內存訪問都是通過虛擬地址訪問的榆鼠。
    • 每個應用程序有一張頁表,虛擬地址和物理地址的映射表亥鸠。
    • 數(shù)據(jù)加載以頁為單位加載妆够。
  • ASLR
    • 一種保護技術,在每次加載應用的時候系統(tǒng)給一個隨機的偏移值负蚊。所以需要rebase神妹。
    • 定位方法地址,下內存斷點
      • 1家妆、LLDB:image list 找到MachO首地址鸵荠。
      • 2、找到方法在文件中的虛擬地址伤极、文件中的偏移地址蛹找。
      • 3、獲取到方法的虛擬地址
        • 3.1哨坪、MachO首地址 + 文件中的偏移地址
        • 3.2庸疾、MachO中的虛擬地址 + ASLR

ASLR

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市当编,隨后出現(xiàn)的幾起案子届慈,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金顿,死亡現(xiàn)場離奇詭異词渤,居然都是意外死亡,警方通過查閱死者的電腦和手機串绩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芜壁,“玉大人礁凡,你說我怎么就攤上這事』弁” “怎么了顷牌?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長塞淹。 經常有香客問我窟蓝,道長,這世上最難降的妖魔是什么饱普? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任运挫,我火速辦了婚禮,結果婚禮上套耕,老公的妹妹穿的比我還像新娘谁帕。我一直安慰自己,他們只是感情好冯袍,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布匈挖。 她就那樣靜靜地躺著,像睡著了一般康愤。 火紅的嫁衣襯著肌膚如雪儡循。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天征冷,我揣著相機與錄音择膝,去河邊找鬼。 笑死资盅,一個胖子當著我的面吹牛调榄,可吹牛的內容都是我干的。 我是一名探鬼主播呵扛,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼每庆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了今穿?” 一聲冷哼從身側響起缤灵,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腮出,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帖鸦,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年胚嘲,在試婚紗的時候發(fā)現(xiàn)自己被綠了作儿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡馋劈,死狀恐怖攻锰,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情妓雾,我是刑警寧澤娶吞,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站械姻,受9級特大地震影響妒蛇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜楷拳,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一绣夺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欢揖,春花似錦乐导、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至产上,卻和暖如春棵磷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晋涣。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工仪媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谢鹊。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓算吩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佃扼。 傳聞我的和親對象是個殘疾皇子偎巢,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容