你將在本書中學(xué)習(xí)到:在軟件開發(fā)生命周期的每一階段中加入安全措施。在計(jì)劃、需求、設(shè)計(jì)和編碼階段集成安全。在每個(gè)發(fā)布版本中加入安全測(cè)試,并將它作為團(tuán)隊(duì)發(fā)布工作中的一部分。在敏捷開發(fā)或 DevOps 環(huán)境中實(shí)現(xiàn)合規(guī)。通過共鳴、開放、透明、協(xié)作構(gòu)建高效安全的程序。
在全世界的所有組織中,敏捷開發(fā)正在成為*廣泛使用的軟件開發(fā)方法,但它通常無法和傳統(tǒng)的安全管理技術(shù)相融合。大部分安全專業(yè)技術(shù)人員的知識(shí)都跟不上敏捷開發(fā)的發(fā)展。為了將這連個(gè)領(lǐng)域打通,本書引入了幾個(gè)在敏捷開發(fā)使用的安全工具和技術(shù)。這本書由安全專家和敏捷高手編寫,本書一開始就向敏捷實(shí)踐者介紹了安全原則,同時(shí)向安全實(shí)踐者介紹了敏捷原則。作者還介紹了他們?cè)谧约旱拿艚莅踩珜?shí)踐中所遇到的問題,以及他們?nèi)绾谓鉀Q這些問題。
前言
軟件正在改變這個(gè)世界。開發(fā)者成為了新的無冕之王。物聯(lián)網(wǎng)意味著每個(gè)電燈泡中都會(huì)有一臺(tái)計(jì)算機(jī)存在。這種說法也表明軟件開發(fā)越來越占據(jù)了統(tǒng)治地位,世界上大多數(shù)人距離某臺(tái)計(jì)算機(jī)不會(huì)超過1米,在任何時(shí)候我們都生活在計(jì)算機(jī)輔助類物品或環(huán)境的影響下。但隨之而來的卻是某種危機(jī)。
在過去,安全通常是銀行業(yè)和政府系統(tǒng)才需要真正考慮的事情。但由于計(jì)算機(jī)無處不在,通過系統(tǒng)濫用的可行性增加了,從而誘發(fā)了系統(tǒng)濫用,增加了系統(tǒng)所要面對(duì)的風(fēng)險(xiǎn)。敏捷開發(fā)技術(shù)越來越被大多數(shù)組織所快速采用。通過響應(yīng)式改變以及開發(fā)成本的明顯降低,它們以一種敏捷的方式提供了理想的、能夠不斷迭代直到軟件大版本被構(gòu)建出來的標(biāo)準(zhǔn)。
但是,從歷史觀點(diǎn)來說,安全和敏捷從來不是天生的一對(duì)。在前面提到的政府、經(jīng)濟(jì)和銀行系統(tǒng)中,安全專家正在忙得不可開交,他們正在努力構(gòu)建、測(cè)試和加固這些系統(tǒng),以應(yīng)對(duì)層出不窮的各種威脅。而且,我們經(jīng)?梢栽诩夹g(shù)博客和晚間新聞中看到的最有趣、最刺激的東西,也主要集中在職業(yè)黑客團(tuán)隊(duì)所做的漏洞研究、Exploit開發(fā)和特技攻擊上。你可能聽過幾個(gè)最新的漏洞,比如心血漏洞(Heartbleed)、阻塞漏洞(Logjam)及破殼漏洞(Shellshock),也可能知道幾個(gè)能夠越獄最新iPhone和Android設(shè)備的團(tuán)隊(duì)。但除了最終出現(xiàn)的那個(gè)帶有好聽的、媒體友好名字的防御措施或方法之外,你還記得任何一個(gè)防御者或者建設(shè)者的名字嗎?安全專家在敏捷開發(fā)方面的知識(shí)和經(jīng)驗(yàn)已經(jīng)落伍了,在我們這個(gè)行業(yè)中已經(jīng)出現(xiàn)了一個(gè)驚人的鴻溝。同樣地,敏捷開發(fā)團(tuán)隊(duì)拒絕和擺脫了過去的羈絆。沒有詳細(xì)的需求說明、沒有系統(tǒng)建模、沒有傳統(tǒng)的瀑布切換和控制門。
但問題是,敏捷團(tuán)隊(duì)將洗澡水和嬰兒一起潑出去了。那些有時(shí)候既緩慢又不靈活的實(shí)踐,在過去也曾經(jīng)證明過是有價(jià)值的。它們的存在是有原因的,敏捷團(tuán)隊(duì)丟棄了它們,很容易就忽略和丟掉了它們的價(jià)值。這意味著敏捷團(tuán)隊(duì)是盡可能地不考慮安全問題。有一些敏捷實(shí)踐讓系統(tǒng)更安全,但那通常是一個(gè)意外驚喜而不是故意設(shè)計(jì)。很少有敏捷團(tuán)隊(duì)會(huì)意識(shí)到他們系統(tǒng)面臨的威脅;不理解他們正處于風(fēng)險(xiǎn)之中;不跟蹤或者不會(huì)控制這些風(fēng)險(xiǎn);對(duì)有人會(huì)攻擊他們的系統(tǒng)缺乏理解。
本書的讀者對(duì)象我們不知道你是一個(gè)敏捷團(tuán)隊(duì)的領(lǐng)導(dǎo)者,還是一個(gè)想知道更多安全知識(shí)的開發(fā)者,也可能是一個(gè)安全行業(yè)的從業(yè)者,發(fā)現(xiàn)整個(gè)開發(fā)團(tuán)隊(duì)已經(jīng)不是你曾經(jīng)認(rèn)識(shí)過的樣子,你想學(xué)習(xí)更多。這本書的目標(biāo)是針對(duì)這三種主要的讀者。敏捷開發(fā)者你活著、呼吸著,所以敏捷。你從你的Kaizen中知道你的Scrum,在你的反饋循環(huán)中進(jìn)行測(cè)試驅(qū)動(dòng)開發(fā)。無論你是不是一個(gè)Scrum大師,開發(fā)者、測(cè)試者、敏捷開發(fā)講師、產(chǎn)品的業(yè)主,還是客戶代理,你都需要理解敏捷開發(fā)的實(shí)踐和價(jià)值。本書將幫助你學(xué)習(xí)什么是安全,存在什么樣的威脅,以及安全從業(yè)者用于描述所發(fā)生的事情的語言。我們會(huì)幫助你理解如何建模威脅,度量風(fēng)險(xiǎn),從理論上構(gòu)建安全軟件,安全地安裝軟件,以及理解運(yùn)營中來自于某個(gè)在線服務(wù)的安全問題。
安全從業(yè)者無論你是否是一個(gè)風(fēng)險(xiǎn)管理者、一個(gè)信息安全專家,還是一個(gè)安全運(yùn)營分析家,你應(yīng)該理解安全。你可能關(guān)心如何使用在線服務(wù),無時(shí)不刻不在思考各種威脅、風(fēng)險(xiǎn)以及緩解措施,你甚至發(fā)現(xiàn)過新漏洞并利用它們進(jìn)行過提權(quán)。這本書會(huì)幫助你理解敏捷團(tuán)隊(duì)是如何真正對(duì)軟件進(jìn)行開發(fā)的,這個(gè)地球上的這類團(tuán)隊(duì)正在談?wù)撌裁,以及他們口中的沖刺和故事是什么。你將學(xué)習(xí)查看chaos中的模板,以及幫助你和團(tuán)隊(duì)進(jìn)行交流并影響他們。本書將告訴你可以從哪些地方介入或者做出努力,這也是對(duì)一個(gè)敏捷團(tuán)隊(duì)最具價(jià)值和最能發(fā)揮作用的地方。敏捷安全從業(yè)者從風(fēng)險(xiǎn)到?jīng)_刺,你無一不知。無論你是一個(gè)幫助團(tuán)隊(duì)做好安全的工具創(chuàng)建者,還是一個(gè)負(fù)責(zé)對(duì)團(tuán)隊(duì)提建議的顧問,本書都適合你。拋開本書的主要內(nèi)容,去理解本書作者的意圖,也就是正在增長的良好實(shí)踐。本書將有助于了解在你領(lǐng)域內(nèi)的其他人,以及我們正在組織中處理這個(gè)問題時(shí)出現(xiàn)的想法和概念。這會(huì)提高、擴(kuò)展你對(duì)相關(guān)域的理解,以及為你提供一個(gè)繼續(xù)研究學(xué)習(xí)的目標(biāo)。
本書主要內(nèi)容你可以按從頭到尾的順序來逐章閱讀本書。實(shí)際上我們也推薦你以這種方式閱讀;我們努力編寫本書,希望在每一章都包含對(duì)所有讀者有用的內(nèi)容,哪怕一個(gè)小小的冷幽默或趣聞?shì)W事!但實(shí)際上,我們也認(rèn)為有的章對(duì)你來說會(huì)比其他章更有用。
大致將本書分成三個(gè)部分。
第一部分:基礎(chǔ)敏捷和安全是非常寬的領(lǐng)域,我們不知道你掌握了什么。尤其當(dāng)你是來自其中某一個(gè)領(lǐng)域時(shí),你可能不知道另一個(gè)領(lǐng)域的知識(shí)。如果你是敏捷專家,我們建議你先閱讀第1章,安全概述,以確保你具備基本的安全知識(shí)。如果你不是,或者你還剛剛開始接觸敏捷開發(fā),那么在我們開始介紹敏捷之前,我們建議你閱讀第2章,敏捷促進(jìn)者。這一章介紹了我們認(rèn)為的基本實(shí)踐是什么,以及我們將從什么樣的基礎(chǔ)開始。第3章,迎接敏捷革命的到來,介紹敏捷軟件開發(fā)的歷史,以及它的不同實(shí)現(xiàn)方式。對(duì)于安全專家和沒有敏捷開發(fā)經(jīng)驗(yàn)的人來說,這也是他們最感興趣的部分。
第二部分:敏捷和安全我們建議每個(gè)人都開始閱讀第4章,在現(xiàn)有的敏捷生命周期中工作。在這一章中,試圖將我們想到的安全實(shí)踐和真實(shí)的敏捷開發(fā)生命周期聯(lián)系到一起,同時(shí)解釋說明為什么要將它們聯(lián)系起來。第5~7章,學(xué)習(xí)需求和漏洞管理、風(fēng)險(xiǎn)管理,這些更全面的實(shí)踐將從一個(gè)方面支撐起開發(fā)中的產(chǎn)品管理和總體方案。第8~13章包括了安全軟件開發(fā)生命周期的各個(gè)組成部分,從評(píng)估、代碼評(píng)審、測(cè)試到運(yùn)行安全。
第三部分:最后組裝第14章,介紹合規(guī)性,以及它和安全有何關(guān)系,如何在敏捷開發(fā)或DevOps環(huán)境中實(shí)現(xiàn)合規(guī)。第15章,介紹安全的文化體系。沒錯(cuò),你可以實(shí)現(xiàn)本書介紹的所有實(shí)踐,前面的章節(jié)介紹了你能夠使這些改變持續(xù)的各種工具。然而敏捷開發(fā)都是關(guān)于人的,有效的安全持續(xù)也是這樣:安全其實(shí)是改變內(nèi)心的文化,這一章會(huì)提供一些我們?cè)谡鎸?shí)世界中找到的有效案例。
對(duì)于一個(gè)公司,要改變它的安全性,它需要安全專家和開發(fā)人員相互支持和尊重,他們需要密切合作以構(gòu)建安全持續(xù)。它不僅僅是一堆工具或一系列實(shí)踐,還需要這個(gè)組織的徹底改變。第16章,介紹敏捷安全對(duì)不同的人意味著什么,并歸納出要讓團(tuán)隊(duì)敏捷和安全,我們每個(gè)人應(yīng)該干什么和不應(yīng)該干什么。
本書約定本書常用到的排版方式約定如下:斜體(Italic)表示新出現(xiàn)的術(shù)語、URL、email地址、文件名及擴(kuò)展名。等寬字體(Constant Width)在代碼清單中使用,或者在段落中用于表示程序中的對(duì)象,如變量名、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型,環(huán)境變量、語句和關(guān)鍵字。如果在代碼行后出現(xiàn)字符,表示這一行后面是下一行。加粗的等寬字體(Constant width bold)表示命令或需要用戶輸入的其他文本。傾斜的等寬字體(Constant Width Italic)表示文本應(yīng)該由用戶自己提供的內(nèi)容替換,或者根據(jù)上下文改變。OReilly SafariSafari(過去叫Safari圖書在線)是一個(gè)針對(duì)企業(yè)、政府、教育機(jī)構(gòu)和個(gè)人的會(huì)員制培訓(xùn)和參考平臺(tái)。成為會(huì)員將可以從數(shù)據(jù)庫中查找和瀏覽數(shù)以千計(jì)的圖書、培訓(xùn)視頻、學(xué)習(xí)路徑、交互式教程和組織好的播放列表,這些資料的來源遍及250個(gè)出版社,如OReilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt, Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等。更多信息,請(qǐng)?jiān)L問:http://oreilly.com/safari。
聯(lián)系我們請(qǐng)把你對(duì)本書的意見和疑問發(fā)給出版社:美國:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)奧萊利技術(shù)咨詢(北京)有限公司本書有一個(gè)專屬網(wǎng)頁,我們會(huì)在上面列出勘誤、示例,以及其他附加信息。你可以通過以下地址訪問它:http://bit.ly/agile-application-security。如果是評(píng)論或者討論和本書相關(guān)的技術(shù)問題,那么請(qǐng)發(fā)郵件到bookquestions@oreilly.com。關(guān)于我們出版社的其他書籍、教程、會(huì)議和新聞,請(qǐng)?jiān)L問我們的網(wǎng)站http://www.oreilly.com。我們的Facebook:http://facebook.com/oreilly。我們的Twitter:http://twitter.com/oreillymedia。我們的YouTube:http://www.youtube.com/oreillymedia。
致謝首先要感謝三位了不起的編輯:Courtney Allen、Virgnia Wilson和Nan Barber。沒有你們和其他OReilly團(tuán)隊(duì)的成員,我們無法完成本書。我們還要感謝技術(shù)評(píng)審的耐心和真知灼見,分別是:Ben Allen、Geoff Kratz、Pete McBreen、Kelly Shortridge和Nenad Stojanovsk。最后還要感謝我們的朋友和家人,忍受我們?cè)俅螐氖逻@樣一個(gè)瘋狂的項(xiàng)目。
Laura Bell,SafeStack創(chuàng)始人和首席顧問。Michael Brunton-Spall,公共數(shù)字服務(wù)部的技術(shù)及運(yùn)營副主任。Rich Smith,Duo的研發(fā)總監(jiān)。
前言
1
第1章 安全概述 9
不僅僅是技術(shù)問題 10
不僅僅是極客 11
安全和風(fēng)險(xiǎn)有關(guān) 12
威脅因素,以及了解你的敵人 15
安全價(jià)值:保護(hù)我們的數(shù)據(jù)、系統(tǒng)和人員 17
常見的安全誤區(qū)和錯(cuò)誤 19
讓我們開始 21
第2章 敏捷促進(jìn)者 22
構(gòu)建管道 22
自動(dòng)化測(cè)試 23
持續(xù)集成 26
基礎(chǔ)設(shè)施即代碼 26
發(fā)布管理 28
可視化追蹤 29
集中反饋 30
部署過的代碼才是唯一優(yōu)秀的代碼 31
安全、高速運(yùn)行 31
第3章 迎接敏捷革命的到來 33
敏捷:一座美麗的盆景 33
Scrum,最時(shí)髦的敏捷技術(shù) 36
極限編程 39
看板 42
精益開發(fā) 45
常見敏捷方法 46
什么是 DevOps? 48
敏捷和安全 49
第4章 在現(xiàn)有的敏捷生命周期中工作 51
傳統(tǒng)應(yīng)用的安全模型 51
迭代前儀式 54
迭代前參與 56
迭代后參與 57
設(shè)置安全基線 58
那么當(dāng)你擴(kuò)大規(guī)模的時(shí)候呢? 59
建立安全團(tuán)隊(duì) 59
關(guān)鍵點(diǎn) 61
第5章 安全和需求 63
在需求中處理安全 63
敏捷需求:講述故事 64
跟蹤和管理故事:backlog 66
處理bug 67
將安全性放入需求 67
安全角色和反角色 74
攻擊者故事:戴上黑帽子 76
攻擊樹 79
基礎(chǔ)架構(gòu)和運(yùn)維需求 82
重點(diǎn)回顧 85
第6章 敏捷漏洞管理 87
漏洞掃描及修復(fù) 87
處理關(guān)鍵漏洞 93
確保軟件供應(yīng)鏈安全 94
如何以敏捷方式修復(fù)漏洞 96
安全Sprints、強(qiáng)化Sprints和黑客日 100
技術(shù)安全債務(wù)的承擔(dān)和償還 101
關(guān)鍵點(diǎn) 103
第7章 敏捷團(tuán)隊(duì)的風(fēng)險(xiǎn) 104
安全團(tuán)隊(duì)說不 104
理解風(fēng)險(xiǎn)和風(fēng)險(xiǎn)管理 105
風(fēng)險(xiǎn)和威脅 106
風(fēng)險(xiǎn)處置 107
敏捷和DevOps中的風(fēng)險(xiǎn)管理 112
在敏捷和DevOps中處理安全風(fēng)險(xiǎn) 117
重點(diǎn)回顧 119
第8章 理解攻擊和評(píng)估風(fēng)險(xiǎn) 120
理解攻擊:妄想和現(xiàn)實(shí) 121
系統(tǒng)的攻擊面 129
敏捷威脅建模 132
常見攻擊方式 142
要點(diǎn)總結(jié) 143
第9章 構(gòu)建安全和可用的系統(tǒng) 145
反入侵設(shè)計(jì) 145
安全性與可用性 146
技術(shù)控制 146
安全架構(gòu) 149
復(fù)雜性和安全性 152
重點(diǎn)回顧 154
第10章 代碼評(píng)審安全 155
為什么需要進(jìn)行代碼評(píng)審? 155
代碼評(píng)審的類型 156
結(jié)對(duì)代碼評(píng)審 158
你應(yīng)該何時(shí)評(píng)審代碼? 160
怎樣評(píng)審代碼? 161
誰需要評(píng)審代碼? 167
自動(dòng)代碼評(píng)審 169
代碼評(píng)審的挑戰(zhàn)和局限性 178
采用安全代碼評(píng)審 181
查看安全功能和控件 186
評(píng)審代碼的內(nèi)部威脅 187
關(guān)鍵要點(diǎn) 188
第11章 敏捷安全測(cè)試 191
那么敏捷開發(fā)中如何進(jìn)行測(cè)試? 191
有bug 的地方,就會(huì)被攻破 192
敏捷測(cè)試金字塔 194
單元測(cè)試和TDD 196
服務(wù)級(jí)別的測(cè)試和BDD工具 199
驗(yàn)收測(cè)試 201
功能安全測(cè)試和掃描 202
應(yīng)用程序掃描的問題 206
測(cè)試基礎(chǔ)設(shè)施 208
創(chuàng)建自動(dòng)化的構(gòu)建和測(cè)試管道 212
敏捷開發(fā)中的手動(dòng)測(cè)試 218
如何在敏捷和DevOps中進(jìn)行安全測(cè)試? 220
重點(diǎn)回顧 221
第12章 外部審計(jì),測(cè)試和建議 223
為什么我們需要外部審計(jì)? 224
缺陷評(píng)估 226
滲透測(cè)試 227
紅隊(duì) 229
BUG獎(jiǎng)勵(lì) 231
配置審查 238
安全代碼審計(jì) 238
加密審計(jì) 239
選擇一個(gè)外部的公司 240
使你的錢花的值得 242
關(guān)鍵點(diǎn) 246
第13章 運(yùn)維和OpSec 247
系統(tǒng)加固:建立安全系統(tǒng) 248
網(wǎng)絡(luò)即代碼 256
監(jiān)控與入侵檢測(cè) 257
在運(yùn)行時(shí)捕捉錯(cuò)誤 262
運(yùn)行時(shí)防御 264
事件反應(yīng):為破壞而準(zhǔn)備 266
保護(hù)你的構(gòu)建管道 270
噓……請(qǐng)保密 277
重點(diǎn)回顧 279
第14章 合規(guī)性 281
合規(guī)性和安全性 281
風(fēng)險(xiǎn)管理和合規(guī) 288
變更的可追溯性 289
數(shù)據(jù)隱私 290
如何滿足合規(guī)性并保持敏捷 292
證明和認(rèn)證 303
關(guān)鍵點(diǎn) 304
第15章 安全文化 306
安全文化的意義 306
搭建安全文化 307
有效安全原則 309
安全外展 320
重點(diǎn)回顧 327
第16章 敏捷安全意味著什么? 328
Laura的故事 328
Jim的故事 331
Michael的故事 335
Rich的故事 339
|