前言:

互聯與共享成爲工業控制系統新的發展方向,工控系統與企業辦公網和互聯網逐漸相連,工業控制網絡環境變得越來越開放。工業控制系統需從設備安全和信息數據安全兩方面保障系統穩定運行,從 ICS 自身結構看,由於通信協議相對簡單、操作系統和軟件沒有相應的防護措施,這些漏洞都可被利用進行破壞性的操作 ;從外部網絡環境看,ICS 廣泛使用 TCP/IP 等通信協議,導致傳統的 IT 系統攻擊行爲蔓延到工控網絡,致使工業控制系統面臨更大的安全威脅。

前兩篇我主要講述了中間人攻擊的方式和對PLC的控制操作,今天來談一下如何防禦中間人攻擊,最重要的部分是流量異常檢測,文中涉及一些檢測思路可能存在不嚴謹之處,歡迎大家指正哈。

檢測思路:

在實際工業控制網絡中,網絡流量一般分爲兩大類,第一類是上位機發送給PLC 對工控現場進行實時控制的下行數據,第二類是上位機HMI 軟件與PLC 協商由PLC 定時發送給HMI 軟件工控現場實時數據,能實時反映工控現場的工作情況。兩類數據的可通過S7 議的ROSCTR 字段不同的值進行劃分。第一類數據ROSCTR的值爲0×01和0×03,第二類數據ROSCTR固定值爲0×07。且針對工控網絡的攻擊通常都是通過獲取上位機權限進而控制PLC 的。

其實我們流量檢測也離不開源IP地址、目的IP地址、通信協議、通信端口、通信方向這幾個信息,需要在不同情境下靈活取用。

一、PLC專用網絡內突然冒出新IP

正常情況下在企業PLC網絡區會做禁止外聯的操作,突然出現一個新的IP,也就代表有新的設備接入,這也是憨憨入侵者做的事。一般只需通過簡單的ARP協議進行探測,物理地址廣播,如果對照平時積攢的MAC地址表不一樣,將會及時告警處理。理想的網絡安全信任關係應建立在IP+MAC基礎上。

我們也可以用到ICMP協議,來確認IP包是否成功到達目標地址以及通知我們在發送過程中IP包被丟棄的原因。檢測設備A爲了知道新的設備B的MAC地址而通過路由器發送ARP包,經過多次發送ARP請求包後,由於始終無法到達設備B,路由器返回一個ICMP Destination Unreachable給A。也可以嘗試通過簡單網絡管理協議(SNMP)的GET命令從設備讀取數據,例如操作系統和網絡協議狀態等。

當然也可以使用我之前介紹的ICS/SCADA態勢感知開源工具GRASSMARLIN來進行實時的數據捕獲,繪製網絡拓撲圖,查看是否有新增設備。

其輸出的Details信息也很好展示了GRASSMARLIN所獲取的信息,例如下圖,是否是PLC,使用的通訊協議以及可能的操作系統版本等,可以大大方便我們的檢測。

也可以打印所有在通信的IP,不管是Src或者Dst,這樣更方便明瞭可以看出是否存在陌生的IP設備。

另外的話也可以使用CSET或者Splonebox專注於工業控制系統的網絡評估工具,對其網絡及其設備進行持續的分析,因這些工具功能較多,後續單獨開一期講。鏈接奉上: https://github.com/cisagov/cset

二、兩個IP之間無通信,突然之間互通信

第二點我們需要關注下從無通信的設備突然之間有了通信,是不是有人在做壞事。這個簡單,我們將抓取的流量包用wireshark分析一下就好,例如下圖設置ip.src==231,ip.dst=163看那一下他們之間是否有通信就好。

三、兩個IP之間有通信,突然之間有S7通信 

其實可以理解爲兩臺設備之間突然有COTP、S7comm、S7comm-plus協議的通信,而我們需要做的就是檢測這些通信協議。除了用wireshark、Xplico和Tcptrace等軟件直接進行分析外,我們也可以用Pcap-Analyzer可視化工具,也可以自己開發工具進行檢測,總之方法很多。鏈接奉上: https://github.com/HatBoy/Pcap-Analyzer

四、協議包長度檢測

這個我爲什麼要單獨拎出來講呢,因爲很多特殊的包長度是固定的,例如第二篇講的S7-300提交密碼的數據包長度爲91,接下來就是要進行讀寫操作了,S7-1200進行停啓操作攜帶Session id的數據包也是固定155,我們用python裏的scapy模塊從pcap包裏面提取五元組信息進行檢測分析就行。

五、功能碼檢測 Function Code

所謂的行爲異常,就是正常情況下哪有那麼多頻繁的停啓操作對不對!還有比較生僻的功能碼,例如修改安全功能、時間功能和數控編程等都需注意,可能有些特殊的情況用的比較多,但是根據自己ICS實際情況該檢測的還得檢測。說句中肯的,即使PLC在生產過程中關閉,很多工程師首先想到的也會是機械故障,而不是外部攻擊!

六、攻擊類型檢測

這裏拓展一下,其實流量異常類型也有好多種:

 1、中間人攻擊:通過攔截HMI 與PLC 之間正常工作時的網絡通信數據,並對數據進行篡改和嗅探,可以同時達到欺騙HMI 與PLC 的目的。
 2、Snap7 攻擊:工業控制場景中往往缺乏PLC 對於HMI 設備的檢測認證機制,因此可以通過在局域網內的另一臺主機上安裝S7 協議的編程軟件,對PLC 進行編程操作。
 3、響應注入攻擊:HMI 組態軟件除了對系統進行數據收集的功能外,也會同時對PLC 返回的各項參數如發電機轉速值進行監測,如果轉速超過一定閾值,HMI軟件就會對操作人員進行告警,通過捕獲PLC 發往HMI 的響應數據包,並修改數據包中的關鍵內容,可以掩蓋PLC 的異常運行信息。
 4、序列攻擊:通過修改數據包的傳送次序,來達到篡改工業控制系統運行邏輯的目的,因爲數據包是網絡中出現的正常數據包,對單一數據包的檢驗方式無法發現這種異常。

這就需要平時對PLC操作的習慣進行數據積累,來判斷出是否在進行異常操作,往深了說就是要利用機器學習等建模來進一步分析。例如2015年針對S7 SCADA 網絡提出了基於DFA 的入侵檢測模型,能有效地識別部分工控網絡中的攻擊行爲。還有基於狀態的協議分析檢測(SPAD)也是一種有效的檢測方法。

總結:

如果不進行異常流量的檢測,攻擊者要記錄流量,他們可以很容易地提取數據,如用戶名、密碼、命令、協商會話、邏輯等。這些變量中的任何一個都可能導致PLC的整個系統崩潰。

本文主要是給大家一個流量異常檢測的思路,至於檢測方法多種多樣,大家擇優選擇。像網絡設備故障,網絡拓撲結構的改變、惡意網絡攻擊等,都會擾亂網絡流量的正常行爲模式。所以,對網絡流量進行異常檢測,首先需要建立的是正常流量行爲模式,通過正常行爲模式的一些特徵參數來進行異常檢測。然而減少誤報率成了檢測的重中之重,我們不僅用ICS流量異常檢測的常用思路,也要結合自己的工控環境和平時積攢的威脅情報來建立屬於自己的流量檢測模型。

*本文作者:黃一113530,轉載請註明來自FreeBuf.COM

相關文章