ICMP 隧道技术解析

ICMP协议

ICMP(InternetControl MessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

主要概念有:

1.确认ip数据包是否成功到达目的地

2.通知源主机发送ip数据包丢失的原因

3.ICMP是基于IP协议工作的

4.ICMP只能作用于IPV4,IPV6下,使用ICMPv6

ICMP帧格式如下所示

其中,类型和代码字段决定了ICMP报文的类型,如下图所示

ICMP隧道技术原理

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。

通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。

进行隐蔽传输的时候,肉鸡(防火墙内部)运行并接受外部攻击端的ICMP_ECHO数据包,攻击端把需要执行的命令隐藏在ICMP_ECHO数据包中,肉鸡接收到该数据包,解出其中隐藏的命令,并在防火墙内部主机上执行,再把执行结果隐藏在ICMP_ECHOREPLY数据包中,发送给外部攻击端。

简单的说就是,利用ICMP的请求和应答数据包,伪造Ping命令的数据包形式,实现绕过防火墙和入侵检测系统的阻拦。

ICMP隧道优缺点

优点:

1.防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高。

缺点:

1.ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低

2.利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限

ICMP隧道攻击实现以及流行工具展示

icmpsh

这一工具简单并且便携。受控端(客户端)使用C语言实现。只能运行在目标Windows机器上,而主控端(服务端)由于已经有C和Perl实现的版本,而且之后又移植到了Python上,因此可以运行在任何平台的攻击者机器中。

icmpsh建立隧道及数据包分析

可以看到已经实现成功。

抓包,可以看到我们输入的命令

icmptunnel

icmptunnel是通过创建虚拟网卡,将所有流量都经过这个虚拟网卡。即ICMP隧道

icmptunnel建立隧道及数据包分析

客户端主机上的所有用户流量都路由到虚拟网卡tun0。icmptunnel在此接口上侦听IP数据包。这些数据包封装在ICMP回显数据包中。

建立ICMP隧道

此时所有流量都通过虚拟网卡,即icmp隧道

ptunnel

ptunnel支持大多数具有libpcap的操作系统,从版本0.7开始,ptunnel也可以在Windows上编译。

前提是需要装WinPcap

petunnel 建立隧道及数据包分析

使用命令建立ICMP隧道

检测icmp隧道通信特征

icmp会话中数据包的总数

一个正常的 ping每秒最多只会发送两个数据包,而使用ICMP隧道的浏览器在同一时间会产生大量ICMP 数据包。

隧道数据通常比较大

ICMP隧道数据包中DATA 往往大于64 比特

请求包和响应包内容不一致

而正常的icmp数据包里,请求和回应部分数据是一致的

部分隧道工具会显示tun的标志

看完文章,可以上合天网安实验室学习哦!

Wireshark数据抓包分析之互联网控制报文协议:

http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015072017274900001

别忘了投稿哦

大家有好的技术原创文章

欢迎投稿至邮箱:edu@heetian.com

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予200元-800元不等的稿费哦

有才能的你快来投稿吧!

了解投稿详情点击——重金悬赏 | 合天原创投稿涨稿费啦!

ICMP隧道通信原理与通信特征相关推荐

  1. ReactNative与iOS通信原理解析-通信篇

    文章首发个人博客: ReactNative与iOS通信原理解析-通信篇 导语:其实原本是想编写一篇  react-native (下文简称 rn) 在  iOS 中如何实现  jsbridge 的文章 ...

  2. recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信

    本文为翻译文章,原文链接见文末.(翻译为脉搏首发) 一般来说,攻击者在行动过程中经常需要面对诸多的挑战,例如: 克服网络障碍(网络策略.分段等).在"隐形模式"下完成各项操作,这样 ...

  3. 通信原理 | 电子通信的起源

    电子通信的起源: 一般认为第一个实用的电子通讯设备是摩尔斯(Morse)电报,传送文字,开发于183几年. 两个城市之间铺设一条线路,让每个字母用一组开关序列代表,序列中间选择短按和长按,短按称为点, ...

  4. python 通信原理_通信原理(第1章:确定性信号分析)

    信号: 1.本课中信号s(t)默认是实函数,代表电压随时间的变化: 2.一些简单信号:正弦.矩形.sinc.直流.冲激: 3.瞬时功率.功率和能量: 4.功率是s(t)^2的平均高度.能量是s(t)^ ...

  5. ice通信原理_通信原理_知到网课答案

    听音,根据你听到的内容选出正确的词填空.1. areyougoing? Tothe .2. istheweather? It'shotandsunny.3.does 听问句选答句.() 1. a. D ...

  6. HwBinder原理总结-Android10.0 HwBinder通信原理(十一)

    摘要:本节主要来进行Android10.0 HwBinder的原理总结 阅读本文大约需要花费14分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

  7. HwBinder入门篇-Android10.0 HwBinder通信原理(一)

    摘要:本节主要来讲解Android10.0 HwBinder的通信原理概要 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平 ...

  8. Android10.0 Binder通信原理(十一)-Binder总结

    摘要:本节主要来讲解Android10.0 Binder的通信原理总结 阅读本文大约需要花费17分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

  9. Android10.0 Binder通信原理(二)-Binder入门篇

    摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...

最新文章

  1. 如何卸载iPhone模拟器中的自己创建的程序
  2. 分布式并行计算MapReduce
  3. 多线程编程有什么用途_为什么建议你一定要学懂C++
  4. 教程:创建简单的 ETL 包
  5. 浅析 record 使用场景
  6. Istio1.5 Envoy 数据面 WASM 实践
  7. 我的软考之路(六)——数据结构与算法(4)之八大排序
  8. 仿真作业3:噪声通过DSB-SC解调器
  9. 王石先生深奥的脑筋急转弯
  10. 硬盘绝密维修资料(2)
  11. storm mysql trident_storm trident实战 trident state
  12. 利用神经网络的embedding层处理类别特征
  13. 中国将自主建造宇宙空间站
  14. arduino 读取当前时间_Arduino 101/Genuino 101 时间控制函数
  15. Windows Phone开发(2):竖立自信,初试锋茫
  16. 中兴霸道女总裁何雪梅投案自首 案发前净身出户
  17. 接口自动化获取excel中数据(一)
  18. python 之 __slots__
  19. 51单片机——在数码管上显示红外遥控器按钮的码值
  20. 清华大学计算机系1979,清华大学1979级毕业30周年纪念大会召开

热门文章

  1. java代码设置手机来电黑名单自动挂断
  2. 一种非线性动态自适应惯性权重PSO算法-附代码
  3. 简述SOA和微服务的概念以及两者之间的关系和异同
  4. 笔记--登录流程的分析
  5. IntelliJ IDEA 常用设置(配置)吐血整理。首次安装必需
  6. Pycharm如何重新加载
  7. 流体力学中动力粘度和运动粘度的定义和区别
  8. android之通过MediaRecorder进行手机录音
  9. 关于speedtree的spt文件和stf文件
  10. C语言strcmp函数的笔记