0

我正在尝试对为创建二进制文件而编写的 C++ 代码进行强化静态分析。但是,此构建需要数小时(有时甚至超过一天)才能完成。

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

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

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

4

1 回答 1

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 暴露,但给出的置信度要低得多。

于 2013-04-02T17:43:55.783 回答