基于Scapy实现西门子S7系列中间人攻击

  • A+
所属分类:逆向工程
随着工业不断的发展,工业企业间合作不断加强,伴随着工业4.0时代的来临,传统工控系统的物理隔离,正在被不断打破,工控安全也越来得到了重视,无论从法律法规的要求还是企业需求,都在逐步扩大中。但是,搞工控安全研究的人员,和成熟的工控安全产品却寥寥无几,难以满足现状的需求。工控安全是个跨学科的技术,需要结合多方面的专业知识,需要较高的技术上要求。特别是工业控制系统中,协议也存在众多的标准,当然也存在大量的私有协议,比如:西门子的是S7Comm协议,本文将基于scapy库构S7Comm协议数据包来实现对上位机进行中间人攻击。

一、Scapy介绍

Scapy是一个Python第三方库,使scapy我们能够发送,嗅探、分析并伪造数据包。从而可以实现扫描,跟踪路由,探测,单元测试,攻击或网络发现。它可以取代hping、arpspoof、arp-sk,arping等工具来实现攻击,Scapy是一个可构建网络数据包的强大第三方库。

具有以下几个特点:

1.可以通过交互模式,对数据包进行解析研究。

2.可以用来网络数据包嗅探和并根据我们的需求构造packet。

3. scapy已经内置了大量的网络协议构造方法,如:DNS,ARP,IP,TCP,UDP,它可帮助我们非常方便的构造数据包,本次我们将使用scapy中的IP()、Ether()、ARP(),来实现网络欺骗、实现中间人攻击,并使用它来封装上层的工控协议,伪造数据包对上位机发起攻击。

  • IP类

基于Scapy实现西门子S7系列中间人攻击
  • Ether类

基于Scapy实现西门子S7系列中间人攻击
  • ARP类

基于Scapy实现西门子S7系列中间人攻击
  • 代码示例

基于Scapy实现西门子S7系列中间人攻击

接下来我们将使用scapy来封装S7comm数据包。

二、S7comm介绍

S7Comm(S7 Communication)是西门子的私有协议,是西门子工业控制通讯协议簇里的一种,S7Comm协议是基于TCP/IP实现依赖于面向工控系统的传输服务。S7Comm协议被封装在TPKT、ISO-COTP协议中,从而协议数据可够通过TCP传送。它用于PLC编程,早期的西门子私有协议S7comm通信,对安全考虑不足。不具备的加密功能,没有任何防止重放攻击机制,可轻易被利用。具体协议结构如下图所示:

基于Scapy实现西门子S7系列中间人攻击

三、中间人攻击实现

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)这种攻击方法是通过各种技术手段将控制目标系统的节点,并将该节点逻辑上串在两台通信计算机之间,这个节点就称为“中间人”。

中间人攻击中我们要分别对上位机和PLC进行欺骗。将上位机和PL的流量同时引入控制节点中,通过控制中间节点来实现传输数据的获取、篡改等。攻击示意图如下所示:

基于Scapy实现西门子S7系列中间人攻击

攻击步骤:

1、第一步是利用ARP欺骗篡改PLC、上位机ARP缓存,实现劫持流量,这一步是实现中间人攻击的关键,可根据ARP刷新时间,调整ARP欺骗频率,维持劫持状态。

2、第二步:通过截取的流量的分析,获取工控协议通信内容例如通信端口,传输数值等。

3、第三步:根据获取的协议,伪造PLC设备与上位机数据传输,篡改数值、状态来实现攻击目的。

  • 示例代码:

基于Scapy实现西门子S7系列中间人攻击

基于Scapy实现西门子S7系列中间人攻击



原文来源:贝安全

基于Scapy实现西门子S7系列中间人攻击

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: