今天,天气挺好,瓢泼大雨。。好了,回归现实,今天在群里看到工业信息的比赛,就想着良辰美景别浪费,学习一波。
首先根据工业和信息化部关于印发《工业控制系统信息安全防护指南》的通知:了解一些大概。
一,前言
专业术语
SCADA:数据采集与监视控制系统
ICS:工业控制系统
DCS:分布式控制系统/集散控制系统
PCS:过程控制系统
ESD:应急停车系统
PLC:可编程序控制器(Programmable Logic Controller) (大三第二学期,这学期刚学过。)
RTU:远程终端控制系统
IED:智能监测单元
HMI:人机界面(Human Machine Interface)
MIS:管理信息系统(Management Information System)
SIS: 生产过程自动化监控和管理系统(Supervisory Information System)
MES:制造执行管理系统
什么是工控系统:
ICS(Industrial control system)⼯业控制系统
SCADA(Supervisory Control And Data Acquisition)数据采集与监视控制系统
DCS(Distributed Control System)分布式控制系统
什么是工控组件:
PLC 可编程逻辑控制器 (这学期学过)
RTU 远程控制单元
HMI 人机交互界面
工业控制设备:
Ø 硬件:PLC、DCS、RTU、现场执行设备
Ø 软件:固件、上位机软件
二 固件方面
固件方面主要安全漏洞:
Ø 通用服务方面:
主要漏洞:HTTP、FTP、SNMP、TELNET、SSH等服务
程序存在安全漏洞;应用程序逻辑漏洞(如HTTP)
产生原因:组件版本过低、应用程序编程缺陷
应对措施:升级补丁;关闭非必要服务(设备自身、边界
访问控制设备);安全的编程+严格的测试
Ø 协议栈方面:
主要漏洞:协议健壮性问题,导致短时失去响应甚至宕机
产生原因:校验机制不完善
应对措施:以白名单方式对所有的请求进行校验,不符合
协议规约的请求包一律丢弃
Ø 补丁升级: 主要漏洞:伪造、植入恶意程序 的升级包 产生原因:缺少升级包文件的完 整性、真实性校验机制 应对措施:对升级包文件进行签 名,升级时验签
Ø 其他方面:
主要漏洞:鉴别信息硬编码、缓冲区溢出、敏感信息(组
态程序)明文存储、代码质量安全/缺陷等
产生原因:编程缺陷、白盒测试不充分
应对措施:加强人工代码审核、完善代码白盒测试
工控协议方面
工控协议方面主要安全缺陷:
工控协议特点:不支持身份认证、无加密措施;具有应用层的完整性校验措施。
Ø 数据包重放攻击:
主要缺陷:数据包重放攻击、实现对工控设备的启停、点位控制等
产生原因:无身份验证措施、会话安全措施不足
应对措施:增加身份认证措施、增加会话序列号/随机数/
时间戳等;限制会话的IP/MAC地址
上位机软件方面
上位机软件方面主要安全缺陷:
Ø 传统软件的信息安全问题:
主要缺陷:身份鉴别机制缺陷(上位机本地验证)、访问控制绕过、敏感信息明文存储等
产生原因:编程缺陷
应对措施:加强人工代码审核、完善代码白盒测试;对上位机操作系统进行强加固
上位机软件方面主要安全缺陷:
Ø 可执行文件篡改:
主要缺陷:可对可执行文件(包括DLL文件)等进行篡改
产生原因:缺少文件签名及验证机制
应对措施:对重要文件进行签名,调用时验证;主机白名单产品防护
1.2.1 上位机系统简介
上位机是指可以直接发出操控命令的计算机,一般是PC机屏幕 上显示各种信号变化(液压,水位,温度等) .下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机之类的。 上位机发出的命令首先给下位机,下位机再根据此
命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据 (-般为模拟量)转换成数字信号反馈给上位机。
1.2.2上位机漏洞分析
上位机漏洞包括通用平台的系统漏洞、采用的中间件漏洞、工控系统驱动漏洞、组态开发软件漏洞、ActiveX控件和文件格式等, 这些漏洞形成的原因有多种。目前,针对上位机环境开发语言多为C/C++,下面我们对使用C/C+ +开发的
上位机系统环境的常见漏洞从源头进行分析。
(1)缓冲区溢出漏洞
缓冲区溢出漏洞一般是在程序编写的时候不进行边界检查,超长数据可以导致程序的缓冲区边界被覆盖,通过精心布置恶意代码在某-个瞬间获得EIP的控制权并让恶意代码获得可执行的时机和权限。 在C/C+ +开发的上位机系统里比较常见的就是缓冲区数组。
案例分享: ABB PB610 IDAL FTP server缓冲区溢出漏洞
2019年06月28日,CNVD官网公开ABB PB610 IDAL FTP server缓冲区溢出漏洞, ABB PB610中的IDAL FTP server存在缓冲区溢出漏洞。该漏洞源于网络系统或产品在内存上执行操作时,未正确验证数据边界,导致向关联的其他内存位置上执行了错误的读写操作。攻击者可利用该漏洞导致缓冲区溢出或堆溢出等。
(2)字符串溢出漏洞
字符串存在于各种命令行参数,在上位机系统和系统使用者的交互使用过程中会存在输入的行为。XML在上位机系统中的广泛应用也使得字符串形式的输入交互变得更为广泛。字符串管理和字符串操作的失误已经在实际应用过程中产生
过大量的漏洞,差异错误、空结尾错误、字符串截断和无边界检查字符串复制是字符串常见的4种错误。
案例分享: Siemens SIMATIC WinCC HMI字符串栈溢出漏洞(CNVD-2012-0465)
CNVD官方于2012年02月07日公开了Siemens SIMATIC WinCC HMI字符串栈溢出漏洞,该漏洞为高危通用型漏洞。
Siemens SIMATIC作为工控领域的一款采用单一工程技术环境的自动化软件。 Siemens SIMATIC WinCC HMI Web服务器存在安全漏洞。当传送模式启用时运行时装载器监听在2308/TCP或50523/TCP端口, 没有正确数据段长度和Unicode字符串,可触发栈溢出,导致任意代码执行。
(3)指针相关漏洞
来自外部的数据输入都要存储在内存当中,如果存放的时候产生写入越界正好覆盖掉函数指针,此时程序的函数执行流程就会发生改变,如果被覆盖的地址是一-段精心构造的恶意代码, 此恶意代码就会有被执行的机会。不仅是函数指针,
由于.上位机系统开发流程的日益复杂,很多时候面临的是对象指针。如果-个对象指针用作后继赋值操作的目的地址,那么攻击者就可以通过控制该地址从而修改内存其他位置中的内容。
案例分享: Advantech WebAccess指针引用漏洞
CNVD官方于2017年11月03日,公开CNVD 2017-32564Advantech WebAccess指针引用漏洞,该漏洞为高危通用型漏洞,危害范围广。
Advantech WebAccess是研华(Advantech) 公司的一套基于浏览器架构的HMI/SCADA软件。该软件支持动态图形显示和实时数据控制,并提供远程控制和管理自动化设备的功能。Advantech WebAccess V8.2_ _20170817之前版本中存在指针引用漏洞,远程攻击者能够执行代码来引用程序中的指针,导致应用程序不可用。
(4)内存管理错误引发漏洞
C/C+ +开发的上位机系统有时候需要对可变长度和数量的数据元素进行操作,这种操作对应的是动态内存管理。动态内存管理非常复更杂。初始化缺陷、不返回检查值、空指针或者无效指针解引用、引用已释放内存、多次释放内存、内存泄漏和零长度内存分配都是常见的内存管理错误。
案例分享: ABB PB610 IDAL HTTP server内存损坏漏洞
2019年06月27日,CNVD官网公开ABB PB610 IDAL HTTP server存在内存损坏漏洞,该漏洞源于在身份验证过程中,程序未能安全地处理用户名和cookie字符串,攻击者可利用该漏洞绕过身份验证或在服务器上执行代码。漏洞危害等级为高危,影响范围广泛,危害性极大。
(5)整数类溢出漏洞
这几年整数安全问题有增长趋势,在上位机系统的开发者眼里,整数的边界溢出问题通常大部分时候并没有得到重视,很多上位机系统开发人员明白整数是有定长限制的,但是很多时候他们会以为自己用到的整数表示的范围己经够用。整数类漏洞的情景通常是这样的,当程序对一个整数求出了一个非期望中的值,并进而将其用于数组索弓|或者大于后者循环计数器的时候,就可能导致意外的程序行为,进而导致可能有的漏洞利用。