AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

PLC暴露在互联网上的安全隐患 by Z-0ne

发布者 security
发布于 1441759540559  浏览 2506 关键词 网络安全, 智能硬件 
分享到

第1页

Exploit
 PLC
 on
 the
 internet

Z-­‐0ne



第2页

什么是PLC 为什么会联网

概述



第3页

PLC

• Programmable
 Logic
 Controller

– 电源 – CPU – 存储 – I/O – 网络模块



第4页

• PLC功能

– 顺序控制 – 逻辑控制



PLC功能



• PLC应用

– 自动化控制 – 过程控制



第5页

• PLC内核

– Codesys – ProConos

• 底层操作系统

– Linux – Vxworks – WinCE

• 通信协议

– 通用

• Modbus

– 私有

• S7 • Omron
 F INS



其他



第6页

• 串行

– RS232/485

• 专用

– MPI

• 以太网

– TCP/IP – UDP



PLC通信



第7页

网络武器的目标

• Stuxnet作为网络武器其最终的目标也是西 门子PLC

– 劫持通信 – 注入自己的逻辑程序



第8页

联网的隐患(1)

• PLC暴露在互联网是比SCADA更大的安全隐 患

– 未授权访问 – 设备的用户等级保护缺失 – 通信协议的脆弱性



第9页

联网的隐患(2)



• PLC暴露在互联网是比SCADA更大的安全隐 患



– 控制流程工艺 – 位于更底层



ERP



信息层



– 可能为关键基础设施



APPLICATION MES应用



管理层



控制层



P L



P L



P L



P L



设备层



第10页

联网的趋势

• 远程数据通信/远程维护催生了联网的需求

– 方便、快捷 – 减少了现场运维的成本 – 统一管理



第11页

联网的解决方案(1)



第12页

联网的解决方案(2)



第13页

联网的解决方案(2)



第14页

西门子PLC全球统计报告 西门子PLC公网蜜罐统计 西门子S7协议 蜜罐应用案例 联网的风险案例

PLC
 ON
 THE
 INTERNET



第15页

S7-­‐1200硬件形态



第16页

S7-­‐300硬件形态



第17页

西门子PLC
 CPU模块全球统计报告(1)

• 使用S7协议(TCP/102)对互联网进行扫描探测

– http://www.zoomeye.org/search?q=port%3A102 – https://www.shodan.io/search?query=Module+po

rt%3A102

• 全球数据 (能成功读出模块型号的数据)

– ZoomEye à 1446
  – Shodan à 2749 – Plcscan.org
 à 2215



第18页

西门子PLC
 CPU模块全球统计报告(2)

• 使用S7协议(TCP/102)对互联网进行扫描探测

– Nmap à s7-­‐enumerate.nse(TSAP:0102) – PG
 mode – Rack:0
 Slot:2



第19页

西门子PLC
 CPU模块全球统计报告(3)

• 国家排行

– 德国 350 – 意大利 255 – 美国 179 – 西班牙 146 – 土耳其 124 – 波兰 113 – 法国 108 – 捷克 74 – 丹麦 67 – 奥地利 64



第20页

西门子PLC
 CPU模块全球统计报告(4)



• 模块货号排行

– 6ES7
 214-­‐1AG31-­‐0XB0 – 6ES7
 214-­‐1AE30-­‐0XB0 – 6ES7
 212-­‐1HE31-­‐0XB0 – 6ES7
 315-­‐2AG10-­‐0AB0 – 6ES7
 151-­‐8AB01-­‐0AB0 – 6ES7
 315-­‐2EH14-­‐0AB0 – 6ES7
 315-­‐2AH14-­‐0AB0 – 6ES7
 214-­‐1BG31-­‐0XB0 – 6ES7
 314-­‐6EH04-­‐0AB0 – 6ES7
 313-­‐5BF03-­‐0AB0



145 142 129 129 121 120 88 74 74 73



第21页

西门子PLC
 CPU模块全球统计报告(5)



• 固件版本排行

– Version:
 3 .0.2 – Version:
 2 .2.0 – Version:
 2 .6.0 – Version:
 4 .0.0 – Version:
 2 .6.11 – Version:
 3 .2.10 – Version:
 3 .2.6 – Version:
 3 .3.8 – Version:
 3 .2.3 – Version:
 3 .2.8



472 142 113 96 76 76 69 59 59 55



第22页

西门子PLC
 CP模块全球统计报告(1)

• 使用S7协议(TCP/102)对互联网进行扫描探测

– Nmap à s7-­‐enumerate.nse(TSAP:0100) – Rack:0
 Slot:0

• 全球数据(能成功读出模块型号的数据)

– Plcscan.org
 
 à 486



第23页

西门子PLC
 CP模块全球统计报告(2)

• 使用S7协议(TCP/102)对互联网进行扫描探测

– Nmap à s7-­‐enumerate.nse(TSAP:0100) – PG
 mode – Rack:0
 Slot:0



第24页

西门子PLC
 CP模块全球统计报告(3)

• 国家排行

– 意大利 91 – 德国 76 – 西班牙 32 – 法国 29 – 瑞士 26 – 捷克 25 – 丹麦 23 – 美国 18 – 波兰 14 – 中国 14



第25页

西门子PLC
 CP模块全球统计报告(4)



• 模块货号排行

– 6GK7
 343-­‐1CX10-­‐0XE0 – 6GK7
 343-­‐1EX30-­‐0XE0 – 6GK7
 343-­‐1CX00-­‐0XE0 – 6GK7
 343-­‐1EX11-­‐0XE0 – 6GK7
 443-­‐1EX20-­‐0XE0 – 6GK7
 443-­‐1EX11-­‐0XE0 – 6GK7
 343-­‐1EX21-­‐0XE0 – 6GK7
 343-­‐1EX20-­‐0XE0 – Unknown – 6GK7
 343-­‐1GX21-­‐0XE0



305 70 19 18 16 14 14 13 4 3



第26页

西门子PLC
 CP模块全球统计报告(5)



• 固件版本排行

– Version:
 3 .0.23 – Version:
 2 .3.2 – Version:
 2 .0.16 – Version:
 2 .6.0 – Version:
 2 .1.14 – Version:
 2 .2.20 – Version:
 1 .1.5 – Version:
 2 .5.0 – Version:
 1 .2.3 – Version:
 1 .0.26



104 79 60 56 31 22 15 14 9 8



第27页

西门子PLC全球分布图形化统计



第28页

西门子PLC
 蜜罐统计报告(1)

• Conpot

– 不推荐默认配置 – 特征

• S7(TCP/102)

– Serial
 number
 of
 module:
 88111222

• 全球数据

– ZoomEye à 48 – Shodan à 61 – Plcscan.org
 à 30



第29页

西门子PLC
 蜜罐统计报告(2)



第30页

西门子S7协议 蜜罐应用案例(1)

• 通过监听TCP/102端口并仿真S7协议收集扫 描信息

– 记录连入端口的IP、时间 – 回复伪装的模块信息 – 输出协议操作的详细日志



第31页

西门子S7协议 蜜罐应用案例(2)

2015-­‐07-­‐09
 09:27:20
 [71.6.167.142]
 C lient
 added 2015-­‐07-­‐09
 09:27:20
 [71.6.167.142]
 T he
 client
 requires
  a
 P DU
 size
 of
 480
 bytes 2015-­‐07-­‐09
 09:27:20
 [71.6.167.142]
 C lient
 added 2015-­‐07-­‐09
 09:27:21
 [71.6.167.142]
 T he
 client
 requires
  a
 P DU
 size
 of
 480
 bytes 2015-­‐07-­‐09
 09:27:21
 [71.6.167.142]
 R ead
 S ZL
 request,
 ID:0x0011
 INDEX:0x0001
 -­‐-­‐>
 O K 2015-­‐07-­‐09
 09:27:21
 [71.6.167.142]
 R ead
 S ZL
 request,
 ID:0x001c
 INDEX:0x0001
 -­‐-­‐>
 O K 2015-­‐07-­‐09
 09:27:21
 [71.6.167.142]
 C lient
 disconnected
  by
 peer 2015-­‐07-­‐09
 09:27:25
 [71.6.167.142]
 C lient
 disconnected
  by
 peer C:\Users\Administrator>nslookup
  71.6.167.142 服务器:
 
 google-­‐public-­‐dns-­‐a.google.com Address:
 
 8.8.8.8

名称:
 
 
 
 census9.shodan.io Address:
 
 71.6.167.142



第32页

西门子S7协议 蜜罐应用案例(3)

2015-­‐05-­‐06
 19:53:49
 [5.61.38.11]
 C lient
 added 2015-­‐05-­‐06
 19:53:55
 [5.61.38.11]
 C lient
 added 2015-­‐05-­‐06
 19:53:58
 [5.61.38.11]
 T he
 c lient
  requires
  a
 PDU
 size
 of
 480
 b ytes 2015-­‐05-­‐06
 19:53:58
 [5.61.38.11]
 C lient
 disconnected
 by
 peer 2015-­‐05-­‐06
 19:53:59
 [5.61.38.11]
 R ead
 S ZL
 request,
 ID:0x0011
 I NDEX:0x0000
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:53:59
 [5.61.38.11]
 R ead
 S ZL
 request,
 ID:0x001c
 INDEX:0x0000
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:54:00
 [5.61.38.11]
 R ead
 S ZL
 request,
 ID:0x0132
 I NDEX:0x0004
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:54:02
 [5.61.38.11]
 B lock
 o f
 type
 OB
 list
 requested
 (start
 sequence)
 -­‐-­‐>
 NOT
 AVAILABLE 2015-­‐05-­‐06
 19:54:03
 [5.61.38.11]
 B lock
 o f
 type
 FB
 list
 requested
 (start
 sequence)
 -­‐-­‐>
 NOT
 AVAILABLE 2015-­‐05-­‐06
 19:54:03
 [5.61.38.11]
 B lock
 o f
 type
 FC
 list
 requested
 (start
 sequence)
 -­‐-­‐>
 NOT
 AVAILABLE 2015-­‐05-­‐06
 19:54:03
 [5.61.38.11]
 B lock
 o f
 type
 DB
 list
 requested
 (start
 sequence)
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:54:04
 [5.61.38.11]
 B lock
 i nfo
 requested
 DB
 1
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:54:04
 [5.61.38.11]
 B lock
 i nfo
 requested
 DB
 2
 -­‐-­‐>
 OK 2015-­‐05-­‐06
 19:54:05
 [5.61.38.11]
 B lock
 i nfo
 requested
 DB
 3
 -­‐-­‐>
 OK



第33页

针对数据的验证(1)



第34页

针对数据的验证(2)



第35页

针对数据的验证(3)



第36页

针对数据的验证(4)



第37页

针对数据的验证(5)



第38页

针对数据的验证(6)



第39页

S7-­‐300
 PLC的等级保护功能 S7-­‐300
 PLC的等级保护功能缺陷 S7协议对口令密码传输的缺陷 S7-­‐300
 PLC内部程序字节码的转换 利用TCP/UDP连接功能实现端口扫描 利用通信功能块实现特定Socket通信

EXPLOITS
 S7
 PLC



第40页

S7-­‐300的等级保护(1)

• 口令保护

– 来自Step7帮助文件

• “保护CPU中的用户程序,防止未授权的修改(写保 护) ”

• “保护用户程序的编程技术内容(读保护) ” • “防止将会干涉进程的在线功能”



第41页

S7-­‐300的等级保护(2)

• 口令保护帮助



第42页

S7-­‐300的等级保护缺陷

• 帮助文件对口令保护注意事项的定义

– “无法限制过程控制、监视和通信功能。例如, 无法使用口令保护来防止对"设置时间/日期"功 能的访问。 ”

• 其他“例如”

– 启用LV2/LV3也可以操作CPU工作状态



第43页

S7协议对口令密码传输的弱加密(1)



第44页

S7协议对口令密码传输的弱加密(2)

• Hydra已集成基于S7协议的口令破解模块



第45页

S7-­‐300
 MC7字节码的传输



第46页

MC7
 字节码转换(1)

• 研究目的与意义

– 脱离官方编译器S7kafapx.exe实现对PLC程序的 转换与修改

– S7协议大量字段已被解码但是程序下载功能未 被解码

– Stuxnet核心功能

• 故事



第47页

MC7
 字节码转换(2)

• S7-­‐300
 PLC程序块解析

– 组织块(OB)(主程序块负责所有FC程序块的调用) – 数据块(DB)(用于存放用户和系统定义的变量数据) – 程序块(FC)(由用户编写的程序块) – 功能块(FB)(由用户编写的专用数据块) – 系统程序块(SFC)(调用系统某些功能时自动创建) – 系统功能块(SFB)(调用系统某些数据功能时自动创

建) – 系统数据块(SDB)(由编程软件自动生成主要存放

PLC的硬件组态等信息,用户无法直接打开和更改)



第48页

MC7
 字节码转换(3)

• 70
 70
 //MC7开始头部标志 • 01
 01
  • 02
 //块创建的语言 hex:0x02
 LAD
 (KOP) • 08
 //块类型 hex:0x08
 OB • 00
 01
 //块编号 hex:0x00,0x01
  • 00
 00
 00
 96
 //块总长度 • 00
 00
 00
 00
 //是否设置密码 • 03
 22
 C8
 2E
 2C
 20
 //最后修改时间 • 03
 9D
 CB
 0C
 11
 4C
 //上次修改时间 • 00
 1C
 //内部块数据表长度 • 00
 30
  • 00
 14
 //本地数据长度 • 00
 02
 //MC7执行代码长度



第49页

STL: A
 
 
 
 
 M
 
 
 
 
 
 8.0 AN
 
 
 
 T
 
 
 
 
 
 6 L
 
 
 
 
 S5T#3S SD
 
 
 
 T
 
 
 
 
 
 0 NOP
 
 
 0 NOP
 
 
 0 NOP
 
 
 0 NOP
 
 
 0 STL: A
 
 
 
 
 T
 
 
 
 
 
 0 =
 
 
 
 
 L
 
 
 
 
 20.0 A
 
 
 
 
 L
 
 
 
 
 20.0 BLD
 
 
 102 =
 
 
 
 
 Q
 
 
 
 124.0 A
 
 
 
 
 L
 
 
 
 
 20.0 L
 
 
 
 
 S5T#3S SD
 
 
 
 T
 
 
 
 
 
 1 NOP
 
 
 0 NOP
 
 
 0 NOP
 
 
 0 NOP
 
 
 0



MC7
 注入实例(1)



第50页

MC7
 注入实例(2)



第51页

MC7
 注入实例(3)



第52页

MC7
 注入实例(4)

• 在无等级保护的情况下修改定时器的时间 为1秒



第53页

S7
 300
 PLC支持多种连接方式

• 多种连接方式

– S7连接 – 冗余的S7连接 – 点对点连接 – FMS连接 – FDL连接 – ISO传输连接 – ISO
 on
 TCP连接 – TCP连接 – UDP连接 – 电子邮件连接



第54页

S7
 300
 PLC支持多种连接对象

• 多种连接连接对象

– 相同型号PLC
 CPU与PLC
 CPU之间通信 – 不同型号PLC
 CPU与PLC
 CPU之间通信 – PLC与上位机之间通信 – PLC与其他以太网设备通信



第55页

S7
 300
 CP的FC5/6功能

• 通信功能块

– FC5à “AG_SEND“ – FC6à “AG_RECV“

• 异步通信方式 • 类似传统Socket通信

– SEND功能 – RECV功能



第56页

CP的自定义Socket通信

• 选择连接方式

– S7 – TCP/UDP – 激活连接的建立

• 调用FC5/FC6

– FC

• 使用DB构建收发缓冲区

– 背景数据块



第57页

自定义Socket通信实现(1)



第58页

自定义Socket通信实现(2)



• FC5
 STL:
  CALL
 
 "AG_SEND"

ACT
 
 
 :=L20.0 ID
 
 
 
 :=1 LADDR
 :=W#16#100 SEND
 
 :=P#DB99.DBX0.0
  BYTE
 38 LEN
 
 
 :=38 DONE
 
 :=M99.1 ERROR
 :=M99.2 STATUS:=MW100



• FC6
 STL: CALL
 
 "AG_RECV"

ID
 
 
 
 :=1 LADDR
 :=W#16#100

RECV
 
 :=P#DB199.DBX0.0
  BYTE
 1024

NDR
 
 
 :=M99.3 ERROR
 :=M99.4 STATUS:=MW102 LEN
 
 
 :=DB99.DBW38



第59页

自定义Socket通信实现(3)



第60页

自定义Socket通信实现(4)



第61页

自定义Socket通信实现(5)



第62页

自定义Socket通信实现(6)

• Black
 Hat
 USA
 2015

– INTERNET-­‐FACING
 PLCS
 -­‐ A
 NEW
 BACK
 ORIFICE

• FB65
 "TCON" • FB63
 "TSEND“ • FB64
 "TRCV“ • 通过S7-­‐300
 PLC的内部通信块实现Socks5代理功能 • 更高级、更灵活



第63页

S7
 PLC特性 如何构造测试工具

RELEASED
 EXPLOITS
 TOOLS



第64页

S7
 PLC特性

• 非标签方式寻址 • 功能块按照数字编号排序

– FC
 1
  – SDB
 1001

• 变量数据是按地址寻址

– M0.0àbit
 0000 – M0.1àbit
 0001 – DB1.DBX1~
 

• 方便遍历测试而不需要进行枚举

– For
 i in
 range(000000,001234)



第65页

通用性增强

• 可设置连接模块与槽号

– Rack – Slot

• S7连接的初始化方式

– PG – OP – S7



第66页

工具实现

• S7
 Fuzz
 Tools

– Get
 Module
 info – Set
 CPU
 Run/Stop – Fuzz
 Set
 Value – Fuzz
 DB
 Data – Fuzz
 Block



第67页

S7
 Fuzz
 Tools
 测试用例与效果(1)

• 测试设备

– CPU:
 6ES7
 313-­‐5BG04-­‐0AB0 – CP:
 6GK7
 343-­‐1CX10-­‐0XE0

• 启用等级保护 • 用例:

– Rack:0
 Slot:2

• 结果



第68页

S7
 Fuzz
 Tools
 测试用例与效果(2)

• 测试设备

– CPU:
 6ES7
 313-­‐5BG04-­‐0AB0 – CP:
 6GK7
 343-­‐1CX10-­‐0XE0

• 不启用等级保护 • 用例:

– Rack:0
 Slot:2

• 结果



第69页

MC7Code
 Inject测试用例与效果(1)

• 测试设备

– CPU:
 6ES7
 313-­‐5BG04-­‐0AB0 – CP:
 6GK7
 343-­‐1CX10-­‐0XE0

• 不启用等级保护 • 用例: • 结果



第70页

总结



第71页

• site:

– plcscan.org



About



支持文件格式:*.ppt, *.pptx, *.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。