基于主被動測量的 IoT 安全情報
工作來源
DSN 2021
工作背景
隨著 IoT 設備在家庭、公司、關鍵信息基礎設施和城市中的廣泛應用,IoT 安全確實已經滲透到社會生活的方方面面。與此同時,因為各種原因,IoT 設備的安全性目前仍然是落后的。
與兩個主題緊密相關,失陷 IoT 設備的指紋識別、監控網絡的可運營情報。
失陷 IoT 設備的指紋識別
- 蜜罐:通常來說,蜜罐只能模擬部分設備、固件和服務,且復雜的惡意軟件還會規避蜜罐。
- 觀測:一般需要額外的處理才能識別 IoT 惡意軟件的特定特征,如數據包中的 TCP seq 等于目的 IP 地址可歸因于 Mirai 感染了設備等特征,但并不是所有惡意軟件都有如此明顯的特征。
- 掃描:通過 Shodan 等掃描的方式發現也存在局限性,如惡意軟件可能為避免被競爭對手再次感染就關閉端口和服務、設備在防火墻后導致訪問受限、一些設備的 Banner 并不明顯等。
- ISP 級流量:利用骨干網流量來識別僵尸網絡活動和失陷主機通常需要密集的計算,且準確性可能相對較低。
- 內部流量:利用內部流量發現失陷 IoT 設備的異常流量,但相對規模較小且視角不大。
監控網絡的可運營情報
- GreyNoise 提供了互聯網范圍內 Scanner 的列表。
- Dshield 根據眾包 IDS 數據提供有關每個端口的日常合并統計數據。
- Shodan 是第一個持續監控網絡空間以檢索所有面向互聯網的搜索引擎。
網絡望遠鏡是一組可路由、已分配但未使用的 IP 地址,這些 IP 地址只接收數據包而不作出響應。由于沒有正常服務,不應該有任何 IP 向其發送數據包。
可以利用被動網絡望遠鏡流量收集惡意活動的數據,因為接收到的數據包:(1)網絡故障(2)DDoS的反射流量(3)互聯網范圍掃描。
工作設計
失陷主機會不斷掃描互聯網以發現更多易受攻擊的設備,根據包頭部分字段過濾反射數據包后,再使用閾值隨機游走(TRW)掃描檢測算法檢測掃描行為。
核心方法如下所示:

檢測到掃描行為后,會立刻探測該 IP 上是否存在開放端口和應用程序 Banner。根據 IoT 設備的指紋庫匹配 Banner 判斷主機是否為 IoT 設備。主機相關的流量和標簽用于訓練機器學習模型,該模型還應用于新發現的流量以預測標簽。
此前的研究表明,不同的僵尸網絡在掃描數據包中表現出的行為確實存在不同。例如掃描數據包到達間隔時間、目標端口以及每個端口的相應權重等。
更宏觀的整體架構如下所示:

工作前端利用來自 CAIDA 的網絡望遠鏡(1600萬+IP地址),其每小時收集到的被動流量超過 150GB,平均每秒超過一百萬個包。每小時的數據集使用 OpenStack Swift 進行壓縮和存儲,通過位于 UCSD 的集群提供對外訪問。
流檢測和數據包采樣在 CAIDA 的集群上進行,采樣包通過安全信道回傳至本地服務器進行進一步處理。
eX-IoT 的處理流水線被拆分成了幾個可單獨運行的模塊,以此實現實時高吞吐的并行處理。
后端數據主要存儲在三個數據庫中:用于存儲與失陷 IoT 設備相關威脅信息的 MongoDB 數據庫、用于存儲過去兩周內失陷 IoT 設備信息的 MongoDB 數據庫、用于存儲仍在活躍的失陷 IoT 設備信息的 Redis 數據庫。
前端處理
流檢測與數據包采樣模塊使用 C++ 開發,使用 Libtrace 實現實時處理。該程序將每小時的數據文件解壓并分析,將那些與反射放大攻擊無關的數據包(如僅設置了 TCP ACK 的數據包等)視為潛在掃描數據包。其狀態將會被保存在 GLib Hashtable 中:以源 IP 地址為關鍵字,源 IP 的狀態為值(開始時間戳、來自源 IP 的最新到達數據包的時間戳,來自源 IP 的數據包數量,是否為 Scanner)。
基于 TRW 進行 Scanner 檢測,如果源 IP 收到至少 100個沒有過期的數據包(連續數據包間到達間隔不超過300秒),則將源 IP 視為 Sacnner。此外,通過持續時間不低于 1 分鐘排除由于錯誤配置產生的網絡流。在判斷源 IP 為 Sanner 時,將接收到的數據包數量重置為零開始數據包采樣。
對于來自源 IP 的下一批傳入數據包,程序將會忽略只更新最新時間戳。由于處理批次一小時一次,如果最新時間戳在 1 小時前,則認為掃描已結束。程序還會每秒統計處理的包數、TCP/ICMP/UDP 包數、新檢測到掃描數、特定端口的數據包數。
每個小時的數據,大約需要處理 20 分鐘。程序使用 Socat 將數據回傳到本地服務器。
后端處理
- Receiver:接收來自 CAIDA 的數據并將信息存入 MongoDB。
- Packet Organizer:接收來自不同來源的采樣數據包,根據源 IP 和到達時間重新整理打包分發到后續模塊,忽略掉不能應用于模型的數據。模塊通過管道以JSON格式輸出到緩沖區。
- Buffer:緩沖區是利用 mbuffer 在內存中開辟的大 FIFO(15GB)。
- Scan Module:對已識別的 Scanner 記錄 10 萬條/1 小時的緩存,以每秒 5 千個的速率運行 Zmap 掃描目標端口(50個端口)、運行 Zgrab 處理 16 個協議。其支持的端口和協議如下所示,這些端口/協議都是響應速度較快的。

- Scan Module 還根據 Recog 和 Ztag 整理了一個 Banner 指紋庫,并使用 Beautifulsoup 與 regex 處理返回的 Banner 提取有關供應商、設備型號、固件版本等信息。該模塊還會保存滿足
[az]+[-]?[az!]*[0-9]+[-]?[-]?[a-z09]正則表達式的未知 Banner,擴展未知的新設備再生成規則。 - 該模塊還會輸出根據 IoT 惡意軟件(如Mirai)掃描模塊的包級指紋匹配與互聯網掃描工具(如ZMap、MASSCAN、Unicorn、Nmap)的結果。
- Anootate Module:預處理識別出的 Scanner 流量:(1)計算到達間隔時間、處理 TCP 可選字段、使用 MinMax 標準化每個字段,字段的最終列表如下所示:

- (2)計算來自每個源 IP 所有數據包中每個字段的最小值、第一分位數、中位數、第三分位數和最大值。這是一個 24×5=120 維的特征向量。
- 此模塊利用 MaxMind、IP WHOIS、rDNS 等各種數據擴展每個已識別 IP 地址的維度信息,包括地理位置、ISP、ASN、域名、電子郵件等信息。
- Update:在 Scan 中標記的流量傳遞到此,估算每個流的目標端口列表及其分布、掃描速率和地址重復率。根據 rDNS 數據可判斷為合法目的掃描的標記為良性,應用最新的分類器確定是否由失陷 IoT 設備生成。模型每天更新一次,使用最近14天的數據確保模型可以處理最新的信息。
工作準備
設備環境
CAIDA 的集群運行 Intel 8 核處理器(Skylake,IBRS)、頻率為 2.20GHz,內存 32GB。
Intel Xeon W-2145(16 核 3.70GHz)處理器、128 GB DDR4 內存、Intel 850 Pro 1TB SSD 硬盤。
基本方案
訓練數據與測試數據“二八分”,算法迭代次數 1000 次,算法選擇隨機森林。用數據測試對比隨機森林(RF)、SVM、高斯樸素貝葉斯(GNB)后,確認還是隨機森林效果好。
數據訪問
- 提供 Web 界面與 RESTful API 兩種方式訪問數據,
- 通過 DHS IMPACT 數據共享協議,可提供給其他人員使用
API 返回 JSON 對象,便于與第三方應用程序集成。想要使用可進一步查看細節:
API 文檔
https://github.com/eX-IoTsubmission/eX_IoT_API
工作評估
功能驗證
使用從 2021 年 3 月 14 日到 3 月 18 日這一周的數據進行測試。
- 與 Bad Packets 合作,發現情報與美國 IoT Exploit的關聯關系。
- 與捷克的 CSIRT 合作,發現情報與捷克 IoT Exploit 的關聯關系。
通過兩個來源,能夠驗證近 70% 的 Exploit,在捷克幾乎可以驗證 83%。
橫向比較
使用 eX-IoT 和 Dshield 以及 GreyNoise 進行比較。下表為一周內每天更新的平均數量:

GreyNoise 平均每天更新 215350 條情報,其中 85330 條為惡意,126018 條為未知,4002 條為良性。此外,GreyNoise 使用 Mirai 以及 Mirai 變種標記了 20557 條情報。DShield 則平均每天更新 214390 條情報。
從量上看,eX-IoT 發現的威脅是其他兩個來源的四倍。發現的失陷 IoT 設備數,eX-IoT 比 GreyNoise 高約 7 倍。
相比數量,獨家檢測也是很重要的。使用 2020 年 12 月 9 日時 eX-IoT 發現的新失陷 IoT 設備,包含 134782 個唯一 IP 地址。GreyNoise 有其中 28338 個 IP 地址,其中 10460 個被標記為 Mirai。而 DShield 只包含 8559 個 IP 地址。

通過數據可以發現,大約 76% 都是獨家發現,且 78.9% 的失陷 IoT 設備都沒有被 GreyNoise 發現,說明可以有效彌補現有方案中對 IoT 的不足。
自我發現
利用 Zmap 在 2020 年 12 月 9 日 7:30:00 以 1000 個每秒的速率對端口 80 執行了 3 小時的互聯網范圍掃描。
在當天 12:42:04 被 eX-IoT 所捕獲,標記為 Desktop(非 IoT) 和 工具為 Zmap,在掃描后五個小時被檢測出來,其中僅 CAIDA 在收集、壓縮、存儲就需要三個半小時的延遲。
eX-IoT 判斷掃描的起止時間為 7:30:24 和 17:48:59,誤差為 24 秒和 13 分鐘。而該 IP 沒有被 DShield 給出判斷,GreyNoise 在延遲十個小時后才給出結果且認定為是 Nmap。
數據評估
準確率為eX-IoT正確標記 IoT 設備的百分比,覆蓋率類似于召回率。
對 2020 年 12 月 7 日、8 日和 9 日的所有 Banner 記錄進行了檢查,準確率(精度)為 94.63%,覆蓋率(召回率)為 77.21%。
選擇所有在 2020 年 12 月 7 日至 9 日期間處于活動狀態的已發現失陷的 IoT 設備進行分析。(注:無法完全消除動態 IP 分配和 IP 流失對統計數據的影響)
發現 405875 個唯一 IP 地址相關的 488570 個實例,中國(43.46%)、印度(10.32%)、巴西(8.48%)、伊朗(5.51%)和墨西哥(3.52%)是受感染國家排名的 TOP5:

TOP5 的 ASN 為 4134 (21.28%)、4837 (16.45%)、9829 (5.38%)、27699 (4.96%) 和 58244 (3.30%)。
從行業分布來看,教育 (649)、制造 (240)、政府 (184)、銀行 (80) 和醫療 (79)都是需要關注的重點行業。
從端口來看,23 [TELNET] (43.25%)、8080 [HTTP] (37.40%)、80 [HTTP] (37.16%)、81 [HTTP] (13.10%) 和 5555 [ADB] (12.92%)。
工作思考
不到 10% 的失陷 IoT 設備返回應用程序 Banner,其中大約 3% 包含能夠確定的文本信息。對 Banner 的識別還是專業做網絡空間搜索引擎的廠商更準確也更全面,實際上這個工作提供的思路遠大于其效果。
中國的數量如此高可能與 Mozi 僵尸網絡有關,工作中有些值得商榷的地方暫且不表,主被動結合的方式實際上可以提供更完整的視角,這項研究工作可以在有數據來源的位置進行嘗試,對效果的進一步挖掘應該能得到更有價值的運營情報。