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