Secure Code Scanning 靜態程式碼掃描

Secure Code Scanning 靜態程式碼掃描

關於 Code Review

CodeReview

 

這篇文章主要討論如何針對程式碼用自動化的工具作分析,了解程式碼潛在的問題

例如:Memory leak、SQL Injection 等

首先,我們先了解程式碼分析工具可以分析什麼問題,不能分析什麼問題?

 

程式碼分析擅長的是…

  • 基本資料型態的問題 (例如:數值or 字串 overflow等)
  • 記憶體管理 (memory leaks)
  • 安全性風險的 API (例如:已知的 Buffer overflows)
  • 錯誤或是例外處理
  • 合法字元的輸入檢查 (e.g. SQL Injection)

 

程式碼分析不擅長的是…

  • 程式整體架構上的問題
  • Account 驗證的問題
  • 商業邏輯上的關係,例如折扣優惠的期間控制
  • 隱私資訊內容的加密
  • 動態程式碼,特別是 JavaScript/ PHP web-based 的語言

 

掃描結果

程式碼掃描工具結果的瑕疵

不一定表示真的是有問題的瑕疵,有可能是 (False Positive)

也不一定每一個瑕疵都表示弱點

因此,當收到這樣的掃描報告之後,研發團隊必須要再次檢視:

  • 該問題是會導致潛在的資訊安全風險
  • priority 每一個問題

 

五大程式碼瑕疵的種類

接下來要探討五大程式碼瑕疵:

  1. 資料型態的問題
  2. 資料同步的問題
  3. 記憶體管理的問題
  4. 例外與錯誤處理的問題
  5. 輸入合法性的驗證

 

 

1. 資料型態的問題

這類問題通常是因為資料型態 Size 所導致,例如數值的資料型態,但是該資料超過該資料型態所容納的最大值與最小值。

 

2. 資料同步的問題 (thread Safe)

這類的問題主要因為 multiple thread 時,同步資源讀取所造成的 lock 問題。

 

3. 記憶體管理

這類的問題主要是 Buffer Overview,造成這樣的原因可能為:

例如:local variable 在記憶體中被複寫

例如:Call by Value, Call by Address  ,記憶體內容的資料或是記憶體位址被寫錯

例如:程式指標記憶體位址指錯

 

4. 輸入的合法性驗證

從基本的 Injection 的資訊安全檢查,例如 SQL Injection, Command Injection 等,

到資料來源的驗證,自動程式碼的分析對於資料來源無法完全模擬,

特別是Web-based application

資料的來源例如:

  • Cookie
  • 使用者輸入參數
  • 資料透過 sockets 傳輸
  • 資料輸入透過指令

 Top 20程式碼問題

(根據CWE,Top 25程式碼的問題列表如下)

Rank Score ID Name
[1] 93.8 CWE-89 Improper Neutralization of Special Elements used in an SQL Command (‘SQL Injection’)
[2] 83.3 CWE-78 Improper Neutralization of Special Elements used in an OS Command (‘OS Command Injection’)
[3] 79.0 CWE-120 Buffer Copy without Checking Size of Input (‘Classic Buffer Overflow’)
[4] 77.7 CWE-79 Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)
[5] 76.9 CWE-306 Missing Authentication for Critical Function
[6] 76.8 CWE-862 Missing Authorization
[7] 75.0 CWE-798 Use of Hard-coded Credentials
[8] 75.0 CWE-311 Missing Encryption of Sensitive Data
[9] 74.0 CWE-434 Unrestricted Upload of File with Dangerous Type
[10] 73.8 CWE-807 Reliance on Untrusted Inputs in a Security Decision
[11] 73.1 CWE-250 Execution with Unnecessary Privileges
[12] 70.1 CWE-352 Cross-Site Request Forgery (CSRF)
[13] 69.3 CWE-22 Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
[14] 68.5 CWE-494 Download of Code Without Integrity Check
[15] 67.8 CWE-863 Incorrect Authorization
[16] 66.0 CWE-829 Inclusion of Functionality from Untrusted Control Sphere
[17] 65.5 CWE-732 Incorrect Permission Assignment for Critical Resource
[18] 64.6 CWE-676 Use of Potentially Dangerous Function
[19] 64.1 CWE-327 Use of a Broken or Risky Cryptographic Algorithm
[20] 62.4 CWE-131 Incorrect Calculation of Buffer Size
[21] 61.5 CWE-307 Improper Restriction of Excessive Authentication Attempts
[22] 61.1 CWE-601 URL Redirection to Untrusted Site (‘Open Redirect’)
[23] 61.0 CWE-134 Uncontrolled Format String
[24] 60.3 CWE-190 Integer Overflow or Wraparound
[25] 59.9 CWE-759 Use of a One-Way Hash without a Salt

 

“動態”程式碼分析

除了”靜態”程式碼分析之外,另外一個方法是”動態”程式碼分析,

動態程式碼分析指的是需要執行時整體的分析,例如 Web Application,

從使用者Web UI輸入,前端 HTTP/JavaScript 執行檢查,

網路傳輸透過 HTTP/HTTPS request GET/Post,

資料傳輸到後端 Web Server Application 程式(PHP/Java/C#)執行

到資料庫 Query 執行,

再將執行結果回傳至使用者 Browser WebUI

這整過過程需要的技術就是 “動態” 程式碼分析

單純掃描 Javascript 或是某一部分的 Web Application 無法有效的偵測到資訊安全漏洞

 

相關程式語言的建議

Android

Android Java 程式的建議可以參考:

http://developer.android.com/training/articles/security-tips.html

程式碼掃描的工具可以使用:lint

http://developer.android.com/tools/debugging/improving-w-lint.html

 

PHP

PHP 本身其實是 Web 相關的的服務,

所以程式碼的掃描需要整體的配合使用 “動態”掃描的方式進行

針對 PHP 語言,程式語言撰寫的建議可以參考:

https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

 

JavaScript

JavaScript 也是屬於 Web 的服務內容之一,程式語言的建議可以參考:

http://html5sec.org/#javascript

 

iOS

Apple 對於程式語言所會造成的弱點,主要分為

  • buffer overflows
  • unvalidated input
  • race conditions
  • access-control problems
  • weaknesses in authentication, authorization, or cryptographic practices

細節可以參考

https://developer.apple.com/library/mac/documentation/security/conceptual/SecureCodingGuide/Articles/TypesSecVuln.html#//apple_ref/doc/uid/TP40002529-SW2

 

自動化掃描工具可以 Clang Analyzer

http://clang-analyzer.llvm.org/

 

總結

這篇文章說明靜態程式分析的目的與限制

常見的靜態程式分析可以找出的程式瑕疵

也列出幾種程式語言的安全建議與參考工具

最後,也簡介Web Application 動態程式分析

都會讓程式的品質有一定的提升

工具分析的結果提供的主要是參考,最後還是要靠專業的研發人員判斷如何解決

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *