最新消息:图 床

代碼自動化掃描系統的建設

COOL IAM 203浏览 0评论

作者:MyKings
作者博客:http://mykings.me/

代碼審計一直是企業白盒測試的重要一環,面對市場上眾多商業與開源的審計工具,你是否想過集眾家之所長來搭建一套自動化的掃描系統呢?也許這篇文章會給你一些思路:)

一、背景

1. 為什麼需要自動化掃描?

互聯網的快速發展,程序員是功不可沒的。從軟件開發的瀑布模型到現在的敏捷開發, 軟件的開發周期從數年到數月、從數月到數天,時間不斷變換縮減。傳統的代碼掃描方式已經不能跟進新時代的軟件開發流程中,這就需要改變我們的代碼掃描方式,它應該在有限的時間內盡量發現足夠多的安全問題,並能夠結合 CI (持續集成) 來觸發代碼掃描。

2. 自動化掃描時掃描引擎用什麼?

你可以使用任何提供 API 接口的開源或商業的掃描引擎。這裡我們把掃描引擎(指第三方的審計工具)與自動化系統剝離(解耦)開來,掃描引擎只負責安全漏洞掃描;自動化系統負責漏洞收集、分析、處理等動作。同時你也可以通過自動化系統的後台來添加一些安全規則。

3. 怎麼觸發自動化掃描?

兩種方式:

4. 如何解決漏報和誤報?

兩種方式:基於規則基於插件,這裡使用白名單表示誤報、使用黑名單表示漏報。

基於規則

這裡的規則是指基於文本的處理方式,如:使用正則表達式來匹配文件中的某些特徵,使用字符串來判斷是否存在敏感信息等。

PS: 這裡有一些細節需要注意。

a. 正則表達式:

  • 是否區分大小寫
  • 是否支持多行匹配

b. 字符串:

  • 是否首部包含
  • 是否尾部包含
  • 是否在當前字符串中

基於插件

插件的自由度較大,其本質是把要掃描的文件信息作為插件執行入口的上下文,文件信息包括:路徑、名稱、內容等。你也可以在插件中寫一些判斷邏輯或調用第三方工具。

5. 漏報率和誤報率怎麼樣?

漏報率暫時無法很好的測量, 漏報率 = 漏報數/(漏洞數+漏報數) × 100% 而實際中很少有人(這裡指非安全審計人員)會發現漏報,理論上你寫的規則或插件越多越會減少漏報。

誤報是可以通過白名單規則或插件處理的,理論上可以百分百消除誤報,但是需要手動進行設置。

6. Web 通用型漏洞可以都覆蓋么?

Web 通用型漏洞以 OWASP 2017 TOP 10 為例,其大多數都在黑盒測試的範圍內。適用白盒測試僅限於:A3:2017-Sensitive Data ExposureA9:2017-Using Components with Known Vulnerabilities,而這兩項也是我們自動化掃描系統的基本要求。

7. 掃描出來的漏洞如何形成閉合?

這需要結合公司自身的軟件開發方式而定,大多數公司採用Gitlab + Confluence + Jira + Jenkins的工作方式,那麼我們可以通過 Jira 或 Gitlab 的 API 接口來創建問題工單。

二、設計要求

1. 目標

系統功能:

  • 盡量發現足夠多的安全問題
  • 硬編碼問題
  • 敏感信息泄露
  • 使用存在已知漏洞的組件
  • 危險函數識別

  • 可集成第三方掃描引擎

  • 可自動化處理誤報
  • 可通過 CI 方式觸發掃描
  • 可根據條件自動創建 Issue

掃描目標主要分為兩種:一種為線上 Git 掃描;一種為離線掃描。線上 Git 掃描其主要應用場景為企業內部使用如 Gitlab 這種代碼託管系統,我們定時同步 Gitlab 上的項目信息,通過 CI 來調用 API 接口進行掃描,自動化掃描就是這種模式,其執行流程為:“後台服務定時同步項目” -> “API接口下發掃描任務” -> “後台調度執行掃描”。離線掃描其形式為審計人員手動上傳一個 zip 或 rar 的源碼包,掃描系統自動解壓後進行代碼掃描。

這兩種模式的執行流程略有不同,所以後端實現也略有不同,第一種的執行流程要比第二種較為複雜,我們這裡會以第一種方式來實現自動化掃描。

2. 要求

系統要求:

  • 單個項目掃描控制在 20 分鐘以內
  • 支持調度節點監控
  • 支持漏洞知識庫管理
  • 支持 API 接口
  • 支持分佈式部署, 方便擴展來提升掃描能力

時間控制是為了保證 CI/CD 過程不會太長,避免影響項目發布。調度節點監控,這裡存在兩種情況:一種是調度進程的心跳監控;一種為掃描任務的超時監控。漏洞知識庫主要為了與組件分析模塊分析出的依賴組件進行漏洞匹配。API 接口是為了方便第三方(代指CI/CD)調用來下發掃描任務或查詢結果。分佈式部署方式,可以水平擴展來提高調度節點和API節點的處理速度與能力。

3. 模塊設計

主要系統:

  • 代碼託管子系統
  • 自動化掃描子系統
  • 第三方掃描子引擎

這裡從整體角度來觀察,大致分為三個子系統,自動化掃描子系統依賴代碼託管子系統,但不依賴掃描引擎(泛指第三方商業或開源審計產品)子系統,這是由於自動化掃描子系統內部集成了組件漏洞識別、黑白名單規則、黑白名單插件等功能,最後我們用一張圖來說明。

转载请注明:IAMCOOL » 代碼自動化掃描系統的建設

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x