Fortify SCA 在可执行文件或 .o 文件上构建
Posted
技术标签:
【中文标题】Fortify SCA 在可执行文件或 .o 文件上构建【英文标题】:Fortify SCA build on an executable or on the .o files 【发布时间】:2013-02-10 09:32:07 【问题描述】:我正在尝试对为创建二进制文件而编写的 C++ 代码进行强化静态分析。但是,此构建需要数小时(有时甚至超过一天)才能完成。
为了解决这个问题,我尝试通过创建一个假存档作为目标单独构建所有 .o 文件。我在这种方法中看到的优点是代码不属于我们的团队,不需要构建,也节省了链接时间。当我这样做时,我们在构建时间方面看到了巨大的进步。
但是,我团队中的一个人认为这可能会导致误报和误报,因为它错过了与我们所有权之外的代码的交互。他举的一个例子是关于 API 调用之间的共享对象到我们所有权之外的库。换句话说,我们将无法知道您域之外的对象的操作。但是当所有文件所有者对他们的代码都做同样的事情时,这不会被处理吗?
请告知我的方法是否正确。
【问题讨论】:
您是否在每次构建时都运行 SCA?构建的频率如何?通常每周一次是您最应该使用 SCA 进行扫描的频率。 嗨,LaJmOn,因为我们每两周都有一个 sprint,所以每周运行可能为时已晚。所以,我们更喜欢更短的周期。更重要的是,我们不想在进行这些运行时受到 Fortify 速度的限制。 【参考方案1】:您的方法可能会导致误报,但更有可能是误报,情况更糟,和/或风险评级过低。
数据流分析器使用全局的跨过程污点传播分析来检测源(用户输入)和接收器(危险的函数调用)之间的数据流)。
如果数据流分析器找不到接收器,那么分析器将停止跟踪此污点传播并转移到另一个,从而错过漏洞(假阴性)。
以下伪代码是PII暴露和SQL注入的示例:
public static void main(String args[]) throws Exception
ResultSet results = SQLInj(args);
System.out.println(results.Password);
public static ResultSet SQLInj(String args[])
String query = "SELECT * FROM user_data WHERE last_name = '" + args[1] + "'";
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery(query);
源是main->args[],接收器是SQLInj->executeQuery()。
如果函数 SQLInj 驻留在未被扫描的代码中(不是您团队的代码),则不会发现 SQL 注入问题,因为数据流分析器永远不会找到接收器。语义分析器可以通过查找“密码”一词来发现 PII 暴露,但给出的置信度要低得多。
【讨论】:
嗨 LaJmOn,我正在努力了解这是如何发生的。请帮助我理解/指向相关文件。 解释够了吗?我还可以向您发送一些关于如何减少 C++ 扫描时间的想法。 我明白你现在在说什么。你能给我一些关于 C++ 扫描时间减少的想法吗?以上是关于Fortify SCA 在可执行文件或 .o 文件上构建的主要内容,如果未能解决你的问题,请参考以下文章