2016-03-16 30 views
0

在污點分析中,污點源是可能產生不可信或外部輸入的程序位置或語句。識別污染傳播程序中的污點源

我的目標:使用動態分析(最好)識別程序的所有外部用戶輸入,例如cmdline輸入,文件讀取,環境和網絡變量,並傳播污染。

我讀了本教程 - http://shell-storm.org/blog/Taint-analysis-and-pattern-matching-with-Pin/,它攔截使用英特爾PIN讀取系統調用並傳播污染。我想擴展到包括上面提到的各種外部輸入(開始,對於C-scanf,gets,fopen等)

是否有任何動態分析工具可以幫助我識別通用外部輸入?任何其他具體目標的方法也是值得讚賞的。謝謝

回答

0

我假設你只是針對Linux。

通常,程序獲取外部輸入的方式是通過使用系統調用與操作系統聯繫。你在談論libc函數。這是一個更高層次的抽象。我建議在系統調用級別查看輸入。

此外,該程序的另一個輸入是環境變量和命令行參數,它們在程序啓動時在堆棧中找到。

要考慮的另一件事是共享內存的所有形狀和形式。

+0

系統調用方法是我不確定如何將其擴展到scanf等函數,因爲scanf使用read系統調用的方式非常複雜。使用相同的PIN碼,如果程序使用scanf而不是直接調用read(),我會得到奇怪的結果。因此,首先,我想我會標記所有libc函數以及一些特定領域(不可信輸入)的函數,如a = f1(),每當調用f1時,都會將a標記爲有污點。你認爲靜態分析工具如clang在這種情況下更好嗎? –

+0

我想你可能會在正確傳播污染方面遇到問題,但我無法確定。 – nitzanms

+0

因此,對於相同的用例,可以使用像PIN這樣的儀器工具來在常規儀器中選擇某些libc函數以取得良好效果?在另一種情況下,a = f1(),如何得到PIN儀器中'a'的地址? –