亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種高效檢測源代碼安全漏洞的代碼審查方法

        2015-03-31 19:07:31周誠等
        現(xiàn)代電子技術(shù) 2015年5期

        周誠等

        摘 要: 目前代碼安全審查和白盒安全測試被廣泛用于分析源代碼并檢測安全漏洞。這里描述一種基于安全特性參照樹的更高效的代碼安全審查方法,其中安全特性提取于源代碼中所有可操作的內(nèi)容。這種方法只在源代碼層面進行安全檢查,可以大大減少錯誤代碼行為,并為自動化安全審查提供了有效的解決方案。

        關(guān)鍵詞: 代碼安全檢測; 漏洞檢測; 代碼審查; 參考樹

        中圖分類號: TN915.08?34; TP393 文獻標(biāo)識碼: A 文章編號: 1004?373X(2015)05?0083?04

        An efficient code audit method to detect source code security vulnerability

        ZHOU Cheng, ZHANG Tao, MA Yuan?yuan, LI Wei?wei

        (Nanjing Branch, China Electric Power Research Institute, Nanjing 211100, China)

        Abstract: The code security audit and white box security testing is widely used to analyze source code and detect security vulnerabilities. In this paper, a more efficient code audit method based on security feature reference tree is described, in which security features are extracted from all operable contents in the source code. This method only checks the security in the source code. It can greatly reduce the error code behavior and provide an effective solution for automate security audit.

        Keywords: code safety detection; vulnerability detection; code audit; reference tree

        0 引 言

        軟件漏洞是當(dāng)今信息系統(tǒng)絕大多數(shù)安全漏洞的來源。軟件漏洞是軟件中存在的一些缺陷,這些缺陷可以被第三方或程序利用來進行未經(jīng)授權(quán)的資源訪問,或改變控制權(quán)限來執(zhí)行其他操作。軟件漏洞輕則造成相應(yīng)的經(jīng)濟或財產(chǎn)損失(如敏感信息被盜,不可用的服務(wù)),重則導(dǎo)致嚴(yán)重的災(zāi)難,尤其是發(fā)生在被人類生活和生計所依賴的關(guān)鍵基礎(chǔ)設(shè)施的軟件系統(tǒng)上(如核,生物,化學(xué)實驗室,電網(wǎng),水處理和分配系統(tǒng),空中交通控制和交通信號系統(tǒng))。

        與代碼審計有關(guān)的前期工作[1?5]多聚焦于緩沖區(qū)溢出漏洞。D.Wagner等提出了一種用于發(fā)現(xiàn)C語言代碼中潛在緩沖區(qū)溢出的關(guān)鍵安全性問題的方法[6]。該方法將緩沖區(qū)溢出檢測轉(zhuǎn)化為一個整數(shù)約束問題,并使用一些簡單的圖論技術(shù)構(gòu)建了一個整數(shù)約束求解的有效算法。最后利用安全知識設(shè)計一個可以捕捉有可能會在實際程序中出現(xiàn)的安全相關(guān)性漏洞的啟發(fā)式。Vinod Ganapathy等提出了一種將C字符的操作建模為一種線性規(guī)劃,并根據(jù)線性規(guī)劃的相關(guān)文獻來確定緩沖區(qū)范圍的方法[7],來了解并消除源代碼中存在的緩沖區(qū)溢出漏洞。

        1 源代碼安全漏洞的檢測過程

        代碼安全審查的對象是實踐于應(yīng)用中的源代碼。這些審計的主要目的是發(fā)現(xiàn)安全漏洞和缺陷,然后準(zhǔn)確地識別與修復(fù)。事實上,安全漏洞的概念被引入到軟件主要是由于大多數(shù)軟件及其功能無法在未知情況下保持正常運行。一般來說,攻擊者有兩個渠道來利用軟件的缺陷:一是通過軟件的輸入;二是通過軟件與其他應(yīng)用層實例之間的接口。

        幾乎所有的可利用安全漏洞都可以被用于執(zhí)行非預(yù)期的操作,特殊的輸入、接口或環(huán)境入口會觸發(fā)這些安全漏洞從而對系統(tǒng)造成破壞。例如,黑客總是構(gòu)造一些精心設(shè)計的字符串作為應(yīng)用程序的輸入來使其崩潰,或改變它的控制流來做其他惡意操作(如拒絕服務(wù)攻擊,SQL注入和跨站點腳本攻擊)??衫冒踩┒纯偸桥c外部輸入、接口或其他環(huán)境入口相關(guān),所以檢測到它們最有效的方式是從外部對操作入口進行性跟蹤(如本地輸入、網(wǎng)絡(luò)輸入、臨時文件或其他輸入,接口或其他環(huán)境入口,等),通過此方法找到所有可利用安全漏洞。檢測源代碼安全漏洞過程如圖1所示。

        第一步,檢測和定位源代碼中所有的操作入口。這些操作入口包括但不限于用戶輸入,網(wǎng)絡(luò)輸入項,I/O輸入項等。而可以用來檢測這些操作入口的方法是找到所有用于獲取外界輸入、用于與接口和其他環(huán)境入口做交互的API(Application Programming Interface,應(yīng)用程序編程接口)。

        第二步,為每個在第一步中定位的操作入口建立一個參考樹。每個引用或引申的參考項可以追溯到的節(jié)點應(yīng)該包含在樹中。記錄和保持原有的安全屬性對進一步操作參考樹來說是十分必要的,其中安全屬性指的是程式化安全規(guī)則(FSR)。FSR可以定義不同樹的安全性能,它是一種可被機器識別的自動處理過程。FSR包括但不限于正則表達(dá)式,ACL,等。

        第三步,對參考樹的遍歷,即遍歷樹的節(jié)點,利用安全屬性來檢查是否有可利用安全漏洞的存在。該安全漏洞檢測方法可以是但不限于,檢查父親的FSR和孩子的FSR之間的矛盾等。

        第四步,根據(jù)在第三步檢測到的安全漏洞來產(chǎn)生告警提示,并提供基于第三步分析的修正建議。

        最后,開發(fā)人員可以在建議的基礎(chǔ)上修改其源代碼,并再次執(zhí)行此過程,以保證修正過程中不會引入任何新的漏洞。

        2 一種高效檢測源代碼安全漏洞的代碼審查方法

        一種高效檢測源代碼安全漏洞的代碼審查方法總共包括四個模塊:操作入口定位器,解析引擎,漏洞檢測器和告警修復(fù)模塊,系統(tǒng)結(jié)構(gòu)如圖2所示。

        (1) 操作入口定位器

        操作入口定位器可以實現(xiàn)(但不限于)通過搜索所有用于接收諸如scanf(),getchar(),getwindowstext,socket輸入等外部輸入的API(不同的程序語言可能有不同的API)。

        (2) 解析引擎

        解析引擎利用的是編譯器技術(shù),它可以找到所有可以追溯到操作入口的代碼塊。它可以在句法分析中自動分配一些FSR規(guī)則。最后,該引擎將產(chǎn)生源代碼參考樹,如圖3所示。

        (3) 漏洞檢測器

        漏洞檢測器將根據(jù)源代碼參考樹進行處理。它會對參考樹節(jié)點的FSR進行檢查,分析是否有任何安全漏洞。

        (4) 告警修復(fù)

        告警修復(fù)模塊將提供安全漏洞的警告信息,以及修復(fù)被探測器探測到的安全漏洞的建議。分析模塊將從根節(jié)點開始遍歷參考樹,并與每個節(jié)點的孩子節(jié)點比較FSR。當(dāng)它檢測到任何安全漏洞,分析模塊會產(chǎn)生警告,并給出修復(fù)建議。用于實施該方法的偽代碼如下:

        BuildTree(Father)

        {

        Searching Relevant Child

        For Each Relevant Child

        {

        Generate Its Formulated Security Restriction(FSR);

        Record Its FSR and Position Info;

        Insert It into the Tree as Child?Node of Father;

        BuildTree(ThisChild);

        }

        }

        Main( )

        {

        Searching All Manipulable Entries

        For Each Entry

        {

        Generate Its Formulated Security Restriction(FSR);

        Record Its FSR and Position Info;

        Insert It into the Tree as Root of Father;

        BuildTree(ThisEntry);

        }

        For Each Built Tree

        {

        Post?order Traversal All Nodes of Tree from LeafNode;

        Detect Where Child.FSR is Stricter than Father.FSR;

        Generate Warning;

        Indicate Suggested Father.FSR to Follow Strictest Child.FSR;

        }

        For Each Entry

        {

        Post?order Traversal All Nodes of Tree from Root;

        Detect Where Child.FSR is Stricter than Father.FSR;

        Generate Warning;

        Indicate Suggested Those Child.FSR to Follow Father.FSR;

        }

        }

        3 應(yīng) 用

        3.1 情景一:代碼注入漏洞

        代碼注入指的是外部代碼被直接插入到程序或腳本中被執(zhí)行。一般可執(zhí)行代碼被注入前先插入到非可執(zhí)行的文本串中,然后再提交給應(yīng)用程序,

        代碼注入是通過在本應(yīng)該不可執(zhí)行的文本字符串中嵌入可執(zhí)行代碼引起的。有兩種方法來定義的FSR:一個是定義的字符串的屬性為非可執(zhí)行;另一種方法是指出不應(yīng)該包含在文本中的字符串,包括任何可執(zhí)行的“關(guān)鍵字”,或表達(dá)式中的字符串(如腳本標(biāo)簽出現(xiàn),或SQL請求中出現(xiàn)單引號?(′)或雙破折號(——))。在這里,選擇了第二種方法,其可以指定FSR的格式為[FSR:限制規(guī)則]。

        內(nèi)容限制可以通過正則表達(dá)式來執(zhí)行。例如,“^.$”可以表示所有可能的字符串,這可以表示所有外部原始輸入。在將外部輸入命令轉(zhuǎn)化為SQL查詢命令時,可以設(shè)定此內(nèi)容限制,即不包含SQL特定字符,具體命令格式如下:

        圖4所示的是通過解析引擎建立的參考樹。所有節(jié)點都將被編號為n.n,這體現(xiàn)了父節(jié)點和子節(jié)點之間的關(guān)系。同時,該節(jié)點的FSR和位置信息也將被記錄下來。安全性分析模塊將通過檢查每個子節(jié)點的FSR是否與其父節(jié)點一致來處理參考樹。一種解決方案是從參考書中的葉節(jié)點開始遍歷,比較它們與父節(jié)點的FSR。例如,在圖3中,節(jié)點1.2.2是一個節(jié)點1.2的子節(jié)點,其FSR中的“的”意味著不應(yīng)該包含任何SQL相關(guān)的特定字符,但它的父節(jié)點(節(jié)點1.2)的FSR為“”,這意味著它可能包含所有可能的字符,包括SQL相關(guān)的特定字符。所以在這里發(fā)現(xiàn)了一個安全漏洞,系統(tǒng)的告警和修復(fù)模塊會產(chǎn)生警告,并產(chǎn)生諸如“節(jié)點1.2需添加字符串驗證”這樣的修復(fù)建議。

        3.2 情景二:緩沖區(qū)溢出漏洞

        一般來說,當(dāng)一個數(shù)據(jù)塊B寫入緩沖器A時,若B的大小大于A的合法分配的大小就會發(fā)生緩沖區(qū)溢出。緩沖器溢出的另一種形式是整數(shù)溢出,這是程序的一種潛在問題,即程序中保存的數(shù)據(jù)大小是通過以字節(jié)為單位的數(shù)據(jù)類型限制的。在這里指定FSR的格式為{FSR:."^{length}$"}。

        圖5展示了它通過解析引擎建立的一棵參考樹。所有節(jié)點都將被編號為n.n,這體現(xiàn)了父節(jié)點和子節(jié)點之間的關(guān)系。同時,該節(jié)點的FSR和位置信息也將被記錄下來。安全性分析模塊將通過檢查每個子節(jié)點的FSR是否與其父節(jié)點一致來處理參考樹。一種解決方案是從參考書中的葉節(jié)點開始遍歷,比較它們與父節(jié)點的FSR。例如,在圖6中,節(jié)點1.2有兩個子節(jié)點,子節(jié)點1.2.1和1.2.2,他們允許的最大緩沖區(qū)長度為30和20。因為它們的父節(jié)點(節(jié)點1.2)的允許長度為50,所以當(dāng)子節(jié)點到父節(jié)點之間可能會發(fā)生溢出。于是在這里發(fā)現(xiàn)了一個安全漏洞,系統(tǒng)的告警和修復(fù)模塊會產(chǎn)生警告,并產(chǎn)生相關(guān)修復(fù)建議如“建議修改節(jié)點1.2的最大緩沖區(qū)長度為20”,如圖6所示。

        3.3 情景三:特權(quán)提升漏洞

        特權(quán)提升漏洞允許攻擊者或代碼獲取其本不應(yīng)有的更高水平的權(quán)限。這里的特權(quán)可能不僅代表用戶(如管理員,超級用戶或訪客)的特權(quán),也代表代碼(如內(nèi)核或用戶模式)的特權(quán)。因此,可以使用訪問控制列表(ACL)來分類處理這樣的的漏洞。

        3.4 情景四:信息泄露或數(shù)據(jù)篡改漏洞

        信息泄露和數(shù)據(jù)篡改漏洞允許非法用戶或代碼修改系統(tǒng)內(nèi)的數(shù)據(jù),以實現(xiàn)惡意攻擊或?qū)⑹鼙Wo的數(shù)據(jù)暴露給到?jīng)]有權(quán)限訪問該數(shù)據(jù)的用戶。對于這些漏洞的FSR規(guī)則也在ACL中有描述。

        4 結(jié) 語

        本文中所描述的方法可以大大降低誤報率,并且提供了一種有效的、僅通過檢測可利用的安全流量對源碼進行自動化安全審計的解決方案。這種方法避免了檢測攻擊者無法通過輸入操作、接口或者其他環(huán)境條件進入的不可利用性安全流量,從而可以減少源代碼審計分析的開銷,尤其是對于大型應(yīng)用程序?;趨⒖紭涞腇SR信息,該方法也可以對修改有漏洞的源碼提供精確的指導(dǎo)。

        參考文獻

        [1] 徐有福,文偉平,萬正蘇.基于漏洞模型檢測的安全漏洞挖掘方法研究[J].信息網(wǎng)絡(luò)安全,2011(8):72?75.

        [2] DHURJATI D, ADVE V S. Backwards?compatible array bounds checking for C with very low overhead [C]// Proceedings of the 28th International Conference on Software Engineering. Shanghai, China: [s.n.], 2006: 162?171.

        [3] 趙國亮,蔣勇,孔令兵.用代碼分析技術(shù)檢測軟件缺陷[J].計算機工程與設(shè)計,2011(8):2741?2744.

        [4] 戴凌宸,張朕榮,黎豐澤.傳統(tǒng)的軟件測試方法淺析[J].科技風(fēng),2011(16):53?55.

        [5] 陳曉芳.幾種常見軟件可靠性測試方法綜述及應(yīng)用對比[J].科技信息,2007(17):6?8.

        [6] 董潔,孫惠娟.軟件測試方法及面向?qū)ο筌浖臏y試[J].河南科技,2011(17):22?23.

        [7] WAGNER D, FOSTER J, BREWER E, et al. A first step towards automated detection of buffer overrun vulnerabilities [C]// Proceedings of ISOC Network and Distributed System Security Symposium. [S.l.]: ISOC, 2000: 1?15.

        [8] GANAPATHY Vinod, JHA Somesh, CHANDLER David, et al. Buffer overrun detection using linear programming and static analysis [C]// 10th ACM Conference on Computer and Communications Security. [S.l.]: ACM, 2003: 1?19.

        中文字幕无码免费久久9一区9| 伊人久久大香线蕉av不卡| 日本少妇被黑人xxxxx| 亚洲成AⅤ人在线观看无码| av无码久久久久久不卡网站 | 免青青草免费观看视频在线| 色偷偷av一区二区三区人妖| 最新69国产精品视频| 国产免费三级av在线| 在线看片免费人成视频久网下载 | 九九九免费观看视频| 中文无码一区二区不卡av| 麻豆AⅤ无码不卡| 成在线人视频免费视频| 免费看黄片视频在线观看| 豆国产96在线 | 亚洲| 2019最新国产不卡a| 精品欧洲AV无码一区二区免费| av免费观看在线网站| 日本h片中文字幕在线| 白又丰满大屁股bbbbb| 日本口爆吞精在线视频| 熟女免费观看一区二区| 丰满少妇a级毛片| 丰满少妇大力进入av亚洲| 亚洲中文字幕巨乳人妻| 亚洲国产最新免费av| 欲香欲色天天天综合和网| 无遮无挡爽爽免费视频| 亚州毛色毛片免费观看| 美女与黑人巨大进入免费观看| 免费观看羞羞视频网站| 99视频这里有精品| 少妇隔壁人妻中文字幕| 日本一二三四高清在线| 无码熟妇人妻av影音先锋| 一个人看的www免费视频中文| 在线观看免费人成视频国产| 成人av资源在线播放| 中文有码无码人妻在线| 国产成人久久777777|