2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

2018工业信息安全技能大赛华东赛区初赛

第2题 解题思路

本题主要考察点是对常见工控协议的理解(modbus/tcps7comm),题目目标是寻找出报文中某条异常报文流量。很让人疑惑的是,题目中并没有给出“异常流量”特征的定义,所以需要从多个角度探索出题人的意思。

首先,观察整个抓包文件,其中包含了modbus/tcps7comm和极少的tcp周期性握手挥手报文。

之后,针对modbus/tcps7comm分别进行深入地分析。此外值得注意的是,一条工控协议报文中至关重要的字段是状态字/控制字/功能码,它直接指示着该条报文的具体作用。

对于modbus/tcp而言,本流量中包含的功能码是1:Read Coils2:Read Discrete Inputs3:Read Holding Registers4:Read Input Registers。这些功能码的作用是读取PLC中一些输入量、输出量和中间变量的值。

对于s7comm而言,本流量中包含的功能码是0xf0:Setup Communication0x04:Read Var0x05:Write Var。这些功能码的作用分别是建立连接,读变量和写变量。

其中,最为敏感也是我们最关心的必然是0x05:Write Var,因为可以将一次写入异常地址/异常数据的行为当作是异常流量。

下面我们着重分析s7comm协议中0x05:Write Var控制字的相关报文,wireshark的筛选条件为:

s7comm&&s7comm.param.func==0x05

筛选结果如下图所示:

可以看出,这些0x05:Write Var命令是向PLC中数据块1(DB1)的0x00000起始地址连续写入50字节的数据。

接下来,笼统地排查是否有报文写地址或数据和其他报文不同?wireshark的筛选条件为:

(((s7comm) && (s7comm.param.func == 0x05)) && (s7comm.header.rosctr == 1)) && (frame[73:12] == 12:0a:10:02:00:32:00:01:84:00:00:00)

如下图所示,现在已经定位到了这条异常报文,下图显示了其异常之处表现在:

在所有控制字为写变量(write var)的s7comm报文中,这条报文写变量的地址(DB 7)与其他报文地址不同(DB 1)

虽然我们已经定位到了这条异常报文,但是还没摸清真正答案flag在表现方式上的套路。

按照第三题的套路,直接将报文的hex码转为ascii码就是flag的套路,在这里似乎不管用了,这是因为上图中wireshark在hex码右侧已经显示出了ascii码,它并没有实际的意义。

但是我观察到,这堆ascii码好像又是一串hex数据,因此我想到将这串hex再转换为ascii码试一试,编写转换函数如下:

def hex_to_ascii(payload):
    data = payload.decode("hex")
    flags = []
    for d in data:
        _ord = ord(d)
        if (_ord > 0) and (_ord < 128):
            flags.append(chr(_ord))
    return ‘‘.join(flags)

if __name__ == ‘__main__‘:
    res = hex_to_ascii("4943537365635363616e")
    print res
    res = hex_to_ascii("57696e")
    print res

得到结果如下

ICSsecScan
Win

看到这一串有意义的字符串,才敢确定这就是最终的答案flag。

最后,总结一下这种异常网络流量分析题的套路:

  1. 以树形结构将此问题域划分为各个子问题域,依次排除子问题域的可能性,子问题域的划分可参照以下2、3、4点;
  2. 首先,可依据不同的协议类型进行分类筛选,通常不同的工控协议之间没有任何逻辑关系,但某些应用层的工控协议和下层传输层协议是由依附关系的(如s7commCOTP之间);
  3. 其次,可按工控协议控制字进行分类筛选;
  4. 依据不同控制字的不同报文特征中不同的关键字段分类筛选;
  5. 一点技巧:flag往往隐藏在较长的报文当中;
  6. 二点技巧:准备一些盲目扫描报文的脚本,比如直接扫描报文hex的ascii码中是否出现过flag字符串,比如报文hex的ascii是否出现连续的hex型数值;
  7. 三点技巧:在以上树形筛选的过程中,做好历史筛选条件及其结果的记录。

参考资料:

  1. 2018年工业信息安全技能大赛(东北赛区)解题报告——工业网络数据分析

    https://laucyun.com/a6ce133bc845d6a2eb3442b24fd7300a.html

  2. CTF WP – 工控业务流量分析

    http://www.icsmaster.org/archives/ics/741

原文地址:https://www.cnblogs.com/bianmu-dadan/p/9414165.html

时间: 2024-10-01 03:15:50

2018工业信息安全技能大赛华东赛区初赛 第2题 writeup的相关文章

2018华为网络技术大赛---从初赛到复赛到决赛

2018.4.21 进行了初赛 初赛的准备过程不长,前前后后也就三四天时间吧,云平台上的视频都没来得及看完,只看了"基础平台"一部分,"微服务","大数据",然后其他的就都是看的文档了,包括云平台上的文档和往届提供的文档,其中还花了一天的时间刷了一下群里提供的hcna相关的题目(感觉并没有什么用),还是看文档来的快,也来的直接,视频它讲的很慢,而且不能倍速观看,其中有很多又是废话,所以感觉还是看文档比较好,都是干货.周六下午就去比赛,一个小时的时

技能大赛已成名利场

11月10号刚参加完省赛,这次是三等奖,成绩617分,排在我们前面的几个队伍的成绩分别是854.827.717.710.675.其实相比去年省赛的成绩,我们还是有不少进步,去年我们是477分,排在我们前面的分别是719.611.527.488,但我们在进步的同时,大家也都在进步,而且人家进步的幅度更大,所以这次我们竟然被淘汰出局了,这是在比赛之前我绝没想到的. 既然成绩差,那么照例要好好总结分析原因.第一阶段的设备配置部分仍属正常,而且此次负责这部分任务的同学是位思科高手,所以这部分出问题的可能

2018年信息安全工程师备考经验

2018年信息安全工程师备考经验 https://www.moondream.cn/?p=430 要想顺利通过信息安全工程师考试,必须多看书多做题,重在理解. 在备考时,首先要把大纲的要求搞清楚,其次要对教材的内容仔细认真研读.思考.理解.记忆. 复习时着重采取的方法:先把软考办配套的考试教材通读至少两遍以上,感觉内容掌握差不多时,到信管网在线题库做一些模拟试题,可以达到事半功倍的效果. 要有整体的概念.法律法规.安全管理.安全技术.案例分析实际上是完整的整体,是一个信息安全工程师应知应会.应该

『8.21 模拟赛』技能大赛

题目描述 rsw因为迟到次数太多被列入黑名单,于是被派去参加陕西妇女儿童技能大赛,大赛中共安排了m个比赛项目,算上rsw在内,共有n位选手报名参加本次比赛.(如rsw,zrx,kh,ljm,cky,大耳朵图图,大头儿子等) 经过m场比赛,组委会发现,每个项目,有且仅有两个人实力超群.(比如穿针引线项目,rsw,ljm独领风骚,健美操项目,cky,cjy风姿绰约). 现在,组委会要推选一些人去参加全国比赛,因为每个项目都必须有人擅长,所以推选的这些人,对于每一个项目,至少要有一个人擅长. 已知,选

ACM-ICPC 2018 南京赛区网络预赛 E题

ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answer of all of these problems. However, he can submit ii-th problem if and only if he has s

【翻译贴】上海市第八届星光计划(2019年)技能大赛网站设计(中职组)决赛题目

两年一度的上海市星光计划比赛被誉为职业技能大赛的奥林匹克,比赛分为中职组和高职组 随着若干年的发展,比赛的题目强度逐年提高,逐步向世界职业技能大赛的比赛强度靠拢 这次翻译的题目是上海市第八届星光计划(2019年)技能大赛网站设计(中职教师组)的决赛题目.全文是英文的,学生组的题目和教师组差不多,个别地方降低了要求.故这次翻译了教师组的题目. 决赛要求 模块 A:站点设计 一.竞赛时间 150 min 二.竞赛任务及要求 1. INTRODUCTION: Frankfurt Internation

HDU 4119 Isabella&#39;s Message (2011年成都赛区现场赛I题)

1.题目描述:点击打开链接 2.解题思路:本题是一道模拟题,要求模拟一个解密的过程,练习这么久第一次做模拟题1Y了,内心还是很激动的~.只需要根据题意,记录* 所在的位置即可,然后每次都是先解密,后顺时针旋转90度.把每次解密的信息放到一个vector里,接下来就是连接它们,得到解密后的字符串,在map中查找这些单词是否存在即可.如果都存在,就把这条解密信息放到ans中,最后对ans排序,输出ans[0]就是答案. 3.代码: //#pragma comment(linker, "/STACK:

2015 初赛TG 错题解析

2015 初赛TG 错题解析 得分:==81.5== 过失性失分:T6(1.5) 未掌握的知识点失分:T3(1.5) T12(1.5) T19(1.5) 未把已知活学活用T11(1.5) 没看懂程序 T26(8) T28-1(3) T3 1948 年,( )将热力学中的熵引入信息通信领域,标志着信息论研究的开端. A. 冯·诺伊曼(John von Neumann) B. 图灵(Alan Turing) C. 欧拉(Leonhard Euler) D. 克劳德·香农(Claude Shannon

2018大华软件大赛 初赛

1    给定一个正数数组,找出不相邻元素的子序列的和的最大值.如:2.5.3.9应该返回14(5+9):8.5.3.9.1应该返回17(8+9):5 4 10 100 10 5应该返回110(5+100+5):    "输入的第一行指定用例数量T:用例的第一行输入指定数组长度N:用例的第二行输入指定N个数组元素C[i]:"    输出子序列的和的最大值    "1 ≤ T ≤ 101 ≤ N ≤ 1000 ≤ C[i] ≤ 500"    "int fi