施潤(rùn)杰 康曉鳳 王可 茅璋瑞
摘? 要:針對(duì)互聯(lián)網(wǎng)面臨的僵尸網(wǎng)絡(luò)、滲透等惡意威脅,如何確保網(wǎng)絡(luò)設(shè)備的高可靠性、數(shù)據(jù)的安全性和完整性,是急需解決的問(wèn)題。本文設(shè)計(jì)實(shí)現(xiàn)了內(nèi)核級(jí)網(wǎng)絡(luò)流量監(jiān)測(cè)系統(tǒng),本系統(tǒng)包括流量采集、流量檢測(cè)、流量統(tǒng)計(jì)、防護(hù)模塊和Web控制臺(tái)五大模塊,實(shí)現(xiàn)了流量的捕獲和監(jiān)測(cè)均在內(nèi)核完成,減少了性能開(kāi)銷(xiāo)。使用本系統(tǒng)能夠減少服務(wù)器遭受惡意流量攻擊,為眾多Linux服務(wù)器提供強(qiáng)大的保護(hù)。
關(guān)鍵詞:Netfilter;網(wǎng)絡(luò)流量檢測(cè);內(nèi)核態(tài);網(wǎng)絡(luò)安全
中圖分類(lèi)號(hào):TP315? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Kernel-Level Network Traffic Monitoring System
SHI Runjie, KANG Xiaofeng, WANG Ke, MAO Zhangrui
(College of Information Engineering, Xuzhou Institute of Technology, Xuzhou 221000, China)
handchongboy@sina.com; kxfeng07@163.com; admi1n@163.com; 1244529720@qq.com
Abstract: It is urgent to ensure high reliability of network equipment and the security and integrity of data in view of malicious threats such as botnets and infiltrations faced by the Internet. This paper proposes to design and implement a kernel-level network traffic monitoring system which includes five modules: traffic collection, traffic detection, traffic statistics, protection module and Web console. The system realizes that traffic capture and monitoring are completed in the kernel, reducing performance overhead. This system can reduce malicious traffic attack on servers and provide powerful protection for Linux servers.
Keywords: Netfilter; network traffic detection; kernel mode; network security
1? ?引言(Introduction)
隨著網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步和發(fā)展,絕大多數(shù)人在享受網(wǎng)絡(luò)帶來(lái)的便利時(shí),卻忽視了網(wǎng)絡(luò)中潛在危害。由于Linux操作系統(tǒng)的開(kāi)放性、易移植性等優(yōu)良特性使得許多采用Linux操作系統(tǒng)的服務(wù)器暴露在公網(wǎng)中,絕大部分是因?yàn)槿鄙倭己玫姆雷o(hù)和檢測(cè)機(jī)制,導(dǎo)致其在分布式拒絕服務(wù)攻擊、僵尸網(wǎng)絡(luò)等網(wǎng)絡(luò)攻擊面前不堪一擊[1]。
本系統(tǒng)使用Linux的Netfilter機(jī)制,結(jié)合動(dòng)態(tài)可加載內(nèi)核模塊技術(shù)和Netlink通信機(jī)制,實(shí)現(xiàn)了網(wǎng)絡(luò)流量檢測(cè)系統(tǒng)。本系統(tǒng)核心模塊運(yùn)行在Linux內(nèi)核空間,對(duì)數(shù)據(jù)包的收、發(fā)、攔截檢測(cè)均在內(nèi)核空間內(nèi)完成,降低了數(shù)據(jù)包從內(nèi)核空間復(fù)制到用戶(hù)空間的次數(shù),減少了用戶(hù)空間內(nèi)存的消耗[2]。同時(shí),為了最大程度滿足用戶(hù)安全需求,本系統(tǒng)與Web服務(wù)相結(jié)合,用戶(hù)可根據(jù)需求自定義設(shè)置規(guī)則,使用簡(jiǎn)單方便,便于用戶(hù)及時(shí)發(fā)現(xiàn)并攔截服務(wù)器當(dāng)前所遭受的網(wǎng)絡(luò)攻擊。
2? ?Netfilter介紹(Introduction to Netfilter)
Netfilter是Linux 2.4及以上版本所引入的一個(gè)子系統(tǒng),是一個(gè)通用且抽象的框架,作為一套防火墻系統(tǒng)集成到Linux內(nèi)核協(xié)議棧中[3]。它擁有完善的hook機(jī)制,擁有多個(gè)hook節(jié)點(diǎn),在網(wǎng)絡(luò)協(xié)議棧的重要節(jié)點(diǎn)上按照優(yōu)先級(jí)設(shè)置了多個(gè)鉤子函數(shù),根據(jù)各個(gè)函數(shù)的優(yōu)先級(jí)組成多條處理鏈。當(dāng)分組數(shù)據(jù)包通過(guò)Linux的TCP/IP協(xié)議棧時(shí),將根據(jù)相應(yīng)節(jié)點(diǎn)上的各個(gè)鉤子函數(shù)的優(yōu)先級(jí)進(jìn)行處理,根據(jù)鉤子函數(shù)返回的結(jié)構(gòu)決定是繼續(xù)正常傳輸數(shù)據(jù)包,還是丟棄數(shù)據(jù)包抑或是進(jìn)行其他操作。本系統(tǒng)采用Linux內(nèi)核版本4.15,Netfilter支持IPV 4、DECnet等多個(gè)協(xié)議棧,使用Netfilter提供的hook管理機(jī)制能夠?qū)崿F(xiàn)數(shù)據(jù)包過(guò)濾、網(wǎng)絡(luò)地址轉(zhuǎn)化等諸多功能。
Netfilter在IPV 4協(xié)議棧上設(shè)置了五個(gè)hook點(diǎn),這五個(gè)hook點(diǎn)分別為NF_INET_PRE_ROUTING、NF_INET_LOCAL_IN、NF_INET_FORWARD、NF_INET_LOCAL_OUT、NF_INET_POST_ROUTING[4]。數(shù)據(jù)包流經(jīng)節(jié)點(diǎn)流程圖如圖1所示。
4.15版本的Linux內(nèi)核為ARP協(xié)議另外設(shè)置了三個(gè)hook點(diǎn),當(dāng)ARP數(shù)據(jù)包流經(jīng)主機(jī)時(shí),內(nèi)核對(duì)ARP數(shù)據(jù)包的處理過(guò)程不再采取上述過(guò)程,而是分別流經(jīng)NF_ARP_IN、NF_ARP_OUT、NF_ARP_FORWARD這三個(gè)處理節(jié)點(diǎn)。與上述五個(gè)處理節(jié)點(diǎn)不同的是,內(nèi)核Netfilter針對(duì)ARP數(shù)據(jù)包處理少了PRE_ROUTING和POST_ROUTING這兩個(gè)節(jié)點(diǎn),數(shù)據(jù)包流經(jīng)節(jié)點(diǎn)流程圖如圖2所示。Linux Netfilter允許內(nèi)核的任意模塊對(duì)Netfilter任意一個(gè)hook點(diǎn)進(jìn)行注冊(cè)、掛載鉤子函數(shù)操作。Linux使用struct nf_hook_ops結(jié)構(gòu)體完成hook點(diǎn)鉤子的注冊(cè)。
3? ?Netlink介紹(Introduction to Netlink)
Netlink是Linux所提供的基于socket套接字的通信機(jī)制,該套接字家族是一種IPC Linux內(nèi)核接口,用于內(nèi)核與用戶(hù)進(jìn)程通信,同時(shí)也可用于多個(gè)用戶(hù)空間進(jìn)程通信,雖與傳統(tǒng)的網(wǎng)絡(luò)socket套接字不同,但與Unix域套接字類(lèi)似[5]。該機(jī)制基于BSD socket和AF_NETLINK地址簇,使用32位端口號(hào)尋址(也稱(chēng)PID)。
一般情況下,內(nèi)核與用戶(hù)態(tài)進(jìn)程通信使用以下幾種方式:copy_to_user()、procfs接口、sysfs接口和ioctl()系統(tǒng)調(diào)用。這幾種方式都屬于同步通信方式,皆由用戶(hù)發(fā)起向內(nèi)核態(tài)通信的請(qǐng)求,從內(nèi)核態(tài)獲取需要的信息,但是內(nèi)核態(tài)無(wú)法主動(dòng)發(fā)起通信。Netlink與之前幾種方法的通信方式有所不同,其采用異步全雙工的通信形式,支持由內(nèi)核態(tài)主動(dòng)發(fā)起通信請(qǐng)求,向指定PID用戶(hù)態(tài)進(jìn)程廣播消息[6]。內(nèi)核使用Netlink所提供的API,用戶(hù)態(tài)則基于socket應(yīng)用程序接口,內(nèi)核發(fā)送的消息存放在接收進(jìn)程緩沖區(qū)中,若緩沖區(qū)暫不可用,可選擇將進(jìn)程暫時(shí)堵塞。本系統(tǒng)采用Netlink實(shí)現(xiàn)內(nèi)核向用戶(hù)態(tài)進(jìn)程信息的傳遞。
4? 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(System design and implementation)
本系統(tǒng)核心模塊基于Linux的Netfilter框架,結(jié)合Linux動(dòng)態(tài)可加載內(nèi)核技術(shù),采用C語(yǔ)言編寫(xiě),實(shí)現(xiàn)Linux內(nèi)核級(jí)別流量監(jiān)測(cè)。Web前端框架使用Vue.js框架編寫(xiě)。內(nèi)核模塊與用戶(hù)進(jìn)程之間采用Netlink進(jìn)行通信。系統(tǒng)可分為五大功能模塊:流量采集模塊、流量檢測(cè)模塊、流量統(tǒng)計(jì)模塊、防護(hù)模塊、Web控制臺(tái)模塊。五大功能模塊如圖3所示。
4.1? ?流量采集模塊
本功能模塊主要負(fù)責(zé)捕獲所有需要的網(wǎng)絡(luò)數(shù)據(jù)包,基于Linux的內(nèi)核Netfilter框架對(duì)數(shù)據(jù)包進(jìn)行分析,丟棄無(wú)用的廢棄數(shù)據(jù)包,保留有效的數(shù)據(jù)包并傳遞給下一模塊進(jìn)行進(jìn)一步處理分析[7]。數(shù)據(jù)包會(huì)依次流經(jīng)相應(yīng)的hook節(jié)點(diǎn)調(diào)用hook函數(shù)處理。IPV 4協(xié)議棧上設(shè)置了五個(gè)hook點(diǎn):NF_INET_LOCAL_IN、NF_INET_PRE_ROUTING、NF_INET_LOCAL_OUT、NF_INET_FORWARD、NF_INET_POST_ROUTING。4.15版本的Linux內(nèi)核Netfilter為ARP協(xié)議另外設(shè)置了三個(gè)hook點(diǎn):NF_ARP_IN、NF_ARP_OUT、NF_ARP_FORWARD。本系統(tǒng)重點(diǎn)處理分析發(fā)往本機(jī)的數(shù)據(jù)包,因此只需在NF_INET_LOCAL_IN、NF_INET_LOCAL_OUT、NF_ARP_IN、NF_ARP_OUT四個(gè)hook節(jié)點(diǎn)注冊(cè)相應(yīng)的hook處理函數(shù)即可。
傳入hook處理函數(shù)有三個(gè)參數(shù),分別為:void* priv、struct sk_buff* skb、const struct nf_hook_state* state。其中struct sk_buff結(jié)構(gòu)體為網(wǎng)絡(luò)數(shù)據(jù)包的封裝,包含鏈路層、傳輸層、網(wǎng)絡(luò)層數(shù)據(jù)頭信息字段,通過(guò)獲取字段內(nèi)容分析端口號(hào)、協(xié)議類(lèi)型等字段,判斷該數(shù)據(jù)包是否丟棄。若丟棄,則返回NF_DROP;若需要傳遞給下一模塊進(jìn)一步處理,則返回NF_ACCEPT表示接收。
4.2? ?流量檢測(cè)模塊
本功能模塊主要負(fù)責(zé)對(duì)接收的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行進(jìn)一步分析處理,結(jié)合內(nèi)置過(guò)濾規(guī)則,實(shí)現(xiàn)對(duì)惡意流量的檢測(cè),在此基礎(chǔ)上實(shí)現(xiàn)安全組、HTTP黑名單、ARP防護(hù)、ICMP防護(hù)、IP黑名單等基本功能。
本系統(tǒng)成功加載后默認(rèn)所有端口關(guān)閉,不允許其他主機(jī)訪問(wèn)本機(jī)端口。當(dāng)管理者需要開(kāi)放一個(gè)端口時(shí),將開(kāi)放端口號(hào)、允許通過(guò)數(shù)據(jù)包類(lèi)型、允許訪問(wèn)IP存放起來(lái)。
ARP協(xié)議能完成局域網(wǎng)內(nèi)IP地址向MAC地址的轉(zhuǎn)化,但是ARP協(xié)議為無(wú)狀態(tài)的協(xié)議,它不會(huì)去驗(yàn)證發(fā)送者的身份,當(dāng)主機(jī)收到一條ARP請(qǐng)求報(bào)文時(shí),即便這條請(qǐng)求報(bào)文內(nèi)容是偽造的,主機(jī)也會(huì)立即更新ARP緩存表,導(dǎo)致原先發(fā)往目的主機(jī)的網(wǎng)絡(luò)數(shù)據(jù)包錯(cuò)誤地發(fā)送到攻擊者主機(jī)[8]。針對(duì)這一缺陷,本系統(tǒng)在NF_ARP_IN這一hook節(jié)點(diǎn)注冊(cè)了check_in_arp處理函數(shù)。該函數(shù)優(yōu)先檢查hook函數(shù)處理的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議類(lèi)型是否為ARP,若不是則丟棄;若是,則繼續(xù)處理。發(fā)往主機(jī)的ARP數(shù)據(jù)包有兩種類(lèi)型:ARP請(qǐng)求包、ARP響應(yīng)包,對(duì)應(yīng)ARP報(bào)文格式中的Opcode字段,本系統(tǒng)源代碼中分別定義為ARP_REQUEST、ARP_REPLY。處理函數(shù)會(huì)檢查數(shù)據(jù)包Opcode數(shù)值,若既不為ARP_REQUEST,也不為ARP_REPLY,則丟棄,并產(chǎn)生警報(bào)日志;若數(shù)據(jù)包類(lèi)型為ARP響應(yīng)包,則檢查目標(biāo)MAC地址是否為廣播地址,若為廣播地址,則丟棄;若數(shù)據(jù)包類(lèi)型為ARP請(qǐng)求包,則獲取數(shù)據(jù)包的源IP地址并且丟棄該數(shù)據(jù)包。知道源IP地址后,使用ARP協(xié)議廣播獲取源IP地址對(duì)應(yīng)的真實(shí)MAC信息。廣播使用Linux內(nèi)置函數(shù)arp_send(),該函數(shù)邏輯位于net/ipv4/arp.c中。check_in_arp函數(shù)流程如圖4所示。
目前大部分攻擊者采用的ARP欺騙手段都是將ARP數(shù)據(jù)包中Sender IP address修改為本局域網(wǎng)網(wǎng)關(guān)IP地址,Sender MAC address修改為本機(jī)MAC地址,向目標(biāo)攻擊主機(jī)發(fā)送修改后的ARP欺騙包,讓目標(biāo)主機(jī)本應(yīng)該發(fā)往網(wǎng)關(guān)的數(shù)據(jù)包錯(cuò)誤地發(fā)送到了欺騙者主機(jī)??梢园l(fā)現(xiàn),攻擊者著重在ARP_REQUEST部分采取攻擊手段,本系統(tǒng)ARP防護(hù)功能同樣針對(duì)ARP_REQUEST部分進(jìn)行防護(hù)。采取該ARP防護(hù)功能后,主機(jī)將不會(huì)通過(guò)任何ARP請(qǐng)求包,在收到ARP請(qǐng)求包后,丟棄并且ARP廣播獲取源IP地址MAC,源IP主機(jī)收到ARP廣播請(qǐng)求包后,向主機(jī)發(fā)送ARP響應(yīng)包,通過(guò)接收源IP主機(jī)的響應(yīng)包來(lái)動(dòng)態(tài)更新主機(jī)內(nèi)部ARP緩存表信息。ARP緩存表從原來(lái)的被動(dòng)更新到現(xiàn)在的主動(dòng)更新,能夠防范目前大部分的ARP欺騙手段。
本系統(tǒng)在NF_ARP_OUT hook點(diǎn)注冊(cè)了arp_out_check函數(shù)。為防止本機(jī)被入侵后成為ARP欺騙攻擊跳板,arp_out_check處理函數(shù)針對(duì)每個(gè)發(fā)往其他主機(jī)的ARP數(shù)據(jù)包進(jìn)行檢查。arp_out_check函數(shù)的參數(shù)之一為struct sk_buff*skb,struct sk_buff結(jié)構(gòu)體中包含指向網(wǎng)卡設(shè)備的dev成員,通過(guò)該成員即可遍歷獲得對(duì)應(yīng)網(wǎng)卡所有IP、MAC地址,將該信息與數(shù)據(jù)包信息對(duì)比,若不匹配,則丟棄并產(chǎn)生警告信息;若匹配,則通過(guò)。arp_out_check函數(shù)流程如圖5所示。
4.3? ?流量統(tǒng)計(jì)模塊
本模塊設(shè)置定時(shí)器,定時(shí)更新并向下傳遞統(tǒng)計(jì)數(shù)據(jù)。輸出的數(shù)據(jù)包括單位時(shí)間內(nèi)網(wǎng)絡(luò)數(shù)據(jù)包字節(jié)大小總和、TCP連接數(shù)量統(tǒng)計(jì)、惡意數(shù)據(jù)攔截次數(shù)等信息。統(tǒng)計(jì)數(shù)據(jù)信息將會(huì)通過(guò)Netlink傳遞到用戶(hù)進(jìn)程保存起來(lái),最終等待Web控制臺(tái)調(diào)用獲取數(shù)據(jù)。
4.4? ?防護(hù)模塊
本模塊作用為更改、生效相應(yīng)的防護(hù)措施。本系統(tǒng)著重為T(mén)CP、HTTP、主機(jī)端口安全組、ICMP、ARP、IP黑名單等方面提供保護(hù),系統(tǒng)內(nèi)置了一些防護(hù)規(guī)則,如默認(rèn)端口關(guān)閉,發(fā)現(xiàn)IP訪問(wèn)頻率過(guò)快自動(dòng)加入IP黑名單,發(fā)現(xiàn)IP存在掃描端口行為自動(dòng)加入IP黑名單。當(dāng)流量監(jiān)測(cè)模塊監(jiān)測(cè)到惡意流量時(shí),將會(huì)自動(dòng)傳遞規(guī)則信息到防護(hù)模塊更新當(dāng)前防護(hù)措施。用戶(hù)也可通過(guò)Web控制臺(tái)來(lái)手動(dòng)獲取、更新當(dāng)前防護(hù)措施,Web控制臺(tái)與防護(hù)模塊使用Netlink進(jìn)行通信。
4.5? ?Web控制臺(tái)模塊
本模塊負(fù)責(zé)與用戶(hù)的交互,采用適合構(gòu)建用戶(hù)界面的漸進(jìn)式框架Vue.js,具有輕量、簡(jiǎn)易、組件化等優(yōu)點(diǎn),開(kāi)發(fā)效果界面友好,兼容性強(qiáng)。Web控制臺(tái)默認(rèn)監(jiān)聽(tīng)本機(jī)8080端口,系統(tǒng)部署成功后,訪問(wèn)本機(jī)8080端口即可對(duì)防護(hù)規(guī)則進(jìn)行個(gè)性化配置。Web控制臺(tái)前端界面如圖6所示。
用戶(hù)可自由配置安全組規(guī)則,添加允許通過(guò)的端口號(hào)、該端口允許通過(guò)的數(shù)據(jù)包類(lèi)別、允許通過(guò)的IP范圍,修改已有規(guī)則信息等,如圖7所示。
系統(tǒng)核心模塊監(jiān)測(cè)到惡意流量后,將會(huì)產(chǎn)生日志警告信息,通過(guò)Netlink傳遞給相應(yīng)的用戶(hù)進(jìn)程。用戶(hù)進(jìn)程根據(jù)警告信息的級(jí)別、所屬范圍存放到相應(yīng)數(shù)據(jù)庫(kù)中。如圖8所示,用戶(hù)可通過(guò)Web控制臺(tái)獲取對(duì)應(yīng)類(lèi)別的警告日志記錄。
5? ?結(jié)論(Conclusion)
Linux系統(tǒng)因其優(yōu)秀的特性而受到青睞,眾多服務(wù)器也選擇Linux作為操作系統(tǒng)。網(wǎng)絡(luò)中充斥著大量的惡意流量,缺少有效保護(hù)措施的Linux服務(wù)器在那些流量面前不堪一擊。本系統(tǒng)基于Linux Netfilter框架,實(shí)現(xiàn)了Linux操作系統(tǒng)下內(nèi)核級(jí)別流量監(jiān)測(cè)系統(tǒng),對(duì)流量的捕獲、監(jiān)測(cè)均在內(nèi)核空間內(nèi)完成,減少了性能開(kāi)銷(xiāo)。本系統(tǒng)能夠在多種Linux內(nèi)核版本下正常運(yùn)行,并為操作用戶(hù)提供了Web控制臺(tái)可視化交互界面,用戶(hù)只需通過(guò)鼠標(biāo)點(diǎn)擊即可獲取當(dāng)前攔截警告日志,配置符合自身情況的防護(hù)規(guī)則。利用本系統(tǒng)能夠減少服務(wù)器遭受惡意流量攻擊,為眾多Linux服務(wù)器提供強(qiáng)大的保護(hù)。
參考文獻(xiàn)(References)
[1] 高文華.Netfilter/iptables防火墻中精確單模式匹配算法研究[D].成都:電子科技大學(xué),2016.
[2] 鮑娟.基于嵌入式Linux的網(wǎng)絡(luò)流量監(jiān)測(cè)系統(tǒng)[D].武漢:武漢科技大學(xué),2009.
[3] 李志奇,何彥宏,孔德愷.基于Netfilter/Iptables的動(dòng)態(tài)安全防御系統(tǒng)設(shè)計(jì)[J].通信學(xué)報(bào),2018,39(S2):198-203.
[4] ZHU Y Q. Structural analysis and preparation of the Netfilter[J]. Advanced Materials Research, 2014(926):2418-2421.
[5] 周莉,柯健,顧小晶.Netlink套接字在Linux系統(tǒng)通信中的應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2007(03):109-111.
[6] NEIRA-AYUSO P, GASCA R M. LEFEVRE L. Communicating between the kernel and user-space in Linux using Netlink sockets[J]. Software: Practice and Experience, 2010, 40(9):797-810.
[7] 李惠娟,王汝傳,任勛益.基于Netfilter的數(shù)據(jù)包捕獲技術(shù)研究[J].計(jì)算機(jī)科學(xué),2007(06):81-83.
[8] 胡志明.基于ARP欺騙的中間人攻擊與防御技術(shù)研究[J].信息技術(shù)與信息化,2020(12):111-114.
作者簡(jiǎn)介:
施潤(rùn)杰(2000-),男,本科生.研究領(lǐng)域:信息安全.
康曉鳳(1978-),女,碩士,副教授.研究領(lǐng)域:信息安全.
王? ?可(2001-),男,本科生.研究領(lǐng)域:信息安全.
茅璋瑞(2001-),男,本科生.研究領(lǐng)域:信息安全.