来自于工控通信协议的威胁

工控通信协议作为工控设备与应用、设备与设备之间沟通的一种重要语言。工控系统中如果需要实现远程数据监控(SCADA)就一定离不开通讯协议,SCADA系统中会使用经由双方约定的协议直接与下层设备或数据采集转换器进行数据通信。随着时代的发展,厂级监控的实时性、可靠性需求增高,工业通信总线通讯速率的不断提升,从RS232/485到工业以太网再到工业实时以太网,工控网络中大量引入了以太网,并且使用TCP/IP或ISO标准封装后进行传输,因为一般的工控协议都经历了长时间的演变与积累,协议在设计之初都没有考虑加密、认证等在当今看来保障用户安全的必要认证条件,如第一个现场总线协议Modbus由莫迪康与1979年提出,所以我们常见的工控网络协议的安全性一直都不高。加上工控协议的特性是面向命令、面向功能、轮询应答式,攻击者只需要掌握协议构造方式,并接入到了工控网络中,便可以通过协议对目标设备的任意数据进行篡改。

如何解决来自工控通信协议的威胁

一般常见工控协议中包含了大量的命令字,如读取、写入数据等,然而其中一部分高级或协议约定的自定义功能往往会给用户安全带来更多的威胁,如Modbus协议的从机诊断命令将会造成从机设备切换到侦听模式、CIP协议某些命令字还能导致设备直接重启、S7协议的STOP CPU功能将会导致PLC程序运行停止,在大多数的情况下用户在上位机进行组态时仅会使用协议的某些读取数据功能和固定范围、固定地址的写数据功能,而协议栈上更多的功能则不会应用于系统集成中。如果对协议字段的掌握和对协议命令字的掌握,便可以很灵活的将可能给用户带来风险和威胁的一些隐藏功能,单独使用应用层防火墙对报文进行深度过滤,或者使用IDS进行报警提醒,如下便总结了2个协议中常见的威胁样例以及报警规则的应用方式。

工控通信协议威胁常见样例

Modbus

严重等级 威胁行为描述 潜在危害
主站下发08号功能码 可能导致设备进入Standby状态
主站下发90(5A)号功能码-stop(Schneider) 导致PLC CPU进入STOP停机状态
主站下发90(5A)号功能码-download(Schneider) PLC的内部程序可能正在被替换程
主站下发90(5A)号功能码-upload(Schneider) 设备将工程上传至主站可能造成信息泄露
主站一次下发modbus报文超过260个字节 超出modbus tcp协议标准组包长度,可能导致设备拒绝服务
主站下发43(2B)号功能码 导致设备及其固件版本信息泄露

西门子S7协议

严重等级 威胁行为描述 潜在危害
主站下发STOP/RUN命令 导致设备进入停机状态/导致设备被启机初始化
主站下发download block命令 PLC的内部程序可能正在被替换程
主站下发delet block命令 PLC的内部程序块可能正在被删除
主站下发错误的密码请求 正在未授权访问
主站下发read szl请求 正在尝试获取设备模块信息、固件信息

解决与实践

如果了解了工控网络通信协议其中的威胁对正常运行所带来的潜在危害,我们其实可以很好的使用与创建规则进行拦截与报警,例如可以非常方便的基于Snort构建报警规则,如下为部分Snort规则的样例。

#
#
# $Id: myicsrules.rules,v 0.1,
#----------
# myicsrules RULES
# ICS protocal/ICS Software communication identification/Filter
# Siemens S7 TCP 102
# Modbus TCP 502
#
#
#
#
#
#----------
# Siemens S7 Filter rules
#----------
#设置S7 PLC内部时钟的时间
alert tcp any any -> any 102 (msg:"Request Time functions Set clock";content:"|03 00|";offset:0;depth:2;content:"|32 07 00|";offset:7;depth:3;content:"|00 01 12 04 11 47 02 00|";offset:17;depth:8;sid:8999907;)
#设置与S7 PLC会话的密码
alert tcp any any -> any 102 (msg:"Request Security functions Set PLC session password";content:"|03 00|";offset:0;depth:2;content:"|00 01 12 04 11 45 01 00|";offset:17;depth:8;sid:8999908;)
#设置S7 PLC的CPU到STOP状态
alert tcp any any -> any 102 (msg:"Request CPU functions Set PLC CPU STOP";content:"|29 00 00 00 00 00 09 50 5f 50 52 4f 47 52 41 4d|";sid:8999909;)
#暖启动S7 PLC的CPU到RUN状态
alert tcp any any -> any 102 (msg:"Request CPU functions Set PLC CPU Hot Restart";content:"|28 00 00 00 00 00 00 fd 00 00 09 50 5f 50 52 4f|";sid:8999910;)
#冷启动S7 PLC的CPU到RUN状态
alert tcp any any -> any 102 (msg:"Request CPU functions Set PLC CPU Cold Restart";content:"|28 00 00 00 00 00 00 fd 00 02 43 20 09 50 5f 50 52 4f 47 52 41 4d|";sid:8999911;)
#正在写S7 PLC内部的内存变量
alert tcp any any -> any 102 (msg:"Write Var";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|05|";offset:17;depth:1;sid:8999912;)
#正在请求下载程序块
alert tcp any any -> any 102 (msg:"Request download";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1a|";offset:17;depth:1;sid:8999913;)
#开始请求下载程序块
alert tcp any any -> any 102 (msg:"Download block";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1b|";offset:17;depth:1;sid:8999914;)
#程序块下载结束
alert tcp any any -> any 102 (msg:"Download ended";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1c|";offset:17;depth:1;sid:8999915;)
#正在请求上载程序块
alert tcp any any -> any 102 (msg:"Start upload";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1d|";offset:17;depth:1;sid:8999916;)
#开始上载程序块
alert tcp any any -> any 102 (msg:"Upload";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1e|";offset:17;depth:1;sid:8999917;)
#结束上载程序块
alert tcp any any -> any 102 (msg:"End upload";content:"|03 00|";offset:0;depth:2;content:"|32 01|";offset:7;depth:2;content:"|1f|";offset:17;depth:1;sid:8999918;)
#删除S7 PLC内部程序块操作
alert tcp any any -> any 102 (msg:"Delet block";content:"|03 00|";offset:0;depth:2content:"|05 5f 44 45 4c 45|";sid:8999919;)#
#----------
# Modbus Filter rules
#----------
#正在写单线圈寄存器
alert tcp any any -> any 502 (msg:"Modbus TCP/Write Single Coil";content:"|00 00|";offset:2; depth:2; content:"|05|";offset:7;depth:1;sid:8999100;)
#正在写单个保持寄存器
alert tcp any any -> any 502 (msg:"Modbus TCP/Write Single Register";content:"|00 00|";offset:2; depth:2; content:"|06|";offset:7;depth:1;sid:8999101;)
#正在读从站状态
alert tcp any any -> any 502 (msg:"Modbus TCP/Read Exception Status";content:"|00 00|";offset:2; depth:2; content:"|07|";offset:7;depth:1;sid:8999102;)
#诊断设备命令
alert tcp any any -> any 502 (msg:"Modbus TCP/Diagnostics Device";content:"|00 00|";offset:2; depth:2; content:"|08|";offset:7;depth:1;sid:8999103;)
#正在写多个线圈寄存器
alert tcp any any -> any 502 (msg:"Modbus TCP/Write Multiple Coils";content:"|00 00|";offset:2; depth:2; content:"|0f|";offset:7;depth:1;sid:8999104;)
#正在写多个保持寄存器
alert tcp any any -> any 502 (msg:"Modbus TCP/Write Multiple registers";content:"|00 00|";offset:2; depth:2; content:"|10|";offset:7;depth:1;sid:8999105;)
#正在写文件参数
alert tcp any any -> any 502 (msg:"Modbus TCP/Write File Record";content:"|00 00|";offset:2; depth:2; content:"|15|";offset:7;depth:1;sid:8999106;)
#屏蔽写寄存器
alert tcp any any -> any 502 (msg:"Modbus TCP/Mask Write Register";content:"|00 00|";offset:2; depth:2; content:"|16|";offset:7;depth:1;sid:8999107;)
#读写多个寄存器
lert tcp any any -> any 502 (msg:"Modbus TCP/Read/Write Multiple registers";content:"|00 00|";offset:2; depth:2; content:"|17|";offset:7;depth:1;sid:8999108;)
#正在枚举设备信息
alert tcp any any -> any 502 (msg:"Modbus TCP/Read Device Identification";content:"|00 00|";offset:2; depth:2; content:"|2B|";offset:7;depth:1;sid:8999109;)
#正在枚举施耐德昆腾PLC的内存串号
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Request Memory Card ID";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|00 06 06|";offset:8;depth:3;sid:8999110;)
#正在枚举施耐德昆腾PLC的CPU模块信息
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Request CPU Module info";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|00 02|";offset:8;depth:2;dsize:10;sid:8999111;)
#正在枚举施耐德昆腾PLC内部的工程名称
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Request Project Project file name";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|f6 00|";offset:17;depth:2;sid:8999112;)
#正在枚举施耐德昆腾PLC内部的工程上次修改时间
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Request Project Information(Revision and Last Modified)";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|03 00|";offset:17;depth:2;sid:8999113;)
#正在将施耐德昆腾PLC的CPU设置到STOP状态
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Set PLC CPU STOP";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|40|";offset:9;depth:1;sid:8999114;)
#正在将施耐德昆腾PLC的CPU设置到RUN状态
alert tcp any any -> any 502 (msg:"Schneider PLC(Quantumn) uses function code 90 for communications the Unity pro software Set PLC CPU Restart";content:"|00 00|";offset:2;depth:2;content:"|5a|";offset:7;depth:1;content:"|41|";offset:9;depth:1;sid:8999115;)

一旦网络中触发规则即可实现联动操作与报警。

更多规则

SCADA-Rules

Quickdraw SCADA IDS(Digitalbond)

解决工控网络通信协议威胁的实践相关推荐

  1. 工控网络安全性测试解决方案

     工业控制网络面临的安全威胁   ♦ 传统的工控网络具备的以下特点:   ♦ 强调实时I/O能力,而非更高的网络安全能力.   ♦ 极少安装普通的防病毒软件,就算安装了也难以实时更新病毒库.   ...

  2. 物理隔离已是过去 工控网络如何更好地保护SCADA

    2014年11月,来自本古里安大学的研究人员发布了AirHopper,该恶意软件可以强制计算机将敏感信息以键盘敲击的形式,通过无线电波传送给无线接收器. 研究团队接下来在没有网络.SIM卡或WiFi的 ...

  3. 工控网络安全产品---学习笔记

    工控网络安全产品 常见的工控安全产品分类 防护类产品 审计类产品 终端类产品 检测类产品 管理类产品 工业互联网态势感知(内网运维管理中心) 物联网态势感知(物联网在线监测系) 工控安全实验室 工控安 ...

  4. 【工控安全产品】工控网络审计与监测系统

    简介 工控监控与审计系统,是通过对流量进行分析,专门针对工业控制网络的信息安全审计系统.它采用旁路部署,对工业生产过程"零风险",基于对工业控制协议(如IEC104.S7.DNP3 ...

  5. 五国启动税务执法联盟以解决加密货币网络犯罪威胁

    点击上方 "蓝色字" 可关注我们! 暴走时评: 美国国税局(IRS)与澳大利亚,加拿大,荷兰和英国四个国家的税务执法机构合作发起了一个国际工作组,处理加密货币犯罪. 新联盟被称为& ...

  6. 物理隔离又怎样?工控网络的五大风险

    在互联世界里,因为ICS/SCADA(工业控制系统/监控和数据采集系统)系统与互联网物理隔离就对网络攻击免疫的老一套认知已经不再适用.虽然很多企业已经承认传统物理隔离正在消失,有些企业依然坚信这是一种 ...

  7. 工控机和工控服务器通信协议,基于智能巡检机器人的通用通信协议

    1.基于智能巡检机器人的通用通信协议,其特征在于,包括: 51. 服务器发送数据包;所述数据包包含:流向字段.数据类型字段以及校验位: 52. 工控机接收数据包,根据该数据包的校验位通过CRC校验位进 ...

  8. 信息安全保障人员(CISAW)工控网络安全方向认证介绍

    信息安全保障人员(CISAW)工控网络安全方向认证a信息安全保障人员(CISAW)工控网络安全方向认证介绍~ 中国网络安全审查技术与认证中心依据<信息安全人员认证准则>,发布了信息安全保障 ...

  9. get最IN工控安全技术,看匡恩网络权威报告

    2017年伊始,匡恩网络发布了<2016年工业控制网络安全态势报告>(以下简称 "报告"),匡恩网络已连续三年撰写并发布报告.报告全面介绍了国内外工控系统网络安全发展现 ...

最新文章

  1. 慕课乐学python单元测试答案_乐学Python_章节测验,期末考试,慕课答案查询公众号...
  2. python合并两个数据框_使用python合并两个数据框
  3. CSS 基础入门语法
  4. redis简介与常用数据类型介绍
  5. c php乱码,Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码
  6. 计算机软件故障排除ppt,常见故障分析.ppt
  7. 波士顿大学 计算机专业,波士顿大学本科计算机专业课程设置是怎样的?
  8. db2 windows linux,Migrate DB2 v9 on windows to DB2 v10.5 on linux
  9. window7系统电脑屏幕亮度调节
  10. 台式电脑win7旗舰版 怎么调节屏幕亮度 显示器太亮了!
  11. WGCLOUD在windows部署运行怎么实现隐藏窗口
  12. python中pip组件版本过低的解决方法
  13. 使用LZMA算法(转载)
  14. ArcGIS发展历史及体系架构
  15. html固定内容的文本框,文本域文字内容指定选中 张鑫旭-鑫空间-鑫生活
  16. 原料采购流程图模板分享
  17. 【转】SIMCOM的AT指令
  18. Vim插件之vim-surround
  19. 基于Kera框架的手写数字识别
  20. 推荐几本Java程序员必读之热门书单的好书!!!

热门文章

  1. Linux_进程管理计划任务
  2. 为Visual C++ 6.0添加批量注释和取消批量注释功能
  3. 监控利器Prometheus初探
  4. 转:几款主流 NoSql 数据库的对比
  5. [译]React Component最佳实践
  6. OSG的HUD抬头文字显示
  7. java ExecutorService
  8. 不能创建Outlook邮件的解决办法
  9. 敲山震虎?继MongoDB之后,AWS又对Elasticsearch下手了
  10. Java之IO,BIO,NIO,AIO