
西门子PLC西藏总代理
发布时间:2017/12/26 18:58:00西门子PLC西藏总代理 西门子PLC西藏总代理 西门子PLC西藏总代理
我公司是西门子签约代理商 备有大量西门子原装德国进口DP总线 接头 CP5611网卡
数控系统停产备件 PLC 触摸屏
质量保证,欢迎来电来函洽谈。
上海励辉自动化设备有限公司
西门子PLC西藏总代理本文主要是从工业控制网络必备的组件 PLC (可编程控制器)出发,阐明了一种新型后门的实现。本文主要内容是来自 BLACK HAT 2015 上柏林自由大学 scadacs 团队发表的演讲,这是他们的paper原文Internet-facing PLCs - A New Back Orifice。我会滤掉他们论文凑字数的部分,并在他们给出的思路上增加一些实现方面的具体技巧和资料。
不了解工控安全的哥们儿可以先去这篇文章上补一下基础知识 工控安全入门分析 。
西门子PLC西藏总代理 下面几个部分都是一些背景和基础知识,如果已经对plc工控安全非常了解,可以直接跳到攻击描述(0x03)部分。
0x01 引言
本文中,我们研究攻击者如何通过公网plc访问到深层工业网络。
我们采取的方法是将plc变成网关(本文采用西门子系列plc相关技术和特性),这种方法在缺乏适当权限手段的plc上是可行的。经验丰富的攻击者拥有某plc的访问权,可以往上面上传或者代码,只要代码是由MC7字节码组成,这是plc的原生代码形式。我们研究了运行时环境中的plc,并发现可以通过上传mc7代码来实现很多网络服务。特别是,我们实现了
西门子PLC西藏总代理 一个针对西门子plc的 SNMP 扫描器一个功能上完全成熟的,为西门子plc编写的,SOCKS 代理
并且他们的实现完全只依靠编译为MC7字节码的STL语言代码。我们的扫描器和代理可以部署在plc中,并且不会中断plc中原有程序的运行,这可以使运维很难意识到plc已被感染。为了说明和分析深层工业网络入侵,我们开发了一个概念性证明工具,PLCinject(附上github项目地址: SCADACS/PLCinject)。根据我们的概念性证明,xxxxxxxx(这段太tmd复杂,我实在没法准确翻译,主要意思就是讲运行在plc上的恶意软件会使其原有代码扩展增加,如果我们定时观测原有代码和感染恶意代码后的程序,在统计学上这两者的运行效果有明显的差异,然而其对生产过程的影响微乎其微,除非运营者主动监控从PLC中发出的恶意访问的流量,否则很难在生产过程中发现)。此外,攻击者可以利用我们的方法,通过工业控制网络来攻击企业的业务网络。这意味着网络管理必须警惕从业务网络正面和背面发起的双向攻击。
我会在文章补充一下针对施耐德plc的编码。
0x02 工业控制系统介绍
上图展现了典型的使用自动化系统的公司结构。工业控制系统由这么几层构成。在顶部是企业资源规划(ERP)系统,其保存着当前可用资源和生产能力的相关数据。制造执行系统(MES)能够管理多个工厂或平台,并且从ERP系统接受任务。在MES下的系统位于工厂内部,监督、控制和数据采集(SCADA)系统控制生产线。他们提供关于目前生产状态的数据,并且他们提供干预手段。存储着有关生产过程的逻辑的设备称为可编程逻辑控制器(PLC)。人机交互界面(HMI)显示当前的进度,并且允许运营者与生产过程相互作用。
本文将着眼于针对 PLC 的攻击。
PLC 原本仅仅是为自动化控制而开发,在其开发之初,其应用场景是极其封闭的,几乎不能与工业内网外的任何第三方设备有所接触,但是近几年互联网的迅猛发展,和物联网、智能硬件的出现,开始逐渐有工业 PLC 暴露在公网之中,大家可以去seebug和shodan上搜索schneider或者siemens等厂商型号来发现公网上的plc设备。尽管如此,目前PLC的安全性是十分十分差的。首先来说,plc的固件迭代更新缓慢,虽然厂商可能进行维护和更新,但是给工业控制网络中的正在运行的线上plc更新固件,代价是异常巨大的,关机可能就是整个工厂的停止运行。其次,目前的plc已经有了一些比较低级的访问控制手段,但是很少有人会主动开启,因为它会降低plc的运行效率和稳定性。 因此,一般来说,如果某个plc面向公网开放,我们可以向其加载任意代码。
西门子PLC西藏总代理除了在权限控制上的严重问题,攻击者有可能利用plc作为一个进入生产网络甚至公司内网的网关。在本文中,我们分析和讨论这一威胁载体,并且,我们将证明,这种利用方式是真实可行的。出于演示的目的,我们开发一个运行在plc上的端口扫描器和一个socks代理。这个扫描器和代理使用plc的原生编程语言StatementList(STL)编写。
PLC
硬件
PLC由一个 CPU (一般带有通讯模块,如工业以太网、modbus、profinet等等,和一些服务的接口,如ftp、web、telnet等等),和其外部附加的数字量和模拟量输入输出模块共同组成(有时外部还会附加专用的通讯模块)。本文使用西门子 S7-314C-2 PN/DP。
执行环境
这部分如果学过计算机组成原理会比较容易看懂,这部分主要讲plc的代码执行流程,跟后面我们的攻击方式的隐蔽性可行性和代理编写时的通信稳定性密切相关。
西门子PLC西藏总代理 西门子PLC运行着实时操作系统,他初始化周期性时间监视。随后操作系统周期性执行四个步骤,如下图:
在步中,CPU复制过程镜像的输出值来输出模块的状态。第二步,CPU读取输入模块的状态,并且更新过程映像的输入值。第三步,用户程序在时间片中执行1毫秒的持续时间。每个时间片被分割成三个部分,依次执行:操作系统,用户程序和通信。时间片的个数取决于当前的用户程序。默认情况下,时间应该不长于150毫秒,工程师可以配置不同的值。如果规定的时间用尽,中断例程被调用,在通常情况下CPU返回到周期的开始状态,并重新开始循环时间监视。
软件
我们使用 STEP 7 为plc进行编程,我使用的版本是v5.5。
参考这篇文章进行安装 step7 v5.5 cn 软件、仿真器安装、授权
注意,仿真器是需要额外安装的,在上文中有。
工程师可以使用梯形图(LAD),功能块图(FBD),结构化控制语言(SCL)和语句表(STL)来为PLC编程。与基于文本的SCL和类似汇编的STL,LAD和FBD语言是图形化的。PLC程序被分成组织块(OB),功能(FC),功能块(FB),数据块(DB),系统功能(SFC),系统功能块(SFB)和系统数据块(SDB)这几个单元。OB,FC和FB包含着实际的代码,而DB存储着数据结构,SDB存储PLC的当前配置。带有前缀M的内存地址被用于内部数据存储寻址。
编程
一个PLC程序至少由一个组织块(称为OB 1)组成,这就相当于C程序中的main函数。它将由操作系统调用。存在更多的用于特定用途的组织块,比如,OB 100。这个块在PLC启动时被调用,并通常用于初始化系统。
西门子PLC西藏总代理 关于各种编程语言的语法,再次不再赘述,请自行查阅相关资料。
网络协议
这一部分尽管原文中针对通讯过程做了较为详细的阐述,但是我不会做太多解释,因为本文主要侧重恶意代码的编写。
但是还是要多说一句,这些嵌入式设备通常都是使用裁剪过的vxworks等系统,我个人认为,目前工业控制系统的渗透攻击和漏洞挖掘,在固件分析还没有特别深入的现状下,针对工控网络的通讯协议进行攻击是最为高效的手段。我大体翻了下wooyun上的工控漏洞,其实还是web渗透那一套,其实对于工业网络,有时候可用性甚至比保密性更加重要