工控安全入门之Ethernet

亚洲城误乐城ca88网站,这一篇依然是说道层面的,协议层面会翻译三篇,下一篇是电力系统中用的相比较多的DNP3。这一篇中大部分引用的材料都足以访问到,唯有一篇reversemode.com上的writeup(http://reversemode.com/downloads/logix\_report\_basecamp.pdf)需要身份认证才能下载,如果有朋友能下载求分享。

Ethernet/IP

与Modbus相相比较,EtherNet/IP 是一个更现代化的标准协议。由工作组ControlNetInternational与ODVA在20世纪90年间合作规划。EtherNet/IP是遵照通用工业协议(Common Industrial Protocol,CIP)的。CIP是一种由ODVA援助的绽开工业协议,它被采取在比如DeviceNet和ControlNet以及EtherNet/IP等串行通信协议中。美利坚合众国的工控设备成立商Rockwell/Allen-布拉德利已经围绕EtherNet/IP举行了尺度,其他厂商如Omron也在其配备上支撑了EtherNet/IP。EtherNet/IP已经变得更为受欢迎,特别是在美利坚同盟国。就算EtherNet/IP比Modbus更现代化,但仍旧存在协议层面的平安题材。EtherNet/IP平常通过TCP/UDP端口44818运行。此外,EtherNet/IP还有另一个端口TCP/UDP端口2222。使用这一个端口的案由是EtherNet/IP实现了隐式和呈现二种信息传递形式。显式音信被号称客户端/服务器新闻,而隐式信息平日被称之为I/O信息。

亚洲城误乐城ca88网站 1

EtherNet/IP是为了在以太网中采用CIP协议而展开的包装。EtherNet/IP的CIP帧封装了命令、数据点和消息等新闻。CIP帧包括CIP设备配备文件层、应用层、表示层和会话层四层。数据包的另外部分是EtherNet/IP帧,CIP帧通过它们在以太网上传输。EtherNet/IP分组结构如图5‑12所示。

CIP规范对数码包结构有成百上千的确定,这象征每个使用EtherNet/IP的装备必须贯彻符合规范的通令。下边是EtherNet/IP首部中封装的CIP帧字段:

 

亚洲城误乐城ca88网站 2

  • Command

    两字节整数,对应一个CIP命令。CPI标准要求,设备必须能选择不能识其余通令字段,并处理这种相当。

  • #### Length

    两字节整数,代表数量包中数据部分的长度。对于从未多少部分的伸手报文,该字段为0。

  • #### Session Handle

    会话句柄(session
    handle)由指标设备转移,并回到给会话的发起者。该句柄将用于后续与对象设备的通信。

  • #### Status

    Status字段存储了目的设备执行命令重临的状态码。状态码“0”代表命令执行成功。所有的伸手报文中,状态码被置为“0”。另外的状态码还包括:

– 0x0001无效或不受帮忙的一声令下

– 0x0002目的设备资源缺少,无法处理命令

– 0x0003数据格式不科学或数量不正确

– 0x0065接收到不行的多少长度

  • #### Sender Context

    命令的发送者生成这六字节值,接收方将原封不动的回来该值。

  • #### Options

    该值必须一贯为0,假若不为零,数据包将被放弃。

  • #### Command-specific data

    该字段按照接收/发送的吩咐举办改动。

即使请求发送方是工程师站,大多数对话中施行的首先条命令是“List
Identity”命令。如下所示的数据包,命令字段是0x63,代表“List
Identity”命令,上下文是“0x00006a0ebe64”。这多少个命令与Modbus功效码43老大相像,可以查询设备信息,如供应商、产品、连串号、产品代码、设备档次和版本号等。使用在Github项目pyenip中找到的Python脚本ethernetip.py(https://github.com/paperwork/pyenip/blob/master/ethernetip.py),你可以查询Ethernrt/IP设备的信息。默认情况下,这个脚本不会解析一些响应,你需要取消脚本底部的testENIP()函数的注释后,它才会发送和接收“ListIdentity”命令。在执行脚本的。

 

亚洲城误乐城ca88网站 3

同时,你可以拔取Wireshark查看请求和响应的数据包。

俺们在这么些例子中尚无提供脚本代码,因为它大概有1000行代码。你能够通过访问下边这一个GitHub链接来获取脚本(https://github.com/paperwork/pyenip/blob/605ad6d026865e3378542d4428ec975e7c26d2e4/ethernetip.py)。

设施新闻外泄

  • 流行水平:10

  • 行使难度:8

  • 影响面:3

  • 威吓评分:7

Digital
Bond在类型Redpoint中实现了一个和pyenip很像的台本,可以用来从远程设备中获废除息。Redpoint脚本使用了上一节提到的“ListIdentity”命令字,并拔取NES脚本来分析呼吁。这么些本子有一个有趣的地点,它的“Conmmand
Specific
Data”部分含有了一个套接字地址(ip地址和端口号)。这是表露的中远距离设备的诚实ip地址和端口号,即便它坐落NAT设备之后。

亚洲城误乐城ca88网站 4

通过Shodan搜索(https://www.shodan.io/search?query=port%3A44818),我们发现大量的设备暴露的IP字段和实际扫描的IP地址不同。所以我们得出结论,大多数的Ethernet/IP设备部署在内部网络中,而不是直接暴露在互联网上。如下图5‑15所示的是使用nmap扫描CompactLogix控制系统的扫描结果,可以看到暴露的设备ip和扫描ip不匹配,说明目标系统位于路由器或防火墙之后。

上图展现了部分信息,包括设备的创设商“Rockwell”。设备的创制商在响应中是一个两字节的创建商ID,它映射了一组辅助Ethernet/IP的厂商名单。不过,这一个厂商名单不是光天化日的。我们在深远研商Wireshark捕获的多少包后,发现数目包被Wireshark解析后,创立商ID被替换成了创造商名称。这表达Wireshark拥有怎么着映射创设商ID和名称的音信。通过对Github上Wireshark源代码的一部分搜索,我们发现了如下代码片段,它报告我们该咋样剖析创制商ID。在条分缕析工控协议的时候,Wireshark平日是一个无敌而好用的资源。

亚洲城误乐城ca88网站 5

亚洲城误乐城ca88网站 6

使用像“List
Identity”那样的授命,你可以简单的重播数据包,几乎不用修改数据包。会话句柄将被安装为0,意味着没有对话生成,因为该命令只是简单的发送命令和吸纳系统响应。为了更加与设备举行通信,需要发送注册会话命令(0x65)。这多少个命令会设置会话句柄ID,那一个ID将用于后续会话的通信。如下图5‑16所示,注册会话的伸手使用专业ID“0x00000000”,目的设备重回了它生成的对话句柄“0x03A566BB”。

Ethernet/IP中间人抨击

  • 风行水平:5

  • 应用难度:8

  • 影响面:8

  • 威迫评分:7

Ethernet/IP具有和多数工控协议相似的题目。资讯和塑造集团Kenexis公布了针对性Ethernet/IP的中等人攻击示例演示。这多少个示例可以在它们的Github项目主页上找到(https://github.com/kenexis/PortableICS-MITM)。与Modbus不同,简单的数据包重放对Ethernet/IP的某些指令无效。这使得攻击变得稍微复杂了一些。然而,对于大多数攻击者而言,只要对Ethernet/IP的协议稍有了解,这点困难将是微不足道的。一旦会话句柄通过协商被确定,只要通过手动改变序列号,就可以实现像之前Modbus-vcr工具那样的中间人攻击。

Ethernet/IP高危命令字

  • 风行水平:5

  • 动用难度:8

  • 影响面:8

  • 威慑评分:7

就像Modicon利用效益码90来终止CPU,一些Ethernet/IP设备也支撑类似的命令字。Digital
Bind的Basecamp项目中,宣布了一个Metasploit模块(https://www.rapid7.com/db/modules/auxiliary/admin/scada/multi\_cip\_command),可以被用来终止一个Allen-Bradley
ControlLogix控制体系中的大量PLC,以及此外的有的坏坏的事情,比如使以太网卡崩溃。

Digital Bond的Ruben Santamarta在撰写Basecamp项目的Writeup“Attacking
ControlLogix”(http://reversemode.com/downloads/logix\_report\_basecamp.pdf)时写道“我们发送的每个数据包必须包含会话句柄。这就是全部,然后我们Hack了控制器。在协议层面没有更多的安全机制了。”\[译者注:reversemode.com上的文档我下载不下来,有能够下载的朋友求分享\]。Ruben指出,只要了解Session
Handle即可轻松攻击Ethernet/IP。是其一攻击奏效的另一个生死攸关是Allen-布拉德利(Bradley)实现的一个命令字。Allen-布拉德利(Bradley)在NOP(0x00)命令中贯彻了截止CPU的效果。

那一个命令在CPI或Ethernet/IP的科班中绝非记录,是Allen-布拉德利(Bradley)/Rockwell控制器的私有实现。通过对大气设备的测试,我们发现,在局部旧的固件中,不仅ControlLogix
CPU被截至,而且装备崩溃,需要再度开动硬盘。对于当下的型号,PLC必须拔下并再一次插入才能再次运行。极个别情况下,PLC需要重新编程。

俺们依旧百折不挠一定的提议,假设您想测试你的Ethernet/ip设备,请只对非生产设备举办这么些测试,并保管您早已被赋予对装备执行exploit的认同,因为在装备上实施这个测试的结局是不足测的。