賈 哲,李炳彰,高小涵
(1.通信網信息傳輸與分發技術重點實驗室,河北 石家莊 050081;2.中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
自2012年我國提出首批國家級智慧城市試點建設以來,已經有超過700多座城市在規劃或正在建設智慧城市,百姓的衣食住行、政府的管理、社會的治理、城市的運轉,以及關鍵基礎設施的運行架構都在網絡之上。隨著物聯網、云計算等信息技術的發展,物聯網與智慧城市的發展模式呈現多系統協同、跨層級控制、縱橫多點級聯等特點,關鍵信息基礎設施的復雜度指數級上升,安全脆弱性和安全威脅面臨多樣化、隱蔽化等巨大挑戰。為了解決現有信息系統外部“靜態、同質、確定”的特點而導致易被探測、攻易守難等問題,欺騙防御、擬態防御等主動防御技術受到關注,通過使用騙局或假動作來阻撓或者推翻攻擊者的認知過程,擾亂攻擊者的自動化工具,延遲或阻斷攻擊者的活動,通過使用虛假的響應、有意的混淆,以及假動作、誤導等偽造信息達到“欺騙”的目的。
本文提出了一種操作系統指紋隱藏的欺騙防御方法。通過擾亂攻擊者對目標主機進行指紋掃描和探測的攻擊過程,采用混淆的方法隱藏系統的外部特征,使系統展現給攻擊者的是一個有限甚至完全隱蔽或者錯誤的攻擊面,降低暴露給攻擊者的攻擊面,減少可被攻擊者利用的資源,使得攻擊復雜度和攻擊者代價增長,達到主動防御的目的。
近年來,網絡攻擊的數量和復雜性都在迅速增加[1-2],攻擊者能夠利用多種攻擊載體滲透到其目標系統中。針對上述問題,研究人員提出了許多辦法來增強網絡和信息系統的安全防護能力,典型的解決方案包括入侵防護[3]、系統加固[4]以及高級攻擊檢測和緩解等[5]。盡管這些傳統的安全措施在任何安全防護手段中都必不可少,但它們大多是被動響應攻擊者的行為,缺乏在網絡殺傷鏈的早期步驟中就與攻擊者進行交互的手段,導致防御方始終處于被動地位。
20世紀80年代末,斯托爾[6]首次討論了如何利用欺騙技術來跟蹤入侵者,以確保計算機安全,并在此基礎上形成了蜜罐的概念。近年來,出現了不少利用欺騙技術[7-9]來迷惑或誤導攻擊者的技術手段。網絡欺騙防御技術可用于保護易受攻擊的業務系統,并因其自身的優勢而受到安全防御人員的關注。
針對網絡層的欺騙防御技術,對于攻擊早期階段的網絡指紋探測行為,開展了網絡指紋隱藏的欺騙防御關鍵技術研究。在攻擊殺傷鏈的偵察階段,攻擊者通過指紋探測和掃描獲得網絡拓撲結構和可用資產的信息。通過干擾偵察階段即可混淆偵察結果,例如通過錯誤響應掃描查詢來誤導攻擊者,Le Malecot介紹了一種通過隨機連接跳轉和流量偽造來隨機化指紋探測的技術,即通過改變目標網絡的拓撲結構,達到迷惑攻擊者的目的[10]。Trassare通過不斷暴露錯誤的網絡拓撲結構來誤導攻擊者,從而擊敗traceroute探測類型的掃描[11]。Sushil等人提出通過提供真假混合的應答來響應攻擊者的掃描[12]。
在防范操作系統指紋探測的欺騙防御技術方面,和本文內容類似的研究有文獻[13-14],通過模擬操作系統的多種行為特征誤導潛在攻擊者,達到迷惑攻擊者并延遲其進展的目標。本文針對關鍵基礎設施業務主機指紋隱藏技術開展研究,結合SDN、虛擬化等新技術的應用,構建更加靈活高效的網絡系統特征隱藏機制,達到對攻擊者“隱真示假”、避免重要資產暴露的目的。
由于攻擊者在進行攻擊之前,首先要對目標主機進行掃描,并試圖找出目標主機操作系統的類型和服務軟件名稱版本,從而實施相應的攻擊,比如主機指紋探測操作系統為Windows XP sp3、服務器平臺為IIS 4.0。本文針對操作系統指紋探測、服務軟件指紋探測兩種攻擊過程進行分析。
操作系統指紋探測是確定遠程主機操作系統身份的過程,主要是通過主動將數據包發送到遠程主機并分析響應來完成的。操作系統指紋探測的工具主要有Nmap和Xprobe2等,通過獲取響應,根據已知操作系統的簽名數據庫查詢該指紋獲取操作系統信息。對于攻擊者而言,了解遠程主機上正在運行哪種操作系統非常有價值,因為基于漏洞的攻擊方法通常依賴于操作系統版本。確定主機操作系統的方法主要有以下三種:
① 橫幅抓取[15]:在計算機網絡環境中,默認的橫幅通常包括關于一個服務的信息,例如版本號。當使用Telnet和專有程序有意收集這些信息時,通常稱為橫幅抓取。攻擊者在尋找易受攻擊的主機時,通過與主機建立連接,然后查詢端口以查找易受攻擊的服務。
② 基于堆棧查詢的技術:主動將數據包發送到遠程主機上的網絡堆棧,通過主機對不同請求的響應來探測系統。堆棧查詢的主要方法是針對TCP/IP堆棧,向遠程主機的開放(未開放)端口發送標準和非標準的TCP請求,接收遠程主機響應的有用信息并進行分析,能夠得到一些關于類型和版本之類的信息;另一種方法被稱為初始序列號(ISN)分析[16],通過獲取TCP堆棧中隨機數生成器的差異來確定遠程主機的操作系統。
③ ICMP響應分析方法[17]:該方法是在IP層實現的指紋探測,通過向遠程主機發送ICMP消息并分析響應來識別操作系統。
服務軟件信息探測一般為橫幅抓取,即連接到遠程應用程序并觀察輸出。攻擊者確定了遠程主機正在運行服務的制造商和版本,可以啟動漏洞研究過程。該項技術的工作原理是使用telnet、FTP和一個專有程序與遠程計算機建立連接,導致易受攻擊的主機響應橫幅消息,其中可能包含攻擊者用來危害系統的信息。此類探測軟件中具有代表性的是Nmap,Nmap內置標語采集器,它連接到開放的TCP端口并在5 s內打印出偵聽服務發送的所有內容,獲取遠程主機某個端口上運行服務軟件的名稱及版本。
在眾多遠程主機操作系統識別和服務軟件信息探測軟件如Nmap和Xprobe2等,都內置了豐富的操作系統指紋庫,其中Nmap還內置了眾多服務軟件的指紋庫,例如FTP、TELNET、HTTP、SSH等服務軟件,基于指紋庫就能夠進行操作系統和服務的指紋識別。下面分析Nmap定義的操作系統指紋,如圖1所示。

圖1 Nmap實施操作系統指紋探測結果示例Fig.1 Operating system fingerprint detection result of nmap
其中,第1行指示了這條指紋對應的操作系統與版本為Solaris 9,運行平臺為SPARC。
第2行表示TCP序列性測試的結果,確定TCP初始序列號、IP標識號和TCP時間戳號的生成模式。
第3行代表Nmap中T1測試的結果,即將啟用了SYN和ECN Echo標志的TCP數據包發送到一個打開的TCP端口,獲得的結果中DF=Y表示已啟用IP標頭中的Don’t fragment標志,W=C0B7 | 807A表示TCP頭中的窗口大小為十六進制的0xC0B7(49335)或0x807A(32890)等信息。
第4行和第5行表示T2和T3測試的結果,Resp = N表示遠程主機沒有對測試2和測試3發送的數據包進行回應。
第6行到第9行表示T4、T5、T6、T7測試的結果,即分別發送啟用ACK標志的TCP包到一個打開的TCP端口;啟用SYN標志的TCP包發送到一個關閉的TCP端口;啟用ACK標志的TCP包到一個關閉的TCP端口;啟用URG、PSH和FIN標志的TCP包到一個關閉的TCP端口等,并對獲得的響應信息進行分析。
第10行是對端口不可達測試的響應結果,其中,DF = Y表示已啟用IP標頭中的“不分段”標志;TOS = 0表示IP標頭中的服務類型(TOS)為0;IPLEN = 70表示IP標頭中的總長度為十六進制的0x0070或112;RIPTL = 148表示IP中給定的總長度發送回報頭是十六進制的0x0148或328等。
Nmap通過模式匹配算法,基于上述指紋庫信息,來識別應用程序名稱、版本號和其他信息。
通過對指紋探測攻擊的過程進行分析,設計主機指紋隱藏設備,作為面向攻擊者的第一道門,在內部網絡和外部網絡連接的邊界位置進行串接部署,對攻擊者的探測攻擊數據進行直接防護。基于Nmap探測數據包的測試過程和規則匹配方式,實現響應信息的修改。該系統能通過返回修改后的響應信息使攻擊者獲取錯誤響應,達到迷惑攻擊者的目的。部署方式如圖2所示。

圖2 主機指紋隱藏設備部署方式Fig.2 Host fingerprint hiding device deployment
對操作系統探測進行偽裝欺騙過程如下。
步驟1:指紋隱藏設備運行指紋隱藏程序,控制端設備下發隱藏策略,包括受保護主機的ip地址和將要偽裝的操作系統類型。
步驟2:當攻擊者對內部網絡某臺主機進行操作系統探測時,其發出的探測數據包會經過指紋隱藏設備,指紋隱藏設備進行數據包的識別與記錄工作,內容如下:
① 若該包為ICMP包,則記錄源IP、目的IP、ICMP序列號和ICMP代碼。
② 數據包類型:識別當前數據包是否為NMAP探測包。若為NMAP探測包,記錄其探針名;若為TCP包,記錄源IP、目的IP、TCP源端口號、TCP序列號、TCP確認號。若該包為ICMP包,記錄源IP、目的IP、ICMP序列號和ICMP代碼。
步驟3:探測主機發出的數據包經過指紋隱藏設備后到達內部網絡的主機。
步驟4:內部網絡主機對外部網絡發來的數據包進行回復。
步驟5:指紋隱藏設備捕捉到從內部網絡發往外部網絡的數據包后,首先會檢測該數據包的源IP是否在受保護主機名單內,并對受保護主機名單內的數據包進行處理,過程如下:若該包是ICMP包,則根據當前ICMP數據包的類型、偽裝操作系統指紋庫以及步驟2中所記錄的數據對數據包相關字段進行值修改;若該包是TCP包,則判斷該包是否為步驟2中記錄的數據包的響應,若是則將根據偽裝操作系統指紋庫和步驟2中所記錄的數據對數據包相關字段進行值修改。
步驟6:指紋隱藏設備將經過檢測后的數據包轉發到外部網絡。
對于操作系統偽裝,可以在控制端進行設置;此后,指紋隱藏設備將對所有受保護的主機定時修改偽裝操作系統類型。本實驗設置的是偽裝操作系統類型每隔30 s變化一次,即每隔30 s,攻擊者探測同一臺受保護主機,返回給攻擊者的操作系統類型不相同,達到偽裝混淆的目的。
服務軟件偽裝包括對攻擊者的FTP、TELNET、HTTP服務軟件信息探測的偽裝欺騙。攻擊者用NMAP掃描受保護主機的這三種服務將返回虛假的服務軟件名版本。
指紋隱藏設備進行服務偽裝處理過程如下:
步驟1:指紋隱藏設備捕捉發往外部網絡的數據包。
步驟2:若該包為TCP包,則進行源端口號判斷,端口21為FTP服務端口,23為TELNET服務端口,80為HTTP服務端口。之后判斷源IP是否在保護名單內,把非名單內的數據包直接放行,在名單內的數據做進一步處理:
① 當該包為FTP數據包時,指紋隱藏程序分析TCP PAYLOAD數據部分,當前三個字符為“220”,則根據隱藏策略中的FTP偽裝類型以及FTP指紋庫對PAYLOAD數據部分進行修改,修改完成后轉發給外部網絡。
② 當該包為TELNET數據包時,指紋隱藏程序判斷該包是否為雙方第一個TELNET數據包(不包括三次握手),若是第一個則根據隱藏策略中的TELNET偽裝類型以及TELNET指紋庫對PAYLOAD數據部分行修改,修改完成后轉發給外部網絡。
③ 若該包為HTTP數據包時,指紋隱藏設備根據隱藏策略中的HTTP偽裝類型以及HTTP指紋庫對HTTP數據包中頭部server字段進行修改,修改完成后轉發給外部網絡。
(1) 使用Nmap探測Windows 7和CentOS 7服務器
在未啟用指紋隱藏功能時,探測能夠顯示操作系統結果,如圖3所示,正確顯示了操作系統類型以及系統開放端口等信息。

圖3 未開啟指紋隱藏模塊時的探測結果Fig.3 Detection results when fingerprint hiding module is not enabled
(2) 配置文件設置,運行指紋隱藏程序
通過啟用指紋隱藏設備,并配置文件:將IP地址為20.20.0.123的主機Linux操作系統模擬成Windows系統。
(3) 再次進行探測過程
攻擊者再次發送探測消息,獲得的結果如圖4所示,可以看出:通過指紋隱藏設備,將Linux操作系統主機識別為WindowsXP,成功隱藏了服務器的真實指紋信息。

圖4 開啟指紋隱藏模塊后的探測結果Fig.4 Detection results after opening the fingerprint hiding module
為了應對關鍵基礎設施面臨的高強度探測攻擊,本文提出了一種針對關鍵業務系統主機所運行操作系統、服務軟件等外顯特征指紋隱藏方法。試驗結果表明,通過設置策略、修改探測報文的響應信息,能夠擾亂攻擊者的主機探測攻擊結果,達到不依賴攻擊檢測特征庫的主動防御效果。未來的工作包括智能化指紋隱藏策略的研究,實現更加逼真、隱蔽性更高的隱藏能力。