李良盛 段海新, 鄭曉峰
1(清華大學(xué)網(wǎng)絡(luò)科學(xué)與網(wǎng)絡(luò)空間研究院 北京 100084)2(北京奇安信科技有限公司 北京 100015)
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的設(shè)備都連接到了互聯(lián)網(wǎng)上,網(wǎng)絡(luò)管理員面臨著更大的挑戰(zhàn)。不同的設(shè)備運(yùn)行著各式各樣的操作系統(tǒng),識別和修補(bǔ)易受攻擊的那些系統(tǒng)至關(guān)重要。網(wǎng)絡(luò)管理員采用多種安全技術(shù)來保護(hù)系統(tǒng)免受惡意活動的影響,而檢測出那些可能使用舊版本或不安全版本的操作系統(tǒng)的設(shè)備是其中一種重要方法。此外,網(wǎng)絡(luò)管理員為了對網(wǎng)絡(luò)中的各種設(shè)備進(jìn)行資產(chǎn)管理,同樣需要操作系統(tǒng)識別技術(shù)識別出設(shè)備的操作系統(tǒng)。因此操作系統(tǒng)識別技術(shù)是重要的網(wǎng)絡(luò)安全技術(shù)。
操作系統(tǒng)指紋識別是指通過網(wǎng)絡(luò)數(shù)據(jù)包識別主機(jī)的操作系統(tǒng)信息。操作系統(tǒng)指紋則是指從某一操作系統(tǒng)所發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包中提取的可以區(qū)分不同操作系統(tǒng)的一系列特征項(xiàng)。其原理是不同的操作系統(tǒng)廠商在實(shí)現(xiàn)TCP/IP協(xié)議棧出現(xiàn)了細(xì)微的差別,這些差別具有獨(dú)特的特性,故而被稱為“指紋”。例如IP協(xié)議的TTL字段以及TCP協(xié)議的窗口字段和選項(xiàng)字段等就是最常見的可以區(qū)分不同操作系統(tǒng)的特征字段。
操作系統(tǒng)識別技術(shù)分為主動和被動兩類。主動操作系統(tǒng)指紋識別需要精心構(gòu)造不同的數(shù)據(jù)包并發(fā)送出去,根據(jù)返回的結(jié)果來分析目標(biāo)的具體操作系統(tǒng)。此方法最大的缺點(diǎn)在于發(fā)送的數(shù)據(jù)包會被防火墻或者入侵檢測系統(tǒng)攔截,并且會暴露自身的信息。被動操作系統(tǒng)指紋識別比主動操作系統(tǒng)指紋識別來說比較受限,只能被動地接受流量,從流量中分析出操作系統(tǒng)信息。本文主要研究被動操作系統(tǒng)識別。
被動操作系統(tǒng)識別技術(shù)主要根據(jù)TCP會話建立時(shí)發(fā)送的SYN數(shù)據(jù)包中的IP和TCP協(xié)議的特征字段來識別不同類型和版本的操作系統(tǒng),其中的代表性工具就是p0f[1]。被動操作系統(tǒng)識別工具依賴于自身的指紋庫,但是p0f的指紋庫已經(jīng)長期沒有更新。在識別流量的過程中,首先從流量中提取各個特征項(xiàng),然后用特征項(xiàng)組成的指紋去指紋庫中匹配。匹配成功輸出識別結(jié)果,匹配不成功則輸出未知。然而指紋庫的生成需要搜集不同類型和版本的操作系標(biāo)簽數(shù)據(jù)。人工去搜集標(biāo)簽數(shù)據(jù)的方法效率低下,而且真實(shí)網(wǎng)絡(luò)環(huán)境中操作系統(tǒng)所產(chǎn)生的指紋多種多樣,僅僅憑人工搜集很難搜集完整。因此目前亟需一種自動化標(biāo)記指紋的方法。
針對該問題,本文提出一種基于HTTP User-Agent來標(biāo)記指紋的指紋庫自動化生成方法。采用User-Agent提取出的操作系統(tǒng)類型和版本信息作為IP和TCP協(xié)議提取出的指紋的標(biāo)記。然后在大量HTTP網(wǎng)絡(luò)流量數(shù)據(jù)集上進(jìn)行統(tǒng)計(jì)。根據(jù)統(tǒng)計(jì)結(jié)果發(fā)現(xiàn),單個指紋統(tǒng)計(jì)出的出現(xiàn)頻率最高的一個或幾個標(biāo)記占該指紋總數(shù)量的絕大部分。因此選擇出現(xiàn)頻率出現(xiàn)較高的操作系統(tǒng)類型和版本作為指紋的最終標(biāo)記。這樣避免了HTTP User-Agent容易被修改帶來的不可信問題。
通過約2.2億的真實(shí)網(wǎng)絡(luò)產(chǎn)生的客戶端方向的HTTP流量數(shù)據(jù),最終得到390條操作系統(tǒng)指紋標(biāo)記數(shù)據(jù),涵蓋了主流操作系統(tǒng)的各個版本,而p0f同方向的指紋只有91條。用新的指紋庫和p0f在相同的數(shù)據(jù)集上進(jìn)行了對比驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,新的指紋庫在識別正確率上優(yōu)于p0f,證明了本方法的有效性。
p0f是被動操作系統(tǒng)指紋識別的代表性工具,最新版本為3.09b。p0f可以處理離線的pcap文件,也可以實(shí)時(shí)運(yùn)行監(jiān)控網(wǎng)絡(luò)流量數(shù)據(jù)。p0f通過TCP建立連接時(shí)雙方首次發(fā)送的SYN和SYN ACK數(shù)據(jù)包來識別通信雙方的操作系統(tǒng)。p0f的指紋的特征字段由IP協(xié)議和TCP協(xié)議的特征字段組成,包括IP協(xié)議的TTL字段、TCP協(xié)議的窗口字段、TCP頭部選項(xiàng)中的最大報(bào)文段長度(MSS)和窗口擴(kuò)大因子(WSCALE)和選項(xiàng)的排列順序等。但是p0f目前缺乏更新,指紋數(shù)據(jù)庫最后更新時(shí)間是2016年4月,包含的操作系統(tǒng)也比較少,缺乏Windows 10等比較新的操作系統(tǒng)版本的指紋數(shù)據(jù)。
Ettercap[2]是一款可用的被動操作系統(tǒng)指紋識別工具,既可以檢測中間人攻擊,也能夠執(zhí)行操作系統(tǒng)指紋識別。和p0f一樣,Ettercap使用TCP SYN數(shù)據(jù)包信息進(jìn)行操作系統(tǒng)分類。然而,Ettercap并不是一個純粹的被動操作系統(tǒng)指紋識別工具,因?yàn)樗蛳到y(tǒng)發(fā)送TCP SYN包并檢查響應(yīng)包。Ettercap目前最近的更新是在2015年3月,指紋庫更新時(shí)間是2012年。
Sator[3]是一款可用的被動操作系統(tǒng)指紋識別工具。Satori自身帶有TCP和DHCP操作系統(tǒng)指紋識別引擎,還集成了p0f和Ettercap。因此對于TCP包Satori可以輸出三種結(jié)果。在局域網(wǎng)下Satori可以進(jìn)行DHCP包識別。Satori最近的更新是在2013年5月,其使用p0f和Ettercap 2012年舊版本的指紋庫。
NetworkMiner是一款嗅探抓包工具,可以對網(wǎng)絡(luò)流量進(jìn)行分析,包括操作系統(tǒng)指紋識別。NetworkMiner進(jìn)行操作系統(tǒng)指紋識別的原理與p0f一致,使用了p0f和Satori的指紋數(shù)據(jù)庫。NetworkMiner最近的更新是在2019年1月,但其使用的是p0f和Ettercap的老舊指紋庫。
這些公開可用的被動操作系統(tǒng)指紋識別工具大都方法類似,都有缺乏更新的問題。
在操作系統(tǒng)指紋識別特征項(xiàng)的研究上,劉英等[4]研究了TCP協(xié)議選項(xiàng)字段對操作系統(tǒng)指紋識別的作用。文獻(xiàn)[3]在p0f所使用的指紋的特征字段的基礎(chǔ)上進(jìn)行了優(yōu)化,去除掉無用的特征字段,重新提取了指紋庫,并利用決策樹和SVM等算法進(jìn)行分類,最終訓(xùn)練的模型在測試數(shù)據(jù)上達(dá)到了80%左右的準(zhǔn)確率。文獻(xiàn)[5]研究了會話內(nèi)多個數(shù)據(jù)包之間的關(guān)聯(lián)關(guān)系,發(fā)現(xiàn)TCP FIN ACK包具有一定的區(qū)分操作系統(tǒng)的作用。文獻(xiàn)[6]研究了利用IP、TCP、UDP、ICMP、SSH、DNS、TLS和FTP等多種協(xié)議在多種機(jī)器學(xué)習(xí)算法的基礎(chǔ)上進(jìn)行操作系統(tǒng)識別的效果,經(jīng)過比較發(fā)現(xiàn)了TCP協(xié)議的特征字段具有最好的區(qū)分操作系統(tǒng)效果。文獻(xiàn)[7]利用TCP/IP、HTTP User-Agent和TLS三種指紋特征生成模型,研究了私有網(wǎng)絡(luò)下多會話模型的操作系統(tǒng)指紋識別效果,以一小時(shí)為時(shí)間窗口,識別正確率達(dá)到99%左右。但是該方法具有局限性,只適合于網(wǎng)絡(luò)中設(shè)備的IP地址基本不變化的情況。
HTTP協(xié)議允許客戶端和服務(wù)器在連接期間通過在消息中包含頭部字段來傳遞附加信息。HTTP User-Agent是HTTP頭部的一個重要字段。一個標(biāo)準(zhǔn)的User-Agent以標(biāo)準(zhǔn)化格式標(biāo)明客戶端和操作系統(tǒng)的類型和版本等信息。Adhikari等[8]研究了直接利用網(wǎng)絡(luò)流量中HTTP User-Agent來標(biāo)記設(shè)備類型。HTTP User-Agent非常容易修改,很多瀏覽器插件提供修改 User-Agent,爬蟲程序也需要修改User-Agent來偽裝成正常訪問。已有研究表明,在真實(shí)網(wǎng)絡(luò)流量中,偽造的User-Agent流量只占全部流量的很少一部分[9]。文獻(xiàn)[10]還提出通過比較在客戶端利用javascript得到navigator.userAgent與服務(wù)端流量中獲得的User-Agent的不一致性來發(fā)現(xiàn)瀏覽器指紋偽造的方法。
本文所提出的指紋庫自動化方法具有三個步驟:一是從HTTP流量數(shù)據(jù)中解析和提取特征項(xiàng)以及User-Agent。二是指紋對應(yīng)操作系統(tǒng)信息的統(tǒng)計(jì)。三是根據(jù)統(tǒng)計(jì)結(jié)果選擇指紋標(biāo)記。如圖1所示。
圖1 指紋庫自動化生成流程圖
根據(jù)p0f所使用的特征進(jìn)行最終簡化,使用了IP和TCP協(xié)議的6個特征。表1列出5種典型的操作系統(tǒng)指紋及所使用的特征對應(yīng)的值。
表1 典型的操作系統(tǒng)指紋
下面分別對每個特征的構(gòu)造和處理方式進(jìn)行說明:
TTL表示IP協(xié)議TTL字段的值。TTL字段是生存時(shí)間,每被轉(zhuǎn)發(fā)一次該字段的值減1,為0時(shí)被丟棄,一般的初始值為64、128和255等。Windows操作系統(tǒng)TTL初始值通常為128,Liunx和Mac OS X操作系統(tǒng)TTL初始值通常為64。在原始發(fā)送主機(jī)上捕獲的數(shù)據(jù)包TTL值直接從字段中提取,而其他位置捕獲的數(shù)據(jù)包需要通過就近原則計(jì)算出原始TTL值。
NZ_IPID表示DF(分片標(biāo)志位)設(shè)置為1時(shí)ID(IP協(xié)議字段)值是否不為0。Mac OS X 10.13和10.14以及iOS 12等較新的操作系統(tǒng)在不分片時(shí)一直將ID設(shè)置為0。該特征需要對DF標(biāo)志位和ID值進(jìn)行判斷后得到結(jié)果。
ECN表示在IP和TCP協(xié)議的ECN(顯示擁塞通知)標(biāo)志位的值。RFC3168[11]規(guī)定使用IP和TCP頭部中保留字段的后兩位作為ECN標(biāo)志位。較新的操作系統(tǒng),例如Windows 2012和2016等會使用該標(biāo)志位。該特征直接來源于ECN標(biāo)志位提取的值。
WSCALE表示TCP選項(xiàng)中窗口擴(kuò)大因子的值。不同的操作系統(tǒng)具有不同的常用值。該特征直接從TCP選項(xiàng)中提取窗口擴(kuò)大因子字段的值。
OPTLAYOUT表示TCP選項(xiàng)的每一項(xiàng)按出現(xiàn)的先后順序排序組成的字符串。常見的TCP選項(xiàng)有結(jié)束(EOL)、無操作(NOP)、最大報(bào)文段長度(MSS)、窗口擴(kuò)大因子(Window Scale)、選擇性確認(rèn)(SACK Permitted)和時(shí)間戳(Timestamps)等。該特征需要對所有的TCP選項(xiàng)進(jìn)行按先后順序排序后得到值。
WIN_MSS表示TCP協(xié)議窗口值與TCP選項(xiàng)最大報(bào)文段長度的比值,如不能整除則該特征的值直接為窗口值。
上述特征均具有區(qū)分不同版本和類型操作系統(tǒng)的能力。
通過讀取網(wǎng)絡(luò)流量,并解析數(shù)據(jù)包中IP和TCP協(xié)議字段,直接提取字段的值或者通過間隔計(jì)算得到結(jié)果,最后得到特征對應(yīng)的值。處理流程如圖2所示。
圖2 從網(wǎng)絡(luò)流量中提取特征處理流量圖
首先讀取網(wǎng)絡(luò)流量文件,然后設(shè)置過濾規(guī)則,只留下TCP的流量。對TCP數(shù)據(jù)包按字段進(jìn)行解析,包括IPv4或者IPv6、TCP固定頭部和TCP選項(xiàng)等。根據(jù)解析出的標(biāo)志位SYN是否值為1和ACK是否為值0判斷是否為初始SYN數(shù)據(jù)包。不滿足條件則繼續(xù)判斷網(wǎng)絡(luò)流量文件是否讀取完畢,未完畢則繼續(xù)解析單個數(shù)據(jù)包,完畢則結(jié)束。
HTTP User-Agent提取使用python-user-agents[12]工具。該工具基于Python語言編寫,可以提取User-Agent中的操作系統(tǒng)類型和版本以及HTTP客戶端的類型和版本。此外,還采用了關(guān)鍵詞提取的方法作為補(bǔ)充。少部分不能提取出操作系統(tǒng)信息的User-Agent數(shù)據(jù)將被丟棄。在選擇指紋的最終標(biāo)記結(jié)果時(shí),選擇方法上會避免掉HTTP User-Agent不可靠帶來的影響。
采用字典嵌套的方法進(jìn)行統(tǒng)計(jì)。指紋信息作為字典的關(guān)鍵字(key),操作系統(tǒng)類型和版本及數(shù)量信息作為值(Value)。操作系統(tǒng)類型和版本及數(shù)量信息也是一個字典,操作系統(tǒng)類型和版本作為關(guān)鍵字,而出現(xiàn)數(shù)量作為值。
對于每一條指紋-操作系統(tǒng)數(shù)據(jù)對,首先將指紋作為關(guān)鍵字檢查字典是否已存在該指紋,不存在則加入該指紋。存在則檢查該指紋對應(yīng)值的字典,操作系統(tǒng)類型和版本作為關(guān)鍵字,存在該關(guān)鍵字的值加1,不存在則加入該操作系統(tǒng)類型和版本。
單個指紋統(tǒng)計(jì)出的操作系統(tǒng)信息具有很多類型和版本,需要考慮選擇哪些操作系統(tǒng)類型和版本作為該指紋的最終標(biāo)記結(jié)果。
首先計(jì)算出每個操作系統(tǒng)類型和版本所出現(xiàn)數(shù)量占該指紋總數(shù)量的百分比??紤]單個指紋出現(xiàn)數(shù)量最多的操作系統(tǒng)類型和版本,如果該操作系統(tǒng)類型和版本數(shù)量占比達(dá)到80%以上則只取該結(jié)果作為標(biāo)記。如果出現(xiàn)數(shù)量最多操作系統(tǒng)類型和版本占比小于10%,則說明該指紋的統(tǒng)計(jì)結(jié)果非常分散,不合適選擇任一數(shù)據(jù)作為標(biāo)記,從而丟棄該指紋,避免得到錯誤結(jié)果。
如果出現(xiàn)數(shù)量最多操作系統(tǒng)類型和版本占比在10%~80%之間,則考慮排名靠前的數(shù)據(jù)均作為該指紋的標(biāo)記。由于指紋與操作系統(tǒng)是多對多關(guān)系,這樣做也是合理的。但是操作系統(tǒng)類型必須與第一標(biāo)記結(jié)果相符,除Linux和Android以及Mac OS X和iOS外,因?yàn)檫@兩類操作系統(tǒng)具有同源性,對應(yīng)的指紋可能會交叉。此外,單個指紋對應(yīng)的數(shù)量太少的數(shù)據(jù)將直接丟棄。
通過部署在清華大學(xué)校園網(wǎng)邊界的探針得到整個大學(xué)的網(wǎng)絡(luò)流量數(shù)據(jù)。對2019年2月7日至16日共計(jì)10天的HTTP網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行處理,得到218 432 717條HTTP網(wǎng)絡(luò)流量數(shù)據(jù)。首先提取其中的IP和TCP協(xié)議的指紋特征項(xiàng),其次提取HTTP User-Agent的操作系統(tǒng)類型和版本,然后將兩個結(jié)果組成一對。由于部分HTTP User-Agent無法提取出操作系統(tǒng)類型,因此丟棄掉此部分?jǐn)?shù)據(jù),最終得到173 696 297條數(shù)據(jù)。
首先對每一天的指紋和User-Agent提取對進(jìn)行統(tǒng)計(jì),再從2月7日到16日的順序合并統(tǒng)計(jì)結(jié)果。最終統(tǒng)計(jì)出506條不重復(fù)指紋數(shù)據(jù)。每天統(tǒng)計(jì)出的不重復(fù)指紋數(shù)量和最終統(tǒng)計(jì)結(jié)果的不重復(fù)指紋數(shù)量增長情況如圖3所示。
圖3 每天不重復(fù)指紋數(shù)量和最終統(tǒng)計(jì)結(jié)果的不重復(fù)指紋數(shù)量增長情況
可以看出,最終統(tǒng)計(jì)的不重復(fù)指紋數(shù)量增長越來越緩慢,說明每天的數(shù)據(jù)中重復(fù)的指紋較多,10天的數(shù)據(jù)基本涵蓋了校園網(wǎng)數(shù)據(jù)中的絕大部分出現(xiàn)的指紋。
根據(jù)506條不重復(fù)指紋每條統(tǒng)計(jì)出的數(shù)據(jù),分別統(tǒng)計(jì)了每條指紋出現(xiàn)的數(shù)量占總數(shù)量的百分比。可以發(fā)現(xiàn)少數(shù)的指紋出現(xiàn)頻率較高,占了總數(shù)量的大部分。數(shù)量最多的指紋占總數(shù)量的43.95%,前10數(shù)量的指紋的和占總數(shù)量的90.75%,前40數(shù)量的指紋的和占總數(shù)量已經(jīng)高達(dá)99.03%。TOP X指紋數(shù)量占總數(shù)量百分比情況如圖4所示。
圖4 TOP X指紋出現(xiàn)數(shù)量和占總數(shù)量百分比
單個指紋的統(tǒng)計(jì)結(jié)果示例如圖5所示。
圖5 單個指紋統(tǒng)計(jì)結(jié)果示例
第一行是指紋信息,后面行是該指紋對應(yīng)HTTP User-Agent出現(xiàn)過的操作系統(tǒng)??梢钥闯?,Windows 10占比最多,可以作為改指紋的標(biāo)記。其他操作系統(tǒng)占比很少,不宜作為該指紋的標(biāo)記。
首先統(tǒng)計(jì)了單個指紋所對應(yīng)的出現(xiàn)次數(shù)最多的操作系統(tǒng)占該指紋出現(xiàn)總數(shù)量的百分比。為避免統(tǒng)計(jì)結(jié)果失真,該統(tǒng)計(jì)沒有使用只有一條操作系統(tǒng)信息的指紋數(shù)據(jù)。分為五類,每20%為一類。統(tǒng)計(jì)結(jié)果如圖6所示。
圖6 單條指紋的出現(xiàn)最多次數(shù)操作系統(tǒng)數(shù)量占該指紋總數(shù)量比例的分類
可以看出,單條指紋對應(yīng)的出現(xiàn)次數(shù)最多的操作系統(tǒng)的指紋數(shù)量能夠占總數(shù)量達(dá)到80%以上的這類指紋有59.06%。達(dá)到40%以上的數(shù)量有93.70%,說明了絕大部分指紋的統(tǒng)計(jì)結(jié)果呈現(xiàn)了相同規(guī)律,也證明了選擇出現(xiàn)數(shù)量最多的操作系統(tǒng)作為標(biāo)記的方法的正確性。
單個指紋出現(xiàn)TOP X的操作系統(tǒng)數(shù)據(jù)和的變化情況如圖7所示。
圖7 單個指紋出現(xiàn)TOP X的操作系統(tǒng)數(shù)據(jù)和的變化情況
可以看出,單個指紋TOP 4數(shù)量的操作系統(tǒng)之和占比達(dá)到了96.85%。因此對單個指紋的最多操作系統(tǒng)標(biāo)記數(shù)量占比不足80%時(shí),考慮后續(xù)三個數(shù)量次多的標(biāo)記作為補(bǔ)充。但是必須要求操作系統(tǒng)類型與第一個標(biāo)記數(shù)據(jù)一致,考慮到Linux和Android以及Max OS X和iOS的同源性,這兩類不做此要求??紤]到單個指紋出現(xiàn)次數(shù)過少比較容易得到錯誤標(biāo)記,丟棄出現(xiàn)次數(shù)小于100次的指紋數(shù)據(jù)。
由統(tǒng)計(jì)結(jié)果發(fā)現(xiàn)少部分標(biāo)記只有操作系統(tǒng)信息沒有版本信息。如果該標(biāo)記不是該指紋的唯一標(biāo)記則刪除此類數(shù)據(jù)。
最終得到390條指紋數(shù)據(jù),其中不重復(fù)指紋273條,而p0f TCP SYN方向指紋庫數(shù)量只有91條。其分布如表2所示。
表2 新的指紋庫操作系統(tǒng)類型和版本數(shù)量
Linux所在欄無版本信息是由于Linux指紋對應(yīng)的HTTPUser-Agent基本提取不出操作系統(tǒng)版本信息。
利用清華大學(xué)校園網(wǎng)2月17至19日三天的網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行測試,共計(jì)122 187 670條TCP會話數(shù)據(jù),9 002 139條HTTP數(shù)據(jù)。其中91.89%的TCP會話數(shù)據(jù)提取的指紋能夠在新的指紋庫上命中。然后,用HTTP User-Agent提取結(jié)果進(jìn)行對比驗(yàn)證。通過修改p0f的數(shù)據(jù)讀入接口使其能處理校園網(wǎng)的網(wǎng)絡(luò)流量,同樣地,得到與User-Agent提取結(jié)果的對比,其中91.12%的TCP會話數(shù)據(jù)能夠在p0f的指紋庫上命中,結(jié)果如圖8所示。
圖8 校園網(wǎng)三天HTTP數(shù)據(jù)新指紋庫和p0f識別結(jié)果分別與User-Agent提取結(jié)果對比
類型是指操作系統(tǒng)類型,例如Windows與Max OS X。版本是指操作系統(tǒng)版本,例如Windows操作系統(tǒng)的版本 7或8等。版本一致包括了指紋庫識別結(jié)果有多種版本的情況。可以看出,新的指紋在校園網(wǎng)三天的數(shù)據(jù)識別結(jié)果,類型和版本均一致的達(dá)到了94.66%。p0f的識別結(jié)果則出現(xiàn)了71.31%的類型一致但是版本不一致的情況。這也從側(cè)面說明了p0f的指紋庫并不完備。新的指紋庫識別結(jié)果與User-Agent提取的結(jié)果只有1.48%操作系統(tǒng)類型不一致。同樣也驗(yàn)證了User-Agent不可靠的情況非常少。
此外,還在人工搜集的標(biāo)簽數(shù)據(jù)集上進(jìn)行了測試。通過搭建虛擬機(jī)的方法,搭建了Windows、Linux和Mac OS X三大主流操作系統(tǒng)17個版本的虛擬機(jī)。通過腳本控制瀏覽器訪問國內(nèi)Alex TOP 10網(wǎng)站產(chǎn)生目的端口為80、443的流量,訪問指定服務(wù)器的22、139、445和3389等端口產(chǎn)生流量。此外使用真實(shí)移動設(shè)備采集了iOS 12和Android 7的三分鐘網(wǎng)絡(luò)流量。所有標(biāo)簽流量共計(jì)TCP SYN數(shù)據(jù)17 073條。
分別用新的指紋庫和p0f在該數(shù)據(jù)集上進(jìn)行指紋識別。95.04%的數(shù)據(jù)能夠在新的指紋庫上命中,而89.99%的數(shù)據(jù)能夠在p0f指紋庫上命中。命中的數(shù)據(jù)其識別結(jié)果分類如圖9所示。
圖9 新的指紋庫和p0f在相同標(biāo)簽數(shù)據(jù)集上識別結(jié)果對比
新的指紋庫在類型版本一致的識別結(jié)果占比76.45%,而p0f只有49.73%。只考慮操作系統(tǒng)類型識別準(zhǔn)確率的話,新的指紋庫準(zhǔn)確率高達(dá)99.79%,而p0f只有74.30%。在相同的標(biāo)簽數(shù)據(jù)上,無論是命中率還是準(zhǔn)確率,新的指紋庫都表現(xiàn)得比p0f要好。
目前公開可用的被動操作系統(tǒng)識別工具的指紋庫缺乏更新,而人工去搜集不同類型和版本的操作系統(tǒng)標(biāo)簽數(shù)據(jù)來完善這些工具的指紋庫不僅效率低下而且很難搜集完整。本文提出了一種基于HTTP User-Agent來標(biāo)記指紋的指紋庫自動化生成方法。利用約2.2億的HTTP網(wǎng)絡(luò)流量數(shù)據(jù)生成了涵蓋主流的操作系統(tǒng)類型和版本的新指紋庫。在相同的數(shù)據(jù)集上對新指紋庫與p0f在相同數(shù)據(jù)集上進(jìn)行了測試,新的指紋庫得到了比p0f更優(yōu)的操作系統(tǒng)識別結(jié)果,證明了本方法的有效性。目前的IP和TCP協(xié)議特征項(xiàng)難以區(qū)分相同類型的操作系統(tǒng)的不同版本,是下一步研究重點(diǎn)。