gpt4 book ai didi

c++ - Fortify SCA 基于可执行文件或 .o 文件构建

转载 作者:行者123 更新时间:2023-11-28 07:44:58 24 4
gpt4 key购买 nike

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

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

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

请指教我的做法是否正确。

最佳答案

您的方法可能会导致误报,但更有可能导致误报,这更糟糕,和/或风险评级过低。

数据流分析器使用全局、过程间的污点传播分析来检测source(用户输入)和sink(危险函数调用)之间的数据流).

如果数据流分析器找不到接收器,则分析器将停止跟踪此污点传播并转移到另一个,从而错过漏洞(漏报)。

以下伪代码是PII 暴露SQL 注入(inject) 的示例:

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 注入(inject)问题,因为数据流分析器永远找不到接收器。语义分析器可以通过查找“密码”一词找到 PII 暴露,但给出的置信度要低得多。

关于c++ - Fortify SCA 基于可执行文件或 .o 文件构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15063592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com