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