CISSP EXAM Outline - Domain 8
Software Development Security
軟件開發安全
圖片來源 : sdlc.jpg (1280×720) (wp.com)
8.1 理解安全並將其融入軟件開發生命週期 (SDLC) 中 Understand and integrate security in the Software Development Life Cycle (SDLC)
- 開發方法(例如,Agile、Waterfal、DevOps、DevSecOps) Development methodologies (e.g., Agile, Waterfall, DevOps, DevSecOps)
- Planning : 先寫計劃書, 規劃是為了達標, 變更管理程序&採購管理程序交代清楚
- 計劃書, 當中的軟體採購要注意 CMMI
- 選擇安全的開發方法
- 團隊建立, 整合型的團隊 IPT (Integrate Product Team)
- Analysis : 分析利害關係人需求
- 收集, 分析且要文件化並進行管理
- Need 是講出來的, 寫下來文件化才會成為 Requirement
- 逐項寫下來, User Story 是一個很好的案例
- V&V 內驗外確
- 簽名(確認範圍), 不能再改變, 改變要走變更管理程序
- Design : 設計規格 --> 設計符合需求的書面解決方案
- 從架構設計開始
- 細部設計
- 威脅塑模 (STRIDE) 於此階段發生
- PASTA (Process for Attack Simulation and Threat Analysis) : 攻擊模擬和威脅分析過程, 是一種以風險為中心的方法。 一旦威脅建模過程,PASTA 會帶來對已識別威脅的詳細分析。此模型的目標是識別威脅,枚舉它們並分配分數。 下圖列出了 PASTA 方法的七個步驟:
- Define the Objectives 定義目標
- Define the Technical Scope 定義技術範圍
- Decompose the Application 分解應用程序
- Analyze the Threats 分析威脅
- Vulnerability Analysis 漏洞分析
- Attack Analysis 攻擊分析
- Risk and Impact Analysis 風險和影響分析
- DREAD:威脅分析分數標準, 用於評估已識別威脅的風險敞口。
- 損害(Damage)
- 可再現性(Reproducibility)
- 可利用性(Exploitability)
- 受影響用戶(Affected users)
- 可發現性(Discoverability)
- Development : Prototype 原型
- 軟體環境
- 開發工具 (包含硬體)
- 程式語言 (OOP)
- Design reviews : 設計評審應該在功能和控制規範開發之後但在代碼創建之前進行。
- code review, unit testing, and functional testing : 代碼審查、單元測試和功能測試都發生在代碼創建之後,因此也發生在 [ 設計審查之後 ]。
- Testing : 驗證與測試
- 測試分類 (黑箱, 白箱, 灰箱)
- gray-box test 灰箱測試 : 測試人員從用戶的角度評估軟件,但在進行測試時可以訪問源代碼。
- 測試技術 (Walk-Through)
- Maintenance : 維運
- 職責分離
- 惡意軟體
- 基於啟發式的反惡意軟件 (Heuristic-based antimalware software) : 與基於簽名的方法相比,基於啟發式的反惡意軟件檢測到零日漏洞的可能性更高。 基於啟發式的軟件不需要頻繁的簽名更新,因為它不依賴於監控系統來檢測已知惡意軟件的存在。 這種方法的權衡是它比簽名檢測方法具有更高的誤報率。(說明)
- Stuxnet : 是一種高度複雜的蠕蟲,旨在破壞連接到西門子控制器的核濃縮離心機。第一個對設施造成重大物理損壞的蠕蟲。
- RAD (Rapid Application Development) : 開發團隊快速做出來確定細節和高效方法後,就丟棄這個原型,快速應用程序開發(RAD)專注於快速開發和快速適應不斷變化的需求的能力。
- RAD 使用四個階段:需求規劃、用戶設計、構建和切換。
- 軟件開發的敏捷方法原則 :
- 重視個人和互動勝過流程和工具
- 重視工作軟件勝過綜合文檔
- 重視客戶協作勝過合同談判
- 以及響應變化勝過遵循計劃
- 最大化未完成的工作量是必不可少的
- 圍繞有動力的個人構建項目
- 開發過程中不斷變化的需求
- 持續關注技術卓越
- 瀑布模型正確步驟順序 :
- 需求、設計、編碼、測試和維護。
- 瀑布模型使用七階段方法進行軟件開發,並包含一個反饋循環,允許開發返回到前一階段以糾正在後續階段發現的缺陷。
- 需求
- 設計
- 編碼
- 測試
- 維護
- DevOps model :
- software development 軟件開發
- quality assurance 質量保證
- IT operations IT 運營
- 成熟度模型(例如,能力成熟度模型 (CMM)、軟件保障成熟度模型 (SAMM)) Maturity models (e.g., Capability Maturity Model (CMM), Software Assurance Maturity Model (SAMM))
- CMMI (整合)三種不同能力
- 開發能力
- 服務能力
- 採購能力
- SW-CMM 五個階段
- Level 1、Initial 初始階段
- Level 2、Repeatable 可重複階段
- 引入了基本的生命週期管理流程。開始以有組織的方式重用代碼,並且預計類似項目的可重複結果。此級別的關鍵過程域包括需求管理、軟件項目規劃、軟件項目跟踪和監督、軟件分包管理、軟件質量保證和軟件配置管理。
- Level 3、Defined 統一定義管理流程
- 包括使用需求管理、軟件項目規劃、質量保證和配置管理實踐。
- 使用正式的、文件化的軟件開發過程。
- Level 4、Managed 管理階段
- 組織使用定量測量(quantitative measures)來詳細了解開發過程。
- 軟件質量管理。
- Level 5、Optimized 最佳化
- CMMI 五個階段
- Level 1、Initial 初始階段
- Level 2、Managed 專案經理方法不同 (有專案經理)
- Level 3、Defined 統一定義管理流程
- Level 4、Quantitatively Managed 量化管理
- Level 5、Optimized 最佳化
圖片來源 : SM-CMM & CMMI Level
- 操作與維護 Operation and maintenance
- 變更管理 Change management
- Change Request 是由用戶而不是開發人員發起的, 其他由開發人員發起, 例如變更和發布控制由尋求實施變更的開發人員發起。設計審查是開發人員在完成設計後發起的變更批准過程的一個階段。
- Request Control : 請求控制為用戶提供了一個框架來請求更改,並且開發人員有機會對這些請求進行優先級排序。
- 綜合產品團隊 (IPT) Integrated Product Team (IPT)
- 集成產品團隊 (IPT) 方法彙集了跨職能團隊,由國防部於1990 年代開創開發概念並於 1995 年設計。它是敏捷方法論的前身,它使用諸如 scrum 方法和用戶故事之類的工具來進行軟件開發工作。
8.2 在軟件開發環境中識別和應用安全控制 Identify and apply security controls in software development ecosystems
- 編程語言 Programming languages
- 函式庫 Libraries
- Code libraries : 代碼庫是可重用功能的包,可以合併到單獨的開發項目中。
- 成套工具 Tool sets
- 集成開發環境 (IDE) Integrated Development Environment (IDE)
- 集成開發環境 (IDE) 是開發人員用來創建軟件的工具。
- 運行時間 Runtime
- 持續集成和持續交付 (CI/CD) Continuous Integration and Continuous Delivery (CI/CD)
- 安全編排自動化與響應 (SOAR) Security Orchestration, Automation, and Response (SOAR)
- 透過分析收集自 SIEM 的 Log 後提供自動化的劇本響應。這就是安全編排、自動化和響應 (SOAR) 平台的領域。
- 軟件配置管理 (SCM) Software Configuration Management (SCM)
- 代碼存儲庫 Code repositories
- 應用程序安全性測試(例如,靜態應用程序安全測試 (SAST)、動態應用程序安全測試 (DAST)) Application security testing (e.g., Static Application Security Testing (SAST), Dynamic Application Security Testing (DAST))
- 傳遞審查(Pass-Aroud):傳遞審查通常通過電子郵件或使用中央代碼審查系統完成,允許開發人員異步審查代碼, 例如開發人員時間無法互相配合時使用。
- dynamic application security testing (DAST) : 用於驗證代碼的正確實現。
- 用戶驗收測試 (UAT) 通常是測試過程的最後階段。它驗證開發的解決方案是否滿足用戶需求,並根據用例對其進行驗證。單元測試、集成測試和系統測試都是在 UAT 之前的過程中進行的。
- 動態應用程序安全工具(DAST)通過實際執行代碼來進行測試。模糊測試和 Web 應用程序漏洞掃描都是這種情況。
8.3 評估軟件安全的有效性 Assess the effectiveness of software security
- 更改審核和記錄 Auditing and logging of changes
- Release control 發布控制 : 發布控制過程的職責之一是確保該過程包括驗收測試,以確認在代碼發布之前對最終用戶工作任務的任何更改都已被理解並正常運行。 請求控制、變更控制和配置控製過程不包括驗收測試。
- CAB (change advisory board) : 變更顧問委員會,目的是審查然後批准或拒絕提議的代碼變更。CAB 通常不參與批准開發人員證書、舉辦經驗教訓會議或確定軟件開發工作的優先級。
- 風險分析和緩釋 Risk analysis and mitigation
- Assurance : 描述軟件沒有漏洞的信心水平,無論是故意設計到軟件中還是在其生命週期的任何時間意外插入,並且軟件以預期的方式運行。這是一個通常用於軍事和國防環境的術語。
8.4 評估獲得軟件對安全的影響 Assess security impact of acquired software
- 商業成品 (COTS) Commercial-off-the-shelf (COTS)
- 商業現貨軟體, 遇到漏洞要請廠商修補
- DynamoDB : Amazon DynamoDB 是一個全受管、無伺服器、鍵值NoSQL 資料庫,能以任何規模執行高效能應用程式,具有內建安全、持續備份和自動多區域複寫功能。
- 開源 Open source
- 第三方 Third-party
- 軟件開發工具包 (SDK) 是可用於幫助開發人員創建代碼的代碼庫和其他工具。
- 託管服務(例如,軟件即服務 (SaaS)、基礎架構即服務 (IaaS)、平台即服務 (PaaS)) Managed services (e.g., Software as a Service (SaaS), Infrastructure as a Service (IaaS), Platform as a Service (PaaS))
- object storage : 例如 S3, 是一種 Iaas 服務
8.5 定義並應用安全編碼準則和標準 Define and apply secure coding guidelines and standards
- 源代碼級安全弱點和漏洞 Security weaknesses and vulnerabilities at the source-code level
- Inference 推理 : 透過較低級別的信息來推斷出更敏感的信息,當攻擊者可以將不太敏感的信息匯總在一起並使用它們來獲取更高敏感度的信息時,就會出現推理問題。
- 多實例化 Polyinstantiation:多實例化允許一個關係包含具有相同主鍵的多行;多個實例通過它們的安全級別來區分。在數據庫中以不同的分類級別存儲多個不同的信息,以防止攻擊者針對數據庫推理 Inference 攻擊的防護。
- Polymorphic viruses : 多態病毒每次感染系統時都會發生變異,它們會通過調整代碼來幫助它們避開簽名檢測機制。修改被病毒感染的每個系統上的惡意代碼。
- Content-dependent : 內容相關的訪問控制側重於每個字段的內部數據。用於關注字段存儲的數據。
- 應用編程接口 (API) 安全 Security of Application Programming Interfaces (APIs)
- 安全編碼實踐 Secure coding practices
- SQL Injection 防護方式
- Escaping 逃跑
- Parameterization 參數化
- Limiting database permissions 限制資料庫權限
- 於使用者端限制的方式都是不好的與沒用的, 因為可以繞過
- Lost updates 丟失更新 : 當一個事務向數據庫寫入一個值,該值覆蓋了具有較早優先級的事務所需的值時,就會發生丟失更新,從而導致這些事務讀取不正確的值。
- Dirty reads 髒讀 : 當一個事務從另一個未提交的事務寫入的數據庫中讀取一個值時
- Incorrect summaries 不正確的摘要 : 當一個事務使用聚合函數來匯總存儲在數據庫中的數據而第二個事務正在修改數據庫時,會出現不正確的摘要,從而導致摘要包含不正確的信息。
- ˂script˃alert('Alert');˂/script˃ : 這是一種非常典型的 Cross-site scripting(XSS)攻擊, 跨站點腳本使用反射輸入來欺騙用戶的瀏覽器執行來自受信任站點的不受信任的代碼。
- logic bomb 邏輯炸彈 : 在滿足特定條件之前處於休眠狀態的惡意代碼。
- 攻擊者在公共討論論壇上發布了一條消息,該消息包含一個嵌入式惡意腳本,該腳本不顯示給用戶,但在用戶系統讀取時會執行。這是惡意用戶通過使用第三方站點誘使受害者的 Web 瀏覽器執行腳本的攻擊稱為跨站點腳本 (XSS) 攻擊。這種特殊的攻擊是一種持久的 XSS (Persistent XSS)攻擊,因為它會一直保留在論壇上,直到管理員發現並刪除它,從而使其能夠影響許多用戶。
- 跨站點腳本 (XSS) 攻擊可以利用在 Web 應用程序中使用反射輸入(reflected input),其中一個用戶提供的輸入顯示給另一個用戶。
- 跨站點跟踪 (XST) 利用 HTTP TRACE 或 TRACK 方法,可用於通過跨站點腳本 (XSS) 竊取用戶的 cookie。
- 跨站點請求偽造(XSRF 或 CSRF)攻擊通過嘗試強制將經過身份驗證的請求提交給第三方站點來利用站點在用戶瀏覽器中的信任。
- Session hijacking : 會話劫持攻擊試圖竊取以前經過身份驗證的會話,但不強制瀏覽器提交請求。屬於一種重放攻擊。
- Aggregate functions 聚合函數 : 聚合函數匯總大量數據並因此僅提供匯總信息。 如果精心設計,聚合函數可能會無意中洩露敏感信息。導致正常用戶超出其正常權限級別的信息的訪問權限。聚合函數匯總大量數據並因此僅提供匯總信息。
- 巨集病毒(macro virus) : 是一種使得應用軟體的相關應用文件內含有被稱為巨集的可執行代碼的病毒。一個電子表格程式可能允許使用者在一個文件中嵌入「巨集命令」,使得某種操作得以自動執行;同樣的操作也就可以將病毒嵌入電子試算表來對使用者的使用造成破壞。
- TOC/TOU (Time of Check to Time of Use) : 檢查時間到使用時間 (TOC/TOU) 攻擊利用了系統驗證授權與軟件使用該授權執行操作之間的時間差異。這是競爭條件攻擊的一個例子。
- 當來自較高分類級別的數據與來自較低分類級別的數據混合時會出現汙染(Contamination)數據庫安全風險。污染是來自較高分類級別和/或需要知道的要求的數據與來自較低分類級別和/或需要知道的要求的數據的混合。
- 多方病毒(Multipartite viruses)使用兩種或多種傳播技術(例如,文件感染和引導扇區感染)來最大化其影響範圍。
- APT攻擊與零日攻擊的關係最為密切。
- stored procedures : Web 應用程序的開發人員應該利用數據庫存儲過程來限制應用程序執行任意代碼的能力。對於存儲過程,SQL 語句駐留在數據庫服務器上,並且只能由數據庫管理員修改。
- SCAP 安全內容自動化協定(Security Content Automation Protocol)是用於自動化漏洞管理、評估和條款符合檢測的一套標準,協定組成如下六個 :
- CVE : 通用漏洞披露
- CCE : 通用組態評估
- CPE : 通用平台評估
- CVSS : 通用漏洞評分系統
- XCCDF : 可擴展配置清單描述格式
- OVAL : 開放漏洞評估語言
- 軟件定義安全 Software-defined security
- 範例 : 軟件開發項目將組織的網絡操作推送與軟件開發流程集成在一起。
Neural networks : 神經網絡試圖使用複雜的計算技術來模擬人類思維的行為。
Knowledge banks : 知識庫是專家系統的一個組成部分,旨在捕獲和重新應用人類知識。
Decision support systems : 決策支持系統旨在為執行標準程序的人員提供建議,並且通常由專家系統驅動。
數據挖掘(Data mining) : 使用數學方法來分析數據,尋找預測未來活動的模式。
專家系統決策過程的基礎構成信息 : 專家系統使用由一系列“if/then”語句組成的知識庫,根據人類專家以前的經驗形成決策。
Owner and Balance : attributes of that class. Class 的屬性
AddFunds and RemoveFunds : methods of the class. Class 的方法
../../ : URL 表示法為 %252E%252E%252F%252E%252E%252F
- . : %252E
- / : %252F
../../../../../../../../../etc/passwd : 是一種目錄遍歷攻擊(directory traversal attack)的特徵,攻擊者試圖強制 Web 應用程序向上導航文件層次結構並檢索通常不應提供給 Web 用戶的文件,例如密碼文件。這一系列“雙點”表示目錄遍歷攻擊,因為它是用於引用層次結構中上一級目錄的字符串。
Table :
- 欄 學術 Field ( 口語 Attribute),很多欄叫做 Degree 度量
- 列 學術 Tuple(口語 Record),很多列叫做 Cardinality 基數
- 欄 (Colunm / Field -> Attribute)
- 列 (Row / Record -> Tuple)
- 有幾欄稱為 degree
- 有幾筆(列) Record 稱為 cardinality
圖片來源 : https://i0.wp.com/wentzwu.com/wp-content/uploads/2020/05/RDBMS-Table.jpg?ssl=1
- 單引號字符 ( ' ) 用於 SQL 查詢,必須在 Web 表單上小心處理以防止 SQL 注入攻擊。
- int myarray[10];
- myarray[10] = 8;
- 這是特定類型的緩衝區溢出(buffer overflow)的示例,稱為非一錯誤。代碼的第一行定義了一個由 10 個元素組成的數組,編號從 0 到 9。第二行代碼嘗試在數組的第 11 個元素中放置一個值(請記住,數組計數從 0 開始!),這會導致溢出。
- 對緩衝區溢出攻擊的最佳保護是服務器端輸入驗證。
此技術將用戶輸入限制在適合分配緩衝區的已批准值範圍內。
- PERT charts : PERT 圖使用節點來表示里程碑或可交付成果,然後顯示在里程碑之間移動的估計時間。範例如下圖
- 數據庫事務管理員則 (database transaction management principle) :
- 原子性 Atomicity : 如果事務的任何一部分失敗, 整個事務都會被回滾, 就像沒發生一樣, "要就全有, 不然就全無"
- 一致性 Consistency : 所有事務都必須在與數據庫所有規則一致的環境中開始操作, 其它任何事務都不能利用某個事務執行期間可能產生的任何不一致數據
- 隔離 Isolation : 確保兩個事務在對相同數據進行操作時不會相互干擾, 能夠防止一個事務處理另一個事務中途生成的無效數據
- 耐用持久性 Durability : 數據庫通過使用備份機制(例如事務日誌)確保持久性
- 多實例化(Polyinstantiation) : 允許同一個表中的兩個或多個行看起來具有相同的主鍵元素,但包含用於不同分類級別的不同數據
- DataBase 中任何主鍵(primary key)也是候選鍵(candidate key)
ISC2 連結 : CISSP Exam Outline (isc2.org)
留言
張貼留言