SSDLC實踐:安全設(shè)計評審
前言
軟件設(shè)計處于軟件工程中的核心地位,開發(fā)不管采用何種開發(fā)模式,都離不開軟件設(shè)計。當(dāng)需求分析完成后進(jìn)入設(shè)計階段,設(shè)計的好壞直接影響著軟件的質(zhì)量。好的設(shè)計方案能夠讓團(tuán)隊有一個清晰的愿景和路線圖,作為技術(shù)領(lǐng)導(dǎo)力讓整個團(tuán)隊更容易協(xié)作。設(shè)計方案的制定需要多方參與,需要網(wǎng)絡(luò)工程師、架構(gòu)師、數(shù)據(jù)庫管理員、安全等角色多方評審,確保功能需求、非功能需求和約束能夠被滿足,好的設(shè)計是開發(fā)出高質(zhì)量軟件的基礎(chǔ)。
設(shè)計、架構(gòu)與安全
從軟件開發(fā)生命周期的角度,軟件設(shè)計可以看作是從軟件需求規(guī)格說明書出發(fā),根據(jù)需求分析階段確定的功能,設(shè)計軟件系統(tǒng)的整體結(jié)構(gòu)、劃分功能模塊、確定每個模塊的實現(xiàn)算法等內(nèi)容,形成軟件的具體方案,從整體到局部,從概念設(shè)計到詳細(xì)設(shè)計。軟件設(shè)計的工作包括:應(yīng)用架構(gòu)設(shè)計、網(wǎng)絡(luò)架構(gòu)設(shè)計、接口設(shè)計、角色權(quán)限設(shè)計、流程設(shè)計、數(shù)據(jù)庫設(shè)計、界面設(shè)計等。
所有的架構(gòu)都是設(shè)計,但并非所有設(shè)計都是架構(gòu)。設(shè)計方案需要考慮到成本、許可協(xié)議、技術(shù)戰(zhàn)略、兼容性、用戶習(xí)慣。產(chǎn)品經(jīng)理糾結(jié)于用戶需要什么功能,卻比較少關(guān)注非功能需求和約束,往往會模糊地給出“快、穩(wěn)定、安全”的主觀要求。安全作為方案評審中的重要角色,需要評估復(fù)雜又抽象的方案,要求比較高的綜合能力,確保安全風(fēng)險可防可控的情況下滿足實際業(yè)務(wù)需求。
應(yīng)用架構(gòu)設(shè)計
應(yīng)用架構(gòu)關(guān)注的是宏觀結(jié)構(gòu),其含義是把軟件從結(jié)構(gòu)上分解為多個通過一定關(guān)系聯(lián)系的構(gòu)件,常見的應(yīng)用架構(gòu)是兩層架構(gòu)和三層架構(gòu)。
兩層架構(gòu)分為應(yīng)用層和數(shù)據(jù)層,應(yīng)用層承擔(dān)信息展示及邏輯處理,數(shù)據(jù)層負(fù)責(zé)數(shù)據(jù)存儲和管理。圖示如下:
三層架構(gòu)分為表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)層,表示層承擔(dān)信息的輸入輸出和展示,業(yè)務(wù)邏輯層承擔(dān)業(yè)務(wù)處理,數(shù)據(jù)層承擔(dān)數(shù)據(jù)的存儲和管理。圖示如下:
通常來說,三層架構(gòu)比兩層架構(gòu)安全,不同分層直接的訪問需要進(jìn)行身份驗證,如業(yè)務(wù)邏輯層驗證表示層的用戶賬號密碼,數(shù)據(jù)層驗證業(yè)務(wù)邏輯層的數(shù)據(jù)庫賬號密碼。三層架構(gòu)的業(yè)務(wù)邏輯層承擔(dān)對用戶數(shù)據(jù)和權(quán)限的校驗,合理的接口設(shè)計可以將大部分非法請求拒絕。接口設(shè)計需要考慮防重放攻擊、防數(shù)據(jù)篡改、防信息泄露、防未授權(quán)訪問、防程序化攻擊(爬蟲、條件競爭)等風(fēng)險,可以通過時間戳timestap+簽名sign+token+ssl的常見技術(shù)來對接口進(jìn)行安全設(shè)計。
網(wǎng)絡(luò)架構(gòu)設(shè)計
網(wǎng)絡(luò)上按照區(qū)域通常分為內(nèi)網(wǎng)、外網(wǎng)和DMZ區(qū)域,內(nèi)網(wǎng)主要是辦公區(qū)、管理區(qū)、數(shù)據(jù)存儲區(qū)和專用區(qū),比如銀行的現(xiàn)金業(yè)務(wù)和非現(xiàn)金業(yè)務(wù)需要隔離,需要設(shè)置專用區(qū),外網(wǎng)主要是客戶和合作伙伴、DMZ是內(nèi)外網(wǎng)之間的緩沖區(qū)。如下是常見的web應(yīng)用網(wǎng)絡(luò)架構(gòu)設(shè)計:
在進(jìn)行安全設(shè)計時需要考慮到不同網(wǎng)絡(luò)區(qū)域的安全級別不同,比如DMZ區(qū)是不安全的區(qū)域,不能保存敏感業(yè)務(wù)數(shù)據(jù),外網(wǎng)文件傳入內(nèi)網(wǎng)需要進(jìn)行病毒掃描,內(nèi)網(wǎng)文件上傳到外網(wǎng)需要進(jìn)行敏感信息檢測,另外一些特殊應(yīng)用需要劃分VLAN,達(dá)到邏輯隔離的目的。
角色權(quán)限設(shè)計
應(yīng)用的角色權(quán)限設(shè)計需要滿足兩個原則:最小權(quán)限和職責(zé)分離。每個角色應(yīng)該有明確的職責(zé),只能分配必要的權(quán)限,權(quán)限需細(xì)化到讀、寫、刪除、執(zhí)行等具體操作,這樣可以避免過分授權(quán)。重要的操作需要分解為兩人以上執(zhí)行,降低不當(dāng)操作帶來的風(fēng)險。比如數(shù)據(jù)錄入角色只能寫數(shù)據(jù),數(shù)據(jù)復(fù)核角色只能讀復(fù)核的數(shù)據(jù),不能修改。另外系統(tǒng)默認(rèn)賬戶角色需禁用,特權(quán)賬戶角色需開啟雙因素認(rèn)證,避免密碼丟失或默認(rèn)密碼帶來的安全風(fēng)險。
通過限制不同用戶的權(quán)限可以有效降低攻擊面。
流程設(shè)計
業(yè)務(wù)流程設(shè)計上需要避免常見的業(yè)務(wù)安全風(fēng)險,如賬號注冊流程如果不對用戶的信息進(jìn)行嚴(yán)格驗證可能出現(xiàn)羊毛黨批量注冊養(yǎng)號風(fēng)險,登錄流程可能出現(xiàn)撞庫、暴力破解風(fēng)險,支付流程可能出現(xiàn)虛假交易、洗錢套現(xiàn)風(fēng)險,營銷活動流程可能出現(xiàn)黃牛屯號、薅羊毛風(fēng)險。業(yè)務(wù)流程設(shè)計需要考慮到各種可能出現(xiàn)的場景,結(jié)合目前黑灰產(chǎn)的特點對薄弱環(huán)節(jié)進(jìn)行加強(qiáng),提高攻擊者成本。
其他設(shè)計如數(shù)據(jù)庫設(shè)計需要做好數(shù)據(jù)庫的分離,數(shù)據(jù)庫用戶權(quán)限需做好設(shè)置,避免應(yīng)用系統(tǒng)使用root用戶訪問數(shù)據(jù)庫。界面設(shè)計需要避免一些不安全的功能界面,如執(zhí)行自定義sql語句、shell命令的調(diào)試功能等。
安全設(shè)計檢查表
安全設(shè)計評審需要投入大量人力,而且周期很長,需要不斷的訪談,收集信息,項目的需求文檔,架構(gòu)設(shè)計圖,流程圖等,而常見的安全設(shè)計問題是可以通過匯總形成checklist然后逐項檢查的,checklist包括身份認(rèn)證、權(quán)限控制、日志處理、數(shù)據(jù)驗證、數(shù)據(jù)加密、數(shù)據(jù)簽名等檢查項,以下是部分示例:
安全設(shè)計檢查表可以幫助評審人員快速對設(shè)計方案進(jìn)行檢查,但缺失針對性,無法做到個性化定制,因此只能作為過渡,還需要進(jìn)一步探索更貼近業(yè)務(wù)的評審方式。
威脅建模
目前免費的威脅建模工具多數(shù)是客戶端軟件,如微軟和owasp都推出了威脅建模工具,缺點是只能單機(jī)安裝,不利于團(tuán)隊協(xié)作,另外英文的威脅描述和安全控制方案很不友好,無法直接推送給產(chǎn)品經(jīng)理和架構(gòu)師做方案設(shè)計參考。
最終基于web前端技術(shù)實現(xiàn)了在線威脅建模,可以針對不同的業(yè)務(wù)線定制安全威脅庫和消減威脅建議庫,實現(xiàn)針對性的安全設(shè)計評審。這里沒有嚴(yán)格按照微軟的威脅建模方法,而是基于團(tuán)隊的習(xí)慣進(jìn)行應(yīng)用架構(gòu)、業(yè)務(wù)流程和角色權(quán)限的威脅分析,如下示例:
黃色標(biāo)識資產(chǎn),紅色標(biāo)識威脅,綠色標(biāo)識安全控制措施
應(yīng)用架構(gòu)威脅分析:
業(yè)務(wù)流程威脅分析:
角色權(quán)限威脅分析:
最終匯總的威脅分析結(jié)論如下:
總結(jié)
安全設(shè)計評審是SSDLC的重要環(huán)節(jié),雖然有威脅建模工具可以輔助分析,但這些工具多是國外的,威脅庫的設(shè)計和描述對國內(nèi)用戶很不友好,而且作為單獨的軟件無法與其他版本管理工具集成。將威脅建模過程進(jìn)行適當(dāng)改動可有效地落地安全設(shè)計評審活動,將威脅建模分析可視化、規(guī)范化,后續(xù)的安全測試環(huán)節(jié)也可以參考?xì)v史的評審結(jié)論進(jìn)行針對性測試。