Jenkins + HP fortify SCA 源碼檢測

姜志民 2019/06/21 18:37:53
2828

Jenkins + HP fortify SCA 源碼檢測


簡介

以人工方式進行Code Review還必須有豐富的經驗,才可能尋找出潛在的程式碼弱點或是資安漏洞,這是一項耗時的工作,若藉由第三方軟體將可取代人工方式Code Review,又可以大幅節省時間。 這次要介紹 HP fortify SCA 源碼檢測軟體,此軟體可以找出疑似弱點、漏洞的原始碼以降低資安威脅,筆者將要介紹整合此軟體整合到Jenkins,透過Jenkins排程每天進行掃描原始碼以確保資安。

作者

姜志民


一、軟體安裝

必須先安裝 HP fortify SCA ,再透過軟體內的sourceanalyzer.exe,來做原始碼的檢測工作,再透過BIRTReportGenerator.cmd來將檢測結果匯出成pdf檔案。
 
 
 

二、準備要檢測的原始碼

 底下是一個很簡單原始碼,但卻有隱藏著問題,對一般有經驗的開發人員,很容易一下子就看出問題,例如:SQL Injection,剩下的問題就由HP fortify SCA 來幫我們找出來。
 
 
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Fortify
{
    class Program
    {
        static void Main(string[] args)
        {

            string connectionConfig = "Initial Catalog=Test; Data Source=TestDataSource;user id=admin;password=admin;";
            string query1 = "Select * from Employees where name=" + args[1];

   
            System.Data.SqlClient.SqlConnection conn = new SqlConnection(connectionConfig);
            conn.Open();
          
            SqlDataAdapter adapter1 = new SqlDataAdapter(args[1], connectionConfig);

            SqlDataAdapter adapter2 = new SqlDataAdapter(query1, connectionConfig);

            DataSet oDataSet = new DataSet();

            Console.WriteLine(oDataSet.GetXml());

        }
    }
}
  

三、源碼檢測Jenkins腳本

node {
    
    //清除SCA intermediate files與build records
	bat '\"C:\\Program Files\\HPE_Security\\Fortify_SCA_and_Apps_17.20\\bin\\sourceanalyzer.exe\" -b csharp -clean'

    //對專案進行編譯動作
	bat '\"C:\\Program Files\\HPE_Security\\Fortify_SCA_and_Apps_17.20\\bin\\sourceanalyzer.exe\" -b csharp  \"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe" \"%WORKSPACE%\\Fortify\\Fortify.sln\" /target:\"REBUILD\" /p:Configuration=\"Debug\"'

    //對專案進行掃描作業並將掃描結果存成fpr檔案
	bat '\"C:\\Program Files\\HPE_Security\\Fortify_SCA_and_Apps_17.20\\bin\\sourceanalyzer.exe\" -b csharp -scan -64 -verbose  -format \"fpr\" -f \"Assessment.fpr\"'

    //利用fpr檔案輸出掃描結果為pdf檔案以方便閱讀
	bat '\"C:\\Program Files\\HPE_Security\\Fortify_SCA_and_Apps_17.20\\bin\\BIRTReportGenerator.cmd\" -template \"Developer Workbook\" -format \"PDF\" -output \"Assessment.pdf\" -source  \"Assessment.fpr\"'

    //將Assessment.pdf檔案進行封存成品
	archiveArtifacts 'Assessment.pdf'
	
}
  

四、新增Jenkins pipeline作業

 在「pipeline」頁籤中,填入步驟三的「源碼檢測Jenkins腳本」。按下「儲存」按鈕之後,就進行「馬上建置」。
 

五、源碼檢測報告

 
「馬上建置」之後,可以看到已經產生好的Assessment.pdf源碼檢測報告。
 
 
打開Assessment.pdf後,在「Executive Summary」頁面可以看到原始碼整體資安威脅程度。
 
 
在源碼檢測報告檢測出Insecure Transport: Database、Password Management: Hardcoded Password、SQL Injection…等問題,筆者就拿大家都耳能熟詳的SQL Injection來看源碼檢測報告說明與建議,筆者只會擷取部分重要的報告給各位讀者參考,如下圖。
 
姜志民