徐彭娜,彭行雄
1(福州職業技術學院 阿里巴巴大數據學院,福州 350108)
2(福建師范大學 網絡與數據中心,福州 350117)
近年來,隨著智能手機以及攝像頭、打印機等IoT終端的快速發展,人們逐漸傾向于連接或使用IoT 終端進行工作和學習,個人的身份信息和行為信息都作為物聯網服務中重要的數據,園區網絡管理機構對各個IoT 終端進行管理和認證.而伴隨著5G 時代的來臨,IoT 終端的數據流量呈現出爆炸式增長,偽裝成IoT 終端訪問園區數據以及竊取個人隱私數據使得園區網絡安全面臨巨大挑戰[1].為了加強網絡安全,對網絡空間中的IoT 終端的研究是當前的熱點[2].
利用異常檢測算法的IoT 終端識別技術保證大數據平臺安全性是一種有效的解決方式,但仍然存在許多困難.第一,在服務器端匯聚的IoT 終端的網絡流量主要是以TCP、UDP 等為主的報文數據,其海量性以及時效性可能導致現有IoT 終端識別技術無法在短時間內迅速檢測出異常;第二,由于每個終端設備在出廠后都有指紋信息以及通信行為數據,在應用層進行的基于Web 流量中用戶行為的IoT 終端識別,主要通過用戶行為數據來反映訪問習慣,根據攻擊者與正常訪問者的行為邏輯不同來進行識別.但對于攝像頭、打印機等啞終端發送報文數據方面的研究不多.IoT 終端中存在大量的啞終端,主要通過TCP 或UDP 報文和服務器進行通信[3],難以直接從Web 流量角度來識別[2].第三,5G 時代使得IoT 終端不得不面臨大數據挑戰,需要依托于大數據平臺完成IoT 終端識別算法處理,給服務器帶來性能和成本等多方面壓力.因此,如何高效快速的利用報文數據在少量內存中識別IoT 終端具有重要意義.
針對以上問題,本文提出基于文件分時索引的IoT 終端識別算法(a real-time IoT terminal recognition algorithm for huge data based on File Time-Sharing Index,IoTFTSI)大幅度降低實時IoT 終端識別中的內存消耗.具體方法是:首先,利用哈希桶多進程按批次分發數據,提高數據吞吐量,并建立內存分時索引元數據;其次,使用文件的分時索引來存儲構建會話的中間數據;最后,控制內存分時索引元數據觸發從少量文件中提取特征并進行IoT終端識別,而達到在少量磁盤消耗的代價下,將內存消耗降低92%后并保證IoT 終端識別算法精度.
隨著物聯網在智慧城市、智慧園區等各個領域的廣泛應用,物聯網的安全問題也層出不窮.當前,物聯網安全問題主要通過IoT 終端識別技術[2,4]來解決.IoT 終端識別的核心是通過指紋生成技術,將探測到的IoT 終端數據經過特征提取并轉換為相應的指紋,從而根據分類模型識別IoT 終端.
一般情況下IoT 終端的數據是成對出現的,例如請求和響應包.數據可來自傳輸層、網絡層和應用層協議,特別是傳輸層的TCP/UDP的數據報文頭部包含了大量可用信息,例如分段時長、延時、請求字節數等豐富的可用于特征提取的數據[4].Beverly[5]使用半鏈接TCP 探測及交互時間延遲,完成全網拓撲結構識別.但僅支持IPV4 協議的網段.Liu 等[6]通過發送四組報文到防火墻后而得到的報文時間差異作為特征,然后通過統計學習方式識別IoT 終端類型.但報文特征有限,識別率不高.Shamsi 等[7]提出的Heshel 方法利用TCP 數據包發送時間與重傳時間的差異性作為特征,并使用EM 算法降低網絡抖動、丟包等因素的影響.但是主要數據是設備操作系統信息,有效的設備行為數據包不多.
隨著5G 技術的興起,例如智能終端與服務器存在大量的交互,勢必其TCP/UDP 等數據流量大幅度增加.Bezawada 等[8]通過從網絡流量中提取設備行為的近似特征,用于訓練設備類型的機器學習模型.Yang等[9]利用神經網絡對監控設備的海量數據報文進行解析,提高了IoT 終端的識別率.賈煜璇[2]通過建立一個IoT 終端識別系統對海量的TCP 數據進行提取和分類,具有較高的精確率.宋金珂[3]實現了大規模實時在線監控設備的隱私檢測,但每次檢測的資源成本較大.使用大規模流量來描繪行為輪廓是當前的研究熱點[2,10],引入機器學習或者深度學習的方法對網絡流量進行分析,雖然能夠提高IoT 終端識別準確率并提高系統的自動化能力,但使得承載IoT 終端識別技術的系統尤其是對于實時性要求高的系統或服務器帶來了資源成本的大幅度提升.尹方鳴等[11]提出一種基于內存受限的RFID 復雜事件處理優化算法,使用文件分時索引方法進行海量數據中的復雜事件處理,降低了資源消耗成本.因此,降低大規模流量下IoT 終端識別的資源消耗是IoT 終端識別技術中的關鍵問題.
基于以上工作,受到文獻[11]的啟發,本文建立一個新的IoT 終端識別算法模型,該模型并不針對IoT終端識別準確率的提升,而是借助于文件分時索引技術,以極小的磁盤消耗代價達到大幅度降低實時IoT終端識別中的內存消耗的目標.
生成會話的目標是為IoT 終端識別提供數據支持,本文使用數據特征較為豐富的TCP/UDP 數據[12],并使用FlowBroker[13]抓取報文數據Packet,最后利用機器學習算法對報文組成會話后的特征向量進行分析.在構建流的特征向量前,對報文生成會話的過程約束如下:
(1)構建會話序列S:根據四元組k收集在時間Ts內的報文數據組成會話,Ts指從第一次收集到某k的報文的時間開始計算.使用非自然時間的超時機制,對各k維護Ts時間內的緩存并能觸發生成會話,而k相同的報文在Ts內將構成會話序列S.對于啞終端而言,其報文數據中的k會維持長時間不變.對于非啞終端而言,其報文數據最終符合用戶的習慣,文獻[14]表明網絡流量的訪問概率服從齊普夫分布,即非啞終端訪問服務器時,其訪問次數和訪問概率成反比.因此可以使用較少的報文數量np來控制報文數量,以防止在Ts內出現了熱點問題.
(2)提取會話流特征向量SF:收集ns條k相同的會話后,統計并提取會話特征SF.其中ns需要根據不同的場景調整.
基于內存的會話生成算法在接收到報文時,根據k存放到集合KP中,如果該k是第一次出現,則記錄該k的時間作為初始時間;否則,則將當前時間和初始時間對比,超過設定的Ts則形成會話,并從KP移出,否則加入KP.由于每個k都有一個需要維護的Ts,其難點包括以下兩個方面:一方面,當該時間段內數據量巨大時,內存占用量極大,需要設計良好的反壓機制.另一方面,KP到達Ts時需要快速老化,否則會影響后續進入系統的數據.該問題屬于復雜事件處理范疇,文獻[11]表明,在內存受限的情況下,使用B±樹分時優化索引(BIOT)的復雜事件處理算法將數據流按時序進行分割且用B±樹進行區間分塊索引.受此啟發,本文使用文件的分時索引來存儲構建會話的中間數據,達到減少內存消耗的目標.圖1是使用文件的分時索引存儲會話中間數據的描述.
相似地,橫坐標為時間線,表示在Ti到Ti+1時間內的文件索引情況.豎直方向上,A表示哈希桶的集合,共有b個Bucket,通過對數據包p的字符串進行哈希運算分配到Bucket 中,其中b的值影響算法的并行性能.B表示Bucket 中IP(終端)的集合,共有n個IP,表示通過哈希運算分配到該Bucket 中的IP 對應的數據包p.C表示IP 對應的KP,共有m個k.D表示k對應的數據包p的集合P,共有z個p.在文件分時索引算法的文件存儲階段中,A和B都表示為索引的集合,C表示文件的集合,D則是文件中內容的集合.在內存索引階段中,使用TR集合來存儲以上A和B構成的二級索引元數據,TR在內存中用于加速文件的索引過程,TR在算法啟動時從數據庫中加載狀態.

圖1 使用文件的分時索引存儲會話中間數據
ks表示Bucketi中的四元組集合.IP 表示ks集合中某個k解析后的源IP 地址.TRIP表示TR中IP的集合,TRKey表示TR中k的集合.fl表示IP和k索引到的會話文件的最后更新時間和文件長度.activeIP表示IP的激活狀態,當值為true 時表示處于激活狀態,允許和IP 相關的新的報文進入,否則不允許進入.activek表示某會話的激活狀態,當值為true 時表示處于激活狀態,允許與k相關的報文進入,否則不允許進入.lk表示從消息隊列消費的當前批次中k對應的報文數量,m表示IP 對應的會話數量.δt表示當前時間和的ft差值.np表示每個會話中的報文數量上限,δl表示np和當前會話文件中報文數量的差值.ns表示每個IP 允許的會話數量上限.IoT-FTSI 算法實現如算法1 所示.

算法1.IoT-FTSI 1)for k in ks:2)if ip in TRIP &&activeIP:3)if key in TRk &&activek:4)if δt<Ts>&&fl< np:

5)wf()6)else:even(RF_FE)7)else:8)if m <ns:9)if lk<np:even(RF_FE)10)else:even(AW)11)else:even(RF_FE)12)else:even(AW)?
IoT-FTSI 算法的步驟描述如下:步驟1)遍歷ks.步驟2)判斷源自k中的IP是否存在于內存的二級索引TR的第一級索引中,并且當前ip處于激活狀態,如果是則進入步驟3),否則進入步驟12).步驟3)判斷k是否存在于內存的二級索引TR的第二級索引中,并且當前Key 處于激活狀態,如果是則進入步驟4),否則進入步驟7).步驟4)判斷δt是否超過了Ts,并且當前會話文件的文件長度fl是否超過了報文最大數量np,如果是則進入步驟5),否則進入步驟6).步驟5)中的wf()函數功能為寫入文件,wf函數的算法描述如算法2 所示.

算法2.wf 1)del wf():2)if δl>=lk: even(MW)3)else:even(AW)4)update(ft,fl)
算法wf主要功能是判斷待寫入的報文是否超過了會話文件允許的最大報文數量上限,如果超過(包含等于)則觸發事件even(MV),即將待寫入的報文數據切割出δl長度,再將會話文件中的報文全部提取出來,進行合并后進行特征提取;如果未超過,則觸發事件even(AW),即將所有待寫入報文數據全部寫入文件中.這種寫入方式主要是減少和磁盤的讀寫交互.而且wf()函數采用文件的順序讀寫,對磁盤的開銷也比較小.最后在以讀寫文件為主的事件結束后,需要對會話文件的信息進行更新,即更新ft和fl.
IoT-FTSI 算法的步驟6)觸發事件even(RF_FE),其算法描述如算法3 所示.

算法3.even(RF_FE)1)fe(ip)2)k.clean 3)remove_file(k)4)m+=15)if m>=ns:activeIP=activek=False
事件even(RF_FE)的功能前置條件是會話已經達到了Ts并且會話文件長度已經達到了np,那么此時不需要再將報文數據寫入會話文件,并且直接讀取IP 下的ns個會話文件,使用fe()函數對二級索引TR中IP索引下的所有k的會話文件進行特征提取,并將activeIP設置為凍結狀態.同時清空內存中的k以及刪除該IP的所有會話文件.
在磁盤占用方面,IP 體現為文件夾名,k體現為csv文件,文件中的每行是報文,并刪除了四元組信息,可將原有處于內存中的JSON 格式的600 Byte的報文對象壓縮為50 Byte 以內的字符串.實際內存最大使用量=b×n×報文CSV 字符串字節數,默認情況下我們使用4 進程,即b=4,每個IP 桶最大允許存放報文數量n=20 000個,并且默認設置反壓閾值(back pressure threshold,bpt)為0.8,即當報文數量達到最大允許報文數的反壓閾值時則會進行休眠操作.默認值=4×20 000×50 Byte≈4 MB.另外,與磁盤的交互主要表現為文件追加和刪除文件的順序批量操作.經過測試,實驗用機械硬盤的每秒進行讀寫操作的次數(input/output operations per second,iops)為138 MB/s,IoT-FTSI 算法最差情況為將全部數據順序寫入磁盤,iops為4 MB/s,因此對磁盤影響不大.
在時間消耗方面,IoT-FTSI 算法從消息隊列每次拉取的報文數量為batch=b×n×bpt,每個報文數據通過不同的進程分配到不同桶中,在桶的內部,報文數據按照k進行分組.IoT-FTSI 算法遍歷ks中的k,最后將k拉取到的所有數據寫入磁盤.最差情況下,將np數量的報文從磁盤中讀取出來進行特征提取.因此IoT-FTSI算法的時間消耗主要為磁盤的讀寫耗時.
本實驗目標在于驗證IoT-FTSI 算法的內存消耗,數據來源于通過位于高校服務器上FlowBroker 兩次采集到的IoT 報文數據,分別為Da和Db 兩個數據集,包含了337 個終端.采集時間為工作日的流量高峰時段,每次采集為1.5 小時,數據量分別為21 305 332、22 700 220 條.Da 數據集采集時間為9:00~10:30,Db 數據集采集時間為14:00~15:30.考慮到IoT-FTSI 算法可能存在的計算延遲,需要將FlowBroker的數據緩存到消息隊列中,其結構包含了除了四元組外的包大小、時間延遲等特征數據[2].
根據文獻[10] 中提到使用特征加權聚類算法(Feature Selection algorithm based on Feature Weighted Clustering,FS-FWC)作為IoT 識別算法基礎.實驗采用在預測問題中常用的準確率作為評測標準.將FSFWC 算法和使用IoT-FTSI 算法進行對比,在相同的準確率下,比較內存消耗量(memery used,mu)和數據處理完的時間消耗量(time used,tu).為了減少實驗中因系統環境導致的不一致性以及模擬真實運行環境.將實驗部署在相同docker 虛擬出的Ubuntu 系統環境中,在7200 r/min的機械硬盤上限制虛擬環境最大使用4 核CPU和4GB 內存的硬件資源.實驗結果為在數據集Da和Db 上運行10 次并取平均值.
首先,在Da和Db 上使用FS-FWC 算法進行預測,為了分析準確率和np的關系,觀察不斷增大np后準確率的變化情況.實驗結果如圖2所示.

圖2 增大np 后算法準確率變化情況
圖2中橫坐標代表np值,最小為1000,最大為20 000.縱坐標代表使用系統FS-FWC 算法時在Da和Db的準確率的平均值.每個報文占用內存大小約為600 字節.那么對于337 個終端而言,內存使用量理論值已經達到了3.77 GB,因此試驗中將np最大值設定為20 000.從圖2中可以看出當np達到10 000 時,準確率已經達到0.93,隨著np的增加,準確率增加非常緩慢.當np達到18 000 時,準確率達到0.96,繼續增加np導致的準確率極小,因此將np設定為18 000.那么內存使用量理論值為3.38 GB.
其次,在docker 虛擬出的Ubuntu 系統中使用free命令觀察FS-FWC 算法和IoT-FTSI 算法在處理數據集時的內存總體消耗情況與時間的關系,實驗結果如圖3所示.在圖3和圖4中前3 分鐘為空載時間,可以看出IoT-FTSI 使用的內存是超過FS-FWC的,這是因為IoT-FTSI 算法的元數據消耗了部分內存.

圖3 Da 數據集中算法內存使用量隨時間變化情況

圖4 Db 數據集中算法內存使用量隨時間變化情況
從第3 分鐘開始,IoT-FTSI和FS-FWC 系統都從消息隊列中拉取同樣的數據,兩者的mu都突發性的增長,但對比發現FS-FWC的mu持續遞增.另外,FSFWC的mu對突發的熱點更加敏感,反映了IoT-FTSI更加穩定,面臨更小的內存耗盡風險.在圖3中,IoTFTSI的mu在前55 分鐘有明顯的波動現象,因為每個會話在Ts間隔就會觸發特征提取與預測,使得mu突然增加;而且mu較小,原因是其最大理論mu更小.IoTFTSI在55 分鐘后的mu趨于平緩且接近空載時的mu,原因是前期已處理的報文被過濾掉.反觀FS-FWC,雖然mu在25 分鐘后出現下降,但是由于其報文都是存放在內存中,使得mu居高不下并且在55 分鐘時達到最高點.在圖4中,IoT-FTSI的mu在前25 分鐘有明顯波動現象,但是其波動的mu仍然較小,雖然在前25 分鐘時數據量突發增長,但是由于最大報文數量np的限定和達到反壓閾值bpt時的反壓功能使得其具有更好的穩定性.
最后,通過磁盤讀寫性能來對比A和B 系統對磁盤的影響.實驗結果如表1所示.

表1 算法在不同數據集上的磁盤性能對比情況
在表1中可以明顯發現IoT-FTSI 對磁盤的影響更大,這主要是其將用于產生會話的臨時報文數據按批次寫,同時伴隨著到期刪除文件、特征提取時全量讀取文件內容等讀過程.而FS-FWC 則對磁盤影響較小,原因是其產生會話、特征提取等都在內存中完成,最后只有少量的預測結果寫入磁盤.故IoT-FTSI 對磁盤的影響更大,但對于順序讀寫性能達到138 MB/s的磁盤而言,其影響程度不大.
本文針對實時IoT 終端識別算法對服務器資源需求高的問題,結合文件分時索引的方法將原存儲于內存中的用于產生會話的大量臨時報文數據使用文件分時索引存儲在磁盤中,提出了IoT-FTSI 算法,使用少量的磁盤讀寫代價替換了大量內存的資源耗用,同時降低了熱點問題導致的內存高占用風險.實驗結果表明,該算法利用文件分時索引方法生成會話,能夠更合理的使用服務器資源,降低成本,可以有效地應用于IoT 終端識別.然而,文中提到依賴于哈希算法將報文數據負載到桶中,哈希算法的性能影響了算法的負載均衡能力.因此,如果更好地提高IoT-FTSI 算法負載均衡性能是下一步要做的工作.