Sei Cert:c++ Coding Standard@2016

SEI CERT C++ 編碼標準 2016 年版 – 主要論點解析

本文件為 SEI CERT C++ 編碼標準 2016 年版的前言部分,旨在介紹此標準的核心目標、範圍、使用者、組織方式以及其在軟體開發安全中的重要性。其主要論點可歸納如下:

  1. 標準的核心目標與價值:

    • 目的: 建立 C++ 語言的安全編碼規則,目標是開發安全、可靠和穩固的系統。
    • 方法: 透過消除可能導致未定義程式行為和可被利用漏洞的未定義行為來實現。
    • 意義: 遵循此標準是確保 C++ 軟體安全、可靠和穩固的必要(但非充分)條件。應用此標準將有助於開發出高品質、強健且能抵抗攻擊的系統。
    • 必要性: 一份文件完善且可強制執行的編碼標準對於 C++ 開發至關重要,它鼓勵開發者遵循一套統一的規則,而非個人偏好。
  2. 標準的範圍:

    • 主要針對版本: 主要針對 ISO/IEC 14882-2014 定義的 C++14 版本。
    • 兼容性: 其規範也可應用於較早的 C++11 版本,標準會註明不同版本間的差異。
    • 優先級: 標準優先支援使用 C++14 的新程式碼開發,其次是使用 C++11 的舊程式碼修復。對舊編譯器的支援是在不損害其他優先級的前提下進行。
    • 不涵蓋範圍: 標準不涉及主觀的「編碼風格」問題,也不包含缺乏廣泛共識的「爭議性規則」。
  3. 標準的目標使用者:

    • 主要對象: C++ 程式開發人員,特別是那些構建高可靠性、強健且能抵抗攻擊的系統的開發者。
    • 其他使用者: 軟體採購方可使用本標準來定義軟體的要求。對 C 程式開發者也有部分參考價值(因 C++ 基於 C)。
  4. 標準的使用方式:

    • 提升能力: 透過提高開發者的知識、實踐和工具水平來增強軟體安全性。
    • 制定規範: 可用於開發專案或組織的客製化編碼標準,確保方法一致性,並可擴展組織特定的規則(但必須遵守本標準規則才能聲明符合性)。
    • 評估與選型: 可用於符合性測試以及工具(如靜態分析工具)的選型與驗證。
    • 教育與培訓: 可用於開發培訓材料,教育軟體專業人員正確應用編碼標準。
  5. 標準的組織結構與內容:

    • 章節劃分: 標準包含多個章節,每個章節涵蓋特定主題區域的規則,後附有附錄(參考書目、定義、相關指南、風險評估)。
    • 規則結構: 每條規則具有唯一識別碼(由章節助記符、數字和語言後綴組成,數字 00-49 為建議,50-99 為規則)、標題、描述、非違規示例、符合規範的解決方案、風險評估、相關指南和參考書目。
    • 規則與建議: 標準區分「規則」(Rules) 和「建議」(Recommendations)。規則的違反可能導致缺陷或可利用漏洞,並通常可透過工具或人工檢查確定符合性。建議則旨在改進程式碼品質,違反建議不一定表示存在缺陷。本版標準未包含建議部分。
  6. 與 CERT C 標準的關係:

    • 繼承性: C++ 基於 C,因此本標準與 CERT C 編碼標準有顯著重疊。
    • 補充性: 本標準著重於 CERT C 未完全涵蓋的 C++ 特性,並對部分 CERT C 規則進行了擴展。
    • 適用性: 除明確列出的不適用規則外,CERT C 編碼標準的內容原則上也適用於 C++ 程式碼。
  7. 工具選型與符合性測試:

    • 自動化: 由於程式規模和複雜性,強烈建議使用靜態分析工具輔助規則檢查。
    • 編譯器: 應盡可能使用符合 C++ 標準的編譯器。
    • 工具限制: 靜態分析無法完全確定符合性,可能存在誤報 (false positives) 和漏報 (false negatives),應盡量減少兩者。
    • 符合性: 程式碼必須不包含本標準規則的任何違規(已記錄並接受偏離的情況除外)才能聲明符合性。符合性可分級(L1、L2、完全符合)。
    • 偏離程序: 允許在特定情況下偏離規則,前提是能證明不會導致漏洞,且偏離原因非僅為效能或可用性。
  8. 軟體系統品質:

    • 主要目標: 提升軟體的安全、可靠性和穩固性。
    • 其他考慮: 同時關注可移植性、可用性、可維護性、可讀性和效能等屬性。
    • 相互作用: 這些屬性通常相互關聯,例如可讀性有助於可維護性,資源管理影響可靠性和安全性。效能和安全性常需權衡。
  9. 自動生成程式碼的處理:

    • 工具驗證: 對於程式碼生成工具,需要進行選型和驗證。
    • 區分對待: 根據程式碼是完全由工具維護、工具生成但人工維護,還是完全人工編寫,對可讀性、理解性等要求有所不同。完全由工具維護的程式碼可以依賴工具來確保某些結構的安全性。
  10. 政府採購規定:

    • 趨勢: 安全編碼規則越來越成為政府採購中的強制性要求。
    • 符合性: 遵循本標準有助於滿足相關安全技術實施指南 (STIG) 中的具體要求,涵蓋從編碼標準遵循、漏洞檢測到開發團隊培訓等多方面。

總結來說,SEI CERT C++ 編碼標準 2016 年版提供了一套全面的規則,旨在幫助開發者編寫更安全、更可靠的 C++ 程式碼,並強調了在現代軟體開發流程中,結合工具、測試和培訓來確保符合性的重要性。