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