DNS over QUIC
概述 DNS over QUIC和QUIC流量是加密的,這意味著在流量中沒有明文DNS消息或明文SNI或HOST信息。因此,我們需要采用不同的方法來準確地識別這些流量。
DNS over QUIC DNS over QUIC是DNS通過QUIC協(xié)議傳輸?shù)募用馨姹?。由于QUIC本身是基于UDP協(xié)議的,所以DNS over QUIC的數(shù)據(jù)包也是基于UDP協(xié)議的。在這種情況下,我們可以根據(jù)QUIC協(xié)議頭部中的版本號(Version)和加密密鑰(Key Phase)來識別DNS over QUIC流量。
QUIC協(xié)議頭部中的Version字段指示了QUIC版本。DNS over QUIC使用的版本號為0xff00001d。因此,我們可以檢查流量中QUIC協(xié)議頭部的Version字段是否為0xff00001d,以確定這是否為DNS over QUIC流量。
另一個識別DNS over QUIC的關(guān)鍵是QUIC協(xié)議頭部中的Key Phase字段。這個字段指示了加密密鑰的版本。對于DNS over QUIC,密鑰版本為0。因此,我們可以檢查流量中QUIC協(xié)議頭部的Key Phase字段是否為0,以確定這是否為DNS over QUIC流量。
QUIC QUIC是一種新的協(xié)議,它是基于UDP協(xié)議的,并且使用了TLS 1.3來加密數(shù)據(jù)。由于QUIC本身是加密的,所以在流量中沒有明文SNI或HOST信息。然而,我們可以通過以下方法來識別QUIC流量:
首先,我們可以檢查流量中是否包含QUIC協(xié)議頭部。QUIC協(xié)議頭部由公共頭(Public Header)和私有頭(Private Header)組成。公共頭包含了QUIC版本號、連接ID、數(shù)據(jù)包類型和加密標志等信息。私有頭包含了流ID和流類型等信息。因此,如果流量中包含了QUIC協(xié)議頭部,那么這就是QUIC流量。
其次,我們可以檢查QUIC協(xié)議頭部中的Version字段。與DNS over QUIC類似,QUIC協(xié)議頭部中的Version字段也指示了QUIC版本。如果Version字段的值不是0xff00001d,那么這就是一個普通的QUIC流量。
最后,我們可以根據(jù)QUIC協(xié)議頭部中的加密標志(Encryption Flag)來識別QUIC流量。加密標志指示了QUIC數(shù)據(jù)包是否已經(jīng)被加密。如果加密標志為1,那么這是加密的QUIC流量,否則就是明文的QUIC流量。然而,需要注意的是,即使流量被加密了,也不一定是DNS over QUIC,因為QUIC還被用于其他類型的流量,如HTTP/3等。
當檢測QUIC協(xié)議時,除了檢查版本號和加密標志外,還可以使用以下方法來進一步識別QUIC流量:
檢查連接ID 在QUIC協(xié)議中,每個連接都有一個唯一的連接ID,它用于標識連接。這個連接ID在QUIC協(xié)議頭部的公共頭(Public Header)中。由于QUIC連接的ID通常是隨機生成的,因此可以使用連接ID來進一步確定是否為QUIC流量。
檢查流ID 在QUIC協(xié)議中,每個連接都可以包含多個流,每個流都有一個唯一的流ID。這個流ID也包含在QUIC協(xié)議頭部的私有頭(Private Header)中。由于QUIC流ID也是隨機生成的,因此可以使用流ID來進一步確定是否為QUIC流量。
檢查QUIC協(xié)議版本 除了版本號外,QUIC協(xié)議還有一個魔數(shù)(Magic Number),它是用于識別QUIC協(xié)議的標志。魔數(shù)在QUIC協(xié)議頭部的公共頭中,并且其值為0xff00001c。因此,可以通過檢查魔數(shù)來確定是否為QUIC流量。
檢查QUIC標識 QUIC還有一個特殊的QUIC標識(QUIC Tag),它在QUIC協(xié)議頭部的公共頭中。QUIC標識包含了QUIC流量的相關(guān)信息,例如流類型和加密信息等??梢酝ㄟ^檢查QUIC標識來進一步確定是否為QUIC流量。
需要注意的是,以上方法并非完美的識別QUIC流量的方法,因為攻擊者可以偽造QUIC協(xié)議頭部。因此,在實際應(yīng)用中,需要結(jié)合多種特征來判斷是否為QUIC流量,并且需要對這些特征進行動態(tài)更新以適應(yīng)新的攻擊手段。
此外,對于QUIC中的加密數(shù)據(jù),我們可以使用TLS 1.3來解密它們。TLS 1.3使用密鑰交換協(xié)議來協(xié)商共享密鑰,然后使用這些密鑰來加密和解密數(shù)據(jù)。因此,我們需要在DPI程序中實現(xiàn)TLS 1.3的解密功能,以便在檢測QUIC流量時能夠解密加密數(shù)據(jù),并進一步分析流量的內(nèi)容。
在QUIC中,每個數(shù)據(jù)包都有一個公共頭(Public Header)和一個私有頭(Private Header)。公共頭中包含了版本號、連接ID和流ID等信息,私有頭中包含了數(shù)據(jù)流的一些控制信息。QUIC使用了一種稱為“比特格式”的頭部壓縮機制,使得數(shù)據(jù)包頭部盡可能地小。
在識別DNS over QUIC時,需要注意以下幾點:
版本號 DNS over QUIC使用的版本號是0x00000001。因此,我們可以通過檢查版本號來確定是否為DNS over QUIC流量。
加密密鑰版本 在DNS over QUIC中,DNS數(shù)據(jù)是被加密的。加密密鑰版本在QUIC協(xié)議頭部中。如果加密密鑰版本不為0,那么就是加密的DNS over QUIC流量。
SNI和Host信息 DNS over QUIC中的SNI和Host信息是被加密的。因此,在檢測DNS over QUIC流量時,我們無法直接從SNI或Host字段中獲取信息。相反,我們需要使用TLS 1.3協(xié)議來解密加密的DNS數(shù)據(jù)。TLS 1.3使用DH密鑰交換協(xié)議來協(xié)商共享密鑰,然后使用這些密鑰來加密和解密數(shù)據(jù)。因此,我們需要在DPI程序中實現(xiàn)TLS 1.3的解密功能,以便在檢測DNS over QUIC流量時能夠解密加密數(shù)據(jù),并獲取SNI和Host信息。
需要注意的是,以上方法并不是完美的識別DNS over QUIC流量的方法,因為攻擊者可以偽造QUIC協(xié)議頭部和加密數(shù)據(jù)。因此,在實際應(yīng)用中,需要結(jié)合多種特征來判斷是否為DNS over QUIC流量,并且需要對這些特征進行動態(tài)更新以適應(yīng)新的攻擊手段。