[問題諮詢] 006 後端工程師該如何學習防禦技巧,以 SSDLC 為例

飛飛 | 2023-05-25

問題

如果想入門紅隊到進階大概要讀哪些材料的東西,我主要目的是防禦,而非入侵. 但是要會防禦,要知道如何入侵,我本身是後端開發工程師. 但這方面知識有點缺乏,之前有說想說可以透過考證照入門,但上課加考照費用太多了。

後端程式碼是 Java、框架是Spring Boot,防禦目標主要是個人設備,進階才是公開的網站。

回復

針對開發工程師,我通常建議閱讀 SSDLC 相關的內容,SSDLC 為安全的開發流程:

SSDLC(Secure Software Development Lifecycle)是一種安全的開發流程,旨在軟體開發生命周期的各個階段中,以安全為主導進行設計、開發、測試和部署。

開發工程師,如果透過 SSDLC,可以在自己開發的軟體、網站加入安全性的考量,也有助於降低被攻擊的風險。

SSDLC 的主要流程如下:

  1. 需求階段
  2. 設計階段
  3. 撰寫程式碼階段
  4. 測試階段
  5. 部署階段

每一個階段該注意的事情,我在底下分析給大家參考:

需求階段

確認軟體開發需求,"通常" PM 會告訴你需求,然後開發,但有時候隕石開發該怎麼辦?

◇ 在這裡跟大家建議,先確認整體 "資料流向" 再確認目前這些資料 "誰可以瀏覽、新增、刪除、修改",可以優先確認整體的 "權限" 問題。

為什麼這樣建議
我們在攻擊過程當中,無法被自動化弱點掃描找到的漏洞是 "程式邏輯" 相關的漏洞,最難防禦、影響最大的也是 "程式邏輯" 漏洞。

漏洞名稱包含 IDOR(權限控管相關的漏洞)、還有商業邏輯漏洞。

還需要確認什麼
你撰寫的程式,是否有【合規性的要求】:

  1. 如信用卡、金融卡,需要符合 PCI DSS 的標準,保護信用卡使用者的安全與保密需求。
  2. 金融單位合規,如《金融機構辦理電腦系統資訊安全評估辦法》
  3. 教育部委外辦理或補助建置維運伺服主機及應用系統網站資通安全及個人資料保護管理要點

設計需求

這個階段不外乎會繪製 UML 以及使用者等設計圖
也會透過透過威脅建模、風險評估,來設計安全架構。

威脅建模

  1. 哪些類型的攻擊可能對我們的系統造成危害?例如,網路攻擊、惡意軟體、內部威脅等。
  2. 哪些資產可能會被攻擊者盜取、損壞或破壞?例如,敏感客戶資料、財務資訊、知識產權等。
  3. 哪些漏洞可能被攻擊者利用來入侵系統?例如,弱密碼、未更新的軟體、網站注入漏洞等。
  4. 攻擊者可能會利用哪些方法來進入系統?例如,社交工程、網路釣魚、漏洞掃描等。
  5. 攻擊者可能會使用哪些工具或技術來發動攻擊?例如,網路滲透測試工具、惡意程式碼等。
  6. 攻擊者的能力和資源如何?例如,是否是有組織的犯罪團伙、國家支持的駭客、單一駭客等。
  7. 攻擊者的意圖是什麼?例如,竊取資訊、勒索贖金、破壞系統等。
  8. 什麼是最高風險的攻擊場景?例如,攻擊者成功取得了系統管理權限、大規模的數據洩露等。

撰寫程式碼階段

  1. 撰寫程式碼的過程
    • 根據需求撰寫安全功能
    • 紀錄所有第三方套件的版本
    • 不任意使用來路不明的工具
  2. 使用 ChatGPT 也要小心敏感資料外洩
  3. 常見的輸入輸出內容也需要注意
  4. 每一個模組都需要進行測試

測試階段

  1. 漏洞掃描(弱點掃描)
  2. 滲透測試

上線階段

  1. 部署過程要注意測試伺服器與正式伺服器
  2. 測試資料庫與正式資料庫
  3. .git 相關安全
  4. 監控上線
    • log 監控
    • 性能監控