本書介紹軟件安全開發(fā)技術和軟件安全問題的分析防治技術。全書分五部分,共13章。部分為軟件安全引論。第二部分為軟件安全開發(fā),講解軟件安全開發(fā)周期、分析與設計、編程與測試。第三部分為軟件漏洞問題及防治,包括漏洞的概述、機理和防治技術。第四部分為惡意軟件問題及防治,講解惡意代碼的基本知識、機理與防治技術。第五部分為軟件侵權問題及權益保護,講述軟件知識產(chǎn)權相關法律與侵權問題、軟件版權保護和防破解技術。 本書可作為高等院校網(wǎng)絡空間安全、信息安全和軟件工程等計算機類專業(yè)的教材,也可作為相關專業(yè)學生和軟件工程師的參考書。
(1)知識結(jié)構(gòu)系統(tǒng)完整:不僅包括面向源頭安全的軟件安全開發(fā)技術,而且覆蓋針對三大軟件安全問題(即軟件漏洞、惡意軟件和軟件侵權問題)的分析與防治技術。
(2)理論實踐有機結(jié)合:不僅系統(tǒng)闡述基礎理論知識,而且講述應用技術并提供實踐練習,突出實踐性案例,在每章中都包含若干實踐性案例分析。
(3)經(jīng)典新穎內(nèi)容融會:不僅介紹經(jīng)典的技術、工具和案例,而且講解近年來新出現(xiàn)的重要技術、主流工具以及新應用場景的案例。
軟件是信息系統(tǒng)的靈魂,軟件安全是網(wǎng)絡空間安全的基石。隨著網(wǎng)絡空間安全威脅的日益增多,軟件安全問題所引發(fā)的各種信息系統(tǒng)安全事件層出不窮,給國家、社會、單位和個人造成了巨大損失。軟件安全對我國國計民生與國家安全的影響與日俱增。然而,目前我國的軟件安全技術人才供不應求,軟件產(chǎn)品的安全性普遍需要提升。因此,培養(yǎng)軟件安全技術人才、提升軟件開發(fā)者的安全開發(fā)技能具有極其重要的意義。
近年來,全國很多高校設立了網(wǎng)絡空間安全專業(yè)和信息安全專業(yè),軟件安全是其核心課程之一;軟件安全也是軟件工程和計算機科學與技術等專業(yè)的選修課。但是,目前的軟件安全教材還不夠豐富。隨著軟件安全攻防不斷升級,軟件安全技術的發(fā)展非常迅速,軟件安全教材的內(nèi)容也需要適時更新。本書作為面向新工科專業(yè)建設計算機系列教材之一,讀者對象主要為高等院校計算機類專業(yè)及相關專業(yè)的學生,本書也可作為軟件工程師的參考書。
本書在編寫過程中,力求具備以下特色。
(1) 知識結(jié)構(gòu)系統(tǒng)完整。不僅包括面向源頭安全的軟件安全開發(fā)技術,而且覆蓋針對三大軟件安全問題(即軟件漏洞、惡意軟件和軟件侵權問題)的分析與防治技術。
(2) 理論與實踐有機結(jié)合。不僅系統(tǒng)闡述基礎理論知識,而且講述應用技術并提供實踐練習,突出實踐性案例,在每章中都包含若干實踐性案例分析。
(3) 經(jīng)典新穎內(nèi)容融會。不但介紹經(jīng)典的技術、工具和案例,而且講解近年新出現(xiàn)的重要技術、主流工具以及新應用場景的案例。
本書包括五部分,共13章,其內(nèi)容安排如下。在部分軟件安全引論中,第1章概述軟件安全的意義、概念和標準。在第二部分軟件安全開發(fā)中,第2章介紹軟件安全開發(fā)周期的過程和模型;第3章講解軟件安全分析與設計技術;第4章詳述安全編程技術,包括基本安全編程、數(shù)據(jù)安全編程和應用安全編程技術;第5章闡述軟件安全測試技術。在第三部分軟件漏洞問題及防治中,第6章概述軟件漏洞的定義、類型與管控;第7章詳述幾類重要軟件漏洞的機理,包括內(nèi)存漏洞、Web應用程序漏洞和操作系統(tǒng)內(nèi)核漏洞的機理;第8章介紹軟件漏洞的防治技術,涉及漏洞防護機制和漏洞挖掘技術。在第四部分惡意軟件問題及防治中,第9章概述惡意代碼的定義、類型與管控;第10章詳解幾種重要惡意代碼的機理與可執(zhí)行文件技術,涉及病毒、蠕蟲、木馬和Rootkit的機理;第11章詳述惡意軟件的防治技術,包括惡意樣本逆向分析、傳統(tǒng)的和基于人工智能的惡意軟件檢測技術。在第五部分軟件侵權問題及權益保護中,第12章概述軟件知識產(chǎn)權相關法律與軟件侵權問題;第13章詳細闡述軟件權益保護技術,包括軟件版權保護技術和軟件破解防御技術。
本書的每一章都提供若干實踐性案例及其分析,涉及近年出現(xiàn)的軟件安全典型事件、軟件安全新技術和新應用場景。全書共24個實踐性案例分析,以下列出各章中實踐性案例的名稱。
〖3〗軟件安全技術前言〖3〗(第1章)羅賓漢勒索軟件事件實例
(第2章)某醫(yī)療行業(yè)軟件安全開發(fā)方案實例
(第3章)軟件安全需求分析實例
(第3章)軟件威脅建模實例
(第4章)Web應用登錄模塊的安全編程實例
(第4章)某教務管理系統(tǒng)權限管理的安全編程實例
(第5章)某投資咨詢公司系統(tǒng)的滲透測試實例
(第6章)區(qū)塊鏈API鑒權漏洞事件實例
(第6章)Zerologon高危漏洞事件實例
(第7章)內(nèi)存漏洞源碼實例
(第7章)某設備管控系統(tǒng)的漏洞檢測實例
(第7章)Windows本地提權漏洞實例
(第7章)Android簽名驗證繞過漏洞實例
(第8章)Windows漏洞防護技術應用實例
(第8章)基于模糊測試的二進制碼漏洞檢測實例
(第9章)GandCrab勒索軟件實例
(第9章)Scranos Rootkit實例
(第10章)構(gòu)造可執(zhí)行PE文件實例
(第10章)灰鴿子木馬機理實例
(第11章)基于IDA工具的靜態(tài)逆向分析實例
(第11章)基于OD工具的動態(tài)逆向分析實例
(第12章)Oracle公司訴Google公司Java侵權案實例
(第13章)微信云開發(fā)模式下的軟件版權保護實例
(第13章)Android App防破解實例
本書由暨南大學的孫玉霞、翁健和李哲濤主持編寫,孫玉霞負責全書除第2章、第5章、第6章和第12章以外各章的編寫;翁健負責編寫第5章和第6章;李哲濤負責編寫第2章;廣東省科技基礎條件平臺中心、廣東省高性能計算重點實驗室的許穎媚和羅亮負責編寫第12章和7.4.2節(jié),與孫玉霞共同編寫第9章。
在本書的編寫過程中,暨南大學的陳詩琪、呂文建、崔穎賢、方潔鳳、周兆南、譚子淵、陳釗、林松和霍紫瑩以及廣東省科技基礎條件平臺中心的曹強、賈偉鳳和匡碧琴收集和整理了許多文獻和資料,幫助校對了書稿,在此對他們表示由衷感謝!本書在編寫時參考了來自書籍、學術刊物和互聯(lián)網(wǎng)等的文獻和資料,其中有些列入了參考文獻,還有些可能因疏忽而未能查證引用,在此感謝所有這些文獻資料的作者!感謝清華大學出版社的諸位編輯對本書的辛勤付出!暨南大學本科教材資助項目和暨南雙百英才計劃項目為本書的編寫提供了支持,在此一并致謝。
軟件安全攻防向來是魔高一尺、道高一丈,軟件安全技術一直發(fā)展迅速。因編者學識有限,力有不逮,本書中的錯謬遺漏之處雖幾經(jīng)修訂仍在所難免。懇請諸位讀者為本書提出寶貴的意見和建議,如蒙告知,將不勝感激。
作者2022年1月
孫玉霞,鄭煒,廈門大學副教授,廈門大學計算機科學與技術系副主任。本科、碩士畢業(yè)于清華大學計算機科學與技術系,博士畢業(yè)于英國曼徹斯特大學計算機學院。主要研究領域為分布式計算、調(diào)度算法和區(qū)塊鏈技術。熱愛本科教學,已講授本科生必修課《C語言程序設計》與《操作系統(tǒng)原理》近十年,曾獲福建省教學成果獎二等獎,廈門大學春雨獎教金,廈門大學青年教師教學技能比賽二等獎。
部分軟件安全引論
第1章軟件安全概述31.1軟件安全的重要性3
1.1.1軟件的作用與軟件安全3
1.1.2安全威脅的形勢與軟件安全4
1.1.3對軟件安全的重視6
1.2軟件安全的概念6
1.2.1軟件安全的定義6
1.2.2軟件的安全屬性7
1.3軟件安全問題9
1.3.1軟件漏洞9
1.3.2惡意軟件10
1.3.3軟件侵權12
1.3.4軟件后門13
1.4軟件安全技術與標準14
1.4.1軟件安全開發(fā)技術14
1.4.2軟件安全防護技術15
1.4.3軟件安全的相關標準15
1.5白帽子與黑帽子16
1.5.1黑白有別16
1.5.2白帽子的重要性17
1.6實例分析18
羅賓漢勒索軟件事件實例18
1.7本章小結(jié)19
【思考與實踐】19第二部分軟件安全開發(fā)
第2章軟件安全開發(fā)周期232.1軟件安全開發(fā)過程23
2.2軟件安全開發(fā)模型25
2.2.1微軟公司的SDL模型25
2.2.2OWASP的SAMM模型29
2.2.3McGraw的BSI模型33
2.2.4SEI的TSPSecure模型36
2.3實例分析37
某醫(yī)療行業(yè)軟件安全開發(fā)方案實例37
2.4本章小結(jié)38
【思考與實踐】38
〖3〗軟件安全技術目錄〖3〗第3章軟件安全分析與設計40
3.1軟件安全需求分析40
3.1.1安全需求分析的方法40
3.1.2攻擊用例42
3.2軟件安全設計44
3.2.1安全設計的內(nèi)容與原則44
3.2.2安全設計的方法與模式48
3.2.3威脅建模51
3.3實例分析53
3.3.1軟件安全需求分析實例53
3.3.2軟件威脅建模實例56
3.4本章小結(jié)60
【思考與實踐】60
第4章安全編程61
4.1安全編程概述61
4.1.1安全編程原則61
4.1.2安全編程環(huán)境62
4.1.3編程語言安全性65
4.2基本安全編程67
4.2.1輸入安全67
4.2.2異常處理安全70
4.2.3內(nèi)存安全73
4.2.4線程與進程安全76
4.3數(shù)據(jù)安全編程82
4.3.1加密算法安全82
4.3.2密鑰安全86
4.4應用安全編程88
4.4.1權限控制安全88
4.4.2遠程調(diào)用安全89
4.4.3面向?qū)ο髴玫陌踩幊?2
4.4.4Web應用的安全編程93
4.5實例分析95
4.5.1Web應用登錄模塊的安全編程實例95
4.5.2某教務管理系統(tǒng)權限管理的安全編程實例96
4.6本章小結(jié)98
【思考與實踐】99
第5章軟件安全測試101
5.1軟件安全測試的內(nèi)容101
5.2軟件安全測試的方法103
5.3靜態(tài)的軟件安全測試104
5.3.1代碼安全審查104
5.3.2靜態(tài)代碼分析105
5.4滲透測試106
5.4.1滲透測試過程106
5.4.2滲透測試工具108
5.4.3滲透測試與法律道德109
5.5模糊測試110
5.5.1模糊測試原理110
5.5.2模糊測試技術112
5.5.3模糊測試工具114
5.6實例分析115
某投資咨詢公司系統(tǒng)的滲透測試實例115
5.7本章小結(jié)116
【思考與實踐】116
第三部分軟件漏洞問題及防治
第6章軟件漏洞概述1196.1軟件漏洞的定義119
6.2軟件漏洞的成因與后果120
6.2.1軟件漏洞的成因120
6.2.2軟件漏洞被利用的后果122
6.3軟件漏洞的分類與分級123
6.3.1軟件漏洞的分類123
6.3.2軟件漏洞的分級125
6.4軟件漏洞的管控126
6.4.1軟件漏洞管控的必要性126
6.4.2軟件漏洞管理的標準126
6.5實例分析127
6.5.1區(qū)塊鏈API鑒權漏洞事件實例127
6.5.2Zerologon高危漏洞事件實例129
6.6本章小結(jié)129
【思考與實踐】130
第7章軟件漏洞機理131
7.1內(nèi)存漏洞131
7.1.1內(nèi)存漏洞概述131
7.1.2棧溢出漏洞機理131
7.1.3堆溢出漏洞機理134
7.1.4格式化串漏洞機理136
7.1.5釋放后重用漏洞機理138
7.2Web應用程序漏洞139
7.2.1Web應用程序漏洞概述139
7.2.2SQL注入漏洞機理140
7.2.3跨站腳本漏洞機理143
7.2.4跨站請求偽造漏洞機理146
7.3操作系統(tǒng)內(nèi)核漏洞148
7.3.1操作系統(tǒng)內(nèi)核概述148
7.3.2提權漏洞機理148
7.3.3驗證繞過漏洞機理149
7.4實例分析150
7.4.1內(nèi)存漏洞源碼實例150
7.4.2某設備管控系統(tǒng)的漏洞檢測實例153
7.4.3Windows本地提權漏洞實例155
7.4.4Android簽名驗證繞過漏洞實例158
7.5本章小結(jié)161
【思考與實踐】161
第8章軟件漏洞防治163
8.1軟件漏洞防范概述163
8.2軟件漏洞防護機制164
8.2.1數(shù)據(jù)執(zhí)行保護164
8.2.2地址空間布局隨機化165
8.2.3安全結(jié)構(gòu)化異常處理166
8.2.4棧溢出檢測的編譯選項167
8.3漏洞挖掘168
8.3.1漏洞挖掘概述168
8.3.2基于源碼的靜態(tài)漏洞分析169
8.3.3基于二進制碼的靜態(tài)漏洞分析171
8.3.4基于二進制碼的動態(tài)漏洞分析174
8.4實例分析177
8.4.1Windows漏洞防護技術應用實例177
8.4.2基于模糊測試的二進制碼漏洞檢測實例178
8.5本章小結(jié)181
【思考與實踐】181
第四部分惡意軟件問題及防治
第9章惡意代碼概述1859.1惡意代碼的定義185
9.2惡意代碼的類型及特征185
9.2.1病毒185
9.2.2蠕蟲190
9.2.3木馬192
9.2.4勒索軟件194
9.2.5Rootkit196
9.2.6發(fā)展趨勢197
9.3惡意代碼的管控199
9.3.1惡意代碼的相關法律法規(guī)199
9.3.2惡意代碼的防治管理201
9.4實例分析201
9.4.1GandCrab勒索軟件實例201
9.4.2Scranos Rootkit實例202
9.5本章小結(jié)204
【思考與實踐】204
第10章惡意軟件的機理206
10.1可執(zhí)行文件206
10.1.1可執(zhí)行文件的類型206
10.1.2PE文件格式207
10.1.3可執(zhí)行文件的生成210
10.1.4系統(tǒng)引導與應用程序執(zhí)行212
10.2PE病毒的機理213
10.2.1PE病毒的基本結(jié)構(gòu)213
10.2.2PE病毒的工作機制214
10.3蠕蟲的機理216
10.3.1蠕蟲的基本結(jié)構(gòu)216
10.3.2蠕蟲的工作機制217
10.4木馬的機理217
10.4.1木馬的基本結(jié)構(gòu)217
10.4.2木馬的工作機制217
10.5Rootkit的機理218
10.5.1Rootkit的基本結(jié)構(gòu)218
10.5.2Rootkit的工作機制219
10.6實例分析220
10.6.1構(gòu)造可執(zhí)行PE文件實例220
10.6.2灰鴿子木馬機理實例223
10.7本章小結(jié)225
【思考與實踐】225
第11章惡意代碼防治227
11.1惡意代碼逆向分析技術227
11.1.1靜態(tài)逆向分析技術227
11.1.2靜態(tài)逆向分析工具IDA228
11.1.3動態(tài)逆向分析技術230
11.1.4動態(tài)調(diào)試工具OD232
11.2基本的惡意代碼檢測技術235
11.2.1特征值檢測235
11.2.2校驗和檢測237
11.2.3基于虛擬機的檢測238
11.3基于人工智能的惡意代碼檢測240
11.3.1惡意代碼智能檢測技術概述240
11.3.2主流平臺上的惡意代碼智能檢測技術241
11.4實例分析244
11.4.1基于IDA工具的靜態(tài)逆向分析實例244
11.4.2基于OD工具的動態(tài)逆向分析實例246
11.5本章小結(jié)249
【思考與實踐】249
第五部分軟件侵權問題及權益保護
第12章軟件侵權問題25312.1軟件知識產(chǎn)權與法律253
12.1.1軟件知識產(chǎn)權253
12.1.2開源軟件許可證254
12.1.3開源軟件與知識產(chǎn)權保護256
12.1.4軟件知識產(chǎn)權的相關法律257
12.2軟件侵權問題概述260
12.3實例分析261
Oracle公司訴Google公司Java侵權案實例261
12.4本章小結(jié)262
【思考與實踐】262
第13章軟件權益保護技術264
13.1軟件權益保護概述264
13.2軟件版權保護技術265
13.2.1用戶合法性驗證265
13.2.2軟件校驗271
13.2.3演示版限制使用272
13.2.4云計算SaaS模式下的軟件版權保護273
13.3軟件防破解技術274
13.3.1軟件破解與防破解274
13.3.2代碼混淆276
13.3.3程序加殼281
13.3.4軟件水印281
13.3.5防調(diào)試282
13.4實例分析284
13.4.1微信云開發(fā)模式下的軟件版權保護實例284
13.4.2Android App防破解實例285
13.5本章小結(jié)288
【思考與實踐】289
參考文獻290