【问题标题】:Identifying taint sources in a program for taint propagation在污点传播程序中识别污点源
【发布时间】:2016-07-02 07:45:14
【问题描述】:

在污点分析中,污点源是可能产生不可信或外部输入的程序位置或语句。

我的目标:使用动态分析(最好)识别程序的所有外部用户输入,例如 cmdline-input、文件读取、环境和网络变量并传播污点。

我阅读了本教程-http://shell-storm.org/blog/Taint-analysis-and-pattern-matching-with-Pin/,它使用英特尔 PIN 拦截读取系统调用并传播污点。我想扩展它以包括上面提到的各种外部输入。(首先,对于 C-scanf、gets、fopen 等)

是否有任何动态分析工具可以帮助我识别通用外部输入?任何其他具有特定目标的方法也值得赞赏。谢谢

【问题讨论】:

    标签: security dynamic valgrind intel-pin taint


    【解决方案1】:

    我假设您只针对 Linux。

    一般来说,程序获取外部输入的方式是通过使用系统调用与操作系统联系。你在谈论 libc 函数。这是更高层次的抽象。我建议在系统调用级别查看输入。

    此外,程序的另一个输入是环境变量和命令行参数,它们在程序启动时在堆栈中找到。

    要考虑的另一件事是各种形式的共享内存。

    【讨论】:

    • 系统调用方法的问题是我不确定如何将它扩展到像 scanf 这样的函数,因为 scanf 如何使用 read 系统调用是相当复杂的。使用相同的 PIN 码,如果程序使用 scanf 而不是直接调用 read(),我会得到奇怪的结果。因此,首先,我想我将标记所有 libc 函数以及一些特定于域(不受信任的输入)的函数,例如 a = f1() ,每当调用 f1 时,将 a 标记为 tainted 。你认为像clang这样的静态分析工具更适合这种情况吗?
    • 我认为您在正确传播污点方面可能存在问题,但我无法确定。
    • 那么,对于同样的用例,像 PIN 这样的检测工具可以很好地用于在常规检测中选择某些 libc 函数吗?在另一种情况下 a = f1() ,如何在 PIN 检测中获取“a”的地址?
    • Pin 在源代码级别不起作用,因此您的问题没有意义。在 pin 工作的级别,这在您链接到的文章中得到了回答(这是污染传播)。如果您询问如何将发生这种情况的指令与源代码行链接,请查看 pin_getsourcelocation
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 2019-10-05
    • 2010-12-01
    • 2020-04-23
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2019-08-07
    相关资源
    最近更新 更多