前言
我們?cè)谇拔?a style="color: rgb(7, 93, 179);">《APP漏洞掃描器之本地拒絕服務(wù)檢測(cè)詳解》了解到阿里聚安全漏洞掃描器有一項(xiàng)靜態(tài)分析加動(dòng)態(tài)模糊測(cè)試的方法來(lái)檢測(cè)的功能,并詳細(xì)的介紹了它在針對(duì)本地拒絕服務(wù)的檢測(cè)方法。
同時(shí),阿里聚漏洞掃描器有一個(gè)檢測(cè)項(xiàng)叫未使用地址空間隨機(jī)化技術(shù), 該檢測(cè)項(xiàng)會(huì)分析APP中包含的ELF文件判斷它們是否使用了該項(xiàng)技術(shù)。如果APP中存在該項(xiàng)漏洞則會(huì)降低緩沖區(qū)溢出攻擊的門檻。
本文主要介紹該項(xiàng)技術(shù)的原理和掃描器的檢測(cè)方法。由于PIE的實(shí)現(xiàn)細(xì)節(jié)較復(fù)雜,本文只是介紹了大致的原理。想深入了解細(xì)節(jié)的同學(xué)可以參看潘愛民老師的書籍《程序員的自我修養(yǎng)》。
PIE是什么
PIE(position-independent executable)是一種生成地址無(wú)關(guān)可執(zhí)行程序的技術(shù)。如果編譯器在生成可執(zhí)行程序的過(guò)程中使用了PIE,那么當(dāng)可執(zhí)行程序被加載到內(nèi)存中時(shí)其加載地址存在不可預(yù)知性。
PIE還有個(gè)孿生兄弟PIC(position-independent code)。其作用和PIE相同,都是使被編譯后的程序能夠隨機(jī)的加載到某個(gè)內(nèi)存地址。區(qū)別在于PIC是在生成動(dòng)態(tài)鏈接庫(kù)時(shí)使用(Linux中的so),PIE是在生成可執(zhí)行文件時(shí)使用。
PIE的作用
安全性
PIE可以提高緩沖區(qū)溢出攻擊的門檻。它屬于ASLR(Address space layout randomization)的一部分。ASLR要求執(zhí)行程序被加載到內(nèi)存時(shí),它其中的任意部分都是隨機(jī)的。包括
Stack, Heap ,Libs and mmap, Executable, Linker, VDSO。通過(guò)PIE我們能夠?qū)崿F(xiàn)Executable 內(nèi)存隨機(jī)化
節(jié)約內(nèi)存使用空間
除了安全性,地址無(wú)關(guān)代碼還有一個(gè)重要的作用是提高內(nèi)存使用效率。
一個(gè)共享庫(kù)可以同時(shí)被多個(gè)進(jìn)程裝載,如果不是地址無(wú)關(guān)代碼(代碼段中存在絕對(duì)地址引用),每個(gè)進(jìn)程必須結(jié)合其自生的內(nèi)存地址調(diào)用動(dòng)態(tài)鏈接庫(kù)。導(dǎo)致不得不將共享庫(kù)整體拷貝到進(jìn)程中。如果系統(tǒng)中有100個(gè)進(jìn)程調(diào)用這個(gè)庫(kù),就會(huì)有100份該庫(kù)的拷貝在內(nèi)存中,這會(huì)照成極大的空間浪費(fèi)。
相反如果被加載的共享庫(kù)是地址無(wú)關(guān)代碼,100個(gè)進(jìn)程調(diào)用該庫(kù),則該庫(kù)只需要在內(nèi)存中加載一次。這是因?yàn)镻IE將共享庫(kù)中代碼段須要變換的內(nèi)容分離到數(shù)據(jù)段。使得代碼段加載到內(nèi)存時(shí)能做到地址無(wú)關(guān)。多個(gè)進(jìn)程調(diào)用共享庫(kù)時(shí)只需要在自己的進(jìn)程中加載共享庫(kù)的數(shù)據(jù)段,而代碼段則可以共享。
PIE工作原理簡(jiǎn)介
我們先從實(shí)際的例子出發(fā),觀察PIE和NO-PIE在可執(zhí)行程序表現(xiàn)形式上的區(qū)別。管中窺豹探索地址無(wú)關(guān)代碼的實(shí)現(xiàn)原理。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26