1.1 軟件安全的重要性
當前,軟件已融入人們?nèi)粘I畹姆椒矫婷妫呀?jīng)成為國家和社會關鍵基礎設施的重要組成部分,因此,軟件的安全關乎信息系統(tǒng)的安全,關乎關鍵基礎設施的安全,關乎個人安全乃至社會和國家的安全。本節(jié)將通過介紹震網(wǎng)病毒進行零日攻擊的案例帶領大家來認識軟件安全的重要性。
【案例1】零日攻擊、網(wǎng)絡戰(zhàn)與軟件安全
曝光美國棱鏡計劃的愛德華·斯諾登(Edward Snowdon)證實,為了破壞伊朗的核項目,美國國家安全局和以色列合作研制了震網(wǎng)(Stuxnet)病毒,以入侵伊朗核設施網(wǎng)絡,改變其數(shù)千臺離心機的運行速度。
震網(wǎng)病毒攻擊目標精準,主要利用了德國西門子公司的SIMATIC WinCC系統(tǒng)的漏洞。WinCC系統(tǒng)是一款數(shù)據(jù)采集與監(jiān)視控制(SCADA)系統(tǒng),被伊朗廣泛應用于國防基礎工業(yè)設施中。病毒到達裝有WinCC系統(tǒng)用于控制離心機的主機后,首先記錄離心機正常運轉(zhuǎn)時的數(shù)據(jù),如某個閥門的狀態(tài)或操作溫度,然后將這個數(shù)據(jù)不斷地發(fā)送到監(jiān)控設備上,以使工作人員認為離心機工作正常。與此同時,病毒控制WinCC系統(tǒng)向合法的控制代碼提供預先準備好的虛假輸入信號,以控制原有程序。這時,離心機就會得到錯誤的控制信息,使其運轉(zhuǎn)速度失控,最后達到令離心機癱瘓乃至報廢的目的。而核設施工作人員在一定時間內(nèi)會被監(jiān)控設備上顯示的虛假數(shù)據(jù)所蒙騙,誤認為離心機仍在正常工作,等到他們察覺到異常時為時已晚,很多離心機已經(jīng)遭到不可挽回的損壞。
2014年,美國自由撰稿人金·澤特(Kim Zetter)出版了Countdown to Zero Day: Stuxnetand the Launch of the World' s First Digital Weapon(《零日攻擊:震網(wǎng)病毒全揭秘》)一書,如圖1-1所示。該書是目前關于震網(wǎng)病毒入侵伊朗核設施事件最為全面和權威的讀物,也為人們揭開了零日漏洞攻擊的神秘面紗。
2016年,美國導演亞歷克斯·吉布尼(Alex Gibney)執(zhí)導的紀錄片Zero Days(《零日》)講述了震網(wǎng)病毒攻擊伊朗核設施的故事,揭露了網(wǎng)絡武器的巨大危險性。

圖1-1 《零日攻擊》一書封面
【案例1思考與分析】
【案例1】中提及的書籍和影片向人們清晰展示了惡意軟件作為網(wǎng)絡戰(zhàn)武器對國家關鍵基礎設施乃至整個國家的巨大破壞力。攻擊者為了能夠有效達到竊取數(shù)據(jù)、破壞系統(tǒng)的目的,可以通過挖掘或是購買零日漏洞,開發(fā)針對零日漏洞的攻擊工具實施攻擊。
零日漏洞是指未被公開披露的軟件漏洞,沒有給軟件的作者或廠商以時間去為漏洞打補丁或是給出解決方案建議,從而使攻擊者能夠利用這種漏洞破壞計算機程序、數(shù)據(jù)及設備。注意,零日漏洞并不是指軟件發(fā)布后被立刻發(fā)現(xiàn)的漏洞。
利用零日漏洞開發(fā)攻擊工具進行的攻擊稱為零日攻擊。零日攻擊所針對的漏洞由于軟件廠商還沒有發(fā)現(xiàn)或是還未提供相應的補丁,所以零日攻擊的成功率高,造成的破壞大。
從日常黑客攻擊到軍事領域的對抗,從震網(wǎng)病毒到棱鏡門事件,信息空間的幾乎所有攻防對抗都是以軟件安全問題為焦點展開的。
本節(jié)接下來將從軟件的定義和應用普遍性進一步展開分析軟件安全的重要性。
1.軟件的定義
國家標準GB/T 11457—2006《信息技術 軟件工程術語》給出的軟件定義是:計算機程序、規(guī)則和可能相關的文檔。
美國電氣和電子工程師協(xié)會(Institute of Electrical and Electronics Engineers,IEEE)1990發(fā)布的《軟件工程術語標準詞匯表》(Standard Glossary of Software Engineering Terminology)給出的軟件定義是:“Computer programs, procedures, and possibly associated documentation and data pertaining to the operation of a computer system”。
以上兩個標準文檔都認為,軟件是程序、數(shù)據(jù)和文檔的集合體。程序是完成特定功能和滿足性能要求的指令序列;數(shù)據(jù)是程序運行的基礎和操作的對象;文檔是與程序開發(fā)、維護和使用有關的圖文資料。
然而,在這兩個重要的與軟件相關的標準文檔中均未涉及“軟件安全”。
2.軟件無處不在
現(xiàn)在是一個信息化的時代,每時每刻都有無數(shù)的軟件系統(tǒng)在運行著。這是一個“互聯(lián)網(wǎng)+”的時代,物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)、移動終端、可穿戴設備和無人駕駛汽車等各種新興IT技術正改變著人們的生活和工作,改變著這個世界,推動著人類文明的發(fā)展。
這也是一個軟件的時代,各種新興IT技術借助社交網(wǎng)絡、即時通信、電子郵件、移動商務、網(wǎng)絡游戲和智能家居等各種網(wǎng)絡應用軟件發(fā)揮著作用。無論是人們手中的筆記本電腦、智能手機,還是守護人們健康的醫(yī)療器械,亦或是出行乘坐的汽車、飛機,還有保家衛(wèi)國的戰(zhàn)斗機、航母,都離不開軟件。一個不可否認的事實是,軟件已融入人們?nèi)粘I畹姆椒矫婷妫呀?jīng)成為國家和社會關鍵基礎設施的重要組成部分。
3.軟件規(guī)模日益龐大
隨著軟件應用范圍日益廣泛,軟件規(guī)模也大幅增加。
文檔資料
常見軟件代碼規(guī)模統(tǒng)計
來源:http://www.informationisbeautiful.net/visualizations/million-lines-of-code
請訪問網(wǎng)站鏈接或是掃描二維碼查看。

常見軟件代碼規(guī)模統(tǒng)計圖表顯示,20世紀70年代的早期民航客機波音747使用了大約40萬行代碼寫成軟件,而2011年的新型波音787所用軟件的源代碼是波音747的16倍——650萬行,規(guī)模十分龐大。而迄今Google包含的因特網(wǎng)服務應用軟件規(guī)模更是達到了驚人的2億行。
再來看看大家熟悉的微軟操作系統(tǒng)Windows。問世于1985年的微軟操作系統(tǒng)僅僅是DOS環(huán)境,后續(xù)的系統(tǒng)版本由于微軟不斷更新升級,逐漸成為當前應用范圍最為廣泛的操作系統(tǒng)。同時,Windows系統(tǒng)代碼行數(shù)、開發(fā)難度、參與人員的數(shù)量、開發(fā)的時間長度也在不斷增長。據(jù)統(tǒng)計,Windows XP大約有4000萬行代碼,Windows 7大約有5000萬行代碼,Windows 8和Windows 10估計超過億行了。Windows 7開發(fā)時有23個小組,每個小組約40人,總共將近1000人。這僅僅是Windows團隊的人數(shù),其余為其做出貢獻的人更是數(shù)不勝數(shù)。
隨著軟件功能的增強,軟件的規(guī)模不斷增長。軟件在互聯(lián)網(wǎng)時代的社會中發(fā)揮的作用越來越大,但同時軟件擔負的責任也越來越重要。無論是對于軟件開發(fā)者還是軟件的使用者,軟件功能的創(chuàng)新都是值得期待的,但是軟件一旦出現(xiàn)設計上的錯誤、缺陷或是漏洞,創(chuàng)新應用也就成為了泡影,甚至會帶來災難。
4.軟件漏洞普遍存在,零日漏洞成為主要安全威脅
辯證唯物論的認識論和辯證唯物論的知行統(tǒng)一觀認為,人們對于客觀世界的認識是有局限性的,人們對于客觀世界的認識過程是螺旋上升的。軟件是人們?yōu)榱藢崿F(xiàn)解決生產(chǎn)生活實際問題而開發(fā)的某種完成特定功能的計算機程序,因而必然存在缺陷或漏洞。
軟件漏洞是普遍存在的,系統(tǒng)軟件、應用軟件和第三方軟件,它們在開發(fā)、部署和應用中的問題層出不窮。
現(xiàn)在應用最廣泛的Windows系列操作系統(tǒng)從誕生之日起就不斷地被發(fā)現(xiàn)存有安全漏洞。Windows系統(tǒng)不是“有沒有漏洞”的問題,而是“何時被發(fā)現(xiàn)”的問題。微軟定期發(fā)布的《安全情報報告SIR》會及時披露微軟和其他第三方軟件的漏洞情況和對安全的影響。微軟產(chǎn)品的漏洞數(shù)量與第三方軟件漏洞總數(shù)的比例基本是1∶10,與第三方軟件的漏洞數(shù)量相比,微軟產(chǎn)品的漏洞數(shù)量還是一個較小的比例。
2014年4月,著名的開源代碼軟件包OpenSSL“心臟滴血”(Heart Bleeding)漏洞大規(guī)模爆發(fā)。OpenSSL是一個支持SSL和TLS安全協(xié)議的安全套接層密碼函數(shù)庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,很多涉及資金交易的平臺都用它來做加密工具,因此,全世界數(shù)量龐大的網(wǎng)站和廠商受到影響。
國內(nèi)外還有很多白帽子漏洞發(fā)布平臺(如補天漏洞平臺https://butian.360.cn)及地下軟件漏洞交易黑市,每天都在發(fā)布各種漏洞。披露的漏洞增長速度之快,漏洞數(shù)量之多,涉及廠商之眾,涉及軟件產(chǎn)品之廣,令人咋舌。
以前的大規(guī)模軍隊作戰(zhàn)、昂貴的武器系統(tǒng)、武裝搶劫、特工信息竊取、暴力抗議活動和武裝叛亂正在被網(wǎng)絡戰(zhàn)和網(wǎng)絡犯罪所替代。本章【案例1】就向大家展示了攻擊者利用軟件漏洞實施的網(wǎng)絡攻擊在網(wǎng)絡戰(zhàn)中的巨大威力。這一現(xiàn)象產(chǎn)生的根本原因是軟件產(chǎn)品本身存在安全漏洞。這些漏洞不止發(fā)生在操作系統(tǒng)、數(shù)據(jù)庫或者Web瀏覽器中,也發(fā)生在各種應用程序中,特別是與關鍵業(yè)務相關的應用程序系統(tǒng)中。據(jù)統(tǒng)計,有超過70%的漏洞來自于應用程序軟件,而當前最為熱點的移動互聯(lián)網(wǎng)App存在安全漏洞的比例高達90%以上。各種安全漏洞可以為因特網(wǎng)遠程訪問、進行系統(tǒng)穿透和實現(xiàn)系統(tǒng)破壞大開方便之門。
在工業(yè)生產(chǎn)領域,隨著計算機技術、通信技術、控制技術的發(fā)展和信息化與工業(yè)化的深度融合,傳統(tǒng)的工業(yè)控制系統(tǒng)(Industrial Control System,ICS)逐漸向網(wǎng)絡化轉(zhuǎn)變,黑客、病毒和木馬等威脅正在向ICS擴散,ICS面臨的信息安全形勢日益嚴峻。
在日常生活中,包括智能手表、智能電視、冰箱、洗衣機乃至電飯煲,每天越來越多的新設備聯(lián)入互聯(lián)網(wǎng),萬物互聯(lián)的時代已經(jīng)開啟,這些新型網(wǎng)絡中的軟件安全問題引人關注。以車聯(lián)網(wǎng)為例,2014年,美國一名14歲男孩演示了僅憑15美元購買的簡單電子設備,輕而易舉地侵入聯(lián)網(wǎng)汽車;德國安全專家曝光了寶馬諸多車型的中控系統(tǒng)可被破解,在數(shù)分鐘內(nèi)即可解除車鎖,該漏洞存在于220萬輛寶馬、Mini和勞斯萊斯汽車中。
現(xiàn)在智能聯(lián)網(wǎng)汽車的安全風險日漸突出。其主要原因是汽車控制系統(tǒng)由車載電腦實現(xiàn),典型的豪華車包含大約l億行代碼的軟件,同時汽車系統(tǒng)在開發(fā)時存在多處安全缺陷。從被曝光的漏洞中可以發(fā)現(xiàn),寶馬車在驗證解鎖信號時,只是向?qū)汃R服務器發(fā)送一個簡單的HTTP Get請求,在傳輸過程中并沒有使用SSL/TLS加密,致使黑客可以截獲傳輸信息。另外汽車的消息驗證機制也存在缺陷,汽車通過查看消息中的車輛標識碼(Vehicle Identification Number,VIN)來檢查收到消息的目的地址,如果不匹配它就不會執(zhí)行發(fā)送命令;另一方面,當不能接收到有效的VIN碼時,它會發(fā)送一條錯誤消息并附上自己的VIN來標識。
現(xiàn)在大多數(shù)的網(wǎng)絡攻擊利用了軟件(尤其是應用軟件)的漏洞。根據(jù)統(tǒng)計分析,絕大多數(shù)成功的攻擊都是針對和利用已知的、未打補丁的軟件漏洞和不安全的軟件配置,而這些軟件安全問題都是在軟件設計和開發(fā)過程中產(chǎn)生的。
5.軟件安全應當引起重視,應當成為當務之急,甚至成為國家的一項競爭優(yōu)勢
人們已經(jīng)清醒地認識到全球網(wǎng)絡空間安全威脅正在持續(xù)增加,必須認真應對安全威脅。然而一些錯誤的認識使得人們至今仍然疲于應付,焦頭爛額。
錯誤認識一:應對安全威脅的主要手段是密碼技術,是添置邊界防護等各種安全設備。
調(diào)查數(shù)據(jù)顯示,企業(yè)的信息安全預算中主要的投資方向仍集中于傳統(tǒng)的防病毒、防火墻、VPN及身份認證等方法,這些以網(wǎng)絡邊界安全防護為主的傳統(tǒng)安全解決方案可以減少漏洞被利用的機會,然而卻不能有效減少系統(tǒng)本身漏洞的存在,仍屬于檢測型或補償型控制的被動防護方法。盡管如微軟等核心軟件公司能夠定期發(fā)布安全補丁,較為及時地對操作系統(tǒng)、數(shù)據(jù)庫等核心軟件的漏洞進行修復,但對于一些零日攻擊系統(tǒng)幾乎沒有防范能力。加之大多數(shù)的應用軟件開發(fā)人員沒有能力及時地對應用軟件漏洞進行修復,使得系統(tǒng)的運行處于一種危機四伏的狀態(tài)。傳統(tǒng)的安全控制效果不盡如人意,信息安全問題越來越多,攻擊形勢越來越隱蔽(如APT攻擊),智能程度越來越高(技術水平越來越高),組織方式多樣化(由最初的單個人員入侵發(fā)展到利益驅(qū)動的有組織、有計劃的產(chǎn)業(yè)行為),危害程度日益嚴重。
是什么真正引發(fā)了當今世界大多數(shù)的信息安全問題?有人會回答,是黑客的存在。那么黑客和網(wǎng)絡犯罪分子的主要目標是什么?有人會回答,是重要的信息資產(chǎn),是各類敏感數(shù)據(jù)。這樣的回答看起來不錯,但是再往深處想一想,黑客是如何實現(xiàn)盜取重要信息資產(chǎn)的?黑客成功實施攻擊的途徑是什么?那就是發(fā)現(xiàn)、挖掘和利用信息系統(tǒng)的漏洞。
因此,應該著眼于源頭安全,而不是僅僅采取如試圖保護網(wǎng)絡基礎設施等阻擋入侵的方法來解決安全問題。源頭安全需要軟件安全,這是網(wǎng)絡基礎設施安全的核心。邊界安全和深度防御在安全領域中占有一席之地,但軟件自身的安全是安全防護的第一關,應該是第一位的。即使在軟件源頭中存在較少的漏洞,這些漏洞也足以被利用,成為侵犯國家利益的武器,或者成為有組織犯罪的網(wǎng)絡武器儲備。
錯誤認識二:不值得在關注軟件安全,降低糟糕的軟件開發(fā)、集成和部署帶來的風險上花費成本。
軟件項目由于受限于成本和嚴格的開發(fā)進程,往往犧牲安全,主要表現(xiàn)在以下兩個方面。
●軟件工程人員缺乏安全意識和教育的專門培訓。開發(fā)者需要在巨大的壓力下和預算內(nèi)按時提供更多的軟件功能,因此一部分開發(fā)者很少能夠抽出時間來認真審查他們的代碼以發(fā)現(xiàn)潛在的安全漏洞。而他們即使能夠抽出時間,又因為沒有經(jīng)過安全方面的培訓,事倍功半。事實上,開發(fā)者需要獲得激勵、更好的工具和適當?shù)呐嘤枺顾麄冇邪踩_發(fā)的動力,有具備編寫安全代碼所需的能力。
●軟件產(chǎn)品開發(fā)中通常在開發(fā)后期進行測試以消除編碼中的錯誤或缺陷。這種做法對于減少軟件產(chǎn)品中的漏洞數(shù)量有一定的作用,但是系統(tǒng)設計邏輯上的一些缺陷在測試階段是無法發(fā)現(xiàn)的,往往這些漏洞會增加后期系統(tǒng)維護的成本,并且給用戶帶來巨大的潛在風險。
開發(fā)出安全漏洞盡可能少的軟件應當是軟件開發(fā)者或者說是軟件廠商追求的目標。不僅要把軟件做得更好,而且要更安全,同時,根據(jù)現(xiàn)實世界的經(jīng)驗,必須保證該解決方案具有較好的成本效益、操作相關性和可行性,以及投資的可行性。
事實上,軟件安全開發(fā)的最佳實踐是采用從軟件開發(fā)之初就不允許漏洞發(fā)生的方式,在軟件開發(fā)的各個環(huán)節(jié)盡可能消除漏洞,這不僅使得軟件及其用戶更安全,關鍵基礎設施更具彈性,還將節(jié)省軟件企業(yè)的開發(fā)成本。
100%安全的軟件和系統(tǒng)是不存在的,軟件產(chǎn)品存在漏洞是當前信息安全領域面臨的最大困境。由于漏洞的產(chǎn)生、利用及相互作用的機理復雜,因此,如何有效減少系統(tǒng)漏洞數(shù)量,提高信息系統(tǒng)整體安全性,成為當前急需解決的挑戰(zhàn)性問題。
軟件已經(jīng)滲透到社會、經(jīng)濟與國防建設的方方面面,是信息時代所依賴的重要技術與手段,其安全直接關系到國計民生與國家安全,因此,軟件安全關乎國家競爭力。
6.軟件安全之路
從第一個大規(guī)模針對軟件的攻擊開始,到20世紀80年代后期,軟件安全已經(jīng)走過了漫長的道路。當時的軟件并沒有過多地考慮安全問題(如UNIX代碼、TCP/IP協(xié)議棧)。隨著微軟Windows及網(wǎng)頁(Web)的出現(xiàn),攻擊開始變得復雜和頻繁,因此軟件的安全性才逐漸得到重視。
工業(yè)界一開始通過各種輔助手段,如殺毒軟件、防火墻和反間諜軟件,短期修復安全問題。然而,真正的問題——代碼如何安全開發(fā)直到最近十年才得到重視。許多企業(yè)(如微軟)由于軟件安全缺陷的影響開始意識到通過改善軟件開發(fā)實踐,以確保安全的軟件代碼的重要性。現(xiàn)在,微軟的安全開發(fā)生命周期(Security Development Lifecycle,SDL)受到學術界和軟件巨頭的推崇。SDL實踐可以幫助人們從軟件開發(fā)之初就構建安全的代碼,從而降低出現(xiàn)軟件漏洞的可能性。
安全漏洞是軟件產(chǎn)生安全問題的根源,漏洞發(fā)現(xiàn)是軟件安全的基礎工作,軟件安全體系的建立是以漏洞為核心展開的,對漏洞的掌控能力是衡量一個國家信息安全水平的重要因素。
- DB2 V9權威指南
- Visual C++程序設計學習筆記
- Mastering QGIS
- HTML5 移動Web開發(fā)從入門到精通(微課精編版)
- Julia機器學習核心編程:人人可用的高性能科學計算
- Bootstrap 4 Cookbook
- 移動互聯(lián)網(wǎng)軟件開發(fā)實驗指導
- Kotlin極簡教程
- Machine Learning for Developers
- Go語言從入門到精通
- Java EE 8 and Angular
- Learning Ionic(Second Edition)
- Spring MVC Blueprints
- TensorFlow.NET實戰(zhàn)
- C/C++語言程序開發(fā)參考手冊