2023軟件安全開(kāi)發(fā)V3.0.2_第1頁(yè)
2023軟件安全開(kāi)發(fā)V3.0.2_第2頁(yè)
2023軟件安全開(kāi)發(fā)V3.0.2_第3頁(yè)
2023軟件安全開(kāi)發(fā)V3.0.2_第4頁(yè)
2023軟件安全開(kāi)發(fā)V3.0.2_第5頁(yè)
已閱讀5頁(yè),還剩311頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGE193《軟件安全開(kāi)發(fā)》V3.0.2目錄第1章 軟件安全概述 11.1軟件 11.1.1軟件定義 11.1.2軟件分類 11.2軟件安全 31.2.1軟件安全概述 31.2.2軟件安全范疇 41.2.3軟件安全問(wèn)題 51.3本書(shū)的結(jié)構(gòu)與內(nèi)容 11第2章軟件安全開(kāi)發(fā)模型 132.1軟件開(kāi)發(fā)模型 132.1.1瀑布型軟件開(kāi)發(fā)模型 132.1.2漸增型軟件開(kāi)發(fā)模型 142.1.3變換型軟件開(kāi)發(fā)模型 152.2常用軟件開(kāi)發(fā)方法 152.3安全開(kāi)發(fā)模型 172.4微軟安全開(kāi)發(fā)生命周期模型 182.4.1安全生命周期模型(SDL) 182.4.2SDL優(yōu)化模型 192.4.3SDL安全人員角色 202.4.4SDL模型安全活動(dòng) 212.4.5培訓(xùn)階段 232.4.6需求階段 242.4.7設(shè)計(jì)階段 252.4.8實(shí)施階段 262.4.9驗(yàn)證階段 262.4.10發(fā)布和響應(yīng)階段 272.4.11可選的安全活動(dòng) 282.5McGraw軟件安全開(kāi)發(fā)模型 292.6NIST安全開(kāi)發(fā)生命周期模型 332.6.1開(kāi)始階段 342.6.2獲取與開(kāi)發(fā)階段 352.6.3執(zhí)行階段 372.6.4操作和維護(hù)階段 372.6.5部署階段 38第3章安全漏洞管理 403.1概述 403.1.1漏洞分類 403.1.2漏洞等級(jí) 423.1.3漏洞管理流程 443.1.4漏洞管理機(jī)制 453.2安全內(nèi)容自動(dòng)化協(xié)議(SCAP) 473.2.1SCAP及其元素 483.2.2可擴(kuò)展配置檢查列表描述格式XCCDF 503.2.3開(kāi)放漏洞評(píng)估描述語(yǔ)言O(shè)VAL 513.2.4通用漏洞和披露列表CVE 523.2.5通用平臺(tái)枚舉CPE 523.2.6通用配置枚舉CCE 533.2.7通用漏洞評(píng)分系統(tǒng)CVSS 543.3典型軟件安全漏洞 543.3.1緩沖區(qū)溢出漏洞 553.3.2整數(shù)溢出漏洞 583.3.3格式化字符串漏洞 593.3.4指針覆蓋漏洞 623.3.5SQL注入漏洞 623.3.6ByPass漏洞 643.3.7信息泄露漏洞 653.3.8越權(quán)漏洞 653.4OWASPTop10 663.4.1注入攻擊 663.4.2失效的身份認(rèn)證和會(huì)話管理 683.4.3跨站腳本–XSS 703.4.4不安全的直接對(duì)象引用 723.4.5安全配置錯(cuò)誤 743.4.6敏感數(shù)據(jù)暴露 763.4.7功能級(jí)別訪問(wèn)控制缺失 773.4.8跨站請(qǐng)求偽造(CSRF) 783.4.9使用已知易受攻擊組件 803.4.10未驗(yàn)證的重定向和轉(zhuǎn)發(fā) 81第4章安全功能設(shè)計(jì) 834.1安全審計(jì) 844.1.1安全審計(jì)自動(dòng)響應(yīng) 854.1.2安全審計(jì)數(shù)據(jù)產(chǎn)生 854.1.3安全審計(jì)分析 874.1.4安全審計(jì)查閱 884.1.5安全審計(jì)事件選擇 894.1.6安全審計(jì)事件存儲(chǔ) 904.2安全通信 914.2.1原發(fā)抗抵賴 924.2.2接收抗抵賴 934.3密碼支持 954.3.1密鑰管理 964.3.2密碼運(yùn)算 994.4用戶數(shù)據(jù)保護(hù) 1004.4.1訪問(wèn)控制 1034.4.2數(shù)據(jù)流控制 1054.4.3數(shù)據(jù)鑒別 1094.4.4系統(tǒng)內(nèi)部傳送 1104.4.5殘余信息保護(hù) 1124.4.6回退 1134.4.7存儲(chǔ)數(shù)據(jù)的完整性 1144.5標(biāo)識(shí)和鑒別(身份認(rèn)證) 1154.5.1用戶鑒別 1164.5.2用戶標(biāo)識(shí) 1194.5.3鑒別失敗 1204.5.4用戶屬性定義 1214.5.5秘密的規(guī)范 1214.5.6主體-用戶綁定 1224.6安全管理 1234.6.1功能的管理 1234.6.2安全屬性的管理 1244.6.3數(shù)據(jù)的管理 1264.6.4安全管理角色 1274.7隱私保護(hù) 1284.7.1匿名 1294.7.2假名 1294.7.3不可關(guān)聯(lián)性 1314.7.4不可觀察性 1324.8安全功能的保護(hù) 1334.8.1底層抽象機(jī)測(cè)試 1364.8.2失效保護(hù) 1374.8.3安全功能數(shù)據(jù)的可用性 1374.8.4安全功能數(shù)據(jù)的保密性 1384.8.5安全功能數(shù)據(jù)的完整性 1394.8.6內(nèi)部數(shù)據(jù)傳送 1404.8.7物理保護(hù) 1414.8.8可信恢復(fù) 1434.8.9重放檢測(cè) 1464.8.10引用仲裁 1474.8.11域分離 1484.8.12狀態(tài)同步協(xié)議 1494.8.13時(shí)間戳 1504.8.14對(duì)外數(shù)據(jù)一致性 1514.8.15內(nèi)部數(shù)據(jù)復(fù)制一致性 1524.8.16安全功能自檢 1524.9資源利用 1534.9.1容錯(cuò) 1544.9.2服務(wù)優(yōu)先級(jí) 1554.9.3資源分配 1564.10系統(tǒng)/子系統(tǒng)的訪問(wèn) 1574.10.1可選屬性范圍限定 1584.10.2多重并發(fā)會(huì)話限定 1594.10.3會(huì)話鎖定 1604.10.4訪問(wèn)旗標(biāo) 1624.10.5訪問(wèn)歷史 1624.10.6會(huì)話建立 1634.11可信路徑/信道 1644.11.1安全功能之間的可信信道 1654.11.2可信路徑 165第5章 常見(jiàn)安全問(wèn)題 1675.1概述 1675.2常見(jiàn)編程安全問(wèn)題分類 1675.3常見(jiàn)編程安全問(wèn)題 1695.3.1整數(shù)賦值錯(cuò)誤問(wèn)題 1695.3.2整型提升導(dǎo)致的內(nèi)存溢出錯(cuò)誤 1695.3.3臨時(shí)變量溢出 1705.3.4整數(shù)截?cái)噱e(cuò)誤問(wèn)題 1705.3.5整數(shù)溢出問(wèn)題 1715.3.6帶符號(hào)與無(wú)符號(hào)整型比較問(wèn)題 1715.3.7size_t導(dǎo)致的死循環(huán) 1725.3.8誤用short引起緩沖區(qū)溢出 1735.3.9表達(dá)式中對(duì)同一變量多次寫入問(wèn)題 1745.3.10空字符結(jié)尾錯(cuò)誤問(wèn)題 1745.3.11無(wú)界字符串復(fù)制問(wèn)題 1755.3.12定長(zhǎng)字符串越界問(wèn)題 1765.3.13字符串截?cái)鄦?wèn)題 1785.3.14與函數(shù)無(wú)關(guān)的字符串錯(cuò)誤問(wèn)題 1795.3.15修改字符串常量錯(cuò)誤問(wèn)題 1805.3.16字符串比較錯(cuò)誤 1805.3.17數(shù)組越界問(wèn)題 1815.3.18數(shù)組定義和值初始化括號(hào)形式混淆錯(cuò)誤 1825.3.19未正確區(qū)分標(biāo)量和數(shù)組問(wèn)題 1835.3.20二維數(shù)組的內(nèi)存泄露 1845.3.21釋放指針指向的對(duì)象引起內(nèi)存泄漏 1845.3.22數(shù)據(jù)指針被修改問(wèn)題 1865.3.23函數(shù)指針被修改問(wèn)題 1865.3.24刪除void*指針錯(cuò)誤 1885.3.25printf函數(shù)輸出問(wèn)題 1895.3.26格式化函數(shù)sprintf引起緩沖區(qū)溢出 1895.3.27指針變量的傳值和傳址混淆問(wèn)題 1905.3.28驗(yàn)證方法參數(shù)問(wèn)題 1915.3.29函數(shù)退出時(shí)內(nèi)存未釋放問(wèn)題 1925.3.30continue和return混淆問(wèn)題 1925.3.31非void返回類型函數(shù)問(wèn)題 1935.3.32誤用sizeof操作符取字符串長(zhǎng)度 1955.3.33基類未定義虛析構(gòu)函數(shù)引發(fā)錯(cuò)誤 1955.3.34線程未join引起的內(nèi)存泄露 1975.3.35notify線程喚醒問(wèn)題 1985.3.36多線程中Socket終止問(wèn)題 1995.3.37程序異常退出時(shí)未關(guān)閉已打開(kāi)文件 2015.3.38目錄打開(kāi)后未關(guān)閉 2025.3.39寫文件沒(méi)有調(diào)用fflush 2025.3.40臨時(shí)文件未刪除問(wèn)題 2035.3.41敏感信息硬編碼問(wèn)題 2045.3.42引用未初始化的內(nèi)存錯(cuò)誤問(wèn)題 2065.3.43檢查和處理內(nèi)存分配錯(cuò)誤問(wèn)題 2065.3.44執(zhí)行零長(zhǎng)度的分配錯(cuò)誤問(wèn)題 2075.3.45引用已釋放內(nèi)存的錯(cuò)誤問(wèn)題 2085.3.46雙重釋放內(nèi)存錯(cuò)誤問(wèn)題 2095.3.47不匹配的內(nèi)存管理函數(shù)問(wèn)題 2095.3.48匿名對(duì)象引起的內(nèi)存泄漏 2105.3.49JVM內(nèi)存泄漏問(wèn)題 2115.3.50覆蓋equals方法而沒(méi)有覆蓋hashCode方法問(wèn)題 2125.3.51finally程序段非正常退出問(wèn)題 2145.3.52非泛型的數(shù)據(jù)類型問(wèn)題 2155.3.53類名稱比較問(wèn)題 2155.3.54等同的對(duì)象得不到相等的結(jié)果問(wèn)題 2165.3.55在嵌套類中暴露外部類的私有字段問(wèn)題 2175.3.56靜態(tài)方法隱藏問(wèn)題 2185.3.57構(gòu)造函數(shù)中拋出異常引發(fā)錯(cuò)誤 2195.3.58構(gòu)造器調(diào)用可覆蓋方法問(wèn)題 2205.3.59字符亂碼問(wèn)題 2225.3.60功能級(jí)別訪問(wèn)控制缺失問(wèn)題 2225.3.61表單重復(fù)提交問(wèn)題 2255.3.62不安全的直接對(duì)象引用問(wèn)題 2275.3.63信息的不安全存儲(chǔ)問(wèn)題 2285.3.64SQL注入攻擊 2295.3.65失效的身份認(rèn)證和會(huì)話管理問(wèn)題 2315.3.66跨站腳本(XSS) 232第6章 安全編碼實(shí)踐 2346.1輸入驗(yàn)證和數(shù)據(jù)合法性校驗(yàn) 2346.1.1輸入數(shù)據(jù)有效性校驗(yàn) 2346.1.2避免SQL注入 2356.1.3避免XML注入 2356.1.4避免跨站點(diǎn)腳本(XSS) 2356.2聲明和初始化 2366.2.1避免類初始化相互依賴 2366.3表達(dá)式 2376.3.1勿忽略方法返回值 2376.3.2勿引用空指針 2376.3.3比較數(shù)組內(nèi)容 2386.4數(shù)值類型和操作 2386.4.1防止整數(shù)溢出 2386.4.2避免除法和取模運(yùn)算分母為零 2396.5類和方法操作 2406.5.1數(shù)據(jù)成員聲明為私有且提供可訪問(wèn)的包裝方法 2406.5.2敏感類不允許復(fù)制 2406.5.3比較類的正確做法 2416.5.4不要硬編碼敏感信息 2416.5.5驗(yàn)證方法參數(shù) 2426.5.6勿使用過(guò)時(shí)或低效的方法 2426.5.7數(shù)組引用問(wèn)題 2426.5.8勿產(chǎn)生內(nèi)存泄露 2436.6異常處理 2446.6.1不要忽略捕獲的異常 2446.6.2不允許暴露異常的敏感信息 2456.6.3不允許拋出RuntimeException、Exception和Throwable 2466.6.4不要捕獲NullPointerException或其他父類異常 2466.7多線程編程 2476.7.1確保被并發(fā)調(diào)用函數(shù)的可重入性 2476.7.2函數(shù)線程安全 2496.7.3確保共享變量的可見(jiàn)性 2506.7.4確保共享變量的操作是原子的 2516.7.5Thread.run()和Thread.stop() 2526.7.6確保執(zhí)行阻塞操作的線程可以終止 2536.7.7不在一個(gè)有限的線程池執(zhí)行相互依存的任務(wù) 2546.8輸入輸出 2546.8.1程序終止前刪除臨時(shí)文件 2546.8.2檢測(cè)和處理文件相關(guān)錯(cuò)誤 2556.8.3及時(shí)釋放資源 2566.9序列化 2566.9.1不要序列化未加密的敏感數(shù)據(jù) 2576.9.2在序列化過(guò)程中避免內(nèi)存和資源泄漏 2576.9.3反序列化要在程序最小權(quán)限的安全環(huán)境中 258第7章 軟件安全測(cè)試 2597.1軟件安全測(cè)試方法 2597.2軟件安全測(cè)試過(guò)程 2607.3軟件安全測(cè)試組織 2617.4軟件安全測(cè)試舉例 2627.4.1系統(tǒng)測(cè)試概要 2637.4.2系統(tǒng)測(cè)試結(jié)果 2647.4.3系統(tǒng)安全建議 273參考文獻(xiàn) 275附錄A測(cè)試工具 2761源代碼分析器——SourceCodeAnalysis(FortifySCA) 2772字節(jié)碼掃描器——FindBugs 2783數(shù)據(jù)庫(kù)脆弱性掃描器——DatabaseScanner 2794網(wǎng)絡(luò)漏洞掃描器——NTOSpider 2805網(wǎng)絡(luò)漏洞掃描器——Metasploit 2816Web應(yīng)用漏洞掃描器——AppScan 2867Web應(yīng)用漏洞掃描器——JSky 2898Web應(yīng)用漏洞掃描器——WVS 2919Web服務(wù)掃描器——SOATest 29310動(dòng)態(tài)分析工具——CLRProfiler 29411設(shè)計(jì)驗(yàn)證工具——SDMetrics 295軟件安全概述1.1軟件1.1.1軟件定義軟件與硬件一起組成了完整的計(jì)算機(jī)系統(tǒng)。1983年美國(guó)電氣和電子工程師協(xié)會(huì)IEEE(InstituteofElectricalandElectronicsEngineers)給出的軟件的定義是“計(jì)算機(jī)程序、方法、規(guī)則和相關(guān)文檔資料以及在計(jì)算機(jī)上運(yùn)行時(shí)所需的數(shù)據(jù)?!蹦壳?,對(duì)軟件通俗的解釋是:軟件=程序+數(shù)據(jù)+文檔資料。其中:程序是按事先設(shè)計(jì)的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔資料是與程序開(kāi)發(fā)、維護(hù)和使用有關(guān)的圖文材料。軟件已成為現(xiàn)代社會(huì)基礎(chǔ)設(shè)施的要素,對(duì)人們的生活和工作都產(chǎn)生了深遠(yuǎn)的影響。為了能全面、正確地理解軟件,必須了解軟件的特點(diǎn)。軟件是一種邏輯實(shí)體。對(duì)于軟件來(lái)說(shuō),用戶無(wú)法看到它的形態(tài),而必須通過(guò)觀察、分析、思考、判斷去了解它的功能、性能及其他特性。軟件是智力活動(dòng)的產(chǎn)品。軟件開(kāi)發(fā)過(guò)程中沒(méi)有明顯的制造過(guò)程。軟件是通過(guò)人們的智力活動(dòng),把知識(shí)與技術(shù)轉(zhuǎn)化成信息的一種產(chǎn)品。軟件在運(yùn)行和使用期間不存在磨損和老化問(wèn)題。軟件的研發(fā)工作需要投入大量復(fù)雜的高強(qiáng)度腦力勞動(dòng),往往成本極高。軟件的復(fù)雜度隨著規(guī)模的增大而迅速增加。軟件系統(tǒng)各個(gè)模塊之間有各種邏輯聯(lián)系,一起運(yùn)行于同一個(gè)系統(tǒng)空間,模塊越多,相互的影響和關(guān)聯(lián)也就越復(fù)雜,導(dǎo)致整個(gè)軟件的復(fù)雜度隨著規(guī)模增大而成指數(shù)級(jí)增長(zhǎng)。1.1.2軟件分類到目前為止,軟件尚無(wú)統(tǒng)一的分類。典型的分類方式包括按功能、規(guī)模和服務(wù)對(duì)象進(jìn)行分類。一般來(lái)說(shuō),要給計(jì)算機(jī)軟件做出科學(xué)的分類是很難的。但鑒于不同類型的工程對(duì)象,對(duì)其進(jìn)行開(kāi)發(fā)和維護(hù)有著不同的要求和處理方法,仍然需要對(duì)軟件的類型進(jìn)行必要的劃分。按軟件的功能劃分按照軟件的功能進(jìn)行劃分,軟件可分為系統(tǒng)軟件、支撐軟件和應(yīng)用軟件三類。系統(tǒng)軟件:系統(tǒng)軟件是計(jì)算機(jī)運(yùn)行的必不可少的組成部分,它與計(jì)算機(jī)硬件緊密配合在一起,控制并協(xié)調(diào)計(jì)算機(jī)系統(tǒng)各個(gè)部件、相關(guān)的軟件和數(shù)據(jù)高效地工作。系統(tǒng)軟件通常包括操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)、設(shè)備驅(qū)動(dòng)程序以及通信處理程序等。支撐軟件:包括系統(tǒng)支撐平臺(tái)軟件和應(yīng)用支撐平臺(tái)軟件。支撐軟件是協(xié)助用戶開(kāi)發(fā)軟件的工具性軟件,其中包括幫助程序人員開(kāi)發(fā)軟件產(chǎn)品的工具,也包括幫助管理人員控制開(kāi)發(fā)進(jìn)程的工具。應(yīng)用軟件:應(yīng)用軟件是指在特定領(lǐng)域內(nèi)開(kāi)發(fā),為特定目的服務(wù)的軟件。目前,計(jì)算機(jī)已經(jīng)成為大多數(shù)日常工作的必須工具,在很多應(yīng)用領(lǐng)域都需要專門的軟件支持,在這些種類繁多的應(yīng)用軟件中,商業(yè)數(shù)據(jù)處理軟件所占比例最大,此外還有工程與科學(xué)計(jì)算軟件、系統(tǒng)仿真軟件、計(jì)算機(jī)輔助設(shè)計(jì)(ComputerAidedDesign,CAD)軟件、人工智能軟件及各類辦公自動(dòng)化軟件和信息處理軟件等。按軟件的規(guī)模進(jìn)行劃分按軟件規(guī)模分類(此處數(shù)據(jù)并無(wú)明確結(jié)論,僅供參考)即按照開(kāi)發(fā)軟件所需的人力、物力、時(shí)間以及完成的源程序行數(shù)進(jìn)行分類,可將軟件分為微型、小型、中型、大型、極大型、巨大型,如表1-1所示。表1-1軟件的規(guī)模的分類類別參加人數(shù)研制期限產(chǎn)品規(guī)模(源程序行數(shù))微型軟件11周~1月5百小型軟件11~6月2千中型軟件2~51~2年0.5~5萬(wàn)大型軟件5~152~3年5~10萬(wàn)極大型軟件100~10004~5年1百萬(wàn)巨大型軟件2000~50005~10年0.1~1千萬(wàn)1)微型軟件:只有一個(gè)人,甚至是半時(shí),在幾天之內(nèi)完成的軟件。寫出的程序不到500行語(yǔ)句;2)小型軟件:一個(gè)人半年之內(nèi)完成的2000行以內(nèi)的程序。例如,數(shù)值計(jì)算問(wèn)題或是數(shù)據(jù)處理問(wèn)題這種規(guī)模的課題。這種程序通常沒(méi)有與其他程序的接口;3)中型軟件:5人以內(nèi)在1~2年時(shí)間內(nèi)完成的0.5~5萬(wàn)行的程序。這種課題開(kāi)始出現(xiàn)在軟件人員之間,軟件人員與用戶之間的聯(lián)系、協(xié)調(diào)和配合關(guān)系的問(wèn)題;4)大型軟件:5~15人在2~3年時(shí)間里完成5萬(wàn)行~10萬(wàn)行的程序。例如編譯程序、小型分時(shí)系統(tǒng)、應(yīng)用軟件包、實(shí)時(shí)控制系統(tǒng)等軟件;5)極大型軟件:100~1000人參加在4~5年時(shí)間里完成100萬(wàn)行以上的程序;6)巨大型軟件:2000~5000人參加在5~10年的時(shí)間里完成1000萬(wàn)行以上程序。3、按軟件服務(wù)對(duì)象劃分按軟件服務(wù)對(duì)象的范圍,可將軟件劃分為面向市場(chǎng)廣大用戶的軟件產(chǎn)品和面向部分客戶軟件項(xiàng)目。通用軟件:指的是不局限于特定領(lǐng)域的、可以被廣大用戶直接使用的軟件系統(tǒng)。如Windows、Office、WPS等。這類系統(tǒng)的特點(diǎn)是技術(shù)含量高,開(kāi)發(fā)時(shí)要考慮到各種不同的用戶需求。2)定制軟件:是受某個(gè)特定客戶(或少數(shù)客戶)的委托,由一個(gè)或多個(gè)軟件開(kāi)發(fā)機(jī)構(gòu)在合同的范圍內(nèi)進(jìn)行開(kāi)發(fā)的軟件,如我們常說(shuō)的管理信息系統(tǒng)和電子商務(wù)系統(tǒng)。這類軟件的特點(diǎn)是領(lǐng)域知識(shí)所占的比重較大,相對(duì)技術(shù)而言工程性更強(qiáng),如政府辦公系統(tǒng)、ERP系統(tǒng)、監(jiān)控系統(tǒng)等。1.2軟件安全1.2.1軟件安全概述軟件安全(SoftwareSecurity)是指將開(kāi)發(fā)的軟件存在的風(fēng)險(xiǎn)控制在可接受的水平,以保證軟件的正常運(yùn)行。由于軟件存在漏洞是必然的,而這些漏洞有現(xiàn)存的攻擊方法,并且這些方法可以被利用來(lái)破壞一種或更多軟件的安全性能,或迫使軟件運(yùn)行到不安全的狀態(tài)。因此,軟件很容易成為攻擊目標(biāo)。安全的軟件是指即使它的安全性受到蓄意危害時(shí)仍然保持安全可靠運(yùn)行。那么如何評(píng)判一個(gè)軟件是否足夠安全?著名的軟件安全專家JuliaH.Allen給出了一個(gè)安全的軟件需要滿足的屬性,這些屬性是軟件安全的重要因素。主要包括以下幾種:1)機(jī)密性。軟件必須確保其特性(包括運(yùn)行環(huán)境和用戶之間的聯(lián)系)、資源管理和內(nèi)容對(duì)未授權(quán)實(shí)體隱藏。這一點(diǎn)對(duì)于開(kāi)源軟件來(lái)說(shuō)也仍然適用,盡管開(kāi)源軟件的特性和內(nèi)容都可以公開(kāi)使用(對(duì)授權(quán)實(shí)體),但其仍然要維持其資源管理的機(jī)密性。2)完整性。軟件及其管理的資源必須能夠抵御入侵(覆蓋、刪除、修改等)并能從中恢復(fù)。入侵破壞一般由未授權(quán)的修改引起,這些修改針對(duì)軟件源代碼、受管理的資源、配置或者授權(quán)用戶的合法操作,包括重寫、覆蓋、篡改、破壞、插入等,在軟件開(kāi)發(fā)過(guò)程中必須保證其完整性。3)可用性。軟件必須對(duì)授權(quán)用戶(人或進(jìn)程)開(kāi)放,即可操作和運(yùn)行,而對(duì)未授權(quán)用戶關(guān)閉。相反,對(duì)于未授權(quán)的用戶應(yīng)該永遠(yuǎn)關(guān)閉,既不可操作和運(yùn)行。4)可追溯性。所有與安全相關(guān)的軟件行為都必須跟蹤與記錄,并進(jìn)行責(zé)任歸因。5)抗抵賴性。這一屬性是指軟件防止用戶否認(rèn)執(zhí)行了某些行為的功能,以保證可追蹤性不受到破壞。上述安全屬性是緊密相關(guān)的,很難在不考慮其他屬性的情況下達(dá)到其中一個(gè)屬性的滿足。比如用戶的系統(tǒng)賬戶被人竊取,即意味著機(jī)密性的喪失,而完整性也必然得不到保障。為了從應(yīng)用軟件的數(shù)據(jù)庫(kù)中提取個(gè)人的相關(guān)信息而進(jìn)行的一次成功的SQL注入攻擊,違背了軟件的機(jī)密性。一次針對(duì)Web應(yīng)用的跨站腳本(Cross-SiteScripting,XSS)攻擊同時(shí)違背了軟件的完整性和可用性。許多其他的重要軟件特性隱含軟件安全的特性,其間的關(guān)聯(lián)通常能被描述為這些特性如何影響軟件安全范疇內(nèi)的屬性。由于我們?cè)絹?lái)越依賴軟件來(lái)解決關(guān)鍵性的工作,這使得軟件成為那些帶有惡意、犯罪、敵對(duì)、競(jìng)爭(zhēng)心理的或帶恐怖主義性質(zhì)的攻擊者的高價(jià)值攻擊目標(biāo),所以設(shè)計(jì)安全的軟件很重要。而且McGraw博士提出“使安全成為軟件開(kāi)發(fā)必需的部分(BuildSecurityIn,BSI)”的觀點(diǎn),已經(jīng)得到工業(yè)界和政府部門的廣泛認(rèn)同,美國(guó)國(guó)土安全部下屬的國(guó)家網(wǎng)絡(luò)安全處(NationalCyberSecurityDivision,NCSD)專門建立了BSI網(wǎng)站(/portal),并與美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(TheNationalInstituteofStandardsandTechnology,NIST)、國(guó)際標(biāo)準(zhǔn)化組織(InternationalOrganizationforStandards,ISO)以及電氣工程師協(xié)會(huì)(InstituteofElectricalandElectronicsEngineers,IEEE)一起共同維護(hù)這個(gè)網(wǎng)站。1.2.2軟件安全范疇軟件的安全問(wèn)題已經(jīng)出現(xiàn)多年,隨著軟件系統(tǒng)的不斷增加和越來(lái)越復(fù)雜,使得安全的潛在隱患不斷增多。在確定軟件安全特征并找到有效的改善方法之前,我們必須首先了解軟件安全的具體范疇。根據(jù)軟件的定義可知,軟件安全的范疇主要包括數(shù)據(jù)的安全性、程序的安全性以及文檔資料的安全性三大方面:1)數(shù)據(jù)安全:數(shù)據(jù)安全可定義為“保持?jǐn)?shù)據(jù)的機(jī)密性,完整性,可用性;另外也可包括諸如真實(shí)性,可核查性,不可否認(rèn)性和可靠性等”。數(shù)據(jù)安全包括兩方面:一是數(shù)據(jù)本身的安全,主要是指采用現(xiàn)代密碼算法對(duì)數(shù)據(jù)進(jìn)行主動(dòng)保護(hù),主要解決了數(shù)據(jù)保密性、數(shù)據(jù)完整性、可追溯性、抗抵賴性等安全屬性等;二是數(shù)據(jù)防護(hù)的安全,主要是采用現(xiàn)代信息存儲(chǔ)手段對(duì)數(shù)據(jù)進(jìn)行主動(dòng)防護(hù),例如通過(guò)磁盤陣列、數(shù)據(jù)備份、異地容災(zāi)等手段主要保證了數(shù)據(jù)的可用性、完整性、可靠性等安全屬性。2)程序安全:程序安全主要指在軟件開(kāi)發(fā)周期中的代碼安全,是貫穿在整個(gè)開(kāi)發(fā)周期的軟件安全保障。程序安全包括架構(gòu)設(shè)計(jì)安全和編碼測(cè)試安全兩方面,軟件工程師要盡量使用健全的和已經(jīng)驗(yàn)證為安全的開(kāi)發(fā)工具來(lái)進(jìn)行代碼編寫以減少軟件實(shí)現(xiàn)時(shí)的漏洞,并使用靜態(tài)源碼分析攻擊,進(jìn)行源碼審查和人工審查方式來(lái)減少安全漏洞,除此之外,要使用大量的安全測(cè)試策略來(lái)檢驗(yàn)程序是否安全,包括白盒測(cè)試(基于對(duì)源碼的深度理解)、黑盒測(cè)試(關(guān)注軟件可見(jiàn)的外部行為)、滲透測(cè)試(在系統(tǒng)級(jí)別識(shí)別特殊的漏洞)。3)文檔資料安全:文檔資料安全指在軟件開(kāi)發(fā)過(guò)程中對(duì)于軟件需求規(guī)格說(shuō)明書(shū)、設(shè)計(jì)文檔等安全管理,即避免在開(kāi)發(fā)周期的任意時(shí)候蓄意地刪除,新增和修改文檔資料來(lái)破壞軟件。由于文檔資料對(duì)于軟件開(kāi)發(fā)者和使用者了解程序功能、代碼作用、程序的測(cè)試過(guò)程等具有十分重要的作用,所以對(duì)文檔資料的保護(hù)要與程序和數(shù)據(jù)同步進(jìn)行。1.2.3軟件安全問(wèn)題由于軟件已成為那些帶有惡意、犯罪、敵對(duì)、競(jìng)爭(zhēng)心理的,甚至帶恐怖主義性質(zhì)的攻擊者的高價(jià)值攻擊目標(biāo),因此軟件安全問(wèn)題已經(jīng)成為上到國(guó)家下到個(gè)人的關(guān)鍵問(wèn)題。本節(jié)中主要介紹軟件安全漏洞,軟件生命周期中的安全問(wèn)題以及軟件安全問(wèn)題產(chǎn)生的原因。軟件安全漏洞軟件安全漏洞指在計(jì)算機(jī)程序、系統(tǒng)或協(xié)議中存在的安全漏洞,它已成為被攻擊者用來(lái)非法侵入他人系統(tǒng)的主要渠道。對(duì)于軟件的安全漏洞問(wèn)題,面對(duì)“如何開(kāi)發(fā)出具有高安全性軟件”與“如何利用軟件漏洞進(jìn)行攻擊”,安全防護(hù)人員和黑客始終處于不斷相互較量的過(guò)程中。根據(jù)著名的咨詢公司GartnerResearch的報(bào)告,對(duì)于企業(yè)網(wǎng)絡(luò)的攻擊,超過(guò)70%來(lái)自軟件和應(yīng)用層,而不是網(wǎng)絡(luò)層或系統(tǒng)層。軟件和應(yīng)用層的漏洞的數(shù)目在各種環(huán)境中都在增加。而來(lái)自NIST的數(shù)據(jù)更為驚人,有92%被發(fā)現(xiàn)的漏洞屬于應(yīng)用層。這些數(shù)據(jù)表明,目前絕大部分的黑客攻擊都是利用了應(yīng)用軟件的安全漏洞實(shí)現(xiàn)的,而這些安全漏洞往往是由于軟件開(kāi)發(fā)人員在編碼時(shí)的疏漏造成的。在面對(duì)惡意攻擊時(shí),軟件的安全漏洞是普遍存在的,并且有可能導(dǎo)致嚴(yán)重風(fēng)險(xiǎn),所以軟件安全漏洞是最危險(xiǎn)的安全問(wèn)題之一。在過(guò)去十年里,軟件安全漏洞這個(gè)問(wèn)題變得越來(lái)越嚴(yán)重,圖1-1顯示了從2003年至2013年中國(guó)國(guó)家信息安全漏洞庫(kù)(ChinaNationalVulnerabilityDatabaseofInformationSecurity,CNNVD)統(tǒng)計(jì)的軟件漏洞數(shù)量變化情況。從圖中可以看出十年內(nèi)漏洞數(shù)量呈增長(zhǎng)趨勢(shì),并且在以后的時(shí)間里這一趨勢(shì)不會(huì)有很大的改變。而且CNNVD根據(jù)漏洞的影響等級(jí)范圍、利用方式、攻擊后果等,對(duì)漏洞危害進(jìn)行了量化評(píng)分。并將漏洞分為4個(gè)等級(jí),即危急(CNNVD評(píng)分為10分)、高危(7.0~9.9分)、中危(4.0~6.9分)和低危級(jí)別(0.0~3.9分)。圖1-12003~2013年軟件漏洞數(shù)量分布圖目前,軟件中安全漏洞的種類非常繁多,它們彼此之間都有一些共同的特點(diǎn)和模式。常見(jiàn)的8種軟件安全中漏洞如下:(1)緩沖區(qū)溢出漏洞。嚴(yán)格的講,當(dāng)程序允許輸入的數(shù)據(jù)大于已分配的緩沖區(qū)大小時(shí),就會(huì)產(chǎn)生緩沖區(qū)溢出。緩沖區(qū)溢出造成的后果小到系統(tǒng)崩潰,大到攻擊者完全控制程序。并且,如果運(yùn)行該程序的用戶擁有較高的權(quán)限,攻擊者還可以控制整個(gè)操作系統(tǒng)。如果出現(xiàn)此漏洞的應(yīng)用程序是一個(gè)網(wǎng)絡(luò)服務(wù),那么將會(huì)造成蠕蟲(chóng)病毒的產(chǎn)生并蔓延。第一個(gè)著名的Internet蠕蟲(chóng)病毒——RobertT.Morris蠕蟲(chóng)病毒,就利用了finger服務(wù)器上的一個(gè)緩沖區(qū)溢出漏洞進(jìn)行攻擊。在1988年,一次緩沖區(qū)溢出攻擊差點(diǎn)使Internet癱瘓,之后,雖然我們似乎明白該如何避免緩沖區(qū)溢出,但是在許多種類的軟件中仍舊能常常見(jiàn)到有關(guān)緩沖區(qū)溢出漏洞的報(bào)告。而且即使很優(yōu)秀、很細(xì)心的程序員也會(huì)出現(xiàn)緩沖區(qū)溢出漏洞,但是優(yōu)秀的程序員知道如何有效的避免這種漏洞,以及如何進(jìn)行有效的測(cè)試來(lái)找出這種漏洞。(2)整數(shù)溢出漏洞對(duì)于不同語(yǔ)言,整數(shù)溢出漏洞的表現(xiàn)形式也有細(xì)微差別。自計(jì)算機(jī)編程出現(xiàn)之后,整數(shù)上溢、下溢以及各種類型的溢出就已經(jīng)存在了。簡(jiǎn)單的棧粉碎攻擊被堆攻擊普遍替代后,整數(shù)溢出就變成了一個(gè)安全研究的主題。利用整數(shù)溢出進(jìn)行攻擊盡管存在一段時(shí)間了,但直到最近幾年,整數(shù)溢出才因許多安全問(wèn)題報(bào)告的出現(xiàn)而真正浮出水面。(3)格式化字符串漏洞格式化字符串漏洞是近年來(lái)新出現(xiàn)的少數(shù)幾種攻擊類型之一。第一個(gè)涉及格式化字符串攻擊的漏洞是由LamagraArgamal于2000年6月23日發(fā)布的(/archive/1/66842)。大約1個(gè)月之后,PascalBouchareine更詳細(xì)的解釋了這類問(wèn)題(/archive/1/10383),但是沒(méi)有將輸入和利用格式化字符串漏洞來(lái)寫入內(nèi)存。像其他安全漏洞一樣,格式化字符串漏洞的根源在于未對(duì)用戶提供的輸入進(jìn)行驗(yàn)證。在C/C++中,格式化字符串攻擊可以用來(lái)向任意內(nèi)存寫入數(shù)據(jù),最危險(xiǎn)的是這種漏洞發(fā)生時(shí)不會(huì)改變臨界內(nèi)容塊的內(nèi)容。這種情況在UNIX和Linux系統(tǒng)上更為普遍。在Windows系統(tǒng)上,應(yīng)用程序字符串表通常保存在可執(zhí)行程序中,或者DLL(DynamicLinkLibraries,動(dòng)態(tài)鏈接庫(kù))中。如果攻擊者可以重寫主執(zhí)行程序或者資源DLL,就可以執(zhí)行比格式化字符更為直接的攻擊,因?yàn)樗鼈兛梢孕薷恼谶\(yùn)行的代碼。(4)指針覆蓋漏洞指針覆蓋漏洞指由于程序在運(yùn)行中往往會(huì)將來(lái)自于程序外部的數(shù)據(jù)也存放進(jìn)入內(nèi)存中,如果某些數(shù)據(jù)恰好覆蓋了程序的指針,那么程序的執(zhí)行流程就會(huì)被這些外部數(shù)據(jù)所控制。指針覆蓋漏洞類似于緩沖區(qū)溢出漏洞,但是范圍則更廣泛一些,外部數(shù)據(jù)不僅可以覆蓋程序的函數(shù)返回地址,還可能覆蓋程序運(yùn)行中其他的關(guān)鍵地址。如程序正在調(diào)用指令callecx,此時(shí),ecx寄存器中的數(shù)據(jù)來(lái)源于內(nèi)存中的某個(gè)地址。一旦程序發(fā)生指針覆蓋漏洞,ecx索取數(shù)據(jù)的這個(gè)內(nèi)存地址被一個(gè)執(zhí)行ShellCode代碼的地址所覆蓋,那么程序一旦調(diào)用callecx指令,ShellCode就會(huì)馬上被執(zhí)行。指針覆蓋漏洞可能是最近幾年軟件安全中出現(xiàn)最多的漏洞。尤其近幾年CPU硬件設(shè)計(jì)者采用的一些硬件級(jí)別的防止緩沖區(qū)溢出漏洞的方法,更加使得緩沖區(qū)溢出漏洞難以被利用。(5)SQL注入漏洞SQL注入漏洞是Web系統(tǒng)特有的一類漏洞,源于PHP、ASP等腳本語(yǔ)言對(duì)用戶輸入數(shù)據(jù)的錯(cuò)誤解析。網(wǎng)站開(kāi)發(fā)程序員在編寫代碼時(shí),沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。以PHP語(yǔ)言為例,如果用戶的輸入能夠影響到SQL命令串的生成,那么很可能再添加了單引號(hào)、#號(hào)等轉(zhuǎn)義命令字符后,能夠改變數(shù)據(jù)庫(kù)最終執(zhí)行的SQL命令。(6)ByPass漏洞Bypass漏洞是一個(gè)大類,包含了很多小類,這些小類有一個(gè)共同的特點(diǎn),就是這些出現(xiàn)問(wèn)題的軟件都在功能上存在對(duì)用戶的限制,而B(niǎo)ypass漏洞就可以繞過(guò)軟件的限制,使得軟件的限制形同虛設(shè)。Bypass漏洞不但可以讓普通軟件的限制功能作廢,還可能造成某些軟件安全功能完全形同虛設(shè)。(7)信息泄露漏洞信息泄露漏洞實(shí)際上指攻擊者獲取了可以破壞安全或隱私策略的數(shù)據(jù),而不管是采取顯式的還是隱式的手段。數(shù)據(jù)本身可能就是攻擊者的目標(biāo),或者數(shù)據(jù)提供的信息可以使攻擊者達(dá)到他們的目的。信息泄露的后果有時(shí)候不是很明顯,但是這個(gè)漏洞有時(shí)會(huì)使用弱權(quán)限或訪問(wèn)控制表來(lái)放大。(8)越權(quán)型漏洞越權(quán)型漏洞是一個(gè)設(shè)計(jì)問(wèn)題,當(dāng)發(fā)生故障時(shí),攻擊者可以利用這個(gè)漏洞制造更危險(xiǎn)的事故,軟件會(huì)在其生命周期的某個(gè)時(shí)候失效,如果其代碼失效了,但允許攻擊者運(yùn)行惡意代碼,這些代碼的運(yùn)行通常會(huì)把權(quán)限賦予易受攻擊的進(jìn)程。例如,如果某進(jìn)程用Administrator或root權(quán)限來(lái)運(yùn)行,且這段代碼中有一個(gè)導(dǎo)致執(zhí)行任意代碼的整數(shù)溢出漏洞,則惡意代碼也會(huì)運(yùn)行為Administrator或root。另一個(gè)實(shí)例是攻擊者訪問(wèn)不應(yīng)訪問(wèn)的數(shù)據(jù),當(dāng)危及安全的代碼用足以訪問(wèn)數(shù)據(jù)的權(quán)限來(lái)運(yùn)行時(shí),就可以訪問(wèn)不該訪問(wèn)的數(shù)據(jù)。軟件安全漏洞會(huì)影響軟件安全的運(yùn)行,這是一個(gè)不爭(zhēng)的事實(shí)。這些漏洞可以被利用而影響到軟件的安全屬性并且迫使軟件運(yùn)行到一個(gè)不安全的、可被利用的狀態(tài)??紤]到基于軟件的系統(tǒng)廣泛的連接能力和其復(fù)雜度爆炸性地增長(zhǎng),軟件安全處理這些漏洞將是一個(gè)十足的挑戰(zhàn)。軟件生命周期中的安全問(wèn)題軟件產(chǎn)品同任何其他事物一樣,也要經(jīng)歷孕育、誕生、成長(zhǎng)、成熟、衰亡等各個(gè)階段,在軟件工程中一般將上述過(guò)程稱為軟件的生命周期。通過(guò)將整個(gè)軟件生命周期劃分為若干階段,使得每個(gè)階段都有明確的任務(wù)和目標(biāo),進(jìn)而使得規(guī)模大,結(jié)構(gòu)復(fù)雜和管理復(fù)雜的軟件開(kāi)發(fā)變的易于控制和管理。通常,軟件生命周期包括可行性分析與項(xiàng)目開(kāi)發(fā)計(jì)劃、需求分析、設(shè)計(jì)、編碼、測(cè)試、維護(hù)等活動(dòng),通常,可以將這些活動(dòng)以適當(dāng)?shù)姆绞椒峙涞讲煌碾A段去完成。這種按時(shí)間分配不同任務(wù)的思想方法是軟件工程中的一種重要思想原則,即按部就班、逐步推進(jìn),每個(gè)階段都要有各自的定義、工作、審查、形成文檔以便工作交流或備查,進(jìn)而達(dá)到提高軟件質(zhì)量的目的。目前,按照軟件開(kāi)發(fā)生命周期的思想進(jìn)行軟件設(shè)計(jì)和開(kāi)發(fā)的理念已經(jīng)得到廣大軟件設(shè)計(jì)和開(kāi)發(fā)人員的廣泛認(rèn)同,但是在軟件開(kāi)發(fā)生命周期中對(duì)安全性的考慮則往往被忽略,進(jìn)而產(chǎn)生了很多的軟件產(chǎn)品漏洞,給使用軟件產(chǎn)品的人們帶來(lái)很多工作生活上的不便,甚至造成巨大的經(jīng)濟(jì)損失。在軟件生命周期的各個(gè)階段,如果缺乏良好的安全意識(shí),則可能給軟件產(chǎn)品帶來(lái)如表1-2所示的各種安全問(wèn)題。表1-2軟件開(kāi)發(fā)生命周期中可能給軟件帶來(lái)的安全問(wèn)題軟件開(kāi)發(fā)生命周期各階段各階段安全問(wèn)題需求分析階段沒(méi)有明確用戶對(duì)安全性方面的需求設(shè)計(jì)階段軟件設(shè)計(jì)沒(méi)有安全性的考慮軟件設(shè)計(jì)存在邏輯上的缺陷編碼階段代碼中存在安全漏洞,如存在SQL注入漏洞、對(duì)入口參數(shù)缺少有效性檢查等為了測(cè)試方便,開(kāi)發(fā)人員在程序中留下后門開(kāi)發(fā)人員在程序中植入惡意代碼引用沒(méi)有經(jīng)過(guò)安全性測(cè)試的開(kāi)源代碼測(cè)試階段沒(méi)有對(duì)軟件進(jìn)行安全性測(cè)試運(yùn)行與維護(hù)階段軟件產(chǎn)品發(fā)布后沒(méi)有對(duì)軟件進(jìn)行合理的保護(hù),造成軟件被破解或被非法復(fù)制歷史遺留的軟件項(xiàng)目源代碼和文檔缺失,造成即使發(fā)現(xiàn)安全漏洞也無(wú)法修改的局面?zhèn)鹘y(tǒng)軟件開(kāi)發(fā)生命周期主要從軟件功能實(shí)現(xiàn)的角度出發(fā),其基本目的是如何合理地組織開(kāi)發(fā)流程以高效地完成軟件的各項(xiàng)功能,通常只是注重軟件功能的定義、實(shí)現(xiàn)與測(cè)試,安全策略沒(méi)有得到充分的考慮。即使是在測(cè)試環(huán)節(jié)考慮到軟件系統(tǒng)的安全性,也往往是在編碼完成后進(jìn)行,而沒(méi)有將軟件安全的思想貫穿到軟件開(kāi)發(fā)的整個(gè)過(guò)程。對(duì)比而言安全軟件開(kāi)發(fā)生命周期是將安全原則滲透到整個(gè)軟件開(kāi)發(fā)的生命周期中,即在每個(gè)開(kāi)發(fā)階段均需要考慮安全性。安全軟件開(kāi)發(fā)生命周期是通過(guò)軟件開(kāi)發(fā)的各個(gè)步驟來(lái)確保軟件的安全性,其目的是確保安全的軟件得以成功實(shí)現(xiàn)。在安全軟件開(kāi)發(fā)生命周期的每一個(gè)階段都需要應(yīng)用安全風(fēng)險(xiǎn)管理。只有保證安全風(fēng)險(xiǎn)管理貫徹在整個(gè)開(kāi)發(fā)周期中才能保證軟件的安全性。關(guān)于軟件安全開(kāi)發(fā)模型的內(nèi)容將在本書(shū)第二章有詳細(xì)介紹,并且著重分析了近年來(lái)較主流的四種安全開(kāi)發(fā)生命周期模型實(shí)例:微軟安全開(kāi)發(fā)生命周期模型、McGraw軟件安全開(kāi)發(fā)模型以及NIST安全開(kāi)發(fā)生命周期模型。軟件安全問(wèn)題的產(chǎn)生原因大多數(shù)商業(yè)和開(kāi)源的應(yīng)用、中間件系統(tǒng)和操作系統(tǒng)都相當(dāng)龐大而復(fù)雜。在一般的執(zhí)行中,這些系統(tǒng)可以在大量不同的狀態(tài)之間轉(zhuǎn)換。這個(gè)特征使得軟件的開(kāi)發(fā)和持續(xù)正常運(yùn)行變得特別困難,更不用說(shuō)持續(xù)安全運(yùn)行了。面對(duì)不可避免的安全威脅和風(fēng)險(xiǎn),項(xiàng)目經(jīng)理和軟件工程師必須考慮到軟件的安全性。如果項(xiàng)目經(jīng)理和軟件工程師進(jìn)行過(guò)系統(tǒng)的處理缺陷的訓(xùn)練,那么軟件的大部分安全缺陷可以避免。不幸的是,在現(xiàn)實(shí)環(huán)境下,項(xiàng)目經(jīng)理和軟件工程師缺乏設(shè)計(jì)、開(kāi)發(fā)安全的應(yīng)用軟件和進(jìn)行質(zhì)量保證的訓(xùn)練,在測(cè)試不安全代碼和識(shí)別拙劣開(kāi)發(fā)技術(shù)方面亟待提升。軟件開(kāi)發(fā)和設(shè)計(jì)人員通常都不理解在識(shí)別錯(cuò)誤或消除缺陷過(guò)程中,或者在面對(duì)攻擊時(shí),哪些安全條例更有效。開(kāi)發(fā)人員常常對(duì)一些特定的軟件需求的安全因素不熟悉(或是缺乏)。同樣,設(shè)計(jì)人員也很少學(xué)習(xí)軟件構(gòu)架、設(shè)計(jì)、開(kāi)發(fā)、部署和運(yùn)行的安全要素。這些知識(shí)的缺乏意味著軟件的安全需求很可能不充分,并且開(kāi)發(fā)出來(lái)的軟件可能脫離特定的(和非特定)安全需求。此外,這些知識(shí)的缺乏將阻礙項(xiàng)目經(jīng)理和軟件工程師識(shí)別和理解當(dāng)軟件缺陷和漏洞遭受攻擊時(shí),軟件會(huì)達(dá)到一個(gè)什么樣的錯(cuò)誤狀態(tài)。錯(cuò)誤不可避免,即使在需求分析和設(shè)計(jì)時(shí)可以避免(比如通過(guò)形式化方法),在開(kāi)發(fā)時(shí)可以避免(比如通過(guò)全面的代碼審查和大量的測(cè)試),但卻還是會(huì)在軟件匯編、集成、部署和運(yùn)行時(shí)候被引入。不管如何忠實(shí)地遵守一個(gè)基于安全的開(kāi)發(fā)過(guò)程,只要軟件的規(guī)模和復(fù)雜性繼續(xù)增長(zhǎng),一些可被挖掘出的錯(cuò)誤和其他安全問(wèn)題是肯定存在的,軟件安全專家JuliaH.Allen認(rèn)為這些問(wèn)題主要有以下來(lái)源:1)復(fù)雜性,不完全性和軟件運(yùn)行模型的改變(比如,面向網(wǎng)絡(luò)或面向服務(wù)的結(jié)構(gòu)模型)。2)來(lái)自軟件工程師的錯(cuò)誤假設(shè),包括軟件的功能、輸出和軟件運(yùn)行環(huán)境的行為狀態(tài),或者外部實(shí)體的預(yù)期進(jìn)入。3)軟件規(guī)格說(shuō)明書(shū)或設(shè)計(jì)的瑕疵,或者來(lái)自以下方面有缺陷的情況:軟件和外部實(shí)體的接口,這類型的開(kāi)發(fā)失誤包括不恰當(dāng)?shù)妮斎霗z查,錯(cuò)誤處理和異常處理機(jī)制。軟件運(yùn)行環(huán)境的組件(從中間件級(jí)別到操作系統(tǒng)級(jí)別,再到固件級(jí)別和硬件級(jí)別的組件)。軟件安全問(wèn)題越來(lái)越多,越來(lái)越復(fù)雜。那種用防火墻來(lái)定義系統(tǒng)的“邊界”,把軟件與外界隔離,過(guò)分依賴加密技術(shù),并且等到軟件出現(xiàn)問(wèn)題時(shí)才被動(dòng)修復(fù)的傳統(tǒng)的安全思想,已經(jīng)無(wú)法應(yīng)對(duì)不可避免的安全威脅和風(fēng)險(xiǎn)。為了改變這種狀況,我們應(yīng)該對(duì)傳統(tǒng)的軟件開(kāi)發(fā)模型進(jìn)行安全方面的改造,對(duì)軟件設(shè)計(jì)和開(kāi)發(fā)人員進(jìn)行全方位的安全培訓(xùn),使軟件安全能夠在軟件開(kāi)發(fā)的整個(gè)流程中都能夠得到重視,提高軟件產(chǎn)品的本質(zhì)安全性。1.3本書(shū)的結(jié)構(gòu)與內(nèi)容軟件安全一直是軟件開(kāi)發(fā)中的一個(gè)非常關(guān)鍵的問(wèn)題,開(kāi)發(fā)高安全性的軟件是每個(gè)軟件開(kāi)發(fā)人員必須追求的目標(biāo)。開(kāi)發(fā)人員如何在開(kāi)發(fā)的全過(guò)程從根本上提高軟件的安全性,是每個(gè)軟件行業(yè)從業(yè)人員(包括項(xiàng)目經(jīng)理、系統(tǒng)分析人員、編碼人員、測(cè)試人員、維護(hù)人員)都必須思考的問(wèn)題。但是,軟件安全是一門新興的學(xué)科,所覆蓋的范圍極其廣泛,需要探討和研究的內(nèi)容也非常之多。為了讓廣大軟件從業(yè)人員更好地了解并掌握軟件安全開(kāi)發(fā)的相關(guān)理論和技術(shù),本書(shū)編寫組根據(jù)軟件行業(yè)特點(diǎn),從軟件從業(yè)人員的實(shí)際情況和知識(shí)結(jié)構(gòu)出發(fā),系統(tǒng)地、循序漸近地介紹了軟件安全的各個(gè)方面,分別對(duì)軟件安全的基礎(chǔ)理論和關(guān)鍵技術(shù)進(jìn)行詳細(xì)的介紹與講解。本書(shū)的組織結(jié)構(gòu)圖如圖1-2所示。圖1-2組織結(jié)構(gòu)圖第1章“軟件安全概述”。本章首先介紹了軟件的定義和軟件的分類,之后給出了軟件安全的范疇以及軟件安全中的一些典型問(wèn)題。第2章“軟件安全開(kāi)發(fā)模型”。本章從軟件安全開(kāi)發(fā)模型和軟件生命周期入手,重點(diǎn)介紹了幾種典型的軟件開(kāi)發(fā)模型,包括:微軟安全開(kāi)發(fā)生命周期模型、MrGraw安全接觸點(diǎn)以及NIST安全開(kāi)發(fā)生命周期。第3章“安全漏洞管理”。本章首先講解了漏洞管理主要元素和流程、我國(guó)的漏洞管理機(jī)制、安全內(nèi)容自動(dòng)化協(xié)議(SecurityContentAutomationProtocol,SCAP)、典型的軟件安全漏洞以及開(kāi)源Web應(yīng)用安全項(xiàng)目(OpenWebApplicationSecurityProject,OWASP)所列出的2013年10大安全漏洞。第4章“軟件安全功能設(shè)計(jì)”。本章所介紹的安全功能主要是參考了歐美國(guó)家制定的《信息技術(shù)安全評(píng)估通用準(zhǔn)則》,即CC(CommonCriteria)和我國(guó)制定的《信息技術(shù)安全性評(píng)估準(zhǔn)則》,即GB/T18336。本章具體的內(nèi)容包括:安全審計(jì)、安全通信、密碼支持、用戶數(shù)據(jù)保護(hù)、標(biāo)識(shí)和鑒別、安全管理、隱私保護(hù)、安全功能的保護(hù)、資源利用、系統(tǒng)/子系統(tǒng)的訪問(wèn)以及可信路徑/信道等。第5章“常見(jiàn)安全問(wèn)題”。本章重點(diǎn)介紹了軟件安全設(shè)計(jì)中經(jīng)常出現(xiàn)的編程安全問(wèn)題,本章共列舉66個(gè)安全編碼問(wèn)題,每個(gè)問(wèn)題由問(wèn)題描述、產(chǎn)生條件和問(wèn)題涉及的編程語(yǔ)言3部分構(gòu)成,供開(kāi)發(fā)人員參考。第6章“安全編碼實(shí)踐”,本章重點(diǎn)介紹的內(nèi)容是如何實(shí)現(xiàn)安全的編碼和安全編程實(shí)踐知識(shí),有助于開(kāi)發(fā)人員提高編碼的安全性。第7章“軟件安全測(cè)試”,本章首先對(duì)測(cè)試方法進(jìn)行了系統(tǒng)的概述,之后介紹了單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試、功能測(cè)試、性能測(cè)試以及驗(yàn)收測(cè)試等內(nèi)容;本章前半部分側(cè)重對(duì)軟件測(cè)試過(guò)程進(jìn)行講解,后半部分對(duì)軟件安全測(cè)試進(jìn)行示例。供測(cè)試人員參考。本書(shū)面向的主要對(duì)象包括從事軟件開(kāi)發(fā)工作的軟件技術(shù)人員、從事軟件漏洞分析的安全人員以及學(xué)習(xí)“軟件安全”課程的高等院校信息安全、計(jì)算機(jī)科學(xué)、軟件工程類專業(yè)本科生和研究生。第2章軟件安全開(kāi)發(fā)模型2.1軟件開(kāi)發(fā)模型軟件開(kāi)發(fā)生命周期一般分為定義、開(kāi)發(fā)、運(yùn)行維護(hù)三個(gè)階段。定義階段又可細(xì)分為問(wèn)題定義、可行性研究、需求分析階段;開(kāi)發(fā)階段又可細(xì)分為總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試階段。運(yùn)行維護(hù)階段不再細(xì)分。從軟件開(kāi)發(fā)全過(guò)程來(lái)看,軟件開(kāi)發(fā)模型可歸納為三種基本類型:瀑布型、漸增型、變換型。2.1.1瀑布型軟件開(kāi)發(fā)模型瀑布型軟件開(kāi)發(fā)模型遵循軟件開(kāi)發(fā)生命周期的定義、開(kāi)發(fā)、運(yùn)行維護(hù)三個(gè)階段,明確規(guī)定了各個(gè)細(xì)分階段的任務(wù),每個(gè)階段將上一階段產(chǎn)生的相關(guān)文檔通過(guò)處理,完成本階段任務(wù)后生成的產(chǎn)品、文檔提交給下一階段,最終開(kāi)發(fā)出軟件產(chǎn)品。瀑布型軟件開(kāi)發(fā)模型各階段任務(wù)與輸出結(jié)果,如表2-1所示,其開(kāi)發(fā)模型如圖2-1所示。表2-1瀑布型軟件開(kāi)發(fā)模型各階段任務(wù)與輸出結(jié)果階段基本任務(wù)輸出結(jié)果問(wèn)題定義目標(biāo)理解與范圍界定系統(tǒng)目標(biāo)與范圍說(shuō)明書(shū)可行性研究理解工作范圍確定任務(wù)項(xiàng)目計(jì)劃任務(wù)書(shū)需求分析分析需求、定義用戶要求需求規(guī)格說(shuō)明書(shū)總體設(shè)計(jì)構(gòu)建軟件結(jié)構(gòu)總體設(shè)計(jì)說(shuō)明書(shū)詳細(xì)設(shè)計(jì)各模塊的功能設(shè)計(jì)程序功能說(shuō)明書(shū)編碼編寫程序程序清單測(cè)試發(fā)現(xiàn)和排除錯(cuò)誤軟件產(chǎn)品運(yùn)行維護(hù)運(yùn)行和管理改進(jìn)的軟件產(chǎn)品圖2-1瀑布型軟件開(kāi)發(fā)模型2.1.2漸增型軟件開(kāi)發(fā)模型漸增型軟件開(kāi)發(fā)模型如圖2-2所示,在瀑布型軟件開(kāi)發(fā)模型基礎(chǔ)上通過(guò)問(wèn)題定義,從基本需求分析開(kāi)始進(jìn)行定義、設(shè)計(jì)、編碼、測(cè)試,建立滿足用戶基本需求的原型系統(tǒng)。通過(guò)對(duì)原型系統(tǒng)的測(cè)試、運(yùn)行評(píng)估反饋,進(jìn)一步了解用戶需求進(jìn)行漸增式的設(shè)計(jì)、編碼,修改完善,再測(cè)試與運(yùn)行,如此循環(huán)直至用戶滿意,完成合同提交軟件產(chǎn)品。基于這種模型的軟件開(kāi)發(fā),要求用戶直接參與和配合,軟件文檔隨著軟件開(kāi)發(fā)過(guò)程逐漸形成。圖2-2漸增型軟件開(kāi)發(fā)模型2.1.3變換型軟件開(kāi)發(fā)模型變換型軟件開(kāi)發(fā)模型如圖2-3所示,該模型反映出一種形式化軟件開(kāi)發(fā)的方法,從軟件需求形式化規(guī)格說(shuō)明開(kāi)始,通過(guò)一系列的形式變換處理,最終形成程序軟件系統(tǒng)。該方法主要是在軟件開(kāi)發(fā)生命周期需求、設(shè)計(jì)、編程等不同階段對(duì)相關(guān)規(guī)格說(shuō)明采用形式語(yǔ)言描述,構(gòu)建基于形式語(yǔ)言的代數(shù)模型(包含變換、演算規(guī)則),對(duì)系統(tǒng)的邏輯演繹結(jié)構(gòu)進(jìn)行變換、演算,實(shí)現(xiàn)應(yīng)用軟件系統(tǒng)的開(kāi)發(fā)。例如:基于軟件需求和相關(guān)規(guī)格說(shuō)明的形式化描述,采用進(jìn)程代數(shù)建立模型,通過(guò)變換、演算完成軟件開(kāi)發(fā)。只要形式化描述、變換規(guī)則是正確的,則程序系統(tǒng)一定是正確的。形式化描述、變換處理需要形式語(yǔ)言理論、數(shù)學(xué)工具和技術(shù)的支持。原型檢查原型檢查軟件需求形式化規(guī)格說(shuō)明(軟件需求形式化描述)軟件設(shè)計(jì)形式化規(guī)格說(shuō)明(軟件設(shè)計(jì)形式化描述)變換、演算處理變換、演算處理程序變換、演算規(guī)則變換、演算規(guī)則圖2-3變換型軟件開(kāi)發(fā)模型上述模型是我們?cè)谲浖_(kāi)發(fā)過(guò)程中的常用模型,在開(kāi)發(fā)過(guò)程中可以混合使用。如,采用基于形式化模型快速建立原型系統(tǒng),以漸增的方式改進(jìn)軟件需求形式化描述,進(jìn)行漸增式的設(shè)計(jì)、編碼,修改完善再測(cè)試,直至用戶滿意,完成合同提交軟件產(chǎn)品。2.2常用軟件開(kāi)發(fā)方法隨著軟件開(kāi)發(fā)方法的不斷發(fā)展,除了采用上述模型進(jìn)行開(kāi)發(fā)外,還可采用以下各種軟件開(kāi)發(fā)方法進(jìn)行軟件開(kāi)發(fā)。結(jié)構(gòu)化軟件開(kāi)發(fā)方法結(jié)構(gòu)化軟件開(kāi)發(fā)模型核心思想是自頂向下和逐步求精。對(duì)于一個(gè)復(fù)雜的系統(tǒng),采用“分解和抽象”手段,使其逐層分解直至各子系統(tǒng)足夠簡(jiǎn)單為止。模型使用數(shù)據(jù)流圖、數(shù)據(jù)詞典和小說(shuō)明等規(guī)范工具描述系統(tǒng)。其中小說(shuō)明的表示方法除了自然語(yǔ)言外,通常采用結(jié)構(gòu)化語(yǔ)言、判定表和判定樹(shù)等三種形式。基于上述對(duì)系統(tǒng)的描述,建立系統(tǒng)模塊結(jié)構(gòu)圖或軟件層次方框圖,在此基礎(chǔ)上使用程序語(yǔ)言完成編碼工作。模型采用“分解和抽象”手段,將整個(gè)系統(tǒng)逐層分解直至足夠簡(jiǎn)單的各個(gè)子模塊,這種思想貫穿于軟件開(kāi)發(fā)生命周期系統(tǒng)分析、設(shè)計(jì)和編程全過(guò)程。面向?qū)ο蟮能浖_(kāi)發(fā)方法面向?qū)ο蟮能浖_(kāi)發(fā)模型是圍繞著現(xiàn)實(shí)世界的概念來(lái)組織模型,通過(guò)對(duì)客觀領(lǐng)域的概念進(jìn)行分類和組織來(lái)創(chuàng)建軟件的模型。模型針對(duì)面向?qū)ο筌浖_(kāi)發(fā)生命周期的四個(gè)階段來(lái)組織。=1\*GB2⑴分析階段,該階段的任務(wù)是從問(wèn)題域中抽象出類和對(duì)象的模型。=2\*GB2⑵設(shè)計(jì)階段,設(shè)計(jì)是對(duì)時(shí)間問(wèn)題域的行為進(jìn)行關(guān)鍵抽象再分解的過(guò)程。設(shè)計(jì)的結(jié)果反饋到分析結(jié)果上并進(jìn)行修正,直至關(guān)鍵抽象足夠簡(jiǎn)單不需要再分解時(shí)設(shè)計(jì)結(jié)束。=3\*GB2⑶演化階段,演化實(shí)際上是將編碼、測(cè)試和集成組合在一起的活動(dòng)。=4\*GB2⑷維護(hù)階段,維護(hù)是在軟件系統(tǒng)提交運(yùn)行后進(jìn)行的變更活動(dòng)。組件開(kāi)發(fā)方法基于組件開(kāi)發(fā)是當(dāng)前軟件開(kāi)發(fā)技術(shù)的趨勢(shì),是面向?qū)ο筌浖l(fā)展過(guò)程的延伸,它實(shí)現(xiàn)了分析、設(shè)計(jì)、類等多層次上的重用?;诮M件的軟件開(kāi)發(fā)模型(組件開(kāi)發(fā)模型),將開(kāi)發(fā)過(guò)程分為四個(gè)主要階段:=1\*GB2⑴標(biāo)識(shí)組件。將需要開(kāi)發(fā)的應(yīng)用系統(tǒng)分解為粒度適宜的組件,進(jìn)行標(biāo)識(shí)。=2\*GB2⑵獲取組件。對(duì)于分解后的組件,盡可能地從現(xiàn)有的組件中獲取。=3\*GB2⑶設(shè)計(jì)組件。對(duì)于需要設(shè)計(jì)的新組件,也應(yīng)盡可能地從已有的組件中抽取、修改,對(duì)于需要重新設(shè)計(jì)的組件,在設(shè)計(jì)過(guò)程中要針對(duì)組件的復(fù)用性來(lái)設(shè)計(jì)。=4\*GB2⑷測(cè)試組件。對(duì)獲取、更改和設(shè)計(jì)的組件進(jìn)行測(cè)試,是否滿足功能需求。在組件被一個(gè)新的系統(tǒng)和運(yùn)行環(huán)境接受之前,必須確定組件是否能正確的按規(guī)范說(shuō)明實(shí)現(xiàn)功能。組件開(kāi)發(fā)模型充分體現(xiàn)了組件重用特征。值得說(shuō)明的是,不同組件描述技術(shù)和規(guī)范的不同,如UML、JavaBean、EJB、Servlet等,其模型具體構(gòu)造也不同。敏捷軟件開(kāi)發(fā)方法(Scrum)敏捷軟件開(kāi)發(fā)技術(shù)與模型是敏捷開(kāi)發(fā)的一種,近年內(nèi)逐漸流行起來(lái)。開(kāi)發(fā)軟件就像開(kāi)發(fā)新產(chǎn)品,無(wú)法一開(kāi)始就能定義軟件產(chǎn)品最終的規(guī)程,過(guò)程中需要研發(fā)、創(chuàng)意、嘗試錯(cuò)誤,所以沒(méi)有一種固定的流程可以保證方案的成功。Scrum是英式橄欖球隊(duì),模型將軟件開(kāi)發(fā)團(tuán)隊(duì)比擬成橄欖球隊(duì),有明確的最高目標(biāo),熟悉開(kāi)發(fā)流程中所需具備的最佳典范與技術(shù),具有高度自主權(quán),緊密地溝通合作,以高度彈性解決各種挑戰(zhàn),確保每天、每個(gè)階段都朝向目標(biāo)有明確的推進(jìn)。Scrum開(kāi)發(fā)模型是一種靈活的軟件管理過(guò)程,它可以幫助開(kāi)發(fā)者駕馭迭代、遞增的軟件開(kāi)發(fā)過(guò)程。其輕量過(guò)程可以作為包裝器,也就是說(shuō)可以把Scrum與其它靈活的過(guò)程框架組合起來(lái),比如說(shuō)RUP(Rational

Unified

Process,Rational統(tǒng)一過(guò)程),是一種被廣泛使用的軟件過(guò)程框架,可以很好地迎合開(kāi)發(fā)者軟件開(kāi)發(fā)過(guò)程的需要,還可以容納其他技術(shù)。本節(jié)給出的軟件開(kāi)發(fā)模型保障了用戶需求和軟件系統(tǒng)功能、性能的實(shí)現(xiàn),但是從軟件安全開(kāi)發(fā)生命周期的角度來(lái)看,上述軟件開(kāi)發(fā)模型的安全性,并沒(méi)有系統(tǒng)、完整的體現(xiàn)。2.3安全開(kāi)發(fā)模型從軟件開(kāi)發(fā)生命周期全過(guò)程來(lái)看,軟件安全開(kāi)發(fā)生命周期(SDL,SecureDevelopmentLifecycle)模型核心思想是在軟件開(kāi)發(fā)生命周期的每個(gè)階段融合安全要素,用以解決軟件開(kāi)發(fā)各階段可能出現(xiàn)的安全問(wèn)題。在瀑布型、漸增型軟件開(kāi)發(fā)模型基礎(chǔ)上融合安全要素,構(gòu)建的面向軟件開(kāi)發(fā)生命周期的一類基本軟件安全開(kāi)發(fā)模型如圖2-4所示。該模型通過(guò)項(xiàng)目啟動(dòng)階段中安全原則制定、需求階段中的安全需求分析、設(shè)計(jì)階段中的架構(gòu)和設(shè)計(jì)安全分析與評(píng)審、編碼階段中的安全編碼原則與實(shí)施、測(cè)試階段中的安全測(cè)試等策略、方法,達(dá)到減少軟件開(kāi)發(fā)過(guò)程中引入的安全漏洞數(shù)量,確保軟件開(kāi)發(fā)的安全性及安全軟件的實(shí)現(xiàn)。圖2-4軟件安全開(kāi)發(fā)模型該軟件安全開(kāi)發(fā)模型面向軟件開(kāi)發(fā)生命周期各階段融合了安全要素:安全基本原則、安全需求、安全設(shè)計(jì)與架構(gòu)評(píng)審、威脅建模、安全編碼、安全測(cè)試、安全評(píng)審評(píng)估等安全活動(dòng)與方法,是面向軟件開(kāi)發(fā)生命周期的一類基本的軟件安全開(kāi)發(fā)模型。軟件安全開(kāi)發(fā)模型、安全開(kāi)發(fā)建模方法與應(yīng)用是信息安全技術(shù)領(lǐng)域的研究熱點(diǎn),代表性的有微軟的安全開(kāi)發(fā)生命周期模型(MicrosoftSDL)、McGraw的軟件安全接觸點(diǎn)模型(BuildingSecurityIn,BSI)、美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)的安全開(kāi)發(fā)生命周期模型等。2.4微軟安全開(kāi)發(fā)生命周期模型2.4.1安全生命周期模型(SDL)微軟的安全開(kāi)發(fā)生命周期(MicrosoftSDL)模型(/sdl)是用于改進(jìn)軟件安全和隱私保護(hù)的過(guò)程。SDL模型將軟件開(kāi)發(fā)生命周期劃分為需求分析、軟件設(shè)計(jì)、代碼實(shí)現(xiàn)、審查、產(chǎn)品發(fā)布五個(gè)階段,它包括了必需的安全活動(dòng):安全培訓(xùn)、安全需求、安全設(shè)計(jì)、安全實(shí)施、安全驗(yàn)證和發(fā)布與響應(yīng)。這與2.3節(jié)面向軟件開(kāi)發(fā)生命周期的軟件安全開(kāi)發(fā)模型中的安全基本原則、安全需求、安全設(shè)計(jì)與架構(gòu)評(píng)審、威脅建模、安全編碼、安全測(cè)試、安全評(píng)審評(píng)估等安全活動(dòng)與內(nèi)容基本一致。MicrosoftSDL模型不僅包括遵從通常軟件開(kāi)發(fā)過(guò)程的必需行動(dòng),還十分靈活,允許添加其他策略和方法,從而創(chuàng)建組織所特有的軟件開(kāi)發(fā)方法體系。提供的過(guò)程、培訓(xùn)和工具的組合具有明顯的優(yōu)勢(shì),如可增強(qiáng)可預(yù)測(cè)性、技術(shù)能力及軟件安全性,這些優(yōu)勢(shì)可降低組織及軟件用戶的風(fēng)險(xiǎn)。MicrosoftSDL模型對(duì)開(kāi)發(fā)過(guò)程進(jìn)行了擴(kuò)充,在開(kāi)發(fā)過(guò)程的各個(gè)階段加入一系列安全活動(dòng),并形成相應(yīng)的交付物和報(bào)告進(jìn)行安全審查。這些安全活動(dòng)和報(bào)告包括:1)需求分析階段,對(duì)安全功能的要求和可信行為進(jìn)行確切定義,定義安全目標(biāo)、安全需求特性和保障措施、檢驗(yàn)準(zhǔn)則;2)軟件設(shè)計(jì)階段,對(duì)安全風(fēng)險(xiǎn)識(shí)別中的安全架構(gòu)、威脅建模,風(fēng)險(xiǎn)分析,關(guān)鍵組件和攻擊面進(jìn)行識(shí)別,確定設(shè)計(jì)技術(shù)指南等;3)代碼實(shí)現(xiàn)階段,建立安全編碼原則與標(biāo)準(zhǔn),使用靜態(tài)分析、代碼掃描工具和代碼審核工具進(jìn)行代碼測(cè)試,以及以安全為核心的測(cè)試(如Fuzz測(cè)試);4)審查階段,進(jìn)行代碼審核、安全測(cè)試;5)產(chǎn)品發(fā)布階段,首先進(jìn)行最終安全復(fù)審(FSR),系統(tǒng)部署后為反饋的新漏洞設(shè)置響應(yīng)機(jī)制,避免在后續(xù)開(kāi)發(fā)過(guò)程中再次出現(xiàn)。此外,SDL模型強(qiáng)調(diào)在系統(tǒng)安全開(kāi)發(fā)項(xiàng)目啟動(dòng)階段引入安全顧問(wèn)的角色,安全顧問(wèn)統(tǒng)籌和指導(dǎo)系統(tǒng)安全開(kāi)發(fā)全過(guò)程,直到最終安全復(fù)審(FSR)結(jié)束。微軟通過(guò)利用安全衡量指標(biāo),以及微軟核心安全團(tuán)隊(duì)的安全專業(yè)知識(shí)對(duì)軟件開(kāi)發(fā)人員進(jìn)行強(qiáng)制性的安全培訓(xùn)。從微軟的報(bào)告發(fā)現(xiàn),利用SDL開(kāi)發(fā)產(chǎn)品的安全性能令人鼓舞。2.4.2SDL優(yōu)化模型軟件安全開(kāi)發(fā)是成功還是失敗,通常取決于組織規(guī)模、資源(時(shí)間、人才和預(yù)算)以及高層支持等因素。將安全開(kāi)發(fā)概念整合到現(xiàn)有開(kāi)發(fā)過(guò)程時(shí),如果方式不當(dāng),可能會(huì)造成不利的局面而且成本高昂。因此,需要正確地理解安全開(kāi)發(fā)實(shí)踐的要素,選用合適的開(kāi)發(fā)模型,根據(jù)開(kāi)發(fā)團(tuán)隊(duì)的成熟度水平確定實(shí)施優(yōu)先級(jí),控制無(wú)形因素的影響。為此,Microsoft創(chuàng)建了具有功能和成熟度水平的SDL優(yōu)化模型,如圖2-5所示。圖圖2-5具有功能和成熟度水平的SDL優(yōu)化模型SDL優(yōu)化模型圍繞五個(gè)功能領(lǐng)域構(gòu)建,這些領(lǐng)域大致與軟件開(kāi)發(fā)生命周期模型的各個(gè)階段相對(duì)應(yīng)。包括:培訓(xùn)、政策和組織功能、要求和設(shè)計(jì)、實(shí)施、驗(yàn)證、發(fā)布和響應(yīng)。針對(duì)上述領(lǐng)域中的實(shí)踐和功能,SDL優(yōu)化模型定義了基本、標(biāo)準(zhǔn)化、高級(jí)和動(dòng)態(tài)四個(gè)成熟度水平。SDL優(yōu)化模型從基本成熟度水平(幾乎或完全沒(méi)有任何過(guò)程、培訓(xùn)和工具)開(kāi)始,發(fā)展到動(dòng)態(tài)成熟度水平(特點(diǎn)是整個(gè)組織完全遵循SDL)。完全遵循SDL包括:高效的過(guò)程、訓(xùn)練有素的人員、專用工具以及組織內(nèi)部和外部各方的強(qiáng)烈責(zé)任感。與其他軟件成熟度模型相比,MicrosoftSDL優(yōu)化模型嚴(yán)格側(cè)重于開(kāi)發(fā)過(guò)程改進(jìn)。它提供可操作的說(shuō)明性指南,說(shuō)明如何從較低水平的過(guò)程成熟度發(fā)展為較高水平的過(guò)程成熟度。2.4.3SDL安全人員角色對(duì)于實(shí)施MicrosoftSDL控制的軟件安全開(kāi)發(fā)項(xiàng)目,為組織設(shè)定明確的預(yù)期值是非常重要的。實(shí)踐經(jīng)驗(yàn)表明,具備以下一個(gè)或多個(gè)特征的應(yīng)用程序的開(kāi)發(fā)應(yīng)實(shí)施SDL控制:1)在業(yè)務(wù)或企業(yè)環(huán)境中部署;2)處理個(gè)人可識(shí)別信息(PII)或其他敏感信息;3)定期通過(guò)Internet或其他網(wǎng)絡(luò)進(jìn)行通信;4)計(jì)算技術(shù)無(wú)處不在,威脅環(huán)境不斷變化,因此,可能更方便的方式是確定不需要實(shí)施安全;5)控制(如SDL安全控制)的應(yīng)用程序開(kāi)發(fā)項(xiàng)目。如果確定對(duì)某個(gè)軟件開(kāi)發(fā)項(xiàng)目實(shí)施SDL控制,為符合MicrosoftSDL過(guò)程的要求,開(kāi)發(fā)團(tuán)隊(duì)必須成功完成必需的安全活動(dòng)。這些必需活動(dòng)已由安全和隱私專家確認(rèn)有效,并且會(huì)作為嚴(yán)格的年度評(píng)估過(guò)程的一部分,不斷進(jìn)行有效性評(píng)析。為確定軟件開(kāi)發(fā)項(xiàng)目中存在的安全和隱私問(wèn)題并進(jìn)行分類和緩解,軟件開(kāi)發(fā)項(xiàng)目中開(kāi)發(fā)團(tuán)隊(duì)需要有安全人員角色構(gòu)成的組織結(jié)構(gòu)。這些角色包括:1)評(píng)析者/顧問(wèn)角色。這些角色的任務(wù)是對(duì)項(xiàng)目安全和隱私進(jìn)行監(jiān)督,有權(quán)接受或拒絕項(xiàng)目團(tuán)隊(duì)的安全和隱私計(jì)劃。2)安全顧問(wèn)/隱私顧問(wèn)。這些角色由項(xiàng)目團(tuán)隊(duì)外部的主題專家(SME)擔(dān)任。該角色可以由組織中專門進(jìn)行此類評(píng)析的獨(dú)立集中小組中的合格成員擔(dān)任,也可以由組織外部的專家擔(dān)任。最好是集中的內(nèi)部顧問(wèn)小組;內(nèi)部顧問(wèn)小組具備組織環(huán)境和過(guò)程知識(shí),這是外部專家無(wú)法做到的。為此任務(wù)選擇的人員必須擔(dān)任兩個(gè)子角色:(1)審計(jì)官。此角色必須監(jiān)控軟件開(kāi)發(fā)過(guò)程的每個(gè)階段,并證明每個(gè)安全要求的成功實(shí)現(xiàn)。審計(jì)官必須能夠自主證明過(guò)程是否符合安全和隱私方面的要求,而不受項(xiàng)目團(tuán)隊(duì)的干擾。(2)專家。為顧問(wèn)角色選擇的人員必須在安全方面擁有可靠的相關(guān)專業(yè)知識(shí)。3)顧問(wèn)角色組合。如果可以確認(rèn)某人具有合適的技能和經(jīng)驗(yàn),則安全顧問(wèn)的角色可以與隱私顧問(wèn)的角色合二為一。4)團(tuán)隊(duì)負(fù)責(zé)人。團(tuán)隊(duì)負(fù)責(zé)人角色應(yīng)由項(xiàng)目團(tuán)隊(duì)的主題專家擔(dān)任。這些角色負(fù)責(zé)協(xié)商、接受和跟蹤最低安全和隱私要求,并在軟件開(kāi)發(fā)項(xiàng)目過(guò)程中與顧問(wèn)和決策者保持通暢的溝通渠道。5)安全負(fù)責(zé)人/隱私負(fù)責(zé)人。此角色(一人或多人)不僅負(fù)責(zé)確保軟件發(fā)布解決了所有安全問(wèn)題,還負(fù)責(zé)協(xié)調(diào)和跟蹤項(xiàng)目的安全問(wèn)題。此角色還負(fù)責(zé)向安全顧問(wèn)和項(xiàng)目團(tuán)隊(duì)的其他相關(guān)方(例如,開(kāi)發(fā)和測(cè)試負(fù)責(zé)人)報(bào)告情況。6)角色組合。與安全和隱私顧問(wèn)角色一樣,如果可以確認(rèn)某人具有合適的技能和經(jīng)驗(yàn),則可以由一人承擔(dān)安全負(fù)責(zé)人和隱私負(fù)責(zé)人的角色,并履行其職責(zé)。2.4.4SDL模型安全活動(dòng)MicrosoftSDL模型規(guī)定了一組必須的安全活動(dòng),為了實(shí)現(xiàn)所需安全和隱私目標(biāo),項(xiàng)目團(tuán)隊(duì)或安全顧問(wèn)可以自行決定添加可選的安全活動(dòng)。圖2-6(a)、2-6(b)表示了SDL模型過(guò)程詳細(xì)關(guān)系圖。該圖以直觀的方式說(shuō)明一個(gè)假設(shè)項(xiàng)目中使用的安全活動(dòng)(從培訓(xùn)員工到應(yīng)用程序發(fā)布)。圖中包括了必需和可選的任務(wù)。圖2-6(a)SDL模型過(guò)程詳細(xì)關(guān)系圖圖2-6(b)SDL模型過(guò)程詳細(xì)關(guān)系圖(續(xù))值得注意的一個(gè)基本概念是,模型注重每個(gè)階段產(chǎn)生輸出的質(zhì)量和完整性。SDL優(yōu)化模型的高級(jí)和動(dòng)態(tài)水平開(kāi)發(fā)運(yùn)營(yíng)組織,應(yīng)具備一定程度的安全過(guò)程復(fù)雜性。盡管如此,這并不影響威脅模型的產(chǎn)生方式。例如,可以通過(guò)與開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行白板會(huì)議產(chǎn)生威脅模型;在文檔中以敘述形式描述威脅模型;也可以使用專用工具(如SDL威脅建模工具)生成威脅模型。高效的工具和過(guò)程自動(dòng)化會(huì)使SDL實(shí)現(xiàn)過(guò)程受益,其實(shí)際價(jià)值在于可以獲得全面而準(zhǔn)確的結(jié)果。針對(duì)SDL模型的簡(jiǎn)化描述如圖2-7所示,它包括了必需的安全活動(dòng):安全培訓(xùn)、安全需求、安全設(shè)計(jì)、實(shí)施安全、驗(yàn)證安全和發(fā)布與響應(yīng)。圖2-7MicrosoftSDL模型(簡(jiǎn)化圖)在下面的各小節(jié)中,具體描述了安全生命周期模型(SDL)在開(kāi)發(fā)過(guò)程的各個(gè)階段的一系列安全活動(dòng)。2.4.5培訓(xùn)階段培訓(xùn)階段,軟件開(kāi)發(fā)團(tuán)隊(duì)的所有成員都必須接受適當(dāng)?shù)呐嘤?xùn),了解安全基礎(chǔ)知識(shí)以及安全和隱私方面的最新發(fā)展趨勢(shì)。直接參與軟件程序開(kāi)發(fā)的技術(shù)角色人員(開(kāi)發(fā)人員、測(cè)試人員和程序經(jīng)理)每年至少必須參加一門特有的安全培訓(xùn)課程?;拒浖踩嘤?xùn)應(yīng)涵蓋的基礎(chǔ)概念包括:(1)安全設(shè)計(jì)培訓(xùn)包括以下主題:減小攻擊面、深度防御、最小權(quán)限原則、安全默認(rèn)設(shè)置;(2)威脅建模培訓(xùn)包括以下主題:威脅建模概述、威脅模型的設(shè)計(jì)意義、基于威脅模型的編碼約束;(3)安全編碼培訓(xùn)包括以下主題:緩沖區(qū)溢出(對(duì)于使用C和C++的應(yīng)用程序)、整數(shù)算法錯(cuò)誤(對(duì)于使用C和C++的應(yīng)用程序)、跨站點(diǎn)腳本(對(duì)于托管代碼和Web應(yīng)用程序)、SQL注入(對(duì)于托管代碼和Web應(yīng)用程序);(4)弱加密安全測(cè)試培訓(xùn)包括以下主題:安全測(cè)試與功能測(cè)試之間的區(qū)別、風(fēng)險(xiǎn)評(píng)估、安全測(cè)試方法;(5)隱私保護(hù)培訓(xùn)包括以下主題:隱私敏感數(shù)據(jù)的類型、隱私設(shè)計(jì)最佳實(shí)踐、風(fēng)險(xiǎn)評(píng)估、隱私開(kāi)發(fā)最佳實(shí)踐、隱私測(cè)試最佳實(shí)踐;(6)高級(jí)概念方面的培訓(xùn)包括但不限于以下方面:高級(jí)安全設(shè)計(jì)和體系結(jié)構(gòu)、可信用戶界面設(shè)計(jì)、安全漏洞細(xì)節(jié)、實(shí)施自定義威脅緩解。2.4.6需求階段需求階段,“預(yù)先”考慮安全和隱私是開(kāi)發(fā)安全系統(tǒng)過(guò)程的基礎(chǔ)環(huán)節(jié)。在初始計(jì)劃中,為軟件項(xiàng)目定義信任度要求是最佳的時(shí)間。盡早定義安全要求有助于開(kāi)發(fā)團(tuán)隊(duì)確定關(guān)鍵里程碑和交付成果,并使集成安全和隱私的過(guò)程盡量不影響計(jì)劃和安排。在項(xiàng)目初期對(duì)安全和隱私要求的分析,涉及在計(jì)劃運(yùn)行環(huán)境中運(yùn)行的軟件程序確定最低安全要求,并確立和部署安全漏洞或者工作項(xiàng)以跟蹤系統(tǒng)開(kāi)發(fā)。1.SDL質(zhì)量門/缺陷(Bug)欄質(zhì)量門和缺陷欄用于確立安全和隱私質(zhì)量的最低可接受級(jí)別。在項(xiàng)目開(kāi)始時(shí)定義這些標(biāo)準(zhǔn)可加強(qiáng)對(duì)安全問(wèn)題相關(guān)風(fēng)險(xiǎn)的理解,并有助于團(tuán)隊(duì)在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)和修復(fù)安全缺陷。項(xiàng)目團(tuán)隊(duì)必須協(xié)商確定每個(gè)開(kāi)發(fā)階段的質(zhì)量門(例如,必須在嵌入代碼之前會(huì)審并修復(fù)所有編譯器警告),隨后將質(zhì)量門交由安全顧問(wèn)審批。安全顧問(wèn)可以根據(jù)需要添加特定于項(xiàng)目的說(shuō)明以及更加嚴(yán)格的安全要求。缺陷欄是應(yīng)用于整個(gè)軟件開(kāi)發(fā)項(xiàng)目的質(zhì)量門,它用于定義安全漏洞的嚴(yán)重性閾值。例如,應(yīng)用程序在發(fā)布時(shí)不得包含具有“關(guān)鍵”或“重要”評(píng)級(jí)的已知漏洞。缺陷欄一經(jīng)設(shè)定,便絕不能放松。動(dòng)態(tài)缺陷欄是一種不斷變化的目標(biāo),可能不便于開(kāi)發(fā)組織的理解。2.安全和隱私風(fēng)險(xiǎn)評(píng)估安全風(fēng)險(xiǎn)評(píng)估(SRA)和隱私風(fēng)險(xiǎn)評(píng)估(PRA)是必需的過(guò)程,用于確定軟件中需要深入評(píng)析的功能環(huán)節(jié)。這些評(píng)估必須包括以下信息:1)安全項(xiàng)目的哪些部分在發(fā)布前需要威脅模型;2)安全項(xiàng)目的哪些部分在發(fā)布前需要進(jìn)行安全設(shè)計(jì)評(píng)析;3)安全項(xiàng)目的哪些部分(如果有)需要由不屬于項(xiàng)目團(tuán)隊(duì)且雙方認(rèn)可的小組進(jìn)行滲透測(cè)試;4)安全是否存在安全顧問(wèn)認(rèn)為有必要增加的測(cè)試或分析要求,以緩解安全風(fēng)險(xiǎn);5)安全模糊測(cè)試要求的具體范圍是什么;6)基于以下準(zhǔn)則回答隱私對(duì)評(píng)級(jí)的影響:=1\*GB2⑴P1高隱私風(fēng)險(xiǎn)。功能、產(chǎn)品或服務(wù)將存儲(chǔ)或傳輸PII,更改設(shè)置或文件類型關(guān)聯(lián),或是安裝軟件。=2\*GB2⑵P2中等隱私風(fēng)險(xiǎn)。功能、產(chǎn)品或服務(wù)中影響隱私的唯一行為是用戶啟動(dòng)的一次性匿名數(shù)據(jù)傳輸(例如,軟件在用戶單擊鏈接后轉(zhuǎn)到外部網(wǎng)站)。=3\*GB2⑶P3低隱私風(fēng)險(xiǎn)。功能、產(chǎn)品或服務(wù)中不存在影響隱私的行為。不會(huì)傳輸匿名或個(gè)人數(shù)據(jù),不在計(jì)算機(jī)上存儲(chǔ)PII,不代替用戶更改設(shè)置,并且不安裝軟件。2.4.7設(shè)計(jì)階段設(shè)計(jì)階段,至關(guān)重要的是應(yīng)仔細(xì)考慮安全和隱私問(wèn)題。如果在項(xiàng)目生命周期的開(kāi)始階段執(zhí)行緩解措施,則緩解安全和隱私問(wèn)題的成本會(huì)低得多。項(xiàng)目團(tuán)隊(duì)?wèi)?yīng)避免到項(xiàng)目開(kāi)發(fā)將近結(jié)束時(shí)再“插入”安全和隱私功能及緩解措施。此外,項(xiàng)目團(tuán)隊(duì)還必須理解“安全的功能”與“安全功能”之間的區(qū)別。實(shí)現(xiàn)的安全功能實(shí)際上很可能是不安全的?!鞍踩墓δ堋倍x為在安全方面進(jìn)行了完善設(shè)計(jì)的功能,比如在處理之前對(duì)所有數(shù)據(jù)進(jìn)行嚴(yán)格驗(yàn)證或是通過(guò)加密方式可靠地實(shí)現(xiàn)加密服務(wù)庫(kù)?!鞍踩δ堋泵枋鼍哂邪踩绊懙某绦蚬δ?,如Kerberos身份驗(yàn)證或防火墻。創(chuàng)建安全和隱私設(shè)計(jì)規(guī)范設(shè)計(jì)要求活動(dòng)包含一些必需行動(dòng)。包括創(chuàng)建安全和隱私設(shè)計(jì)規(guī)范、規(guī)范評(píng)析以及最低加密設(shè)計(jì)要求規(guī)范。設(shè)計(jì)規(guī)范應(yīng)描述用戶會(huì)直接接觸的安全或隱私功能,如需要用戶身份驗(yàn)證才能訪問(wèn)特定數(shù)據(jù)或在使用高風(fēng)險(xiǎn)隱私功能前需要用戶同意的那些功能。此外,所有設(shè)計(jì)規(guī)范都應(yīng)描述如何安全地實(shí)現(xiàn)給定特性或功能所提供的全部功能。針對(duì)應(yīng)用程序的功能規(guī)范驗(yàn)證設(shè)計(jì)規(guī)范。功能規(guī)范應(yīng):準(zhǔn)確完整地描述特性或功能的預(yù)期用途;描述如何以安全的方式部署特性或功能。減小攻擊面在安全設(shè)計(jì)中,減小攻擊面與威脅建模緊密相關(guān),不過(guò)它解決安全問(wèn)題的角度稍有不同。減小攻擊面通過(guò)減少攻擊者利用潛在弱點(diǎn)或漏洞的機(jī)會(huì)來(lái)降低風(fēng)險(xiǎn)。減小攻擊面包括關(guān)閉或限制對(duì)系統(tǒng)服務(wù)的訪問(wèn)、應(yīng)用最小權(quán)限原則以及盡可能進(jìn)行分層防御。威脅建模威脅建模用于存在重大安全風(fēng)險(xiǎn)的環(huán)境之中。威脅建模使開(kāi)發(fā)團(tuán)隊(duì)可以在其計(jì)劃的運(yùn)行環(huán)境的背景下,以結(jié)構(gòu)化方式考慮、記錄并討論設(shè)計(jì)的安全影響。通過(guò)威脅建模還可以考慮組件或應(yīng)用程序級(jí)別的安全問(wèn)題。威脅建模是一項(xiàng)團(tuán)隊(duì)活動(dòng)(涉及項(xiàng)目經(jīng)理、開(kāi)發(fā)人員和測(cè)試人員),并且是軟件開(kāi)發(fā)設(shè)計(jì)階段中執(zhí)行的主要安全分析任務(wù)。首選的威脅建模方法是使用基于STRIDE威脅等級(jí)分類法的SDL威脅建模工具。2.4.8實(shí)施階段使用批準(zhǔn)的工具所有開(kāi)發(fā)團(tuán)隊(duì)都應(yīng)定義并發(fā)布獲準(zhǔn)工具及其關(guān)聯(lián)安全檢查的列表,如編譯器或鏈接器選項(xiàng)和警告。此列表應(yīng)由項(xiàng)目團(tuán)隊(duì)的安全顧問(wèn)進(jìn)行批準(zhǔn)。一般而言,開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)盡量使用最新版本的獲準(zhǔn)工具,以利用新的安全分析功能和保護(hù)措施。棄用不安全的函數(shù)許多常用函數(shù)和應(yīng)用編程接口(API),在當(dāng)前威脅環(huán)境下并不安全。項(xiàng)目團(tuán)隊(duì)?wèi)?yīng)分析與軟件開(kāi)發(fā)項(xiàng)目結(jié)合使用的所有函數(shù)和API,并禁用確定為不安全的函數(shù)和API。確定禁用列表之后,項(xiàng)目團(tuán)隊(duì)?wèi)?yīng)使用頭文件(如banned.h和strsafe.h)、較新的編譯器或代碼掃描工具來(lái)檢查代碼(在適當(dāng)情況下還包括舊代碼)中是否存在禁用函數(shù),并使用更安全的備選函數(shù)替代這些禁用函數(shù)。靜態(tài)分析項(xiàng)目團(tuán)隊(duì)?wèi)?yīng)對(duì)源代碼執(zhí)行靜態(tài)分析。源代碼靜態(tài)分析為安全代碼評(píng)析提供了伸縮性,可以幫助確保對(duì)安全代碼策略的遵守。靜態(tài)代碼分析本身通常不足以替代人工代碼評(píng)析。安全團(tuán)隊(duì)和安全顧問(wèn)應(yīng)了解靜態(tài)分析工具的優(yōu)點(diǎn)和缺點(diǎn),并準(zhǔn)備好根據(jù)需要為靜態(tài)分析工具輔以其他工具或人工評(píng)析。一般而言,開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)確定執(zhí)行靜態(tài)分析的最佳頻率,從而在工作效率與足夠的安全覆蓋率之間取得平衡。2.4.9驗(yàn)證階段1.動(dòng)態(tài)程序分析為確保程序功能按照設(shè)計(jì)方式工作,有必要對(duì)運(yùn)行時(shí)的軟件程序進(jìn)行驗(yàn)證。此驗(yàn)證任務(wù)應(yīng)指定一些工具,用以監(jiān)控應(yīng)用程序行為是否存在內(nèi)存損壞、用戶權(quán)限問(wèn)題以及其他重要安全問(wèn)題。SDL過(guò)程使用運(yùn)行時(shí)工具(如AppVerifier)以及其他方法(如模糊測(cè)試)來(lái)實(shí)現(xiàn)所需級(jí)別的安全測(cè)試覆蓋率。2.模糊測(cè)試模糊測(cè)試是一種專門形式的動(dòng)態(tài)分析,它通過(guò)故意向應(yīng)用程序引入不良格式或隨機(jī)數(shù)據(jù)誘發(fā)程序故障。模糊測(cè)試策略的制定以應(yīng)用程序的預(yù)期用途、應(yīng)用程序的功能和設(shè)計(jì)規(guī)范為基礎(chǔ)。安全顧問(wèn)可能要求進(jìn)行額外的模糊測(cè)試或擴(kuò)大模糊測(cè)試的范圍和增加持續(xù)時(shí)間。3.威脅模型和攻擊面評(píng)析應(yīng)用程序經(jīng)常會(huì)嚴(yán)重偏離在軟件開(kāi)發(fā)項(xiàng)目要求和設(shè)計(jì)階段所制定的功能和設(shè)計(jì)規(guī)范上。因此,在給定應(yīng)用程序完成編碼后重新評(píng)析其威脅模型和攻擊面度量是非常重要的。此評(píng)析可確保對(duì)系統(tǒng)設(shè)計(jì)或?qū)崿F(xiàn)方面所做的全部更改,并確保因這些更改而形成的所有新攻擊平臺(tái)得以評(píng)析和緩解。2.4.10發(fā)布和響應(yīng)階段事件響應(yīng)計(jì)劃受SDL要求約束的每個(gè)軟件發(fā)布都必須包含事件響應(yīng)計(jì)劃。即使在發(fā)布時(shí)不包含任何已知漏洞的程序也可能面臨日后新出現(xiàn)的威脅。事件響應(yīng)計(jì)劃包括:?jiǎn)为?dú)指定的可持續(xù)工程(SE)團(tuán)隊(duì)。如果團(tuán)隊(duì)太小以至于無(wú)法擁有SE資源,則應(yīng)制定緊急響應(yīng)計(jì)劃(ERP),在該計(jì)劃中確定相應(yīng)的工程、市場(chǎng)營(yíng)銷、通信和管理人員充當(dāng)發(fā)生安全緊急事件時(shí)的首要聯(lián)系點(diǎn)。與決策機(jī)構(gòu)的電話聯(lián)系(7天24小時(shí)隨時(shí)可用)。針對(duì)從組織中其他小組繼承的代碼的安全維護(hù)計(jì)劃。針對(duì)獲得許可的第三方代碼的安全維護(hù)計(jì)劃,包括文件名、版本、源代碼、第三方聯(lián)系信息以及要更改的合同許可(如果適用)。最終安全評(píng)析最終安全評(píng)析(FSR)是在發(fā)布之前仔細(xì)檢查對(duì)軟件應(yīng)用程序執(zhí)行的所有安全活動(dòng)。FSR由安全顧問(wèn)在普通開(kāi)發(fā)人員以及安全和隱私團(tuán)隊(duì)負(fù)責(zé)人的協(xié)助下執(zhí)行。FSR不是“滲透和修補(bǔ)”活動(dòng),也不是用于執(zhí)行以前忽略或忘記的安全活動(dòng)的時(shí)機(jī)。FSR通常要根據(jù)以前確定的質(zhì)量門或缺陷欄檢查威脅模型、異常請(qǐng)求、工具輸出和性能。通過(guò)FSR將得出以下三種不同結(jié)果:通過(guò)FSR。在FSR過(guò)程中確定的所有安全和隱私問(wèn)題都已得到修復(fù)或緩解。通過(guò)FSR但有異常。在FSR過(guò)程中確定的安全和隱私問(wèn)題都已得到修復(fù)或緩解,并且/或者異常都已得到圓滿解決。無(wú)法解決的問(wèn)題(例如,由以往的“設(shè)計(jì)水平”問(wèn)題導(dǎo)致的漏洞)將記錄下來(lái),在下次發(fā)布時(shí)更正。需上報(bào)問(wèn)題的FSR。如果團(tuán)隊(duì)未滿足所有SDL要求,并且安全顧問(wèn)和產(chǎn)品團(tuán)隊(duì)無(wú)法達(dá)成一致接受,則安全顧問(wèn)不能批準(zhǔn)項(xiàng)目,項(xiàng)目不能發(fā)布。團(tuán)隊(duì)必須在發(fā)布之前解決所有可以解決的SDL要求問(wèn)題,或是上報(bào)高級(jí)管理層進(jìn)行抉擇。發(fā)布/存檔發(fā)布軟件的生產(chǎn)版本(RTM)還是Web版本(RTW)取決于SDL過(guò)程完成時(shí)的條件。指派負(fù)責(zé)發(fā)布事宜的安全顧問(wèn)必須證明(使用FSR和其他數(shù)據(jù))項(xiàng)目團(tuán)隊(duì)已滿足安全要求。同樣,對(duì)于至少有一個(gè)組件具有相應(yīng)隱私影響評(píng)級(jí)的所有產(chǎn)品,項(xiàng)目的隱私顧問(wèn)必須先證明項(xiàng)目團(tuán)隊(duì)滿足隱私要求,然后才能交付軟件。此外,必須對(duì)所有相關(guān)信息和數(shù)據(jù)進(jìn)行存檔,以便可以對(duì)軟件進(jìn)行發(fā)布后維護(hù)。這些信息和數(shù)據(jù)包括所有規(guī)范、源代碼、二進(jìn)制文件、專用符號(hào)、威脅模型、文檔、緊急響應(yīng)計(jì)劃、任何第三方軟件的許可證和服務(wù)條款,以及執(zhí)行發(fā)布后維護(hù)任務(wù)所需的任何其他數(shù)據(jù)。2.4.11可選的安全活動(dòng)SDL中可選的安全活動(dòng),通常在軟件應(yīng)用程序可能用于重要環(huán)境或方案時(shí)執(zhí)行。這些活動(dòng)通常由安全顧問(wèn)在附加商定要求集中指定,以確保對(duì)某些軟件組件進(jìn)行更高級(jí)別的安全分析。1.人工代碼審核人工代碼審核是SDL中的可選任務(wù),通常由應(yīng)用程序安全團(tuán)隊(duì)中具備高技能的人員或由安全顧問(wèn)執(zhí)行。盡管分析工具可以進(jìn)行很多查找和標(biāo)記漏洞的工作,但這些工具并不完美。因此,人工代碼審核通常側(cè)重于應(yīng)用程序的“關(guān)鍵”組件。這種審核最常用在處理或存儲(chǔ)敏感信息(如個(gè)人身份信息(PII))的組件中。另外,此活動(dòng)也用于檢查其他關(guān)鍵功能,如加密實(shí)現(xiàn)。2.滲透測(cè)試滲透測(cè)試是對(duì)軟件系統(tǒng)進(jìn)行白盒安全分析,由高技能安全專業(yè)人員通過(guò)模擬黑客操作執(zhí)行。滲透測(cè)試的目的是發(fā)現(xiàn)由于編碼錯(cuò)誤、系統(tǒng)配置錯(cuò)誤或其他運(yùn)行部署弱點(diǎn)導(dǎo)致的潛在漏洞。滲透測(cè)試通常與自動(dòng)及人工代碼評(píng)析一起執(zhí)行,以提供比平常更高級(jí)別的分析。3.相似應(yīng)用程序的漏洞分析

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論