軟件安全評(píng)估之軟件漏洞基礎(chǔ)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
零 基礎(chǔ)概念 在軟件安全的語境中,漏洞是指軟件中的具體缺陷或疏忽,能夠被攻擊者利用并執(zhí)行一些惡意行為,例如泄露或修改敏感信息、干擾或銷毀系統(tǒng)、接管計(jì)算機(jī)系統(tǒng)或程序權(quán)限等等。 安全漏洞(Vulnerability)與大眾熟悉的軟件缺陷(Bug)有所不同。軟件缺陷是程序中的錯(cuò)誤、失誤或疏忽,導(dǎo)致意外或者不希望發(fā)生的情況(即應(yīng)當(dāng)發(fā)生卻沒發(fā)生,結(jié)婚十年一直沒懷上)?;\統(tǒng)的說,安全漏洞可以看作是軟件缺陷的一個(gè)子集,是一種特殊的軟件缺陷:惡意用戶可以利用它發(fā)動(dòng)攻擊,影響軟件及其支持系統(tǒng)。幾乎所有的安全漏洞都可以被看作軟件缺陷,但只有一些軟件缺陷最終成為嚴(yán)格意義上的安全漏洞,意味著這類缺陷必須具有安全屬性相關(guān)的影響,允許攻擊者執(zhí)行通常無法進(jìn)行的操作(即不應(yīng)當(dāng)發(fā)生卻發(fā)生了,外出三年老婆懷上了)。 在談?wù)摪踩耘c可靠性時(shí),有的人會(huì)說安全性是可靠性的一個(gè)重要組成部分。雖然這種說法不太普遍,但一個(gè)可靠性高的軟件基本上是缺陷較少的軟件: 它在用戶使用過程中很少出現(xiàn)故障,能夠妥善處理各種異常情況,并且采用“防御性編程(Defensive Programming)”策略(如減少缺陷、增加代碼可讀性、設(shè)置異常處理)來應(yīng)對不穩(wěn)定的執(zhí)行環(huán)境和錯(cuò)誤的輸入數(shù)據(jù)。 而一個(gè)安全性高的軟件則更像是一個(gè)健壯的軟件: 它能夠抵御那些企圖通過篡改環(huán)境和輸入數(shù)據(jù)來利用軟件漏洞以達(dá)到惡意目的的攻擊。 因此,軟件的安全性和可靠性追求的是共同的目標(biāo),這個(gè)目標(biāo)需要通過采用專注于消除各種軟件缺陷的開發(fā)策略來達(dá)成。但安全漏洞與軟件缺陷并非總是可以清晰界定。比如:一個(gè)允許用戶編輯其不應(yīng)有權(quán)訪問的關(guān)鍵系統(tǒng)文件的程序,可能在規(guī)范和設(shè)計(jì)層面上沒有問題,但這無疑是一個(gè)嚴(yán)重的安全漏洞。 壹 安全策略 系統(tǒng)的安全性本質(zhì)上是由安全策略(policy)、安全模型(model)、安全控制(control)構(gòu)成,其中最重要的是安全策略,策略定義了系統(tǒng)應(yīng)當(dāng)具備的安全標(biāo)準(zhǔn)以及允許接受的安全損害。因此,任何對軟件系統(tǒng)安全性的侵害都可以被視為是對其安全策略的破壞。 對于一個(gè)由軟件、用戶和資源構(gòu)成的系統(tǒng),安全策略本質(zhì)上是一系列關(guān)于允許和禁止行為的規(guī)則。例如,“未經(jīng)驗(yàn)證的用戶不得訪問系統(tǒng)的A服務(wù)?!比绻唇?jīng)驗(yàn)證的用戶能夠訪問該服務(wù),則違反了既定的安全策略。 每個(gè)軟件系統(tǒng)都應(yīng)該具備一定的安全策略。這些策略可能是正式的文件集合,也可能是用戶對系統(tǒng)合理行為非正式的期望。對于許多軟件系統(tǒng),即便沒有明確的書面規(guī)定或描述,人們通常也能認(rèn)識(shí)到哪些行為可能構(gòu)成安全風(fēng)險(xiǎn)(比如用戶可以看到其他用戶的購物記錄)。因此,“安全策略”通常指的是用戶對于軟件系統(tǒng)行為的允許和禁止方面的共識(shí)。 貳 安全期望 為了深入理解軟件安全,我們需要考慮用戶對軟件安全可能抱有的期望。這有助于我們識(shí)別哪些行為可能被視為安全違規(guī),或破壞了安全屬性。安全屬性至少涵蓋三個(gè)基礎(chǔ)部分:機(jī)密性、完整性和可用性。 機(jī)密性:機(jī)密性關(guān)注的是信息的保護(hù),確保信息能夠持續(xù)保持私密狀態(tài),包括從國家級(jí)別的情報(bào)秘密、企業(yè)商業(yè)機(jī)密到個(gè)人敏感信息等各種敏感數(shù)據(jù)。 完整性:完整性關(guān)乎數(shù)據(jù)的可信度和準(zhǔn)確性。人們期望軟件能夠防止數(shù)據(jù)被不當(dāng)篡改,確保數(shù)據(jù)的來源和內(nèi)容都是可信的。 可用性:可用性涉及訪問和使用信息和資源的能力,通常指的是用戶對系統(tǒng)能夠持續(xù)的、正常的訪問的期望。導(dǎo)致軟件崩潰或其他造成用戶不可訪問的問題,包括利用特定輸入或環(huán)境導(dǎo)致的程序中斷,以及耗盡軟件系統(tǒng)資源(如CPU、磁盤空間或網(wǎng)絡(luò)帶寬)的攻擊都屬于破壞可用性。 叁 代碼審計(jì)的必要性 用戶的默認(rèn)期望是軟件供應(yīng)商能夠保證其產(chǎn)品的安全性,比如購房、購車的時(shí)候不會(huì)特別注意和強(qiáng)調(diào)房子的抗震能力或車輛的防側(cè)翻能力,但實(shí)際使用中會(huì)默認(rèn)其產(chǎn)品具備符合用戶普遍預(yù)期的安全性。然而,現(xiàn)實(shí)中供應(yīng)商往往沒有提供足夠的質(zhì)量保證,查看大多數(shù)商業(yè)軟件附帶的最終用戶許可協(xié)議(EULA)便可知。盡管如此,為了保證公司的長遠(yuǎn)利益,供應(yīng)商通常還是會(huì)實(shí)施一定的質(zhì)量保證措施,這些措施通常集中在市場直接關(guān)注的部分,如功能、用戶體驗(yàn)和系統(tǒng)穩(wěn)定性,但這種做法往往導(dǎo)致安全問題被忽視或邊緣化。 現(xiàn)在,安全意識(shí)的提升促使許多供應(yīng)商采納了更嚴(yán)格的業(yè)務(wù)和開發(fā)流程進(jìn)行安全測試,比如自動(dòng)代碼掃描、安全漏洞掃描、滲透測試、手動(dòng)代碼審計(jì)(Code Review)等安全測試方法已經(jīng)成為行業(yè)標(biāo)準(zhǔn)。 除了公司開發(fā)內(nèi)部軟件的明顯情況外,代碼安全審計(jì)在其他多種情況下也具有重要意義。 如上所見,代碼審核在多種情境下都顯得至關(guān)重要。盡管對于具備這些技能的專業(yè)人員存在顯著需求,但很少有人接受過相應(yīng)的專業(yè)訓(xùn)練或培訓(xùn),并且擁有高標(biāo)準(zhǔn)執(zhí)行代碼審計(jì)的實(shí)踐、實(shí)戰(zhàn)經(jīng)驗(yàn)。 肆 代碼審計(jì)與黑盒測試 黑盒測試是一種通過操作其暴露的接口來評(píng)估軟件系統(tǒng)的方法。通常,此過程涉及構(gòu)造特定的輸入,這些輸入可能會(huì)導(dǎo)致應(yīng)用程序執(zhí)行某些意外行為,例如軟件崩潰或暴露敏感信息。模糊測試是黑盒測試的一種常見方法,使用模糊測試工具時(shí)無需手動(dòng)測試每種情況,只需運(yùn)行工具(可能需要對配置進(jìn)行一些修改)并記錄結(jié)果即可。 對應(yīng)用程序進(jìn)行黑盒測試的優(yōu)勢在于測試速度快,幾乎可以立即獲取結(jié)果。然而,黑盒測試也存在一些重大缺點(diǎn)。黑盒測試是將大量數(shù)據(jù)輸入應(yīng)用程序,希望它執(zhí)行一些不應(yīng)該執(zhí)行的操作。由于不知道應(yīng)用程序如何處理數(shù)據(jù),可能存在代碼路徑無法被掃描到,存在未觸發(fā)的路徑。例如,假設(shè)請求的查詢字符串中存在特定關(guān)鍵字,則它可能具有某些內(nèi)部功能。如下圖中的示例代碼: 上述代碼在查詢字符串時(shí)具有特殊的行為:如果查詢字符串包含"mode="序列,服務(wù)器則將設(shè)置環(huán)境變量MODE的值為xxx。然而,這段代碼對sprintf()函數(shù)的不慎使用會(huì)導(dǎo)致緩沖區(qū)溢出。 上述示例可以通過檢查代碼立即發(fā)現(xiàn)問題,而黑盒測試或模糊測試工具可能會(huì)漏掉這個(gè)漏洞。這就是為什么代碼審核很重要。 伍 代碼審計(jì)和SDLC 鑒于應(yīng)用程序可能遭受惡意利用的風(fēng)險(xiǎn),安全評(píng)估顯得至關(guān)重要,確定評(píng)估的最佳時(shí)機(jī)也同樣關(guān)鍵。通常,在開發(fā)生命周期(SDLC)的任何階段,都應(yīng)該開展安全評(píng)估和測試。 評(píng)估和測試的成本取決于選擇進(jìn)行審核的時(shí)間和方法,以及發(fā)現(xiàn)和修復(fù)漏洞可能帶來的成本差異: 可行性研究:此階段確定項(xiàng)目應(yīng)滿足的需求,確定需求在技術(shù)和財(cái)務(wù)上的可行性。 需求:在此階段,將對項(xiàng)目需求進(jìn)行更深入的研究,并建立項(xiàng)目目標(biāo)。 設(shè)計(jì):設(shè)計(jì)解決方案并就系統(tǒng)如何在技術(shù)上實(shí)現(xiàn)做出決策。 編碼:此階段時(shí)根據(jù)前一階段的設(shè)計(jì)進(jìn)行具體的代碼開發(fā)。 測試:通過質(zhì)量測試方法盡可能捕獲軟件中的任何錯(cuò)誤。 運(yùn)維:軟件投入使用后根據(jù)用戶反饋進(jìn)行修訂、更新和更正。 所有軟件的開發(fā)過程和開發(fā)方法都在某種程度上借鑒了軟件開發(fā)生命周期(SDLC)模型。傳統(tǒng)的瀑布模型傾向于嚴(yán)格遵循這一模型,只經(jīng)歷一次生命周期迭代,相較之下,敏捷開發(fā)則傾向于通過重復(fù)迭代SDLC的各個(gè)階段來逐步完善應(yīng)用程序。 陸 軟件安全漏洞類別 漏洞類別是對具有相似特征或共同模式的軟件缺陷進(jìn)行分組的一種方法,也是一種幫助理解和交流軟件缺陷的心理工具。沒有完美無缺的分類體系能夠?qū)⒙┒淳_地劃分到互不重疊的類別中,一個(gè)漏洞可能同時(shí)屬于多個(gè)類別,具體的類別歸屬取決于安全人員的主觀意識(shí)。 在界定漏洞的類別時(shí),可以從軟件開發(fā)生命周期(SDLC)各階段的看出關(guān)鍵差異。通常漏洞可以分為設(shè)計(jì)漏洞和實(shí)現(xiàn)漏洞,設(shè)計(jì)漏洞主要出現(xiàn)在SDLC的前三個(gè)階段,涉及軟件設(shè)計(jì)、系統(tǒng)架構(gòu)和規(guī)范中的缺陷,實(shí)現(xiàn)漏洞則發(fā)生在SDLC的后兩個(gè)階段,通常指軟件實(shí)際開發(fā)和構(gòu)建過程中的純粹的技術(shù)缺陷。此外在軟件運(yùn)行過程中,還存在環(huán)境漏洞或操作漏洞,這類漏洞與軟件在特定環(huán)境中的部署和配置有關(guān)。 設(shè)計(jì)漏洞 設(shè)計(jì)漏洞是由于軟件設(shè)計(jì)的基本錯(cuò)誤或疏忽導(dǎo)致的問題。這類漏洞使得軟件即使按照設(shè)計(jì)目的正常運(yùn)行也存在安全風(fēng)險(xiǎn),因?yàn)槠涓丛谟阱e(cuò)誤的設(shè)計(jì)邏輯或設(shè)計(jì)方法。本質(zhì)上,設(shè)計(jì)漏洞源于設(shè)計(jì)人員在設(shè)計(jì)過程中對程序運(yùn)行流程、運(yùn)行環(huán)境、使用方法的錯(cuò)誤假設(shè),或者是未充分考慮程序引入的組件存在的安全漏洞和風(fēng)險(xiǎn)。設(shè)計(jì)漏洞也常被稱為架構(gòu)缺陷,因此此類漏洞的修復(fù)成本和代價(jià)在所有類型漏洞中最高,甚至?xí)媾R無法修復(fù)或者沒辦法修復(fù)的情況。 實(shí)現(xiàn)漏洞 在實(shí)現(xiàn)漏洞中,代碼通常會(huì)按照預(yù)期執(zhí)行其功能,但執(zhí)行的方式可能存在安全風(fēng)險(xiǎn)。這些問題主要出現(xiàn)在軟件開發(fā)生命周期(SDLC)的開發(fā)階段,但往往也會(huì)延續(xù)到集成和測試階段。當(dāng)開發(fā)過程與設(shè)計(jì)階段設(shè)定的技術(shù)規(guī)范出現(xiàn)偏差時(shí),就可能出現(xiàn)這類漏洞。在大多數(shù)情況下,可利用的安全漏洞是由于技術(shù)工具、構(gòu)建軟件的平臺(tái)以及編程語言環(huán)境的細(xì)微差異所引起的。 環(huán)境(操作)漏洞 環(huán)境(操作)漏洞是指軟件在特定環(huán)境下的操作過程和一般使用中出現(xiàn)的安全問題。這類漏洞的關(guān)鍵特征是它們并不直接存在于軟件的源代碼中,相反,它們源于軟件與其運(yùn)行環(huán)境的交互方式或者人員操作的方式。具體來說,環(huán)境漏洞可能涉及軟件配置問題、支持軟件和硬件以及系統(tǒng)周圍的自動(dòng)化和手動(dòng)流程。此外,環(huán)境漏洞也包括對用戶的社會(huì)工程學(xué)攻擊和物理攻擊。這些問題主要在軟件開發(fā)生命周期(SDLC)的運(yùn)行和維護(hù)階段出現(xiàn)。 柒 漏洞類別區(qū)分 就SDLC而言,設(shè)計(jì)漏洞和實(shí)現(xiàn)漏洞之間的區(qū)別看似簡單,但區(qū)分起來并不那么容易。許多實(shí)施漏洞也可以被解釋為設(shè)計(jì)階段沒有充分預(yù)見或解決問題的情況。程序員在實(shí)現(xiàn)過程中會(huì)涉及大量的組件,包括類、函數(shù)、網(wǎng)絡(luò)協(xié)議、虛擬機(jī),或者可能是一系列巧妙、復(fù)雜的代碼結(jié)構(gòu)。 同樣,環(huán)境漏洞與實(shí)現(xiàn)或設(shè)計(jì)漏洞之間的界限也不是非常清晰。例如,如果一個(gè)程序由于環(huán)境問題而以不安全的方式運(yùn)行,這也可以被視為設(shè)計(jì)或?qū)崿F(xiàn)的問題。理想情況下,應(yīng)用程序的開發(fā)應(yīng)該使其不易受到這些環(huán)境因素的影響。 因此,設(shè)計(jì)、實(shí)現(xiàn)和環(huán)境漏洞的定義并非是嚴(yán)格劃分的,它們之間存在很大的解釋空間和重疊區(qū)域。 捌 軟件漏洞的成因 控制流與數(shù)據(jù)流是軟件安全的兩大關(guān)鍵要素。眾多軟件漏洞往往是程序處理惡意數(shù)據(jù)時(shí)出現(xiàn)的意外行為所觸發(fā)。 大多數(shù)漏洞在利用時(shí),攻擊者通過各種方式將惡意數(shù)據(jù)注入系統(tǒng),以觸發(fā)漏洞的利用。然而,這些數(shù)據(jù)并不總是直接來源于用戶的輸入,它們可能采取更為復(fù)雜的路徑進(jìn)入系統(tǒng)。這些惡意數(shù)據(jù)可能源自眾多不同的來源,并通過多種接口進(jìn)入系統(tǒng)。在到達(dá)能夠觸發(fā)可利用條件的關(guān)鍵位置之前,它們可能會(huì)穿越系統(tǒng)的多個(gè)模塊,并在這個(gè)過程中經(jīng)歷多次轉(zhuǎn)換。 因此,在分析和評(píng)審一個(gè)軟件系統(tǒng)時(shí),必須關(guān)注的核心屬性是整個(gè)系統(tǒng)中各個(gè)模塊、組件間的數(shù)據(jù)流,掌握數(shù)據(jù)流的全貌對于確保系統(tǒng)的安全性和防御潛在的攻擊至關(guān)重要。 在軟件系統(tǒng)中,不同組件之間的信任關(guān)系是安全分析的關(guān)鍵方面。這些信任關(guān)系是數(shù)據(jù)流的基礎(chǔ),因?yàn)榻M件間的信任級(jí)別往往決定了它們在交換數(shù)據(jù)時(shí)所需的驗(yàn)證程度。 設(shè)計(jì)和開發(fā)人員通常假定某些組件或接口是可信的,這意味著他們認(rèn)為這些組件不會(huì)受到惡意影響,從而在處理這些組件的數(shù)據(jù)和行為時(shí)按照默認(rèn)其安全。然而,一旦這種信任被錯(cuò)誤賦予,攻擊者就可能利用受信任的實(shí)體,導(dǎo)致系統(tǒng)安全性的連鎖反應(yīng)。 在評(píng)估信任關(guān)系時(shí),信任的傳遞性同樣不容忽視。例如,如果軟件系統(tǒng)信任某個(gè)外部組件,而該組件又信任某個(gè)網(wǎng)絡(luò),那么您的系統(tǒng)實(shí)際上也間接信任該網(wǎng)絡(luò)。如果這種信任鏈中的任何一環(huán)信任度不足,整個(gè)系統(tǒng)都可能成為攻擊的犧牲品,從而將您的軟件置于風(fēng)險(xiǎn)之中。 探索軟件缺陷的另一種有效途徑是將其視為開發(fā)者和設(shè)計(jì)者在構(gòu)建軟件時(shí)做出的未經(jīng)證實(shí)的假設(shè)。這些假設(shè)可能涉及軟件的多個(gè)層面,包括輸入數(shù)據(jù)的有效性和結(jié)構(gòu)、輔助程序的安全性、操作環(huán)境的安全性、攻擊者和用戶的技能,以及特定API調(diào)用或編程語言特性的行為和細(xì)微差別。 不恰當(dāng)?shù)募僭O(shè)與錯(cuò)誤信任的概念緊密相連。實(shí)際上,對某個(gè)組件的過度信任可以被視為對其做出了不切實(shí)際的假設(shè)。 以下為這種假設(shè)和過度信任的具體問題類型: - 輸入 - 如前所述,軟件漏洞很大程度上源于攻擊者向系統(tǒng)注入的惡意數(shù)據(jù)。這些數(shù)據(jù)之所以能夠造成麻煩,部分原因在于軟件往往對其通信伙伴持有過度的信任,并對數(shù)據(jù)的來源及其內(nèi)容做出了不切實(shí)際的假設(shè)。 在編寫處理數(shù)據(jù)的代碼時(shí),開發(fā)人員常常對數(shù)據(jù)提供者(無論是用戶還是其他軟件組件)持有一定的預(yù)期。例如,在處理用戶輸入時(shí),開發(fā)人員可能會(huì)假設(shè)用戶不會(huì)輸入包含5,000個(gè)字符及不可打印符號(hào)的字符。同樣,當(dāng)編寫兩個(gè)軟件組件之間的接口代碼時(shí),他們可能默認(rèn)輸入數(shù)據(jù)格式將是正確的,而沒有考慮到程序可能會(huì)處理負(fù)長度的二進(jìn)制記錄或接收高達(dá)數(shù)十億字節(jié)的網(wǎng)絡(luò)請求。 然而,攻擊者在審視輸入處理代碼時(shí),會(huì)嘗試探索每一個(gè)可能的輸入,特別是那些可能導(dǎo)致程序狀態(tài)不一致或意外的輸入。他們致力于測試軟件的每一個(gè)接口,尋找開發(fā)人員所做的任何潛在假設(shè)。對于攻擊者來說,任何能夠提供意外輸入的機(jī)會(huì)都是極具價(jià)值的,因?yàn)檫@些輸入可能會(huì)在后續(xù)處理中引發(fā)開發(fā)人員未曾預(yù)料的微妙錯(cuò)誤。 通常,如果攻擊者能夠?qū)浖倪\(yùn)行時(shí)屬性進(jìn)行意外的修改,他們就可能找到方法來放大這種影響,從而利用漏洞對程序造成更嚴(yán)重的后果。 - 接口 - 接口是軟件組件之間以及與外部世界交互的關(guān)鍵機(jī)制。眾多漏洞的根源在于開發(fā)人員對這些接口的安全特性理解不足,進(jìn)而錯(cuò)誤地假設(shè)只有可信節(jié)點(diǎn)會(huì)與之交互。當(dāng)程序組件可以通過網(wǎng)絡(luò)或本地計(jì)算機(jī)上的多種途徑被訪問時(shí),攻擊者就可能直接與這些組件交互,并注入惡意輸入。如果組件在編寫時(shí)假設(shè)其通信對方是可信的,那么應(yīng)用程序可能會(huì)以易受攻擊的方式處理這些輸入。 加劇這一漏洞的是開發(fā)人員常常對攻擊者訪問接口的難度做出誤判,因此對那些缺乏足夠安全措施的接口賦予了過多的信任。例如,開發(fā)人員可能認(rèn)為他們的應(yīng)用程序非常安全,因?yàn)樗麄兪褂昧税远x加密的復(fù)雜且專有的網(wǎng)絡(luò)協(xié)議。他們可能錯(cuò)誤地假設(shè)攻擊者不太可能獨(dú)立構(gòu)建客戶端和加密層,并以非預(yù)期的方式操縱協(xié)議。然而,這種假設(shè)往往是站不住腳的,因?yàn)樵S多攻擊者樂于對專有協(xié)議進(jìn)行逆向工程,尋找可以利用的安全漏洞。 總的來說,開發(fā)人員可能會(huì)因?yàn)橐韵聨讉€(gè)原因而對接口的安全性產(chǎn)生疑慮: 1、不充分的保護(hù)措施:開發(fā)人員選擇的接口暴露方式可能無法提供足夠的安全防護(hù),從而無法有效抵御外部攻擊。 2、錯(cuò)誤的使用或配置:雖然開發(fā)人員可能選擇了可靠的接口公開方法,比如操作系統(tǒng)服務(wù),但他們可能在接口的使用或配置上出現(xiàn)了錯(cuò)誤。此外,攻擊者還可能利用基礎(chǔ)平臺(tái)中的漏洞來非預(yù)期地控制該接口。 3、對訪問難度的誤判:開發(fā)人員可能認(rèn)為某個(gè)接口對于攻擊者來說訪問難度過高,這種假設(shè)往往存在風(fēng)險(xiǎn)。攻擊者往往會(huì)找到方法來克服看似難以訪問的接口。 - 環(huán)境攻擊 - 軟件系統(tǒng)并非孤立運(yùn)行,而是依賴于一個(gè)由多種組件構(gòu)成的計(jì)算環(huán)境,這些組件通常包括操作系統(tǒng)、硬件架構(gòu)、網(wǎng)絡(luò)、文件系統(tǒng)、數(shù)據(jù)庫以及用戶等。雖然許多軟件漏洞源于對惡意數(shù)據(jù)的處理不當(dāng),但還有一部分缺陷是由于攻擊者操控軟件的底層環(huán)境而觸發(fā)的。 這些缺陷可被視為開發(fā)人員對軟件運(yùn)行所依賴的環(huán)境做出的不切實(shí)際的假設(shè)所導(dǎo)致。每種支持技術(shù),如操作系統(tǒng)、網(wǎng)絡(luò)或數(shù)據(jù)庫,都有其最佳實(shí)踐和復(fù)雜細(xì)節(jié)。如果應(yīng)用開發(fā)人員對這些技術(shù)可能存在的安全問題缺乏全面了解,他們就可能犯下導(dǎo)致安全漏洞的錯(cuò)誤。 一個(gè)典型的漏洞類型是競爭條件,這類漏洞的觸發(fā)并非源自攻擊者提供的數(shù)據(jù),而是由于攻擊者針對程序運(yùn)行時(shí)環(huán)境的操作,導(dǎo)致程序與操作系統(tǒng)之間的交互出現(xiàn)了非預(yù)期的且不安全的方式。 - 特殊條件 - 特殊條件漏洞通常與異常情況的處理緊密相關(guān),并交織著數(shù)據(jù)和環(huán)境漏洞。這類漏洞的基本特征是攻擊者通過外部手段引發(fā)程序正??刂屏鞯姆穷A(yù)期變化。這種變化可能需要程序的非同步中斷,例如信號(hào)傳遞,或者通過耗盡全局系統(tǒng)資源來故意觸發(fā)程序中的故障點(diǎn)。 該文章在 2024/3/25 0:33:17 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |