一文洞悉DAST、SAST、IAST ——Web應用安全測試技術對比淺談

liqiuman180688發表於2019-04-19

袁新平@默安科技

一、全球面臨軟體安全危機

我們即將處於一個軟體定義一切的時代,這是 “一個最好的時代,也是一個最壞的時代”。

無論是生活中離不開的通訊、支付、娛樂、餐飲、出行,以及醫療,還是國防領域中的火箭、導彈、衛星等,都離不開軟體技術。然而,軟體技術在促進社會發展的同時,也可能因為漏洞問題危害人們的個人隱私資訊、財產安全甚至生命安全,這類案例不勝列舉。

  • 2010年,大型社交網站rockyou.com被曝存在SQL隱碼攻擊漏洞,黑客利用此漏洞獲取到3200萬使用者記錄(包括E-mail、姓名及明文形式的密碼)。
  • 2015年,英國電話和寬頻供應商TalkTalk被一名15歲的黑客利用SQL隱碼攻擊漏洞進行攻擊,四百萬TalkTalk客戶的姓名、地址、出生日期、和信用卡/銀行詳細資訊被黑客竊取。
  • 2018年,臺灣一男子利用花旗銀行信用卡業務系統漏洞,刷卡消費達6300餘萬元(新臺幣約合人民幣1345萬元),花旗銀行已通過司法途徑,向該名客戶求償。

軟體技術的發展與應用伴隨著巨大的安全危機,解決軟體漏洞問題是軟體開發從業者和安全從業者們迫在眉睫的任務。

二、什麼是Web應用安全測試技術?

為了發現軟體的漏洞和缺陷,確保Web應用程式在交付之前和交付之後都是安全的,就需要利用Web應用安全測試技術識別Web應用程式中架構的薄弱點和漏洞,並且必須趕在網路黑客找到和利用它們之前。

Web應用安全測試技術經過多年的發展,目前業界常用的技術主要分為3大類別。

DAST:動態應用程式安全測試(Dynamic Application Security Testing)技術在測試或執行階段分析應用程式的動態執行狀態。它模擬黑客行為對應用程式進行動態攻擊,分析應用程式的反應,從而確定該Web應用是否易受攻擊。

SAST:靜態應用程式安全測試(Static Application Security Testing)技術通常在編碼階段分析應用程式的原始碼或二進位制檔案的語法、結構、過程、介面等來發現程式程式碼存在的安全漏洞。

IAST:互動式應用程式安全測試(Interactive Application Security Testing)是2012年Gartner公司提出的一種新的應用程式安全測試方案,通過代理、VPN或者在服務端部署Agent程式,收集、監控Web應用程式執行時函式執行、資料傳輸,並與掃描器端進行實時互動,高效、準確的識別安全缺陷及漏洞,同時可準確確定漏洞所在的程式碼檔案、行數、函式及引數。IAST相當於是DAST和SAST結合的一種互相關聯執行時安全檢測技術。

本文主要分析這3種技術的實現原理、優劣勢對比以及應用場景。

三、DAST

DAST是一種黑盒測試技術,是目前應用最廣泛、使用最簡單的一種Web應用安全測試方法,安全工程師常用的工具如AWVS、AppScan等就是基於DAST原理的產品。

1. 實現原理圖 1:DAST原理
1)通過爬蟲發現整個 Web 應用結構,爬蟲會發現被測Web程式有多少個目錄,多少個頁面,頁面中有哪些引數;

2)根據爬蟲的分析結果,對發現的頁面和引數傳送修改的 HTTP Request 進行攻擊嘗試(掃描規則庫);

3)通過對於 Response 的分析驗證是否存在安全漏洞。

2. DAST優劣勢分析

DAST這種測試方法主要測試Web應用程式的功能點,測試人員無需具備程式設計能力,無需瞭解應用程式的內部邏輯結構,不區分測試物件的實現語言,採用攻擊特徵庫來做漏洞發現與驗證,能發現大部分的高風險問題,因此是業界Web安全測試使用非常普遍的一種安全測試方案。DAST除了可以掃描應用程式本身之外,還可以掃描發現第三方開源元件、第三方框架的漏洞。

從工作原理也可以分析出,DAST一方面需要爬蟲儘可能的把應用程式的結構爬取完整,另一方面需要對被測應用程式傳送漏洞攻擊包。現在很多的應用程式含有AJAX頁面、CSRF Token頁面、驗證碼頁面、API孤鏈、POST表單請求或者是設定了防重放攻擊策略,這些頁面無法被網路爬蟲發現,因此DAST技術無法對這些頁面進行安全測試。DAST技術對業務分支覆蓋不全,即使爬到一個表單,要提交內容,服務端對內容做判斷,是手機號碼則進入業務1,不是手機號碼進入業務2,爬蟲不可能知道這裡要填手機號碼,所以業務分支1永遠不會檢測到。

另外DAST必須傳送漏洞攻擊包來進行安全測試,這就需要有安全專家不斷更新漏洞掃描外掛,而且這種測試方式會對業務測試造成一定的影響,安全測試的髒資料會汙染業務測試的資料。

DAST的測試物件為HTTP/HTTPS的Web應用程式,對於IOS/Android上的APP也無能為力。

DAST發現漏洞後會定位漏洞的URL,無法定位漏洞的具體程式碼行數和產生漏洞的原因,需要比較長的時間來進行漏洞定位和原因分析,這使得DAST不太適合在DevOps的開發環境中使用。圖 2:DAST優勢與劣勢
四、SAST

超過50%的安全漏洞是由錯誤的編碼產生的,開發人員一般安全開發意識和安全開發技能不足,更加關注業務功能的實現。想從源頭上治理漏洞就需要制定程式碼檢測機制,SAST是一種在開發階段對原始碼進行安全測試發現安全漏洞的測試方案。

1. 實現原理圖 3:SAST原理
1) 首先通過呼叫語言的編譯器或者直譯器把前端的語言程式碼(如JAVA,C/C++原始碼)轉換成一種中間程式碼,將其原始碼之間的呼叫關係、執行環境、上下文等分析清楚。

2)語義分析:分析程式中不安全的函式,方法的使用的安全問題。

3)資料流分析:跟蹤,記錄並分析程式中的資料傳遞過程所產生的安全問題。

4)控制流分析:分析程式特定時間,狀態下執行操作指令的安全問題。

5)配置分析:分析專案配置檔案中的敏感資訊和配置缺失的安全問題。

6)結構分析:分析程式上下文環境,結構中的安全問題。

7)結合2)-6)的結果,匹配所有規則庫中的漏洞特徵,一旦發現漏洞就抓取出來。

8)最後形成包含詳細漏洞資訊的漏洞檢測報告,包括漏洞的具體程式碼行數以及漏洞修復的建議。

2. SAST優劣勢分析

SAST需要從語義上理解程式的程式碼、依賴關係、配置檔案。優勢是程式碼具有高度可視性,能夠檢測更豐富的問題,包括漏洞及程式碼規範等問題。測試物件比DAST豐富,除Web應用程式之外還能夠檢測APP的漏洞,不需要使用者介面,可通過IDE外掛形式與整合開發環境(如Eclipse、IntelliJ IDEA)結合,實時檢測程式碼漏洞問題,漏洞發現更及時,修復成本更低。

另一方面SAST不僅需要區分不同的開發語言(PHP、C#、ASP、.NET、Java、Python等),還需要支援使用的Web程式框架,如果SAST工具不支援某個應用程式的開發語言和框架,那麼測試時就會遇到障礙。DAST支援測試任何語言和框架開發的HTTP/HTTPS應用程式。

傳統的SAST掃描時間很慢,如果是用SAST去掃描程式碼倉庫,需要數小時甚至數天才能完成,這在日益自動化的持續整合和持續交付(CI/CD)環境中效果不佳。

還有一點是SAST的誤報,業界商業級的SAST工具誤報率普遍在30%以上,誤報會降低工具的實用性,可能需要花費更多的時間來清除誤報而不是修復漏洞。

SAST只對原始碼進行檢測,而不會分析整個應用程式,這迫使企業需要購買單獨的軟體組合分析工具(SCA),即使是SCA也只是識別公開的漏洞;開源、第三方API或框架中的未知漏洞超出了SAST和SCA的範圍。圖 4:SAST優勢與劣勢
五、IAST

IAST互動式應用安全測試技術是最近幾年比較火熱的應用安全測試新技術,曾被Gartner諮詢公司列為網路安全領域的Top 10技術之一。IAST融合了DAST和SAST的優勢,漏洞檢出率極高、誤報率極低,同時可以定位到API介面和程式碼片段。

1. 實現原理

IAST的實現模式較多,常見的有代理模式、VPN、流量映象、插樁模式,本文介紹最具代表性的2種模式,代理模式和插樁模式。

代理模式,在PC端瀏覽器或者移動端APP設定代理,通過代理拿到功能測試的流量,利用功能測試流量模擬多種漏洞檢測方式對被測伺服器進行安全測試。

插樁模式,插樁模式是在保證目標程式原有邏輯完整的情況下,在特定的位置插入探針,在應用程式執行時,通過探針獲取請求、程式碼資料流、程式碼控制流等,基於請求、程式碼、資料流、控制流綜合分析判斷漏洞。插樁模式具體實現有2種模式,Active 插樁和Passive 插樁。

  1. 代理模式實現原理
    代理模式原理
    a. 功能測試人員在瀏覽器或者APP中設定代理,將IAST裝置地址填入;

b. 功能測試人員開始功能測試,測試流量經過IAST裝置,IAST裝置將流量複製一份,並且改造成安全測試的流量;

c. IAST裝置利用改造後的流量對被測業務發起安全測試,根據返回的資料包判斷漏洞資訊。

插樁需要在伺服器中部署Agent,不同的語言不同的容器要不同的Agent,這對有些使用者來說是不可接受的。而代理模式不需要伺服器中部署Agent,只是測試人員要配置代理,安全測試會產生一定的髒資料,漏洞的詳情無法定位到程式碼片段,適合想用IAST技術又不接受在伺服器中部署Agent的使用者使用。

  1. Active插樁實現原理
    圖 6:Active 插樁原理
    a. 被測試伺服器中安裝IAST插樁 Agent;

b. DAST Scanner發起掃描測試;

c. IAST插樁 Agent追蹤被測試應用程式在掃描期間的反應附加測試,覆蓋率和上下文,將有關資訊傳送給Management Server,Management Server展示安全測試結果。

Active 插樁模式需要在被測試應用程式中部署插樁 Agent,使用時需要外部掃描器去觸發這個Agent。一個元件產生惡意攻擊流量,另一個元件在被測應用程式中監測應用程式的反應,由此來進行漏洞定位和降低誤報。

Active 插樁模式更像是一種改進版的DAST技術,目前最新的AWVS、AppScan已經採用了Active 插樁模式。AWVS整合了“AcuSensor”模組,通過在原始碼中部署感測器來增強定期動態掃描。AcuSensor能夠在AWVS掃描期間檢查Web應用程式執行時的原始碼,在後端抓取應用程式,提供100%爬行覆蓋率,查詢並測試在黑盒掃描期間未發現的隱藏輸入。AppScan則是整合了“Glass Box”服務模組,這使得AppScan支援 Web 2.0、JavaScript 和 AJAX 框架。

Active 插樁模式解決了傳統DAST漏報和無法精確定位漏洞位置的問題,需要先做掃描,掃描觸發漏洞需要一定的時間,而且掃描會對業務測試產生影響。在雙向HTTPS加密、CSRF Token頁面、防攻擊重放等場景下Active 插樁模式依然無法進行安全測試。

  1. Passive 插樁實現原理
    圖 7:Passive 插樁原理
    a. 被測試伺服器中安裝插樁 Agent;

b. 插樁 Agent在應用程式執行時獲取請求和程式碼資料流、程式碼控制流;

c. 插樁Agent將獲取的資訊傳送給Management Sever,Management Sever展示安全測試結果。

Passive 插樁在程式執行時監視應用並分析程式碼,它不會主動對Web應用程式執行攻擊,而是純粹被動地分析檢測程式碼。這實際上是一個巨大的優勢,因為它不會影響同時執行的其他測試活動,並且只需要業務測試(手動或自動)來觸發安全測試,有測試流量過來就可以實時的進行漏洞檢測。

插樁模式的關鍵是Agent,Agent需要根據不同語言進行開發,但是功能基本相同:

  • 獲取請求資料和返回資料;
  • 程式碼執行中的引數傳遞;
  • 資料庫查詢(如ODBC);
  • 目錄查詢(如LDAP),檔案系統許可權;
  • 監聽記憶體中特定的值,識別受汙染的輸入;
  • 第三方庫的使用;
  • 對外部應用程式和服務的呼叫;
  • 特定程式碼的執行等。

2. IAST優劣勢分析

IAST代理模式的優劣勢,在上文已提到,這裡不再贅述。

IAST插樁模式的技術基於請求、程式碼、資料流、控制流綜合分析判斷漏洞,漏洞測試準確性高,誤報率極低。由於IAST插樁模式可獲取更多的應用程式資訊,因此發現的安全漏洞既可定位到程式碼行,還可以得到完整的請求和響應資訊,完整的資料流和堆疊資訊,便於定位、修復和驗證安全漏洞。支援測試AJAX頁面、CSRF Token頁面、驗證碼頁面、API孤鏈、POST表單請求等環境。

IAST插樁模式在完成應用程式功能測試的同時即可以實時完成安全測試,且不會受軟體複雜度的影響,適用於各種複雜度的軟體產品。不但可以檢測應用程式本身的安全弱點,還可以檢測應用程式中依賴的第三方軟體的版本資訊和包含的公開漏洞。整個過程無需安全專家介入,無需額外安全測試時間投入,不會對現有開發流程造成任何影響,符合敏捷開發和DevOps模式下軟體產品快速迭代、快速交付的要求。

IAST插樁模式的核心技術在於探針,探針需要根據不同的語言進行開發,它只能在具有虛擬執行時環境的語言上執行,例如Java,C#,Python和NodeJS。它不支援C,C ++和Golang等語言。其次,由於agent與真實webserver整合,穩定性非常重要,每次更新需要重啟webserver,部署成本較大。業務邏輯漏洞也是IAST插樁模式無法解決的問題。圖 8:IAST插樁模式的優劣勢
六、三種技術的應用場景分析

上文分析了DAST、SAST、IAST三種技術的具體實現原理和各自的優劣勢,技術本身沒有優劣之分,不同的技術能夠解決不同場景下的問題,需要安全工程師能夠因地制宜地選擇對應的技術解決對應的問題。圖 9:DAST、SAST、IAST之間的對比
DAST技術比較適合用於線上執行環境的監控,研發階段程式碼檢測適合使用SAST技術,QA階段適合使用IAST技術。

七、實際應用

筆者所在的安全廠商已實現上述三大應用安全測試技術的創新性落地。

軟體開發階段,與程式設計師對話的原始碼安全審計主要基於SAST技術打造, SAST工具對使用者的困擾主要來自於誤報,通過資料流呼叫分析、變數關聯分析、機器學習等多重手段極大地降低了誤報率,減少工具對安全測試工作的困擾,改善使用者體驗,降低工具的使用成本。

軟體測試階段,基於IAST技術打造,支援代理、VPN、流量信使、流量映象、爬蟲、匯入日誌、Passive插樁共7種流量收集模式,真正結合了DAST、SAST、IAST三種技術的優勢;漏洞檢測率極高,包括水平越權、垂直越權等標準IAST技術無法檢測的邏輯漏洞,誤報率幾乎為0;漏洞詳情直接定位請求、資料流、程式碼片段,修復漏洞更容易;採用Passive 插樁技術,無需重放請求,不會形成髒資料,可覆蓋加密、防重放、簽名等任意場景;近實時檢測漏洞,漏洞檢測隨著應用程式執行實時進行。

應用上線運營階段,採用DAST技術打造資產風險監控系統,在大量企業客戶中被用來對線上業務環境進行監控。從攻擊者視角對企業進行資產探測,全面發現企業的資產暴露面和應用程式的漏洞,保障線上運營環境的安全;並且,部署模式緊跟業務的使用模式,支援在網際網路環境、企業IDC、私有云、公有云、混合雲等多種場景下部署使用。

相關文章