SCADA渗透测试

SCADA简介

SCADA(Supervisory Control And Data Acquisition)即数据采集与监视控制系统。SCADA系统是以计算机为基础的DCS与电力自动化监控系统;它应用领域很广,可以应用于电力、冶金、石油、化工、燃气、铁路等领域的数据采集与监视控制以及过程控制等诸多领域。

近年来,SCADA系统已经从专有,封闭的网络和系统转移到开放系统和TCP / IP网络。 这暴露了这些网络与传统计算机网络面临的相同风险。 然而,这并不一定意味着SCADA评估的安全评估方法仍然是一样的。

根据我们在进行SCADA评估的经验,我们注意到每次评估都是不同的,每一次都需要基于系统功能和行业类型的独特方法。在这篇博文中,我将分享我的 进行SCADA评估的经验,并讨论哪些最佳方法和工具最适合评估这些高度敏感的系统。

我们从协议层看SCADA

SCADA系统支持各种协议,如DNP3,ModBus,IEC 60870,BACnet,LonWorks和EPICS。在这篇博文中,我们将继续讨论ModBus over TCP协议,因为它仍然广泛应用于控制系统。

ModBus是用于与可编程逻辑控制器(PLC)通信的串行通信协议,可以通过TCP(端口502)使用。要使用Modbus进行通信的每个设备都有一个唯一的地址。设备使用主从模型进行通信,只有一个设备(主站或从站)才能启动事务(称为“查询”)。从站通常是SCADA网络上的终端设备(阀门,传感器或仪表读取),处理信息并将其输出发送给主站。

ModBus帧由目标设备地址(或广播地址),定义请求动作的功能代码,数据字段和错误检查字段组成。默认情况下,ModBus没有身份验证和加密,但可以通过SSL / TLS传输,以防止嗅探,欺骗和重播攻击。

一个典型的SCADA网络

站在攻击者的角度可以从网络架构图中看出攻击面以及与网络中其他部分的隔离程度。下一代的SCADA网络将会设计IoT(物联网),从而增加维护和集成的便利来降低基础架构成本。

从架构图可以看出,SCADA网络与企业网络是通过防火墙隔开的,防火墙配置正确,不允许访问SCADA网络。

SCADA涉及三个主要关键点:

1 人操作的接口与控制平台:通常使用windows工作站通过软件来管理和控制网络上的PLC。如果工作站被攻击了,那么SCADA网络中的所有内容都可以被访问。

2 PLC(Programmable Logic Controller-可编程逻辑控制器):可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。我们可以通过网路浏览器、Telnet、SSH访问PLC,这样PLC就可能受到各种应用程序和网络层的攻击。一旦遭到攻击,那么攻击者就可以操纵输入/输出设备,并对组织造成损害。

3 终端设备(传感器,阀门或泵):终端设备安装在远程站点。他们可以通过无线电、串型接口、以太网或调制解调器等通信链路向PLC反馈。如果受到攻击可能损害环境的完整性。

注意:上述组件是每个SCADA网络的标准配置,又是你也会发现其他设备比如数据库服务器,串行设备接口等。

渗透测试方法

准备工作

通常,组织很少会把SCADA测试放在QA环境。所以假设必须要对SCADA网络进行实时评估,那我们要考虑所有可能的情况。建议在做测试之前做好准备,并确保每个测试阶段所有涉及到的部门都应该通知到。

熟悉目标

做任何评估的第一个先决条件。渗透测试者需要了解SCADA的作用:有什么关键任务、提供什么功能、最终用户是谁以及他对组织的作用。研究系统文档,对实施的产品和供应商进行自己的研究,挖掘已知产品漏洞,并且在此阶段记录默认口令。这是就可以做威胁建模。

研究网络架构

研究网络架构的主要目的是在逻辑上了解SCADA环境的每个组件如何相互关联(这个是非常复杂的)。还应该了解设计哪些组件以及他们如何隔离,如何连接或暴露在更加广泛的网络中。这个阶段还涉及网络中存在的各种子网的识别。了解企业网络与SCADA网络是否分离是非常重要的。这个阶段就可以确定我的攻击面。

探索网络

有了上述阶段的信息,可以对网络进行探索了,但是前提是要在客户同意的情况下。首选的方法是对知名的端口进行慢速扫描,列出SCADA相关的网络协议和服务。

尝试选择不同的时间选项来确保不会占用带宽或造成DOS攻击,由于SCADA系统是非常脆弱的很容易造成DOS的情况。这个阶段也快尝试使用wireshark来嗅探流量,看是否存在任何明文传输的问题。在这个阶段要经常与利益相关者进行沟通。

攻击计划

以上阶段应该已经提供了足够的信息让你知道该如何测试以及测试哪些应用。在攻击之前应该记录所有测试的方法步骤,这样在后面测试敏感和脆弱的系统时更有条理。

实施攻击(不要暴力攻击)

对每个漏洞单独测试利用可以帮助我们确定漏洞的根本原因,以防任何设备出现故障的意外。如果发生这种情况应该及时与客户沟通。应该利用SCADA网络中的每个组件,即网络基础设施、主机操作系统、PLC、HMI、工作站等。

SCADA渗透测试列表

  • 出厂默认设置是否修改
  • 是否设置了访问PLC的白名单
  • SCADA网络与其他网络是否隔离
  • 是否可以通过物理方式访问SCADA控制中心
  • 控制机器是否可以访问互联网
  • SCADA的网络传输是否是明文形式
  • 组织是否遵循严格的密码策略
  • 控制器、工作站以及服务器是否打了最新补丁
  • 是否运行有防病毒软件并且设置应用程序白名单

工具列表

  • smod(https://github.com/enddo/smod):Modbus渗透测试框架
  • plcscan(https://github.com/yanlinlin82/plcscan):扫描PLC的Python脚本
  • NMAP Scripts(https://nmap.org/book/man-nse.html):扫描PLC的nmap脚本
  • Wireshark(https://www.wireshark.org/):网络嗅探器
  • mbtget(https://github.com/sourceperl/mbtget):读取PLC的Perl脚本
  • plcinject(https://github.com/SCADACS/PLCinject):向PLC注入代码的工具
  • 参考工具列表(https://github.com/hslatman/awesome-industrial-control-system-security)

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2017-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【Git 第1课】 什么是Git?

今天起,我会在微信推送文章里穿插一个新的系列:Git。和之前Python入门教程不同,这个系列需要有一点编程的经验。倒不是因为它很难,只是如果没有开发过稍大一点...

337100
来自专栏逸鹏说道

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All Abou...

41870
来自专栏知晓程序

玩腻了传纸条、漂流瓶,就用它来跟网友分享「小卡片」吧

今天,知晓程序(微信号 zxcx0101)就为你推荐一款有毒的小程序「一起 Up」,在里面,你不仅可以看到其他用户分享的有趣、有内涵的内容,还能将自己的私货与其...

10340
来自专栏斑斓

处理遗留系统

处理遗留系统,几乎是每个程序员都不可能绕过的一件麻烦事儿。因为时间压力,技能不足以及功能复杂等诸多原因,常常使得遗留系统的代码变得糟糕混乱,可读性与维护性差,无...

29240
来自专栏CSDN技术头条

《英雄联盟》支撑最高750万同时在线用户的聊天服务打造

【编者按】在2013年初马化腾被问及“过去两年腾讯在海外投资中最成功的案例是什么”时,他毫无疑问的回答:“投资美国的Riot Games,做出《英雄联盟》。”在...

323100
来自专栏申龙斌的程序人生

搞定GTD - 参考资料的归类方法

在GTD标准流程中,对于一些事情(Stuff)可能暂时无法采取具体行动,但将来还有用,那么它们就是参考资料,一定要做好归档。当项目开始运作时,要能够方便地找到。...

409100
来自专栏编程

小白零基础编程到大佬级别是怎么学习Python的?

程序员在普通人眼里就像魔法师,一个脚本轻松抢几十盒月饼(虽然最后被开除),一个插件解决春运抢票难题,几十行代码搭建一个 Web 网站,用微信自动和妹纸聊天,在程...

43570
来自专栏不会写文章的程序员不是好厨师

日志那些事儿——日志Logger漫谈

最近在关注限流、降级、监控等系统稳定性方面的技术,反复牵涉到的几个技术名词是日志log,Aop切片。

19320
来自专栏原创

Android服务开发经验——优雅地活着 by个推推送

具体来说,就是要做到两点: 1. 尽可能运行 2. 尽可能省电 看似寻常的道理,实现起来还真不容易,下面一个个来看: 尽可能运行 Android系统会根据当前资...

41370
来自专栏vue+shiro

基于vue(element ui) + ssm + shiro 的权限框架

现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目,网上有句话说,语言框架迭代太快了,我学不动了,不如回去搬...

1.2K20

扫码关注云+社区

领取腾讯云代金券