图 4 窃听攻击的流程
3 安全应对策略
由于在设计DNP3.0总线协议时,主要考虑协议的功能和传输效率,而没有过多地考虑协议的安全性,致使DNP3.0总线协议的安全性很低,无法鉴别系统中某个设备的合法性,也无法防止报文被入侵者窃听。为了提高SCADA系统中DNP3.0总线协议的安全性,需要在标准DNP3.0协议的基础上增加安全措施。
3.1 校验传输报文
为了防止中间人攻击,可以在DNP3.0总线协议中增加校验报文,校验报文中含有校验字节,将其附加在某条正常通信报文的后面,发送到报文的接收方。因为DNP3.0协议中主站或外站都可以主动发出报文,所以主站或外站均可发起校验报文。接收方收到校验报文后,读取其中的校验字节,然后根据事先预置的校验算法计算校验值,并在响应报文中将校验值回送到校验报文的发出方。因为校验算法是事先预置的,所以入侵者无法知道根据校验字节计算正确的校验值,校验报文的发出方可以根据校验值判断接收方的合法性。校验字节是一次性的,每次发送后发出方会产生新的校验字节。
为提高通信效率,发出方无需在每条请求中都增加校验字节,仅在满足以下条件时应当发出校验报文。
1. 需要校验报文接收方的合法性;
2. 达到随机时间;
3. 在发出控制命令、读取关键数据时;
4. 某次通信时接收方收到异常报文,则在下一次通信时应当发送校验报文。
3.2 预置白名单列表
为防止中间人攻击和拒绝服务攻击,可以在SCADA系统的每个设备中预置白名单列表[ ],即设备只能与白名单上所列举的设备进行通信。
为了防止入侵者将合法设备停止,并把自己的地址替换为合法地址,为每一个合法设备预置一个唯一的标志码,该标识码在系统内部是公开的[ ]。每个设备的存储空间中都预置一个白名单,其中包含两列,第一列包括所有预置设备的地址,第二列为对应设备的标识码。在发出请求报文时,根据自己的标识码和报文内容计算得到一个标识值,并将标识值附加在报文上。接收方收到报文后,根据报文发送方的地址查询白名单,得到发出方的标识码,再根据同样的算法计算标识值,如果报文中的标识值和自己计算得到的标识值一致,则认为报文是系统内合法设备发出的。