劉知竹,馮 璐,荀 鵬,劉吉元
(1.國防科技大學 計算機學院,湖南 長沙 410073; 2.長沙學院 電子信息與電氣工程學院,湖南 長沙 410022)
作為關鍵基礎設施的工業(yè)控制系統(tǒng)(industrial control system,ICS)在網(wǎng)絡空間中是重要的資源,其包含監(jiān)控和數(shù)據(jù)采集系統(tǒng)(supervisory control and data acquisition,SCADA)、可編程邏輯控制器(programmable logic controller,PLC)等,在電氣、化工以及核能等領域應用廣泛[1]。與傳統(tǒng)的IT系統(tǒng)相比,工業(yè)控制系統(tǒng)具有信息物理融合性質(zhì)[2],主要面向?qū)ιa(chǎn)過程的控制而非對信息的管理,因此ICS的安全與生產(chǎn)生活關系更為密切。近年來,通過全網(wǎng)掃描的方式,大量的在線應用及物理設備被發(fā)現(xiàn),其中也包括ICS設備[3-4]。對于被探測發(fā)現(xiàn)的ICS設備,一方面可以基于漏洞掃描工具等分析該類設備的網(wǎng)絡安全態(tài)勢[5];另一方面,由于部分ICS通信協(xié)議的認證機制不完善,外網(wǎng)節(jié)點基于相應協(xié)議下的特定指令也可獲得設備信息,因此可以提取該類設備的屬性并在此基礎上展開數(shù)據(jù)統(tǒng)計與分析,這是網(wǎng)絡空間測繪的一種有效方法[6-8]。
全網(wǎng)掃描的一種典型應用是聯(lián)網(wǎng)設備搜索引擎,目前有國外的Censys、Shodan,以及國內(nèi)的ZoomEye、O’Shadan和FOFA等,它們將網(wǎng)絡中的應用與設備信息匯集形成數(shù)據(jù)庫,為相關研究提供參考。Censys來自密歇根大學的Internet-Wide Scanning Research項目,其使用的ZMap掃描器以及ZDb數(shù)據(jù)庫性能高于同類工具,具有較高的工作效率[9-10]。Shodan是最早出現(xiàn)的聯(lián)網(wǎng)設備搜索引擎,其掃描節(jié)點跨地域分布,并且對ICS設備具有成熟的搜索能力[11-12]。這些搜索引擎均能發(fā)現(xiàn)ICS設備,因此可以基于工控蜜罐分析它們的行為特征。根據(jù)文獻[12]的統(tǒng)計,大部分搜索行為存在重復掃描的情況,即單個掃描節(jié)點高頻度地掃描目標,或者多個掃描節(jié)點在短期內(nèi)掃描同一個目標;此外,針對不同ICS協(xié)議的掃描頻率也不同。這都使得搜索效率降低,同時搜索行為也容易被發(fā)現(xiàn)。
基于此,文中提出一種基于分散化序列的聯(lián)網(wǎng)ICS設備搜索技術,能夠在搜索整個IPv4網(wǎng)絡空間中ICS物理設備的同時,避免短期內(nèi)對單個IPv4地址及其TCP端口的重復掃描。同時,掃描節(jié)點在按照經(jīng)過分散化的IPv4地址順序依次掃描時,能夠在短時間內(nèi)對一個小規(guī)模網(wǎng)段僅掃描其中一個IPv4地址。文中對分散化序列進行了參數(shù)定義,并在此基礎上設計了一種分散化序列的啟發(fā)式生成算法,并通過實驗對其進行分析與驗證。
由于ICS通信協(xié)議位于特定的TCP端口上,因此通過端口掃描可以初步判定目標是否屬于ICS設備,然后基于對應協(xié)議獲取目標信息。為了搜索整個IPv4空間中所有ICS設備,需要掃描每個地址下的所有ICS協(xié)議端口。假設全網(wǎng)掃描由多個分布式掃描節(jié)點完成,則可以將IPv4地址分片后均衡地調(diào)度給它們,掃描任務的集合可以表示為矩陣[wij],如圖1所示。
圖1 掃描任務集合
其中IPv4地址被均分為{Si|1≤i≤n},分片長度為l,各種ICS協(xié)議的TCP端口集合為{pj|1≤j≤m},wij是地址與端口序偶的向量,其表達式為:
wij=[
(1)
掃描節(jié)點不斷地選取序偶
μij=[
l(i-1)+1≤n1<… (2) δj=[μ1j…μnj]T (3) (4) l(i-1)+1≤n1<… (5) (6) 對于任務調(diào)度機制,設掃描節(jié)點集為A,每個節(jié)點α的實時并行任務數(shù)量為thd(α),上限為mthd(α),則每次調(diào)度任務時,從可執(zhí)行任務并且thd最小的掃描節(jié)點集合A'中隨機選取節(jié)點分配任務。該節(jié)點集合的表達式為: (7) 綜上,全網(wǎng)掃描的過程如下: 步驟4:返回步驟2。 首先對分散化序列進行定義。設S為一段具有單調(diào)性的序列,若Q(S)為其置換并滿足:(1)Q(S)中的相鄰元素在S中的數(shù)值差距大于s1;(2)S中任何數(shù)值差距小于s2的元素在Q(S)中的位置相距大于s3。則稱Q(S)為S的一個滿足參數(shù) 基于該定義,在設置一定參數(shù)的條件下,當掃描節(jié)點從Q(S)依次取地址掃描時,能夠在遍歷S中所有地址的同時降低對小規(guī)模網(wǎng)段的掃描頻度。其中s1和s2表征了掃描行為在空間上的分散化程度,s3表征了掃描行為在時間上的分散化程度。參數(shù)值越高則分散化程度越好,但是參數(shù)值過高會使得相應的置換序列不存在。 這里給出一種對分散化地址序列的啟發(fā)式生成算法,能夠快速地產(chǎn)生滿足參數(shù)條件的序列Q(S)以及剩余地址序列R(S)。當選取合適的參數(shù)時,能夠使得R(S)的元素數(shù)量較少,從而能夠使掃描行為滿足分散化條件的同時近似地覆蓋對S的掃描。假設掃描節(jié)點掃描一次用時為Δt,對小規(guī)模網(wǎng)段的掃描時間間隔為t,則算法的基本流程為: 輸入:地址序列S,序列長度l,距離間隔s1、s2,單次掃描用時Δt,時間間隔t。 步驟1:初始化地址序列Q←[],序列G1←[],序列G2←[],距離s3←?t/Δt」,地址q←θ。 步驟2:將G2中的所有元素減1。 在批次為720,學習率為0.03的實驗條件下,對網(wǎng)絡輸入步長問題進行實驗,以RMSE作為評價指標,實驗結果如表2所示。 步驟3:若G2中存在元素為0,則將G1和G2中相應下標的兩個元素同時去除。 步驟4:若q≠θ,取鄰域Ns1(q)=(q-s1,q+s1),若l為0或S-Ns1(q)為空,輸出Q以及R←S,退出。 步驟6:返回步驟2。 輸出:地址序列Q,剩余地址序列R。 掃描節(jié)點在遍歷Q(S)時,若取出了有效地址addr,則對其端口p執(zhí)行掃描;若取出了無效地址θ,則待機Δt。 本節(jié)對提出的聯(lián)網(wǎng)ICS設備搜索技術進行實驗分析。首先測試相關ICS協(xié)議下獲取信息的機制,然后分析分散化序列生成算法的參數(shù)對序列效果的影響,最后模擬全網(wǎng)掃描并統(tǒng)計掃描行為的特征。 該小節(jié)測試Modbus和Siemens S7兩種協(xié)議下獲取ICS設備信息的機制,以驗證在發(fā)現(xiàn)ICS協(xié)議端口開啟后能夠提取出設備信息。 Modbus協(xié)議工作在TCP的502端口,其報文類型分為請求、應答和異常應答,報文內(nèi)容由地址碼、功能碼和數(shù)據(jù)組成[13]。其中地址碼標識Modbus網(wǎng)絡中的設備單元,功能碼說明指令能夠?qū)崿F(xiàn)的功能,包括獲取設備信息、讀寫設備的存儲器等。根據(jù)文獻[13],基于0x2B功能碼并設置子功能碼為0x0E時可請求設備信息,基于0x11功能碼可讀取Modbus網(wǎng)絡中設備單元的名稱和運行狀態(tài)。協(xié)議交互的基本流程為: 步驟1:依次向地址碼為0x01至0x20的對應單元發(fā)送功能碼為0x2B,子功能碼為0x0E,描述類別參數(shù)為0x01的報文,請求目標回復基本的設備信息。若某個地址碼對應的單元回復了設備信息,則向該單元再分別發(fā)送描述類別參數(shù)為0x02和0x03的報文,嘗試獲取更詳細的設備信息,然后結束該步驟。 步驟2:依次向地址碼為0x01至0xFF的對應單元發(fā)送功能碼為0x11的請求報文,請求目標回復名稱和運行狀態(tài)。 從搜索引擎FOFA選取150個已知開啟502端口的IPv4地址,基于上述機制進行交互。結果顯示141個地址回復了設備信息,樣例如表1所示。 表1 某IPv4地址回復的Modbus設備部分信息 3.1.2 Siemens S7 Siemens S7協(xié)議工作在TCP的102端口,并位于TPKT和COTP協(xié)議之上[14]。當設置功能碼為0x43并且子功能碼為0x01時,可以請求設備返回各類程序塊(Block)的數(shù)量,這些程序塊中存放著設備的代碼與數(shù)據(jù)。當設置功能碼為0x44并且子功能碼為0x01時,可以讀取系統(tǒng)狀態(tài)列表(system status list,SSL)[15],其中描述類別參數(shù)為0x0011時能夠獲取保存模塊標識(module identification)的SSL;描述類別參數(shù)為0x001c時能夠獲取保存組件標識(component identification)的SSL,其中均包括設備信息。協(xié)議交互的基本流程為: 步驟1:發(fā)送功能碼為0x44,子功能碼為0x01,描述類別參數(shù)為0x0011的報文,請求目標回復關于模塊標識的系統(tǒng)狀態(tài)列表。 步驟2:發(fā)送功能碼為0x44,子功能碼為0x01,描述類別參數(shù)為0x001c的報文,請求目標回復關于組建標識的系統(tǒng)狀態(tài)列表。 步驟3:發(fā)送功能碼為0x43,子功能碼為0x01的報文,請求目標回復程序塊數(shù)量的統(tǒng)計信息。 從搜索引擎FOFA選取150個已知開啟102端口的IPv4地址,基于上述機制進行交互。結果顯示140個地址回復了設備信息,樣例如表2所示。 表2 某IPv4地址回復的Siemens S7設備部分信息 該小節(jié)分析參數(shù)對分散化序列生成效果的影響以及最優(yōu)參數(shù)的取值,顯然參數(shù)的值越高,分散化的效果越好,但是過高會影響算法,使得序列中的空地址數(shù)量|Θ|以及剩余地址數(shù)量|R|過多。為了評測序列的生成效果,考慮在執(zhí)行普通任務Q'(w)時掃描有效地址用時占總任務用時的百分比r,其反映了執(zhí)行任務時的工作效率。 (8) 首先分析參數(shù)s1,選取3組初始參數(shù)后調(diào)節(jié)s1觀察序列效果的變化,每組參數(shù)下運行5次后取平均值,結果如圖2所示。當s1位于序列地址總數(shù)n的一定比例之前|R|逐漸增長,|Θ|在一定區(qū)間內(nèi)變動;一定比例之后|R|和|Θ|急劇提高,此時r也迅速降低。這說明在不超過一定閾值的情況下增大s1對序列效果不會造成明顯的影響,并且閾值位于n·40%左右。 接下來分析參數(shù)s2和s3=?t/Δt」,選取4組初始參數(shù)后調(diào)節(jié)s2觀察序列效果的變化,每組參數(shù)下運行5次后取平均值,結果如圖3所示。隨著s2的增長,|Θ|和r起初保持穩(wěn)定,在s2超過一定閾值之后開始線性變化,并且s3越大閾值越小,同時變化速度越快;|R|非線性遞減,超過一定閾值后再次保持穩(wěn)定,并且s3越大閾值越小,同時遞減速度越快。因此,可以發(fā)現(xiàn)s2和s3位于閾值點時算法效果最好。 圖2 相關指標隨s1增長時的變化 圖3 相關指標隨s2增長時的變化 該小節(jié)基于文中的搜索技術初步模擬了全網(wǎng)掃描,并統(tǒng)計對蜜罐地址的掃描行為。實驗不考慮私有IPv4地址等特殊情況,認為所有IPv4地址均具備掃描價值。假設使用10個掃描節(jié)點在IPv4空間中搜索15種ICS協(xié)議設備,其中每種協(xié)議位于不同TCP端口上;每個掃描節(jié)點擁有1 200個掃描線程,執(zhí)行一次端口掃描用時Δt=0.5 s;地址分片長度l=131 072,參數(shù)s1=81 920,s2=640,s3=?t/Δt」=270。 首先隨機生成一個地址addr,然后基于算法生成45次序列,統(tǒng)計每次產(chǎn)生的剩余地址數(shù)和空地址數(shù),以及addr在生成序列中的位置。根據(jù)剩余地址數(shù)和空地址的平均情況,模擬出整個掃描任務矩陣以及補充任務集合,然后將任務依次調(diào)度給掃描節(jié)點,每次調(diào)度時從空閑線程數(shù)最多的掃描節(jié)點中隨機選取。最后模擬了3輪全網(wǎng)掃描,并從中取出addr所在的45個任務,統(tǒng)計出它被掃描時的時間點以及掃描節(jié)點,結果如圖4所示。 圖4 模擬掃描活動統(tǒng)計 在每輪全網(wǎng)掃描中,addr的15個ICS端口分別被掃描1次,并且掃描的時間間隔均衡,搜索效率較高。全網(wǎng)掃描的周期可以通過參數(shù)調(diào)整,在此次模擬中為32.6天。 針對已有聯(lián)網(wǎng)設備搜索對ICS設備重復掃描的問題,提出一種基于分散化序列的聯(lián)網(wǎng)ICS設備搜索技術,設計出分散化序列的啟發(fā)式生成算法,并通過實驗測試了兩種ICS協(xié)議下的設備信息獲取機制,分析了算法參數(shù)對生成的序列效果影響,模擬了全網(wǎng)掃描并統(tǒng)計出對單個IPv4地址的掃描行為特點。實驗結果表明,該方法能夠在分布式掃描全網(wǎng)ICS設備的同時避免重復掃描,提高了搜索效率。2 分散化序列及其生成算法
3 實驗分析
3.1 協(xié)議交互測試
3.2 算法參數(shù)分析
3.3 模擬搜索測試
4 結束語