CTF工控信息安全赛分析思路探讨(一)
2019-09-10 11:00:49 Author: www.freebuf.com(查看原文) 阅读量:152 收藏

概述

最近参加了2019工业信息安全技能大赛,发现一些有意思的题目,故把解题思路写出来,抛砖引玉,与大家一起交流,共同进步。

一、题目说明(4.2交通控制信号灯)

附件是一个交通信号灯的 FBD 图以及其部分工程文件,请你分析出当按下启动按钮后,信号灯起动控制过程中,信号灯亮,灭的情况。方向及状态代号如下:东西:EW 南北:SN 红灯:R 绿灯:G 黄灯:Y 亮:T 灭:F 如流程:东西红灯亮–南北绿灯亮–南北绿灯灭–南北黄灯亮–东西红灯灭可写为:EWRT-SNGT-SNGF-SNYT-EWRF 注:正确答案格式为:XXXX-XXXX……XXXX-XXXX(第一组信号灯情况和最后一组信号灯情况相同,共计 14 组) Flag 为正确答案的 32 位小写 md5值

附件内容

打开发现是两张图片和1个扩展名为mwp的文件。

FBD图

信号灯示意图

二、答题知识点准备

为了完成题目,有必要了解以下几个知识点:

知识点1:什么是FBD图?

FBD(功能块图)使用类似于数字电路中的图形逻辑符号来表示控制逻辑.一些复杂的功能用指令框表示。一般用一个指令框表示一种功能,框图内的符号表达了该框图的运算功能,框的左边画输入,右边画输出,指令框左边的小圆圈表示对输入变量取反(“非”运算),框右边的小圆圈表示对运算结果再进行“非”运算。

知识点2:FBD图中的变量含义?

I 输入/输出映像寄存器 S7-200 PLC编址规模(I0.0~I15.7)。 输入映像寄存器(该区域能够按位操作又称输入继电器)输入继电器线圈由外部信号驱动,常开触点和常闭触点供用户编程运用。
Q 输出映像寄存器 S7-200 PLC编址规模(Q0.0~Q15.7)。输出映像寄存器(又称输出继电器)是用来将PLC 的输出信号传递给负载,线圈用程序指令驱动。
M 内部标志位(M)存储区 M作为操控继电器(又称中心继电器),用来存储中心操作数或其它操控信息。 S7-200 PLC编址规模M0.0~M31.7 ,能够按位、字节、字或双字来存取存储区的数据。  
SM 特殊标志位(SM)存储器 SM0.5 该位提供时钟脉冲,该脉冲在1秒钟的周期时间内OFF(关闭)0.5秒,ON(打开)0.5秒。该位提供便于使用的延迟或1秒钟时钟脉冲。
T 定时器(相当于时刻继电器) S7-200 CPU中的定时器是对内部时钟累计时刻增量的设备,用于时刻操控。编址规模T0~T255(22X);T0~T127(21X) 。

知识点3:扩展名为.mwp是什么类型的文件?

mwp是西门子PLC软件程序文件,一般来说我们可以通过西门子MICRO WIN编程软件打开。

知识点4:交通灯动作流程?

PS:平时自己观察,只有绿灯在快灭时会闪烁,用提示驾驶员。黄灯亮一般3秒左右。东西方向和南北方向同色信号灯不会同时亮。同向同颜色信号灯正反方向动作是一致的。

交通灯动作情况(O(∩_∩)O哈哈~十字路口亲自观察),绿灯亮——绿灯闪烁——绿灯灭——黄灯亮——黄灯灭——红灯亮——绿灯亮——绿灯闪烁——绿灯灭——黄灯亮——黄灯灭——红灯亮——….

知识点5:定时器功能块引脚定义:

三、解题思路

3.1题目分析

FBD图即为功能块图,此题考验选手的工控PLC编程知识。另外还需要对交通灯的控制流程有一定了解。*.mwp为西门子S7-200系列PLC的工程文件。

题目疑问:题目中没有给出输出点指明对应方向的交通灯名称。

3.2解题思路

思路1,直接根据FBD图推导输出状态解题思路2,下载西门子S7200编程软件和仿真软件,使用编程软件转换工程为.awl文件,用仿真软件加载运行。

四、直接根据FBD图推导输出状态解题

4.1 FBD图动作逻辑分析

FBD图中共13个网络,

网络1中的I0.0为按钮输入信号,一般为自动复位按钮,当PLC检测到I0.0的上升沿信号后,M0.0为1,同时形成自保持电路状态。(关于自保持电路原理请自行百度)

网络2为交通灯周期循环的起点,利用M0.0来触发,当M0.0动作20秒后,T50动作。整个周期循环使用到6个定时器(T),时间单位为100ms,整个循环周期为55秒,我们把一个循环周期分成6个阶段,为了便于说明,我们用定时器编号来区分:如下表:

T50 20s
T51 3s
T52 2s
T53 25s
T54 3s
T55 2s
合计 55s

第一个循环周期:

在T50计时阶段,持续20秒,该阶段,Q0.0点亮,Q0.4点亮

在T51计时阶段,持续3秒,该阶段,Q0.0状态不变持续点亮,Q0.4闪烁

在T52计时阶段,持续2秒,该阶段,Q0.0点亮,Q0.5点亮

在T53计时阶段,持续25秒,该阶段,Q0.3点亮、Q0.1点亮

在T54计时阶段,持续3秒,该阶段,Q0.3点亮,Q0.1闪烁

在T55计时阶段,持续2秒,该阶段,Q0.3点亮,Q0.2点亮

第二个循环周期:

在T50计时阶段,持续20秒,该阶段,Q0.0点亮,Q0.4点亮

在T51计时阶段,持续3秒,该阶段,Q0.0点亮,Q0.4闪烁

在T52计时阶段,持续2秒,该阶段,Q0.0点亮,Q0.5点亮

在T53计时阶段,持续25秒,该阶段,Q0.3点亮、Q0.1点亮

在T54计时阶段,持续3秒,该阶段,Q0.3点亮,Q0.1闪烁

在T55计时阶段,持续2秒,该阶段,Q0.3点亮,Q0.2点亮

······

下面列出一个周期的状态表

时间 I0.0 I0.1 Q0.0 Q0.1 Q0.2 Q0.3 Q0.4 Q0.5 M0.0 T50 T51 T52 T53 T54 T55 SM0.5
1 1 1 1 1 1/0
2 1 1 1 1 1/0
3 1 1 1 1 1/0
4 1 1 1 1 1/0
5 1 1 1 1 1/0
6 1 1 1 1 1/0
7 1 1 1 1 1/0
8 1 1 1 1 1/0
9 1 1 1 1 1/0
10 1 1 1 1 1/0
11 1 1 1 1 1/0
12 1 1 1 1 1/0
13 1 1 1 1 1/0
14 1 1 1 1 1/0
15 1 1 1 1 1/0
16 1 1 1 1 1/0
17 1 1 1 1 1/0
18 1 1 1 1 1/0
19 1 1 1 1 1/0
20 1 1 1 1 1/0
21 1 1 1/0 1 1 1/0
22 1 1 1/0 1 1 1/0
23 1 1 1/0 1 1 1/0
24 1 1 1 1 1 1/0
25 1 1 1 1 1 1/0
26 1 1 1 1 1 1/0
27 1 1 1 1 1 1/0
28 1 1 1 1 1 1/0
29 1 1 1 1 1 1/0
30 1 1 1 1 1 1/0
31 1 1 1 1 1 1/0
32 1 1 1 1 1 1/0
33 1 1 1 1 1 1/0
34 1 1 1 1 1 1/0
35 1 1 1 1 1 1/0
36 1 1 1 1 1 1/0
37 1 1 1 1 1 1/0
38 1 1 1 1 1 1/0
39 1 1 1 1 1 1/0
40 1 1 1 1 1 1/0
41 1 1 1 1 1 1/0
42 1 1 1 1 1 1/0
43 1 1 1 1 1 1/0
44 1 1 1 1 1 1/0
45 1 1 1 1 1 1/0
46 1 1 1 1 1 1/0
47 1 1 1 1 1 1/0
48 1 1 1 1 1 1/0
49 1 1 1 1 1 1/0
50 1 1 1 1 1 1/0
51 1 1/0 1 1 1 1/0
52 1 1/0 1 1 1 1/0
53 1 1/0 1 1 1 1/0
54 1 1 1 1 1 1/0
55 1 1 1 1 1 1/0

说明:1/0表示为闪烁状态

4.2根据FBD图分析情况,确定灯颜色

根据前面知识点,我们可以推测,存在闪烁的灯为绿灯,与绿灯同时亮的为反方向的红灯或黄灯(时间长的为红灯,短的为黄灯),故可得到每一个输出点对应的灯颜色:

Q0.1,Q0.4都有闪烁,所以为绿灯

Q0.2,Q0.5只点亮2秒,所以为黄灯

剩下的Q0.0,Q0.3为红灯

绿 绿
Q0.0 Q0.1 Q0.2 Q0.3 Q0.4 Q0.5

4.3假设灯的方向,分别解题             

根据题目,我觉得可以理解为同向同色的两个灯为一组(比如南北向两个绿灯)

PLC每个输出点对应一组灯。6个输出点对应12个信号灯,这样解释可以与附件给的信号灯示意图一致。

结合题目附件说明“(第一组信号灯情况和最后一组信号灯情况相同,共计 14 组)”

一个周期循环加第二次循环的一次“T50计时阶段”,刚好7对输出,共14组。且第一组的状态与第七组的状态是一致的

这里需要注意的一点是,7对输出,每对输出中的两个怎么排序。例如第一组

第一组

方向A:红灯亮RT

方向B:绿灯亮GT

到底是红灯排前面还是后面,我觉得可以根据PLC程序的执行顺序来判断,PLC程序执行遵循从上至下,从左至右的原则。

方向A 红灯亮 红灯亮 红灯亮 绿灯亮 绿灯闪烁 黄灯亮 红灯亮
Q0.0 Q0.0 Q0.0 Q0.1 Q0.1 Q0.2 Q0.0
方向A灭灯 红灯灭 绿灯灭 黄灯灭
时间轴 T50计时阶段 T51计时阶段 T52计时阶段 T53计时阶段 T54计时阶段 T55计时阶段 T50计时阶段
方向B 绿灯亮 绿灯闪烁 黄灯亮 红灯亮 红灯亮 红灯亮 绿灯亮
Q0.4 Q0.4 Q0.5 Q0.3 Q0.3 Q0.3 Q0.4
方向B灭灯 绿灯灭 黄灯灭 红灯灭
顺序1 方向A红灯亮 状态不变 方向B绿灯灭 方向A红灯灭 状态不变 方向A绿灯灭 方向B红灯灭
顺序2 方向B绿灯亮 状态不变 方向B黄灯亮 方向A绿灯亮 方向A黄灯亮 方向A黄灯灭
方向B黄灯灭 方向A红灯亮
方向B红灯亮 方向B绿灯亮

因为题目中没用指明是从南北方向开始还是东西方向开始,所以我们考虑按这两种情况分别考虑,最后会得到2个答案,flag只能是2者都提交试一试。

假设条件 方向A红灯亮 方向B绿灯亮 方向B绿灯灭 方向B黄灯亮 方向A红灯灭 方向A绿灯亮 方向B黄灯灭 方向B红灯亮 方向A绿灯灭 方向A黄灯亮 方向B红灯灭 方向A黄灯灭 方向A红灯亮 方向B绿灯亮
如方向A=东西,方向B=南北 EWRT SNGT SNGF SNYT EWRF EWGT SNYF SNRT EWGF EWYT SNRF EWYF EWRT SNGT
如方向A=南北,方向B=东西 SNRT EWGT EWGF EWYT SNRF SNGT EWYF EWRT SNGF SNYT EWRF SNYF SNRT EWGT

最后得到两个答案:

答案1:EWRT-SNGT-SNGF-SNYT-EWRF-EWGT-SNYF-SNRT-EWGF-EWYT-SNRF-EWYF-EWRT-SNGT

flag1=flag{2bbce0f98ef4fa9f1dd216fb9e568de1}

答案2:SNRT-EWGT-EWGF-EWYT-SNRF-SNGT-EWYF-EWRT-SNGF-SNYT-EWRF-SNYF-SNRT-EWGT

flag2=flag{2047d84304cb1fd00ed16ececa741633}

(绿灯闪烁其实也算亮灭,但是答案过于复杂,故没进行分析,这涉及到按下按钮时SM0.5处于上升沿还是下降沿的情况)

五、总结

这类针对PLC程序的题目,参加2018年工业信息安全技能大赛西部赛区的时候也遇到过一次,题目要求是求程序计算的结果,比赛组办方最初只给了一个西门子SMART的工程文件,但是现场选手如果没有运行环境,此题只能放弃。如果有环境仿真运行一下很简单就做出来了,最后主办方把程序截图打印出来,最后也是根据截图分析获取的答案。

还有一类是针对上位机工程文件的题目,也是类似,如果没有运行环境,想答题是非常困难的。

遇到类似题目,首先根据给出文件获取信息,根据工程文件扩展名确定是哪个厂家的哪款产品产生的文件(这类要么百度,要么平时积累,后续有时间我会整理一个对照表出来),然后最好放到环境中的运行后来分析。一类像本题还会给出程序截图。这几类题目要解答成功,需要具备工程文件的运行环境或是肉眼识图分析的能力。

以上题目分析,答案正确与否未经过答题系统验证,如有不足,恳请留言指正。

六、附件

题目附件下载

链接:https://pan.baidu.com/s/1FrtyNp5MsnXGyYp3CtCUmg 

提取码:9jzy 

波形图编辑器:

链接:https://pan.baidu.com/s/1GYnnPNkKE-I5EhJkF4VCTg 

提取码:2k41 

波形图文件

链接:https://pan.baidu.com/s/1w_AzQA-4QMCkXo_jp7HDpQ 

提取码:mwg2 

思路2,请关注我的后续更新。

*本文作者:云火安全实验室,转载须注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/ics-articles/212376.html
如有侵权请联系:admin#unsafe.sh