Fortify SCA构建在可执行文件或.o文件上

时间:2013-02-25 09:17:25

标签: c++ fortify

我正在尝试为编写用于创建二进制文件的C ++代码进行强化静态分析。但是,这个版本需要花费数小时 - 有时超过一天 - 才能完成。

为了解决这个问题,我试图通过创建一个伪存档作为目标,单独构建所有.o文件。我在这种方法中看到的优势是代码不归我们团队所有,无需构建,也节省了链接时间。当我这样做时,我们看到了构建时间方面的巨大收益。

然而,我团队中的一个人认为这可能导致误报和漏报,因为它错过了与我们所有权之外的代码的交互。他给出的一个例子是,对我们所有权之外的库的API调用之间的共享对象。换句话说,我们将无法知道您域外对象的操作。但是当所有文件所有者为他们的代码做同样的事情时,这不会被处理吗?

请告知我的方法是否正确。

1 个答案:

答案 0 :(得分: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注入问题,因为数据流分析器从未找到接收器。语义分析器可以通过查找单词“password”找到PII暴露,但信心等级要低得多。