Linux系統安全基礎:二進制代碼安全性分析基礎與實踐

Linux系統安全基礎:二進制代碼安全性分析基礎與實踐

《Linux系統安全基礎:二進制代碼安全性分析基礎與實踐》是電子工業出版社出版的圖書,作者是彭雙和。

基本介紹

  • 中文名:Linux系統安全基礎:二進制代碼安全性分析基礎與實踐 
  • 作者:彭雙和
  • 出版時間:2023年7月
  • 出版社:電子工業出版社
  • 頁數:536 頁
  • 字數:854千字
  • ISBN:9787121459702
  • 開本:16 開
內容簡介,圖書目錄,

內容簡介

本書是一本介紹二進制分析相關工具及其套用的圖書,共分為五大部分,內容涵蓋了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

熱門詞條

聯絡我們