工控安全入門之攻與防
- 2019 年 12 月 10 日
- 筆記
0X00 工控安全案例
2010年6月伊朗核電站「震網(Stuxnet)」事件
2010 年 6 月,一個名為 Stuxnet處於休眠狀態的病毒潛伏在伊朗的鈾濃縮設施網路中,Stuxnet在位於納坦茲的離心機中被激活,控制了30%的納坦茲設施的電腦,致使伊朗暫時關閉了核設施和核電廠,震網病毒感染了全球超過20萬台電腦,摧毀了伊朗濃縮鈾工廠五分之一的離心機。震網病毒的感染途經是通過U盤傳播,然後修改PLC控制軟體程式碼,使PLC向用於分離濃縮鈾的離心機發出錯誤的命令。

土耳其原油輸送管道爆炸事件:
2014年12月,土耳其境內,由伊拉克向土耳其輸送原油的輸YouTube道爆炸。為監控從裏海通向地中海的1099英里的石YouTube道內的每一步,這條管道內安裝了探測器和攝影機,然而管道爆炸破壞前前,卻沒有引發一個遇險 訊號,原因是黑客關閉了警報、切斷了通訊的同時給管道內原有大幅增壓。

烏克蘭電網BlackEngery病毒事件:
2015年12月23日,烏克蘭電網遭網路攻擊, 受 影響家庭70萬戶,這是有史以來首次導致大規模 停電的網路攻擊。以BlackEnergy等相關惡意程式碼為主要攻擊工具,以郵件發送惡意程式碼載荷為最終攻擊的直接突破入口,通過遠程控制SCADA節點下達指令為斷電手段,以摧毀破壞SCADA系統實現遲滯恢復和狀態致盲,以DDoS 作為干擾,最後達成長時間停電並製造社會混亂的具有資訊戰水準的網路攻擊事件。

2017年WannaCry病毒席捲全球,中石油2萬多座加油站斷網
WannaCry勒索病毒蔓延全球,感染了150個國家的30多萬台電腦。中國中石油公司超過2萬座加油站也受到攻擊,在斷網約36小時左右才慢慢恢復。

2018年1月熔斷(Meltdown)和幽靈(Spectre)兩大新型漏洞,思科西門子多款工業交換機受影響
「熔斷」(Meltdown)和「幽靈」(Spectre)兩大新型漏洞通過攻擊獲取數據、讀取內核記憶體影響AMD、ARM、Intel系統和處理器等設備,思科800系列集成多業務路由器和工業乙太網4000系列交換機以及西門子工業設備已確認受到影響。

2018年2月歐洲廢水處理伺服器被惡意軟體入侵:
接入歐洲廢水設施運營技術網路的伺服器遭遇加密貨幣採礦惡意軟體入侵,拖垮廢水處理設備中的HMI伺服器CPU,導致歐洲廢水處理設備伺服器癱瘓 。

2018年4月美國天然氣輸氣管道公司遭到攻擊:
美國4家天然氣輸氣管道公司遭供應鏈攻擊,導致與客戶通訊系統被關閉。

2018年6月三一重工泵車失蹤案:
通過源程式碼找到遠程監控系統的漏洞,解鎖設備,損失10億元。

2018年8月3日,台積電感染WannaCry病毒
台積電位於台灣新竹科學園區的12英寸晶圓廠和營運總部的部分生產設備受到魔窟勒索病毒WannaCry勒索病毒的一個變種感染,具體現象是電腦藍屏,鎖各類文檔、資料庫,設備宕機或重複開機。幾個小時之內,台積電位於台中科學園區的Fab 15廠,以及台南科學園區的Fab 14廠也陸續被感染,這代表台積電在台灣北、中、南三處重要生產基地,同步因為病毒入侵而導致生產線停擺,損失高達26億,發生該事件的原因為新機台接入時,未進行隔離,確認無病毒,直接聯網,所有機台生產程式放在雲端,每次生產需要重新下發安裝,為提高效率,取消了各廠區間的防火牆,主機設備及系統過於陳舊,未進行升級,未安裝防病毒軟體。

2019年3月,委內瑞拉中國大部分地區停電
委內瑞拉發生全國範圍的大規模停電,首都加拉加斯以及其他大部分地區陷入一篇漆黑,全國18個州電力供應中斷,僅有5個州倖免,此次突發的電力系統崩潰沒有任何預兆。停電給委內瑞拉帶來了重大損失,全國交通癱瘓,地鐵系統關閉,醫院手術中斷,所有通訊線路中斷,航班無法正常起降。

2019年7月,紐約停電4個小時
美方報導稱:伊朗革命衛隊資訊戰部隊成功的突破了美國資訊戰部隊的圍堵,闖入了紐約市三十多個變電站的控制中心,並對控制中心進行資訊站破壞,導致了紐約全城大約4個小時的停電。這是幾十年來的第一次大規模停電造成混亂。

0X01工控系統漏洞存在現狀和不足
目前工控系統安全與傳統IT系統安全不同有以下幾點原因:
一、從安全優先順序來說:
1.工控系統網路安全焦點問題是生產過程穩定可靠,強調的是可用性,不能停產,不能發生生產安全事故。 2.工控系統網路通訊協議不同,大量的工控系統採用私有協議。 3.系統運行環境不同,工控系統運行環境相對落後,對系統穩定性要求高。 4.工控系統安全不是按照網路安全順序排序,而是可用性最重要,完整性和機密性在後,故相對於傳統IT系統的優先順序由機密性>完整性>可用性來說,工控系統安全恰恰相反,工控系統優先順序為可用性>完整性>機密性。
二、從防病毒軟體來說:
1.工控網路通常不允許連接互聯網,不具備及時更新病毒庫的條件。 2.工業控制系統通常不允許在生產運行期間進行系統升級。 3.病毒誤殺在工業控制系統中可能產生致命的後果,所以導致現在大量工作站處於無防護狀態。
三、從傳統防護設備來說(如IDS/IPS:):
1.工業控制系統通常不允許在運行期間進行系統升級。 2.工控網路通常不允許連接互聯網,不具備及時更新攻擊庫的條件。 3.IDS的高誤報率一直是制約它廣泛應用的主要因素。 4.IPS為了降低誤報,很大程度上是以犧牲檢出率為代價。
四、工控安全當下趨勢
工業系統、工業網路大多以「物理隔離」為核心安全手段隨著工控安全行業的蓬勃發展,隨著人工智慧、大數據、雲計算等新一代資訊技術的迅速發展,新技術的應用使得原來封閉的工業控制系統網路越來開放,尤其是「兩化融合」的深入以及「工業4.0」、「中國製造2025」等戰略的推進,關鍵基礎設施逐漸開始採用乙太網、通用協議、無線設備、遠程配置等。在互聯互通、縱向集成等新的生產模式下,關鍵基礎設施正逐漸暴露於互聯網中,工控系統下的安全問題所包含的軟體隱患、網路邊界隱患、環境和硬體隱患等問題,以及工控系統的網路安全協議問題,如作業系統的落後、修補程式的更新不及時、緩衝區溢出問題、拒絕服務漏洞、關鍵設備沒有冗餘備份,不安全的遠程訪問ICS組件等問題帶來的安全隱患問題。工控系統漏洞發現數量與日俱增,為網路攻擊以及病毒的滋生與傳播創造了適宜環境,如以勒索軟體為代表的新型惡意軟體不斷出現,對工業系統安全運營構成威脅。針對工業領域的網路攻擊呈組織化、遞增化發展,且攻擊方式呈現多樣性。
0X02 工控蜜罐CONPOT ICS/SCADA搭建
1、Conpot介紹
為了更好地學習工控相關知識,我們使用了Conpot進行搭建,Conpot是Glastopf下一個開源的ICS/SCADA蜜罐系統,工具可以實現ModBus SNMP等PLC的外部子站服務的模擬模擬。Conpot是一個部署在服務端的低交互ICS蜜罐,能夠快速地部署、修改和拓展。開發者通過提供一系列的通用工控協議,使得我們能夠非常快速地在我們的系統上構建一套複雜的工控基礎設施用於欺騙未知的攻擊者。Conpot一共支援bacnet、enip、guardian_ast、ipmi、kamstrup、misc、modbus、s7comm和snmp等10個協議。
協議 |
介紹 |
---|---|
bacnet |
用於智慧建築的通訊協議 |
enip |
基於通用工業協議 |
ipmi |
智慧平台管理介面,可以智慧地監視、控制和自動回報大量伺服器的運作狀況 |
modbus |
一種串列通訊協議 |
s7comm |
西門子S7通訊協議簇里的一種 |
snmp |
簡單的網路管理協議 |
http |
超文本傳輸協議 |
2、蜜罐搭建方法
注意:使用docker安裝後的docker不是直接在conpot目錄下,而應該在/home/conpot/.local/bin下。
三種安裝方式:
- Pre-Build鏡像: (1)docker pull honeynet/conpot (2)docker run -it -p 80:80 -p 102:102 -p 502:502 -p 161:161/udp --network=bridge honeynet/conpot:latest /bin/sh (3)conpot --template default (4)訪問http://MY_IP_ADDRESS - 從源程式碼構建Docker映像 (1)git clone https://github.com/mushorg/conpot.git (2)cd conpot (3)docker build -t conpot . (4)docker run -it -p 80:80 -p 102:102 -p 502:502 -p 161:161/udp --network=bridge conpot (5)訪問http://MY_IP_ADDRESS -從源程式碼構建並使用docker-compose運行 (1)安裝docker-compose (2)git clone https://github.com/mushorg/conpot.git (3)cd conpot/docker (4)docker-compose build (5)docker-compose up (6)docker-compose up -d (7)訪問http://MY_IP_ADDRESS - ubuntu安裝 (1)sudo apt-get install libsmi2ldbl snmp-mibs-downloader python-dev libevent-dev libxslt1-dev libxml2-dev (2)pip install conpot (3)訪問http://MY_IP_ADDRESS
3、搭建過程
這裡我使用了從源程式碼構建並使用docker-compose進行蜜罐搭建:(1)git clone

(2)cd conpot/docker 後執行docker-compose build

(3)docker-compose up

(4)訪問

0X03工控系統漏洞利用框架:
1、框架介紹:
工控ISF(Industrial exploit Framework)是一個基於Python的工控系統漏洞利用框架,整體類似於metasploit框架,我們使用該框架配合以上蜜罐環境進行演示。
工控協議客戶端
名稱 |
路徑 |
描述 |
---|---|---|
modbus_tcp_client |
icssploit / clients / modbus_tcp_client.py |
Modbus-TCP客戶端工具 |
wdb2_client |
icssploit / clients / wdb2_client.py |
WdbRPC版本2客戶端工具(Vxworks 6.x) |
s7_client |
icssploit / clients / s7_client.py |
s7comm客戶端工具(S7 300/400 PLC |
漏洞利用模組
名稱 |
路徑 |
描述 |
---|---|---|
s7_300_400_plc_control |
exploits / plcs / siemens / s7_300_400_plc_control.py |
S7-300 / 400 PLC啟停腳本 |
s7_1200_plc_control |
exploits / plcs / siemens / s7_1200_plc_control.py |
S7-1200 PLC啟停/重置 |
vxworks_rpc_dos |
exploits / plcs / vxworks / vxworks_rpc_dos.py |
Vxworks RPC遠程拒絕服務(CVE-2015-7599) |
quantum_140_plc_control |
exploits / plcs / schneider / quantum_140_plc_control.py |
quantum_140_plc_control.py 施耐德Quantum 140系列PLC啟停腳本 |
crash_qnx_inetd_tcp_service |
exploits / plcs / qnx / crash_qnx_inetd_tcp_service.py |
QNX Inetd TCP服務崩潰 |
qconn_remote_exec |
exploits / plcs / qnx / qconn_remote_exec.py |
qconn_remote_exec.py QNX QCONN遠程程式碼執行 |
profinet_set_ip |
exploits / plcs / siemens / profinet_set_ip.py |
Profinet DCP設備IP配置 |
掃描模組
名稱 |
路徑 |
描述 |
---|---|---|
profinet-dcp-scan |
scanners/profinet-dcp-scan.py |
Profinet DCP 掃描器 |
vxworks_6_scan |
scanners/vxworks_6_scan.py |
Vxworks 6.x 掃描器 |
s7comm_scan |
scanners/s7comm_scan.py |
S7comm 掃描器 |
enip_scan |
scanners/enip_scan.py |
EthernetIP 掃描器 |
ICS 協議模組 (使用Scapy編寫)
這些協議模組能夠與其他Fuzz框架進行結合,具體Fuzz模糊測試相關內容,可以參考團隊專欄小夥伴文章《基於Peach的Modbus協議模糊測試》。
名稱 |
路徑 |
描述 |
---|---|---|
pn_dcp |
icssploit/protocols/pn_dcp |
Profinet DCP 協議 |
modbus_tcp |
icssploit/protocols/modbus_tcp |
p Modbus TCP 協議 |
wdbrpc2 |
icssploit/protocols/wdbrpc2 |
WDB RPC Version 2 協議 |
s7comm |
icssploit/protocols/s7comm.py |
S7comm 協議 |
2、漏洞利用框架搭建
1)Python所依賴環境
在個人安裝過程中,python-nmap,gnureadline使用pip安裝未成功,單獨下載相關依賴包進行安裝
gnureadline (OSX only)requestsparamikobeautifulsoup4pysnmppython-nmapscapy
安裝方式:
1)git clone https://github.com/dark-lbp/isf/ 2)cd isf 3)python isf.py 啟動
安裝完成後,使用python isf.py,啟動框架,如下圖所示:

由於掃描和攻擊操作僅模組不同,所以我們直接使用西門子plc漏洞利用模組進行攻擊嘗試,首先show options參數可以需要設置的相關參數如下圖所示,:
exploits/plcs/siemens/s7_300_400_plc_control

此處設置攻擊目標為我們上面搭建的蜜罐靶機,然後執行攻擊模組:
set target 192.168.0.105 run

查看蜜罐發現收到了來自於攻擊模組數據包。

至此,一個簡單的模擬攻擊流程結束。
0X04工控資產識別及發現
1.網路空間搜索:
以以下案例簡單介紹幾個網路空間安全搜索引擎,排名不分先後,若想了解更多資料,請至」TideSec安全團隊「專欄查看。
FOFA-網路空間安全搜索引擎
網路空間資產檢索系統(FOFA)是世界上數據覆蓋更完整的IT設備搜索引擎,擁有全球聯網IT設備更全的DNA資訊。探索全球互聯網的資產資訊,進行資產及漏洞影響範圍分析、應用分布統計、應用流行度態勢感知等。
例如搜索全球範圍內,埠為102協議為S7的網路空間資產port=」102」 && protocol==」s7」

ZoomEye-網路空間搜索引擎
鍾馗之眼網路空間搜索引擎是中國安全公司知道創宇開發的網路空間搜索引擎,通過這個搜索引擎開放他們的海量資料庫,包括作業系統,Web服務,服務端語言,Web開發框架,Web應用,前端庫及第三方組件等等,結合NMAP大規模掃描結果進行整合。
例如搜索全球範圍內,埠為102協議為S7的網路空間資產port:102 +app:」Siemens S7 PLC」

Shodan-物聯網的搜索引擎
相對於ZoomEye,Shodan更側重於主機層面,作為一個針對網路設備的搜索引擎,它可以在極短的時間內在全球設備中搜索到你想找的設備資訊,此外Shodan是世界上第一個針對Internet連接設備的搜索引擎。
例如搜索全球範圍內,埠為102協議為S7的網路空間資產module: s7 port:102」

2.nmap腳本
Nmap是一款開源免費的網路發現(Network Discovery)和安全審計(Security Auditing)工具。軟體名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始創建的。隨後在開源社區眾多的志願者參與下,該工具逐漸成為最為流行安全必備工具之一。一般情況下,Nmap用於列舉網路主機清單、管理服務升級調度、監控主機或服務運行狀況。Nmap可以檢測目標機是否在線、埠開放情況、偵測運行的服務類型及版本資訊、偵測作業系統與設備類型等資訊。
我們利用Nmap腳本可以對S7、modbus的plc設備進行詳細掃描探測。
Nmap默認安裝在Windows環境下的腳本位置:
C:Program Files (x86)Nmapscripts,首先我們將自己收集有關工控掃描腳本複製到scripts目錄下,如下圖所示:

以下為Nmap腳本參數的規則:
-sC: 等價於 –script=default,使用默認類別的腳本進行掃描。 –script=: 使用某個或某類腳本進行掃描,支援通配符描述 –script-args=: 為腳本提供默認參數 –script-args-file=filename: 使用文件來為腳本提供參數 –script-trace: 顯示腳本執行過程中發送與接收的數據 –script-updatedb: 更新腳本資料庫 –script-help=: 顯示腳本的幫助資訊,其中部分可以逗號分隔的文件或腳本類別。
以下為Nmap腳本執行格式:
執行單個腳本:nmap –script /path/to/script.nse 執行多個腳本:nmap –script /path/to/script.nse,/another/path/script2.nse 執行文件夾包含的所有腳本:nmap –script/path/to/folder/
探測s7協議的設備詳細資訊:
nmap -v -script s7-info 172.16.111.162 -p 102,如下圖所示:

工控協議還有還有很多,由於團隊內小夥伴文章中已經對工控的資產發現和識別進行了詳細的闡述,故此處暫時以探測s7協議的設備為舉例。
Modbus Modbus協議是應用於電子控制器上的一種協議。通過此協議設備間可以通訊。它已成為一通用工業標準。 port:502 module modbus Siemens S7 s7協議是SIEMENS s7協議族的標準通訊協議,使用s7-應用介面的通訊不依賴特定的匯流排系統。 port:102 module: s7 DNP3 DNP(Distributed Network Protocol,分散式網路規約)是一種應用於自動化組件之間的通訊協議,常見於電力、水處理等行業。SCADA可> 以使用DNP協議與主站、RTU、及IED進行通訊。 port:20000 source address module: dnp3 Niagara Fox Fox協議是Tridium公司開發的Niagara框架的一部分,廣泛應用於樓宇自動化控制系統。 port:1911,4911 product:Niagara module: fox BACnet 樓宇自動控制網路數據通訊協議(BACnet)是針對採暖、通風、空調、製冷控制設備所設計,同時也為其他樓宇控制系統(例如照明、安保、消防等系統)的集成提供一個基本原則。 port:47808 module: bacnet EtherNet/IP Ethernet/IP是一個面向工業自動化應用的工業應用層協議。它建立在標準UDP/IP與TCP/IP協議之上,利用固定的乙太網硬體和軟體,為配置、訪問和控制工業自動化設備定義了一個應用層協議。 port 44818 module: ethernetip, ethernetip-udp GE-SRTP GE-SRTP協議由美國通用電氣公司開發,GE PLC可以通過GE-SRTP進行數據通訊和數據傳輸。 port:18245,18246 product:"general electric" module: general-electric-srtp HART-IP HART協議是美國Rosement公司於1985年推出的一種用於現場智慧儀錶和控制室設備之間的通訊協議。現已成為全球智慧儀錶的工業標準 。 port:5094 hart-ip module: hart-ip-udp PCWorx PCWorx協議由菲尼克斯電氣公司開發,目前廣泛使用於工控系統。PCWORX3.11是菲尼克斯電氣公司的專用協議。 port:1962 PLC module: pcworx MELSEC-Q MELSEC-Q系列設備使用專用的網路協議進行通訊,該系列設備可以提供高速、大容量的數據處理和機器控制。 port:5006,5007 product:mitsubishi module: melsec-q-tcp OMRON FINS 歐姆龍PLC使用網路協議FINS進行通訊,可通過多種不同的物理網路,如乙太網、控制器連接等。 port:9600 response code module: omron-tcp Crimson v3 協議被Crimson桌面軟體用於與Red Lion G306工控系統的HMI人機介面。 port:789 product:"Red Lion Controls" redlion-crimson3 Codesys CoDeSys編程介面在全球範圍內使用廣泛,全球上百個設備製造商的自動化設備中都是用了該編程介面。 module: codesys IEC 60870-5-104 IEC 60870-5-104是國際電工委員會制定的一個規範,用於適應和引導電力系統調度自動化的發展,規範調度自動化及遠動設備的技術性能。 port:2404 asdu address module: iec-104 ProConOS ProConOS是德國科維公司(KW-Software GmbH)開發的用於PLC的實時作業系統,它是一個高性能的PLC運行時引擎,目前廣泛使用於基於嵌入式和PC的工控系統。 port:20547 PLC module: proconos moxa-nport Moxa 串口伺服器專為工業應用而設計。不通配置組合的串口伺服器更能符合不同工業現場的需求。NPort系列串口伺服器讓傳統 RS-232/422/485設備立即聯網,提供您基於IP的串口聯網解決方案。 port:4800 moxa-nport
3.wireshark
Wireshark(前稱Ethereal)是一個網路封包分析軟體。網路封包分析軟體的功能是擷取網路封包,並儘可能顯示出最為詳細的網路封包資料。Wireshark使用WinPCAP作為介面,直接與網卡進行數據報文交換。
使用Wireshark抓取並分析西門子S7協議:

使用Wireshark抓取並分析Modbus協議

0X05工控系統安全防護建議:
1)網路邊界加強防護網路邊界可部署訪問控制設備,對需要遠程訪問的工控系統增加白名單的控制策略,僅開放需要的埠地址,如關閉Telnet等不必要埠。 2)安全漏洞加強管理 定期對工控系統進行漏洞掃描,對關鍵漏洞的修補制定跟蹤計劃。 3)重視網路安全工作 重視網路安全工作,加大工控系統暴露公網的整改力度。 4) 只有可信任的設備,才能接入控制網路,如外設管理,禁止未授權的U盤接入主機。 5) 只有可信任的消息,才能在網路上傳輸,應用白名單代替防病毒軟體,例如設置應用程式白名單,阻止未授權程式運行,只有可信任的軟體,才允許被執行。 6)工業防火牆代替IT防火牆,工控網路異常檢測代替IDS,做好網路隔離,部署工業控制網路監測與審計設備。 7)重要工業控制設備前端部署工業協議DPI功能的工業防火牆,可將工業控制設備的控制參數限定在正常的範圍,避免超出限值的違法操作或失誤操作。 8)定時對數據進行備份,及時做好數據備份工作,及時建立應急響應及災難恢復演練等流程。
0X06 結束語
該文章為Parad0x個人工控安全入門一些想法,還請各位大佬斧正,文中若涉及到攻擊等手段,僅可用於研究測試使用,請勿非法用作他途。
除本文中所涉及到的蜜罐及工控掃描腳本外個人還收集了部分工控資料,包括但不限於工控利用腳本、工控掃描探測腳本、工控設備默認密碼、協議數據包、PLC、Scada等相關工具及資料,可以關注「TideSec安全團隊」公眾號回復」工控工具包」獲取。
0X07參考及感謝:
https://www.jianshu.com/p/4c*dcf7ce7 https://www.freebuf.com/articles/ics-articles/209786.html http://www.mei.net.cn/jxgy/201904/819900.html
*本文原創作者:Parad0x,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載