黄家玮,李淑平,计 玮,王疆盛,王伟平
(中南大学 信息科学与工程学院,湖南 长沙 410083)
网络空间安全学科的课程主要讲授网络空间中的安全威胁和防护问题,其学科人才培养除了需要理论支持外,还需要大量的最新仿真实践环境。相对于传统的信息安全课程,网络空间安全课程更关注于在网络环境下的安全攻防技术。由于目前信息安全实验室大小和硬件条件等的限制,学生实验操作的时间非常有限,只能按照既定的实验流程机械式地在局域网内操作,难以自主灵活地开展大规模的网络空间安全实验学习。
软件定义网络(SDN)[1-3]作为一种新型网络创新架构,其核心特点是控制与转发的分离、设备资源的虚拟化以及具有开放的可编程接口,从而能够灵活控制网络流量,为网络创新提供良好的平台[4]。近年来,软件定义网络由于其灵活可编程的特点,逐渐被引入计算机相关专业的课程教学中[5-6]。其中,轻量级网络仿真工具Mininet[7]是目前主要的软件定义网络实验搭建平台。
本文基于软件定义网络SDN架构,选择轻量级实验平台Mininet,设计了BGP路径挟持和ARP攻防的实验方案。通过实验,学生可以熟悉软件定义网络架构,掌握BGP路径挟持和ARP攻防的原理,学习网络空间安全的核心知识。
Mininet是一个可以模拟SDN网络的仿真系统,由虚拟的终端节点(End-Host)、OpenFlow交换机和控制器组成[8]。Mininet使用Python语言进行开发设计,整体代码包括运行文件和Python库文件两大类。
在实现架构上,Mininet是由斯坦福大学的Nick McKeown教授领导的研究小组基于Linux Container内核虚拟化技术开发的进程虚拟化平台,可以模拟真实网络,同时也可将虚拟化平台下的代码迁移到真实环境中。Mininet基于namespace机制,其总体架构按照数据路径的运行权限可以分为kernel datapath和userspace datapath。其中kernel datapath主要作用是将分组转发的逻辑进行编译并规整到Linux内核中;而userspace datapath是将分组转发逻辑实现为应用程序,优点是更为灵活且更容易重新编译。Mininet的kernel datapath架构和userspace datapath架构分别如图1和图2所示。从图中可以看出,kernel datapath架构里控制器和交换机的网络接口都在root命名空间中,每个主机都处于独立的命名空间;而userspace datapath架构下网络的每个节点都拥有自己独立的命名空间,同时还多出了一个叫ofdatapath的进程。
图1 kernel datapath架构
功能上,Mininet能在有限资源的电脑上快速建立大规模仿真网络。它的所有代码几乎可以无缝迁移到真实的硬件环境,方便为网络添加新的功能并进行相关的研发测试。Mininet不但可以对现有的传统网络协议和算法等进行开发验证,还支持OpenFlow[9]和OpenvSwith[10]等软件定义网络协议。目前,Mininet已成为Openflow协议进行演示和测试的官方平台。
图2 userspace datapath架构
作为一个进程虚拟化网络仿真工具,Mininet主要特性包括以下5个方面:
1)支持OpenFlow、Open vSwitch等软件定义网络部件;
2)支持系统级的还原测试;
3)支持复杂拓扑、自定义拓扑,支持上千台主机的网络结构;
4)提供python API,方便多人协同开发;
5)高扩展性与很好的硬件移植性,在Mininet上运行的代码可以轻松移植到支持Openflow的硬件设备[11-12]。
总而言之,Mininet提供了一个十分便捷、优秀的软件定义网络研究与测试平台,而无须使用昂贵的专业硬件实验平台,避免了使用传统虚拟机搭建复杂网络环境的工作部署开销。
Mininet网络实验主要采用python脚本和linux命令行操作完成。首先编写python脚本搭建拓扑,添加远程控制器、交换机、主机等,并连接相应的链路。设置控制器参数,完成实验部署。然后,执行相应脚本和linux命令进一步开展实验,实现BGP路径挟持攻击和ARP攻防实验。
互联网包括无数个相互连接的自治系统AS,其中AS之间通过一个通用的边界网关协议(BGP)进行交互彼此的路由信息[13]。BGP是基于信任原则的协议,其在消息通告中把BGP邻居作为完全可信的实体,并认为所有从邻居获取到的路由信息都是当前网络的真实拓扑情况。同时,BGP的所有路由通告报文都是全明文的,并没有相应的加密机制或安全验证,很容易遭到恶意黑客的利用。
因此,如果一个攻击者向其他AS通告一个不属于自己的IP前缀,接收到通告的AS在没有办法验证通告信息是否属实的情况下,只能根据自身的策略来判断如何选择到达该IP前缀的路径。当攻击者AS被选择作为到达该IP前缀的下一跳地址,所有到达该IP前缀的数据都会被成功劫持到攻击者AS处,从而被攻击者进行不正当的使用。并且,受到感染的AS会把该攻击信息继续向其他的AS传播,使得更多的AS受到感染,逐渐形成了BGP劫持攻击。BGP路径挟持攻击的攻击者往往通过广播伪造拥有更短的路由来改变数据的传输路径,从而拦截或者修改数据。
实验首先在Mininet环境下使用python脚本完成实验配置。在导入了功能和辅助模块后,创建实验拓扑如图3所示。其中包括4个AS自治系统AS1~AS4及其各自的BGP边界路由器R1~R4。路由器路由连接情况如下:R1和R2、R4相连,R2和R1、R3相连,R3和R2相连。在AS3和AS4中分别有1台Web服务器,同时控制器可以控制各边界路由器。
图3 BGP攻击实验拓扑
在攻击之前,可以登录AS1的边界路由器R1查看路由信息,结果如图4所示。从图4中可以看出,要到达AS3的路由是 “2 3”(即通过AS2和AS3)。同时,在AS1中客户端主机上,用curl命令可以正常访问AS3中Web服务器的主页,这说明AS1的路由信息目前是正确的。
图4 BGP攻击前AS1的路由表信息
攻击开始后,首先启动一个攻击自治系统AS4,并向AS1通告AS4有一条更短路径可以到达“13.0.0.0/8”,以欺骗AS1来选择这条“更短”路径向AS3发送数据。此时,IP地址为13.0.0.0/8的合法路由器R3通过R2向R1通告的路由路径为“2 3”,而攻击者路由器R4构造的虚假AS_PATH路径信息为 “1 5”,路由器R1接收到这两条到达IP地址13.0.0.0/8的路由通告报文,根据路径最短原则,R1会优先选择攻击者路由器R4作为下一跳路由器,由此造成路径劫持攻击。
此时,登录AS1的边界路由器并查看路由信息,发现R1确实已经选择了AS4作为它向AS3发送数据的下一跳路由,结果如图5所示。同时,AS1中客户端主机访问的已经变成位于作为攻击者的AS4中的Web服务器,AS1客户端主机使用curl命令打开了AS4中Web服务器的主页,这说明BGP路径挟持攻击成功。
图5 BGP攻击后AS1的路由表信息
ARP,即地址解析协议,是根据IP地址获取物理地址的一个网络协议。ARP攻击首先从伪造IP地址和MAC地址入手,在网络中产生大量的ARP通信量使网络阻塞,ARP攻击方不断地发出伪造的ARP响应包,进而更改目标主机ARP缓存中的IP-MAC地址映射,最终实现网络中断或中间人攻击的目的。
ARP攻击主要存在于局域网网络。如果某局域网中存在一台感染了ARP欺骗木马病毒的计算机,那么该计算机会通过ARP欺骗的方式进一步扩大感染范围,最终欺骗整个局域网的主机和交换机,截获上网流量,造成局域网内的通信故障。总体上,ARP欺骗攻击可分为两种,一种是对路由器ARP表的欺骗;另一种是对内网主机的网关欺骗。本实验实现第二种欺骗,其原理是建立虚假网关,让作为欺骗对象的主机向虚假网关发送数据,而不是通过正常的路由器途径来连接网络。
实验首先开启Mininet,通过python脚本建立如图6所示的网络拓扑。其中包含2台主机、1台充当网关的三层交换机和1台控制器。网关IP地址为192.168.0.1,主机PC1的 IP地址为192.168.0.120,主机 PC2的 IP地址为192.168.0.200。先执行pingall命令查看当前的网络配置情况,显示网络正常。
图6 ARP攻防实验拓扑
本文选择用PC1对PC2进行ARP攻击。利用ARP断网攻击工具arpspoof攻击后,攻击方不断地发出伪造的ARP响应包,通过伪造IP地址和MAC地址实现ARP欺骗,在网络中产生大量的ARP通信量使网络阻塞。登录PC2的终端,利用 “arp-a”命令查看PC2的IP-MAC地址映射表,显示其ARP缓存中对应网关的IP-MAC条目被更改。此时,PC2无法ping通网关,说明ARP攻击造成了PC2的网络中断。
接下来,防御ARP攻击。目前对于ARP攻击常用的防护方法主要有绑定IP地址和MAC地址、安装ARP防护软件和使用具有ARP防护功能的路由器。在本实验中通过静态绑定网关的IP地址和MAC地址来实施ARP攻击的防御,即在PC2上执行 “arp-s网关IP地址网关MAC地址”命令,让PC2可以达到防御ARP攻击的效果。绑定之后,查看PC2的IP-MAC地址映射表,确定网关对应的IP-MAC地址绑定成功。再次开启PC1对PC2的ARP攻击,此时发现PC2能够ping通网关,成功防御ARP攻击。
基于软件定义网络SDN架构,以Mininet为轻量级实验平台,设计了BGP路径挟持和ARP攻防实验的教学方案,以灵活快速的实验手段培养学生实践动手的能力,帮助学生掌握网络空间安全的基本知识和工作原理。