de_var_2 - node_var_3。
[0047] 更優(yōu)選地,檢測(cè)裝置還可提示與該敏感路徑信息對(duì)應(yīng)的其他信息,例如,各個(gè)節(jié)點(diǎn) 分別所屬的函數(shù)名稱(chēng)等。
[0048] 根據(jù)本發(fā)明的方法,通過(guò)基于賦值操作等方式的分析,來(lái)建立基于數(shù)據(jù)的依賴(lài)關(guān) 系的敏感路徑信息,從而能夠降低對(duì)于漏洞的誤報(bào)率,并且能夠提升所獲得的敏感路徑的 完整度,提高漏洞檢測(cè)的全面性。
[0049] 根據(jù)本發(fā)明的一個(gè)優(yōu)選方案,對(duì)于所述抽象語(yǔ)法樹(shù)中與源代碼的分支語(yǔ)句,檢測(cè) 裝置分別基于該分支語(yǔ)句的每一分支執(zhí)行步驟a至b。
[0050] 其中,所述分支語(yǔ)句包括至少包括兩個(gè)并行分支的語(yǔ)句,例如,if else條件語(yǔ)句, 又例如,switch語(yǔ)句等。
[0051] 根據(jù)本發(fā)明的第二示例,檢測(cè)裝置已經(jīng)通過(guò)重復(fù)執(zhí)行步驟S2和步驟S3,查找并 記錄到從敏感節(jié)點(diǎn)node_var_4到當(dāng)前的初始節(jié)點(diǎn)node_var_5的這一路徑信息node_ var_4 - node_Var_5,接著,檢測(cè)裝置再次執(zhí)行步驟S2,沿著抽象語(yǔ)法樹(shù)查找到用于對(duì)參數(shù) var_4進(jìn)行賦值的參數(shù)var_6,并將該參數(shù)var_6對(duì)應(yīng)的節(jié)點(diǎn)node_var_6作為當(dāng)前的初始 節(jié)點(diǎn)node_var_5的子節(jié)點(diǎn),并記錄從node_var_6到敏感節(jié)點(diǎn)node_var_4的這一路徑信息 node_var_4 - node_var_5 - node_var_6。并且,檢測(cè)裝置確定var6為以下分支語(yǔ)句中的 一個(gè)if語(yǔ)句的分支:
[0052] if (term a) {var_5 = var_6 ;}
[0053] else{var_5 =var_7 ;}
[0054] 則檢測(cè)裝置獲取抽象語(yǔ)法樹(shù)中,與if語(yǔ)句分支對(duì)應(yīng)的else語(yǔ)句中的參數(shù)var_7 對(duì)應(yīng)的節(jié)點(diǎn)node_var_7,作為與當(dāng)前初始節(jié)點(diǎn)node_var_5的另一子節(jié)點(diǎn),并記錄從node_ var_7 到敏感節(jié)點(diǎn) node_var_4 的這一路徑信息 node_var_4 - node_var_5 - node_var_7〇
[0055] 接著,檢測(cè)裝置對(duì)于if語(yǔ)句分支,以節(jié)點(diǎn)node_var_6作為新的初始節(jié)點(diǎn)重復(fù)執(zhí)行 步驟S2和步驟S3,對(duì)于else語(yǔ)句分支,以節(jié)點(diǎn)node_var_7,作為新的初始節(jié)點(diǎn),重復(fù)執(zhí)行 步驟S2和步驟S3。
[0056] 根據(jù)本發(fā)明的又一個(gè)優(yōu)選方案,對(duì)于所述抽象語(yǔ)法樹(shù)中的循環(huán)語(yǔ)句,檢測(cè)裝置基 于當(dāng)前的初始節(jié)點(diǎn),在當(dāng)前循環(huán)條件下執(zhí)行步驟S2至步驟S3。
[0057] 根據(jù)本發(fā)明的第三示例,當(dāng)前的初始節(jié)點(diǎn)為與參數(shù)var_8對(duì)應(yīng)的節(jié)點(diǎn)node_ var_8,接著,檢測(cè)裝置在步驟S2中,從抽象語(yǔ)法樹(shù)中查找到與下述while循環(huán)的賦值語(yǔ)句 中參數(shù)var_9對(duì)應(yīng)的節(jié)點(diǎn)node_var_9,并將該節(jié)點(diǎn)node_var_9作為初始節(jié)點(diǎn)node_var_8 的子節(jié)點(diǎn),接著,檢測(cè)裝置繼續(xù)查找抽象語(yǔ)法樹(shù)中其他語(yǔ)句對(duì)應(yīng)的節(jié)點(diǎn)中與參數(shù)var_9具 有依賴(lài)關(guān)系的參數(shù),而無(wú)需通過(guò)控制while語(yǔ)句的循環(huán)變量a的改變進(jìn)而重復(fù)獲取該while 語(yǔ)句中的參數(shù)var_9。
【主權(quán)項(xiàng)】
1. 一種檢測(cè)源代碼漏洞的方法,其中,所述方法包括以下步驟: X基于與所述源代碼對(duì)應(yīng)的抽象語(yǔ)法樹(shù),確定所述抽象語(yǔ)法樹(shù)中的一個(gè)或多個(gè)敏感節(jié) 點(diǎn),以將敏感節(jié)點(diǎn)作為初始節(jié)點(diǎn),其中,所述敏感節(jié)點(diǎn)對(duì)應(yīng)于所述源代碼中的敏感函數(shù)的參 數(shù)信息; 其中,所述方法還包括以下步驟: a基于所述抽象語(yǔ)法樹(shù),查找與所述初始節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)信息具有依賴(lài)關(guān)系的依賴(lài)節(jié) 點(diǎn),以將所述依賴(lài)節(jié)點(diǎn)作為所述初始節(jié)點(diǎn)的子節(jié)點(diǎn); b當(dāng)所述依賴(lài)節(jié)點(diǎn)不對(duì)應(yīng)用戶(hù)輸入信息時(shí),將該依賴(lài)節(jié)點(diǎn)作為新的初始節(jié)點(diǎn),并重復(fù)前 述步驟a和b。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述步驟a進(jìn)一步包括以下步驟: _基于所述抽象語(yǔ)法樹(shù),查找用于對(duì)所述初始節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)信息進(jìn)行賦值的賦值信 息,以將所述賦值信息對(duì)應(yīng)的節(jié)點(diǎn)作為依賴(lài)節(jié)點(diǎn)。
3. 根據(jù)權(quán)利要求1或2所述的方法,其中,所述方法還包括以下步驟: -所述依賴(lài)節(jié)點(diǎn)對(duì)應(yīng)于用戶(hù)輸入信息時(shí),記錄該依賴(lài)節(jié)點(diǎn)到其對(duì)應(yīng)的敏感節(jié)點(diǎn)的敏感 路徑信息。
4. 根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的方法,其中,對(duì)于所述抽象語(yǔ)法樹(shù)中的分支語(yǔ) 句,所述方法進(jìn)一步包括: -對(duì)分支語(yǔ)句的每一分支,分別執(zhí)行步驟a至b。
5. 根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其中,對(duì)于所述抽象語(yǔ)法樹(shù)中的循環(huán)語(yǔ) 句,所述方法還包括: _基于當(dāng)前的初始節(jié)點(diǎn),在當(dāng)前循環(huán)條件下執(zhí)行步驟a至b。
6. 根據(jù)權(quán)利要求1至5中任一項(xiàng)所述的方法,其中,所述步驟X進(jìn)一步包括以下步驟: -基于預(yù)定的危險(xiǎn)函數(shù)列表,與抽象語(yǔ)法樹(shù)中的各個(gè)節(jié)點(diǎn)進(jìn)行正則運(yùn)算,以確定所述抽 象語(yǔ)法樹(shù)中各個(gè)節(jié)點(diǎn)是否為敏感節(jié)點(diǎn)。
7. 根據(jù)權(quán)利要求3至5中任一項(xiàng)所述的方法,其中,所述方法還包括以下步驟: -對(duì)于一敏感路徑信息,獲取與該路徑信息對(duì)應(yīng)的敏感函數(shù); -基于預(yù)定安全規(guī)則來(lái)對(duì)所述敏感函數(shù)進(jìn)行驗(yàn)證; -當(dāng)所述敏感函數(shù)符合所述安全規(guī)則時(shí),確定所述敏感路徑信息非漏洞。
8. 根據(jù)權(quán)利要求1至7中任一項(xiàng)所述的方法,其中,將敏感函數(shù)作為初始函數(shù),所述方 法還包括以下步驟: m基于源代碼中的函數(shù)調(diào)用關(guān)系,確定調(diào)用所述初始函數(shù)的一個(gè)或多個(gè)待選函數(shù); n對(duì)所述一個(gè)或多個(gè)待選函數(shù),分別判斷所述一個(gè)或多個(gè)待選函數(shù)中的各個(gè)待選函數(shù) 的參數(shù)信息與所述初始函數(shù)的參數(shù)信息是否存在依賴(lài)關(guān)系; 〇當(dāng)待選函數(shù)的參數(shù)信息與初始函數(shù)的參數(shù)信息存在依賴(lài)關(guān)系時(shí),保存所述待選函數(shù), 并將該待選函數(shù)作為初始函數(shù),重復(fù)執(zhí)行步驟m至〇。
9. 根據(jù)權(quán)利要求8所述的方法,其中,所述方法還包括以下步驟: -基于所保存的待選函數(shù)更新危險(xiǎn)函數(shù)列表。
10. -種檢測(cè)源代碼漏洞的檢測(cè)裝置,其中,所述檢測(cè)裝置包括: 第一確定裝置,用于基于與所述源代碼對(duì)應(yīng)的抽象語(yǔ)法樹(shù),確定所述抽象語(yǔ)法樹(shù)中的 一個(gè)或多個(gè)敏感節(jié)點(diǎn),以將敏感節(jié)點(diǎn)作為初始節(jié)點(diǎn),其中,所述敏感節(jié)點(diǎn)對(duì)應(yīng)于所述源代碼 中的敏感函數(shù)的參數(shù)信息; 其中,所述檢測(cè)裝置還包括: 查找裝置,用于基于所述抽象語(yǔ)法樹(shù),查找與所述初始節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)信息具有依賴(lài) 關(guān)系的依賴(lài)節(jié)點(diǎn),并將所述依賴(lài)節(jié)點(diǎn)作為所述初始節(jié)點(diǎn)的子節(jié)點(diǎn); 第一控制裝置,用于當(dāng)所述依賴(lài)節(jié)點(diǎn)不對(duì)應(yīng)用戶(hù)輸入信息時(shí),將所述子節(jié)點(diǎn)作為新的 初始節(jié)點(diǎn),并重復(fù)查找裝置和第一控制裝置的操作。
11. 根據(jù)權(quán)利要求10所述的檢測(cè)裝置,其中,所述查找裝置進(jìn)一步用于: -基于所述抽象語(yǔ)法樹(shù),查找用于對(duì)所述初始節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)信息進(jìn)行賦值的賦值信 息,以將所述賦值信息對(duì)應(yīng)的節(jié)點(diǎn)作為依賴(lài)節(jié)點(diǎn)。
12. 根據(jù)權(quán)利要求10或11所述的檢測(cè)裝置,其中,所述檢測(cè)裝置還包括: 記錄裝置,用于所述依賴(lài)節(jié)點(diǎn)對(duì)應(yīng)于用戶(hù)輸入信息時(shí),記錄該依賴(lài)節(jié)點(diǎn)到其對(duì)應(yīng)的敏 感節(jié)點(diǎn)的敏感路徑信息。
13. 根據(jù)權(quán)利要求10至12中任一項(xiàng)所述的檢測(cè)裝置,其中,對(duì)于所述抽象語(yǔ)法樹(shù)中的 分支語(yǔ)句,所述檢測(cè)裝置進(jìn)一步用于: -對(duì)分支語(yǔ)句的每一分支,分別執(zhí)行查找裝置和第一控制裝置的操作。
14. 根據(jù)權(quán)利要求10至13中任一項(xiàng)所述的檢測(cè)裝置,其中,對(duì)于所述抽象語(yǔ)法樹(shù)中的 循環(huán)語(yǔ)句,所述檢測(cè)裝置還包括: _基于當(dāng)前的初始節(jié)點(diǎn),在當(dāng)前循環(huán)條件下執(zhí)行查找裝置和第一控制裝置的操作。
15. 根據(jù)權(quán)利要求10至14中任一項(xiàng)所述的檢測(cè)裝置,其中,所述第一確定裝置進(jìn)一步 包括用于: -基于預(yù)定的危險(xiǎn)函數(shù)列表,與抽象語(yǔ)法樹(shù)中的各個(gè)節(jié)點(diǎn)進(jìn)行正則運(yùn)算,以確定所述抽 象語(yǔ)法樹(shù)中各個(gè)節(jié)點(diǎn)是否為敏感節(jié)點(diǎn)。
16. 根據(jù)權(quán)利要求12至15中任一項(xiàng)所述的檢測(cè)裝置,其中,所述檢測(cè)裝置還包括: 獲取裝置,用于對(duì)于一敏感路徑信息,獲取與該路徑信息對(duì)應(yīng)的敏感函數(shù); 驗(yàn)證裝置,用于基于預(yù)定安全規(guī)則來(lái)對(duì)所述敏感函數(shù)進(jìn)行驗(yàn)證; 第二確定裝置,用于當(dāng)所述敏感函數(shù)符合所述安全規(guī)則時(shí),確定所述敏感路徑信息非 漏洞。
17. 根據(jù)權(quán)利要求10至16中任一項(xiàng)所述的檢測(cè)裝置,其中,將敏感函數(shù)作為初始函數(shù), 所述檢測(cè)裝置還包括: 第三確定裝置,用于基于源代碼中的函數(shù)調(diào)用關(guān)系,確定調(diào)用所述初始函數(shù)的一個(gè)或 多個(gè)待選函數(shù); 判斷裝置,用于對(duì)所述一個(gè)或多個(gè)待選函數(shù),分別判斷所述一個(gè)或多個(gè)待選函數(shù)中的 各個(gè)待選函數(shù)的參數(shù)信息與所述初始函數(shù)的參數(shù)信息是否存在依賴(lài)關(guān)系; 第二控制裝置,用于當(dāng)待選函數(shù)的參數(shù)信息與初始函數(shù)的參數(shù)信息存在依賴(lài)關(guān)系時(shí), 確定改待選函數(shù)為所述初始函數(shù)的依賴(lài)函數(shù),保存所述待選函數(shù),并將該待選函數(shù)作為初 始函數(shù),重復(fù)執(zhí)行第三確定裝置、判斷裝置以及第二控制裝置的操作。
18. 根據(jù)權(quán)利要求17所述的檢測(cè)裝置,其中,所述檢測(cè)裝置還包括: 更新裝置,用于基于所保存的待選函數(shù)更新危險(xiǎn)函數(shù)列表。
【專(zhuān)利摘要】本發(fā)明的目的是提供一種檢測(cè)源代碼漏洞的方法和裝置。根據(jù)本發(fā)明的方法包括:基于與所述源代碼對(duì)應(yīng)的抽象語(yǔ)法樹(shù),確定所述抽象語(yǔ)法樹(shù)中的一個(gè)或多個(gè)敏感節(jié)點(diǎn);基于所述抽象語(yǔ)法樹(shù),查找與所述初始節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)信息具有依賴(lài)關(guān)系的依賴(lài)節(jié)點(diǎn),以將所述依賴(lài)節(jié)點(diǎn)作為所述初始節(jié)點(diǎn)的子節(jié)點(diǎn);當(dāng)所述依賴(lài)節(jié)點(diǎn)不對(duì)應(yīng)用戶(hù)輸入信息時(shí),將該依賴(lài)節(jié)點(diǎn)作為新的初始節(jié)點(diǎn),并重復(fù)前述步驟。根據(jù)本發(fā)明的方案的優(yōu)點(diǎn)在于:通過(guò)基于賦值操作等方式的分析,來(lái)建立基于數(shù)據(jù)的依賴(lài)關(guān)系的敏感路徑信息,從而能夠降低對(duì)于漏洞的誤報(bào)率,并且能夠提升所獲得的敏感路徑的完整度,提高漏洞檢測(cè)的全面性。
【IPC分類(lèi)】G06F11-36
【公開(kāi)號(hào)】CN104850493
【申請(qǐng)?zhí)枴緾N201510202537
【發(fā)明人】過(guò)辰楷, 李鳴雷, 許靜, 周向榮, 王丹, 曾瑩, 白夢(mèng)瑩
【申請(qǐng)人】百度在線(xiàn)網(wǎng)絡(luò)技術(shù)(北京)有限公司, 南開(kāi)大學(xué)
【公開(kāi)日】2015年8月19日
【申請(qǐng)日】2015年4月24日