在不久前的【T·TALK】系列活動第七期中,我們特別邀請到了懸鏡安全CTO寧戈做客直播間,為大家分享代碼疫苗技術的原理、實現及落地實踐經驗。【T·TALK】也將這期分享的精彩內容進行了整理,希望能為讀者帶來一些啟發:
?
代碼疫苗概念
近年來,在技術創新的驅動下,軟件技術上下游產業的演替不斷加速。開發模式、應用架構、服務器與基礎設施的升級,使得應用軟件的開發流程變得愈發復雜。與此同時,伴隨著軟件復雜度的提升,軟件安全所面臨的問題與挑戰也在持續增加。
代碼疫苗技術,是一種能夠通過運行時插樁技術進行軟件運行時風險自發現及威脅自免疫的新一代安全技術,其核心內涵主要包含四個方面:
無需代碼安全專家逐行分析源代碼
無需對原有代碼邏輯進行修改調整
無需維護復雜流量過濾策略及規則
不會忽略應用程序中超90%由第三方組件引入的風險
與醫學屆對疫苗的定義相似,代碼疫苗技術并不是傳統的外掛式安全,其側重點是從開發源頭側規避安全風險,并為應用搭建更加有效的內生積極防御體系。而幫助代碼疫苗技術實現這一目標的兩個核心,則是基于單探針插樁的IAST技術與RASP技術。
IAST全稱交互式應用安全測試,是近幾年的新興安全測試技術。與SAST白盒安全測試技術、DAST黑盒安全測試技術兩種傳統的安全漏洞解決方案相比,IAST的漏洞檢出率更高、適配場景更多,也更加適用于目前流行的DevOps場景。
RASP全稱運行時應用自防護。不同于傳統的WAF或IDS在流量層的檢測,RASP更多的是與應用耦合在一起,通過運行時插樁,對應用的運行時環境進行檢測。利用這樣的方式,RASP能夠攔截從應用程序到系統的所有調用,確保它們的安全,從而實時檢測和阻斷各式各樣的安全攻擊。
代碼疫苗技術,則是將IAST技術的漏洞檢測能力與RASP技術的攻擊防護能力進行了合并。將這兩項技術整合成一個統一的IAST和RASP探針,以此實現統一的從漏洞檢測到漏洞防護的全生命周期一體化的檢測與防護解決方案。
代碼疫苗技術原理
無論IAST技術還是RASP技術,都依賴運行時插樁進行實現。運行時插樁是在應用層通過應用啟動后,替換函數體或在函數前后插入檢測代碼來實現的。通過插樁代碼,可以快速獲得應用運行在關鍵點的數據信息。
需要注意的是,由于不同語言間存在運行時的環境差異,因此不同語言實現插樁的方式也會有所區別。以Java為例,由于Java擁有Instrument的特性,因此在類加載的過程中,需要對所關注的關鍵類與方法的字節碼進行修改,才能夠達到插入檢測邏輯的目的。
IAST從概念角度可分為廣義與狹義兩種。廣義的IAST包含流量學習和日志分析模式,通過對鏡像流量及日志等數據進行重放及分析,以達到檢測目的。此外,廣義的IAST對研發測試等使用人員完全透明,無流程侵入,不依賴應用編程語言。
狹義IAST特指運行時插樁模式,能夠幫助普通研發測試人員快速完成業務安全測試,精準定位漏洞細節及修復指導。同時,狹義IAST分為兩種模式,一種是主動IAST,通過插樁分析流量數據,另一種則是使用動態污點分析技術的被動IAST。
動態污點分析技術能夠基于運行時插樁跟蹤外部可控數據對應用的影響,進而分析外部數據在應用內部的流轉情況,從而確定應用是否存在漏洞。由于動態IAST擁有無重放數據、無臟數據、可應對加密簽名接口、可適配復雜場景等優點,因此目前的適用面是比較廣泛的。
在動態污點分析技術中,可以將污點傳播的整體過程分為污點輸入、污點傳播與污點匯集三個階段。在污點輸入階段,所有外部數據都被默認為不可信數據,因此需要在外部數據進入應用的時候,對其添加污點標記。
污點傳播階段,主要目標為跟蹤污點數據的傳播過程。由于外部數據在進入應用程序時已被污點標記,因此當被標記數據進行運算或字符串拼接及其他操作后,所產生的新數據也將會攜帶污點標記。
污點匯集階段,需要對可能觸發漏洞的函數進行關注。確定攜帶污點標記的數據是否會匯聚到例如SQL執行或文件讀寫等敏感函數之上。若該過程發生,則意味著在應用程序中的這些函數執行流程中可能存在著漏洞。
當然,如果在污點傳播階段,攜帶污點標記的數據遇到了清潔函數,并被成功執行了過濾操作或其他安全操作,則會將該數據所攜帶的污點標記消除,以此來確認這一條鏈路的安全性。這就是動態污點分析技術的執行原理。
RASP的核心則是通過插樁技術將防護邏輯與防護功能注入應用程序,深入應用運行時的環境內部,通過分析與了解數據流及事件流,檢測和防護無法預見的安全威脅與攻擊事件(如0day攻擊)。這種運作模式,使得RASP能夠解決WAF所存在的檢測規則與功能無法對應、無法知曉服務端防御方式、變形及未知威脅防御乏力、微服務場景難適配等痛點。
RASP能夠獲取運行時的上下文數據。在這其中,第一類數據是HTTP請求及響應數據與各式RPC協議,例如dubbo的請求與響應數據,以及gRPC等各式RPC框架。
第二類是所關注函數的執行數據,包括動態運行時,函數所接收到的完整參數、調用函數的對象實例以及函數執行的返回值。通過獲取運行時過程中函數整體執行的狀態,便能夠判斷運行函數執行過程中是否存在所關注的數據。
第三類則是函數執行過程中的調用棧。獲取完整的函數調用棧,一方面便于研發進行漏洞分析與攻擊分析。另一方面,也可以通過函數調用棧分析攻擊者的行為。常用的一些反序列化的攻擊手段,都可以通過函數調用棧進行分析。第四類是應用配置信息。獲取應用的各類安全配置、代碼內屬性配置等信息,可以完整得知該應用是否執行了安全策略。
基于獲取的運行時上下文數據,RASP可以進行分析和運用,根據采用的算法或者檢測邏輯分為幾大類。
第一類也是最常規的是規則方式,對獲取的參數或者HTTP請求綜合進行規則匹配。
第二類是RASP的亮點功能,就是基于詞法的分析。由于RASP所獲取的數據更加全面,因此RASP能夠針對完整的輸入如SQL、命令執行等信息數據進行詞法分析,以判斷關鍵函數執行點上的數據是否存在異常。
第三類是行為及運行堆棧檢測,主要用來檢測敏感函數的執行。例如當WebShell植入系統后,會通過變形混淆繞過檢測,但在執行系統命令或文件操作的過程中,其必定會調用底層運行時的API,此時通過行為及運行堆棧分析,便能夠得知執行調用的函數或函數調用棧。
第四類則是應用運行配置檢測,也就是對代碼中的動態安全配置及其他配置檢測。例如增加了某些安全配置后,部分漏洞就無法再被利用了。這其中包括預編譯這類防范SQL注入的方式,以及XXE的關閉外部實體訪問這類方式等。這樣便能夠完整地了解目前應用所存在的安全防護情況。
綜合以上四類方式,可以實現應用運行時的自我防護。
在整體防護體系中,RASP會與每個應用耦合,但其與WAF、IDS/IPS、防火墻等防護是并不沖突的。RASP適用于現代開發或應用架構,其與應用、微服務是相伴相生的。因此這些安全解決方案,每個都是縱深防御體系中的一個環節。
代碼疫苗技術實踐
代碼疫苗技術的實踐主要有四類場景。第一類是應對DevOps的檢測防護一體化。由于探針是比較輕量級的,可以隨流水線一同上線發布。在開發和測試環節,可以利用IAST進行漏洞檢測,上線后則可以開啟RASP進行漏洞防護,以實現全流程的檢測防護一體化,使DevOps的效率更高。
第二類場景是紅藍對抗。在這一場景下,RASP充當的是高級漏洞攻擊防護工具的角色。目前紅藍對抗中會更多地應用0day、1day或一些未公開的EXP進行攻防。這對于傳統的流量手段而言是難以防護的,而RASP則有能力應對一些高級攻擊。
第三類場景是應對突發漏洞的應急。RASP能夠提供針對基于行為與調用棧位置威脅的檢測。這可以在一定程度上緩解0day或1day攻擊,為漏洞修復爭取時間。也可以利用RASP提供的熱補丁功能,通過一些簡單配置,先進行第一波漏洞攻擊的防護。
第四類則是應用上線的自免疫。在容器化的環境之中,可以將探針和應用進行打包,使應用在上線之后能夠自帶攻擊防護效果。
代碼疫苗技術也同樣關注性能與熔斷方面的問題。代碼疫苗技術也會提供一些基于CPU或內存、QPS/TPS的熔斷策略。例如,代碼疫苗技術會提供CPU、內存、QPS/TPS的閾值,當超過這一閾值時,探針就會進行熔斷降級,以確保業務優先、不影響業務的運行。
代碼疫苗技術針對IAST與RASP有著一整套應用風險的閉環管理。在IAST層面,在發現漏洞后進行自動化的漏洞驗證,通過在參數點上增加payload進行數據重放(重放量很小)以驗證漏洞。若漏洞存在,則會通過對接的平臺通知企業的相應負責人。此時負責人便可進行漏洞修復或選擇啟動RASP的熱補丁功能模塊進行漏洞的臨時防護。
最后,以2021年Log4j2組件的遠程代碼執行漏洞的防護為例,梳理一下代碼疫苗技術的防護流程。當應用的某個接口或接口背后的實現應用了Log4j2的組件并開啟了模塊化JNDI的Log4j棧內服務輸出與日志輸出,則系統中就會存在這一漏洞。
對攻擊者而言,探測到漏洞存在,即可基于漏洞的接口發送HTTP請求,JNDI注入的數據傳入到Log4j的寫日志操作之中。當寫日志操作執行時,就會觸發這一漏洞,并請求攻擊者的服務器,將外部的class文件加載到應用之中,從而造成遠程代碼執行。
在這一過程中,有多個步驟都是RASP能夠進行攔截的。首先,在發送寫日志請求時,會內部發送一個類似于SSRF的請求,這是RASP能夠進行的第一層防護。其次,在攻擊者進行JNDI注入時,RASP也能夠對這一操作進行攔截。最后,在攻擊者進行命令執行的環節,RASP同樣會針對這一操作采取相應的防護。
當漏洞的原理明晰之后,可以通過熱補丁對漏洞點進行精準插樁,同時基于插樁技術梳理應用所有依賴的組件與版本號,結合SCA或OSS的功能對組件漏洞進行分析。因此,代碼疫苗技術能夠對Log4j2這類0day漏洞進行較好防護并為漏洞的修復爭取寶貴的時間。
?
嘉賓介紹:
懸鏡安全CTO寧戈,擁有10年前沿安全技術研究實踐經驗,長期從事系統軟件與應用軟件的漏洞研究及自動化檢測技術研究,專注于IAST、RASP等運行時檢測防御技術及DevSecOps體系的產品化實踐。負責懸鏡IAST、RASP、SCA等多個產品線的設計與研發。擁有多項原創發明專利授權,多次參與國家級科研和安全保障項目,獲得多個國家級網絡安全領域獎項。