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);

源是ma​​in->args[],接收器是SQLInj->executeQuery()

如果函数 SQLInj 驻留在未被扫描的代码中(不是您团队的代码),则不会发现 SQL 注入问题,因为数据流分析器永远不会找到接收器。语义分析器可以通过查找“密码”一词来发现 PII 暴露,但给出的置信度要低得多。

【讨论】:

嗨 LaJmOn,我正在努力了解这是如何发生的。请帮助我理解/指向相关文件。 解释够了吗?我还可以向您发送一些关于如何减少 C++ 扫描时间的想法。 我明白你现在在说什么。你能给我一些关于 C++ 扫描时间减少的想法吗?

以上是关于Fortify SCA 在可执行文件或 .o 文件上构建的主要内容,如果未能解决你的问题,请参考以下文章

Fortify SCA 脚本扫描 shell 脚本

如何区分 Fortify SCA 扫描

谁有fortify sca能扫描的安全漏洞种类明细

Fortify SCA 和 Fortify SSC 之间的区别

Fortify

.a .o 和 .lo 文件之间的区别