文/封寒松
隨著IPv4 向IPv6 的逐步演進,IPv6 網絡已經在各高校校園內實現了規模部署。網絡協議升級是高校校園網改造過程中至關重要的一步,校園內提供IPv4 協議與IPv6 協議同時接入的網絡服務也大幅增多。在網絡升級的同時,需要對網絡管理相關的其他服務進行相應的升級。如在網絡管理、網絡安全及應用服務等方面具有重要意義的主機發現與漏洞掃描服務。
IPv4 的網絡空間相對較小,網絡地址數量有限,傳統的網絡掃描工具已經十分成熟,如NMap、ZMap、MassScan 等。然而,IPv4 網絡環境下的掃描策略,是面向全球范圍內的全部IPv4 地址進行遍歷掃描,但同樣的思路和方法無法適用于IPv6 的網絡環境。IPv6 地址長度為128 位,理論上地址空間最大可以達到2 的128 次方,遠遠超過了IPv4 的2 的32 次方。以上海交通大學為例,學校擁有的可用IPv4 地址數量約為89632 個,即使加上范圍為10.0.0.0/8 的內網地址,IPv4 的地址數量也只有1.68×107個,而IPv6 地址數量則約為7.9×1028個,是IPv4 地址數量的5×1021倍。
此外,IPv6 地址的復雜結構也增加了掃描難度。采用無狀態地址自動分配(SLAAC)方式時,IPv6 地址可以由IPv6 客戶端自行決定,這種分配方式使得IPv6 地址結構的復雜性進一步增加。同時,互聯網服務提供商(ISP)分別擁有大量的IPv6地址前綴,每個ISP 默認大約有296個IP 地址可自由分配,不同ISP 的地址分配策略的自由性使得全網掃描所有子網IPv6 地址變得更加復雜。因此,對于IPv6 地址掃描,龐大的地址空間和復雜的地址結構使得傳統的網絡遍歷掃描方法和掃描工具變得不可行。
本文從校園網的流量和IPv6 地址分配方式等角度出發,提出了針對校園網內IPv6 主機發現的高效方法,并與掃描器聯動,最終設計并開發了一套校園網IPv6 主機實時發現和漏洞掃描系統,旨在應對IPv6 網絡空間掃描困難,IPv6 地址變化頻繁等問題。
本文設計并開發了針對校園網內部的IPv6 主機實時發現和漏洞檢測系統,系統整體架構如圖1 所示,旨在對校園網內部所有活躍的IPv6 主機進行實時發現及高效的漏洞掃描,用于高校的網絡安全管理工作。
本系統分為三個主要模塊:
1.IPv6 地址觀測模塊:根據流量數據、DNS 數據、路由規則、已登記服務器地址等數據來源確定主機/網絡范圍。
2.IPv6 地址動態跟蹤模塊:通過對觀測結果的整理和清洗,進一步獲取IPv6 地址,并對數據進行有效性驗證。根據IPv6 地址的變化規律及驗證結果實現對IPv6 地址的動態跟蹤。
3.掃描模塊:對目標主機進行操作系統識別、指定端口掃描、指定服務識別等掃描行為,獲取包括操作系統、開放服務狀態及服務的版本信息等。

圖1 系統整體架構
在掃描模塊的工具可以復用的前提下,其余部分在面向IPv6 網絡時為重新設計并開發,使其既能對校園內的IPv6 網絡空間準確高效的進行掃描,同時又能為信息搜集和漏洞檢測階段提供接口。
NetFlow 通過在路由器上收集流經網絡出入口的TCP、UDP數據包,分析網絡流的源IP 地址、目的IP 地址、源端口號、目標端口號、協議類型、TOS 字節、邏輯端口等屬性來區分網絡中的不同數據流量,并且對每個數據流進行單獨的跟蹤和計算,記錄其各方面特性,進一步感知網絡流量和擁塞情況。NetFLow 從v9 版本開始支持IPv6 協議,本文采用NetFlow v9版本分析流經校園網出入口的全部流量,獲取其中出現過的所有IPv6 地址。
除此之外,本文還通過查找IPv6 地址映射記錄與反向IPv6地址映射記錄的方式來獲取IPv6 地址。IPv6 地址映射是從域名指向IPv6 地址的映射,以AAAA 記錄的形式存在于DNS 服務器中。IPv6 地址反向映射用來記錄客戶端IP 地址到一個完全合格域名,以PTR 記錄的形式存在于DNS 服務器中,PTR 記錄是A 記錄的逆向記錄,又稱做IP 反查記錄或指針記錄,負責將IP 反向解析為域名。其中IPv6 地址到域名由特殊DNS 區域執行:ip6.arpa,即反向查找區域。在此區域中的域名將遵循x.x.x.x….x.x.x.x.ip6.arpa 的模式,其中x.x.x.x….x.x.x.x 對應逆向寫回的IPv6 地址。
無論是內部訪問或是外部訪問,所有指向IPv6 地址的域名記錄與反向解析記錄,都會在DNS 服務器中留下記錄。本文通過收集校內DNS 服務器中的全部AAAA 記錄與PTR 記錄,過濾出其中的IPv6 地址,作為地址觀測模塊的另一種IPv6 地址來源。
IPv6 地址觀測作為后續工作的基礎,必須達到高覆蓋率、高準確率的要求。本文通過結合流量分析、反向映射等多種方法進行IPv6 地址觀測,盡可能獲取到校園內全部活躍的IPv6地址。
IPv6 提供了兩種地址自動配置技術,分別是Dynamic host configuration protocol for IPv6(有狀態地址自動配置,以下簡稱DHCPv6)和Stateless address auto-configuration(無狀態地址自動配置,以下簡稱SLAAC)。DHCPv6 是對IPv4 中的DHCP 的改進和擴展,其中的這種地址變化完全由DHCP 服務器進行管理和處理,節點不需要做任何處理。SLAAC 則是IPv6 提出的一種全新的完全分布式的地址自動配置技術。根據SLAAC 選擇接口ID 生成方式的不同,可以將通過SLAAC 得到的IPv6 地址分為兩類,一類是穩定的IPv6 地址,另一類是不穩定的IPv6地址。是否穩定是通過在一段時間后,同一子網的接口ID 是否是會發生變化決定的,即由IPv6 地址是否會發生變化來確定IPv6 的穩定性。
在IPv6 的地址自動配置中,一般把128 位的IPv6 地址分為前64 的網絡前綴和后64 位的Interface identifier(接口標識,以下簡稱接口ID)。由于DHCPv6 類似于IPv4 中的DHCP,所以IPv6 地址的自動配置一般討論的都是SLAAC,在采用SLAAC 地址配置方式時,EUI-64 標準格式的IPv6 地址是由MAC 地址轉變而來的,因此地址掃描空間范圍可以由64 位降為48 位。同時,通過確定MAC 地址中前24 位OUI 地址(Organizationally unique identifier,又稱組織唯一標識符),地址掃描空間范圍再一次從48 位降低到24 位。IPv6 地址掃描空間顯著降低,進而可以通過掃描24 位地址空間的方式來實現根據IPv6 地址觀測結果進行IPv6 地址動態跟蹤。
簡單來說,IPv6 地址動態跟蹤的過程可以分為兩步。首先,根據校園網網絡前綴固定與EUI-64 格式IPv6 地址的特性,128位的IPv6 地址中需要進行預測并掃描的地址長度可以縮減為24位,以收集到的IPv6 地址作為種子,可以生成24 位不定地址所對應的預掃描地址空間。接下來,對該地址空間內的IPv6 地址進行掃描探測,根據每次的掃描結果不斷更新目標地址空間。掃描過程中,將命中率較高的節點置于掃描優先隊列的最優先位置,更新地址空間的同時也更新優先隊列。由此可以保證預掃描的IPv6 地址空間中,密度較高的部分被更優先的掃描到。基于此種掃描算法,可以跟蹤已有IPv6 地址的變化情況,并記錄最新的活躍IPv6 地址情況,最終實現對于校園內IPv6 地址的動態跟蹤。
已有的研究方法大多通過熵和聚類算法解析IPv6 地址的前綴結構,本文根據校園網特性,將IPv6 地址的預測空間降低為24 位。同時,在對IPv6 地址進行活躍探測時加入了優先隊列更新的策略,對常用的遍歷算法進行了改進,在探活過程中實時改進探測策略,以提高探測效率,大幅降低了掃描大地址空間所需的時間,對于解決IPv6 網絡空間掃描的主要問題起到了一定的幫助。
漏洞掃描一般是在端口掃描和服務識別的基礎上,通過漏洞檢測插件進一步檢測出目標系統存在的安全漏洞。目前市面上常見的漏洞掃描軟件如NMap、Nessus 等,大多根據指定IPv4 地址或地址段進行遍歷掃描。由于IPv6 地址空間過大,這種掃描方式不能很好地應用于IPv6 網絡環境。本文通過IPv6 地址觀測模塊與IPv6 地址動態跟蹤模塊,將IPv6 的大地址空間縮小為活躍IPv6 地址列表,并將常用的開源工具與獨立開發的腳本相結合,可以滿足針對校園內IPv6 的漏洞掃描需求。本文提出的方法在滿足漏洞掃描需求的同時有效降低了需要掃描的地址數量,減少了漏洞掃描的時間,大大提高了漏洞掃描系統的工作效率。
本項目的攻擊腳本開發參照了NASL2 標準,在滿足項目技術需求的同時,還具備快速、低耦合、高兼容的技術特點,并且可以實現多語言移植,包括但不限于C++、Python、Java 等常用語言,便于后續的模塊拓展使用。為了同時實現對于常見漏洞的檢測,本模塊還支持對于NMap、NCrack、W3F 等常見第三方安全工具的腳本化調用,以實現對于操作系統、數據庫、Web 應用等常見系統組件的漏洞檢測;同時也可以集成常用的第三方安全軟件進行Web 滲透測試、常見應用的弱口令檢測,包括但不限于網頁中存在的 Sql 注入、XSS 攻擊、CGI 漏洞、WebDAV 文件共享、目錄遍歷漏洞等安全問題。

圖2 2019 年9 月校園內活躍IPv6 地址統計情況

圖3 校園網內某主機掃描報告
整個系統包含的采集服務、掃描服務、數據庫服務、Web 服務,均部署于Ubuntu 16.04 系統中,所依賴的軟件包括Nessus、ZMap、NMap、Python、MySQL 等。服務器的硬件環境為八核Intel 處理器、8GB 內存等。
我們通過IPv6 地址觀測模采集了9 月1 日到9 月30 日期間的校園試驗區域內活躍IPv6 地址,通過對獲取到的地址進行動態跟蹤,最終獲取到的IPv6 地址數量為49803 個,每天的IPv6地址活躍情況如圖2 所示。
當有新的活躍I P v6 地址出現時,本文按照預設的掃描規則對其掃描,已掃描過一次以上的活躍I P v6 主機的掃描周期設置為7 天。每天僅需對新的活躍I P v6 地址以及部分舊地址進行掃描,數量為2000~3000 個,約為當日活躍地址數量的一半,漏洞掃描模塊對其進行掃描的每日耗時約5 小時。減少了每次需要掃描的地址數量,同時保證了掃描系統對校園內I P v6 地址的覆蓋率,大大提高了漏洞掃描效率。
通過調用Nessus 的漏洞掃描模塊,可以在Web 頁面中查詢歷次掃描的詳細信息,并可以根據已知IPv6 地址搜索掃描結果,單詞掃描結果如圖3 所示。
本文基于部署的校園網IPv6 主機實時發現和漏洞掃描系統,對校園內的活躍IPv6 地址進行采集,對采集到的IPv6地址進行了進一步測量與地址的動態跟蹤,對獲取到地址的IPv6 主機進行已知漏洞的掃描和分析,并對存在的問題及其可能的原因進行了具體分析。出于計算效率和存儲的考慮,本系統目前僅對當月數據進行收集和測量,下一步工作可使用大數據計算平臺進行更長時間的IPv6 地址觀測與漏洞掃描。