導致安然標題問題標軟件缺點首要有兩種:擺設中的縫隙和設計中的缺點。此刻軟件安然市場中的大年夜部門重點都放在發(fā)現(xiàn)和修復縫隙上,這主如果因為主動代碼審查東西讓這個過程變得很簡單。但其實軟件設計和架構中的缺點標題問題也據(jù)有很大年夜比率,它占所有安然標題問題標50%。
在這篇文章中,我們將切磋縫隙和缺點之間的差別。更首要的是,我們將介紹架構風險闡發(fā)(ARA)法度,經(jīng)證實,該法度可以或許很好地發(fā)現(xiàn)和修復縫隙。
那么,縫隙和缺點的辨別是甚么?或許我們可以從一些例子中得出結論。
縫隙
縫隙存在于軟件代碼(源代碼或二進制)中。一個最經(jīng)典的縫隙是緩沖區(qū)溢出漏洞,這個縫隙底子上觸及濫用C中某些字符串措置函數(shù)功能。此中最臭名昭著的函數(shù)功能是gets(),這是一個系統(tǒng)調用,它從用戶獲得輸進直到用戶決定點擊答復。我們把一個固定大年夜小的緩沖區(qū)想象成一個空水杯,然后想像一下,你設置了編制來從杯中取水以避免滿杯(報復打擊者則在不竭“倒水”)。假定倒太多水到杯子里,水溢出來,就回灑在臺面上。在C中的緩沖區(qū)溢出的環(huán)境下,太多輸進會籠蓋堆,或乃至籠蓋倉庫,從而粉碎法度的倉庫,造成法度解體或使法度轉而履行其它指令以進行報復打擊。簡單的縫隙,可駭?shù)暮蠊?。面對gets()的標題問題,我們出格等閑在源代碼中找到縫隙。
C中稀有以百計的系統(tǒng)調用,假定利用不當?shù)脑挘鼈兛赡軙е掳踩豢p隙,包含從字符串措置功能到整數(shù)溢出和整數(shù)下溢等標題問題。當然,在Java和其他說話中也有一樣多的弊端。別的,在Web利用法度(例如跨站腳本或跨站要求捏造)中也有常見縫隙和與數(shù)據(jù)庫相干的縫隙(例如SQL注進縫隙)。
面對這么多可能存在的縫隙,我們有需要擺設和利用一些東西來查找它們。此刻市道上有良多商業(yè)源代碼審查東西,好比惠普的Fortify、IBM的AppScan Source、Coverity公司的Quality Advisor,和Klocwork的Clocwork Insight。今朝源代碼審查的最新沖破是直接整合縫隙查找到每個開辟人員的集成開辟環(huán)境(IDE)中,如許我們就可以盡可能在最開端發(fā)現(xiàn)縫隙。好比,Cigital的SecureAssist就是這類道理。
缺點
除縫隙以外,我們還會看到缺點標題問題。缺點存在于軟件架構和設計中。這里有一個很是簡單的缺點的例子:健忘驗證用戶。這類弊端凡是沒法在代碼審查中被發(fā)現(xiàn),但這是一個極其嚴重的標題問題。你的過程是以root身份運行嗎?最好肯定誰在利用它!
其它關于缺點的例子包含“中間報復打擊人”標題問題,它使得報復打擊者能在組件、收集層、機械或收集之間進行竄改或***;別的,還有與糟和談有關的“重放報復打擊”標題問題。
為了更好地申明缺點,我們在這里列出了一些常見的與Java相干的缺點標題問題:弊端利用暗碼系統(tǒng)、設計中的分區(qū)標題問題、特權塊呵護故障(DoPrivilege)、災害性安然故障(脆弱性)、類別安然混合弊端、不服安的審計、破壞或不合邏輯的拜候節(jié)制(收集層上的RBAC)、編制籠蓋標題問題(子類標題問題)、對不該信賴的組件賜與太多信賴(客戶端)。(關于這些標題問題標更多信息,請參閱McGraw的《呵護Java》一書)。
缺點標題問題與縫隙一樣常見。事實上,大年夜大都研究表白,縫隙和缺點各占50%。當然,本文中我們會商的是這二者的統(tǒng)一體。還有一些毒手的環(huán)境可能被同時回類為縫隙和缺點,這就取決于你若何對待它??墒?,在一般環(huán)境下,進修辨別縫隙和缺點對你很成心義。