今天小溪暢流簡單為大家說下一些最為常見的軟件漏洞,以及如何避免它們的方法。
一、緩沖區(qū)溢出
當您的程序試圖讀取或?qū)懭氤龇秶木彌_區(qū)時,就會發(fā)生緩沖區(qū)溢出的錯誤。其直接的危害是:可能導致數(shù)據(jù)覆蓋,或是在現(xiàn)有的代碼中附加不該出現(xiàn)的數(shù)據(jù)。因此,緩沖區(qū)溢出可以使得攻擊者通過執(zhí)行代碼,來更改程序流,進而讀取某種敏感數(shù)據(jù),或造成系統(tǒng)的崩潰。
緩沖區(qū)溢出漏洞的典型示例包括:接受各種長度不受限制的輸入;允許從無效的索引處對數(shù)組進行讀取操作;緩沖區(qū)溢出漏洞通常潛藏在軟、硬件體系架構(gòu)的設(shè)計、實施、以及操作階段。這些漏洞最常見于C、C++和Assembly程序中。當然,它也可能出現(xiàn)在缺乏對內(nèi)存管理提供支持的任何一種編程語言里。
預防措施:應(yīng)當盡量選擇諸如:Java或Perl等具有防范,或降低此類漏洞風險機制的語言。而在C#之類的編程語言中,我們千萬不要禁用溢出保護的選項。即便如此,那些具有“免疫”功能的編程語言,也可能會在運行環(huán)境中的易受攻擊的、原生代碼交互時,產(chǎn)生不可預期的錯誤。
另外,請創(chuàng)建代碼時確保正確地分配緩沖區(qū)空間,并使用各種方法和功能來限制輸入的大小。
二、不當?shù)妮斎腧炞C
如果我們不能夠在接收端對用戶的輸入采取驗證,或驗證不足,那么就會產(chǎn)生所謂的“輸入驗證不當”。而不當?shù)尿炞C則會使得攻擊者通過執(zhí)行惡意代碼,來更改程序流,訪問敏感數(shù)據(jù),以及濫用現(xiàn)有的資源分配。
預防措施:我們應(yīng)該對任何用戶采取“零信任”的原則,并假設(shè)所有的輸入都是可疑的,直到它們被證明是安全的為止。同時,我們可以使用白名單機制,來確保輸入的內(nèi)容僅包含了可接受的格式與信息。
此外,我們應(yīng)當確保在客戶端和服務(wù)器端都執(zhí)行相應(yīng)的檢查。為了避免出現(xiàn)客戶端驗證被繞過的情況,我們需要重點在服務(wù)器端捕獲各項輸入,以識別攻擊者的潛在操縱。同時,在程序代碼進行任何必要的組合或轉(zhuǎn)換后,也請您再次驗證其輸入。
三、信息泄露
數(shù)據(jù)被有意或無意地提供給潛在攻擊者,被稱為信息泄露。除了泄露敏感的數(shù)據(jù)信息,向攻擊者提供可能被利用的軟、硬件環(huán)境信息也是一種泄露。
預防措施:為防止信息的泄露,您應(yīng)當在設(shè)計程序架構(gòu)時,針對明確的信任邊界區(qū)域,來保護敏感的信息;通過使用訪問控制,來保護和限制“安全”區(qū)域與各個端點之間的連接。
為了最大程度地避免該漏洞,請在程序中驗證各類錯誤的提示消息,以及用戶警告信息中是否包含有不必要暴露的內(nèi)容。同時,您還應(yīng)該限制在URL和通信包的頭部(header)出現(xiàn)的敏感信息。例如:您可以隱藏完整的路徑名稱,以及API密鑰。
四、特權(quán)或認證不當
如果未能正確地分配,跟蹤,修改或驗證用戶的相關(guān)權(quán)限和憑據(jù),那么就可能發(fā)生特權(quán)或身份驗證不當?shù)那闆r。此類漏洞可以讓攻擊者濫用特權(quán),執(zhí)行受限的任務(wù),以及訪問受限的數(shù)據(jù)。
預防措施:您應(yīng)當將“最小特權(quán)原則”,應(yīng)用于與目標軟件和系統(tǒng)交互的所有用戶和服務(wù)之中。只給真正需要某些資源和操作的用戶或服務(wù),完成所需任務(wù)的最少權(quán)限。我們需要通過在整個程序和環(huán)境中使用訪問控制,來限制用戶和實體的權(quán)限。
如有可能,我們也可以將高級特權(quán)分給多個角色。通過分離,我們可以有效地削弱“高級用戶”,并降低攻擊者濫用其訪問權(quán)限的能力。此外,您還可以運用多因素身份驗證的方法,來防止攻擊者繞過系統(tǒng)的檢查機制,輕松地獲得訪問權(quán)限。
軟件漏洞可謂層出不窮,我們能做的只有通過了解漏洞的原理和防范的措施,來及時地調(diào)整自己的實現(xiàn)方式,并開展全面的測試,在產(chǎn)品發(fā)布之前,盡可能多地發(fā)現(xiàn)并解決潛在的漏洞與問題。
上一篇 : 小程序的出現(xiàn)為何能給用戶帶來不一樣的體驗?
下一篇: 學會利用軟件才能快速提升銷售業(yè)績