狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

軟件安全評估之軟件漏洞基礎

admin
2024年3月25日 0:33 本文熱度 681


基礎概念

在軟件安全的語境中,漏洞是指軟件中的具體缺陷或疏忽,能夠被攻擊者利用并執行一些惡意行為,例如泄露或修改敏感信息、干擾或銷毀系統、接管計算機系統或程序權限等等。

安全漏洞(Vulnerability)與大眾熟悉的軟件缺陷(Bug)有所不同。軟件缺陷是程序中的錯誤、失誤或疏忽,導致意外或者不希望發生的情況(即應當發生卻沒發生,結婚十年一直沒懷上)?;\統的說,安全漏洞可以看作是軟件缺陷的一個子集,是一種特殊的軟件缺陷:惡意用戶可以利用它發動攻擊,影響軟件及其支持系統。幾乎所有的安全漏洞都可以被看作軟件缺陷,但只有一些軟件缺陷最終成為嚴格意義上的安全漏洞,意味著這類缺陷必須具有安全屬性相關的影響,允許攻擊者執行通常無法進行的操作(即不應當發生卻發生了,外出三年老婆懷上了)。

在談論安全性與可靠性時,有的人會說安全性是可靠性的一個重要組成部分。雖然這種說法不太普遍,但一個可靠性高的軟件基本上是缺陷較少的軟件:

它在用戶使用過程中很少出現故障,能夠妥善處理各種異常情況,并且采用“防御性編程(Defensive Programming)”策略(如減少缺陷、增加代碼可讀性、設置異常處理)來應對不穩定的執行環境和錯誤的輸入數據。













一個安全性高的軟件則更像是一個健壯的軟件:

它能夠抵御那些企圖通過篡改環境和輸入數據來利用軟件漏洞以達到惡意目的的攻擊。













因此,軟件的安全性和可靠性追求的是共同的目標,這個目標需要通過采用專注于消除各種軟件缺陷的開發策略來達成。但安全漏洞與軟件缺陷并非總是可以清晰界定。比如:一個允許用戶編輯其不應有權訪問的關鍵系統文件的程序,可能在規范和設計層面上沒有問題,但這無疑是一個嚴重的安全漏洞。




安全策略

系統的安全性本質上是由安全策略(policy)、安全模型(model)、安全控制(control)構成,其中最重要的是安全策略,策略定義了系統應當具備的安全標準以及允許接受的安全損害。因此,任何對軟件系統安全性的侵害都可以被視為是對其安全策略的破壞。

對于一個由軟件、用戶和資源構成的系統,安全策略本質上是一系列關于允許和禁止行為的規則。例如,“未經驗證的用戶不得訪問系統的A服務?!比绻唇涷炞C的用戶能夠訪問該服務,則違反了既定的安全策略。

每個軟件系統都應該具備一定的安全策略。這些策略可能是正式的文件集合,也可能是用戶對系統合理行為非正式的期望。對于許多軟件系統,即便沒有明確的書面規定或描述,人們通常也能認識到哪些行為可能構成安全風險(比如用戶可以看到其他用戶的購物記錄)。因此,“安全策略”通常指的是用戶對于軟件系統行為的允許和禁止方面的共識。




安全期望

為了深入理解軟件安全,我們需要考慮用戶對軟件安全可能抱有的期望。這有助于我們識別哪些行為可能被視為安全違規,或破壞了安全屬性。安全屬性至少涵蓋三個基礎部分:機密性、完整性和可用性。

機密性:機密性關注的是信息的保護,確保信息能夠持續保持私密狀態,包括從國家級別的情報秘密、企業商業機密到個人敏感信息等各種敏感數據。

完整性:完整性關乎數據的可信度和準確性。人們期望軟件能夠防止數據被不當篡改,確保數據的來源和內容都是可信的。

可用性:可用性涉及訪問和使用信息和資源的能力,通常指的是用戶對系統能夠持續的、正常的訪問的期望。導致軟件崩潰或其他造成用戶不可訪問的問題,包括利用特定輸入或環境導致的程序中斷,以及耗盡軟件系統資源(如CPU、磁盤空間或網絡帶寬)的攻擊都屬于破壞可用性。




代碼審計的必要性

用戶的默認期望是軟件供應商能夠保證其產品的安全性,比如購房、購車的時候不會特別注意和強調房子的抗震能力或車輛的防側翻能力,但實際使用中會默認其產品具備符合用戶普遍預期的安全性。然而,現實中供應商往往沒有提供足夠的質量保證,查看大多數商業軟件附帶的最終用戶許可協議(EULA)便可知。盡管如此,為了保證公司的長遠利益,供應商通常還是會實施一定的質量保證措施,這些措施通常集中在市場直接關注的部分,如功能、用戶體驗和系統穩定性,但這種做法往往導致安全問題被忽視或邊緣化。

現在,安全意識的提升促使許多供應商采納了更嚴格的業務和開發流程進行安全測試,比如自動代碼掃描、安全漏洞掃描、滲透測試、手動代碼審計(Code Review)等安全測試方法已經成為行業標準。

除了公司開發內部軟件的明顯情況外,代碼安全審計在其他多種情況下也具有重要意義。

如上所見,代碼審核在多種情境下都顯得至關重要。盡管對于具備這些技能的專業人員存在顯著需求,但很少有人接受過相應的專業訓練或培訓,并且擁有高標準執行代碼審計的實踐、實戰經驗。




代碼審計與黑盒測試

黑盒測試是一種通過操作其暴露的接口來評估軟件系統的方法。通常,此過程涉及構造特定的輸入,這些輸入可能會導致應用程序執行某些意外行為,例如軟件崩潰或暴露敏感信息。模糊測試是黑盒測試的一種常見方法,使用模糊測試工具時無需手動測試每種情況,只需運行工具(可能需要對配置進行一些修改)并記錄結果即可。

對應用程序進行黑盒測試的優勢在于測試速度快,幾乎可以立即獲取結果。然而,黑盒測試也存在一些重大缺點。黑盒測試是將大量數據輸入應用程序,希望它執行一些不應該執行的操作。由于不知道應用程序如何處理數據,可能存在代碼路徑無法被掃描到,存在未觸發的路徑。例如,假設請求的查詢字符串中存在特定關鍵字,則它可能具有某些內部功能。如下圖中的示例代碼:

上述代碼在查詢字符串時具有特殊的行為:如果查詢字符串包含"mode="序列,服務器則將設置環境變量MODE的值為xxx。然而,這段代碼對sprintf()函數的不慎使用會導致緩沖區溢出。

上述示例可以通過檢查代碼立即發現問題,而黑盒測試或模糊測試工具可能會漏掉這個漏洞。這就是為什么代碼審核很重要。




代碼審計和SDLC

鑒于應用程序可能遭受惡意利用的風險,安全評估顯得至關重要,確定評估的最佳時機也同樣關鍵。通常,在開發生命周期(SDLC)的任何階段,都應該開展安全評估和測試。

評估和測試的成本取決于選擇進行審核的時間和方法,以及發現和修復漏洞可能帶來的成本差異:

可行性研究:此階段確定項目應滿足的需求,確定需求在技術和財務上的可行性。

需求:在此階段,將對項目需求進行更深入的研究,并建立項目目標。

設計:設計解決方案并就系統如何在技術上實現做出決策。

編碼:此階段時根據前一階段的設計進行具體的代碼開發。

測試:通過質量測試方法盡可能捕獲軟件中的任何錯誤。

運維:軟件投入使用后根據用戶反饋進行修訂、更新和更正。

所有軟件的開發過程和開發方法都在某種程度上借鑒了軟件開發生命周期(SDLC)模型。傳統的瀑布模型傾向于嚴格遵循這一模型,只經歷一次生命周期迭代,相較之下,敏捷開發則傾向于通過重復迭代SDLC的各個階段來逐步完善應用程序。




軟件安全漏洞類別

漏洞類別是對具有相似特征或共同模式的軟件缺陷進行分組的一種方法,也是一種幫助理解和交流軟件缺陷的心理工具。沒有完美無缺的分類體系能夠將漏洞精確地劃分到互不重疊的類別中,一個漏洞可能同時屬于多個類別,具體的類別歸屬取決于安全人員的主觀意識。

在界定漏洞的類別時,可以從軟件開發生命周期(SDLC)各階段的看出關鍵差異。通常漏洞可以分為設計漏洞和實現漏洞,設計漏洞主要出現在SDLC的前三個階段,涉及軟件設計、系統架構和規范中的缺陷,實現漏洞則發生在SDLC的后兩個階段,通常指軟件實際開發和構建過程中的純粹的技術缺陷。此外在軟件運行過程中,還存在環境漏洞或操作漏洞,這類漏洞與軟件在特定環境中的部署和配置有關。

設計漏洞

設計漏洞是由于軟件設計的基本錯誤或疏忽導致的問題。這類漏洞使得軟件即使按照設計目的正常運行也存在安全風險,因為其根源在于錯誤的設計邏輯或設計方法。本質上,設計漏洞源于設計人員在設計過程中對程序運行流程、運行環境、使用方法的錯誤假設,或者是未充分考慮程序引入的組件存在的安全漏洞和風險。設計漏洞也常被稱為架構缺陷,因此此類漏洞的修復成本和代價在所有類型漏洞中最高,甚至會面臨無法修復或者沒辦法修復的情況。













實現漏洞

在實現漏洞中,代碼通常會按照預期執行其功能,但執行的方式可能存在安全風險。這些問題主要出現在軟件開發生命周期(SDLC)的開發階段,但往往也會延續到集成和測試階段。當開發過程與設計階段設定的技術規范出現偏差時,就可能出現這類漏洞。在大多數情況下,可利用的安全漏洞是由于技術工具、構建軟件的平臺以及編程語言環境的細微差異所引起的。













環境(操作)漏洞

環境(操作)漏洞是指軟件在特定環境下的操作過程和一般使用中出現的安全問題。這類漏洞的關鍵特征是它們并不直接存在于軟件的源代碼中,相反,它們源于軟件與其運行環境的交互方式或者人員操作的方式。具體來說,環境漏洞可能涉及軟件配置問題、支持軟件和硬件以及系統周圍的自動化和手動流程。此外,環境漏洞也包括對用戶的社會工程學攻擊和物理攻擊。這些問題主要在軟件開發生命周期(SDLC)的運行和維護階段出現。
















漏洞類別區分

就SDLC而言,設計漏洞和實現漏洞之間的區別看似簡單,但區分起來并不那么容易。許多實施漏洞也可以被解釋為設計階段沒有充分預見或解決問題的情況。程序員在實現過程中會涉及大量的組件,包括類、函數、網絡協議、虛擬機,或者可能是一系列巧妙、復雜的代碼結構。

同樣,環境漏洞與實現或設計漏洞之間的界限也不是非常清晰。例如,如果一個程序由于環境問題而以不安全的方式運行,這也可以被視為設計或實現的問題。理想情況下,應用程序的開發應該使其不易受到這些環境因素的影響。

因此,設計、實現和環境漏洞的定義并非是嚴格劃分的,它們之間存在很大的解釋空間和重疊區域。




軟件漏洞的成因


控制流與數據流是軟件安全的兩大關鍵要素。眾多軟件漏洞往往是程序處理惡意數據時出現的意外行為所觸發。

大多數漏洞在利用時,攻擊者通過各種方式將惡意數據注入系統,以觸發漏洞的利用。然而,這些數據并不總是直接來源于用戶的輸入,它們可能采取更為復雜的路徑進入系統。這些惡意數據可能源自眾多不同的來源,并通過多種接口進入系統。在到達能夠觸發可利用條件的關鍵位置之前,它們可能會穿越系統的多個模塊,并在這個過程中經歷多次轉換。

因此,在分析和評審一個軟件系統時,必須關注的核心屬性是整個系統中各個模塊、組件間的數據流,掌握數據流的全貌對于確保系統的安全性和防御潛在的攻擊至關重要。

在軟件系統中,不同組件之間的信任關系是安全分析的關鍵方面。這些信任關系是數據流的基礎,因為組件間的信任級別往往決定了它們在交換數據時所需的驗證程度。

設計和開發人員通常假定某些組件或接口是可信的,這意味著他們認為這些組件不會受到惡意影響,從而在處理這些組件的數據和行為時按照默認其安全。然而,一旦這種信任被錯誤賦予,攻擊者就可能利用受信任的實體,導致系統安全性的連鎖反應。

在評估信任關系時,信任的傳遞性同樣不容忽視。例如,如果軟件系統信任某個外部組件,而該組件又信任某個網絡,那么您的系統實際上也間接信任該網絡。如果這種信任鏈中的任何一環信任度不足,整個系統都可能成為攻擊的犧牲品,從而將您的軟件置于風險之中。

探索軟件缺陷的另一種有效途徑是將其視為開發者和設計者在構建軟件時做出的未經證實的假設。這些假設可能涉及軟件的多個層面,包括輸入數據的有效性和結構、輔助程序的安全性、操作環境的安全性、攻擊者和用戶的技能,以及特定API調用或編程語言特性的行為和細微差別。

不恰當的假設與錯誤信任的概念緊密相連。實際上,對某個組件的過度信任可以被視為對其做出了不切實際的假設。

以下為這種假設和過度信任的具體問題類型:

- 輸入 -

如前所述,軟件漏洞很大程度上源于攻擊者向系統注入的惡意數據。這些數據之所以能夠造成麻煩,部分原因在于軟件往往對其通信伙伴持有過度的信任,并對數據的來源及其內容做出了不切實際的假設。

在編寫處理數據的代碼時,開發人員常常對數據提供者(無論是用戶還是其他軟件組件)持有一定的預期。例如,在處理用戶輸入時,開發人員可能會假設用戶不會輸入包含5,000個字符及不可打印符號的字符。同樣,當編寫兩個軟件組件之間的接口代碼時,他們可能默認輸入數據格式將是正確的,而沒有考慮到程序可能會處理負長度的二進制記錄或接收高達數十億字節的網絡請求。

然而,攻擊者在審視輸入處理代碼時,會嘗試探索每一個可能的輸入,特別是那些可能導致程序狀態不一致或意外的輸入。他們致力于測試軟件的每一個接口,尋找開發人員所做的任何潛在假設。對于攻擊者來說,任何能夠提供意外輸入的機會都是極具價值的,因為這些輸入可能會在后續處理中引發開發人員未曾預料的微妙錯誤。

通常,如果攻擊者能夠對軟件的運行時屬性進行意外的修改,他們就可能找到方法來放大這種影響,從而利用漏洞對程序造成更嚴重的后果。


- 接口 -

接口是軟件組件之間以及與外部世界交互的關鍵機制。眾多漏洞的根源在于開發人員對這些接口的安全特性理解不足,進而錯誤地假設只有可信節點會與之交互。當程序組件可以通過網絡或本地計算機上的多種途徑被訪問時,攻擊者就可能直接與這些組件交互,并注入惡意輸入。如果組件在編寫時假設其通信對方是可信的,那么應用程序可能會以易受攻擊的方式處理這些輸入。

加劇這一漏洞的是開發人員常常對攻擊者訪問接口的難度做出誤判,因此對那些缺乏足夠安全措施的接口賦予了過多的信任。例如,開發人員可能認為他們的應用程序非常安全,因為他們使用了包含自定義加密的復雜且專有的網絡協議。他們可能錯誤地假設攻擊者不太可能獨立構建客戶端和加密層,并以非預期的方式操縱協議。然而,這種假設往往是站不住腳的,因為許多攻擊者樂于對專有協議進行逆向工程,尋找可以利用的安全漏洞。

總的來說,開發人員可能會因為以下幾個原因而對接口的安全性產生疑慮:

1、不充分的保護措施:開發人員選擇的接口暴露方式可能無法提供足夠的安全防護,從而無法有效抵御外部攻擊。

2、錯誤的使用或配置:雖然開發人員可能選擇了可靠的接口公開方法,比如操作系統服務,但他們可能在接口的使用或配置上出現了錯誤。此外,攻擊者還可能利用基礎平臺中的漏洞來非預期地控制該接口。

3、對訪問難度的誤判:開發人員可能認為某個接口對于攻擊者來說訪問難度過高,這種假設往往存在風險。攻擊者往往會找到方法來克服看似難以訪問的接口。


- 環境攻擊 -

軟件系統并非孤立運行,而是依賴于一個由多種組件構成的計算環境,這些組件通常包括操作系統、硬件架構、網絡、文件系統、數據庫以及用戶等。雖然許多軟件漏洞源于對惡意數據的處理不當,但還有一部分缺陷是由于攻擊者操控軟件的底層環境而觸發的。

這些缺陷可被視為開發人員對軟件運行所依賴的環境做出的不切實際的假設所導致。每種支持技術,如操作系統、網絡或數據庫,都有其最佳實踐和復雜細節。如果應用開發人員對這些技術可能存在的安全問題缺乏全面了解,他們就可能犯下導致安全漏洞的錯誤。

一個典型的漏洞類型是競爭條件,這類漏洞的觸發并非源自攻擊者提供的數據,而是由于攻擊者針對程序運行時環境的操作,導致程序與操作系統之間的交互出現了非預期的且不安全的方式。


- 特殊條件 -

特殊條件漏洞通常與異常情況的處理緊密相關,并交織著數據和環境漏洞。這類漏洞的基本特征是攻擊者通過外部手段引發程序正??刂屏鞯姆穷A期變化。這種變化可能需要程序的非同步中斷,例如信號傳遞,或者通過耗盡全局系統資源來故意觸發程序中的故障點。


該文章在 2024/3/25 0:33:17 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved