草庐IT

ICMP隐蔽隧道攻击分析与检测(一)

巴韭特 2023-03-31 原文

 • ICMP协议介绍


 

一、定义

  

  1. 网际控制报文协议ICMP(Internet Control Message Protocol),是一种面向无连接协议,用于传输出错报告控制信息;
  2. 在TCP/IP协议簇中是一个重要子协议,通常被IP层或者更高层协议(TCP/UDP)使用,属于网络层协议;
  3. 主要用于IP主机和路由器之间传递控制消息,包括网络通不通,主机是否可达,路由是否可用等网络状态。

举例:ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。

 

二、原因 

  1. 由于IP协议数据传输天然存在不可靠无连接等特点,为了解决数据传输出现的问题,引入了ICMP协议;
  2. 这些控制消息并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有直观重要的作用;
  3. 在数据传输的过程中,IP提供尽力而为的服务,为了把数据包发送到目的地址尽最大努力,它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制。因此在数据包传输过程中,产生各种错误在所难免,为了更有效的转发IP数据包,提供数据包交付成功寄回,ICMP应运而生。

 

思考1:ICMP协议介于传输层和网络层之间,通常被IP层或者更高层协议(TCP/UDP)使用,那为啥属于网络层而不是传输层?

  1. ICMP 报文被封装在IP数据报中,作为IP数据报的数据部分,通过互联网传递
  2. 传输层协议关注从端到端发送数据并确保可靠性,而ICMP目的是确保将数据路由到正确的位置,实际上并不路由数据

 

三、ICMP数据帧

  • Type (类型):标识ICMP报文的类型;占用1字节

  • Code(代码):标识对应ICMP报文的代码,它与类型字段一起共同标识了ICMP报文的详细类型;占用1字节

  • Checksum(校验和):对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错,其计算方法和IP报头中的校验和计算方法一致;占用2字节

  • Header Other(首部其他部分):根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。占用4字节,ICMP始终有8个字节的头部长度

  • Packet Content(数据部分):不同类型和子类型有不同的内容,占用4字节

 

目前定义类型详见下表,从类型值来看ICMP报文可以分为两大类:第一类是差错报文,第二类是查询报文

 

Type
Code
描述
报文类型
0-Echo响应 0 Echo响应报文 查询
3-目的不可达 0 目标网络不可达报文 差错
  1 目标主机不可达报文 差错
  2 目标协议不可达报文 差错
  3 目标端口不可达报文 差错
  4 要求分段并设置DF flag标志报文 差错
  5 源路由失败报文 差错
  6 未知的目标网络报文 差错
  7 未知的目标主机报文 差错
  8 源主机隔离报文 差错
  9 禁止访问的网络报文 差错
  10 禁止访问的主机报文 差错
  11 对特定的TOS网络不可达报文 差错
  12 对特定的TOS主机不可达报文 差错
  13 由于过滤 网络流量被禁止报文 差错
  14 主机越权报文 差错
  15 优先权终止生效报文 差错
5-重定向 0 重定向网络报文 差错
  1 重定向主机报文 差错
  2 基于TOS的网络重定向报文 差错
  3 基于TOS的主机重定向报文 差错
8-Echo请求 0 Echo请求报文 查询
9-路由器通告 0 路由通告报文 查询
10-路由器请求 0 路由器的发现/选择/请求报文 查询
11-ICMP超时 0 TTL超时报文 差错
  1 分片重组超时报文 差错
12-参数问题 0 IP报首部参数错误报文 差错
  1 丢失必要选项报文 差错
  2 不支持的长度报文 差错
13-时间戳请求 0 时间戳请求报文 查询
14-时间戳应答 0 时间戳应答报文 查询
15-信息请求 0 信息请求报文 查询
16-信息应答 0 信息应答报文 查询

 

四、ICMP请求/应答帧格式

 

Type(类型):表示ICMP报文类型,8表示Echo(ping)request

 

 0表示Echo(ping)reply

 

Code(代码):标识对应ICMP报文的代码,它与类型字段一起共同标识了ICMP报文的详细类型

 

Checksum(校验和):对ICMP报文数据部分在内的整个ICMP数据报的校验和

 

Identifier(标识符):用于表示ICMP进程,占用2字节(单进程内请求与应答报文Identifier字段保持一致 

 

Sequence Number(序列号):用于关联请求报文和应答报文(对应请求和应答报文的序列号相同),占用2字节

 

思考2:Identifier和Sequence number为何有BE、LE之分?

wireshark考虑到window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian),为了体现wireshark的易用性,开发者将其分别显示出来。

 

Packet Content(数据部分):标识ICMP的相关数据部分

 

有关ICMP隐蔽隧道攻击分析与检测(一)的更多相关文章

  1. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  2. ruby - 检测由 RSpec、Ruby 运行的代码 - 2

    我想知道我的代码是否在rspec下运行。这可能吗?原因是我正在加载一些错误记录器,这些记录器在测试期间会被故意错误(expect{x}.toraise_error)弄得乱七八糟。我查看了我的ENV变量,没有(明显的)测试环境变量的迹象。 最佳答案 在spec_helper.rb的开头添加:ENV['RACK_ENV']='test'现在您可以在代码中检查RACK_ENV是否经过测试。 关于ruby-检测由RSpec、Ruby运行的代码,我们在StackOverflow上找到一个类似的问题

  3. ruby - 使用 Ruby Daemons gem 检测停止 - 2

    我正在使用rubydaemongem。想知道如何向停止操作添加一些额外的步骤?希望我能检测到停止被调用,并向其添加一些额外的代码。任何人都知道我如何才能做到这一点? 最佳答案 查看守护程序gem代码,它似乎没有用于此目的的明显扩展点。但是,我想知道(在守护进程中)您是否可以捕获守护进程在发生“停止”时发送的KILL/TERM信号...?trap("TERM")do#executeyourextracodehereend或者你可以安装一个at_exit钩子(Hook):-at_exitdo#executeyourextracodehe

  4. ruby - Ruby 脚本如何检测到它正在 irb 中运行? - 2

    我有一个定义类的Ruby脚本。我希望脚本执行语句BoolParser.generate:file_base=>'bool_parser'仅当脚本作为可执行文件被调用时,而不是当它被irbrequire(或通过-r在命令行上传递)时。我可以用什么来包装上面的语句,以防止它在我的Ruby文件加载时执行? 最佳答案 条件$0==__FILE__...!/usr/bin/ruby1.8classBoolParserdefself.generate(args)p['BoolParser.generate',args]endendif$0==_

  5. Ruby 无法检测字符串中的换行符 - 2

    我有以下字符串,我想检测那里的换行符。但是Ruby的字符串方法include?检测不到它。我正在运行Ruby1.9.2p290。我哪里出错了?"/'ædres/\nYour".include?('\n')=>false 最佳答案 \n需要在双引号内,否则无法转义。>>"\n".include?'\n'=>false>>"\n".include?"\n"=>true 关于Ruby无法检测字符串中的换行符,我们在StackOverflow上找到一个类似的问题: h

  6. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  7. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  8. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  9. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  10. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

随机推荐