| 注冊(cè)| 產(chǎn)品展廳| 收藏該商鋪

行業(yè)產(chǎn)品

當(dāng)前位置:
上海邑斯自動(dòng)化科技有限公司>>技術(shù)文章>>西門子S7-300/400密碼,是這樣破解的

西門子S7-300/400密碼,是這樣破解的

閱讀:5403        發(fā)布時(shí)間:2022-12-20
一提起PLC解密的事情,多少還是有點(diǎn)興奮的!其實(shí),對(duì)于S7-300CPU密碼的破解有好幾種方法,一種是用讀卡器加S7ImgWR/RD軟件,還有一種是直接用MMC卡解密軟件。但是,今天重點(diǎn)來說一說用TIA Portal+S7Client暴力破解西門子S7-300/400密碼。


一、

環(huán)境介紹


目前實(shí)驗(yàn)室使用的是Siemens S7-300PLC,CPU型號(hào)為315-2 PN/DP,破解使用到的工具如下表:

工具名稱

工具說明

TIA Portal V13

PLC編程工具

s7clientdemo.exe

S7-300輔助查看cpu密碼設(shè)置狀態(tài)工具

Wireshark

用來截取PLC和上位機(jī)通信的報(bào)文



二、

準(zhǔn)備工作


Siemens系列PLC的密碼,通常有4種設(shè)置狀態(tài),分別為:完*權(quán)限,只讀權(quán)限,最*權(quán)限,不允許上傳。

由于操作員的疏忽或者調(diào)試方便,通常會(huì)不給PLC設(shè)置密碼,或者只設(shè)置簡(jiǎn)單密碼,接下來我會(huì)展示這樣做的危險(xiǎn)性。

本文將從PLC密碼加密方式開始談起,之后會(huì)討論P(yáng)LC密碼被暴力破解的可能性,從而得出保證PLC密碼安全的方式。

圖片

上圖展示了S7-300的外形,通常是通過Step7或者博圖(TIA)軟件去對(duì)PLC進(jìn)行編程及設(shè)置。在這里我們使用博圖來給PLC設(shè)置密碼。



三、

算法加密

圖片


比如設(shè)置密碼狀態(tài)為只讀,密碼為:123456,然后重新通過上位機(jī)和PLC建立連接,驗(yàn)證密碼的時(shí)候,截取到如下報(bào)文:


圖片


密碼驗(yàn)證時(shí)候截取到的報(bào)文

分析得出規(guī)律:

S7-300用的是可逆加密算法,密碼長(zhǎng)度最多為8位,通過可逆算法轉(zhuǎn)換成8個(gè)16進(jìn)制數(shù)字通過S7協(xié)議發(fā)送給PLC。

1、將不超過8位的字符串轉(zhuǎn)換成8個(gè)16進(jìn)制數(shù)字:

2、opData數(shù)組元素默認(rèn)都是0x20

如果密碼為123456,可逆算法的代碼如下:


intmain(){    char opData[8],Pwd[8],pass[8];    int c;     opData[0] = '1';    opData[1] = '2';    opData[2] = '3';    opData[3] = '4';    opData[4] = '5';    opData[5] = '6';    opData[6] = 0x20;    opData[7] = 0x20;     Pwd[0] = opData[0] ^ 0x55;            Pwd[1] = opData[1] ^ 0x55;    for (c = 2; c < 8; c++) {         Pwd[c] = opData[c] ^ 0x55 ^ Pwd[c - 2];    };


程序運(yùn)行后得到的Pwd數(shù)組如下所示,和我們截取到的報(bào)文一致。從而說明我們找到的算法是正確的。


/*    Pwd[0] = 0x64;    Pwd[1] = 0x67;    Pwd[2] = 0x02;    Pwd[3] = 0x06;    Pwd[4] = 0x62;    Pwd[5] = 0x65;    Pwd[6] = 0x17;    Pwd[7] = 0x10;    */


當(dāng)發(fā)送了轉(zhuǎn)換后的密碼后,會(huì)得到PLC返回的報(bào)文,返回的報(bào)文中,有對(duì)發(fā)送的密碼正確性驗(yàn)證的結(jié)果,如果驗(yàn)證通過,就會(huì)將錯(cuò)誤碼那幾個(gè)位置位為0x0000,如果密碼不正確,就會(huì)是別的錯(cuò)誤碼。



四、

暴力破解


知道了密碼的加密算法之后,我們就可以生成弱口令字典,然后通過加密算法對(duì)弱口令進(jìn)行加密,使用加密后的密碼字典與PLC進(jìn)行通信,如果破解成功,返回明文密碼。

圖片


圖片
五、

存儲(chǔ)塊解密


知道了密碼的加密過程,和密碼的加密算法,那么CPU密碼是怎樣存儲(chǔ)在PLC中呢?必須通過暴力破解的方式,才能獲取未知設(shè)備的CPU密碼嗎?


我們研究S7-300 CPU密碼得到以下成果:


1、CPU密碼保存在SDB0塊中

2、S7-300 CPU密碼在塊中的保存方式

以下3個(gè)圖分別為未加密,只讀權(quán)限,無讀寫權(quán)限的SDB0塊的數(shù)據(jù)。在只讀權(quán)限和無讀寫權(quán)限狀態(tài)時(shí),CPU密碼均為000000。

圖片

圖片


圖片

經(jīng)過研究得出以下結(jié)論:


紅色方框內(nèi)為加密后的密碼,藍(lán)色方框內(nèi)的數(shù)字02代表只讀權(quán)限,03代表不可讀寫權(quán)限。而第一張圖中,因?yàn)闆]有設(shè)置密碼,所以缺少這一部分內(nèi)容。


3、加密算法:

我們找出了加密算法,算法和上文中算法類似但略有不同,同樣也是可逆的加密算法,具體加密算法程序如下:


charopData[8],Pwd[8],pass[8];    int c;     opData[0] = '1';    opData[1] = '2';    opData[2] = '3';    opData[3] = '4';    opData[4] = '5';    opData[5] = '6';    opData[6] = 0xaa;        opData[7] = 0xaa;     Pwd[0] = opData[0] ^ 0xaa;    Pwd[1] = opData[1] ^ 0xaa;    for (c = 2; c < 8; c++) {         Pwd[c] = opData[c] ^ 0xaa ^ Pwd[c - 2];    };


通過以上可逆算法,我們可以斷言,只要可以讀取SDB0塊,就可以直接根據(jù)塊信息,獲取明文密碼,根本不需要暴力破解。在獲取到明文密碼后,通過發(fā)送密碼校驗(yàn)的報(bào)文,就擁有下載的權(quán)限,進(jìn)而可以直接改寫密碼為自己想要的設(shè)置,設(shè)置可以更改CPU的密碼設(shè)置等級(jí)(只讀或者無讀寫權(quán)限)。因此,在設(shè)置CPU密碼權(quán)限的時(shí)候,我們推薦設(shè)置為不可讀寫的狀態(tài),加大獲取到SDB0塊的難度,從而保護(hù)我們?cè)O(shè)置的密碼。


六、

保護(hù)方式及建議


通過以上示例,我們知曉了S7-300的CPU加密方式,并且給出了暴力破解的思路。反過來,我們可以通過暴力破解的思路,加固我們的PLC,讓PLC更不容易被攻破,我們提出以下建議:

1、PLC一定要設(shè)置密碼,并且設(shè)置為不可讀不可寫狀態(tài),盡可能多的保護(hù)您的程序。

2、在進(jìn)行上裝和下裝的時(shí)候,電腦最好直接與PLC相連,避免透過中間人或者交換機(jī)等方式獲取到通信報(bào)文,使攻擊者有機(jī)可乘。

3、不要設(shè)置弱密碼,盡量設(shè)置復(fù)雜密碼,這樣可以使得暴力破解的時(shí)間變得更長(zhǎng),被發(fā)現(xiàn)的幾率也就更大。

4、不要將PLC暴露在公網(wǎng)上。


收藏該商鋪

請(qǐng) 登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時(shí)間回復(fù)您~
二維碼 意見反饋
在線留言