本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種源代碼安全漏洞的檢測方法及系統(tǒng)。
背景技術(shù):
軟件漏洞是當(dāng)今信息系統(tǒng)絕大多數(shù)安全漏洞的來源。軟件漏洞是軟件中存在的一些缺陷,這些缺陷可以被第三方或程序利用來進(jìn)行未經(jīng)授權(quán)的資源訪問,或改變控制權(quán)限來執(zhí)行其他操作。軟件漏洞輕則造成相應(yīng)的經(jīng)濟(jì)或財(cái)產(chǎn)損失(如敏感信息被盜,不可用的服務(wù)),重則導(dǎo)致嚴(yán)重的災(zāi)難,尤其是發(fā)生在被人類生活和生計(jì)所依賴的關(guān)鍵基礎(chǔ)設(shè)施的軟件系統(tǒng)上(如核,生物,化學(xué)實(shí)驗(yàn)室,電網(wǎng),水處理和分配系統(tǒng),空中交通控制和交通信號系統(tǒng))。
與代碼審計(jì)有關(guān)的前期工作多聚焦于緩沖區(qū)溢出漏洞。d.wagner等提出了一種用于發(fā)現(xiàn)c語言代碼中潛在緩沖區(qū)溢出的關(guān)鍵安全性問題的方法。該方法將緩沖區(qū)溢出檢測轉(zhuǎn)化為一個整數(shù)約束問題,并使用一些簡單的圖論技術(shù)構(gòu)建了一個整數(shù)約束求解的有效算法。最后利用安全知識設(shè)計(jì)一個可以捕捉有可能會在實(shí)際程序中出現(xiàn)的安全相關(guān)性漏洞的啟發(fā)式。vinodganapathy等提出了一種將c字符的操作建模為一種線性規(guī)劃,并根據(jù)線性規(guī)劃的相關(guān)文獻(xiàn)來確定緩沖區(qū)范圍的方法,來了解并消除源代碼中存在的緩沖區(qū)溢出漏洞。
代碼安全審查的對象是實(shí)踐于應(yīng)用中的源代碼。這些審計(jì)的主要目的是發(fā)現(xiàn)安全漏洞和缺陷,然后準(zhǔn)確地識別與修復(fù)。事實(shí)上,安全漏洞的概念被引入到軟件主要是由于大多數(shù)軟件及其功能無法在未知情況下保持正常運(yùn)行。一般來說,攻擊者有兩個渠道來利用軟件的缺陷:一是通過軟件的輸入;二是通過軟件與其他應(yīng)用層實(shí)例之間的接口。
幾乎所有的可利用安全漏洞都可以被用于執(zhí)行非預(yù)期的操作,特殊的輸入、接口或環(huán)境入口會觸發(fā)這些安全漏洞從而對系統(tǒng)造成破壞。例如,黑客總是構(gòu)造一些精心設(shè)計(jì)的字符串作為應(yīng)用程序的輸入來使其崩潰,或改變它的控制流來做其他惡意操作(如拒絕服務(wù)攻擊,sql注入和跨站點(diǎn)腳本攻擊)??衫冒踩┒纯偸桥c外部輸入、接口或其他環(huán)境入口相關(guān)。
但是,現(xiàn)有技術(shù)中檢測攻擊者無法通過輸入操作、接口或者其他環(huán)境條件進(jìn)入的不可利用性安全流量,從而可以減少源代碼審計(jì)分析的開銷,尤其是對于大型應(yīng)用程序。
技術(shù)實(shí)現(xiàn)要素:
有鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明所要解決的技術(shù)問題是提供一種源代碼安全漏洞的檢測方法及系統(tǒng),所描述的方法可以大大降低誤報(bào)率,并且提供了一種有效的、僅通過檢測可利用的安全流量對源碼進(jìn)行自動化安全審計(jì)的解決方案。這種方法避免了檢測攻擊者無法通過輸入操作、接口或者其他環(huán)境條件進(jìn)入的不可利用性安全流量,從而可以減少源代碼審計(jì)分析的開銷,尤其是對于大型應(yīng)用程序。基于參考樹的fsr信息,該方法也可以對修改有漏洞的源碼提供精確的指導(dǎo)。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種源代碼安全漏洞的檢測方法,其特征在于,所述方法包括:
檢測和定位源代碼中所有的操作入口;
分析每個操作入口,建立參照樹,記錄安全信息,作為安全屬性;
遍歷參考樹,利用安全屬性來檢查是否有可利用安全漏洞的存在;
根據(jù)檢測到的安全漏洞來產(chǎn)生告警提示和修正建議。
上述的一種源代碼安全漏洞的檢測方法,其特征在于:所述操作入口包括但不限于用戶輸入、網(wǎng)絡(luò)輸入項(xiàng)、i/o輸入項(xiàng)。
上述的一種源代碼安全漏洞的檢測方法,其特征在于:所述源代碼包括c、c++、c#、java和perl的主流開發(fā)語言。
上述的一種源代碼安全漏洞的檢測方法,其特征在于:所述安全屬性為程式化安全規(guī)則fsr,包括但不限于正則表達(dá)式、acl。
上述的一種源代碼安全漏洞的檢測方法,其特征在于:所述利用安全屬性來檢查是否有可利用安全漏洞的存在包括:檢查參考樹的父親節(jié)點(diǎn)的fsr和孩子節(jié)點(diǎn)的fsr之間是否存在矛盾。
一種源代碼安全漏洞的檢測系統(tǒng),其特征在于,所述系統(tǒng)包括:
操作入口定位器,用于檢測和定位源代碼中所有的操作入口;
解析引擎模塊,用于分析每個操作入口建立參照樹;
漏洞檢測器,用于遍歷參考樹,利用安全屬性來檢查是否有可利用安全漏洞的存在;
告警修復(fù)生成器,用于根據(jù)檢測到的安全漏洞來產(chǎn)生告警提示和修正建議。
上述的一種源代碼安全漏洞的檢測系統(tǒng),其特征在于:所述操作入口定位器搜索外部輸入的api。
上述的一種源代碼安全漏洞的檢測系統(tǒng),其特征在于:所述解析引擎模塊在句法分析中自動分配一些fsr規(guī)則。
上述的一種源代碼安全漏洞的檢測系統(tǒng),其特征在于:所述外部輸入包括但不限于scanf輸入、getchar輸入、getwindowstext輸入、socket輸入。
本發(fā)明的有益效果是:
本發(fā)明中所描述的方法可以大大降低誤報(bào)率,并且提供了一種有效的、僅通過檢測可利用的安全流量對源碼進(jìn)行自動化安全審計(jì)的解決方案。這種方法避免了檢測攻擊者無法通過輸入操作、接口或者其他環(huán)境條件進(jìn)入的不可利用性安全流量,從而可以減少源代碼審計(jì)分析的開銷,尤其是對于大型應(yīng)用程序。基于參考樹的fsr信息,該方法也可以對修改有漏洞的源碼提供精確的指導(dǎo)。
以下將結(jié)合附圖對本發(fā)明的構(gòu)思、具體結(jié)構(gòu)及產(chǎn)生的技術(shù)效果作進(jìn)一步說明,以充分地了解本發(fā)明的目的、特征和效果。
附圖說明
圖1是本發(fā)明的一種源代碼安全漏洞的檢測方法流程圖。
圖2是本發(fā)明的一種源代碼安全漏洞的檢測系統(tǒng)結(jié)構(gòu)框圖。
圖3是本發(fā)明的檢測緩沖區(qū)溢出漏洞的參考樹示意圖。
具體實(shí)施方式
如圖1所示,一種源代碼安全漏洞的檢測方法,所述方法包括:
101、檢測和定位源代碼中所有的操作入口;
102、分析每個操作入口,建立參照樹,記錄安全信息,作為安全屬性;
103、遍歷參考樹,利用安全屬性來檢查是否有可利用安全漏洞的存在;
104、根據(jù)檢測到的安全漏洞來產(chǎn)生告警提示和修正建議。
優(yōu)選的,所述操作入口包括但不限于用戶輸入、網(wǎng)絡(luò)輸入項(xiàng)、i/o輸入項(xiàng)。而可以用來檢測這些操作入口的方法是找到所有用于獲取外界輸入、用于與接口和其他環(huán)境入口做交互的api。
優(yōu)選的,所述源代碼包括c、c++、c#、java和perl的主流開發(fā)語言。
優(yōu)選的,所述安全屬性為程式化安全規(guī)則fsr,包括但不限于正則表達(dá)式、acl。每個引用或引申的參考項(xiàng)可以追溯到的節(jié)點(diǎn)應(yīng)該包含在樹中。記錄和保持原有的安全屬性對進(jìn)一步操作參考樹來說是十分必要的。fsr可以定義不同樹的安全性能,它是一種可被機(jī)器識別的自動處理過程。
優(yōu)選的,所述利用安全屬性來檢查是否有可利用安全漏洞的存在包括:檢查參考樹的父親節(jié)點(diǎn)的fsr和孩子節(jié)點(diǎn)的fsr之間是否存在矛盾。
如圖2所示,一種源代碼安全漏洞的檢測系統(tǒng),所述系統(tǒng)包括:
操作入口定位器201,用于檢測和定位源代碼中所有的操作入口;
解析引擎模塊202,用于分析每個操作入口建立參照樹;
漏洞檢測器203,用于遍歷參考樹,利用安全屬性來檢查是否有可利用安全漏洞的存在;
告警修復(fù)生成器204,用于根據(jù)檢測到的安全漏洞來產(chǎn)生告警提示和修正建議。
優(yōu)選的,所述操作入口定位器搜索外部輸入的api。
優(yōu)選的,所述解析引擎模塊在句法分析中自動分配一些fsr規(guī)則。解析引擎利用的是編譯器技術(shù),它可以找到所有可以追溯到操作入口的代碼塊。它可以在句法分析中自動分配一些fsr規(guī)則。最后,該引擎將產(chǎn)生源代碼參考樹。
優(yōu)選的,所述外部輸入包括但不限于scanf輸入、getchar輸入、getwindowstext輸入、socket輸入。
以下給出本發(fā)明的幾種具體應(yīng)用情景:
情景一:緩沖區(qū)溢出漏洞
一般來說,當(dāng)一個數(shù)據(jù)塊b寫入緩沖器a時,若b的大小大于a的合法分配的大小就會發(fā)生緩沖區(qū)溢出。緩沖器溢出的另一種形式是整數(shù)溢出,這是程序的一種潛在問題,即程序中保存的數(shù)據(jù)大小是通過以字節(jié)為單位的數(shù)據(jù)類型限制的。在這里指定fsr的格式為{fsr:“{length}$”}。
圖3為通過解析引擎建立的一棵參考樹。所有節(jié)點(diǎn)都將被編號為n.n,這體現(xiàn)了父節(jié)點(diǎn)和子節(jié)點(diǎn)之間的關(guān)系。同時,該節(jié)點(diǎn)的fsr和位置信息也將被記錄下來。安全性分析模塊將通過檢查每個子節(jié)點(diǎn)的fsr是否與其父節(jié)點(diǎn)一致來處理參考樹。一種解決方案是從參考書中的葉節(jié)點(diǎn)開始遍歷,比較它們與父節(jié)點(diǎn)的fsr。在圖3中,節(jié)點(diǎn)1.2有兩個子節(jié)點(diǎn),子節(jié)點(diǎn)1.2.1和1.2.2,他們允許的最大緩沖區(qū)長度為30和20。因?yàn)樗鼈兊母腹?jié)點(diǎn)(節(jié)點(diǎn)1.2)的允許長度為50,所以當(dāng)子節(jié)點(diǎn)到父節(jié)點(diǎn)之間可能會發(fā)生溢出。于是在這里發(fā)現(xiàn)了一個安全漏洞,系統(tǒng)的告警和修復(fù)模塊會產(chǎn)生警告,并將產(chǎn)生相關(guān)修復(fù)建議如“建議修改節(jié)點(diǎn)1.2的最大緩沖區(qū)長度為20”。
情景二:特權(quán)提升漏洞
特權(quán)提升漏洞允許攻擊者或代碼獲取其本不應(yīng)有的更高水平的權(quán)限。這里的特權(quán)可能不僅代表用戶(如管理員,超級用戶或訪客)的特權(quán),也代表代碼(如內(nèi)核或用戶模式)的特權(quán)。因此,可以使用訪問控制列表(acl)來分類處理這樣的漏洞。
情景三:信息泄露或數(shù)據(jù)篡改漏洞
信息泄露和數(shù)據(jù)篡改漏洞允許非法用戶或代碼修改系統(tǒng)內(nèi)的數(shù)據(jù),以實(shí)現(xiàn)惡意攻擊或?qū)⑹鼙Wo(hù)的數(shù)據(jù)暴露給到?jīng)]有權(quán)限訪問該數(shù)據(jù)的用戶。對于這些漏洞的fsr規(guī)則也在acl中有描述。
綜上,本發(fā)明中所描述的方法可以大大降低誤報(bào)率,并且提供了一種有效的、僅通過檢測可利用的安全流量對源碼進(jìn)行自動化安全審計(jì)的解決方案。這種方法避免了檢測攻擊者無法通過輸入操作、接口或者其他環(huán)境條件進(jìn)入的不可利用性安全流量,從而可以減少源代碼審計(jì)分析的開銷,尤其是對于大型應(yīng)用程序?;趨⒖紭涞膄sr信息,該方法也可以對修改有漏洞的源碼提供精確的指導(dǎo)。
以上詳細(xì)描述了本發(fā)明的較佳具體實(shí)施例。應(yīng)當(dāng)理解,本領(lǐng)域的普通技術(shù)人員無需創(chuàng)造性勞動就可以根據(jù)本發(fā)明的構(gòu)思做出諸多修改和變化。因此,凡本技術(shù)領(lǐng)域中技術(shù)人員依本發(fā)明的構(gòu)思在現(xiàn)有技術(shù)的基礎(chǔ)上通過邏輯分析、推理或者有限的實(shí)驗(yàn)可以得到的技術(shù)方案,皆應(yīng)在由權(quán)利要求書所確定的保護(hù)范圍內(nèi)。