果核分享實用方案,助力打造通暢無礙的軟體安全開發流程
有鑑於資安攻擊態勢越演越烈,程式碼漏洞屢屢成為駭客入侵管道,近年各界提倡 Security by Design 概念。為此,果核數位軟體開發安全部資安顧問林秉正日前以「在軟體安全開發流程中我們還能一起做什麼?」為題發表演說,從人、流程與技術各種面向,闡釋當軟體開發流程導入安全時可能面臨的挑戰與解方。
原碼檢測非簡單任務,須思考趨吉避凶之道
談到軟體開發, 以往奉軟體開發生命週期(SDLC)為圭臬,循序落實從需求、設計、開發、測試、部署到維護各階段的執行要項,以確保軟體品質與如期交付。惟考量 SDLC 缺乏安全元素,後來才有 SSDLC( Security Software Development Lifecycle)出現。林秉正指出,SSDLC 同樣在各階段都有執行要項。如需求階段,先確認內外部安全需求,再據此實施資產盤點、威脅建模、建立安全控制措施、建立安全設計準則。在開發階段,應遵循 Secure Coding Standard,抑或參考 OWASP TOP10 安全風險。
在測試階段, 務求實踐 S e c u r e Co d e Review,透過 SAST、DAST 等靜態或動態安全測試,驗證安全需求是否被滿足。在部署階段,重點為安全部署,將用不到的防火牆埠悉數關掉,依循最小權限原則做相關設定。在維護階段,除定期更新與修補外,也藉由持續監控來確保系統正常運行。
環顧前述要項,SAST 原碼檢測可謂重中之重,深究其涵義,便是幫忙分析原始碼或編譯過的程式碼版本,發掘安全議題。依許多開發人員的認知,原碼檢測很簡單,「放著讓它跑一下就好了」,後續弱點修補亦非難事;心想最後憑藉零弱點的原碼檢測報告,可望將其軟體賣進資安要求等級較高的產業,坐享龐大商機。但現實往往不是如此美好,舉凡跑檢測長達 10 個小時最終 Fail、弱點修補遲未完成⋯等悲劇一再上演。持平而論, 原碼檢測工具有諸多優點, 像是可輕易檢測出 SQL injection、Hardcoded Password 等常見弱點,可透過報告內容協助工程師修補弱點。但也不乏缺點,例如大量誤報,及難以辨識身份驗證或存取控制等類型弱點。因此我們要思考的重點,便是如何在工具限制下仍可發揮優點,並透過適當手段來抑制缺點造成的影響。
建立自動檢測平台,循序落實定期掃描與安全左移
接下來林秉正分享一些案例,闡述如何正確地使用原碼檢測工具。案例一「檢測標的與部署不同包原始碼」,A 公司委託 B 公司開發系統,要求產品交付時附上原碼檢測報告並為零弱點;因A 公司有 SAST 工具,故大方協助 B 公司掃描原碼且不限次數。但在此運作條件下,仍發生功能異常。癥結在於當程式碼變動,按理應重新檢測,但此例卻直接上到正式環境。如何解決?方法很簡單,僅需調整流程,要求變動的程式碼重新接受檢測,但需克服上線時程延宕的風險。
案例二「球員兼裁判」,某公司自行開發系統,參與角色含開發人員、資管人員、內部資安人員與外部資安顧問。開發人員完成開發後在自己電腦做檢測,若發現有弱點需排除,便與外部顧問做確認,確認完便於自己電腦排除弱點,接著產出報告、走上版流程,再由資安人員做弱點審查,確保開發人員和外部顧問溝通內容及排除理由均符合公司規範;如果沒有問題,最後由資管人員協助申請部署到正式環境。無奈運作一段時間後發生問題,癥結在於開發人員身兼檢測、弱點排除、產製報告等任務,一來恐因檢測過程耗費設備資源,影響其執行開發工作,二來權限過度集中於開發人員,假使他有心製造一份零弱點報告,其實不難。林秉正建議做以下調整。首先新增一個平台負責檢測與報告產生,開發人員須登入此平台並上傳程式碼,爾後平台就自動化執行檢測及產出報告。其次移除開發人員過多權限,將弱點排除任務轉交資管人員執行。
案例三為「低效弱點處理及缺乏審核機制」。情節和角色類似案例二,唯一不同在於案場歷史較久、規模較大,因此整包原碼大到 5GB 之譜,相對弱點數量亦較多,亟有效處理弱點,且其中簽核流程的審查機制須到位,否則無法確保整體安全性。論及相應的解方,第一先解決「低效處理弱點」,在檢測任務完成時,自動將檢測結果轉為 Excel 格式,便於後續執行批次處理作業,且 Excel 由系統產生,意謂開發人員不需費時整理弱點。而 Excel 的內容除呈現弱點資訊外,還增添欄位,讓開發人員、外部顧問或其他相關人員填寫其說明或意見,也搭配 Checksum 檢核碼機制,確保這些內容的完整性。再來解決「缺乏審核機制」,在開發人員與資安人員之間新增一道關卡,由開發主管做相關審核,才由資安人員做最終簽核,當簽核完成後Excel 就匯入平台,由平台自動化執行弱點排除,等於直接解放一個人力。這番調整,使整體流程更有效率,讓相關人員更專注在實際的弱點處理,而非花費大量時間在處理誤判。林秉正指出,綜合上述案例,果核協助用戶實現平台自動化檢測、自動化產生弱點編修檔、自動化弱點排除作業、弱點編修軌跡的完整性等價值。但他強調這些方案未必最完美,只是因應個案當下情況及擁有的資源,協調出來的解決之道。
展望後續還有一些其他措施,可望促使原碼檢測機制精益求精,包括定期掃描、安全左移(在更早階段執行檢測),及將原碼檢測整合到 CI Pipeline,以提高自動化比例。