暴力破解
知道了密码的加密算法之后,我们就可以生成弱口令字典,通过加密算法对弱口令进行加密,使用加密后的密码字典与PLC进行通信,如果破解成功,返回明文密码。
五、
存储块解密
知道了密码的加密过程,和密码的加密算法,那么CPU密码是怎样存储在PLC中呢?必须通过暴力破解的方式,才能获取未知设备的CPU密码吗?
我们研究S7-300 CPU密码得到以下成果:
1、CPU密码保存在SDB0块中
2、S7-300 CPU密码在块中的保存方式
以下3个图分别为未加密,只读权限,无读写权限的SDB0块的数据。在只读权限和无读写权限状态时,CPU密码均为000000。
经过研究得出以下结论:
红色方框内为加密后的密码,蓝色方框内的数字02代表只读权限,03代表不可读写权限。而第一张图中,因为没有设置密码,缺少这一部分内容。
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块,就可以直接根据块信息,获取明文密码,根本不需要暴力破解。在获取到明文密码后,通过发送密码校验的报文,就拥有下载的权限,进而可以直接改写密码为自己想要的设置,设置可以更改CPU的密码设置等级(只读或者无读写权限)。在设置CPU密码权限的时候,我们推荐设置为不可读写的状态,加大获取到SDB0块的难度,从而保护我们设置的密码。
六、保护方式及建议
通过以上示例,我们知晓了S7-300的CPU加密方式,并且给出了暴力破解的思路。反过来,我们可以通过暴力破解的思路,加固我们的PLC,让PLC更不容易被攻破,我们提出以下建议:
1、PLC一定要设置密码,并且设置为不可读不可写状态,尽可能多的保护您的程序。
2、在进行上装和下装的时候,电脑zuihao直接与PLC相连,避免透过中间人或者交换机等方式获取到通信报文,使攻击者有机可乘。
3、不要设置弱密码,尽量设置复杂密码,这样可以使得暴力破解的时间变得更长,被发现的几率也就更大。
4、不要将PLC暴露在公网上