建站知識(shí)
規(guī)避漏洞的防范措施和定期升級(jí)
規(guī)避漏洞的防范措施和定期升級(jí)
緩沖區(qū)溢出漏洞
當(dāng)軟件程序試圖讀取或?qū)懭氤龇秶木彌_區(qū)時(shí),就會(huì)發(fā)生緩沖區(qū)溢出。它可能導(dǎo)致覆蓋或在現(xiàn)有代碼中附加數(shù)據(jù)。緩沖區(qū)溢出可使攻擊者執(zhí)行代碼、更改程序流、讀取敏感數(shù)據(jù)或使系統(tǒng)崩潰等。
包括:
接受長(zhǎng)度不受限制的輸入
允許從無(wú)效索引對(duì)數(shù)組進(jìn)行讀取操作
緩沖區(qū)溢出漏洞通常發(fā)生在體系結(jié)構(gòu)和設(shè)計(jì)、實(shí)施或操作階段。這一漏洞最常見于 C,C ++ 和 Assembly 程序,可以以任何缺少內(nèi)存管理支持的語(yǔ)言出現(xiàn)。
如何防范?
盡可能選擇一種防止或降低此漏洞風(fēng)險(xiǎn)的語(yǔ)言,例如:Java 或 Perl。不要禁用溢出保護(hù),例如在 C# 中。與環(huán)境中的易受攻擊的本機(jī)代碼交互時(shí),即使是“免疫”語(yǔ)言也可能會(huì)產(chǎn)生錯(cuò)誤。
為了防止利用緩沖區(qū)溢出漏洞,可以使用包含功能或擴(kuò)展名以限制輸入的編譯器。例如, Visual Studio 或 StackGuard。還可以使用工具在內(nèi)存中隨機(jī)排列程序組件。使地址更難以識(shí)別或預(yù)測(cè),從而使攻擊者難以利用特定組件。
最后,在創(chuàng)建代碼時(shí),確保正確分配了緩沖區(qū)空間。另外,使用允許限制輸入大小的方法和功能。
對(duì)輸入的驗(yàn)證
當(dāng)用戶輸入在接受時(shí)未得到驗(yàn)證或驗(yàn)證不足時(shí),就會(huì)發(fā)生輸入驗(yàn)證不當(dāng)。不正確的驗(yàn)證可以使攻擊者執(zhí)行惡意代碼、更改程序流、訪問敏感數(shù)據(jù)或?yàn)E用資源分配。
包括:
假設(shè)攻擊者無(wú)法訪問隱藏的表單字段
僅驗(yàn)證輸入的長(zhǎng)度而不是內(nèi)容
通常發(fā)生在架構(gòu)、設(shè)計(jì)和實(shí)施階段。它可以在任何接受外部數(shù)據(jù)的語(yǔ)言或系統(tǒng)中發(fā)生。
預(yù)防措施
應(yīng)該對(duì)任何用戶采取“零信任”原則,并假設(shè)所有輸入都是有害的,直到證明安全為止。使用白名單以確保輸入內(nèi)容僅包含可接受的格式和內(nèi)容。
在驗(yàn)證輸入時(shí),長(zhǎng)度、類型、語(yǔ)法和對(duì)邏輯的符合性(即輸入具有語(yǔ)義意義)??梢允褂枚喾N工具來(lái)確保進(jìn)行充分的驗(yàn)證,例如 OWASP ESAPI 驗(yàn)證 API 和 RegEx。使用這些工具來(lái)驗(yàn)證所有輸入源,包括環(huán)境變量,查詢,文件,數(shù)據(jù)庫(kù)和 API 調(diào)用。
確保在客戶端和服務(wù)器端都執(zhí)行檢查??梢岳@過客戶端驗(yàn)證,因此需要仔細(xì)檢查。如果繞過客戶端驗(yàn)證,則在服務(wù)器端捕獲輸入可以幫助你識(shí)別攻擊者的操縱。在進(jìn)行任何必要的組合或轉(zhuǎn)換后,請(qǐng)驗(yàn)證輸入。
信息泄露
當(dāng)有意或無(wú)意將數(shù)據(jù)提供給潛在攻擊者時(shí),就會(huì)發(fā)生信息泄露。數(shù)據(jù)可以包含敏感信息,也可以向攻擊者提供有關(guān)可以在攻擊中利用的軟件或環(huán)境的信息。
信息公開的示例包括:
顯示文件或程序完整路徑的錯(cuò)誤
錯(cuò)誤消息暴露了數(shù)據(jù)庫(kù)中用戶的存在
信息泄漏漏洞通常發(fā)生在開發(fā)的體系結(jié)構(gòu)和設(shè)計(jì)或?qū)嵤╇A段。任何語(yǔ)言都可能發(fā)生這些漏洞。
預(yù)防措施
為防止信息泄露,應(yīng)該設(shè)計(jì)程序體系結(jié)構(gòu)以將敏感信息包含在具有明確信任邊界的區(qū)域中。確保使用訪問控制來(lái)保護(hù)和限制“安全”區(qū)域與端點(diǎn)之間的連接。
為了最大程度地利用漏洞,請(qǐng)驗(yàn)證錯(cuò)誤消息和用戶警告中是否包含不必要的信息。還應(yīng)該限制來(lái)自 URL 和通信標(biāo)頭的敏感信息。例如,模糊完整的路徑名或 API 密鑰。
權(quán)限認(rèn)證不當(dāng)
如果未正確分配、跟蹤、修改或驗(yàn)證用戶權(quán)限和憑據(jù),則會(huì)發(fā)生不正確的權(quán)限或身份驗(yàn)證。這些漏洞可使攻擊者濫用權(quán)限,執(zhí)行受限任務(wù)或訪問受限數(shù)據(jù)。
包括:
不可逆轉(zhuǎn)的臨時(shí)權(quán)限升級(jí)。
通過黑名單而不是白名單來(lái)限制權(quán)限。
允許較低的權(quán)限級(jí)別影響較高的權(quán)限帳戶,例如:重置管理員密碼。
無(wú)限制的登錄嘗試或會(huì)話限制。
權(quán)限或身份驗(yàn)證漏洞通常在開發(fā)的體系結(jié)構(gòu)和設(shè)計(jì),實(shí)施或操作階段引入。任何語(yǔ)言都可能發(fā)生這些漏洞。
預(yù)防措施
應(yīng)該將最小權(quán)限原則應(yīng)用于軟件和系統(tǒng)交互的所有用戶和服務(wù)。通過在整個(gè)程序和環(huán)境中應(yīng)用訪問控制來(lái)限制用戶和實(shí)體的功能。將權(quán)限限制為僅用戶或服務(wù)所需的那些資源。
此外,將高級(jí)權(quán)限分成多個(gè)角色。分離有助于限制“高級(jí)用戶”,并降低攻擊者濫用訪問權(quán)限的能力。還可以應(yīng)用多因素身份驗(yàn)證方法來(lái)防止攻擊者繞過系統(tǒng)或獲得輕松的訪問權(quán)限。
減少一般漏洞的措施
除了采取針對(duì)特定漏洞的措施外,還應(yīng)該采取一些措施來(lái)總體上減少漏洞。例如:
關(guān)注威脅情報(bào)
時(shí)刻關(guān)注威脅情報(bào),了解新漏洞、新補(bǔ)丁、新舉措,防范于未然。
進(jìn)行漏洞評(píng)估
對(duì)軟件進(jìn)行定期的滲透測(cè)試,提高軟件安全性,在攻擊者之前發(fā)現(xiàn)潛在漏洞的存在,并做好相應(yīng)的應(yīng)對(duì)措施。