ICS工业控制安全类赛题简述
之前一段时间,参加了一些工控安全的比赛,接触到了一些工业控制系统相关安全内容,有过一些学习、分析和思考。这篇文章总结了一些常见的工业安全比赛里的内容,对过往知识的一些梳理和回顾,末尾对一些梯形图上常见的安全场景具体罗列。作者本身非工控专项研究人员,如果文章有错误请多指正。
ICS工业控制系统的赛题本身涉及PLC、HMI、SCADA等内容,包含网络、控制器、传统PC等主体,出题面比较广,简单可以理解为Web、Reverse、Misc等方向综合体。从本身入门难易程度来看,入门的题目以WEB和流量分析为主,深入一些会涉及到梯形图、固件分析、程序修改等等方面的考察。
要求掌握一定的传统安全渗透技能,同时一定程度了解二进制安全和工控系统。比较典型的例子是一些工控比赛中,只会传统攻防的人员遇到梯形图、SCADA系统无法继续,而只会PLC、SCADA编程的人员又无法在过程中突破主机或网络限制。
关于队伍人员配置。如果是标准的三人队伍,推荐组队的配置1名渗透人员、1名逆向人员、1名工控人员。或者1名渗透人员、2名工控人员。
PLC软件
由于工控设备和软件的壁垒比较高,不同的PLC只能由对应厂商提供的软件打开和编辑。下面是总结的一些PLC软件清单。
厂家 | 软件 |
---|---|
和利时 | AutoThink |
台达(AS) | ISPSoft |
西门子 | STEP 7 MicroWIN SMART(PLC)、S7-PLCSIM(仿真器) |
三菱 | GX Works:GX Developer(PLC)、GX Simulator(仿真器) |
欧姆龙(Omron) | CX One:CX-Programmer(PLC)、CX-Simulator(仿真器) |
霍尼韦尔 | Safety Manager |
罗克韦尔(AB) | RSLogix |
ABB(Asea Brown Boveri) | Control Builder Plus、AC 800PEC Tool |
施耐德 | SoMachine |
步科 | KincoBuilder |
大连理工 | PLC Config(PLC) |
力控 | ForceControl |
国内工业安全竞赛
下面是一个表格,总结了国内工业安全竞赛的常见比赛形式。
比赛类型 | 考察点 | 说明 |
---|---|---|
渗透测试 | 传统渗透、数据保送系统、数据库 | WEB服务、主机服务、数据服务等 |
逆向分析 | 固件分析、工控软件逆向 | 逆向实战,会有Arm等指令集 |
工控协议 | 工控流量分析、Misc 类 | Misc 流量分析,工控场景流量特征 |
工控编程 | PLC 编程、HMI 组态、RTU 编程 | 工控实际组态软件使用,梯形图识别与分析 |
漏洞挖掘 | 协议分析、Fuzz、固件分析 | 综合各种漏洞挖掘手段,可以是固件、私有协议等 |
渗透测试PT
- 与业务场景高度关联,例如工业控制中,Web 端主要为显示当前使用场景中的控制参数、运行状态等信息,如果在内网中被中间人劫持,当 HMI 显示设备无法与 PLC 等实时运行设备同步时,系统会报警或出错。工业协议对校验、加密等防护手段做的不够好,容易产生这类问题。
- 一般采用通用技术展示 Web 界面,以 windows 操作系统为主要平台,包括嵌入式系统WinCC、桌面系统Windows Server 2008和Windows 7 等系统为主,MSF在这些系统的突破上会是一大杀器。
- Web 渗透的同时会保留多个端口,例如 FTP、HTTPS、Telnet、SNMP、NTP 等服务端口,在 Web 渗透无法突破时可以试试其他端口。
- 为了简化问题复杂度,有些工控场景一般处于直连环境,内网劫持往往比较有效。但是如果内网配置了静态 IP 或其他防护措施,ARP 欺骗方式等内网劫持方法无法起效。
- 敏感信息泄露,配置错误配置等是工控 Web 发布常见问题,比如
.git
,.idea
,.project
等工程信息,还可能出现路径遍历、命令注入、弱口令等问题。
逆向分析RE
- 工控操作系统可能为 RTOS(Real Time Operate System), 例如 vxworks、uc-os 等实时操作系统,在逆向前需要对其架构和指令集需要比较熟悉。
- 遇到ARM、MIPS等指令集程序的概率较高,测试环境可以通过 qemu 搭建 arm 环境进行动态调试。
- 工控固件逆向常见的目标是工控工程加密算法、硬编码秘钥、硬编码后门等常见固件逆向漏洞,如果发现了堆栈溢出类漏洞,往往能够导致目标设备拒绝服务,对工业设备来说非常严重。
- 在上位机、PLC和一些SCADA加密情况比较多,需要在第一步解压过程对其进行解压或解密。也有对工程文件、编程软件加密码的场景,只有对一些特定的版本可以逆向。
工控协议MISC
- 工控协议针对工控场景设计,具有简单、高效、低延时等特点,协议可能没有校验或者加密,针对此类问题完全可以考虑采用重放、劫持等简单攻击手段。
- 工控协议包括众多的私有协议,这部分协议具体细节需要逆向或者采集数据来实现数据功能的还原。
- 工控协议可能导致目标 PLC、DCS、RTU 等设备出现拒绝服务,采用基于 协议Fuzz 的方法可以快速发现此类问题。
- 遇到需要区分哪些是合法请求、哪些是异常请求的场景,除了分析功能码,还需要分析流量上下文。
- 除了一些工控协议,根据实际场景还可能有一些数据传输协议,比如MQTT、OPC等,都是可以读取数据的点。
工控和组态编程
- 必需将工控编程逻辑和业务场景对应,某个bit值变量为0,对应的操作可以是闭合也可以打开,要明白工控业务逻辑。
- 务必明确梯形图文件是什么格式,指定格式只能用指定软件打开和仿真,同厂家也可能存在新旧产品不共用软件的情况。
- 工控设备往往可以直接连接、上载程序、在线调试,不提供梯形图的多半是此类场景。
- 工控设备的连接方式多样,一般采用RJ 45网线接口,但是也有COM串口、USB 接口等新的方式。
- 梯形图计算最好使用仿真运行,尤其是带有浮点、类型转化的梯形图,口算很难算对。如果逻辑过多,可以新建工程选出主要逻辑运行,否则可能因为其他变量制约无法得出结果。
漏洞挖掘
- 固件分析部分基本同逆向部分,要注意配置文件、数据输入等不安全输入造成的问题。
- 私有协议测试需要自己编写收发包,或者用协议Fuzz工具。
- 注意工控设备对时效性和鲁棒性都要求较高,一些安全问题会更严重,比如拒绝服务场景。
梯形图计算
梯形图问题设置的意义,在于攻击者拿到HMI或者工程主机,如何进一步破坏工业系统。比如震网病毒,就是修改了很小一点的内容,不易被觉察,最后导致设备损坏。看懂梯形图,能理解逻辑,并且能修改就成了关键的技能技术。
变量计算
梯形图基础是要识别符号。不同的厂家的PLC符号不尽相同,有的额是缩写,有的是符号,需要具体对待,一般在PLC编程软件的帮助中带有相应的指令说明。下面列举一些相对通用的指令,太过复杂的也不适合出计算题:
缩写 | 符号 | 意义 |
---|---|---|
ADD | + | 加 |
SUB | - | 减 |
MUL | * | 乘 |
DIV | / | 除 |
-| |- | 关闭 | |
-|/|- | 打开 | |
OR | 或 | |
AND | 与 | |
MOV | 赋值 |
最佳的计算方法是使用仿真器运行程序,监视变量得到运行结果。
不涉及精度和位运算的数据转化的简单梯形图可以手算。
复杂功能需要分析简化,否则可能在仿真器中运行不起来。最好可以新建一个工程,只取出相关的逻辑。
场景计算
梯形图场景计算是比较常见的真正工控内容的题目,题目会给出一段程序和程序背景叙述,最终求得某一个业务逻辑运行后的结果。
这种问题一般都会涉及到变量计算、时钟周期等。需要结合描述搞清楚控制逻辑是怎么实现的,哪几个变量是开关变量等。最后通过手动计算或者仿真运行得到运行结果。
提供HMI不提供梯形图
需要上载、控制梯形图的场景。
一般出现在工业渗透场景或者线下实战,PLC中确定有相应程序的情况。
获取梯形图的时候,可以用HMI上的组态软件连接PLC,然后进行程序上载,获取相应的梯形图。
控制梯形图一般是对一些开关开闭互转,完成对一些变量的控制,从而控制机器做出相应的动作,逻辑一般不会太复杂。
编辑完成后需要编译程序,然后下载到PLC后运行程序。
具体逻辑本的分析原则和方法参考上一部分。
无梯形图的场景
一般出现在工业渗透场景或者线下直接连接设备的实战场景,这时PLC中可能会存在没有程序的情况,属于难度较高的一类场景。
相对来说不会太过复杂,可能要分析工艺流程之后,设计控制逻辑。一般是参考HMI的组态图之后,自行设计一个简单的梯形图实现功能。可能的话,一些编程软件中携带的示例程序改改就可以运行。