NSA開發的工控ICS/SCADA態勢感知開源工具Grassmarlin(附下載地址)

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

工具簡介

GRASSMARLIN是一款由美國國家安全局開發的,能夠幫助運維工程師在IP網絡上發現並編目監控和數據採集系統(SCADA)和工業控制系統(ICS)主機的開源軟件工具,也被稱爲被動網絡映射器。

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

其數據源十分多樣化,包括PCAP文件、路由器和交換機配置文件、CAM表以及實時網絡數據包的捕獲。該工具能夠自動識別可用網絡,生成網絡拓撲,實現主機間通信的可視化,還能夠展示從主機通信中所提取的元數據。

像nmap、plcscan這些主動映射工具會通過網絡發送數據包並進行分析,最終得出一個存在可能性的結論。但GRASSMARLIN並非這樣的分析工具,它只是被動地對工業設備進行映射,幫助系統管理員、審計員或其它人員完成深度分析的工作。其功能重點不在於如何從海量數據得出某個結論,而是通過梳理這些數據,幫助工作人員作出正確率更高的決策。

支持系統

GRASSMARLIN適用於以下系統:

Microsoft Windows(64位的Win7、8、10)

Fedora(23)、Ubuntu(14.04、15.10以及SecurityOnion)

Kali2.0

CentOS(6、7)

Debian(8)

當然它也有適用於其它系統的版本,如32位的Windows系統。雖然軟件開發人員也在這些環境中進行了測試,但是在沒有附加配置的情況下,他們無法保證這個工具能夠正常運行。在其它這些平臺上運行GRASSMARLIN可能會導致性能下降或造成安裝後需重新配置等問題。

工作原理詳解

被動檢測

因其檢測方式被動,GRASSMARLIN不會在網絡上產生任何流量。它只和傳統的數據包分析器一樣,嗅探網絡上的流量。這也意味着GRASSMARLIN只能分析實際在其主機上嗅探到的流量。

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

GRASSMARLIN的可視範圍

邏輯視圖能夠在實時流量捕獲時獲得,或者通過捕獲文件(PCAP文件)獲取。和邏輯視圖類似,物理視圖也通過Cisco路由器的日誌被動地生成。

邏輯視圖

該視圖下的網絡拓撲圖如下:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

帶有兩臺西門子PLC的邏輯視圖

該拓撲是通過使用工業通信協議S7Comm的2個工業設備的數據包捕獲而生成。那些PCAP文件可以從https://wiki.wireshark.org/S7comm下載。

上面主圖(上圖右側)展示了網絡上的設備、設備間的通信、子網、通過IP地址識別的每臺設備情況。

另外利用整合的數字簽名,GRASSMARLIN能夠識別工業設備及設備所使用的協議:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

GRASSMARLIN提供的邏輯視圖詳情

上圖這種情況下所使用的協議是S7Comm。另外設備作用也較詳細:主機(人機界面——HMI,又稱用戶界面)負責提供命令,從機(可編程邏輯控制器——PLC)負責執行這些命令。ICS管理員還能獲知有助於定位設備的廠商名稱。如果IP地址是公開的(當然這裏我們不討論這種情況),則可以通過各國國旗確定具體國家。

所有這些信息都是在捕獲的數據包和GRASSMARLIN簽名之間進行對比後產生的。因此,用戶可以根據1至5的信任度屬性對現狀的可信度作出自己的判斷。

GRASSMARLIN也能夠隔離與特定設備相關的通信,並進行第一次分析:數據包大小、發包時間、數據包來源(如果使用多個PCAP文件):

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

GRASSMARLIN提供的分析數據

協議簽名

GRASSMARLIN還含有簽名或指紋功能,可識別邏輯視圖中使用的協議。每個簽名由兩種元素組成:

1. 過濾器元素:描述要檢測的元素

2. Payload(有效負載)元素:向用戶返回信息

一個簽名可以由多個過濾器組成;一個payload(有效負載)對應一個過濾器:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

MODBUS簽名示例

過濾器基本上能夠描述OSI模型的第2層到第4層的協議屬性。下表是所有可用的過濾器:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

可用過濾器

有效載荷旨在通過從數據包中提取一些字節等方式向用戶提供更多信息。

當前版本的GRASSMARLIN(v3)有54個立即可用的指紋,涵蓋大多數工業協議。該工具最近已經開放源代碼(01/28/16),隨着時間的推移,其簽名數量可能會增加,準確性也會提高。

簽名是以XML格式進行編輯的,但是GRASSMARLIN提出了一種圖形工具——FingerPrint Editor,有助於創建簽名:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

Fingerprint Editor(指紋編輯器):用於編輯簽名的圖形工具

物理視圖

該視圖展現的是設備之間存在的物理鏈路:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

物理視圖

該視圖的關注點在於網絡方面,展現了工業設備和網絡設備之間的物理連接。GRASSMARLIN的V3版本僅支持Cisco路由器,並從3個命令的輸出生成物理視圖:

“show running-config”

“show ip arp”(OU)“show mac address-table”

“show interfaces”

只要這些命令的輸出以簡單文本文件的形式保存,GRASSMARLIN就可以生成物理視圖。

數據導出

GRASSMARLIN導出的數據包括3種格式:

1. 以PNG格式導出的視圖。

2. 以XML格式導出的數據:

保存邏輯視圖中所有樹狀圖的數據;

GRASSMARLIN將該數據作爲會話數據。

3. 存檔數據的導出;包括:XML格式的數據和實時捕獲所生成的PCAP文件。

基準測試

我們在Solucom的某個ICS模型上進行了測試,將GRASSMARLIN應用於實際環境中。

測試環境介紹

ICS模型模擬一個railway switch,由以下部分組成:

1臺西門子HIM;

1臺西門子PLC;

2臺施耐德PLC;

1臺交換機(switch)。

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

ISC測試模型

安裝了GRASSMLARIN的工作站直接連接到交換機上的鏡像端口,訪問ICS模型上的整個通信過程。由於該模型沒有Cisco設備,所以我們只測試了邏輯視圖。

測試

經過實時的數據捕獲,GRASSMARLIN將生成以下這個視圖:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

測試臺的邏輯視圖

經過(手動)重組後的視圖:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

重組後的邏輯視圖

通訊被攔截後,設備信息會快速顯示在圖中。上圖中可以看出GRASSMARLIN已正確識別所有設備,並正確給出了每臺設備所使用的協議。另外,其輸出的XML文件也很好地生成了GRASSMARLIN所提取的所有信息,實現未來的重複利用:

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

輸出的XML文件

但是在整個過程中,我們也看到了GRASSMARLIN的一些弊端:

1. 簽名不一致

若某設備匹配多個簽名,GRASSMARLIN只會選擇其中一個。這個可能是HMI的問題,因爲HMI利用不同的通信協議與多個PLC進行交互。

2. 有些數字簽名信息不完整

大多數數字簽名在其payload上都有描述字段,用來描述已識別的設備。如果這些字段是空白的或信息不充分的,那麼識別工業設備可能也會變得更加複雜。

3. 分析功能有限

GRASSMARLIN僅提供通信分析的第一個元素,如數據包的大小、接收時間。改進此功能的一個可能的方法是添加例如HIM和PLC之間的通信模式識別。

結論

目前市場上已經有很多類似的被動檢測式的工具。但是GRASSMARLIN是一個歷史上不可多得的專注於工業控制領域的開源工具。

比如說,一款名爲NetworkMiner的工具能夠利用nmap、p0f和Ettercap等著名工具的簽名來獲取網絡拓撲。但NetworkMiner沒有任何可開箱即用的工業簽名,因此其準確性也遠不如GRASSMARLIN。

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

2個西門子PLC下NetworkMiner的輸出

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

其它示例——帶有2個西門子PLC的p0f的輸出

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

帶有2個西門子PLC的GRASSMARLIN的輸出

可以仔細觀察一下輸出結果:沒有對比就沒有傷害。

界面介紹

載入GRASSMARLIN後會自動打開一個新的不顯示任何數據的會話框。GRASSMARLIN會自動加載插件,對GeoIP數據庫執行完整性檢查,加載指紋並執行其他初始化任務。

NSA開發的ICSSCADA態勢感知開源工具Grassmarlin(附下載地址)

窗口右側的主顯示屏中含多個選項卡。每個會話均包含了至少一個邏輯視圖(列出所有設備及設備間通信)、物理視圖(列出工業設備和網絡設備之間的物理鏈路)和Sniffles(也稱爲網格圖)的一個選項卡。每個選項卡中的內容都實現了可視化。

窗口左側被分爲兩部分。下半部分含消息日誌,顯示有關該應用程序活動的狀態更新、警告、錯誤等信息。上半部分是對當前可視化內容鏡像的樹狀圖。截圖中顯示當前無可視化內容,因此也沒有鏡像的樹狀圖。更改選項卡就會改變樹狀圖和“可視化”中顯示的內容。文末的用戶手冊文檔中詳細討論了不同的可視化內容。

消息日誌的下方是內存指示器,由內存使用量(左邊數字)、總可用內存(右邊數字)以及內存使用所佔百分比的進度條構成。

主窗口上方是主菜單和工具欄。工具欄左側的三個圖標從左到右依次爲導入、加載會話和保存會話。在工具欄的右側是一個組合框,用於選擇Live PCAP設備以及啓動和停止Live PCAP。除了主窗口之外,後臺還會打開包含診斷和調試數據的控制檯窗口。

文末福利 

工具下載鏈接:

https://github.com/iadgov/grassmarlin

英文版用戶手冊:

https://github.com/iadgov/GRASSMARLIN/blob/master/GRASSMARLIN%20User%20Guide.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章