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