SDL介紹
安全開(kāi)發(fā)生命周期(SDL)即Security Development Lifecycle,是一個(gè)幫助開(kāi)發(fā)人員構(gòu)建更安全的軟件泣崩,和解決安全合規(guī)要求的同時(shí)降低安全漏洞修復(fù)成本的軟件開(kāi)發(fā)過(guò)程,可幫助企業(yè)降低安全隱患,提高軟件安全質(zhì)量褥傍。
SDL安全設(shè)計(jì)核心原則
1.攻擊面最小(Attack Surface Reduction)
攻擊面是指系統(tǒng)任何能被用戶(hù)或者其它系統(tǒng)所訪(fǎng)問(wèn)到的部分侧啼,這些暴露給用戶(hù)的地方往往也是最可能被惡意攻擊者攻擊的地方。
攻擊面最小化即是指盡量減少暴露惡意用戶(hù)可能發(fā)現(xiàn)并試圖利用的攻擊面數(shù)量堪簿。
系統(tǒng)的受攻擊面是一個(gè)混合體慨菱,不僅包括代碼、接口戴甩、服務(wù),也包括對(duì)所有用戶(hù)提供服務(wù)的協(xié)議闪彼。尤其是那些未被驗(yàn)證或者遠(yuǎn)程的用戶(hù)都可以訪(fǎng)問(wèn)到的協(xié)議甜孤,安全人員在攻擊面最小化時(shí)首先要對(duì)攻擊面進(jìn)行分析,攻擊面分析就是枚舉所有訪(fǎng)問(wèn)入庫(kù)畏腕、接口缴川、協(xié)議一切可執(zhí)行代碼的過(guò)程,從高層次來(lái)說(shuō)描馅,攻擊面分析著重于:
降低默認(rèn)執(zhí)行的代碼量(非必要功能默認(rèn)未開(kāi)啟)
限制可訪(fǎng)問(wèn)到代碼的人員范圍(部分功能僅對(duì)內(nèi)部開(kāi)放)
限定可訪(fǎng)問(wèn)到代碼的人員身份(認(rèn)證鑒權(quán))
降低代碼執(zhí)行所需權(quán)限(使用低權(quán)限用戶(hù)運(yùn)行程序)
2.基本隱私(Basic Privacy)
用戶(hù)使用軟件時(shí)無(wú)可避免個(gè)人信息被收集把夸、使用甚至分發(fā),企業(yè)則有責(zé)任和義務(wù)建立保護(hù)個(gè)人信息的保護(hù)措施铭污,抵御敵對(duì)攻擊行為恋日,確保用戶(hù)基本隱私的安全性膀篮。隱私安全是建立可信任應(yīng)用程序的關(guān)鍵因素。
在軟件設(shè)計(jì)時(shí)考慮用戶(hù)基本隱私的必要性及意義有:
履行法律規(guī)定和義務(wù)
增加客戶(hù)的信賴(lài)
對(duì)于特殊的軟件或者全球性的產(chǎn)品岂膳,設(shè)計(jì)人員需要明確軟件的行為及針對(duì)人群誓竿。尤其要考慮當(dāng)?shù)貒?guó)家的法律法規(guī),如美國(guó)兒童網(wǎng)路隱私保護(hù)法COPPA(Children’s Online Privacy Protection Act)等谈截,企業(yè)在開(kāi)發(fā)產(chǎn)品筷屡、服務(wù)時(shí)有必要制定明確的隱私準(zhǔn)則,對(duì)獲取簸喂、記錄用戶(hù)隱私的相關(guān)產(chǎn)品需有明確的要求和指導(dǎo)建議毙死。
基本隱私的案例:
只收集程序必須用到的隱私數(shù)據(jù),并明確告知用戶(hù)并征得用戶(hù)同意喻鳄;
對(duì)于用戶(hù)隱私數(shù)據(jù)如密碼扼倘、口令等均需要加密存儲(chǔ),最低要求是sha256+salt诽表,對(duì)于更高要求的則使用PBKDF2算法加密存儲(chǔ)唉锌。
3.權(quán)限最小化(Least Privilege)
如果一個(gè)應(yīng)用程序或網(wǎng)站被攻擊、破壞竿奏,權(quán)限最小化機(jī)制能夠有效的將潛在損害最小化袄简。
常見(jiàn)的權(quán)限最小化實(shí)踐:
普通管理員/系統(tǒng)管理員等角色管理
文件只讀權(quán)限/文件訪(fǎng)問(wèn)權(quán)限等訪(fǎng)問(wèn)控制
進(jìn)程/服務(wù)以所需最小用戶(hù)權(quán)限運(yùn)行
在進(jìn)行軟件設(shè)計(jì)時(shí),安全設(shè)計(jì)人員可以評(píng)估應(yīng)用程序的行為及功能所需的最低限度權(quán)限及訪(fǎng)問(wèn)級(jí)別泛啸,從而合理分配相應(yīng)的權(quán)限绿语。如果程序特定情況必須要較高級(jí)別的權(quán)限,也可以考慮特權(quán)賦予及釋放的機(jī)制候址。即便程序遭到攻擊吕粹,也可以將損失降到最低。
權(quán)限最小化的案例:
Windows系統(tǒng)中網(wǎng)絡(luò)進(jìn)程岗仑、本地服務(wù)匹耕、用戶(hù)進(jìn)程的權(quán)限都較低且互相獨(dú)立,分別為NETWORK SERVICE荠雕、LOCAL SERVICE稳其、user權(quán)限,只有核心的重要進(jìn)程實(shí)用SYSTEM權(quán)限炸卑;
最新版本的Office程序打開(kāi)不可信來(lái)源的文檔時(shí)既鞠,默認(rèn)時(shí)不可編輯的,同時(shí)也是默認(rèn)不可執(zhí)行代碼的盖文,即使存在緩沖區(qū)溢出漏洞嘱蛋,也不會(huì)執(zhí)行shellcode等惡意代碼。
4.默認(rèn)安全配置(Secure Defaults)
在客戶(hù)熟悉安全配置選項(xiàng)之前,默認(rèn)安全配置不僅有利于更好的幫助客戶(hù)掌握安全配置經(jīng)驗(yàn)洒敏,同時(shí)也可以確保應(yīng)用程序初始狀態(tài)下處于較安全狀態(tài)龄恋。之后再讓客戶(hù)可根據(jù)實(shí)際使用情況而決定應(yīng)用程序安全與隱私的等級(jí)水平是否降低。
默認(rèn)安全配置的案例:
在Win 7之后的Windows操作系統(tǒng)中桐玻,DEP(數(shù)據(jù)執(zhí)行保護(hù))默認(rèn)是開(kāi)啟的篙挽。用戶(hù)可設(shè)置選項(xiàng)改變DEP的狀態(tài);
Win 10默認(rèn)啟用安全防護(hù)軟件Windows Defender镊靴,用戶(hù)可選擇關(guān)閉铣卡。
5.縱深防御(Defense in Depth)
縱深防御包含兩層含義:首先,要在各個(gè)不同層面偏竟、不同方面實(shí)施安全方案煮落,避免出現(xiàn)疏漏,不同安全方案之間需要相互配合踊谋,構(gòu)成一個(gè)整體蝉仇;其次,要在正確的地方做正確的事情殖蚕,即在解決根本問(wèn)題的地方實(shí)施針對(duì)性的安全方案轿衔。
縱深防御并不是同一個(gè)安全方案要做兩遍或多遍,而是要從不同的層面睦疫、不同的角度對(duì)系統(tǒng)做出整體的解決方案害驹。與默認(rèn)安全一樣,縱深防御也是設(shè)計(jì)安全方案時(shí)的重要指導(dǎo)思想蛤育。
縱深防御的案例:
針對(duì)XSS的防護(hù)宛官,除了要對(duì)用戶(hù)輸入的特殊符號(hào)進(jìn)行過(guò)濾,還要區(qū)分是否是富文本瓦糕,是則進(jìn)行相應(yīng)編碼操作底洗,在輸入端過(guò)濾的同時(shí)在輸出端也進(jìn)行過(guò)濾操作。
即使做了十足的過(guò)濾咕娄、編碼等安全防護(hù)亥揖,為了更一步確保緩解XSS攻擊,Web站點(diǎn)也可以對(duì)Cookie啟用HTTP-Only屬性圣勒,確保即使發(fā)生XSS攻擊徐块,也可以阻止通過(guò)腳本訪(fǎng)問(wèn)Cookie的操作。
6.威脅建模(Threat Modeling)
威脅建模是一種分析應(yīng)用程序威脅的過(guò)程和方法灾而,通過(guò)識(shí)別目標(biāo)和漏洞來(lái)優(yōu)化系統(tǒng)安全,然后定義防范或減輕系統(tǒng)威脅的對(duì)策的過(guò)程扳剿。使開(kāi)發(fā)者能夠識(shí)別旁趟,量化和解決與應(yīng)用程序相關(guān)的安全風(fēng)險(xiǎn)。
例如下圖,通過(guò)威脅建模锡搜,使審閱者更好地理解系統(tǒng)橙困,便于分析系統(tǒng)的入口點(diǎn)以及每個(gè)入口點(diǎn)的相關(guān)威脅。
威脅建母停可以在軟件設(shè)計(jì)和在線(xiàn)運(yùn)行時(shí)進(jìn)行凡傅。威脅建模在新系統(tǒng)/新功能開(kāi)發(fā)的設(shè)計(jì)階段,通過(guò)威脅建某Φ蓿可幫助安全設(shè)計(jì)人員識(shí)別潛在的安全問(wèn)題并實(shí)施相應(yīng)緩解措施夏跷,也有助于降低開(kāi)發(fā)和后期維護(hù)的成本;如果系統(tǒng)已經(jīng)上線(xiàn)運(yùn)行明未,威脅建牟刍可作為滲透測(cè)試的輔助工作,幫助測(cè)試人員盡可能的發(fā)現(xiàn)所有的漏洞趟妥。
威脅建模的一般流程如下:
與系統(tǒng)架構(gòu)師及設(shè)計(jì)人員溝通猫态,了解設(shè)計(jì)詳情;
使用成熟的威脅建模方法分析當(dāng)前設(shè)計(jì)潛在的安全問(wèn)題披摄;
提出安全建議及對(duì)潛在威脅的緩解措施亲雪;
對(duì)安全設(shè)計(jì)進(jìn)行驗(yàn)證并對(duì)整個(gè)設(shè)計(jì)方案進(jìn)行回顧并再次確認(rèn)。
微軟在過(guò)去的幾年里一直是威脅建模的強(qiáng)有力的倡導(dǎo)者疚膊。他們已經(jīng)將威脅建模作為其SDLC的核心組件义辕,使用的威脅建模方法是STRIDE威脅建模方法。參考鏈接:https://xz.aliyun.com/t/2061
為了便于安全人員快速便捷的進(jìn)行威脅建模酿联,微軟開(kāi)發(fā)基于STRIDE威脅建模方法的SDL Threat Modeling Tool[2]威脅建模工具终息,該工具可以幫助安全人員畫(huà)數(shù)據(jù)流圖、分析威脅贞让、生成并導(dǎo)出威脅建模報(bào)告周崭。
SDL流程框架
SDL的核心理念就是將安全考慮集成在軟件開(kāi)發(fā)的每一個(gè)階段:需求分析、設(shè)計(jì)喳张、編碼续镇、測(cè)試和維護(hù)。從需求销部、設(shè)計(jì)到發(fā)布產(chǎn)品的每一個(gè)階段每都增加了相應(yīng)的安全活動(dòng)摸航,以減少軟件中漏洞的數(shù)量并將安全缺陷降低到最小程度。
安全開(kāi)發(fā)生命周期 (SDL)是側(cè)重于軟件開(kāi)發(fā)的安全保證過(guò)程舅桩,旨在開(kāi)發(fā)出安全的軟件應(yīng)用酱虎。
SDL的安全實(shí)踐要求
1.培訓(xùn)
開(kāi)發(fā)團(tuán)隊(duì)的所有成員都必須接受適當(dāng)?shù)陌踩嘤?xùn),了解相關(guān)的安全知識(shí)擂涛,培訓(xùn)對(duì)象包括開(kāi)發(fā)人員读串、測(cè)試人員、項(xiàng)目經(jīng)理、產(chǎn)品經(jīng)理等恢暖。
2.安全要求(基準(zhǔn))
1)確定安全計(jì)劃排监。在項(xiàng)目確立之前,需要提前與項(xiàng)目經(jīng)理進(jìn)行溝通杰捂,確定安全的要求和需要做的事情舆床。確認(rèn)項(xiàng)目計(jì)劃和里程碑,盡量避免因?yàn)榘踩珕?wèn)題而導(dǎo)致項(xiàng)目延期發(fā)布嫁佳。
2)設(shè)立安全基線(xiàn)和安全分級(jí)挨队。安全基線(xiàn)用于確定安全風(fēng)險(xiǎn)的最低可接受級(jí)別,安全分級(jí)用于定義安全漏洞的嚴(yán)重性閾值脱拼。例如瞒瘸,應(yīng)用程序在發(fā)布時(shí)不得包含具有“關(guān)鍵”或“重要”評(píng)級(jí)的已知漏洞。安全基線(xiàn)和安全分級(jí)一經(jīng)設(shè)定熄浓,便絕不能放松情臭。
3)安全和隱私風(fēng)險(xiǎn)評(píng)估。對(duì)系統(tǒng)可能面臨的威脅赌蔑、存在的弱點(diǎn)俯在、造成的影響,以及三者綜合作用所帶來(lái)風(fēng)險(xiǎn)的可能性的評(píng)估娃惯,量化系統(tǒng)遭受攻擊帶來(lái)的影響或損失的可能程度跷乐。
3.設(shè)計(jì)
1)確定設(shè)計(jì)安全要求。在設(shè)計(jì)階段應(yīng)仔細(xì)考慮安全和隱私問(wèn)題趾浅,在項(xiàng)目初期確定好安全需求愕提,盡可能避免安全引起的需求變更。
2)威脅建模皿哨。為項(xiàng)目或產(chǎn)品面臨的威脅建立模型浅侨,明確可能來(lái)自的攻擊有哪些方面。
3)減少攻擊面证膨。減小攻擊面與威脅建模緊密相關(guān)如输,通過(guò)減小攻擊者利用潛在弱點(diǎn)或漏洞的機(jī)會(huì)來(lái)降低風(fēng)險(xiǎn),減小攻擊面包括:關(guān)閉或限制對(duì)系統(tǒng)服務(wù)的訪(fǎng)問(wèn)央勒,應(yīng)用“最小權(quán)限原則”不见,以及盡可能進(jìn)行分層防御。
4.實(shí)施(開(kāi)發(fā))
1)使用指定的工具崔步。開(kāi)發(fā)團(tuán)隊(duì)使用的編輯器稳吮、鏈接器等相關(guān)工具,可能會(huì)涉及一些安全相關(guān)的環(huán)節(jié)井濒,因此在使用工具的版本上灶似,需要提前與安全團(tuán)隊(duì)進(jìn)行溝通慎陵。
2)棄用不安全函數(shù)。許多常用函數(shù)可能存在安全隱患喻奥,應(yīng)當(dāng)禁用不安全的函數(shù)和API,使用安全團(tuán)隊(duì)推薦的函數(shù)捏悬。
3)代碼靜態(tài)分析(SAST)撞蚕。代碼靜態(tài)分析可以幫助軟件開(kāi)發(fā)人員、質(zhì)量保證人員查找代碼中存在的結(jié)構(gòu)性錯(cuò)誤过牙、安全漏洞等問(wèn)題甥厦,從而保證軟件的整體質(zhì)量。
5.驗(yàn)證(測(cè)試)
1)程序動(dòng)態(tài)分析(DAST)寇钉。動(dòng)態(tài)分析是靜態(tài)分析的補(bǔ)充刀疙,用在程序運(yùn)行時(shí),測(cè)試驗(yàn)證程序的安全性扫倡,也稱(chēng)作“黑箱測(cè)試”谦秧。通過(guò)模擬黑客行為對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)攻擊,分析系統(tǒng)的反應(yīng)撵溃,從而確定該系統(tǒng)是否易受攻擊疚鲤。
2)模糊測(cè)試(Fuzzing Test)。模糊測(cè)試是一種專(zhuān)門(mén)形式的動(dòng)態(tài)分析缘挑,它通過(guò)故意向應(yīng)用程序引入不良格式或隨機(jī)數(shù)據(jù)誘發(fā)程序故障集歇。模糊測(cè)試策略的制定,以應(yīng)用程序的預(yù)期用途语淘,以及應(yīng)用程序的功能和設(shè)計(jì)規(guī)范為基礎(chǔ)诲宇。
3)威脅模型和攻擊面評(píng)析。項(xiàng)目經(jīng)常會(huì)因?yàn)樾枨蟮纫蛩貙?dǎo)致最終的產(chǎn)出偏離原本設(shè)定的目標(biāo)惶翻,因此在項(xiàng)目后期對(duì)威脅模型和攻擊面進(jìn)行評(píng)析是有必要的姑蓝,能夠及時(shí)發(fā)現(xiàn)問(wèn)題并修正。
6.發(fā)布
1)制定事件響應(yīng)計(jì)劃维贺。SDL要求約束的每個(gè)軟件在發(fā)布時(shí)都必須包含事件響應(yīng)計(jì)劃它掂。即使在發(fā)布時(shí)不包含任何已知漏洞的產(chǎn)品,也可能在日后面臨新出現(xiàn)的威脅溯泣。需要注意的是虐秋,如果產(chǎn)品中包含第三方的代碼,也需要留下第三方的聯(lián)系方式并加入事件響應(yīng)計(jì)劃垃沦,以便在發(fā)生問(wèn)題時(shí)能夠找到對(duì)應(yīng)的人客给。
2)最終安全評(píng)析(FSR)。指在產(chǎn)品發(fā)布前肢簿,對(duì)比安全基準(zhǔn)確定產(chǎn)品不符合安全基準(zhǔn)靶剑、缺少功能和其他要求的區(qū)域蜻拨,然后進(jìn)行以下三種決策:
1、通過(guò)FSR桩引。在FSR過(guò)程中確定所有安全和隱私問(wèn)題都已得到修復(fù)或緩解缎讼;
2、通過(guò)FSR但有異常坑匠。在FSR過(guò)程中確定所有安全和隱私問(wèn)題都已得到修復(fù)或緩解血崭,并且/或者所有異常都已得到圓滿(mǎn)解決。無(wú)法解決的問(wèn)題將記錄下來(lái)厘灼,在下次發(fā)布時(shí)更正夹纫。
3、需上報(bào)問(wèn)題的FSR设凹。如果團(tuán)隊(duì)未滿(mǎn)足所有SDL要求舰讹,并且安全顧問(wèn)和產(chǎn)品團(tuán)隊(duì)無(wú)法達(dá)成可接受的折中,則安全顧問(wèn)不能批準(zhǔn)項(xiàng)目闪朱,項(xiàng)目不能發(fā)布月匣。團(tuán)隊(duì)必須在發(fā)布之前解決所有可解決的問(wèn)題,或者上報(bào)高級(jí)管理層進(jìn)行抉擇监透。
3)發(fā)布/存檔桶错。在通過(guò)FSR或者雖有問(wèn)題但達(dá)成一致后,可以完成產(chǎn)品的發(fā)布胀蛮。但發(fā)布的同時(shí)仍需對(duì)各種問(wèn)題和文檔進(jìn)行存檔院刁,為緊急響應(yīng)和產(chǎn)品升級(jí)提供幫助。
7.響應(yīng)
當(dāng)軟件發(fā)布后遭受攻擊時(shí)粪狼,根據(jù)制定的應(yīng)急響應(yīng)計(jì)劃快速采取措施退腥,把事件造成的損失降到最小。這里還可以加入應(yīng)急響應(yīng)演練再榄,以加強(qiáng)公司對(duì)抗信息安全攻擊的能力狡刘。