1. 威客安全首页
  2. 安全资讯

【工控安全】工控系统安全测试用例

本文主要针对工业控制系统讲解渗透测试常见用例,旨在帮助初学者了解工业控制网络系统,快速入门工控系统的安全测试,提高工控系统网络的安全性。

     Tide安全团队计划把《工控安全从入门到实战》做为工控的一个专题系列,从工控安全基础知识到工控安全入门、从协议分析到蜜罐技术、从漏洞利用到攻击防护,一点一点揭开工控安全的神秘面纱。

     本篇文章为《工控安全从入门到实战》的工控系统渗透测试部分内容,主要介绍工控系统的常规测试项、工控设备常见安全漏洞、工控协议漏洞以及检测方法,结合工控系统历史漏洞总结Web安全常规漏洞的检测与防范措施,并在最后对将要自主研发的一系列工控安全系统平台进行了总结与展望。

本篇提纲如下:

【工控安全】工控系统安全测试用例

【工控安全】工控系统安全测试用例

     渗透测试是通过模拟恶意黑客的攻击手段和方法,来评估网络系统安全性的一种方法。不同于漏洞评估偏重于检查系统和服务是否存在安全问题,渗透测试主要通过执行漏洞利用来验证系统确实存在漏洞。

     基于渗透测试的特点,在对工业控制系统进行渗透测试时需特别注意,因为传统的渗透测试方法可能会对工业控制系统基础设施和生产过程产生严重影响。

     在工业控制系统环境中,渗透测试常常面临质疑、恐惧,甚至被彻底否定。在不采取必要预防措施的情况下,渗透测试确实可能会对生产系统产生严重后果,但准确评估系统安全性的唯一途径就是验证生产系统面临严重攻击时的防护能力。工业控制网络普遍采取多层结构的纵深安全防御体系,需要通过渗透测试来判断防护措施的有效性。

     渗透测试应贯穿风险评估工作的整个生命周期,包括:

     (1)验证漏洞评估结果,剔除错误信息;

     (2)评判前期制定的安全策略是否合理;

     (3)评估漏洞修复是否成功执行。

     工业控制系统安全防护标准已逐渐完善,包括NIST  SP800-82, ISA-99/IEC 62443,《工业控制系统信息安全防护指南》等,但针对工业控制系统渗透测试的标准却几乎没有,NIST   SP800-115提供了漏洞评估和渗透测试的指导,但并未针对工业控制系统给出相关建议。工业控制系统渗透测试应结合传统的渗透测试手段、工业控制系统现场经验以及工业控制系统安全防护标准来共建工控安全保障体系。有关工控安全保障体系的建设如图所示:

【工控安全】工控系统安全测试用例

一、工控设备检测

     工控设备安全检测服务主要包含工控设备资产搜集、工控设备漏洞挖掘、漏洞分析与验证、健壮性测试、以及多层次和多维度的安全检测等。

     工业控制系统(ICS)是几种类型控制系统的总称,包括监控和数据采集系统(SCADA)、分布式控制系统(DCS)和其它控制系统以及生产应用服务器等。工控设备检测服务主要对系统的核心控制元件和网络组件进行查验。

1.1 SCADA系统

1.1.1 SCADA系统简介

     SCADA系统是高分布式系统,经常用于控制地理上分散的资产,分散在数千平方公里,其中集中的数据采集和控制至关重要到系统操作。它们用于配水系统,如配水和废水收集系统,油气管道,电网和铁路运输系统。

        一个SCADA控制中心长期对现场进行集中监控通信网络,包括监控报警和处理状态数据。基于信息从远程站接收到的,可以将自动化或操作者驱动的监控命令推送到远程站控制设备,通常被称为现场设备。现场设备控制本地诸如打开和关闭阀门和断路器的操作,从传感器系统收集数据,以及监控当地环境的报警条件。

1.1.2 SCADA安全风险分析

     (1) 大量的终端和现场设备如PLC(可编程逻辑控制器)、RTU(远程测控终端)和IED(智能电子设备)可能存在逻辑*或其他漏洞,部分设备采用国外的操作系统、控制组件,未实现自主可控,可能有安全漏洞,设备存在被恶意控制、中断服务、数据被篡改等风险。

     (2)   通信网及规约上可能存在漏洞,攻击者可利用漏洞对SCADA系统发送非法控制命令。通信网及规约的安全性是整个系统安全的主要环节,通信网及规约的漏洞是非法入侵者主要攻击的目标。控制中心同站控系统之间主要采用IEC   60870-5-101/104规约进行通信,但104规约存在的主要安全问题为不具备加密、认证功能,且端口为固定的2404端口,存在被窃听、分析、替换的风险;一些不具备光纤通信条件的厂站采用GPRS、CDMA等无线通信方式,有的将101规约直接用在GPRS环境,通过APN虚拟专网采集测量数据、下发控制命令,没有身份认证和加密措施,安全强度不够,存在安全风险。

     (3)   TCP/IP网络通讯技术、各类智能组件技术广泛应用,SCADA系统面临病毒、蠕虫、木马威胁。SCADA系统中各类智能组件技术、TCP/IP网络通讯技术广泛应用,将面临传统信息网络面临的病毒、黑客、木马等信息安全问题。西门子、ABB等工业控制系统不断暴露安全漏洞,对我国工业控制领域的安全稳定运行造成了很大的影响。

        (4)   其他主要风险如下:中心控制系统和站控系统之间业务通信时,缺乏相应的安全机制保证业务信息的完整性、保密性;中心控制系统、通讯系统和站控系统的网络设备、主机操作系统和数据库等的安全配置需要增强;缺乏对系统帐号和口令进行集中管理和审计的有效手段;缺乏记录和发现内部非授权访问的工具和手段,对重要业务系统维护人员缺少监控手段,无法有效记录维护人员的操作记录;对于软件补丁的安装缺乏有效的强制措施;人员的信息安全意识教育、基本技能教育还需要进一步普及和落实。

1.1.3 SCADA系统测试项

        出厂默认设置是否修改

        是否设置了访问PLC的白名单

        SCADA网络与其他网络是否隔离

        是否可以通过物理方式访问SCADA控制中心

        控制机器是否可以访问互联网

        SCADA的网络传输是否是明文形式

        组织是否遵循严格的密码策略

        控制器、工作站以及服务器是否打了最新补丁

        是否运行有防病毒软件并且设置应用程序白名单

1.1.4 SCADA安全策略

     (1)   安全分区,隔离防护。安全分区是SCADA安全的基础,主要包括对控制中心和站控系统进行安全区域的划分,应根据系统的安全性、实时性、控制与非控制等方面的特点,将安全需求类似的系统、计算机、网络设备等划分在同一安全区域中,实行统一安全防护;应主要进行控制中心和站控系统生产相关系统与对外Web应用服务系统的隔离、生产相关系统中控制系统与非控制系统的隔离等,建议采用不同强度的网络安全设备如硬件防火墙、单向网闸、入侵防护系统等对各安全区中的业务系统进行隔离保护,加强不同安全区域间的访问控制措施。

     (2)   专用通道,认证加密。在控制中心和站控系统的纵向专用通道上建立生产控制专用数据网络,实现与对外服务网络的物理隔离,并通过采用VPN技术构造虚拟专用网形成多个相互逻辑隔离的VPN,实现多层次的保护;同时应在纵向通信时对控制中心和站控中心实现双向身份认证,确保通信双方的合法身份,并根据纵向传输通道中数据的保密性要求,选择不同的加密算法,实现不同强度的加密机制。

     (3)   业务应用,强化安全。在SCADA系统的不同区域,应慎重使用Web服务:对于实时控制功能模块,可以取消Web服务,对于非实时控制模块可以采用使用数字证书和HTTPS技术的纵向安全Web服务,并对浏览器客户端访问进行身份认证及加密传输,建议SCADA系统中不使用E-mail服务,杜绝病毒、木马程序借助E-mail传播;对SCADA关键应用数据与应用系统进行备份,确保数据损坏、系统崩溃情况下快速恢复数据与系统的可用性,在具备条件的前提下进行异地的数据与系统备份,提供系统级容灾功能,保证在规模灾难情况下,保持系统业务的连续性。

     (4)   动态评估,安全加固。动态的(不定期的和定期的)评估分析控制中心和站控系统的业务系统、数据库、操作系统、主机等的安全弱点和潜在的安全风险,提出合理的安全建议以保证SCADA系统的机密性、完整性和可用性等基本安全属性;并根据安全评估的结果,通过采用系统参数的合理配置、多余服务和端口的关闭、后门的清理、帐户口令管理的增强、原有网络结构的调整优化等措施,尽可能地消除或降低系统的安全隐患,提升系统的安全性。

1.2 上位机系统

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)    整数类溢出漏洞

     这几年整数安全问题有增长趋势,在上位机系统的开发者眼里,整数的边界溢出问题通常大部分时候并没有得到重视,很多上位机系统开发人员明白整数是有定长限制的,但是很多时候他们会以为自己用到的整数表示的范围己经够用。整数类漏洞的情景通常是这样的,当程序对一个整数求出了一个非期望中的值,并进而将其用于数组索引或者大于后者循环计数器的时候,就可能导致意外的程序行为,进而导致可能有的漏洞利用。

     除此之外,上位机系统软件更新频率较低,dll劫持漏洞较为普遍,以下举例说明较为常见的上位机dll劫持漏洞。

【工控安全】工控系统安全测试用例

     历年上位机本地权限提升类漏洞:

【工控安全】工控系统安全测试用例

1.2.3 上位机安全检测

【工控安全】工控系统安全测试用例

1.3 下位机系统

1.3.1 下位机系统简介

     下位机是直接控制设备和获取设备状况的计算机,一般是PLC、单片机、智能仪表、智能模块等。上位机发出的命令首先下达下位机,下位机再根据此命令转换成相应的时序信号直接控制相应设备。下位机间歇性地读取设备状态信息,转换成数字信号反馈给上位机,上下位机也都需要进行功能编程,基本都有专门的开发系统。概念上,被控制者和被服务者是下位机。本身上位机和下位机可以理解为主从关系,在一些特定的应用或者场景下两者也可以互换。

1.3.2 下位机漏洞分析

     下位机暴露在互联网中会带来许多安全隐患。

     1.未授权访问

     未授权访问指未经授权使用网络资源或以未授权的方式使用网络资源,主要包括非法用户进入网络或系统进行违法操作以及合法用户以未授权的方式进行操作。

     防止未经授权使用资源或以未授权的方式使用资源的主要手段就是访问控制。访问控制技术主要包括入网访问控制、网络的权限控制、目录级安全控制、属性安全控制、网络服务器安全控制、网络监测和锁定控制、网络端口和节点的安全控制。根据网络安全的等级、网络空间的环境不同,可灵活地设置访问控制的种类和数量。

     2.通信协议的脆弱性

     不仅仅是Modbus协议,像IEC   60870-5-104、Profinet这类主流工控协议都存在一些常见的安全问题,这些协议的设计为了追求实用性和时效性,牺牲了很多安全性。这类脆弱性导致了很多下位机漏洞的产生。这类通信协议类的主要漏洞包括明文密码传输漏洞、通信会话无复杂验证机制导致的伪造数据攻击漏洞、通信协议处理进程设计错误导致的溢出漏洞等。

     3.Web用户接口漏洞

     为了便于用户管理,目前越来越多下位机配置了Web人机用户接口,但方便的同时也带来了众多的Web安全漏洞,这些漏洞包括命令注入、代码注入、任意文件上传、越权访问、跨站脚本等。

     案例分享:多款Siemens产品代码上传漏洞漏洞

     2019年07月12日,CNVD公开多款Siemens产品代码上传漏洞漏洞,影响产品范围广泛,涉及SIEMENS  SIMATIC PCS 7 V8.0、SIEMENS SIMATIC PCS 7 V8.1、SIEMENS SIMATIC PCS 7  <=V8.0、Siemens SIMATIC WinCC <=V7.2、SIEMENS SIMATIC PCS 7  V9.0、SIEMENS SIMATIC WinCC V7.3、SIEMENS SIMATIC WinCC V7.4、Siemens  SIMATIC WinCC Professional (TIA Portal V15) 、Siemens SIMATIC WinCC  Professional (TIA Portal V14) 、Siemens SIMATIC WinCC Professional (TIA  Portal V13) 、SIEMENS SIMATIC WinCC Runtime Professional V13、SIEMENS  SIMATIC WinCC Runtime Professional V14、SIEMENS SIMATIC WinCC Runtime  Professional V15、Siemens SIMATIC WinCC V7.5等。

     其中SIMATIC   WinCC是一套自动化的数据采集与监控(SCADA)系统,该系统的Web是其中的一个数据分析和显示组件。该产品存在任意文件上传漏洞,攻击者可利用该漏洞上传任意的ASPX代码,直接获取系统webshell,以此为突破口可进入工业控制系统网络内网进行渗透攻击、生产程序的破坏和数据的窃取。

     4.后门账号

     有些下位机设备硬编码系统中存在隐蔽账号的特殊访问命令,工控后门就是特指开发者在系统开发时有意在工控系统代码中设计的隐蔽账户或特殊指令。通过隐蔽的后门,设计者可以以高权限的角色进行设备访问或操作。工控后门对工控网络造成巨大的威胁,攻击者可以利用它来进行病毒攻击、恶意操控设备等。

1.3.3 下位机安全检测

【工控安全】工控系统安全测试用例

1.4 应用服务器安全测试

     应用服务器可以对其进行端口扫描、操作系统漏洞扫描、检查服务系统配置、全盘查杀可疑webshell文件以及排查可疑进程等。

1.4.1 系统漏洞补丁检查

     systeminfo 查看系统版本信息、检查漏洞补丁修复情况

【工控安全】工控系统安全测试用例

     Linux平台提权漏洞集合

        https://github.com/SecWiki/linux-kernel-exploits

     Windows平台提权漏洞集合

        https://github.com/SecWiki/windows-kernel-exploits

举例说明:

【工控安全】工控系统安全测试用例

1.4.2 端口开放检查

     常见端口及对应服务

    20:FTP服务的数据传输端口
    21:FTP服务的连接端口
    22:SSH服务端口
    23:Telnet端口
    25:SMTP简单邮件传输协议端口,和POP3的110端口对应
    43:whois服务端口
    53:DNS服务端口(TCP/UDP 53)
    67/68:DHCP
    80:HTTP端口
    110:POP3邮件服务端口,和SMTP的25端口对应
    135:RPC服务
    137/138:NMB服务
    139/445:SMB/CIFS服务
    161/162: Snmp服务
    443:HTTPS端口
    873:rsync
    1433:SQL Server对外提供服务
    1434:用于向请求者返回SQL Server使用了哪个TCP/IP端口
    1521:oracle数据库
    3306:MySQL数据库端口
    3389:远程桌面
    5432:PostGreSQL
    6379:redis数据库端口
    7001/7002:Weblogic
    8080:Tomcat、JBoss
    9043:WebSphere
    27017:MongoDB

     推荐工具:御剑高速TCP全端口扫描工具、ScanPort、Nmap等。

1.4.3 系统服务、配置检查

     查杀可疑进程及服务,根据等级保护制度检查防火墙、ACL访问控制策略等安全配置。

1.4.4 全盘查杀可疑文件

     推荐工具:360全家桶、D盾webshell查杀

查杀rootkit

    chkrootkit (下载地址-http://www.chkrootkit.org)
    rkhunter (下载地址-http://rkhunter.sourceforge.net)

查杀病毒

    clamav(下载地址-http://www.clamav.net/download.html)

查杀webshell

    cloudwalker(下载地址-http://github.com/chaitin/cloudwalker)

【工控安全】工控系统安全测试用例

     更多工控设备漏洞,可关注CNVD工控系统行业漏洞库。

        https://ics.cnvd.org.cn/

        https://www.ics-cert.org.cn/portal/leak/announce/announce.do

1.5 工控设备安全测试工具列表

smod:Modbus渗透测试框架

plcscan( https://github.com/yanlinlin82/plcscan ):扫描PLC的Python脚本

NMAP s( https://nmap.org/book/man-nse.html ):扫描PLC的nmap脚本

Wireshark:网络嗅探器

mbtget( https://github.com/sourceperl/mbtget ):读取PLC的Perl脚本

plcinject( https://github.com/SCADACS/PLCinject ):向PLC注入代码的工具

参考工具列表(https://github.com/hslatman/awesome-industrial-control-system-security)

二、工控协议漏洞

2.1 Modbus协议会话过程

     (1) 主节点发送请求,请求数据帧中包括子节点地址,请求被所有子节点接收到,但只有与子节点地址相符合的子节点处理接收到的请求数据帧;

     (2) 主节点发送请求后等待响应;

     (3) 相应子节点处理请求数据帧后,发送响应数据帧;

     (4) 主节点接收到响应数据帧后,会话完成,如果主节点等待响应时间超时仍未接收到响应,认为会话失败,放弃本次会话。

2.2 Modbus协议会话机制中的漏洞

     (1) RS-485总线上,任意一个节点发送的数据帧,可以被除这个节点外的所有节点接收到,任何一个节点都可以监控RS-485总线所有通讯数据帧。

     (2) 主节点并不知道真正是哪个子节点在处理请求数据帧。

     (3) 主节点仅通过是否超时来判断会话是否成功,如果子节点处理请求数据帧的速度较慢,另一节点完全可以伪造响应数据帧结束会话,使得主节点接收到错误响应。或者通过干扰RS-485总线阻止主节点收到响应,使得主节点认为超时而放弃会话。

2.3 Modbus协议漏洞挖掘方法

【工控安全】工控系统安全测试用例

     (1) 将两台PC连接到同一条RS-485总线上,并同时连接上现场仪表,一台pc作为Modbus主节点,另一台PC和现场仪表作为Modbus子节点;

     (2) 使用Modbus通信测试软件,在作为Modbus主节点的Pc上不断发出符合现场仪表通信协议要求的请求;

     (3) 在作为Modbus子节点的PC上,使用串口监控软件(或者Modbus通信监管软件)监控所有数据帧;

     (4) 如果发现请求数据帧和响应数据帧之间有较长的时间间隔,说明这种现场仪表可能引发Modbus协议漏洞;

     (5) 在作为Modbus子节点的PC上,开发并运行攻击程序,接收请求数据帧并快速发送伪造的响应数据帧,检查作为Modbus主节点的PC是否接收到了伪造的响应数据帧,如果收到表示攻击成功,现场仪表存在引发Modbus协议漏洞的可能。

三、渗透测试服务

     工控服务器和工作站大部分是Windows系统,且很大一部分为XP等老旧系统。用户由于担心系统兼容性问题,通常不升级补丁,系统长期运行后会积累大量的安全漏洞,也为渗透测试提供了丰富的研究素材。

3.1 Web系统渗透测试

     在互联网飞速发展的今天,Web应用已越来越多地深入到人们的生活、娱乐和办公等各个方面。移动互联网的兴起使得Web应用变得更加广泛,技术更加成熟,甚至已渗透到工业控制领域。一些优秀的组态软件厂商已将Web技术应用到厂级信息管理和实时生产监控软件中。其中,基于Web的人机界面监控系统是Internet技术和控制技术相结合的产物,用户只需利用浏览器即可随时随地地远程监控组态运行画面,及时了解现场各种设备的运行状况。Web发布已经成为工控组态软件的重要组成部分之一,但是在给人们带来便利的同时也给黑客攻击者带来可乘之机,本章节针对工控系统中Web安全常规漏洞进行分析与汇总。

3.1.1 SQL注入漏洞

攻击类型:SQL注入漏洞

测试定性:高危

风险分析:利用该漏洞可探测数据库结构获取数据库敏感信息,还可通过该漏洞获取系统更高权限,对数据带来安全威胁。

加固建议:

     (1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。

     (2)对进入数据库的特殊字符(’ ”  尖括号 & * ;等)进行转义处理,或编码转换。

     (3)严格限制变量类型,比如整型变量就采用intval()函数过滤,数据库中的存储字段必须对应为int型。

     (4)数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。

     (5)网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。

     (6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。

     (7)避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

     (8)确认配置文件中的字符过滤、转义等选项保持开启。

     (9)将系统敏感性数据(用户名或密码等)在数据库加密存储。

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2016-0179184.html

http://www.anquan.us/static/bugs/wooyun-2016-0169849.html

http://www.anquan.us/static/bugs/wooyun-2015-0145966.html

3.1.2 Struts2命令执行漏洞

攻击类型:Struts2命令执行漏洞

测试定性:高危

风险分析:恶意攻击者可利用该漏洞执行任意的命令,也可以利用此漏洞在网站中写入一句话木马,进而可接管服务器权限。

加固建议:及时升级struts2到最新版本,补丁地址:https://struts.apache.org/download.cgi#struts23281

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2016-0193770.html

http://www.anquan.us/static/bugs/wooyun-2016-0188572.html

http://www.anquan.us/static/bugs/wooyun-2015-0145153.html

3.1.3 弱口令漏洞

攻击类型:弱口令漏洞

测试定性:中危

风险分析:弱口令非常容易被攻击者猜解或通过弱口令扫描工具扫描到,导致攻击者通过弱口令可轻松登录到系统中,从而进行下一步的攻击。如上传webshell、获取敏感数据,另外攻击者利用弱口令登录网站管理后台,可任意增删改等操作,严重情况下可能会造成工控设备的运行异常,从而给工业生产带来巨大损失。

加固建议:增强密码复杂度,建议密码密码不能包含账户名,密码不能包含用户名中超过两个连续字符的部分,密码至少有八个字符长度密码必须包含以下四类字符中的至少三类字符类型:英文大写字母(A-Z)、英文小写字母(a-z)、10个基本数字(0-9)、特殊字符(例如:!、¥、#、%)。

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2016-0190154.html

http://www.anquan.us/static/bugs/wooyun-2016-0173395.html

        http://www.anquan.us/static/bugs/wooyun-2015-0165261.html

3.1.4 系统/服务运维配置不当

攻击类型:系统/服务运维配置不当

测试定性:高危

风险分析:系统/服务运维配置不当可以让攻击者获取系统服务器的敏感信息,为下一步渗透测试做准备。若因某些应用程序配置不当或版本过低,攻击者可以利用网上公开的漏洞Exp进行进一步渗透、提权等。

加固建议:在发布应用程序之前应测试所有系统配置与软件配置,关闭危险端口,积极关注网络安全动态,及时修复漏洞补丁、更新应用程序。

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2016-0169444.html

http://www.anquan.us/static/bugs/wooyun-2015-0133550.html

        http://www.anquan.us/static/bugs/wooyun-2015-0132494.html

3.1.5 任意文件上传

攻击类型:任意文件上传

测试定性:高危

风险分析:攻击者可通过此漏洞上传恶意脚本文件控制整个网站或系统,甚至控制服务器。攻击者可上传可执行的WebShell(如php、jsp、asp类型的木马病毒),webshell脚本具有强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。

加固建议:

     (1)文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。

     (2)判断文件类型。在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式。

     (3)使用随机数改写文件名和文件路径。应用随机数改写了文件名和路径,将极大地增加攻击的成本。

     (4)单独设置文件服务器的域名。由于浏览器同源策略的关系,一系列客户端攻击将失效。

漏洞参考:http://www.anquan.us/static/bugs/wooyun-2016-0169735.html

3.1.6 java反序列化漏洞

攻击类型:java反序列化漏洞

测试定性:高危

风险分析:java反序列化漏洞是一类被广泛应用的漏洞,绝大多数的编程语言都会提供内建方法使用户可以将自身应用所产生的数据存入硬盘或通过网络传输出去。这种将应用数据转化为其他格式的过程称之为序列化,而将读取序列化数据的过程称之为反序列化。当应用代码从用户接受序列化数据并试图反序列化改数据进行下一步处理时会产生反序列化漏洞。该漏洞在不同的语言环境下会导致多种结果,但最有危害性的,也是之后我们即将讨论的是远程代码注入。该漏洞在WebLogic、WebSphere、JBoss、Jenkins、OpenNMS中都可以使用,实现远程代码执行。

加固建议:升级 Apache Commons Collections库到最新版本。

漏洞参考:http://www.anquan.us/static/bugs/wooyun-2016-0169524.html

3.1.7 权限控制绕过

攻击类型:权限控制绕过

测试定性:高危

风险分析:越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。其与未授权访问有一定差别。目前存在着两种越权操作类型:横向越权操作和纵向越权操作。前者指的是攻击者尝试访问与他拥有相同权限的用户的资源;而后者指的是一个低级别攻击者尝试访问高级别用户的资源。

加固建议:对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做一个校验检查。流程描述:在服务器接收到用户发送的页面访问请求时,根据预设的识别策略,从用户的页面访问请求中提取该用户对应的用户唯一标识信息,同时提取所述页面访问请求对应的应答页面中的表单及该表单中不可修改参数,将所述表单及不可修改参数与所述用户唯一标识信息绑定后记录到参数列表中;检测到用户提交请求页面的表单时,将所述请求页面的表单及不可修改参数与该用户对应的所述参数列表中记录的表单及不可修改参数进行比对,控制该用户的访问。

 漏洞参考:http://www.anquan.us/static/bugs/wooyun-2016-0166656.html

3.1.8 敏感信息泄露

攻击类型:敏感信息泄露

测试定性:中危

风险分析:攻击者可利用泄漏的敏感信息,获取网站服务器web路径或其他工控设备配置信息,为进一步攻击提供帮助。

加固建议:限制用户对网站目录的访问权限,当系统出现报错页面或用户输入非法字符时建议返回统一的404报错页面。

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2015-0147797.html

http://www.anquan.us/static/bugs/wooyun-2015-0135742.html

http://www.anquan.us/static/bugs/wooyun-2015-0133501.html

3.1.9 未授权访问

攻击类型:未授权访问

测试定性:高危

风险分析:未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。

加固建议:在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作,简而言之,一定对系统重要功能点增加权限控制,对用户操作进行合法性验证。

漏洞参考:

http://www.anquan.us/static/bugs/wooyun-2015-0145063.html

http://www.anquan.us/static/bugs/wooyun-2015-0145141.html

http://www.anquan.us/static/bugs/wooyun-2015-0135197.html

3.1.10 任意文件下载漏洞

攻击类型:任意文件下载漏洞

测试定性:高危

风险分析:下载服务器任意文件,如脚本代码、服务及系统配置文件等;可用得到的代码进一步代码审计,获取更多可利用漏洞。

加固建议:过滤点(.)使用户在url中不能回溯上级目录;正则严格判断用户输入参数的格式;将下载区独立出来,放在项目路径外,给每个下载资源固定的URL,而不是所有的下载资源都是统一的URL:http://www.test.com/download?filename=文件名。

漏洞参考:http://www.cnvd.org.cn/flaw/show/CNVD-2018-11397

3.1.11 渗透测试项汇总

【工控安全】工控系统安全测试用例

【工控安全】工控系统安全测试用例

【工控安全】工控系统安全测试用例

3.2 日志分析

【工控安全】工控系统安全测试用例

 推荐工具:web-log-parser、360星图、analog或自主研发日志分析工具。

【工控安全】工控系统安全测试用例

四、工控安全风险评估项目与内容

1、安全软件选择与管理防护评估验证

     检查核心装备是否已采用经过离线环境充分验证测试的防病毒软件、应用程序白名单软件等,检查是否设置了只允许通过仿真测试环境自身授权或安全评估的软件运行策略。评测仿真测试环境是否已建立防病毒和恶意软件入侵管理机制,确保该管理可有效规范防病毒和恶意软件入侵管理工作。要求仿真测试环境应定期针对工业控制系统及临时接入的设备开展查杀,并做详细查杀记录。

2、核心装备配置和补丁升级验证评估验证

     检测仿真测试环境是否已做好工控网络、工控主机和工控设备的安全配置,确保工控系统相关安全配置的有效性。要求仿真测试环境建立工控系统配置清单,确保该清单满足企业工业控制系统安全可靠运行的需要。为仿真测试环境定期对工控系统配置进行核查审计,确保系统实际配置与配置清单的一致性。仿真测试环境在发生重大配置变更时,应当提前制定配置变更计划,进行影响分析,确保该重大配置变更不会引入重大安全风险。

3、边界安全防护评估验证

     验证仿真测试环境是否针对工控系统的开发、测试和生产分别提供独立的环境,避免开发、测试环境中的安全风险引入生产系统。验证工控网络与企业边界是否部署安全防护设备,以避免企业网的安全风险引入工业控制网络。验证是否采用工业防火墙、网闸等安全防护设备,对工业控制网络安全区域实施逻辑隔离安全防护。

4、身份认证防护评估验证

     验证工控主机登录、SCADA软件、应用介绍资源访问、工控云平台访问等过程中是否使用身份认证管理(如:口令密码、USB-Key、智能卡、生物指纹、虹膜等),对于关键设备、系统和平台的访问是否采用多因素认证,以免非法登录等安全隐患。验证工控主机的操作权限。工控系统中应满足工作要求的最小权限原则来进行系统账户权限分配,降低因事故、错误、篡改等原因造成损失的可能性。要求仿真测试环境定期审计分配的账户权限是否超出工作需要,确保超出工作需要的账户权限及时调整。

5、远程访问安全防护评估验证

     验证工控系统的远程访问是否采用数据单向访问控制等策略进行安全加固,确保数据传输安全,避免未授权操作。原则上严格禁止工控系统面向互联网开通HTTP、FTP、Telnet等高风险服务。

6、物理和环境安全防护评估验证

     验证工控系统是否对重要工程师站、数据库、SCADA、PLC等核心工业控制软硬件所在区域采取访问控制、视频监控、专人值守等物理安全防护措施。拆除或封闭工控主机上不必要的USB、光驱、无线等接口,以防止病毒、木马、蠕虫等恶意代码入侵,并避免数据泄露。在确需使用工业主机外设接口时,仿真测试环境应建立主机外设接口管理制度,并通过主机外设安全管理技术手段实施访问控制,以避免未授权的外设终端接入。

7、安全检测和应急预案演练评估验证

     验证仿真测试环境是否采取网络安全应急防护措施,防止事态扩大。仿真测试环境应定期组织工控系统相关人员开展应急响应预案演练,确保安全事件发生时应急预案被有效执行。同时,还需根据实际情况对应急响应预案进行评审和修订,确保应急响应预案的适宜性。

8、资产安全防护评估验证

     要求仿真测试环境建立工业控制系统资产清单(包括软件资产、硬件资产、数据资产等),确保工业控制系统资产信息可核查、可追溯;仿真测试环境应明确资产责任人并建立资产使用处置规则,以在资产生命周期内对其进行适当管理。

9、数据安全防护评估验证

     仿真测试环境应明确识别重要工业数据清单。仿真测试环境应对静态存储的重要工业数据进行加密存储或隔离保护,设置访问控制功能,确保静态存储的重要工业数据不被非法访问、删除、修改;应对动态传输重要工业数据进行加密传输或使用VPN等方式进行保护,确保动态传输过程中重要工业数据的安全性;应根据风险评估结果建立数据分级分类管理制度,确保工业数据的防护方式合理。

10、落实责任防护内容验证

     仿真测试环境应通过建立工业控制系统安全管理机制,确保工控安全管理工作有序开展。应成立由企业负责人牵头的,信息化、生产管理、设备管理等相关部门组成的工业控制系统信息安全协调小组,负责统筹协调工业控制系统信息安全相关工作;应在工业控制系统信息安全协调小组指导下,按照管理机制,明确工控安全管理责任人,落实工控安全责任制,部署工控安全防护措施。

五、工控安全检测技术路线

5.1 构建工控系统漏洞库

     工控安全漏洞可划分为工控设备漏洞、工控网络协议漏洞、工控软件系统漏洞、工控安全防护设备漏洞等。可以根据公开的工控漏洞平台( https://ics.cnvd.org.cn/、http://cve.scap.org.cn/view/ics 等)构建工控系统漏洞库。

     众所周知,一款工控漏洞扫描平台的灵魂是基于其内置的工控漏洞库,工控漏洞扫描平台功能是否强大取决于工控漏洞库的完整性。因此,可以收集公开漏洞饿poc、exp来构建工控漏洞库,为后续开发工控漏洞扫描平台奠定基础。

【工控安全】工控系统安全测试用例

5.2 工控系统蜜罐技术

     蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。

     目前工控安全审计检测类产品大多基于旁路网络流量和产品自身特征库等手段进行网络审计和安全检测,但由于旁路流量存在丢包以及流量类型不全面、监测位置过于趋向网络核心层等问题,使旁路检测类产品难以防范复杂攻击,且具有较高的误报率。同时由于工业环境网络隔离的特性,使产品无法自动更新特征库,造成攻击检测的严重滞后。

     蜜罐系统凭借其独立性以及对工控系统的无干扰性,可有效解决现阶段工控安全产品对工控网络、流量以及实时性的影响,弥补无法在工控设备、工控主机、工控服务器内安装安全代理或安全探针的问题,有效提高安全检测的精度,降低误报。

     工业企业网络架构一般可分为管理信息层、生产管理层、过程监控层、现场控制层以及现场设备层。管理信息层为传统信息网络,生产管理层、过程监控层、现场控制层以及现场设备层为工业生产网络。现阶段工业企业在管理信息网与工业生产网之间一般采用物理隔离或逻辑隔离的方式进行网络分层,针对每种隔离方式存在不同的攻击类型。

     (1)双网物理隔离环境针对管理信息网与生产网物理隔离的环境,攻击者一般采用恶意软件攻击与跳板攻击相结合的方式。恶意软件攻击一般借助社会工程学、水坑攻击、钓鱼邮件攻击等方式将恶意软件植入受害者办公主机内。此类工业企业由于在管理信息网与工业生产网络之间部署了物理隔离设备,导致恶意软件不能直接进入生产控制网络,此时恶意软件会借助移动终端、移动存储介质、第三方终端等方式进入工业生产网主机,并以此主机为“据点”进行后续攻击操作。此类恶意软件一般具有较高的自动化特性,可根据目标环境进行设备的自动识别,自动传播、自动攻击。

     (2)双网逻辑隔离环境此环境下,工业企业一般在管理信息网与工业生产网之间部署了防火墙等逻辑隔离设备,或采用单主机双方卡的形式实现逻辑隔离。由于逻辑隔离没有阻断网络层的连接,极容易导致攻击者绕过逻辑隔离设备进入生产网络。在此环境下,攻击者可以采用恶意软件以及内网反弹的方式直接获取内网主机的操控权限,此类攻击具有较强的灵活性。

     由于目前的网络攻击方式大多基于IT架构,因此工业生产网络内的各工程师站、操作员站、监控站必然成为恶意软件以及攻击者进行“下一步”攻击的“落脚点”。以蠕虫病毒为例,其攻击步骤可分为感染主机、自动扫描、发现漏洞、自动传播。由于蜜罐系统的开放性以及自身存在较多安全漏洞,再配合良好的部署位置,会成为攻击者绝佳的“落脚点”,蜜罐系统通过精心构造的安全攻击与行为跟踪检测功能,可以对攻击行为进行精确记录、告警,同时与其他安全平台联动,从而实现网络攻击的快速检测、响应,为工业企业调查取证提供依据。

5.3 自主研发模糊测试工具、资产搜集+漏洞挖掘平台

     面对各种层出不穷的攻击方法和攻击模式,以及逐渐演变的高级持续性威胁(APT攻击),传统的被动安全防御手段已不能起到有效的防护作用。为了探索有效的主动安全防御方法,就要求必须自主研发一系列工控安全威胁感知预警平台。旨在捕获和分析网络空间中针对工控系统的攻击流量,研究攻击者的行为动机,溯源攻击者的真实身份,从而在未知网络攻击到来时能够做出更好的应对。

5.3.1 资产搜集平台

资产搜集平台设计思路:

     (1)根据工控系统业务需求制定资产收集范围,收集工控设备指纹库;

     (2)端口探测与扫描。此阶段包含资产主机的存活性检测与端口开放状态的探测;

     (3)分析并构造工控协议数据包,并发送通信请求,等待接收;

     (4)接收解析通信返回数据包,提取分析并进行相应资产信息的搜集;

     (5)将探测到的资产设备信息存入数据库。

总体流程图如下图所示:

【工控安全】工控系统安全测试用例

参考文献:于新铭,郭燕慧.一种针对工控设备的资产探测方法[J/OL].计算机工程与应用:1-10[2019-07-23].

5.3.2  工控蜜罐的搭建

通过搭建ICS蜜罐,大致可以实现以下功能:

     (1)工控攻击数据的捕获

     (2)密观数据实时收集及蜜罐管理

     (3)工控攻击数据分析

     (4)工控攻击数据可视化

     (5)工控协议解析

总体架构图如下图所示:

【工控安全】工控系统安全测试用例

参考文献:李京京. 基于蜜罐技术的ICS威胁感知平台设计与实现[D].郑州大学,2017.

5.3.3 ICS Fuzzing测试平台

Fuzzing模糊测试可分为四类:

     (1)动态Web页面的模糊测试;

     (2)针对文件格式的模糊测试;

     (3)协议模糊测试;

     (4)驱动程序模糊测试。

     Fuzzing模糊测试软件还可以检测多种漏洞,如:DDoS攻击、缓冲区溢出漏洞、SQL注入漏洞、跨站脚本漏洞、RPC攻击、信息泄露和文件系统攻击等。与其他技术相比,Fuzzing技术更具先进性、从发现漏洞到利用漏洞、不存在误报等优点。

Fuzzing模糊测试一般可分为以下阶段:

     (1) 目标的识别;

     (2) 输入的识别;

     (3) 生成模糊测试数据;

     (4) 解析执行模糊测试数据;

     (5) 监视异常。

     总之,Fuzzing测试的核心思想是自动或半自动的生成针对不同工控设备通信协议的随机数据输入到某一个ICS设备或程序中,直至被测设备或程序运行异常,如崩溃、断言失败,以发现可能的程序错误,进而分析被测设备或程序可能存在的0day漏洞。

【工控安全】工控系统安全测试用例

六、工控系统安全测试—模拟测试环境

     在实验室或者测试环境搭建模拟真实生产控制系统的平台,采用相同的设备类型、型号和版本,并尽可能采用真实系统的备份镜像进行测试,采取各项渗透测试手段,尽最大可能发现模拟环境的问题,而无需太关心安全问题。

     可根据项目需求搭建纯软件模拟的测试平台或使用硬件搭建的测试平台。

七、工控精华漏洞分析

     乌云工控相关的精华漏洞如下7个,在思路亮点中分析了漏洞的核心,同样也可能是获得打雷精华的理由。几乎共同点均是操控了对应的工控系统。

【工控安全】工控系统安全测试用例

总结

      工业控制系统的信息安全防护体系包含:在总体安全策略指导下,建立工业控制系统的安全技术体系,进行工业控制系统控制中心、通信网络和现场设备的安全防护,确保控制中心数据安全、网络传输数据的完整性、保密性和可用性以及战场设备的安全防护能力;安全管理体系为工业控制系统提供组织保证、培训机制和技术规范等,信息安全防护体系具有高可靠性,并具有可审计、可监控性;安全服务体系为工业控制系统提供安全测评、风险评估、安全加固和监控应急服务。安全防护总体框架如下图所示:

【工控安全】工控系统安全测试用例

参考资料:

http://article.cechina.cn/17/0321/06/20170321062202.htm

http://lab.cert.org.cn/service_control.html

http://www.eeworld.com.cn/qrs/article_2017072536310.html

https://wenku.baidu.com/view/d94108d0af45b307e971971e.html

乌云漏洞库 http://www.anquan.us

https://www.cnblogs.com/meandme/p/8041399.html

工业控制系统信息安全防护能力评估-20170523172437_81516

工业控制SCADA系统的信息安全防护体系研究_余勇

工业控制系统(ICS)安全专家必备的测试工具和安全资源 https://www.lotlabs.com/archives/789

工控安全入门分析

原文链接:https://www.secpulse.com/archives/111923.html

本站声明:网站内容来源于安全脉搏如有侵权,请联系我们,我们将及时处理。

本文转为转载文章,本文观点不代表威客安全立场。

联系我们

4006-119-120

在线咨询:点击这里给我发消息

邮件:public@jinlongsec.com

工作时间:周一至周五,9:30-18:30,节假日休息

X