求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

LINUX系統安全基礎檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

LINUX系統安全基礎》,副標題:二進制代碼安全性分析基礎與實踐,彭雙和 著,出版社: 電子工業出版社。

電子工業出版社成立於1982年10月,是工業和信息化部直屬的科技與教育出版社,每年出版新書2400餘種,音像和電子出版物400餘種,期刊8種,出版物內容涵蓋了信息科技的各個專業分支以及工業技術、經濟管理、大眾生活、少兒科普[1]等領域,綜合出版能力位居全國出版行業前列[2]

內容簡介

本書是一本介紹二進制分析相關工具及其應用的圖書,共分為五大部分,內容涵蓋了ELF 二進制代碼的生成、Linux 環境下分析二進制文件的相關工具、靜態的二進制代碼分析、動態的二進制代碼分析、Intel Pin 的架構及工具的製作、污點分析技術及實現、約束求解原理與應用、符號執行技術及應用、模糊測試技術及實現、常見的系統攻擊及系統對軟件的常見保護措施、常見的軟件漏洞的檢測等。

目錄

第1 章概述................................ ........................................1

1.1 Linux 系統安全........................ .......................................1

1.2 代碼安全.........................·..........................................1

1.3 什麼是二進制代碼安全性分析......................................................2

1.4 二進制代碼安全性分析的重要性...................................................2

1.5 二進制代碼安全性分析的主要步驟.................................................2

1.6 軟件錯誤、漏洞以及利用...........................................................2

1.6.1 軟件錯誤.....................................................................2

1.6.2 軟件漏洞.....................................................................3

1.6.3 漏洞利用.....................................................................3

1.6.4 二進制代碼利用.............................................................4

第2 章二進制代碼生成...............................................................5

2.1 二進制代碼的生成過程.............................................................5

2.1.1 編譯預處理階段.............................................................6

2.1.2 編譯階段.....................................................................6

2.1.3 匯編階段.....................................................................6

2.1.4 鏈接階段.....................................................................8

2.1.5 gcc 的常用選項..............................................................11

2.1.6 ld 的常用選項...............................................................17

2.1.7 gcc 的常用環境變量.........................................................21

2.1.8 二進制代碼的生成舉例......................................................21

2.2 ELF 文件格式.................·...........................................26

2.2.1 ELF文件的兩種視圖.......................................................27

2.2.2 ELF 文件的頭...............................................................27

2.2.3 可執行文件的主要節........................................................29

2.2.4 位置無關代碼................................................................33

2.2.5 ELF 文件的頭...............................................................42

2.2.6 ELF 文件的主要段..........................................................43

2.3 程序的裝載與調度執行.............................................................47

2.3.1 可執行文件的裝載...........................................................47

2.3.2 可執行文件調度運行的過程................................................48

2.3.3 進程的虛擬地址空間及其訪問..............................................49

第3 章二進制代碼信息的收集.......................................................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 對.got.plt 表的攻擊舉例........................................55

3.4.3 基於LIEF 將可執行文件轉變為共享庫文件...............................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 命令的運行..........................................................79

3.11.5 GDB 命令的擴充..........................................................82

3.11.6 PEDA 基本使用...........................................................92

3.12 Pwntools ...........................................................97

3.12.1 Pwntools 的安裝...........................................................97

3.12.2 通過上下文設置目標平台..................................................98

3.12.3 本地進程對象的創建.......................................................98

3.12.4 遠程進程對象的創建.......................................................99

3.12.5 ELF 模塊...................................................................99

3.12.6 search 方法................................................................·100

3.12.7 cyclic 命令的功能.........................................................·101

3.12.8 核心文件..................................................................·102

3.12.9 數據轉換..................................................................·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 基於標準輸入/輸出的數據交互.........................................·116

3.12.16 基於命名管道的數據交互...............................................·118

3.12.17 腳本文件和被測目標程序的交互........................................·125

3.12.18 基於Python 腳本文件的Pwntools 應用舉例..........................·125

3.13 LibcSearcher ...........................................................·127

第4 章靜態二進制代碼分析.........................................................·130

4.1 基於IDAPro 的靜態分析..........................................................·130

4.1.1 IDC 腳本文件..............................................................·130

4.1.2 IDAPython 腳本文件......................................................·138

4.1.3 IDAPython 腳本文件示例.................................................·140

4.1.4 IDAPro 插件的編寫........................................................·142

4.2 基於Radare2 的靜態分析.........................................................·148

4.2.1 r2 的常用命令..............................................................·148

4.2.2 r2 常用命令示例...........................................................·150

4.2.3 r2 對JSON 格式數據的處理..............................................·156

4.2.4 基於r2pipe 的腳本文件編寫..............................................·159

4.2.5 基於r2pipe 的腳本文件執行..............................................·163

第5 章二進制代碼脆弱性評估......................................................·164

5.1 常見二進制代碼脆弱性............................................................·164

5.1.1 棧溢出的原理...............................................................·165

5.1.2 堆溢出的原理...............................................................·165

5.2 基於系統工具對代碼脆弱性的評估................................................·184

5.2.1 基於Clang Static Analyzer 的安全檢測..................................·184

5.2.2 Linux 系統下堆安全的增強措施...........................................·187

5.3 基於Intel Pin 的代碼脆弱性評估.................................................·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 的測試............................................................·224

5.3.7 Pintools 應用示例:緩衝區溢出的檢測...................................·225

5.4 基於符號執行的代碼脆弱性評估..................................................·234

5.4.1 符號執行的原理............................................................·234

5.4.2 符號執行的優、缺點.......................................................·239

5.4.3 基於Angr 的二進制代碼分析.............................................·239

5.5 基於污點分析的代碼脆弱性評估..................................................·281

5.5.1 污點分析原理...............................................................·282

5.5.2 污點分析的分類............................................................·283

5.5.3 污點分析相關概念..........................................................·284

5.5.4 基於Clang 靜態分析儀的污點分析應用..................................·286

5.5.5 基於Pin 的動態污點分析..................................................·287

5.6 基於模糊測試的代碼脆弱性評估..................................................·297

5.6.1 模糊測試的方式............................................................·298

5.6.2 內存模糊測試...............................................................·299

5.6.3 libFuzzer....................................................................·313

第6 章二進制代碼漏洞利用.........................................................·320

6.1 二進制代碼加固技術及其gcc 編譯選項...........................................·320

6.1.1 二進制代碼保護措施的查看...............................................·321

6.1.2 去掉可執行文件中的符號的方法..........................................·322

6.1.3 Linux 中的NX 機制.......................................................·322

6.1.4 Canary 棧保護.............................................................·323

6.1.5 RELRO 機制...............................................................·327

6.1.6 地址空間布局隨機化.......................................................·329

6.1.7 PIE 保護機制..............................................................·333

6.1.8 繞過PIE 保護機制的方法.................................................·335

6.1.9 RPATH 和RUNPATH ....................................................·341

6.1.10 RPATH 存在的安全問題.................................................·342

6.1.11 FORTIFY 保護機制......................................................·343

6.1.12 ASCII-Armor 地址映射保護機制........................................·350

6.1.13 二進制代碼保護技術比較.................................................·352

6.2 緩衝區溢出漏洞的利用............................................................·353

6.2.1 ret2shellcode ...............................................................·366

6.2.2 ret2Libc 攻擊...............................................................·383

6.2.3 ret2plt ......................................................................·391

6.2.4 .got 表覆蓋技術............................................................·402

6.2.5 ROP 攻擊..................................................................·410

6.2.6 被測目標程序的代碼被執行多次的多階段攻擊...........................·438

6.2.7 被測目標程序的代碼被執行一次的多階段攻擊...........................·455

6.3 基於Angr 的緩衝區溢出漏洞自動利用...........................................·464

6.3.1 任意讀......................................................................·464

6.3.2 任意寫......................................................................·468

6.3.3 任意跳轉....................................................................·475

附錄A 數據對齊問題...........................·.................................·479

附錄B 函數調用約定..............................................................·485

附錄C 棧幀原理................................................................·497

附錄D 32 位系統與64 位系統中程序的區別....................................·507

附錄E 共享庫鏈接的路徑問題.......................................................·510

附錄F 在多模塊中使用ld 手動鏈接生成可執行文件...........................·514

附錄G 在C++ 程序中調用C 函數的問題......................................·518

附錄H Linux 死機的處理............................................................·522

附錄I Python 文件默認的開頭注釋格式........................................·523

參考文獻

  1. 100部科普經典名著,豆瓣,2018-04-26
  2. 關於我們,電子工業出版社