亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

基于eBPF的安全可信協(xié)議棧

今天為大家介紹清華大學(xué)徐恪老師團(tuán)隊(duì)提出的一個(gè)面向無狀態(tài)協(xié)議攻擊的防御系統(tǒng)——ICMP Filter,其能夠以防御組件的形式熱加載進(jìn)Linux內(nèi)核中,監(jiān)測入站ICMP報(bào)文的頻率和語義特性。系統(tǒng)在維持輕量化設(shè)計(jì)的同時(shí),對潛在的惡意攻擊報(bào)文進(jìn)行提前過濾,并向用戶及時(shí)反饋防御日志。目前的實(shí)現(xiàn)可以應(yīng)用于Linux 6.4以上的版本中。

GitHub項(xiàng)目地址:

https://github.com/Internet-Architecture-and-Security/eBPF-based-Defense-Against-TCP-IP-Exploits-via-Forged-ICMP-Errors

01?研究背景:無狀態(tài)協(xié)議的語義缺失問題

TCP/IP協(xié)議棧通過分層設(shè)計(jì)實(shí)現(xiàn)了網(wǎng)絡(luò)互聯(lián)的標(biāo)準(zhǔn)化與高效性,它定義了數(shù)據(jù)如何在網(wǎng)絡(luò)中封裝、尋址和傳輸,支撐了全球互聯(lián)網(wǎng)Internet的互聯(lián)互通。其中,無狀態(tài)的UDP/ICMP等協(xié)議,憑借低開銷、實(shí)時(shí)性強(qiáng)的特性,廣泛應(yīng)用于視頻流傳輸、在線游戲、網(wǎng)絡(luò)診斷(如ping/traceroute)等場景,靈活滿足了不同應(yīng)用對可靠性、速度及功能的需求,共同構(gòu)建了現(xiàn)代網(wǎng)絡(luò)通信的基石。

然而,由于UDP/ICMP的無狀態(tài)設(shè)計(jì)特性,在當(dāng)前廣泛應(yīng)用的Linux內(nèi)核實(shí)現(xiàn)中并不會(huì)專門維護(hù)其對應(yīng)的協(xié)議狀態(tài)機(jī),而對于這兩種報(bào)文合法性的校驗(yàn)往往采用弱校驗(yàn)的方式,在弱校驗(yàn)下攻擊者可以較低的成本輕易構(gòu)造內(nèi)嵌報(bào)文以欺騙內(nèi)核協(xié)議棧,無狀態(tài)協(xié)議的語義缺失無疑為攻擊者帶來了可乘之機(jī)。近年來,該問題也引起了學(xué)術(shù)界的關(guān)注,在國際四大安全會(huì)議上多個(gè)研究均利用此機(jī)制實(shí)現(xiàn)了對TCP連接的攻擊甚至劫持。

本系統(tǒng)通過抓住這類問題的本質(zhì),從根源上對協(xié)議棧進(jìn)行防護(hù),并基于Linux內(nèi)核的eBPF子系統(tǒng)進(jìn)行實(shí)現(xiàn),相比于Linux內(nèi)核補(bǔ)丁或內(nèi)核模塊,具有更好的可移植性和魯棒性。

02?基礎(chǔ)技術(shù):Linux內(nèi)核利器eBPF介紹

eBPF是一種可以在特權(quán)級上下文(如操作系統(tǒng)內(nèi)核)中運(yùn)行用戶自定義程序的技術(shù),是對Linux內(nèi)核中的數(shù)據(jù)包過濾技術(shù)BPF(Berkeley Packet Filter)的擴(kuò)展,其能夠在不改變內(nèi)核源碼或加載內(nèi)核模塊的前提下幫助用戶擴(kuò)展額外功能,如今已被實(shí)現(xiàn)在Linux主線中。

eBPF的核心實(shí)現(xiàn)是一個(gè)虛擬機(jī),能夠運(yùn)行自定義的64位的RISC指令集。用戶通過編寫自定義的eBPF程序,通過編譯器生成BPF字節(jié)碼,隨后加載進(jìn)內(nèi)核中的eBPF子系統(tǒng)執(zhí)行JIT(Just-in-Time)編譯和驗(yàn)證,并調(diào)用helper API與操作系統(tǒng)運(yùn)行時(shí)進(jìn)行交互。eBPF子系統(tǒng)中同時(shí)實(shí)現(xiàn)了eBPF Map,用戶可以通過eBPF程序和系統(tǒng)調(diào)用兩種方式訪問eBPF Map,使用API對數(shù)據(jù)進(jìn)行讀寫,以實(shí)現(xiàn)狀態(tài)存儲(chǔ)與通信需求。eBPF通過指定程序類型以將eBPF程序掛載至內(nèi)核中預(yù)設(shè)的不同的鉤子處,截至目前eBPF中負(fù)責(zé)協(xié)議棧入站數(shù)據(jù)包處理的程序類型主要有3類,xdp (Linux 4.8引入), tc (Linux 4.1引入)和netfilter (Linux 6.4引入)。

圖1 Linux中的eBPF實(shí)現(xiàn)

03?系統(tǒng)設(shè)計(jì):無狀態(tài)協(xié)議攻擊防御系統(tǒng)

團(tuán)隊(duì)提出的面向無狀態(tài)協(xié)議攻擊的防御系統(tǒng)主要分為兩個(gè)部分,其一是內(nèi)嵌無狀態(tài)協(xié)議的ICMP Error報(bào)文過濾模塊,其二是ICMP輸入速率限制模塊。防御機(jī)制以eBPF的netfilter類程序的方式實(shí)現(xiàn),掛載在NF_INET_LOCAL_IN鉤子處,該鉤子位于Linux內(nèi)核的IP數(shù)據(jù)包入站路徑上,對于所有的入站數(shù)據(jù)包的處理,均會(huì)調(diào)用該eBPF程序進(jìn)行額外的過濾和防御。

1.內(nèi)嵌無狀態(tài)協(xié)議的ICMP Error報(bào)文過濾模塊

當(dāng)入站數(shù)據(jù)包為ICMP Error報(bào)文時(shí),此模塊會(huì)被激活并嘗試過濾具有威脅的數(shù)據(jù)包。RFC 792中規(guī)定,當(dāng)觸發(fā)ICMP Error報(bào)文時(shí),需在ICMP的數(shù)據(jù)字段內(nèi)嵌觸發(fā)該Error報(bào)文的原IP報(bào)文的前28個(gè)字節(jié)。28個(gè)字節(jié)中包含了原報(bào)文狀態(tài)相關(guān)的重要信息,如IP首部的協(xié)議字段,TCP/UDP的源目的端口號,TCP的序列號等。對于內(nèi)嵌的原報(bào)文為有狀態(tài)報(bào)文(TCP),在內(nèi)核中已存在較強(qiáng)的校驗(yàn)機(jī)制,故不做處理;對于內(nèi)嵌的原報(bào)文為無狀態(tài)報(bào)文(UDP/ICMP),由于內(nèi)核并未維護(hù)具體狀態(tài)信息,故轉(zhuǎn)而采取了弱校驗(yàn),攻擊者可以輕易地構(gòu)造偽造報(bào)文以繞過。如果內(nèi)嵌報(bào)文是被動(dòng)產(chǎn)生的報(bào)文,如ICMP Error/ICMP Echo Reply,由于這類報(bào)文并不是由終端主動(dòng)產(chǎn)生,理論上不應(yīng)再次觸發(fā)ICMP Error報(bào)文,故報(bào)文過濾模塊對這類報(bào)文進(jìn)行了過濾。特別地,對于ICMP Redirect報(bào)文,其主要用于通告終端到目的IP的新的網(wǎng)關(guān)選擇,正常情況下只是為了通告較短的路徑,就算按照原來的路徑數(shù)據(jù)包也能順利送達(dá)目的地,但是一旦被攻擊者利用,就可以輕易達(dá)成對指定目的IP流量的DoS或者劫持攻擊,故對于這類報(bào)文,一旦其中內(nèi)嵌的原報(bào)文為無狀態(tài)協(xié)議,那么報(bào)文過濾模塊也會(huì)將其過濾。

圖2 ICMP Filter在Linux內(nèi)核中的執(zhí)行流程圖

2.ICMP輸入速率限制模塊

攻擊者在嘗試?yán)肐CMP Error報(bào)文進(jìn)行攻擊時(shí),暴力枚舉可能的內(nèi)部無狀態(tài)報(bào)文是一種常見的方式,此外,當(dāng)偽造的ICMP Error報(bào)文通過協(xié)議棧的校驗(yàn)后,攻擊者仍會(huì)通過ICMP報(bào)文的反饋機(jī)制嘗試觀測側(cè)信道。以上兩種情況均會(huì)產(chǎn)生大量的ICMP報(bào)文,在目前版本的Linux內(nèi)核實(shí)現(xiàn)中,只對ICMP報(bào)文的輸出速率進(jìn)行了限制,以防御DoS攻擊,但是并未對輸入速率進(jìn)行額外限制。考慮到攻擊者有可能會(huì)擁有一個(gè)IPv4網(wǎng)段,在本模塊中,對來自每個(gè)/24網(wǎng)段的ICMP報(bào)文進(jìn)行獨(dú)立限速,為防止限速閾值限制產(chǎn)生側(cè)信道,每秒鐘隨機(jī)接收500~1000個(gè)ICMP報(bào)文,具體實(shí)現(xiàn)通過對每個(gè)網(wǎng)段基于eBPF Map獨(dú)立維護(hù)一個(gè)LRU credit表項(xiàng)完成。由于內(nèi)核線程在處理數(shù)據(jù)包是并行的,為防止讀寫競爭,對于表項(xiàng)的修改應(yīng)設(shè)計(jì)對應(yīng)的同步互斥機(jī)制,一個(gè)比較簡單的方式是使用自旋鎖。然而,當(dāng)攻擊者構(gòu)造大量ICMP報(bào)文時(shí),使用自旋鎖會(huì)帶來頭阻問題,在一定程度上甚至?xí)_(dá)到DoS攻擊的效果。對此,在此模塊中,使用GCC提供的原子操作指令,通過“嘗試-回退”的方式更新credit值,在避免讀寫競爭的同時(shí)近似逼近原本預(yù)期達(dá)到的效果。

3.防御日志監(jiān)測模塊

為了方便用戶觀測兩個(gè)模塊的防御記錄,以及時(shí)做出應(yīng)對,本系統(tǒng)中通過Ring Buffer類型的eBPF Map實(shí)現(xiàn)了日志系統(tǒng),能夠?qū)?nèi)核中eBPF程序?qū)嶋H進(jìn)行的防御操作及時(shí)反饋到用戶空間,在日志信息中包含兩個(gè)子模塊具體進(jìn)行的操作以及被過濾報(bào)文的源IP地址。

圖3 ICMP Filter總體架構(gòu)圖

04?結(jié)語

ICMP Filter從無狀態(tài)協(xié)議攻擊的成因出發(fā),利用Linux的eBPF子系統(tǒng)完整實(shí)現(xiàn)了對這類攻擊依賴的主要報(bào)文的過濾和防御,并且設(shè)置了日志系統(tǒng)將防御記錄第一時(shí)間反饋給用戶。團(tuán)隊(duì)后續(xù)會(huì)繼續(xù)對Linux內(nèi)核協(xié)議棧漏洞的系統(tǒng)防御進(jìn)行深入研究,并與業(yè)界和社區(qū)開展密切合作,將成果服務(wù)于社區(qū)生態(tài)。

敬請關(guān)注團(tuán)隊(duì)后續(xù)的更多研究成果發(fā)布!

聲明:本文來自賽博新經(jīng)濟(jì),稿件和圖片版權(quán)均歸原作者所有。所涉觀點(diǎn)不代表東方安全立場,轉(zhuǎn)載目的在于傳遞更多信息。如有侵權(quán),請聯(lián)系rhliu@skdlabs.com,我們將及時(shí)按原作者或權(quán)利人的意愿予以更正。

上一篇:因違反網(wǎng)絡(luò)安全合規(guī)要求,這家公司被罰超1000萬元

下一篇:Elastic Security 2024全球威脅報(bào)告概述