它的的主要目標(biāo)是在一個(gè)單一視圖中給研究人員提供包含了各種函數(shù)交叉引用的相關(guān)信息。
對(duì)于可以使用Hexrays反編譯器的情況,該工具還可以嘗試排除針對(duì)這些函數(shù)的調(diào)用。
注意事項(xiàng)
在運(yùn)行VulFi之前,請(qǐng)確保已經(jīng)了解了你說(shuō)要測(cè)試的代碼,然后嘗試識(shí)別所有的標(biāo)準(zhǔn)函數(shù)(例如strcpy和memcpy等),然后確保它們正確命名。
插件是大小寫不敏感的,因此MEMCPY、Memcpy和memcpy都是可以識(shí)別的。
需要注意的是,搜索函數(shù)時(shí)需要精確匹配。這意味著or (或任何其他變體)不會(huì)被檢測(cè)為標(biāo)準(zhǔn)函數(shù),因此在尋找潛在漏洞時(shí)不會(huì)被考慮。
除此之外,VulFi將盡最大努力來(lái)過(guò)濾所有明顯的誤報(bào)。
請(qǐng)注意,雖然插件與特定架構(gòu)沒(méi)有任何聯(lián)系,但某些處理器不完全支持指定類型,在這種情況下,VulFi 將簡(jiǎn)單地將所有交叉引用標(biāo)記為潛在危險(xiǎn)的標(biāo)準(zhǔn)函數(shù),以便您繼續(xù)進(jìn)行手動(dòng)分析. 在這些情況下,您可以從插件的跟蹤功能中受益。
安裝
將vulfi.py、vulfi_prototypes.json和vulfi_rules.json文件放在 IDA 插件文件夾 ( cp vulfi*
用法
掃描
要啟動(dòng)掃描,請(qǐng)從頂部欄菜單中選擇Search>選項(xiàng)。
VulFi這將啟動(dòng)新的掃描,或者它將讀取存儲(chǔ)在idb/i64文件中的先前結(jié)果。每當(dāng)您保存數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)都會(huì)自動(dòng)保存。
掃描完成或加載先前的結(jié)果后,將顯示一個(gè)包含以下列的視圖:
IssueName - 用作可疑問(wèn)題的標(biāo)題。
FunctionName - 函數(shù)的名稱。
FoundIn - 包含可能感興趣的引用的函數(shù)。
檢測(cè)到的呼叫的地址。
審查狀態(tài),初始Not Checked分配給每個(gè)新項(xiàng)目。其他狀態(tài)是False Positive和。這些可以使用給定項(xiàng)目上的右鍵單擊菜單進(jìn)行設(shè)置,并且應(yīng)該反映給定函數(shù)調(diào)用的手動(dòng)審查結(jié)果。SuspiciousVulnerable
嘗試將更有趣的呼叫優(yōu)先于不太有趣的呼叫??赡艿闹禐镠igh和。優(yōu)先級(jí)與文件中的其他規(guī)則一起定義。MediumLowvulfi_rules.json
給定項(xiàng)目的用戶定義評(píng)論。
idb如果/文件內(nèi)沒(méi)有數(shù)據(jù)i64或用戶決定執(zhí)行新掃描。
該插件將詢問(wèn)它是否應(yīng)該使用默認(rèn)包含的規(guī)則運(yùn)行掃描,或者是否應(yīng)該使用自定義規(guī)則文件。
請(qǐng)注意,使用現(xiàn)有數(shù)據(jù)運(yùn)行新掃描不會(huì)覆蓋先前找到的由規(guī)則標(biāo)識(shí)的與先前存儲(chǔ)結(jié)果同名的項(xiàng)目。
因此,再次運(yùn)行掃描不會(huì)刪除現(xiàn)有的評(píng)論和狀態(tài)更新。
在 VulFi 視圖中的右鍵單擊上下文菜單中,您還可以從結(jié)果中刪除項(xiàng)目或刪除所有項(xiàng)目。
請(qǐng)注意,執(zhí)行此操作后,任何評(píng)論或狀態(tài)更新都將丟失。
調(diào)查
每當(dāng)您想檢查檢測(cè)到的可能存在漏洞的函數(shù)的實(shí)例時(shí),只需雙擊所需行中的任意位置,IDA 就會(huì)將您帶到被識(shí)別為可能感興趣的內(nèi)存位置。
使用右鍵單擊和選項(xiàng)Set Vulfi Comment,您可以為給定實(shí)例輸入注釋(例如,證明狀態(tài))。
添加更多功能
該插件還允許創(chuàng)建自定義規(guī)則。這些規(guī)則可以在 IDA 接口中定義(適用于單個(gè)功能)或作為自定義規(guī)則文件提供(適用于旨在涵蓋多個(gè)功能的規(guī)則)。
界面內(nèi)
當(dāng)您想要跟蹤在分析期間識(shí)別的自定義函數(shù)時(shí),只需將 IDA 視圖切換到該函數(shù),右鍵單擊其主體內(nèi)的任意位置并選擇Add current function to VulFi
。
自定義規(guī)則集
也可以加載具有多個(gè)規(guī)則集的自定義文件。要?jiǎng)?chuàng)建具有以下結(jié)構(gòu)的自定義規(guī)則文件,您可以在此處使用包含的模板文件。
[ // 規(guī)則數(shù)組
{
"name" : " RULE NAME " , // 規(guī)則的名稱
"alt_names" :[
" function_name_to_look_for " // 應(yīng)與此規(guī)則中定義的條件匹配的所有函數(shù)名稱的列表
],
"wrappers" : true , // 也尋找上述函數(shù)的包裝器(注意包裝的函數(shù)也必須匹配規(guī)則)
"mark_if" :{
"High" : " True " , // If 計(jì)算結(jié)果為 True,標(biāo)記為高優(yōu)先級(jí)(參見下面的規(guī)則)
“中”:“假”,//如果計(jì)算結(jié)果為真,則標(biāo)記為優(yōu)先中(參見下面的規(guī)則)
“低”:“假” //如果計(jì)算結(jié)果為真,優(yōu)先標(biāo)記低(見下面的規(guī)則)
}
}
]
查找所有對(duì)函數(shù)的交叉引用malloc并檢查其參數(shù)是否不是常量以及是否檢查函數(shù)的返回值的示例規(guī)則如下所示:
{
“名稱”:“可能的空指針取消引用”,
“ alt_names” :[
“ malloc ”,
“ _ malloc” ,
“. malloc ”
],
“包裝器”:假,
“mark_if”:{
“高”:“不是 param[0].is_constant() 而不是 function_call.return_value_checked() ”,
“中”:“假”,
“低”:“假”
}
}
規(guī)則
可用變量
param[]: 用于訪問(wèn)函數(shù)調(diào)用的參數(shù)(索引從 開始0)
function_call:用于訪問(wèn)函數(shù)調(diào)用事件
param_count: 保存?zhèn)鬟f給函數(shù)的參數(shù)計(jì)數(shù)
可用功能
參數(shù)是否為常數(shù):param[].is_constant()
獲取參數(shù)的數(shù)值:param[].number_value()
獲取參數(shù)的字符串值:param[].string_value()
調(diào)用后參數(shù)是否設(shè)置為null:param[].set_to_null_after_call()
是否檢查函數(shù)的返回值:function_call.return_value_checked()
例子
標(biāo)記對(duì)第三個(gè)參數(shù)大于 5 的函數(shù)的所有調(diào)用:param[2].number_value() > 5
標(biāo)記對(duì)第二個(gè)參數(shù)包含“%s”的函數(shù)的所有調(diào)用:"%s" in param[1].string_value()
標(biāo)記對(duì)第二個(gè)參數(shù)不是常量的函數(shù)的所有調(diào)用:not param[1].is_constant()
標(biāo)記對(duì)函數(shù)的所有調(diào)用,其中根據(jù)等于參數(shù)數(shù)量的值驗(yàn)證返回值:function_call.return_value_checked(param_count)
標(biāo)記對(duì)返回值針對(duì)任何值進(jìn)行驗(yàn)證的函數(shù)的所有調(diào)用:function_call.return_value_checked()
標(biāo)記對(duì)一個(gè)函數(shù)的所有調(diào)用,其中從第三個(gè)開始的參數(shù)都不是常量:all(not p.is_constant() for p in param[2:])
標(biāo)記對(duì)任何參數(shù)為常量的函數(shù)的所有調(diào)用:any(p.is_constant() for p in param)
標(biāo)記對(duì)函數(shù)的所有調(diào)用:True
審核編輯 :李倩
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
807瀏覽量
42315 -
編譯器
+關(guān)注
關(guān)注
1文章
1662瀏覽量
50200 -
漏洞
+關(guān)注
關(guān)注
0文章
205瀏覽量
15691
原文標(biāo)題:一款漏洞查找器(挖漏洞的有力工具)
文章出處:【微信號(hào):菜鳥學(xué)信安,微信公眾號(hào):菜鳥學(xué)信安】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
歡迎共同討論matlab 漏洞
AlphaFuzzer漏洞挖掘工具的使用
淺析Linux系統(tǒng)開源漏洞檢測(cè)工具
我是如何修復(fù)Windows系統(tǒng)的系統(tǒng)漏洞的
怎么設(shè)計(jì)一款基于滲透性測(cè)試的Web漏洞掃描系統(tǒng)?
英國(guó)發(fā)布漏洞披露工具包,以幫助公司實(shí)施改進(jìn)漏洞披露

漏洞挖掘工具afrog軟件簡(jiǎn)介
【Tools】漏洞掃描工具DongTai
一款支持弱口令爆破的內(nèi)網(wǎng)資產(chǎn)探測(cè)漏洞掃描工具SweetBabyScan
一款支持弱口令爆破的內(nèi)網(wǎng)資產(chǎn)探測(cè)漏洞掃描工具
一款圖形化高危漏洞利用工具
XSS漏洞掃描器工具
市場(chǎng)上可用的十大最佳漏洞掃描工具
常見的漏洞掃描工具

評(píng)論