路徑敏感檢測(cè)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實(shí)施例涉及領(lǐng)域計(jì)算機(jī)技術(shù),尤其涉及一種路徑敏感檢測(cè)方法和裝置。
【背景技術(shù)】
[0002]程序中存在的值流錯(cuò)誤是一種非常普遍、非常危險(xiǎn)的漏洞,在各種操作系統(tǒng)、應(yīng)用軟件中廣泛存在,值流錯(cuò)誤是指在定值點(diǎn)存在錯(cuò)誤定值,且錯(cuò)誤定值隨值流到達(dá)引用點(diǎn)時(shí)引發(fā)的錯(cuò)誤。為保障計(jì)算機(jī)系統(tǒng)安全運(yùn)行,消除值流錯(cuò)誤非常重要。
[0003]目前主要采用靜態(tài)方法檢測(cè)值流錯(cuò)誤。靜態(tài)方法不需要運(yùn)行程序,僅需靜態(tài)掃描源程序即可發(fā)現(xiàn)程序中的錯(cuò)誤能夠盡早地發(fā)現(xiàn)程序中的錯(cuò)誤。而為了提高錯(cuò)誤檢測(cè)的精度,通常是通過(guò)逐一分析程序中所有可能執(zhí)行的路徑,然后檢測(cè)值流錯(cuò)誤。此類方法具有高檢測(cè)精度,但由于路徑空間的指數(shù)級(jí)膨脹問(wèn)題,該分析方法的可擴(kuò)展性并不理想,無(wú)法有效應(yīng)用于大規(guī)模的應(yīng)用程序。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例提供一種路徑敏感檢測(cè)方法和裝置,從而解決現(xiàn)有技術(shù)中檢測(cè)值流錯(cuò)誤的方案存在的可擴(kuò)展性不理想,無(wú)法有效應(yīng)用于大規(guī)模的應(yīng)用程序的問(wèn)題。
[0005]第一方面,本發(fā)明實(shí)施例提供一種路徑敏感檢測(cè)方法,包括:
[0006]根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性;
[0007]沿著定值引用鏈傳播所述初始的與錯(cuò)誤相關(guān)的屬性,所述定值引用鏈為所有可能流經(jīng)所述定值點(diǎn)的引用點(diǎn)所組成的集合;
[0008]在潛在錯(cuò)誤語(yǔ)句處識(shí)別所述變量的與錯(cuò)誤相關(guān)的屬性;
[0009]根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,所述可能錯(cuò)誤語(yǔ)句表示所述變量的定值語(yǔ)句經(jīng)由部分路徑到達(dá)會(huì)導(dǎo)致錯(cuò)誤的引用語(yǔ)句;
[0010]根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集;
[0011]根據(jù)所述路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。
[0012]在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,包括:
[0013]根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述變量的與錯(cuò)誤相關(guān)的屬性是否為不安全的屬性;
[0014]若所述變量的與錯(cuò)誤相關(guān)的屬性為不安全的屬性,則通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句,所述控制節(jié)點(diǎn)為所述潛在錯(cuò)誤語(yǔ)句相對(duì)于所述變量的定值語(yǔ)句的控制流圖上的控制節(jié)點(diǎn);
[0015]若存在檢查語(yǔ)句,則查找是否存在特殊控制流;
[0016]若不存在特殊控制流,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟;
[0017]在檢查過(guò)的所有控制節(jié)點(diǎn)中都不存在檢查語(yǔ)句和特殊控制流的情況下,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句。
[0018]根據(jù)第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,還包括:
[0019]若不存在檢查語(yǔ)句,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟。
[0020]根據(jù)第一方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,還包括:
[0021]若存在特殊控制流,則確定所述潛在錯(cuò)誤語(yǔ)句為一定不錯(cuò)語(yǔ)句。
[0022]根據(jù)第一方面、第一方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任意一種,在第四種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集,包括:
[0023]對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0024]根據(jù)第一方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,包括:
[0025]對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行后向切片,以獲得語(yǔ)句集合Sbt ;
[0026]對(duì)所述變量的定值語(yǔ)句進(jìn)行前向切片,以獲得語(yǔ)句集合Sfs ;
[0027]計(jì)算所述Sbt與所述Sfs的交集Sts,并對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片,以獲得對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果;
[0028]計(jì)算獲得的對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集,并將所述對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集作為與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0029]第二方面,本發(fā)明實(shí)施例提供一種路徑敏感檢測(cè)裝置,包括:
[0030]設(shè)置模塊,用于根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性;
[0031]傳播模塊,用于沿著定值引用鏈傳播所述初始的與錯(cuò)誤相關(guān)的屬性,所述定值引用鏈為所有可能流經(jīng)所述定值點(diǎn)的引用點(diǎn)所組成的集合;
[0032]識(shí)別模塊,用于在潛在錯(cuò)誤語(yǔ)句處識(shí)別所述變量的與錯(cuò)誤相關(guān)的屬性;
[0033]確定模塊,用于根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,所述可能錯(cuò)誤語(yǔ)句表示所述變量的定值語(yǔ)句經(jīng)由部分路徑到達(dá)會(huì)導(dǎo)致錯(cuò)誤的引用語(yǔ)句;
[0034]獲得模塊,用于根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集;
[0035]檢測(cè)模塊,用于根據(jù)所述路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。
[0036]在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述確定模塊,具體用于根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述變量的與錯(cuò)誤相關(guān)的屬性是否為不安全的屬性;若所述變量的與錯(cuò)誤相關(guān)的屬性為不安全的屬性,則通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句,所述控制節(jié)點(diǎn)為所述潛在錯(cuò)誤語(yǔ)句相對(duì)于所述變量的定值語(yǔ)句的控制流圖上的控制節(jié)點(diǎn);若存在檢查語(yǔ)句,則查找是否存在特殊控制流;若不存在特殊控制流,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟;在檢查過(guò)的所有控制節(jié)點(diǎn)中都不存在檢查語(yǔ)句和特殊控制流的情況下,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句。
[0037]根據(jù)第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述確定模塊,還用于若不存在檢查語(yǔ)句,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟。
[0038]根據(jù)第二方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述確定模塊,還用于若存在特殊控制流,則確定所述潛在錯(cuò)誤語(yǔ)句為一定不錯(cuò)語(yǔ)句。
[0039]根據(jù)第二方面、第二方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任意一種,在第四種可能的實(shí)現(xiàn)方式中,所述獲得模塊,具體用于對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0040]根據(jù)第二方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述獲得模塊,具體用于對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行后向切片,以獲得語(yǔ)句集合Sbt ;對(duì)所述變量的定值語(yǔ)句進(jìn)行前向切片,以獲得語(yǔ)句集合Sfs ;計(jì)算所述Sbt與所述Sfs的交集STS,并對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片,以獲得對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果;計(jì)算獲得的對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集,并將所述對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集作為與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0041]本發(fā)明實(shí)施例路徑敏感檢測(cè)方法和裝置,通過(guò)根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性,沿著定值引用鏈傳播初始的與錯(cuò)誤相關(guān)的屬性,在潛在錯(cuò)誤語(yǔ)句處識(shí)別變量的與錯(cuò)誤相關(guān)的屬性,根據(jù)在潛在錯(cuò)誤語(yǔ)句處識(shí)別的變量的與錯(cuò)誤相關(guān)的屬性,確定潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,根據(jù)可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集,根據(jù)路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。從而解決現(xiàn)有技術(shù)中檢測(cè)值流錯(cuò)誤存在的可擴(kuò)展性并不理想,無(wú)法有效應(yīng)用于大規(guī)模的應(yīng)用程序的問(wèn)題,通過(guò)減少路徑敏感檢測(cè)的語(yǔ)句輸入集降低了檢測(cè)開(kāi)銷,能夠有效應(yīng)用于大規(guī)模的應(yīng)用程序。
【附圖說(shuō)明】
[0042]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0043]圖1為本發(fā)明實(shí)施例一所提供的路徑敏感檢測(cè)方法的流程圖;
[00