◆褚蕾蕾 竺 德
?
網(wǎng)絡(luò)協(xié)議二義性及其帶來的安全問題研究
◆褚蕾蕾 竺 德
(安徽大學(xué)網(wǎng)絡(luò)信息中心 安徽 230601)
網(wǎng)絡(luò)協(xié)議規(guī)范了網(wǎng)絡(luò)交互過程中進(jìn)行數(shù)據(jù)交換的規(guī)則、標(biāo)準(zhǔn)和約定,是計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)組成部分。然而,網(wǎng)絡(luò)協(xié)議內(nèi)部不同字段包含不同含義,且不同字段的組合多種多樣,在網(wǎng)絡(luò)協(xié)議規(guī)范中對(duì)不同字段組合出現(xiàn)的情況并沒有給出明確的處理方式,這就導(dǎo)致了不同廠商、不同研究機(jī)構(gòu)處理結(jié)果的不同,即出現(xiàn)了網(wǎng)絡(luò)協(xié)議二義性。本文中,作者梳理了從網(wǎng)絡(luò)層到應(yīng)用層三類重要協(xié)議(IP、TCP、HTTP)的二義性研究成果,并對(duì)TCP序列號(hào)帶來的信息泄露、隱蔽端口掃描等問題進(jìn)行實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,網(wǎng)絡(luò)協(xié)議二義性確實(shí)能夠帶來一系列安全問題,需要引起足夠的重視。
IP協(xié)議;TCP協(xié)議;HTTP協(xié)議;網(wǎng)絡(luò)協(xié)議二義性
網(wǎng)絡(luò)協(xié)議是不同計(jì)算機(jī)之間通信共同遵守的規(guī)則、標(biāo)準(zhǔn)和規(guī)范,它定義了兩臺(tái)計(jì)算機(jī)之間如果想要建立成功的通信所必須進(jìn)行的步驟、必須進(jìn)行的數(shù)據(jù)交換和數(shù)據(jù)格式,是計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)。
網(wǎng)絡(luò)協(xié)議分為不同的字段,每個(gè)字段都有明確的含義。隨著時(shí)代的發(fā)展,有些字段已經(jīng)失去了原有的意義。然而,為了與舊系統(tǒng)保持最大的兼容,網(wǎng)絡(luò)協(xié)議往往保留了這些字段,有些可能賦予了新的含義。
每種網(wǎng)絡(luò)協(xié)議的字段數(shù)量不同,字段內(nèi)可能的取值也不相同。網(wǎng)絡(luò)協(xié)議往往只規(guī)范字段正確的取值方式,對(duì)于不正確的取值如何處理,網(wǎng)絡(luò)協(xié)議卻大多都沒有明確的說明,不同廠商在實(shí)現(xiàn)的時(shí)候也大多根據(jù)自身情況來做,并沒有形成統(tǒng)一的行業(yè)規(guī)范,這就導(dǎo)致了網(wǎng)絡(luò)協(xié)議錯(cuò)誤處理的不一致性。一般情況下普通用戶會(huì)認(rèn)為這種不一致性不會(huì)帶來嚴(yán)重的危害。然而網(wǎng)絡(luò)中惡意攻擊者和不同廠商網(wǎng)絡(luò)中間件的存在,讓這種不一致性所帶來的處理路徑的差異會(huì)進(jìn)一步放大,就有可能給普通用戶帶來嚴(yán)重的安全威脅。
在本文中,作者梳理了20多年來由于網(wǎng)絡(luò)協(xié)議二義性所產(chǎn)生的攻擊手段,內(nèi)容橫跨網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,充分展示了網(wǎng)絡(luò)協(xié)議二義性給計(jì)算機(jī)網(wǎng)絡(luò)和網(wǎng)絡(luò)用戶帶來的潛在威脅。同時(shí)作者進(jìn)一步研究了常用的簡(jiǎn)單郵件傳輸協(xié)議SMTP,對(duì)協(xié)議頭部字段進(jìn)行分析和實(shí)驗(yàn),對(duì)不同供應(yīng)商測(cè)量二義性的存在。實(shí)驗(yàn)結(jié)果表明,SMTP協(xié)議頭部存在網(wǎng)絡(luò)二義性,可能給收件人帶來潛在的安全威脅。
按照計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)七層模型的劃分,IP協(xié)議工作在網(wǎng)絡(luò)層,主要負(fù)責(zé)端到端或(路由)節(jié)點(diǎn)到(路由)節(jié)點(diǎn)間網(wǎng)絡(luò)數(shù)據(jù)包的傳輸。IP協(xié)議是計(jì)算機(jī)網(wǎng)絡(luò)最古老的協(xié)議之一,最早可以追溯到1974年。圖1是IP頭格式,由RFC 7910約定和實(shí)現(xiàn)。
圖1 IP頭格式信息
在IP頭中,TTL字段主要用來標(biāo)識(shí)報(bào)文在網(wǎng)絡(luò)中的生存周期。最初協(xié)議設(shè)計(jì)的時(shí)候,TTL是以時(shí)間為單位計(jì)數(shù)的,每過一秒鐘TTL值減一。然而在實(shí)際實(shí)現(xiàn)過程中,按時(shí)間計(jì)數(shù)變成了按經(jīng)過網(wǎng)絡(luò)中轉(zhuǎn)設(shè)備的跳數(shù)計(jì)算,每經(jīng)過一個(gè)網(wǎng)絡(luò)中轉(zhuǎn)設(shè)備,TTL的值必須減一。如果某個(gè)報(bào)文TTL的值為0,該報(bào)文將被直接丟棄,并向源地址發(fā)送目標(biāo)不可達(dá)的ICMP消息。這樣做的目的,是為了避免某個(gè)報(bào)文由于找不到合適的路由或者路由算法形成環(huán)路以后在網(wǎng)絡(luò)中循環(huán)傳遞而過度占用網(wǎng)絡(luò)資源。TTL長(zhǎng)度是8bit,因此該字段能夠設(shè)置的值范圍是0~255。
然而,利用TTL字段的特性,攻擊者可以精心構(gòu)造攻擊報(bào)文,使網(wǎng)絡(luò)檢測(cè)設(shè)備與報(bào)文接收設(shè)備收到的內(nèi)容不同,從而逃避網(wǎng)絡(luò)檢測(cè)??紤]如圖2的網(wǎng)絡(luò)情況。
假設(shè)攻擊者到中間網(wǎng)絡(luò)防護(hù)設(shè)備的TTL跳數(shù)為10,網(wǎng)絡(luò)防護(hù)設(shè)備后面經(jīng)過一個(gè)網(wǎng)絡(luò)中轉(zhuǎn)設(shè)備連接受害者主機(jī)。那么,攻擊者將能夠通過挑選不同的TTL值(這里可以挑選10或11,使得部分報(bào)文在經(jīng)過網(wǎng)絡(luò)防護(hù)設(shè)備或網(wǎng)絡(luò)中轉(zhuǎn)設(shè)備后,由于TTL減為0,報(bào)文自動(dòng)丟棄),導(dǎo)致防火墻收到報(bào)文內(nèi)容完全不同于受害者主機(jī)收到的內(nèi)容,逃避網(wǎng)絡(luò)防護(hù)設(shè)備的檢測(cè)。
圖2 IP頭TTL字段攻擊