Fortify漏洞之 Privacy Violation(隱私泄露)和 Null Dereference(空指針異常)


  繼續對Fortify的漏洞進行總結,本篇主要針對 Privacy Violation(隱私泄露) 和 Null Dereference(空指針異常) 的漏洞進行總結,如下:

1.1、產生原因:

Privacy Violation 會在以下情況下發生:

1. 用戶私人信息進入了程序。

2. 數據被寫到了一個外部介質,例如控制台、file system 或網絡。

示例 1以下代碼包含了一個日志記錄語句,該語句通過在日志文件中存儲記錄信息跟蹤添加到數據庫中的各條記錄信息。在存儲的其他數值中,getPassword() 函數可以返回一個由用戶提供的、與用戶帳號相關的明文密碼。

pass = getPassword();
...
dbmsLog.println(id+":"+pass+":"+type+":"+tstamp);

  在以上示例中,代碼采用日志的形式將明文密碼記錄到了文件系統中。雖然許多開發人員認為文件系統是存儲數據的安全位置,但這不是絕對的,特別是在涉及到隱私問題時。

1.2、修復方案:

  當安全和隱私的需要發生矛盾時,通常應優先考慮隱私的需要。為滿足這一要求,同時又保證信息安全的需要,在項目上線時,應盡量將開發人員為方便開發時添加的一些log方法,out方法刪除同時在操作系統時應在退出程序前清除所有私人信息。 

 

2、Null Dereference(空指針異常)

2.1、產生原因:

  當違反程序員的一個或多個假設時,通常會出現 null 指針異常。如果程序明確將對象設置為null,但稍后卻間接引用該對象,則將出現 dereference-after-store 錯誤。此錯誤通常是因為程序員在聲明變量時將變量初始化為 null。

  大部分空指針問題只會引起一般的軟件可靠性問題,但如果攻擊者能夠故意觸發空指針間接引用,攻擊者就有可能利用引發的異常繞過安全邏輯,或致使應用程序泄漏調試信息,這些信息對於規划隨后的攻擊十分有用。

 

示例:在下列代碼中,程序員將變量 foo 明確設置為 null。稍后,程序員間接引用 foo,而未檢查對象是否為 null 值。

Foo foo = null;
...
foo.setBar(val);
...
}

 

 

圖2.1.1:引起Null Dereference漏洞的代碼

2.2、修復方案:

  在間接引用可能為 null 值的對象之前,請務必仔細檢查。如有可能,在處理資源的代碼周圍的包裝器中納入 null 檢查,確保在所有情況下均會執行 null 檢查,並最大限度地減少出錯的地方。     

 

圖2.2.1:修復Null Dereference漏洞后的代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM