本書對Linux內(nèi)核安全子系統(tǒng)做了系統(tǒng)而深入的分析,內(nèi)容包括Linux內(nèi)核的自主訪問控制、強(qiáng)制訪問控制、完整性保護(hù)、審計(jì)日志、密鑰管理與密鑰使用等。本書的內(nèi)容填補(bǔ)了國內(nèi)外關(guān)于Linux內(nèi)核安全的一個(gè)空白。本書值得每一個(gè)想要深入了解Linux安全的人參考,值得計(jì)算機(jī)安全專業(yè)的學(xué)生和計(jì)算機(jī)安全領(lǐng)域的從業(yè)人員閱讀,也可作為計(jì)算機(jī)安全高級課程的教材。
適讀人群 :計(jì)算機(jī)安全人員
本書作者是華為公司安全研究人員。本書可能是國內(nèi)外較早系統(tǒng)、全面地介紹Linux內(nèi)核安全的書。全書采用源碼剖析與用戶態(tài)工具使用相結(jié)合的方式,對Linux內(nèi)核安全模塊進(jìn)行了講解,既避免了冗長的代碼羅列,也消除了讀者的“隔靴搔癢”之感。在此,向計(jì)算機(jī)安全人員特別是手機(jī)安全人員強(qiáng)烈推薦。
在大多數(shù)人眼中,內(nèi)核是神秘的,安全是說不清的,內(nèi)核安全則是子虛烏有的。如果說內(nèi)核是一座險(xiǎn)峻的高山,內(nèi)核安全則是隱藏在深山中的蛟龍。
即使對內(nèi)核開發(fā)人員,內(nèi)核安全也是陌生的。Linux的創(chuàng)始人,Linux社區(qū)的“仁慈的獨(dú)裁者”Linus Torvalds就曾說他不懂安全。這主要有三方面原因,其一,內(nèi)核安全涉及領(lǐng)域太多了,Linux是龐大的,很少有人能對所有領(lǐng)域都了解;其二,如Linus Torvalds所說,安全是“軟”科學(xué),沒有一個(gè)簡單的量化的指標(biāo)去衡量安全,開發(fā)人員自然是重視功能勝于重視安全;其三,文人相輕,SELinux的開發(fā)者之一Dan Walsh聲稱自己不懂AppArmor,Smack的負(fù)責(zé)人Casey Schaufler是批判SELinux的馬前卒,他們不是不能懂,是不想懂。
截止至本書成稿時(shí),國內(nèi)和國外還沒有一本系統(tǒng)全面地介紹Linux內(nèi)核安全的書。
屈指算來我從事內(nèi)核安全相關(guān)工作已是第八個(gè)年頭。當(dāng)年的一個(gè)面試邀請電話讓我在一個(gè)仲春的清晨伴著蒙蒙細(xì)雨步入了Linux內(nèi)核安全領(lǐng)域。幾年后,就在我對內(nèi)核安全有了一點(diǎn)點(diǎn)理解,并沾沾自喜時(shí),我親耳聆聽Linux內(nèi)核安全領(lǐng)域負(fù)責(zé)人James Morris的一番演。我突然發(fā)現(xiàn)他講的大部分東西我都聽不懂。好吧,不懂可以學(xué)。本書的提綱可以說是James Morris提供的。我將他演講中提到的內(nèi)核安全相關(guān)內(nèi)容研究了一遍,呈現(xiàn)在這里。
本書的內(nèi)容有相當(dāng)一部分出自本人對代碼的分析。內(nèi)核安全模塊中有相當(dāng)一部分是缺少文檔的,讀代碼是了解它們最直接,最準(zhǔn)確的方式。如何呈現(xiàn)本書呢?有兩種傳統(tǒng)的方式,一種是大量地羅列源代碼,讓后陳述對代碼的分析。代碼面前,了無秘密,這不假。但是這種方式往往失之于瑣碎,讓讀者只見樹木不見森林。另一種方式是詳列如何使用用戶態(tài)工具,這雖然能讓讀者快速上手,但對于了解內(nèi)核安全未免有些隔靴搔癢。本書采用的方式是分析其原理,指出其背后的邏輯。當(dāng)我試圖了解一個(gè)內(nèi)核模塊時(shí),我想的問題是,它要干什么?它為什么要這么做?當(dāng)這兩個(gè)問題有了答案,我發(fā)現(xiàn)內(nèi)核安全的開發(fā)者,和你我一樣,也是程序員,也會犯錯(cuò)誤。
本書作者學(xué)識粗淺,經(jīng)驗(yàn)不足,書中文字與邏輯上的錯(cuò)誤在所難免,還望各位讀者海涵。
查看全部↓
前言
第1章 導(dǎo)言1
1.1 什么是安全1
1.2 計(jì)算機(jī)系統(tǒng)安全的歷史1
1.3 計(jì)算機(jī)系統(tǒng)安全的現(xiàn)狀2
1.4 Linux內(nèi)核安全概貌3
第一部分 自主訪問控制
第2章 主體標(biāo)記與進(jìn)程憑證5
2.1 進(jìn)程憑證5
2.2 詳述6
2.2.1 uid和gid6
2.2.2 系統(tǒng)調(diào)用7
2.3 proc文件接口9
2.4 參考資料9
習(xí)題9
第3章 客體標(biāo)記與文件屬性10
3.1 文件的標(biāo)記10
3.2 文件屬性10
3.3 系統(tǒng)調(diào)用11
3.4 其他客體12
3.5 其他客體的系統(tǒng)調(diào)用14
習(xí)題15
第4章 操作與操作許可16
4.1 操作16
4.2 操作許可與操作分類16
4.3 允許位18
4.4 設(shè)置位19
4.4.1 文件19
4.4.2 目錄19
4.5 其他操作的許可20
4.6 系統(tǒng)調(diào)用20
習(xí)題20
第5章 訪問控制列表21
5.1 簡介21
5.2 擴(kuò)展屬性21
5.3 結(jié)構(gòu)21
5.4 操作許可23
5.5 兩種ACL23
5.6 與允許位的關(guān)系23
5.7 系統(tǒng)調(diào)用23
5.8 參考資料24
習(xí)題24
第6章 能力(capabilities)25
6.1 什么是能力25
6.2 能力列舉25
6.2.1 文件26
6.2.2 進(jìn)程27
6.2.3 網(wǎng)絡(luò)28
6.2.4 ipc28
6.2.5 系統(tǒng)28
6.2.6 設(shè)備28
6.2.7 審計(jì)28
6.2.8 強(qiáng)制訪問控制(MAC)28
6.3 UNIX的特權(quán)機(jī)制29
6.4 Linux的能力集合和能力機(jī)制29
6.4.1 能力集合29
6.4.2 能力機(jī)制30
6.5 向后兼容32
6.6 打破向后兼容33
6.7 總結(jié)34
6.8 參考資料34
習(xí)題34
第二部分 強(qiáng)制訪問控制
第7章 SELinux36
7.1 簡介36
7.1.1 歷史36
7.1.2 工作原理36
7.1.3 SELinux眼中的世界39
7.2 機(jī)制39
7.2.1 安全上下文39
7.2.2 客體類別和操作40
7.2.3 安全上下文的生成和變化59
7.3 安全策略62
7.3.1 基本定義63
7.3.2 安全上下文定義68
7.3.3 安全上下文轉(zhuǎn)換72
7.3.4 訪問控制75
7.3.5 訪問控制的限制和條件75
7.4 偽文件系統(tǒng)的含義78
7.5 SELinux相關(guān)的偽文件系統(tǒng)78
7.5.1 selinuxfs78
7.5.2 proc80
7.6 總結(jié)80
7.7 參考資料81
習(xí)題81
第8章 SMACK82
8.1 歷史82
8.2 概述83
8.3 工作機(jī)制84
8.3.1 操作許可84
8.3.2 類型轉(zhuǎn)換84
8.4 擴(kuò)展屬性86
8.5 偽文件系統(tǒng)86
8.5.1 策略相關(guān)文件87
8.5.2 網(wǎng)絡(luò)標(biāo)簽相關(guān)文件89
8.5.3 其他文件90
8.6 網(wǎng)絡(luò)標(biāo)簽91
8.7 總結(jié)91
8.8 參考資料91
習(xí)題91
第9章 Tomoyo92
9.1 簡介92
9.1.1 基于路徑的安全92
9.1.2 粒度管理93
9.1.3 用戶態(tài)工具93
9.1.4 三個(gè)分支93
9.2 機(jī)制93
9.2.1 操作許可94
9.2.2 類型和域94
9.3 策略95
9.3.1 域策略95
9.3.2 異常96
9.3.3 輪廓99
9.4 偽文件系統(tǒng)102
9.5 總結(jié)103
9.6 參考資料103
習(xí)題103
第10章 AppArmor104
10.1 簡介104
10.2 機(jī)制104
10.2.1 操作許可104
10.2.2 域間轉(zhuǎn)換107
10.3 策略語言108
10.4 模式110
10.5 偽文件系統(tǒng)110
10.5.1 proc文件系統(tǒng)110
10.5.2 sys文件系統(tǒng)111
10.5.3 securityfs文件系統(tǒng)112
10.6 總結(jié)113
10.7 參考資料113
習(xí)題113
第11章 Yama114
11.1 簡介114
11.2 機(jī)制114
11.3 偽文件系統(tǒng)116
11.4 嵌套使用116
11.5 總結(jié)117
11.6 參考資料117
習(xí)題117
第三部分 完整性保護(hù)
第12章 IMA/EVM119
12.1 簡介119
12.1.1 可信計(jì)算119
12.1.2 完整性120
12.1.3 哈希121
12.1.4 IMA/EVM121
12.2 架構(gòu)122
12.2.1 鉤子122
12.2.2 策略122
12.2.3 擴(kuò)展屬性123
12.2.4 密鑰123
12.2.5 用戶態(tài)工具124
12.3 偽文件系統(tǒng)126
12.4 命令行參數(shù)127
12.5 總結(jié)128
12.6 參考資料128
習(xí)題128
第13章 dm-verity129
13.1 Device Mapper129
13.2 dm-verity簡介130
13.3 代碼分析131
13.3.1 概況131
13.3.2 映射函數(shù)(verity_map)132
13.3.3 構(gòu)造函數(shù)(verity_ctr)137
13.4 總結(jié)138
13.5 參考資料138
習(xí)題138
第四部分 審計(jì)和日志
第14章 審計(jì)(audit)140
14.1 簡介140
14.1.1 審計(jì)和日志140
14.1.2 概貌140
14.2 架構(gòu)141
14.2.1 四個(gè)消息來源141
14.2.2 規(guī)則列表147
14.2.3 對文件的審計(jì)150
14.3 接口153
14.4 規(guī)則155
14.5 總結(jié)157
14.6 參考資料157
第15章 syslog158
15.1 簡介158
15.2 日志緩沖158
15.3 讀取日志159
15.4 netconsole160
15.5 參考資料160
習(xí)題160
第五部分 加密
第16章 密鑰管理162
16.1 簡介162
16.2 架構(gòu)162
16.2.1 數(shù)據(jù)結(jié)構(gòu)162
16.2.2 生命周期164
16.2.3 類型168
16.2.4 系統(tǒng)調(diào)用171
16.2.5 訪問類型174
16.3 偽文件系統(tǒng)175
16.4 總結(jié)175
16.5 參考資料175
第17章 eCryptfs176
17.1 簡介176
17.2 文件格式176
17.3 掛載參數(shù)179
17.4 設(shè)備文件180
17.5 用戶態(tài)工具180
17.6 總結(jié)185
17.7 參考資料185
第18章 dm-crypt186
18.1 簡介186
18.2 架構(gòu)186
18.2.1 兩個(gè)隊(duì)列(queue)186
18.2.2 五個(gè)參數(shù)189
18.3 總結(jié)193
18.4 參考資料193
第19章 LUKS194
19.1 簡介194
19.2 布局194
19.3 操作195
19.4 總結(jié)196
19.5 參考資料196
第六部分 其
查看全部↓