有许多安全工具(例如防火墙,网络入侵设备和路由器)可以提醒网络管理员任何正在发生的渗透或攻击。但是这些设备在大多数情况下只能检测到来自外部环境的那些网络威胁。
还需要某种检测系统,该系统可以警告网络管理员各种网络段中发生的任何未知或可疑活动。
这是Internet控制消息协议(也称为“ ICMP”)发挥作用的地方。
Internet协议套件的回顾
在回顾ICMP的所有技术方面之前,必须注意,该协议在所谓的“ Internet协议套件”中运行并支持基于网络的活动。该模型包括以下四个层:
- 应用程序层:在这一层中,各种应用程序创建信息和数据,这些信息和数据可以与驻留在同一主机甚至完全不同的主机上的其他应用程序进行通信。从理论上讲,正是在此特定层中放置了各种网络拓扑,例如对等和客户端服务器(如前所述)。此层也使用和支持更高级别的网络协议,包括以下内容:
- 简单邮件传输协议(SMTP)
- 文件传输协议(FTP)
- 安全外壳(SSH)
- 超文本传输协议(HTTP)
- 传输层:在该层中,实际的网络通信发生在同一网段(例如,在LAN上找到的主机)甚至是完全不同的主机(例如在WAN上找到)的不同主机之间进行实际的网络通信。 。该层中使用最广泛的通信协议是传输控制协议或TCP
- Internet层:此特定层提供了实际的网络接口,该接口定义并建立了我们今天所知道的实际Internet。这里使用的主要网络协议是Internet协议或IP,它定义了实际的IP地址
- 链路层:该特定层由互连彼此附近的所有LAN所需的所有协议组成
ICMP的定义
ICMP是一种错误报告协议,用于在网络问题阻止数据包传递时向源IP地址生成错误消息。ICMP创建消息并将消息发送到源IP地址,该消息指示无法访问Internet,服务或主机的网关进行数据包传递。
简而言之,设想一下这种情况:假设主域控制器(PDC)正在响应客户端计算机已传输的网络请求。响应这些请求,PDC尝试使共享资源(例如文件和应用程序)可用。
显然,这些共享资源将通过数据包传输到客户端计算机。但是,如果共享资源无法到达其最终目的地,则会向PDC发送一条错误消息,通知它无法完成数据包的传递并将其返回给它。
该错误报告功能由ICMP专门提供。因此,记住ICMP本身不发送数据包非常重要。它仅发送有关为什么无法将其传递到最终目的地的相关错误消息。因此,在将共享资源传递到客户端计算机时不使用ICMP。换句话说,传输信息和数据的不是传输协议。相反,网络管理员大量使用ICMP通过使用Ping和Traceroute等诊断工具来查明网络基础结构中的任何Internet连接并对其进行故障排除。
数据包无法到达其最终目的地的原因有很多。例如,路由器或集线器在将它们转发到下一个点时可能存在问题。网络中可能会出现“打””现象,干扰了数据包的正常流动。网络基础结构中的某个地方可能存在断开连接,甚至正在进行网络攻击。
在两个Internet协议中都使用ICMP,它们是:
- Internet协议版本4(也称为IPv4)
- Internet协议版本6(也称为IPv6)
ICMP技术细节
从历史的角度来看,存在IMCP的不同版本。它是由乔恩·波斯特尔(Jon Postel)创建和建立的,乔恩·波斯特尔(Jon Postel)在当今互联网的实现中起着至关重要的作用。第一个ICMP标准制定于1981年4月,最初发布在RFC 777中。
ICMP已经经历了多次迭代,今天使用的ICMP已经出现在RFC 792中,RFC792链接。ICMP的此版本也已由Internet工程任务组于1981年9月发布。
因为ICMP从技术上讲位于Internet层,所以它实际上是由IP数据包承载的,而不是由信息包将信息和数据从源传输到目的地的数据包。ICMP消息是通过所谓的数据报发送的。
图1. IPv4 ICMP报头
图2.IPv6 ICMP6 报头对比
数据报包含一个IP报头,该报头完全覆盖或封装了驻留在ICMP中的错误消息。重要的是要注意,ICMP中包含的错误消息还包含无法到达其最终目的地的数据包中的IP报头。由于此功能,PDC将知道无法传递的数据包。
在IPv4或IPv6中使用ICMP时,ICMP在这两个协议的IP数据包头之后显示。ICMP专门标识为协议编号1,并按以下顺序细分:
- IPv4 / IPv6数据包头
- 三字段ICMP头,由以下部分组成:
- 标识特定错误消息的代码
- “次要代码”,其中包含有关错误消息的更多信息
- 网络管理员可以使用校验和来检查ICMP的完整性。校验和只是一个字母数字字符序列。网络管理员使用此功能来确保没有对ICMP进行有意或无意的更改
- 传递失败的原始数据包头;通常,这大约相当于8字节的信息/数据有效负载
以下列表简单列举了ICMP生成的代码及其相应的消息和其他信息:
ICMP协议详细信息传送门 -》 ICMP 控制消息汇总
错误代码 | 错误信息 |
---|---|
0 | Ping Echo reply |
3 | 最终目的地无法到达 |
4 | 源淬灭:路由器超负荷处理传入的数据包 |
5 | 重定向:必须使用其他路由器 |
8 | Ping echo request |
9 | 路由宣告 |
10 | 路由请求 |
11 | 超时,由Traceroute实用程序使用 |
重要的是,此时必须注意的是,启动ICMP的事件之一称为“生存时间”或TTL。此度量标准表示可以发送数据包的路由器的最大数量,每次由特定路由器处理该数据包时,其数值将减少1。如果由于某种原因TTL值降至零,则数据包将从网络流中删除,并报告回PDC。
仅仅因为数据包由于TTL而从网络流中被丢弃,并不意味着该数据包本身以任何方式变形,或者所使用的路由器有任何问题。 。创建TTL是为了减少网络流量的积压,并确保网络流量保持一致和高效。
下一部分将更详细地检查由ICMP生成的错误消息。
ICMP报告的错误消息
从上面的矩阵可以看出,IMCP生成了四个主要错误消息。这些是:
- 源猝发错误消息:这是由源计算机生成的一条消息,用于减少或减少发送到目标计算机的网络流量。换句话说,PDC正在检测数据包传输速率太高并且需要放慢速度,以确保目标计算机接收到所有应该获取的数据包。
- 参数问题消息:校验和功能在上一节中进行了描述。提供此信息是为了向网络管理员提供一定程度的保证,即ICMP保持完整
- 超出时间错误消息:这与基于网络生存时间的事件相同
- 目标无法到达错误消息:当数据包由于另一个原因无法到达其最终目标时,将生成此消息。例如,可能有硬件故障,端口故障,网络断开等等。
- 重定向错误消息:这是当源计算机(例如PDC)请求沿着不同于最初计划的路径发送数据包流时。通常这样做是为了优化网络流量,尤其是当数据包可以通过不同的方式在较短的时间内到达目的地时。这将意味着更新所涉及的关联路由器中的路由表
ICMP的常见应用
ICMP用于两种常见的应用程序或实用程序:
- traceroute (或者windows的tracert):这是网络管理员使用的工具,用于绘制数据包可以采用的潜在路径或路由。在这种情况下,空数据包用于完成此任务。例如,为初始数据包分配的TTL值为0。当第一个路由器收到此数据包时,它将被丢弃,然后将相应的ICMP消息发送回源计算机。这表示将在制定数据包采用的路径时使用的第一台路由器。发出并返回初始数据包后,然后以TTL值1发送下一个数据包。下一个路由器收到此特定数据包后,会将值减小-1,然后将其返回。另一个ICMP消息,从而揭示了第二个路由器的身份。整个过程通过不断地将值1加到所发送的每个数据包,然后将其减小-1来保持重复。这样就可以计算出将要用于数据包传输路径的路由器的映射。使用traceroute的主要缺点在于,它只能用于映射数据包要采用的当前路径和将来路径,而不能用于查看数据包已使用的过去路径。网络管理员也可以使用以下命令:
- -j:这使您可以选择在创建要获取数据包的网络流图时要使用的路由器。
- Ping:在这种情况下,使用两种类型的ICMP消息:回显请求和回显应答。首先,发出回显请求,然后回传回显应答。该应用程序跟踪这两个命令之间的时间,以便网络管理员将知道将获得特定数据包到达其最终目的地并返回到始发点的确切往返时间。有趣的是,在此Ping可以创建与错误无关的ICMP消息。您可以调用两个命令来确定数据包可以花费的最短时间:
- -j:该命令建议一条特定的路线
- -k:该命令指定一条路由
ICMP的安全漏洞
尽管ICMP具有很多优点,但它也容易出现许多关键的安全漏洞:
- Ping泛洪:这种类型的攻击与分布式拒绝服务(DDoS)攻击非常相似,但不是使用格式错误的数据包来泛滥服务器以减慢其进程速度,而是使用ICMP回声泛滥。要求
- Ping of Death:当网络攻击者发出的Ping请求太大(以字节为单位)时,就会发生这种情况。在这种情况下,用于发送Ping请求的数据报将变得充满了没有相关含义的“填充”信息/数据。因此,它将分解为最大传输单元或MTU。一旦路由器拾取了这些分解后的数据报,它将尝试再次将它们重新组合回其原始格式,然后再发送到最终目的地。但是,如果重组后的数据报大于路由器的内存资源可以处理的数据报,它将字面上阻塞并且无法正常工作。结果,整个网络流量可能会变慢或停止
- Twinge攻击: 这类似于Ping Flood攻击,但不是ICMP回显请求仅来自一台计算机,而是来自多台计算机。它们在数据包的报头中还具有伪造的源IP地址