返回首页
当前位置: 主页 > 其他教程 > 电脑教程 >

基于数据分析的网络黑名单系统设计与实现

时间:2018-04-16 23:00来源:Office教程学习网 www.office68.com编辑:麦田守望者

本文通过描述在一个城域网中,通过基于数据分析的网络黑名单系统,发现并阻断网络攻击站点,提高了教育城域网的安全程度。

  1.引言

  随着互联网的快速发展和普及,越来越多的单位和个人开始接入因特网,并且构建了一些常见的服务器,如:SSH,HTTP,MS-SQL等等。随之而来产生的安全问题越来越引起人们的关注。除了一些服务器系统本身的漏洞之外,各种异常攻击流量成了一个普遍的问题。一方面,各种异常突发流量可能会造成网络的拥塞,从而产生丢包、延时和抖动,导致网络服务

  质量下降,影响正常的网络访问。另外一方面,突发流量还可能存在安全风险,例如:DDOS攻击、蠕虫病毒、弱口令主机被攻破等等,会对网络和业务系统造成更大的危害。

  常规的网络管理和流量监控手段,如Netflow[1],Nfdump,等等,能够看到流量异常突发的现象,却不能够让管理人员在事后深入分析异常流量产生的原因,无法了解异常流量是哪些IP造成的、是否是恶意攻击行为、异常流量的行为特点、传输内容、对网络和业务有多大影响等,导致难以采用正确的处理措施。

  为解决上述问题,有必要监控外部来的连接报文,即时识别出异常攻击,整理出危险的攻击源头,并剔除攻击报文流量。目前已经存在一些类似的安全系统,在实现方法上各不一样,侧重点和应用范围也都有所区别。比如,东北大学的网络威胁黑名单系统(http://antivirus.neu.edu.cn/scan/),采用的是基于蜜罐技术[2]和日志分析的方式,主要应用在校园网和重点保护的服务器群上。国际上存在一个开放式的黑名单系统OpenBL(www.openbl.org)通过在全球架设一些观测点,能够监控全球范围内的一些常见的攻击情况。不过其成本较大,而且范围太广,并不适合普通的单位和个人。

  上海教育城域网黑名单系统的基本思路是首先在城域网边界设备上根据一定规则识别出异常的报文,比如说单位时间从特定IP地址发起的连接数目,认证次数等等。以SSH为例,正常使用的情况下来自特定IP地址的每次SSH连接应该是几秒钟,如果一秒内出现多个连接请求,则基本上可以判断为异常攻击报文流。然后将这些异常流量通过旁路镜像到分析器上,这样就不会影响正常的网络流量。分析器对镜像过来的流量进行即时统计分析,识别出攻击的源和目标IP地址,必要的话将结果保存进入数据库。通过分析这些攻击数据,整理出有威胁的攻击源,并将这些有威胁的IP地址加入边界设备的路由黑洞,从而达到阻止攻击的目的。同时为方便查询和管理,有对应WEB Server显示系统的运行信息和结果。

  2.系统基本工作原理

  该系统主要包括两个部分:识别异常报文的边界交换机和分析器。其基本拓扑情况如下图所示。为简洁考虑,省略了其他的相关边界设备。

  图1 系统的拓扑结构

  城域网边界上的Quidway NE40E交换机根据前面描述的规则识别出异常的报文,将这些异常流量通过旁路镜像到分析器上。为了方便处理,提高效率,将流入和流出CERNET的攻击流量分成开分别通过不同的端口送到分析器,方便分开处理并提高处理效率。

  分析器对两个方向的流量分别进行分析,整理出攻击类型,如ssh扫描、ssh口令暴力破击等。同时将相关攻击信息存入数据库。另外通过定期读取数据库,提取出攻击次数最多的TOPN IP地址。对于外部进来的危险地址,将其写入黑洞设备当中,同时通过BGP协议,将上述IP地址在上海教育城域网范围内进行通告,及时阻断恶意地址的持续攻击。为确保系统的准确、可靠、及时、高效,系统还将提供web页面查询功能,方便上海教育城域网内用户及时了解相关阻断信息。

  本系统可以及时发现ssh等相关的攻击行为,可以显示攻击者来自境内还是境外,还原发生具体时间,评估影响范围。并通过安全网站通知相关学校进行处理因ssh攻击引起的安全隐患,维护上海教育城域网运行安全。

  分析器为一台DELL PowerEdge R730服务器,硬件配置情况是:两个Intel E5-2640v4处理器,主频2.4G,内存64G,运行的操作系统是Ubuntu16.04,内核版本4.4.0。该服务器可以根据后期的需要升级成更高配置的设备。其上的主要工作由下述几个部分组成:

  报文处理进程进程:capture,是该系统中最重要的部分。它长期运行,负责从内核接收边界设备镜像过来的报文并作分析处理,如果发现大量的突发报文,则说明有大量的突发流量,需要检查出此时的攻击来源并将其加入路由黑洞以达到阻止攻击的目的。

  process.sh是一段shell脚本,通过crontab每天定时调用。它会启动下面的readinfo进程完成对危险IP地址的封堵,并保存每天的分析结果已便后期管理和研究。

  处理危险攻击地址进程:readinfo,由上面的脚本调用,负责从报文处理进程的处理结果中整理出发动危险攻击的IP地址,并通过调用相关的 WEB 应用的PERL CGI脚本,将上述IP地址加入路由黑洞中。

  Apache服务器通过WEB页面显示当前系统的运行情况和阻止的危险IP地址列表,以方便管理和查询。

  通过上述各个部分协同工作,该系统可以实时检测出目前网络上的异常流量并作出相应的处理,很好的保护了网络内部各个服务器。下面分别介绍系统的各个部分。

3.报文处理

  分析器上运行着报文处理进程。它从底层网络接口抓取数据包后,整理出每个报文的包头信息进一步处理。主要包括两个主要的工作线程:接收报文线程和处理报文线程。其核心数据结构是一个环形队列,作为报文处理的buffer,结构如下图所示:

  图2 环形报文队列

  该队列在软件实现上采用的是首尾相接的大数组。为了增强对于突发流量的处理能力,需要较长的队列,但是太长的队列会给系统带来内存负担,需要取合适的值来满足上述要求。通过多次试验,队列的大小定为两万个,其中的每一个单元都是一个指向具体报文信息的指针。head和tail是两个指针,分别指向报文列表的头部和尾部。为了保护数据,系统申请了相应的安全mutex锁来保证多个进程所访问的队列数据一致性。

  接收报文线程利用前面介绍的方式读取新到达报文信息并将其指针存放在head指向的buffer,处理报文线程则依次处理tail所指向的报文,直到tail指针追上head指针,也就是报文处理完为止。 如果head指针追上了后面的tail指针,则表示队列已满,到达的报文太多,处理不过来,需要丢包。这表示有大量的攻击报文到达。处理报文线程将每个攻击报文的IP地址,端口等信息读取出来。并结合当前的时间,保存下来作为判断分析的依据。

  在无攻击流量时,报文缓冲队列中的报文个数应该接近于零。如果队列中的报文数量过多,表示有大量的攻击报文到达,需要做即时处理。系统确定了一个阀值,当报文队列长度超过总长度百分之六十时,表示队列中的报文为大量需要处理的攻击报文,此时的报文源头会被加入路由黑洞加以阻断。由于是紧急情况,所以阻断的时间设置比较短,为一小时。系统借助Perl脚本调用Telnet功能对交换机完成配置[4][5]。具体内容后文会有详细介绍。

  分析器在实现过程中,为保证结构清晰以及节省资源,采用的数据库系统是轻量型的sqlite[6]。如果性能允许,可以将具体报文信息保存到数据库以方便后期的管理和分析。由于数据库操作涉及到外部存储器读写,比较消耗系统资源,当攻击报文到达速度太大,数据库操作消耗的资源太多,肯定会导致报文处理的滞后。因此,报文信息只能保存在内存中,采用哈希表的形式,加快处理速度。然后定期分析出危险攻击源处理,并释放内存,重新统计。

  4.危险地址处理

  对于流出CERNET的流量,由于在实际应用中存在很多专用服务器以及NAT等等的原因,很大一部分不是属于恶意攻击流量,对这个方向的危险地址主要是记录并通知警告处理。对于流入CERNET的攻击流量,需要加以阻断以保证内部的安全。

  危险地址处理进程readinfo负责处理危险攻击源。它从前面报文处理进程的分析结果中整理出最危险的攻击IP地址,并通过调用访问对应的URL调用 PERL CGI脚本,例如:

  [URL String]?ip=%s**.**.**.**\\&action=add

  该语句会把待处理的IP地址和动作(添加或者删除)传给对应的脚本,然后PERL脚本调用Telnet功能配置边界交换机,添加用到的两条具体命令如下:

  conf iproute add **.**.**.**/32  

  conf bgp add network **.**.**.**/32

  具体的命令格式根据不同的设备可能有所区别。删除时将“add”改为“del”即可。这样就可以把需要处理的IP地址加入或者删除出具体的阻断名单。

  通过实际观察,基本的危险攻击动作有两类:端口扫描和主机攻击。其中端口扫描是攻击源通过发送大量的TCP SYN报文,其目标是大量连续的地址和端口,一般来说这内攻击不大会根据回应报文做跟多的后续动作。其通过大量的尝试来寻找网络上的主机和开放的端口,由于其报文数量很大,会大量的占用校外到校内的带宽。另外一类主机攻击基本上是针对特定的某个或者数个主机,根据主机或者服务器的回复而有相应的后续动作。它对应的用户动作典型的就是密码攻击。这类攻击的绝对报文数目虽然不多,不会占用大量带宽,但是其目的是攻破各个主机或者服务器,使其成为肉机,所以危害绝对不会比前一种攻击小。这两种攻击有时候也会组合起来,通过端口扫描找到攻击目标,然后对特定的目标展开行动,这样危害性就更大了。因此我们会综合考虑这两种情况,阻断其中的危险源头。

  经过分析运行结果,发现部分恶意的危险攻击源会连续的出现在危险列表中,为有效处理此类攻击,在解除封禁时引入危险值的处理机制:

  对于每次处理时进入危险攻击列表的地址,除加入路由黑洞加以过滤外,还按照一定的初始危险值保存进入记录数据库。通过危险值的来控制是否解除对该地址的阻断:

  如果在下一个时间点没有重复出现,则减少该危险值。如果危险值减到零,就从列表中删除,同时解除封禁。

  如果该地址又出现在危险列表中,说明该地址属于恶意攻击源,则增加其危险值。客观上保证此类危险源头能被连续有效的封禁。

  5.定时器和Web服务器

  系统通过linux的crontab定时器调用相关处理过程,主要包括两个部分:

  一是每四小时定期整理攻击信息。其中最主要的就是调用readinfo进程从上面的报文处理结果中整理出这段时间内最危险的一些攻击源头并将其加入边界设备的路由黑洞,同时按照前面描述的算法将前一段时间加入黑洞的危险地址释放出来。

  二是备份相关的数据库文件。这样一方面可以保存数据方便后续的研究分析,另一方面保证数据库文件不至于过大,从而影响处理效率。通过给上述的数据库文件打上时间戳以区别出每天的文件,如下图所示:

  图3 备份的数据库文件

  分析器上建有Apache WEB Server,可以查看显示系统的运行信息以及这段时间的运行结果,访问的域名为:break.sh.edu.cn,更详细的运行日志可以参看后台的数据。

  6.运行情况以及解决出现的问题

  在系统上线后,成功预防并发现了很多的危险攻击事件。一方面发现并阻断了很多从CERNET线路进入上海教育城域网内的攻击;另外一方面,探测到了一些上海教育城域网内部被攻破的服务器也在往CERNET线路上发送攻击报文,包括SSH,http等等,方便了城域网内部用户及时处理内部安全问题。

  另外,在系统运行过程中,我们发现SMTP攻击列表中出现一些正常的邮件服务器的地址。经过分析,这是由于邮件服务器存在转发功能,当用户使用此类功能会导致服务器发出大量的SMTP连接报文。这类流量属于正常行为,需要从黑名单中去掉。通过观察该地址是否打开SMTP端口可简单判断出该地址是否属于正常的邮件服务器,并将正常的服务地址从危险列表中清除。

  7.小结

  通过一年多时间的运行,该系统在保护上海教育城域网安全方面发挥了一定的作用。随着系统的逐步运行和改建,各个学校上报的安全事件正在减少。不过也还存在很多的改进空间:

  首先,报文处理流程还需要优化。由于分析器性能问题,目前如果突发报文很多的话会出现丢包,而这些丢弃的报文可能正是需要处理的重要的攻击信息。后面可以考虑从软件,硬件,以及处理算法上做改进,增强处理能力。

  其次,在系统长时间运行后,对于一些长期惯性的威胁源如何采取有效的措施,这一点还有待进一步观察和研究。

  最后,Web 页面显示的内容可以经过大数据分析后更进一步丰富,一遍通过图表等更加直观的方式来展示更多的分析处理结果。

  参考文献:

  [1] 朱敏 基于NetFlow网络流量异常的分析 计算机系统应用 2006年4期

  [2] 穆华平,焦长义 蜜罐技术研究 民营科技 2008年12期

  [3] Extreme Networks创造更高城域以太网传输标准 通信世界 2008年36期

  [4] 黄向农 ?赵琼 基于Perl维护网络设备本地认证帐号的方法 电脑知识与技术 2013 年31期

  [5] Tom Christiansen, Nathan Torkington Perl Cookbook(第二版,影印版) O‘Reilly 2011年03月 section 18.6. Simulating Telnet from a Program

  [6] 唐敏,宋杰 嵌入式数据库SQLite的原理与应用 电脑知识与技术(学术交流) 2008年5期

  作者单位:上海交通大学网络信息中心

------分隔线----------------------------
标签(Tag):网络黑名单系统
------分隔线----------------------------
推荐内容
猜你感兴趣