2013-02-25 141 views
0

我正在嘗試強化靜態分析以編寫用於創建二進制文件的C++代碼。但是,這個構建需要花費數小時 - 有時甚至超過一天 - 才能完成。Fortify SCA基於可執行文件或.o文件構建

爲了解決這個問題,我嘗試通過創建一個僞歸檔文件來作爲目標來單獨構建所有的.o文件。我在這種方法中看到的優點是代碼不屬於我們的團隊,不需要構建,並且鏈接時間也可以節省。當我這樣做時,我們看到構建時間方面的巨大收益。

但是,我的團隊中的一個人認爲這可能會導致錯誤的肯定和錯誤的否定,因爲它錯過了與我們所有權之外的代碼的交互。他給出的一個例子是,在我們所有權之外的API調用之間共享對象。換句話說,我們將無法知道您的域外對象的操作。但是,當所有的文件所有者爲他們的代碼做同樣的事情時,這不會被處理嗎?

請告知我的方法是否正確。

+0

您是否在每個構建版本上運行SCA?構建的頻率如何?通常每週一次是您應該使用SCA進行掃描的最常見次數。 – LaJmOn 2013-04-02 17:43:51

+0

Hi LaJmOn,因爲我們每兩週都有一次衝刺,每週跑步可能爲時已晚。所以,我們更喜歡更短的週期。更重要的是,我們不希望被Fortify的速度所限制。 – 2013-04-03 04:51:05

回答

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

+0

嗨LaJmOn,我想了解這是怎麼發生的。請幫我理解/指向相關文件。 – 2013-04-03 04:52:10

+0

那足夠的解釋了嗎?我也可以給你一些關於如何減少C++掃描時間的想法。 – LaJmOn 2013-04-09 17:58:18

+0

我明白你現在所說的話。你可以給我一些關於C++掃描時間減少的想法嗎? – 2013-04-22 08:08:58