基於原始碼級的軟體安全問題研究

2020-12-25 DOIT

      我們今天的現代化社會十分依賴於軟體,軟體可以實現企業的商務流程,可以操控我們日常中所有的電子商務,(例如手機,飛機和取款機),軟體也是一些重要服務的核心,例如電話網絡,網際網路,空中交通指揮系統等。對全球經濟增長,人民生活質量,企業成功以及政府組織機構來說,如今軟體比以往任何時候都重要。我們必需使用安全的軟體。

  然而隨著網際網路和基於網際網路的應用系統的不斷發展,軟體安全問題日異嚴重。傳統的安全防禦方式已逐漸不能滿足現在的軟體安全的要求。黑客們已不再著眼於破壞防火牆等手段。黑客們會直接通過企業、政府、銀行等機構的公共網站及應用系統入手,直達核心系統盜取所需的信息。他們的攻擊方法變得更加高明,方式也更加隱蔽。傳統的靠在我們的伺服器上加一層SSL(Security Socket Layer)、再加一層防火牆是不能夠解決的了。軟體安全問題必需要有新的解決方案

  1. 軟體安全的現狀:

  軟體安全是軟體工程裡的一個概念,它是指軟體受到惡意的攻擊下,軟體能夠正常運行。這個正常運行是從指軟體的功能和性能上考量的。軟體安全課題就是了解產生軟體安全的風險並怎樣去管理他們。近幾年來,軟體安全問題變得流行起來,主要是由於網際網路的發展。根據CERT/CC統計軟體安全問題的增長如圖1:

  

  (圖1:安全漏洞趨勢圖)

  今天軟體安全問題增長的原因:

  • Connectivity(互聯性):網際網路無處不在,系統全在上面。網際網路在使人們使用軟體變得方便的同時,也給黑客們更好的機會,給人們的軟體帶來了更多的風險。網際網路意味著,黑客隨時隨地都可以訪問我們的軟體系統,公共的訪問平臺使我們不能夠分別出哪些是真正的用戶,哪些是黑客。這樣他們比過去有了更多的時間和空間來攻擊我們的系統,如果我們的軟體中一點兒安全的缺陷,他們就能夠知道,並利用之來攻擊。

  • Extensibility(擴展性):使攻擊系統的方式變得不可預測。現在的軟體應用系統趨向可擴展化,可擴展的系統可以接受更新或擴展,許多時候依賴於動態的代碼,使得系統的功能得到擴展,更好滿足人們的需求。如:Plug-In架構的Web 瀏覽器使得我們可以隨意地安裝我們需要的文檔格式的閱讀器:Word, Excel, PDF等。今天作業系統通過動態的裝載設備驅動和模塊來支持可擴展。今天的應用系統,如:word 文字處理,E-mail客戶端,Web瀏覽器等都通過scripting, controls, components和applets來支持可擴展性。但擴展性給軟體的安全帶來了,很大的挑戰。

  • Complexity(複雜性)網際網路,分布式,動態的代碼。現在的軟體應用系統的變得越來越大,複雜性也越來越大,作業系統從DOS到今天的WindowsXP,XP的代碼最少4000億行。複雜度可想可知。而現在的基於網絡的應用系統,為了達到更高運算速度,承載很大訪問量,就使用分布式,集群,可擴展架構。使我們軟體代碼數急劇增長。複雜度也越來越大。軟體安全隱患也越來越大。

  2. 傳統的軟體安全的解決方法:

  在很多的公司或者企業裡,系統安全一直依賴於硬體的防護,主要就由基層的人員完成,他們在我們的應用系統上安裝並維護防火牆、入侵檢測系統和反病毒引擎。在我們應用系統上增加一層又一層的保護層。使得系統得以安全。這些技術統稱:「Reactive Technologies」。同時通過限制一些網絡的埠,IP限制訪問等手段來防止黑客的攻擊。但是隨著軟體的發展,許多軟體是基於網際網路的,許多的業務和功能是通過網際網路完成的。這使得軟體應用系統必須打破傳統的保護層,直接與外面的系統交互。如下圖2:從而使得系統沒有「內」「外」之分了。這就使得傳統的防火牆所謂防止「外」來入侵的防禦技術變得毫無意義了。這就是迫使我們一定要通過加強應用軟體本身的質量來防禦黑客或惡意的內部人員對應用系統的攻擊。

  

  (圖2:傳統的保護層被打破)

      3. 軟體安全漏洞的分類:

  由於傳統的安全防護方式日益變得不再有用。我們也知道軟體的安全問題主要來自於軟體的本身。安全漏洞產生主要是由不合理的軟體架構和錯誤的編碼所造成的。那麼黑客到底利用我們軟體的什麼樣的漏洞來攻擊我們軟體呢?換句話說,我們的軟體設計和編碼中,生產了什麼樣的安全漏洞呢?那麼將這些軟體安全的問題綜合起來,再進行分類,這個價值是無庸致疑的。分類可以使人們更好地了解計算機安全缺陷產生的根源。於是早在70年代中期,軟體安全問題分類這一問題就受到了廣泛的關注。很多研究組織紛紛進行研究。最早進行計算機安全與機密研究的組織是RISOS(Research Into Secure Operating System).RISOS提出和描述了幾種作業系統安全的缺陷。它的目標是了解在作業系統中存在的安全問題。RISOS提出的安全問題的種類包括:

  • Incomplete Parameter Validation

  • Inconsistent Parameter Validation

  • Implicit Sharing of Privileges / Confidential Data

  • Asynchronous Validation / Inadequate Serialization

  • Inadequate Identification / Authentication / Authorization

  • Violable Prohibition / Limit

  • Exploitable Logic Error

  這個研究表明在不同上下文的情況下,共同遇到的只有很少量的一些基礎性的缺陷。這個分類也只論述了很有限的幾個共有問題的類型,而且每個類型的限定也不是很清楚,許多情況下一個問題可以屬於一個或幾個類型,這樣的分類是不精確的。同時,分類的命名,不夠直觀。雖然它對很多研究人員也說很有用,但是對於軟體開發人員,他們並不能在他們每天繁重的工作的情況下很快地通過直覺把它們區分開來。另外,這項研究只是關注作業系統一些安全問題的分類而沒有關注到企業級軟體的安全問題。而隨著軟體的不斷發展,應用軟體形式也不斷變化,安全問題分類也有了新的研究。下面摘要著名的軟體安全專家Gary Mc Graw的2006年的新書《Software Security building security In》中提出的軟體安全問題的「7+1」個很高級別的大類。這幾個領域中七個大類都是關注於原始碼的安全,一個是與軟體的配置和環境有關的。大類中我們又分了很多的小類,這8個大類及每個大類中主要的分類分別是:

  1. Input Validation and Representation

  Buffer Overflows

  Command Injection

  Cross-Site Scripting(XSS) Flaws

  Format String Problems

  Integer Range Errors

  SQL Injection

  2. API Abuse

  Trusting Network Address Information

  Dangerous Function

  Directory Restriction.

  Heap Inspection

  3. Security Features

  Failing to Protect Network Traffic

  Failing to Store and Protect Data

  Failing to Use Cryptographically Strong Random

  Numbers

  Improper File Access

  Improper Use of SSL

  Use of Weak Password-Based Systems

  Unauthenticated Key Exchange

  4. Time and State

  Signal Race Conditions

  Use of 「Magic」 URLs and Hidden Forms

  5. Errors

  Failure to Handle Errors

  Catch NullPointerException

  Empty Catch Block

  Overly-Broad Catch Block

  Overly-Broad Throws Declaration.

  6. Code Quality

  Poor Usability

  Double Free. Calling free()

  Inconsistent Implementations

  Memory Leak

  Null Dereference

  7. Encapsulation

  Information Leakage

  Comparing Classes by Name

  Data Leaking Between Users

  Leftover Debug Code

  Trust Boundary Violation

  8. Environment

  Insecure Compiler Optimization

  ASP .NET Misconfiguration: Creating Debug Binary ;Missing Custom Error Handling

  Password in Configuration File

  J2EE Misconfiguration: Insecure Transport ; Insufficient Session-ID Length

  Missing Error Handling ; Unsafe Bean Declaration

  Weak Access Permissions

  這些分類包括了各種程序語言中遇到的原始碼的安全問題,它包括C,C++,JAVA,以及。NET家族的C#、ASP。在這裡我只是大致描述一下。詳細的分類的描述在http://www.fortify.com/vulcat/。

      4. 真實有效的解決方案

  所謂「知己知彼,百戰不殆」,通過對安全漏洞的分類,我們清楚的知道了軟體中可能產生的各種各樣的安全隱患,那麼我們只要做好充分的主動的預防工作,消除軟體中的安全隱患,這樣我們的軟體就可以抵禦黑客或惡意的內部人員的攻擊了。那麼怎麼做才可以徹底消除這些隱患呢?什麼樣的方案才是真實有效的呢?

  軟體安全涉及軟體工程、程式語言、網絡、資料庫、安全工程等各個領域各個層次。涉及面非常廣。這使得做好軟體安全防禦工作需要有很深的專業知識,管理技能,同時也要有非常豐富的實際經驗。著名的軟體安全專家,美國著名的軟體安全諮詢Cigital公司CTO Gary Mc Graw博士一直從事軟體安全的研究,可以說是軟體和應用程式安全領域的世界級權威。他建議,解決軟體安全主要可以從如下幾個方面入手:

  4.1.Applied Risk Management Framework(實用的風險管理框架)

  我們常說的風險管理和風險分析都是在軟體設計的階段,軟體架構級的風險分析。分析我們的設計可能給軟體帶來什麼樣的風險。雖然它是風險管理框架中最為重要最實際的一個關鍵的階段,但它不是風險管理的全部。因為我們的軟體安全風險是在整個軟體開發生命周期中慢慢地產生的。而不僅僅在設計階段。所以貫穿整個開發周期的風險管理才尤為重要。所以我們稱之為「風險管理框架」。

  風險管理常常被人們叫做「black art」 。這是因為風險管理有部分像佔卜、算命一樣,在那裡對未來要發生的事進行預測。又有部分像數學,有著一定的邏輯推理。給人一空洞,沒有真憑實據的空談的感覺。然而一個成功的風險管理,它是比做任何一個業務級的決策需要的依據都要多的多。首先我們必須要收集充分的用來做決策的數據,其次我們要有軟體缺陷、威脅、影響和可能性的知識作基礎,還要有豐富的軟體風險管理的經驗,綜合起來,這樣才能做好整個開發過程的風險。從而降低風險甚至消除風險。總和起來風險管理也有五個階段的活動:

  (1)Understand the Business Context(了解業務需求內容)

  (2)Identify the Business and Technical Risks(確認業務風險和技術風險)

  (3)Synthesize and Rank the Risks(綜合風險並劃分等級)

  (4)Define the Risk Mitigation Strategy(確定降低風險策略)

  (5)Carry out Fixes and Validate(實施修復並檢驗結果)

  4.2.Software Security Touchpoints(軟體安全開發切入點)

  提高軟體安全的最好的一個種方法就創建安全的軟體——「Building Security In」。今天的軟體都有明顯的安全需求的特徵。我們在完成軟體需求的功能的同時,也要建立安全需求。但是建立安全不等於就是簡單地加入SSL(Security Socket Layer)就可以的。第一因為安全問題是整個系統級的問題,它包括:安全機制(如:訪問控制)設計安全(如:堅固的設計使攻擊變得困難)編碼安全(如:Buffer Overflows)等很多方面。有時候這些方面是相互重疊的,但有時候又不是。第二因為安全問題是一個慢慢地連續不斷地出現的一個問題。在開發周期的每一個階段都有可能引入安全隱患,甚至是我們選擇的工具,選擇的實現技術,資料庫等都可能引入新的問題。這也就是為什麼安全問題是貫穿軟體開發整個生命周期的主要原因。所以要想解決安全問題從原來的被動的救火方式轉換到主動的防禦式,就是時刻記

  住——「Building Security In」。

  (1)Code Review(代碼重審)

  (2)Architecture risk analysis(軟體架構風險分析)

  (3)Penetration testing(滲透測試)

  (4)Risk-based security tests(基於風險的安全測試)

  (5)Abuse Case(最壞情況處理)

  (6)security requirements(安全的需要)

  (7)security operations(安全操作)

  

  (圖3:七個切入點在開發周期的分布圖)

  如上圖3可出從這七個方面入手可以較為全面的考慮安全構建軟體。這七個方面分布在軟體開發周期中的各個階段。因此我們可以相信,只要我們認真做到了這七個方面,我們的軟體的安全問題應該可以得到解決。

  4.3.Knowledge(知識)

  軟體安全的最大的挑戰是我們缺乏在軟體安全方面的知識和經驗.因此我們需要,也非常有必要給我們的開發人員、設計人員,分析人員更多的有關軟體安全的知識的培訓,以期他們具備豐富的軟體安全的知識.

  5. 總結:

  今天的軟體已經成為我們生活重要而不可缺少的組成部分,它給我們帶來便利的同時也帶來了新的問題。黑客們常常很容易地獲取了我們重要的信息,給我們帶來巨大的經濟損失。傳統的安全防禦方式慢慢變得不能適應今天的要求。提出新的解決軟體安全問題的方法迫在眉睫,「Building Security In」這一理念的提出,使我們找到了答案。對安全問題進行匯總,分類,然後在軟體開發的過程中時刻考慮安全問題。有理由相信,這樣的方法能夠提高軟體本身的防禦黑客攻擊的能力.

未經允許不得轉載:DOIT » 基於原始碼級的軟體安全問題研究

相關焦點

  • 破局傳統算法痛點,騰訊安全首提基於跨模態檢索的二進位代碼-源...
    Function-Level Binary Source Code Matching》,憑藉首次提出基於AI的二進位代碼/原始碼端到端匹配算法的創新研究入選。該論文首次提出了基於AI的二進位代碼/原始碼端到端匹配算法,與傳統算法相比,準確率大幅提升,並為逆向分析領域提供了新的思路,可提升工業部署方面的效率。目前,該論文成果已在騰訊安全科恩實驗室研發的代碼檢索工具BinaryAI實現了落地應用。
  • 惡意POS軟體——「TreasureHunt」的原始碼已確定發生洩露
    不僅TreasureHunt的原始碼洩露,惡意軟體的圖形用戶界面構建器和管理員面板的原始碼也一樣被洩露。   Vitali Kremez在文章中寫道:「這兩個代碼庫的洩露降低了網絡犯罪分子進入的門檻,他們希望利用這些漏洞來構建自己的POS惡意軟體變種。」
  • 三款商業化原始碼審計工具對比
    近年來,大部分安全問題來自於應用層安全,應用層的安全問題主要由軟體原始碼中的安全缺陷所導致。有關原始碼安全的研究越來越多,原始碼安全成為了解決信息安全問題的一個重要方向,也是信息安全中的一個新興領域。  在開發階段引入代碼檢測解決安全問題的思路開始被很多企業所認可。
  • TheOpenGroup歐洲研究與開發項目提供用於改進開放原始碼軟體平臺
    The Open Group與歐洲頂尖大學、研究中心、開發者和開源Forge提供商共同交付用於搜索、選擇和維護開放原始碼的先進技術近期,廠商中立的技術聯盟The Open Group和拉奎拉大學(University of L』Aquila)宣布將與歐洲頂尖級研究機構、技術開發商、工業軟體開發商及開源
  • 基於大數據的軟體智能化開發方法與環境
    北京大學2012年提出了知識驅動的軟體復用方法;南京大學在基於數據的軟體分析、測試方面進行了算法、工具和實踐研究;中國科學院軟體研究所基於雲平臺和數據分析技術,在軟體運行時測試和演化方面開展研究;北京航空航天大學在開源軟體數據的基礎上研究了開發人員推薦問題;國防科技大學在開源數據收集和知識獲取方面進行了大量的工作,維護並運行了Trustie社區和網絡群體化軟體開發環境。
  • 瞄準中國軟體安全市場,「鑑釋」開發靜態代碼分析工具助企業提升...
    因此,靜態代碼分析(static code analysis)工具順勢而生,能夠在開發過程中幫助開發人員快速、有效的定位代碼缺陷並及時糾正這些問題。靜態代碼分析是指在不運行代碼的前提下,對原始碼、字節碼和二進位碼等代碼進行分析,以找出編碼錯誤、驗證其是否符合性標準、以及是否存在漏洞。
  • Windows XP原始碼洩露:消息屬實,安全警鐘再次敲響!
    作為目前用戶最多,覆蓋率最廣的PC作業系統,從系統安全的角度來講,windows的原始碼對於公眾而言可算上絕密的一件事。假如洩露了代碼,全球那麼多windows用戶的資料信息豈不是赤裸裸暴露了?所以,原始碼對系統的安全至關重要!其實之前有關windows原始碼也發生了一件轟動界內的大師。
  • 華為openEuler作業系統原始碼正式開放
    日前,openEuler開源社區(以下簡稱openEuler社區)正式開放原始碼、鏡像及開發測試環境,標誌著openEuler社區開放運作邁出了堅實一步。作為主要籌備方,華為會逐步開放在ICT基礎軟體領域的技術積累,將作業系統、編譯器/JDK等領域的基礎平臺能力開源至openEuler社區。
  • 原始碼危機|全球數十國央行軟體供應商原始碼再爆洩露
    近日,為全球數十家中央銀行及證券機構提供軟體的開發商CMA原始碼被公開發布在網上。威脅情報分析師Bank Security發文稱,每天通過他們的軟體進行的交易超過1000億美元。調查發現,此次在線洩露的確實是CMA應用程式的原始碼。
  • 開放原始碼軟體的三重境界 ———— 《大教堂與集市》讀後感
    《大教堂與集市》其書準確點說,這不是一本書,而是幾篇文章的合集,」大教堂與集市」取之於其中最為重要的一篇論文的名稱,以下為開源之道對於內容的導讀:序是由知名的基於開源商業成功的公司紅帽公司創始人 Bob Young所作,解釋了自由軟體在社會經濟中的合理性:
  • 基於抽象語法樹的相似代碼識別方法
    因此識別相似缺陷對於提高軟體開發及維護效率具有重要意義。目前對於相似缺陷的分析大多是基於C++或Java兩種語言,本文主要探究基於抽象語法樹的相似代碼識別方法在python語言代碼中的實驗效果。 Abstract:For similar bugs, developers can use a similar approach to solve it.
  • 計算機犯罪研究系列(十八)收購、轉賣非法獲取的遊戲原始碼行為的刑事風險分析
    作者:車衝律師計算機犯罪研究系列(十八)收購、轉賣非法獲取的遊戲原始碼行為的其實我國對於這種從他人處收購計算機信息系統數據或者轉賣的行為的已經有了比較明確的定性規定,按照《關於辦理危害計算機信息系統安全刑事案件應用法律若干問題的解釋》第七條的規定:「明知是非法獲取計算機信息系統數據犯罪所獲取的數據、非法控制計算機信息系統犯罪所獲取的計算機信息系統控制權,而予以轉移、收購、代為銷售或者以其他方法掩飾、隱瞞,違法所得5000元以上的,應當依照刑法第三百一十二條第一款的規定
  • 微軟Windows XP 原始碼遭洩露!
    對於微軟已經不提供安全支持的 Windows XP、Windows 7,你還在用麼?近日,已退役多年的 Windows XP 系統,再次重回大眾視野,而這一次,卻是因為其原始碼洩露事件。同時據外媒報導,除了 Windows XP,Windows Server 2003 的原始碼也已被洩漏。目前該貼已被存檔,用戶只能查看,無法回復。Windows XP 原始碼洩露!
  • openEuler作業系統原始碼正式開放
    [中國,深圳, 2019 年 12 月 31 日] 今日,openEuler開源社區(以下簡稱「openEuler社區」)正式開放原始碼、鏡像及開發測試環境,標誌著openEuler社區開放運作邁出了堅實一步。
  • 開源組織寄空盤「逼宮」,微軟公開win7原始碼?網友:真相了!
    「目前win7系統已經停止更新支持,為了系統安全大家儘快將電腦升級至win10系統」。類似於此類的消息,相信大家已經聽到不少了。從去年開始,微軟就陸陸續續放出停更win7的消息,直到今年1月14日,微軟真的履行諾言,直接停更了win7系統。
  • 擁抱開源:軟體時代的車企新挑戰|linux|github|原始碼|作業系統...
    另一方面,正如大眾集團執行長赫伯特·迪斯(Herbert Diess)所言,傳統汽車企業自身掌握的整車軟體代碼比例僅有10%。一直以來,出於控制成本以及對穩定供應鏈夥伴的考量,傳統車企更習慣於從一級供應商手中直接採購已經燒寫好軟體代碼的各類電控單元。
  • Phoenix Software International擴展原始碼授權協議
    Phoenix Software International擴展原始碼授權協議 Phoenix Software International擴展原始碼授權協議 2020-12-14 13:52:10  來源:中文商業新聞網
  • 西北大學研發FUNDED系統 極大提升原始碼漏洞檢準率
    中國青年報客戶端訊(中青報·中青網記者 孫海華)記者從西北大學獲悉:近日,由該校信息學院房鼎益、陳曉江教授領銜的物聯網團隊與多家機構聯合研究,在軟體安全領域取得重要研究進展——利用圖深度神經網絡結合開原始碼倉庫,開發出了具有自主智慧財產權的原始碼漏洞檢測系統FUNDED,大幅度提升了原始碼漏洞的檢準率
  • 員工離職帶走軟體原始碼入刑侵犯商業秘密罪
    BMS軟體技術的Bootloader程序5個技術點中的7個原始碼文件於2016年4月28日之前是不為公眾所知悉的。經委託深圳市中衡信資產評估有限公司進行評估,該部分原始碼商業秘密的評估值為人民幣61.7萬元。
  • AI 算法解決二進位安全問題,騰訊安全NeurIPS 2020論文有新方法
    機器之心發布 機器之心編輯部 騰訊安全科恩實驗室使用 AI 算法解決二進位安全問題的一項研究被 NeurIPS 2020 接收,該研究首次提出了基於 AI 的二進位代碼 / 原始碼端到端匹配算法,與傳統算法相比效果非常出色