ICS_CTF 竞赛¶
Warning
The current page still doesn't have a translation for this language.
You can read it through Google Translate.
Besides, you can also help to translate it: Contributing.
本栏目内容,ICS CTF竞赛内容来自于作者自身打比赛经验,如果不对之处,请各位老师批评指正
国内工控比赛考察点¶
采用CTF分类模型,总结分析当前工控ICS比赛中的关键点
比赛类型 | 考察点 | 与CTF异同 |
---|---|---|
内网渗透 | Web 端渗透测试、CMS 系统、工控发布展示系统、数据库系统 | 与 Web 渗透相关 |
逆向分析 | 固件分析、工控软件逆向 | 实际场景逆向 |
工控协议 | 工控流量分析、Misc 类 | Misc 流量分析,工控场景流量特征 |
工控编程 | PLC 编程、HMI 组态、RTU 编程等 | 工控实际组态软件使用,梯形图识别与分析 |
根据漏洞类型其实还可以区分细化题目类型,包括常见的 Web 注入类、固件弱口令、后门程序、协议重放与逻辑问题、组态部署问题等常见的工控场景安全问题。
比赛类型 | 漏洞类型 |
---|---|
内网渗透 | Web 类(SQL、XSS、命令注入、敏感文件泄露 .git/.idea/.project 等、) |
逆向分析 | 固件分析、工控软件逆向 |
工控协议 | 工控流量分析、Misc 类 |
工控编程 | PLC 编程、HMI 组态 |
针对目前出现或曾经出现的 ICS CTF 题目类型,其实与 CTF 竞赛有许多重合点,因此不再此赘述,主要讨论下工控 CTF 中与 CTF 竞赛不太一致的地方。
Web渗透类(Web)¶
该节主要谈工控Web渗透的特点:
- 与业务场景高度契合,例如工业控制中,Web端主要为显示当前使用场景中的控制参数、运行状态等信息,如果在内网中被中间人劫持,当HMI显示设备无法与PLC等实时运行设备同步时,系统会报警或出错。
- 一般采用通用技术展示Web界面,以windows操作系统为主要平台,包括WinCC、Windows Server、Windows 98/2000/XP等看似古老的系统为主。
- Web渗透的同时会保留多个端口,例如FTP、HTTPS、Telnet、SNMP、NTP等服务端口,在Web渗透无法打穿的同时可以试试其他端口。
- 工控由于一般处于内网环境,内网劫持往往比较有效,但是如果内网配置了静态 IP 或其他防护措施,ARP 欺骗方式等内网劫持方法无法起效。
- 敏感信息泄露,配置文件不完善是工控 Web 发布常见问题,不仅仅包括
.git/.idea/.project
等工程信息协议,还可能出现路径遍历、命令注入、弱口令等问题。
题目示例¶
待补充
逆向分析(Reverse)¶
该节主要讨论工控逆向的特点:
- 工控操作系统一般为RTOS(Real Time Operate System),例如vxworks、uc-os等实时操作系统,在逆向前需要对其架构和指令集需要比较熟悉,如果不懂请自行学习。
- 工控固件逆向常见的目标是工控工程加密算法、硬编码秘钥、硬编码后门等常见固件逆向漏洞,如果发现了堆栈溢出类漏洞,往往能够导致目标设备宕机(即DOS后果)。
- 工控固件往往存在加密和压缩情况,需要在第一步解压过程对其进行解压或解密,这部分依据具体厂商来定,不能一概而论。
- 工控固件存在逆向分析不出的情况
题目示例¶
题目名称:tplink_tddp
从题目描述中,我们可以得知我们的关键分析对象时 tddp,然后题目附件是一个固件,利用 binwalk 解析,在 usr/bin
中找到 tddp,然后通过谷歌搜索 tddp 关键词可以发现有在 TP-Link 路由器中有该协议的漏洞,基于 UDP 运行于 1040 端口,发送数据的第 2 个字节(采用 tddp v1 协议)为 0x31(CMD_FTEST_CONFIG)时,会导致远程代码执行。参考链接:https://paper.seebug.org/879/ 。 将 tddp 拖入 IDA 搜索字符串 CMD_FTEST_CONFIG
可以找到会执行 sub_A580
函数
至此已经可以提交 flag,但也可以继续进行分析,通过 qemu 搭建 arm 环境运行文件系统进行动态调试。
工控协议(Protocol)¶
题目特点介绍:
- 工控协议针对工控场景设计,具有简单、高效、低延时等特点,所以针对此类的攻击完全可以考虑采用重放、命令注入等简单攻击手段。
- 工控协议不仅仅采用公开协议、还包括众多的私有协议,这部分协议具体细节需要逆向或者采集数据来实现数据功能的还原。例如 Modbus、DNP3、Melsec-Q、S7、Ethernet/IP 等。
- 工控协议可能导致目标 PLC、DCS、RTU 等设备出现宕机、不可重启等问题,采用基于 Fuzz 的方法可以快速高效发现 PLC 宕机类漏洞。
- 工控协议中可能有众多针对 PLC 等设备的操作,用户需要区分哪些是合法请求、哪些是异常请求,这需要经验,需要研究推断当前流量的使用逻辑。这个场景很适合机器学习的条件,这可以考虑是个探索的方向。
- 针对工控场景的实际防御方案其实最好的还是旁路检测,通过分光将流量接入分析系统,在不影响正常业务使用的同时对目标系统进行安全监控。
题目示例¶
题目名字:mms.pacp
这是一道关于 MMS 协议分析的题目,当拿到文件时使用 Wireshark 打开文件(部分题目需要使用 tcpdump 打开)
可以看到题目中出现了 MMS 字样,这是变电站 IEC61850 标准中的协议,在做题前应该熟悉该协议的层次结构以及功能码(尤其是握手包、读写功能包)。然后过滤 MMS 协议数据包,同时搜索 flag 字符
可以看到在第 1764 条报文中有 flag.txt,功能码是 fileDirectory,所以猜测会使用 fileopen 来进行打开,对这个功能码的请求报文进行过滤
可以发现在 1764 之后的第 1771、1798、1813、4034 条报文都对 flag.txt 进行了打开操作。接下来去每条报文后边一条看是否有 fileread 进行了读取,最终在 1800 处发现其读取了 flag.txt,那么第 1801 条就是回复报文。
内容是一张 base64 编码的图片,对其进行解码就可以得到对应的 FLAG 内容。
这是一道简单的协议分析题目,主要考察做题者对协议结构层次及功能码的熟悉程度,同时也要熟悉 Wireshark 的过滤分析功能,这将起到事半功倍的作用。在比赛题目中有可能并不能通过搜索 flag 字符找到相关线索,相关信息有可能藏在多条报文的载荷中或者长度字段中,需要细心观察和总结。
工控编程和组态(Program)¶
工控编程和组态是工控系统运行的核心和重点,此类题目特点一般是:
- 工控编程核心为明白工控业务逻辑,而工控编程遵循 IEC61131-3(工控史上首例实现 PLC、DCS、运动控制、 SCADA 等联合编程的标准——IEC61131-3),包括 5 种编程语言标准,3 种是图形化语言(梯形图、顺序功能图和功能块图),两种是文本化语言(指令表和结构文本)。
- 工控设备往往可以在线调试,从而可以控制某些输入输出端口,实现强制启停的功能,如果这些功能可以采用 Remote 方式重发,那攻击危害就更为严重。
- 工控设备的连接方式多样,一般采用串口,但是目前设备发展支持以太网、USB 接口等新的方式,如果网口不行试试串口、USB。
- 工控组态可以非常复杂,甚至连接成百上千个输入输出都有可能,组态中会由于添加了新的组件而更加麻烦,这时候要慢慢看,一点一点缕出来。
题目示例¶
题目名字:PLC梯形图计算
这类题目主要考察做题者对于相应产品(PLC、RTU、上位机软件)的编程软件、编程语言及流程的熟悉程度,当拿到题目时需要有相应的支持软件可以打开题目。例如下图是一道西门子 PLC 的编程题目,flag 为梯形图的最终输出值,所以我们使用博图软件打开题目:
这类题目的做法一般有两种:
- 题目代码模拟运行,然后直接查看相应位置的值,但是一般会遇到很多错误难以直接运行;
- 直接读,对于熟悉梯形图的人来说非常简单。
以上是我参加工控比赛的一些心得体会,希望能为后来参赛的小伙伴多些指导。