關(guān)于我們
書單推薦
新書推薦
|
Linux系統(tǒng)安全基礎(chǔ):二進(jìn)制代碼安全性分析基礎(chǔ)與實(shí)踐 讀者對(duì)象:本書適合具有一定Linux 系統(tǒng)知識(shí),以及C 語言和匯編語言編程基礎(chǔ)的信息安全專業(yè)人員閱讀。本書可作為高等院校相關(guān)專業(yè)的教材或教學(xué)輔導(dǎo)書,對(duì)參與CTF 的讀者也有一定的參考價(jià)值。
本書是一本介紹二進(jìn)制分析相關(guān)工具及其應(yīng)用的圖書,共分為五大部分,內(nèi)容涵蓋了ELF 二進(jìn)制代碼的生成、Linux 環(huán)境下分析二進(jìn)制文件的相關(guān)工具、靜態(tài)的二進(jìn)制代碼分析、動(dòng)態(tài)的二進(jìn)制代碼分析、Intel Pin 的架構(gòu)及工具的制作、污點(diǎn)分析技術(shù)及實(shí)現(xiàn)、約束求解原理與應(yīng)用、符號(hào)執(zhí)行技術(shù)及應(yīng)用、模糊測(cè)試技術(shù)及實(shí)現(xiàn)、常見的系統(tǒng)攻擊及系統(tǒng)對(duì)軟件的常見保護(hù)措施、常見的軟件漏洞的檢測(cè)等。
彭雙何,女,副教授。自2008年加入北京交通大學(xué)以來,一直從事本科教育與教學(xué)工作,多次獲評(píng)本科生優(yōu)秀學(xué)業(yè)導(dǎo)師和優(yōu)秀班主任。教學(xué)上,課堂教學(xué)效果好,所在課堂"C語言程序設(shè)計(jì)”獲評(píng)第一批校金課。2014年首次獲評(píng)校優(yōu)秀主講教師,該榮譽(yù)一直保持到現(xiàn)在。2021年獲評(píng)計(jì)算機(jī)學(xué)院師德師風(fēng)先進(jìn)個(gè)人"傳道授業(yè)”獎(jiǎng)?蒲猩希e極指導(dǎo)本科生參加各種科研活動(dòng),2018年以來發(fā)表科研論文三篇,其中SCI檢索一篇;指導(dǎo)本科生參加大創(chuàng)項(xiàng)目獲評(píng)國(guó)家級(jí)三項(xiàng)和北京市級(jí)五項(xiàng),指導(dǎo)本科生參加國(guó)家級(jí)競(jìng)賽獲一等獎(jiǎng)一項(xiàng)、二等獎(jiǎng)一項(xiàng)、三等獎(jiǎng)一項(xiàng);北京市級(jí)競(jìng)賽獲三等獎(jiǎng)四項(xiàng)。
第1 章概述................................ ........................................1
1.1 Linux 系統(tǒng)安全........................ .......................................1 1.2 代碼安全.........................·..........................................1 1.3 什么是二進(jìn)制代碼安全性分析......................................................2 1.4 二進(jìn)制代碼安全性分析的重要性...................................................2 1.5 二進(jìn)制代碼安全性分析的主要步驟.................................................2 1.6 軟件錯(cuò)誤、漏洞以及利用...........................................................2 1.6.1 軟件錯(cuò)誤.....................................................................2 1.6.2 軟件漏洞.....................................................................3 1.6.3 漏洞利用.....................................................................3 1.6.4 二進(jìn)制代碼利用.............................................................4 第2 章二進(jìn)制代碼生成...............................................................5 2.1 二進(jìn)制代碼的生成過程.............................................................5 2.1.1 編譯預(yù)處理階段.............................................................6 2.1.2 編譯階段.....................................................................6 2.1.3 匯編階段.....................................................................6 2.1.4 鏈接階段.....................................................................8 2.1.5 gcc 的常用選項(xiàng)..............................................................11 2.1.6 ld 的常用選項(xiàng)...............................................................17 2.1.7 gcc 的常用環(huán)境變量.........................................................21 2.1.8 二進(jìn)制代碼的生成舉例......................................................21 2.2 ELF 文件格式.................·...........................................26 2.2.1 ELF文件的兩種視圖.......................................................27 2.2.2 ELF 文件的頭...............................................................27 2.2.3 可執(zhí)行文件的主要節(jié)........................................................29 2.2.4 位置無關(guān)代碼................................................................33 2.2.5 ELF 文件的頭...............................................................42 2.2.6 ELF 文件的主要段..........................................................43 2.3 程序的裝載與調(diào)度執(zhí)行.............................................................47 2.3.1 可執(zhí)行文件的裝載...........................................................47 2.3.2 可執(zhí)行文件調(diào)度運(yùn)行的過程................................................48 2.3.3 進(jìn)程的虛擬地址空間及其訪問..............................................49 第3 章二進(jìn)制代碼信息的收集.......................................................54 3.1 nm ...........................................................................54 3.2 ldd ..........................·........................................54 3.3 strings ..........................·.............................................55 3.4 ELF 文件分析工具LIEF ...........................................................55 3.4.1 安裝..........................................................................55 3.4.2 基于LIEF 對(duì).got.plt 表的攻擊舉例........................................55 3.4.3 基于LIEF 將可執(zhí)行文件轉(zhuǎn)變?yōu)楣蚕韼煳募?..............................59 3.5 ps ............................. .............................................61 3.6 strace ....................................................................61 3.7 ltrace ....................................................................62 3.8 ROPgadget..........................·..................................62 3.9 objdump...............................................................63 3.10 readelf..............................................................65 3.11 GDB ...................................................................66 3.11.1 GDB 的初始化腳本文件...................................................66 3.11.2 GDB 的常用命令..........................................................66 3.11.3 GDB 的常用命令示例.....................................................67 3.11.4 GDB 命令的運(yùn)行..........................................................79 3.11.5 GDB 命令的擴(kuò)充..........................................................82 3.11.6 PEDA 基本使用...........................................................92 3.12 Pwntools ...........................................................97 3.12.1 Pwntools 的安裝...........................................................97 3.12.2 通過上下文設(shè)置目標(biāo)平臺(tái)..................................................98 3.12.3 本地進(jìn)程對(duì)象的創(chuàng)建.......................................................98 3.12.4 遠(yuǎn)程進(jìn)程對(duì)象的創(chuàng)建.......................................................99 3.12.5 ELF 模塊...................................................................99 3.12.6 search 方法................................................................·100 3.12.7 cyclic 命令的功能.........................................................·101 3.12.8 核心文件..................................................................·102 3.12.9 數(shù)據(jù)轉(zhuǎn)換..................................................................·104 3.12.10 struct 模塊...............................................................·105 3.12.11 shellcraft 模塊...........................................................·106 3.12.12 ROP 模塊................................................................·108 3.12.13 GDB 模塊................................................................·112 3.12.14 DynELF 模塊............................................................·113 3.12.15 基于標(biāo)準(zhǔn)輸入/輸出的數(shù)據(jù)交互.........................................·116 3.12.16 基于命名管道的數(shù)據(jù)交互...............................................·118 3.12.17 腳本文件和被測(cè)目標(biāo)程序的交互........................................·125 3.12.18 基于Python 腳本文件的Pwntools 應(yīng)用舉例..........................·125 3.13 LibcSearcher ...........................................................·127 第4 章靜態(tài)二進(jìn)制代碼分析.........................................................·130 4.1 基于IDAPro 的靜態(tài)分析..........................................................·130 4.1.1 IDC 腳本文件..............................................................·130 4.1.2 IDAPython 腳本文件......................................................·138 4.1.3 IDAPython 腳本文件示例.................................................·140 4.1.4 IDAPro 插件的編寫........................................................·142 4.2 基于Radare2 的靜態(tài)分析.........................................................·148 4.2.1 r2 的常用命令..............................................................·148 4.2.2 r2 常用命令示例...........................................................·150 4.2.3 r2 對(duì)JSON 格式數(shù)據(jù)的處理..............................................·156 4.2.4 基于r2pipe 的腳本文件編寫..............................................·159 4.2.5 基于r2pipe 的腳本文件執(zhí)行..............................................·163 第5 章二進(jìn)制代碼脆弱性評(píng)估......................................................·164 5.1 常見二進(jìn)制代碼脆弱性............................................................·164 5.1.1 棧溢出的原理...............................................................·165 5.1.2 堆溢出的原理...............................................................·165 5.2 基于系統(tǒng)工具對(duì)代碼脆弱性的評(píng)估................................................·184 5.2.1 基于Clang Static Analyzer 的安全檢測(cè)..................................·184 5.2.2 Linux 系統(tǒng)下堆安全的增強(qiáng)措施...........................................·187 5.3 基于Intel Pin 的代碼脆弱性評(píng)估.................................................·192 5.3.1 插樁模式....................................................................·193 5.3.2 插樁粒度....................................................................·202 5.3.3 Intel Pintools 的編寫......................................................·204 5.3.4 分析代碼的過濾............................................................·215 5.3.5 Pintools 的生成............................................................·220 5.3.6 Pintools 的測(cè)試............................................................·224 5.3.7 Pintools 應(yīng)用示例:緩沖區(qū)溢出的檢測(cè)...................................·225 5.4 基于符號(hào)執(zhí)行的代碼脆弱性評(píng)估..................................................·234 5.4.1 符號(hào)執(zhí)行的原理............................................................·234 5.4.2 符號(hào)執(zhí)行的優(yōu)、缺點(diǎn).......................................................·239 5.4.3 基于Angr 的二進(jìn)制代碼分析.............................................·239 5.5 基于污點(diǎn)分析的代碼脆弱性評(píng)估..................................................·281 5.5.1 污點(diǎn)分析原理...............................................................·282 5.5.2 污點(diǎn)分析的分類............................................................·283 5.5.3 污點(diǎn)分析相關(guān)概念..........................................................·284 5.5.4 基于Clang 靜態(tài)分析儀的污點(diǎn)分析應(yīng)用..................................·286 5.5.5 基于Pin 的動(dòng)態(tài)污點(diǎn)分析..................................................·287 5.6 基于模糊測(cè)試的代碼脆弱性評(píng)估..................................................·297 5.6.1 模糊測(cè)試的方式............................................................·298 5.6.2 內(nèi)存模糊測(cè)試...............................................................·299 5.6.3 libFuzzer....................................................................·313 第6 章二進(jìn)制代碼漏洞利用.........................................................·320 6.1 二進(jìn)制代碼加固技術(shù)及其gcc 編譯選項(xiàng)...........................................·320 6.1.1 二進(jìn)制代碼保護(hù)措施的查看...............................................·321 6.1.2 去掉可執(zhí)行文件中的符號(hào)的方法..........................................·322 6.1.3 Linux 中的NX 機(jī)制.......................................................·322 6.1.4 Canary 棧保護(hù).............................................................·323 6.1.5 RELRO 機(jī)制...............................................................·327 6.1.6 地址空間布局隨機(jī)化.......................................................·329 6.1.7 PIE 保護(hù)機(jī)制..............................................................·333 6.1.8 繞過PIE 保護(hù)機(jī)制的方法.................................................·335 6.1.9 RPATH 和RUNPATH ....................................................·341 6.1.10 RPATH 存在的安全問題.................................................·342 6.1.11 FORTIFY 保護(hù)機(jī)制......................................................·343 6.1.12 ASCII-Armor 地址映射保護(hù)機(jī)制........................................·350 6.1.13 二進(jìn)制代碼保護(hù)技術(shù)比較.................................................·352 6.2 緩沖區(qū)溢出漏洞的利用............................................................·353 6.2.1 ret2shellcode ...............................................................·366 6.2.2 ret2Libc 攻擊...............................................................·383 6.2.3 ret2plt ......................................................................·391 6.2.4 .got 表覆蓋技術(shù)............................................................·402 6.2.5 ROP 攻擊..................................................................·410 6.2.6 被測(cè)目標(biāo)程序的代碼被執(zhí)行多次的多階段攻擊...........................·438 6.2.7 被測(cè)目標(biāo)程序的代碼被執(zhí)行一次的多階段攻擊...........................·455 6.3 基于Angr 的緩沖區(qū)溢出漏洞自動(dòng)利用...........................................·464 6.3.1 任意讀......................................................................·464 6.3.2 任意寫......................................................................·468 6.3.3 任意跳轉(zhuǎn)....................................................................·475 附錄A 數(shù)據(jù)對(duì)齊問題...........................·.................................·479 附錄B 函數(shù)調(diào)用約定..............................................................·485 附錄C 棧幀原理................................................................·497 附錄D 32 位系統(tǒng)與64 位系統(tǒng)中程序的區(qū)別....................................·507 附錄E 共享庫鏈接的路徑問題.......................................................·510 附錄F 在多模塊中使用ld 手動(dòng)鏈接生成可執(zhí)行文件...........................·514 附錄G 在C++ 程序中調(diào)用C 函數(shù)的問題......................................·518 附錄H Linux 死機(jī)的處理............................................................·522 附錄I Python 文件默認(rèn)的開頭注釋格式........................................·523
你還可能感興趣
我要評(píng)論
|