欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于二進制改寫和動態(tài)隨機化的軟件安全增強方法_2

文檔序號:9579544閱讀:來源:國知局
態(tài)隨機化模塊;
[0031] 進一步,其中上述模塊3)的具體步驟如下:
[0032] 模塊3) -1 :根據(jù)模塊2)提供的進程信息為動態(tài)隨機化模塊分配相關(guān)的數(shù)據(jù)結(jié)構(gòu) 并初始化;
[0033] 模塊3) -2:創(chuàng)建進程邏輯頁到邏輯頁映射表;
[0034] 模塊3) -3:創(chuàng)建進程邏輯頁到物理頁映射表;
[0035] 模塊3)-4:為動態(tài)隨機化模塊創(chuàng)建隨機化線程,開始透明的進行周期性隨機化;
[0036] 進一步,其中上述模塊4)的具體步驟如下:
[0037] 模塊4) -1:動態(tài)隨機化線程周期性的被喚醒;
[0038] 模塊4) -2:動態(tài)隨機化線程隨機化模塊3)建立的邏輯頁到邏輯頁映射表;
[0039] 模塊4)_3:動態(tài)隨機化線程根據(jù)邏輯頁到邏輯頁映射表更新相關(guān)的邏輯頁到物 理頁映射表;
[0040] 模塊4) -4:動態(tài)隨機化線程刷新進程相關(guān)的Cache;
[0041] 模塊4)-5:動態(tài)隨機化線程刷新進程相關(guān)的TLB;
[0042] 模塊4) -6:動態(tài)隨機化線程休眠;
[0043] 進一步,其中上述模塊5)的具體步驟如下:
[0044] 模塊5)_1:進程調(diào)用系統(tǒng)調(diào)用,請求邏輯地址重定向服務(wù);
[0045] 模塊5)_2:系統(tǒng)調(diào)用陷入內(nèi)核,將請求傳遞至邏輯地址映射重定向模塊;
[0046] 模塊5) -3:邏輯地址映射重定向模塊檢測查請求的合法性,如請求非法則執(zhí)行模 塊5)-4;如果請求合法則轉(zhuǎn)模塊5)-5;
[0047] 模塊5) -4:檢測到攻擊行為,記錄攻擊信息,終止進程,隨機化結(jié)束;
[0048] 模塊5)_5:邏輯地址映射重定向模塊查詢邏輯頁到邏輯頁映射表,獲取隨機化地 址;
[0049] 模塊5) -6:邏輯地址映射重定向模塊將隨機化地址返回至系統(tǒng)調(diào)用;
[0050] 模塊5)_7:系統(tǒng)調(diào)用修改進程用戶空間棧,進行控制流重定向;
[0051] 進一步,其中上述模塊6)的具體步驟如下:
[0052] 模塊6) -1 :操作系統(tǒng)回收進程隨機化相關(guān)的資源;
[0053] 模塊6)-2 :操作系統(tǒng)回收進程的其它資源;
[0054] 模塊6)_3:輸出進程生命周期中的運行時統(tǒng)計信息;
[0055] 通過采用以上技術(shù)方案,本發(fā)明具有以下優(yōu)點:
[0056] 1.地址空間隨機化的粒度明顯細(xì)化:本發(fā)明使用了頁(4K)級別的隨機化粒度,相 對于傳統(tǒng)的基于段級別的隨機化,其隨機化粒度明顯細(xì)化。
[0057]2.地址空間隨機化的頻率明顯增加:傳統(tǒng)的地址空間隨機化只能在程序加載時 刻進行一次隨機化,之后進程的地址空間布局保持不變,本發(fā)明中的動態(tài)周期性隨機化機 制使進程的地址空間布局在進程的生命周期中被周期性的打亂,對于攻擊者而言,進程地 址空間的布局變得更加不確定,不可預(yù)測。
[0058] 3.地址空間隨機化的隨機化熵顯著增加:本發(fā)明通過細(xì)粒度動態(tài)周期性隨機化, 使得進程地址空間的隨機化熵顯著提高,降低了攻擊者攻擊成功的概率,提高了計算機系 統(tǒng)與軟件的安全性。
【附圖說明】
[0059]圖1為本發(fā)明實施例的基于二進制改寫和動態(tài)隨機化的軟件安全增強方法的原 理圖。
[0060]圖2為本發(fā)明實施例的基于二進制改寫和動態(tài)隨機化的軟件安全增強方法的流 程圖。
[0061] 圖3為圖2中二進制改寫的流程圖。
[0062] 圖4為圖2中可執(zhí)行文件加載的流程圖。
[0063]圖5為圖2中動態(tài)隨機化模塊初始化的流程圖。
[0064] 圖6為圖2中動態(tài)隨機化模塊周期性以頁為粒度隨機化進程地址空間的流程圖。 [0065]圖7為圖2中邏輯地址映射重定向模塊提供邏輯地址重定向服務(wù)的流程圖。
[0066]圖8為圖2中回收資源的流程圖。
[0067]圖9為圖2中邏輯地址映射重定向模塊向進程提供邏輯地址重定向服務(wù)的流圖。【具體實施方式】
[0068] 本發(fā)明方法首先對ELF二進制文件進行重構(gòu),使得重構(gòu)的ELF二進制文件滿足以 頁為粒度進行動態(tài)隨機化的要求;重構(gòu)過的ELF二進制文件運行時,操作系統(tǒng)首先創(chuàng)建進 程地址空間,加載ELF二進制文件并解析ELF文件Header信息,然后根據(jù)ELF-Header提供 的信息將ELF文件代碼段、數(shù)據(jù)段等段映射到進程地址空間,接著操作系統(tǒng)激活動態(tài)隨機 化機制;內(nèi)核中動態(tài)隨機化模塊進行自舉,分配并初始化相關(guān)數(shù)據(jù)結(jié)構(gòu),建立進程邏輯頁到 邏輯頁、邏輯頁到物理頁雙層(Double-Level)映射表;接著動態(tài)隨機化模塊開始周期性以 頁為粒度隨機化進程的地址空間,并刷新進程相關(guān)的TLB和Cache;進程運行時,邏輯地址 映射重定向模塊還以系統(tǒng)調(diào)用的形式向進程提供邏輯地址重定向服務(wù);最后,當(dāng)進程終止 時,操作系統(tǒng)負(fù)責(zé)回收進程隨機化相關(guān)的資源。
[0069] 下面結(jié)合本發(fā)明的相關(guān)說明圖與具體實施例:Intel_x86架構(gòu)和Linux系統(tǒng)上基 于二進制改寫和動態(tài)隨機化的軟件安全增強方法的實現(xiàn)進一步說明。
[0070] 第一步:利用現(xiàn)有成熟的二進制改寫工具將需要動態(tài)隨機化的ELF二進制文件重 構(gòu)為適合在動態(tài)隨機化機制下運行的格式。本發(fā)明中二進制改寫操作主要涉及ELF文件代 碼段中的跳轉(zhuǎn)類指令和頁末指令;跳轉(zhuǎn)指令按需要分為頁內(nèi)跳轉(zhuǎn)指令和頁間跳轉(zhuǎn)指令,改 寫操作將其中的頁間跳轉(zhuǎn)指令替換為特定的系統(tǒng)調(diào)用指令序列,并在頁末指令前插入相應(yīng) 的系統(tǒng)調(diào)用指令序列。其中,一種可行的改寫規(guī)則如下(但不限于這一種改寫規(guī)則):
[0071]
[0072]
[0073] 本具體實施中使用Dyninst工具來進行二進制改寫操作。Dyninst是一個動態(tài)二 進制態(tài)插粧(DynamicBinaryInstrumentation)工具,是Paradyn項目的基礎(chǔ)。Paradyn 項目以DyninstAPI的形式向用戶提供了二進制分析、二進制改寫、二進制優(yōu)化等功能。本 步驟的流程圖見圖3。
[0074] 第二步:Linux系統(tǒng)運行新程序時,首先調(diào)用fork()系統(tǒng)調(diào)用創(chuàng)建子進程;然后新 創(chuàng)建的子進程調(diào)用execveO系統(tǒng)調(diào)用加載ELF文件,倉ij建進程地址空間,解析ELFHeader 并根據(jù)解析結(jié)果將ELF文件中代碼段、數(shù)據(jù)段等段映射到進程地址空間中的連續(xù)線性區(qū) 域,映射通過_ap()系統(tǒng)調(diào)用完成;接著內(nèi)核激活動態(tài)連接器,解析ELF文件中與動態(tài)鏈 接相關(guān)的未解析符號;然后激活動態(tài)隨機化機制;最后將控制流重定向到程序入口(Entry Point)。其中,execveO系統(tǒng)調(diào)用的執(zhí)行過程可以概括為:參數(shù)合法性檢測;資源限制檢 查;打開可執(zhí)行文件;分配并初始化相關(guān)數(shù)據(jù)結(jié)構(gòu)(e.g.mm_struct);創(chuàng)建進程棧;調(diào)用 search_binary_handler()獲取相關(guān)處理函數(shù),對于ELF文件,則調(diào)用load_elf_binary(); load_elf_binary()會完成ELF文件的解析、ELF段和進程地址空間的映射操作,并根據(jù)ELF 頭中的標(biāo)志位確定是否激活動態(tài)隨機化機制。
[0075] 第三步:步驟二激活動態(tài)隨機化機制時,內(nèi)核中關(guān)聯(lián)到特定進程的動態(tài)隨機化模 塊開始自舉初始化。本發(fā)明具體實施例中,內(nèi)核首先分配并初始化動態(tài)隨機化需要的數(shù)據(jù) 結(jié)構(gòu),然后獲取被隨機化進程的標(biāo)識信息、隨機化所涉及的地址范圍等信息,接著內(nèi)核將這 些信息注冊到動態(tài)隨機化模塊的相關(guān)數(shù)據(jù)結(jié)構(gòu)中。結(jié)合Linux系統(tǒng),Linux內(nèi)核首先分配 一個jitalsr_t類型的數(shù)據(jù)結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)包含了進程動態(tài)隨機化所需要的所有核心信 息,具體包括:進程ID、隨機化周期、隨機化地址區(qū)間、邏輯頁到邏輯頁映射表、邏輯頁到物 理頁映射表的地址、同步互斥機制等;然后linux內(nèi)核獲取進程ID信息(進程PID,task_ struct結(jié)構(gòu)體)、隨機化地址區(qū)間信息(由vm_area_struct指定);接著linux內(nèi)核將這 些信息填充到分配的jitaslr_t結(jié)構(gòu)體相關(guān)字段中;最后linux內(nèi)核創(chuàng)建一個內(nèi)核線程,此 內(nèi)核線程用來異步地執(zhí)行進程地址空間隨機化操作。結(jié)構(gòu)體jitaslr_t的定義如下:
[0076] typedefstructjitaslr-1{
[0077]structvm-area-struct*vma;
[0078]ulong-tpag-start;
[0079]ulong-tpag-end;
[0080]structjitaslr-t*next;
[0081] ulong-tpic-offset;
[0082]uint-tpag-cnt;
[0083]pid-ttgid;
[0084]structtask-struct*thread-group-leader;
[0085] #ifdefJITASLR-WITH-MULTI-THREAD
[0086] spinlock-tlck-nrr;
[0087]#endif
[0088]uint_tnrr_pags[JIT_NRR_PAGS_MAX];
[0089]uinttnrr_pags_cnt;
[0090]structrw-semaphoresem-map ;
[0091]jitaslr_pgm
當(dāng)前第2頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
富平县| 长岛县| 固始县| 石嘴山市| 安龙县| 新绛县| 陵川县| 福安市| 新巴尔虎左旗| 伊吾县| 会昌县| 大安市| 原阳县| 连山| 明溪县| 南投市| 金川县| 阿坝县| 石狮市| 山丹县| 乳源| 松潘县| 中宁县| 淮南市| 赤峰市| 永德县| 宁德市| 通城县| 尼木县| 西藏| 金坛市| 定襄县| 唐河县| 乌兰察布市| 柳河县| 沭阳县| 香港 | 江阴市| 旺苍县| 东辽县| 平利县|