原文标题:ConDySTA: Context-Aware Dynamic Supplement to Static Taint Analysis
原文作者:Zhang X, Wang X, Slavin R, et al.
原文链接:https://cspecc.utsa.edu/publications/files/sp21.pdf
发表会议:2021 IEEE Symposium on Security and Privacy (SP), 2021
笔记作者:[email protected]
笔记小编:[email protected]
污点分析技术是一种跟踪并分析污点信息在程序中流动的技术,是分析代码漏洞,检测攻击方式的重要手段。污点分析技术可分为动态污点分析与静态污点分析两大类。
由于动态特性代码(反射,动态加载/代码生成,外部代码执行等)只有在运行时才能获得具体信息,传统的静态污点分析无法精确地分析出其中可能存在的安全问题,也就导致了漏报率的上升。而现有的静态污点分析工具通常会忽略这些动态语言特性,不考虑流向数据库或文件的污点流。面临上述问题,作者采用了动态辅助静态的方式进行污点分析,但是简单对动态分析结果进行整合又会导致上下文不敏感,进而导致误报率提高。因此作者提出了ConDySTA,通过将动态分析的结果插入到静态分析对应上下文的变量中。
作者首先展示了一个在缺少动态分析情况下所导致的漏报。假定在方法 foo() 中 blocker() 接受的参数 in 值可以可以通过方法 foo2() 中的 blocker2() 获取,一种简单的情况是与服务器进行交互。显然在这种情况下,静态污点分析技术无法对污点变量的传递进行追踪。作者将这种情况产生新污点变量的污点源称为 intermediate source。
在动态分析的辅助下,通过追踪 blocker() 和 blocker2() 的数据流,此次分析会将 intermediate source 处生成的新变量标记为污点变量,因此也能成功识别 line 13 处的污点汇聚点。但是由于该情况并没有考虑动态分析的调用上下文( line 14-15 ),在 intermediate source 会产生一个新的污点流,从而导致了误报。作者在此基础上进行改进,通过考虑动态调用上下文,与动态分析上下文不匹配的静态污点传播路径将被自动排除。
ConDySTA采用了FlowDroid(基于IFDS)作为其静态污点分析部分,动态部分采用了 value-based 动态污点分析技术。虽然 value-based 动态污点分析技术无法处理控制依赖以及加密数据,但是其在黑盒的处理场景下仍具备优势。
value-based 动态污点分析技术需要污点源的值,作者采用了安卓设备的用户信息作为其污点值。
作者通过软件测试生成的系统日志记录字符串类型的返回值以及函数调用栈,并将返回值与上表进行对比,收集了返回类型为 java.lang.String 的方法作为 intermediate source 。
作者使用REPRODROID(a large and up-to-date benchmark which combines multiple earlier benchmarks,whose dataset primarily consists of small apps with labeled taint flows)和从Google Play选取的下载量前100的APP。在REPRODROID的基准测试中,在其他六种最新的分析工具产生了28个漏报上,ConDySTA降至12。对于real-world的APP污点分析,ConDySTA在FLOWDROID检测出的281条污点流的基础上检测出额外的39条污点流。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com