参考:基于Mininet实现BGP路径挟持攻击实验

实验目的:

掌握如何mininet内模拟AS。
掌握BGP路径挟持的原理和分析过程。

实验原理:

互联网是由相互连接的自治系统AS组成的,通过一个通用的边界网关协议(BGP)进行交互彼此的路由信息。如果利用BGP进行特殊攻击,比如一个伪装的AS伪造了一个更短的路径到前缀P,其他的AS要路由到前缀P时就会选择这个更短的路径,受到感染的AS会把该攻击信息继续向其他的AS传播,使得更多的AS受到感染,逐渐形成了BGP劫持攻击。

实验任务:

通过创建下图所示的网络拓扑,包括四个AS(AS1,AS2,AS3,AS4)。每个AS都有它的路由守护进程(R1,R2,R3,R4),守护路由的对接情况如下:

1.R1和R2,R4对接

2.R2和R1,R3对接

3.R3和R2对接

1.为每个AS节点创建容器,每个容器都有一个路由守护进程,我们使用开源路由组件quagga,每个AS运行bgpd来承载BGP,通过zebra配置linus内核中的路由规则。

2.每个as的配置信息存放在实验代码包的conf文件夹中

3.因为mininet使用网络域名,每个容器的路由表都是相互独立的,因此改变AS1的路由表不会影响AS2的路由表。

4.AS是通过静态路由规则中分离的网络接口互相连接的。

注意第一点:quagga是用来创建路由守护程序的,bgpd是用来在AS中承载BGP的。

实验准备(手动配置环境):

步骤1.执行以下命令安装easy_install,如果已经安装请跳过此步骤。

apt-get install python-setuptools

步骤2.执行以下命令获取实验代码。

git clone https://bitbucket.org/jvimal/bgp.git

步骤3.切换到bgp目录下,修改run.py中的如下代码。

cd bgp
vim run.py

修改内容在第19行,修改前:



修改后(原文图):



wq保存退出。

步骤5.执行以下步骤配置quagga

1.编辑/etc/quagga目录下的daemons文件。

vim /etc/quagga/daemons

将zebra和bgpd对应的值设置为yes后保存退出

zebra=yes

bgpd=yes

2.执行以下命令创建zebra、bgp以及vtysh对应的配置文件。

cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
cp /usr/share/doc/quagga/examples/bgpd.conf.sample /etc/quagga/bgpd.conf

3.执行以下命令重新启动quagga。

/etc/init.d/quagga restart

步骤6.执行以下命令安装telnet,如果已经安装请跳过此步骤。

apt-get install telnetd

实验步骤:

请完成上述的预准备。

查看初始状态

启动quagga:

/etc/init.d/quagga start

切换到/home/bgp目录执行以下命令创建实验拓扑。

cd /home/bgp
screen python bgp.py

执行ctrl+a+d切换到系统操作界面。执行以下命令启动登录AS1的路由R1。

./connect.sh

请根据提示输入密码:en 登录。

执行命令sh ip bgp查看AS1的路由表信息:

sh ip bgp

从上图中可以看出,要到达“13.0.0.0/8”选择的AS路径是“2 3”(例如通过AS2和AS3)。

执行exit退出到系统操作界面。执行以下脚本访问mininet开启在AS3中的一个默认web服务器,并判定可以直接从AS的host1-1直接访问。

在代码目录下有一个“website.sh”,这个脚本执行后会在AS1上循环执行curl -s 13.0.1.1这个命令.

screen ./website.sh

开启伪装AS

执行ctrl+a+d(Mac执行:fn + control + a +d)切换到系统操作界面,执行以下命令开启伪装的AS。

这个AS连接到AS1并通知它一条路由到“13.0.0.0/8”的更短的路径(例如一个直接从AS1到AS4的路径),这样AS1就会的选择这个更短的路径。

./start_rogue.sh

查看website.sh的执行结果。

1.执行screen –r选择登录website的执行界面。

screen -r

当前有两个界面,其中6822为mininet的操作界面进程,7160为website.sh的界面进程,此处选择7160。

注意,这里的进程号会不一样,时间较近的为Mininet,剩下的苏website.sh的界面进程。请根据实际情况操作。

2.执行以下命令登录website的执行界面。

screen –r 7160

可以看出原来的“default web server”变成了“Attacker web server”。

实际的进程号可能会不一样,请根据实际情况操作。

执行ctrl+a+d切换到系统操作界面,执行下面命令启动登录AS1的路由R1。

./connect.sh

请根据提示输入密码:en 登录。

执行命令sh ip bgp查看AS1的路由表信息。

sh ip bgp



可以在AS1的路由表中看出AS4的选择路径和AS3的路径。因为通过AS4到达“13.0.0.0/8”是比较短的,所以R1选择了AS4作为它的下一跳。

终止干扰

执行以下脚本关闭R4的路由进程。

./stop_rogue.sh

登录website.sh的执行界面查看界面变化。

screen –r 7160

可以看出原来的“Attacker web server”又变成了“default web server”。

登录到mininet的操作界面退出拓扑:

screen –r 6822

在mininet操作命令行中输入exit退出拓扑结束实验。

实验结果:

在BGP消息通告中把BGP邻居作为完全可信的实体,并认为所有从邻居学习到的路由信息都是当前网络拓扑的真实状况。因此当一个攻击者将不属于自己的IP前缀宣告到其他的组织,接收到通告的组织也只是依据自身策略决定到达该IP前缀的下一跳AS,没有机制可以用来验证发布该前缀的组织是否真的拥有该IP前缀。如果选择了攻击者AS作为到达该IP前缀的下一跳地址,则所有到达该IP前缀的流量都会被劫持到攻击者AS,并且受到感染的AS会把该攻击信息继续向其他的AS传播,使得更多的AS受到感染,逐渐形成了BGP劫持攻击。

2016/11/23

Mininet实验 基于Mininet实现BGP路径挟持攻击实验的更多相关文章

  1. Mininet实验 基于Mininet测量路径的损耗率

    实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外,还可以利用控制器测量路径的损耗率.在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编 ...

  2. 20145319 return-to-libc攻击实验

    20145319 Return-to-libc攻击实验 一 实验内容 return-to-libc实验是一个基于缓冲区溢出攻击实验的基础上的一种攻击实验 缓冲区溢出攻击相关知识: 原理:通过一段包含s ...

  3. Mininet系列实验(四):基于Mininet测量路径的损耗率

    1 实验目的 熟悉Mininet自定义拓扑脚本的编写与损耗率的设定: 熟悉编写POX脚本,测量路径损耗速率 2 实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外 ...

  4. 实验 3:Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定;初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 h ...

  5. Mininet实验 OpenFlow1.3协议基于Mininet部署与验证

    参照:OpenFlow1.3协议基于Mininet部署与验证 安装过程,参考原文. 实验 使用ifconfig查看本机IP地址:192.168.1.101 进入OpenDayLight界面,cd到bi ...

  6. 基于Mininet测量路径的损耗率

    基于Mininet测量路径的损耗率 控制器采用POX,基于OVS仿真 Mininet脚本 创建Node mininet.node Node 创建链路连接 mininet.link TCLink 设置i ...

  7. 实验 2:Mininet 实验——拓扑的命令脚本生成

    一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...

  8. 在mininet上基于ovs,ovx,pox搭建三点虚拟网络

    本次试验基于mininet平台,在平台中利用ovs新建1个交换机,以pox为控制器,ovx作为中间层实现虚拟化. 基础请参照http://ovx.onlab.us/getting-started/tu ...

  9. 基于Mininet的网络拓扑搭建代码

    1 import logging 2 import os 3 import time 4 import thread 5 import multiprocessing 6 7 from mininet ...

随机推荐

  1. iftop安装

    安装方法1.编译安装 如果采用编译安装可以到iftop官网下载最新的源码包. 安装前需要已经安装好基本的编译所需的环境,比如make.gcc.autoconf等.安装iftop还需要安装libpcap ...

  2. Android 如何让EditText不自动获取焦点

    解决之道:在EditText的父级控件中找一个,设置成 android:focusable="true"     android:focusableInTouchMode=&quo ...

  3. Android之ScrollView

    1.ScrollView和HorizontalScrollView是为控件或者布局添加滚动条 2.上述两个控件只能有一个孩子,但是它并不是传统意义上的容器 3.上述两个控件可以互相嵌套 4.滚动条的位 ...

  4. RedHat6.2 下RRDTool安装方法

    在安装ganglia的时候,需要安装ttdtol, 否则是不运去安装的.查可很多,这个可以. 我的环境: [hadoop@host8 ~]$ lsb_release -aLSB Version: :c ...

  5. 用于主题检测的临时日志(ba86b8a0-7ed7-4b0b-bf1f-ce41aa2a5780 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(ea9f667f-3be0-45c8-ad82-3acf819d571c - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  6. js “+” 连接字符串&数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用

    一.机制 JavaScript中,加号不仅表示相加还表示字符串连接 当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如 "1" + 1 = "11&q ...

  7. fopen()及相关函数使用

    函数简介 函数功能:打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); ],_wfopen 所需库:<stdio.h&g ...

  8. 0x和H都表示十六进制有什么区别吗?

    0x是16进制的前缀,H是16进制的后缀 都是表示十六进制数,意义上没有什么区别,完全相等.至于什么时候用0x,什么时候用H,这取决于你在什么环境下使用,如果在C/C++,必须用0x来表示. 在C语言 ...

  9. C#学习笔记(五)——函数

    一.定义和使用函数. 直接通过例子进行说明吧 class Program { static void Write() { Console.WriteLine("Test output fro ...

  10. 【HTML5】Canvas画布

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...