查看原文
其他

探索安全数据分析

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587


微信公众号:计算机与网络安全

ID:Computer-network

“安全数据”的构成是见仁见智的。恶意软件分析者特别关注进程、内存和系统二进制转储,漏洞研究者喜欢仔细分析新发布的补丁,网络安全专业人员乐意监听有线和无线网,看看有什么秘密可以从点对点通信的网络包里面筛选出来。


本文将从IP地址的角度检验ZeuS僵尸网络(一种相当恶毒的恶意软件),并将在真正的防火墙数据上进行一些基础分析。为了完全理解文中的例子,最好熟悉AlienVault数据集的描述,而且至少要关注所有前期的初步分析工作。另一个主要目的是通过引导您阅读和运行许多不同风格的R语言代码示例,来增强熟练使用R语言的程度。


IP地址,以及域名和路由的概念,是互联网的基石。名字表示我们寻找什么。地址表示它在哪里。路由表示如何到达。


国际组织把IP地址空间分给公共团体或私人使用。设备、系统和应用程序记录了IP地址以备查询;网络管理系统测试、分组、显示并报告IP地址;安全工具经常基于IP地址做出关键决策。但是到底什么是IP地址?我们可以从中学习到什么?还有我们可以从哪部分入手来发现并减轻恶意行为的危害?


所有例子都是基于IPV4的。运行图1的代码来搭建R语言环境。

图1

一、IP地址的剖析


一些信息安全实践者认为IP地址只是简单的被用于执行ping/nessus/nmap或者其他命令的字符串。但是为了演示系统和网络数据面向安全的数据分析,必须尽可能地完全理解安全领域的数据元素,比如在金融、农业、生物医学等学科进行数据分析的人必须理解这些领域的基础的数据元素。IP地址或许是安全领域数据元素中最基础的。下面将更深入地挖掘这些内容,您可以将它们完全应用于自己的分析活动中。


1、IP地址的表示


IPv4地址由4个字节组成,每个字节是8位,通常使用点分十进制法表示(如192.168.1.1)。1989年的IETF RFC 1123中引入了#.#.#.#表示法。2005年,IETF统一资源标识符(Uniform Resource Identifier,URI)通用语法草案中给出了更明确的定义(RFC 3986)。


当遇到安全领域的其他元素时,您会想做大量相似的挖掘来确认您拥有全部所需要的信息以便进行处理,或构造完整的正则表达式以便在非结构化数据中进行定位


因为一个8位的字节范围在0~255,所以32位IP地址的点分十进制表示法(dotted-decimal notation)的范围在0.0.0.0~255.255.255.255。允许的地址空间一共有4294967296个,这个数字其实就是32位整型数的最大值。这里提供了一种存储和操作IP地址的要点:任何IP地址都可以转化成一个32位整型值,或者从32位整型值转化过来。这一点很重要,因为整型表示可以节省空间和时间,而且这一种表示方法的计算会比点分十进制简单一些。如果编写或使用一个工具把IP地址理解成一个字符串或字符串集合,那么有可能在把4字节/32位的数据表示成15字节/120位(最坏的情况)的过程中浪费存储空间。此外,为了比较不同算法在完成相同任务时的表现,也可以选择更低效的字符串比较代码来与整型算法和按位加操作相比较。尽管这可能在很多场景下没有明显影响,但是当处理大量IP地址(在IPV6世界中情况将更加糟糕)并重复操作时,这种影响将被显著放大。


 IPv4地址与32位整型的相互转化 


为了发挥IPv4地址整型操作的优势,必须有方法来将点分十进制表示的IPv4地址与整型数相互转化。IEEE标准1003.1定义了一个通用的底层方法(如C语言),通过inet_addr()和inet_ntoa()函数执行这个转化操作。不过这些函数不支持R语言。尽管可以把这些函数写成C语言的工具库,作为R语言的模块,但利用bitops包来直接用R语言完成这个功能更加简单。在图2中会看到IPv4地址和32位整型数相互转化的R语言函数。

图2

可以通过运行以下代码并检查它的输出来测试这项功能:

2、IP地址的分段和分组


有几个不同原因需要对IP地址进行划分和分组。从内部上,主机可以从功能性和敏感性方面区分,这意味着如果需要追踪每个独立IP地址,那么路由表就会崩溃了。由于TCP/IP的设计方式和IPv4网络的实现方式,所以有大量的分段或分组的方法,使得在广域网上更容易划分并管理独立网络(子网)。最初的规范是识别顶级的类(从A到E),这些类对于消耗连续八位组来说仅仅是一个相关位掩码的列表。这限制了每类中地址的可用范围,并且将某些结构限制在每类的建议用法上。


RFC 4632上建立了无类别(class less)的分段方法。与在整个八位组上分段不同,可以通过在具体IP地址上追加掩码位数的方式,在CIDR(Classless Inter-Domain Routing)前缀格式中指定地址范围。例如,172.16.0.0(掩码是255.255.0.0)变换为172.16.0.0/16。这些CIDR块(block)本身能用于寻找“坏邻居”(即识别网络包是从恶意节点来或发往恶意节点)。


理解这些点很重要,因为要利用分组从数据和关系中挖掘出含义。理解了CIDR前缀格式,就能看到这些前缀是怎样分组并且定义为自治系统(Autonomous System,AS),这些AS都分配了数值标识符,即自治系统数(Autonomous System Number,ASN)。ASN有许多用途(和相关数据);例如,用于边界网关协议(Border Gateway Protocol,BGP),使数据包在互联网中有效地选择路由。因为ASN和BGP的关系,所以有可能发现每个ASN的相邻“邻居”。如果一个ASN“邻居”与恶意节点普遍相连,它就可能是一个主导的指标,围绕它的ASN也可能包含恶意流量。


关于自治系统有更多的细节,尽管分析时只是偶尔与IP地址打交道,还是建议能好好研究。为了对自治系统有个整体结构上的认识,可以在CIDR Report上查看公共ASN信息。


 在CIDR块上测试IPv4地址资格 


当我们在进行基于ASN和CIDR的分析时,经常需要做的一项任务是判断一个地址是否落在给定的CIDR范围内。要想在R中实现,只需扩展之前定义的IPv4地址的操作,将有问题的IP地址和网络块地址都转换成整数,然后执行必要的按位操作来确定地址是否真正连在一起。图3给出新的R函数,用来测试一个具体的CIDR块中的地址是否为IPv4地址。

图3

您所在的组织很可能也使用CIDR和ASN,但不是唯一的IP地址集的逻辑分组机制。例如,可能有高级组别如“工作站”,它覆盖了所有用户端点的DHCP分配地址空间,或“打印机”与所有静态分配的单功能或多功能输出设备逻辑关联。服务器可以根据功能或操作系统类型划分(或两者结合)。尽管整个网络中使用的是公有路由表地址,“内”和“外”的概念对节点分组仍能够起作用。在寻找恶意行为时,不要低估逻辑分组的作用,因为它们(数据!)的特征可以关联到大量您正在寻找的指标。举个例子,期望典型的终端用户工作站在互联网中企图接入节点是合理的,但是同样的行为对打印机大概就不正确了。因此,学习恶意行为的一个关键就在于元数据和关系的类型。


3、定位IP地址


深入细节,IP地址映射到(通常)具有唯一介质访问控制(Media Access Control,MAC)地址的独立设备。在局域网内识别一个节点的交换机和端口是一个相当简单的过程。利用合适的元数据,可以基于物理信息创建逻辑组别并绑定附加属性,如节点(在组织上或地理上)的位置。IP地址绑定了这个信息就不必等到通过服务台阻塞来发现某个部门中发生的一些错误。


广义的讲,将互联网上的IP地址绑定到地址位置的方法,也有不同程度的准确度。最流行的方法之一是使用Maxmind GeoIP数据库和API,它也用于freegeoip项目。Maxmind数据依赖于使用免费数据库或商用版本而产生不同程度的精度。对于大多数组织,如果是国家级的识别,用免费数据库就能达到足够高的精度。freegeoip项目提供免费Maxmind数据集的在线查询接口。也提供所有的服务代码,能够复制并在内部建立服务来避免与Maxmind的低级API直接交互,避免免费服务的限速和其他限制。


一旦知道某个恶意节点的物理位置,在地图上绘制就相当容易了。AlienVault数据提供了超过250000个预定位置地址,先要从坐标(coords)字段中提取坐标对。图4列出了提取的样例代码。注意如果机器稍微有点慢,读取和解析数据要花30秒至60秒。

图4

只要手中有经纬度坐标,就能利用Google地图展现位置,而完全不用R或Python代码,您可以将数据上传到Google融合表(Google Fusion Tables)的这段时间里喝上一杯饮料。尽管Google尽量提升在线地图API的速度,但合成的美观地图有时也会因地图标记数据过多而崩溃。例如,用Google地图绘制AlienVault数据(见图5),生成的结果看上去恶意主机好像集中在日本。除了仅依赖于Google,还可以用R实现的绘图函数(见图6)完成类似任务(见图7),以达到更高精度。

图5  用Google融合表+Google地图绘制的AlienVault恶意节点图

图6

图7  R语言ggplot/map扩展包实现的AlienVault恶意节点图

把IP地址绑定到物理位置并展现在地图上是固有的能力。特别是当我们尝试与各分组交流而不仅是分析时,读入互联网用户的目的地是一回事,在地图上“看到”是另一回事。另外,在地理上查看恶意行为未必需要生成漂亮的图片。


二、IP地址数据的扩充


在分析师认为的理想情况下,每个需要研究的数据集都是没有错误的,且具有深入和健壮分析所需的全部属性。事实往往并非如此,当谈到不完全数据集、高分布参考性数据集,或者有过多潜在元数据的数据集时,信息安全就和其他学科一样了。这些并非完美无缺的数据可能对数据分析工作造成挑战,但发现这些需要的数据并加以利用的可能性还是很大的。


虽然AlienVault数据集中包含了地理信息,就像前面描述的一样,互联网还是有物理上和逻辑上的分组。通过不同的角度来看这些数据还是很有趣的。举例来说,某个数据集(图4)增加了一些从IANA IPv4地址空间注册机构(IANA IPv4 Address Space Registry)获取的附加数据。这些数据代表了IPv4地址注册分配中一个级别非常高的组别,而且需要强调的是大多数注册者并不对私人节点的恶意行为负责。所以即使不能使用这些信息来横加指责,也可以利用它来找到恶意节点的聚集区,并在此基础上进行合理的、附加的调查。

在Web页面中“Alternative Formats”标题下面,IANA提供了一个方便的、可链接到CSV版本的IPv4地址空间分配以及传统的带注释的文本文件的链接。由于CSV文件不完整,如果运行示例代码,可能有时会看见一些奇怪的结果。似乎一个自动化的过程将IP源表转换成多种格式,只有当第一个八位字节命中了三位这个处理才会停止。碰到任何问题,可以通过练习数据加工技能来将文本文件中的定长版本转换成CSV,或者直接使用合作网站上提供的CSV来解决。


R语言和pandas里面的数据帧基本数据结构使其很容易引用数据或者将新数据融入到您的分析中,而您的项目要遵循或接近这个基本数据分析工作流模式:


(1)下载新数据(如果必要的话)。

(2)解析/加工这些新数据,并将这些数据转换成一个数据帧。

(3)验证新数据中的组成和结构。

(4)从新数据源里面提取或者计算相关信息。

(5)在已有的数据帧中新添加一列或者多列数据。

(6)运行新的分析。


以图8为例,通过处理IANA数据您会发现哪个注册分组中有最多的恶意节点。需要注意的是,sapply()函数可能需要耗费一些时间,这取决于计算机的速度。

图8

可以对IANA分组表做一次快速检查来看看它是否和所有模块匹配。图9中的代码将table(iana$Designation)得到的数据包装成了一个新的数据帧,并将新的数据帧和AlienVault数据合并。

图9

然后绘制这些数据(见图10)并生成如图11中所示的图表。

图10

图11  R柱状图

这其中有一些变化,但总体来说较大的块是大部分恶意主机的来源。因为PIPE NCC中恶意主机的数量明显多于已分配组中可能隐含的数量(差不多是它旁边ARIN的两倍),在图9的文本/控制台输出中我们已经将PIPE NCC、Administered by ARIN和LACNIC进行了突出标记。LACNIC和Administered by ARIN有着相同的恶意主机数量,却有着不同的分配块数量。即使有了这些差异,是否可以根据注册商管理的主机数和恶意主机数量之间比较的情况下得到一个更有说服力的说明呢?如果愿意的话您可以得到更多可视化图表(见图12),图13展示了每个IANA块中AlienVault恶意主机的数量,并按照IANA块进行了升序排序。

图12

图13  每个IANA块中的AlienVault恶意主机的数量,以IANA块大小排序

在大多数分组中,AlienVault主机数量确实与IANA块的数量正相关,后面会通过引入一些基本统计数据更好地展示。


 关联/相关、因果、安全运营中心分析师的诡异 


这是包含了组织数据元素(变量)并将它们与其他变量比较的第一个示例,这里是谈及“关联”(association)概念最好的地方,您会发现它常常被称为“相关”(correlation)。相关关系常被用来衡量两个或者多个变量之间的线性关系:


正(positive)相关是指一个变量增长或减小,另一个或多个变量随之一起增长或减小的关系。

类似,负(negative)相关是消极的关系,一个变量增长,另一个或多个变量随之减小,反之亦然。


当不同变量间不存在一致的线性模式,则这些变量不相关。当计算相关性的值时(统计学者称之为r值或者相关系数),一般会得到一个处于1(完全正相关)和–1(完全负相关)之间的值。当r向0趋近的时候,线性相关则会减小。如果r值就为0,那么这两个变量之间就不存在相关关系了。


需要记住的是一个简单的相关关系就像一个线性比较。相比之下,看一看图14中散点图中存在一条抛物线(是倒U形状)。很明显其中有种模式和某种类型的关系,但它不是线性关系,所以计算得到的r值非常接近于0。和大多数统计学学科(或者任何复杂的学科)一样,有许多可用方法来完成各种任务。在计算两个变量间相关关系的时候也是如此。线性回归(linear regression)提供了相关关系更深入的细节,线性回归也是预测建模的基础。在这里,您将使用一个基本形式的相关关系。图14中产生散点图的程序位于ch04/R/ch04。

图14  产生的散点图

必须相信的是,在统计学和信息安全之间存在着相似之处。统计学家使用奇怪的符号和工具来展示他们的暗黑艺术,就像恶意软件研究人员和网络安全专家盯着一排排的十六进制、八进制和二进制数据来获取其中的意义一样。安全研究人员还懂得使用何种工具来完成手上的工作(一般不会使用NetFlow数据来了解两个会话节点间的详细负载信息)。数据科学家亦是如此。然而不幸的是,在处理基本的相关技术时,需要进行进一步考量。


皮尔逊相关方法可以在不严格限制变量是否是同种类型的情况下,在时间间隔或比例尺度上起作用,皮尔逊相关方法被广泛的使用。如果数据已排好序,应该使用Spearman或者Kendall’s Tau这两种算法来代替。在这里我们没有深入研究相关算法的微妙之处,但是您在将相关分析应用到自己的分析之前需要对这些算法的使用和限制有深刻的了解。


而且,相关关系仅仅是一个描述性的统计度量,并不是一个推论。这意味着相关关系只能用来描述研究样本数据,而不能基于该结果来推广概括一个更大的数据集或者做相关预测。


同样重要的是相关关系仅仅是对变量之间存在的某种关系的一种展示,而不能解释产生这种关系的原因。例如,假设一个爱猜想的分析师关注到安全事件和安全操作员数量之间的关系,并报告说“组织中SOC分析师数量和已经报道过的安全事件数量之间有强烈的正相关关系”。这样会让人们误以为SOC分析师导致了这些事件的发生。事实上,数据中的规律有类似趋势,但并没有任何暗示。或许是事件发生更多的组织雇用了更多的SOC分析师,或者在雇用了更多的分析师后组织发现了更多的事件。或许二者完全都是其他事物的产物,例如较大的机构受到较多的攻击,这样就会有更多的事件发生和更多的分析师。当计算类似相关关系的时候,必须要仔细使用从而来保证结果是有意义的。人们(特别是那些在寻找标题的人们)将大量的赌注都压在数学推导的答案上。过度自信可能导致分析师断章取义而得到奇怪的结果,例如研究人员建议通过解雇SOC分析师来减少安全事件的发生。在怎么处理工作和确保借助合适的技术手段来表现结果方面,您必须仔细进行。


因为IANA数据的原因,在分配好的网络模块中,分组越大其中就可能有越多的恶意节点。这是一名专家基于对数据粗略观察和对“真理”追求的直觉而得到的观点。而为了得到一个更加有说服力的统计支持说明,可以使用图15中列出的代码来生成描述变量IANA.Block.Count和变量AlienVault.IANA.Count之间关系的示意图,如图16所示。

图15

图16  由一个注册商管理的恶意节点数量散点图

图16中的散点图展现了一种正相关的关系,可以肯定的是,您需要行动起来,写代码来进行统计比较,而不是光盯着电脑屏幕看。用于进行基本两两相关计算的方法有很多。R语言中内置的cor()函数提供了三种计算两两相关的基本算法

cor()函数的返回值就是相关系数,就像之前提到的,如果它趋近于1,就表示两个变量间存在着强烈的正线性关系。R语言中内置的cor()函数提供了三种方法来计算相关关系:


皮尔逊(如果不指定参数,这是默认方法):是指皮尔逊积矩相关系数,在没有离群值,且符合正态分布的连续数据集上使用最有效。


斯皮尔曼:是指斯皮尔曼等级相关系数。就像定义中所暗示的一样,该系数适用于已排好序的数据集。换句话说,如果有两列已排好序的R语言中的数据(例如有序数据集中的前十个元素)或者可以进行排序的数据(特别是可以避免由于离群值而导致的皮尔逊算法的效率降低),这时候就适合使用斯皮尔曼等级相关系数。从算法上来说,斯皮尔曼等级相关系数就是在有序数据集上的皮尔逊积矩相关系数。


kendall:是指kendall秩相关系数,它是专门用来计算有序变量之间的相关关系。它代表了输出变量随一个输入变量增加或减小的概率。


由于斯皮尔曼相关系数可以产生一个等级相关系数,而且更适用于那些不符合正态分布(可以使用hist()函数来看看每个列表上的数据集偏离了正态分布多远)且排序后更好比较的数据,在这个例子上我们使用了斯皮尔曼相关系数。对您来说,如果您对正态分布不熟悉,可以参考下面对正态分布的简单解释:


数据集有一个相等的均值和中位数。

68%的数据落在了一个标准差范围内。

95%的数据落在了两个标准差范围内。

99.7%或者更多的数据落在了三个标准差范围内。


做些统计工作可以帮助验证这个直观印象和逻辑常识,即越大的网络往往会有更多的恶意主机。也可以对已有的内部数据进行类似分析,来看看部门员工数量和发现的病毒数量之间是否存在某种关系。


三、跨区域绘图


就当前机构所使用的大部分安全技术操作而言,对恶意节点信息的计算和图形化展示是非常有价值的。然而,作为安全数据科学家,进一步养成数据可视化的习惯是一个不错的主意,可以借此找到难以发现的结构和模式。最经典的例子莫过于Anscombe四重奏,如图18所示。


此处(图17)给出了图18中的数据对(x,y):

图17

图18  Anscombe四重奏

上述4组数据集有着相同的统计描述(均值、标准差、方差和相关系数),他们甚至可以用相同的线性回归方程来拟合,参见图18中的对角线。然而,在数据可视化后,不同模式就显现出来了。在图18中,第1个图显示的是相当正常的线性关系数据集呈正态分布;第2个图显示的肯定不是线性关系,但是数据之间显然有些关系;第3个图整体呈现线性关系,但是有一个明显的离群值;最后,第4个图展现出了离群值的极端影响,尽管数据实际并非线性关系,但是由于右上方异常值的影响,数据仍然显示出非常强的相关关系。像这样的可视化方法往往能够帮助我们更好地了解数据。


地图是传达视觉信息的强大工具。然而,同样也有一些其他逻辑或物理角度将IP地址进行可视化表现的形式,特别是当您想了解节点间关系时,尤是如此。一个非常灵活的展现方式是图结构(graph structure),因为它能够显示出统计数据,并且有很多图形表示的选项可设置。注意,在这里不要混淆术语“图结构”和“图表”。图结构无非就是节点(顶点)和节点间连接(边)的集合。节点和边有固有的属性,如名称或标签,同时还有计算的属性,如出入节点的连接数(度)。在传统的图结构中,边的方向(进或出)也可以被指定。事实上,图结构已经变得非常普遍而且有用,以至于一些特别流行和定制的数据库已经将大型图结构的存储、修改和分析操作变得相当简单。

1、宙斯僵尸网络的可视化


这里将结合IP地址的元数据,利用图结构对恶意活动涉及的IP地址关系进行可视化。后面将侧重于生成和可视化图结构,并熟悉基于图结构的分析方法。前面的例子都是基于AlienVault IP信誉数据库的,接下来我们将研究一个在互联网上特别普遍的恶意样例:宙斯(Zeus)僵尸网络。大多数的安全专业人员都听说过宙斯,但为了以防万一,这里给出abuse.cn宙斯跟踪站点的相关描述:


宙斯(也称为Zbot或WSNPoem)是一个犯罪软件工具包,窃取各种在线服务的证书,如社交网络、网上银行账户、FTP账户、电子邮件帐户和其他(网络钓鱼)等。


尽管在攻克宙斯僵尸网络方面有一些不错的尝试,但是它依然在轻松地窃取各种证书。网站abuse.cn提供了一个方便的IP地址黑名单,可以据此识别宙斯感染的节点,并阻止感染的系统与宙斯命令和控制(C&C)服务器通信,C&C服务器负责在僵尸网络中协调所有的操作。要使用该黑名单,您需要使用图19中的代码将数据文件传入R中。

图19

因为数据只有一列,所以我们在图19中采用read.table()函数(read.csv()是该函数的一个变种)。这个特殊的数据文件虽然没有头部,但是在文件开头有5行注释是无用的。我们还对程序做了一些简化,将列名直接嵌入read.table()函数中,从而避免了对colnames()函数的单独调用。


让我们首先确定哪些国家存在宙斯僵尸网络节点。您可以使用地理定位服务来获得这些数据,但是在这里我们将采用不同的方法,因为在接下来的分析过程中,您还需要一些额外信息。Team Cymru公司提供了大量基于IP查找的服务,其中包括IP-ASN映射服务,该服务支持通过端口43进行批量查询,并返回相当多的有用信息:


自治系统(AS)编号

边界网关协议(BGP)前缀

国家代码

注册信息

分配日期

自治系统的组织名称


Team Cymru网站明确指出,国家代码数据仅可作为准确的区域注册数据库,但我们已经将其与地理位置数据库进行了一些对比,对于本文例子而言准确度已足够。


trim(c)——接受一个字符串,返回去掉开头和结尾空格的相同字符串。

BulkOrigin(ips)——接受一个IPv4的地址列表,返回ASN源国家的详细列表。

BulkPeer(ips)——接受一个IPv4的地址列表,返回同级ASN的详细列表。


要生成图结构,需要执行以下步骤:


(1)查询ASN数据。

(2)将IP地址转变为图顶点。

(3)将AS源国家转变为图顶点。

(4)创建从IP地址到对应AS源国家的边。


出乎意料的是,这可以通过一段简单的R代码实现,如图20所示。

图20

现在您已经有了一个图结构,只需将图结构、布局和标签参数传递给plot()函数,便能实现该图结构的可视化,如图21所示。

图21

如果您对国家代码的记忆已经有些模糊,可以使用图22中的R代码生成一个查询表。

图22

简单的柱状图和表格能够让数量看起来更直观;但是图结构能够增加一种视觉冲击,这是传统的表现方式所缺乏的。因此,根据消费者的不同需求,或许在展示结果的时候同时采用两种方式效果更好。


通过之前对ASN的熟悉,可知IP可同时存在于物理和逻辑空间。既然已经有物理空间的图形展现,便可使用图23中的代码来生成图24和图25中的图网络,将宙斯IP地址、ASN源、同级ASN的关系整合到一起。

图23

图24  按源国家聚类后的宙斯节点

图25  含有ASN和同级的宙斯节点图

从加入同级ASN后的网络中,可以看到一群关联ASN可能值得进一步探索。


通过熟练掌握基础图网络的概念,您可以将注意力转向更为实际的应用场景,使用真实环境的数据来可视化网络上的恶意活动,并尝试将问题“哪些潜在的恶意节点企图进入或者离开我的网络”的答案进行可视化。


2、防火墙数据的可视化


检查恶意节点的通用数据有一定的价值,但是将这些分析和可视化的技术应用到自己的组织中才真正有用。为此,最后这个例子提供了一种方法,可以同时使用AlienVault IP信誉数据库和可视化技术,来研究在外围防火墙上发生的事件。


这个例子还给出了两个新的函数,可在网站的文件ch04.R(目录ch04/R下)中找到:


graph.cc(ips,av.df)——接受一个IPv4地址列表和一个AlienVault数据帧,返回一个完整的按国家代码聚类的图网络结构,同时也可以绘制出恶意流量类型的总结图(可选)。


graph.asn(ips,av.df)——接受一个IPv4地址列表和一个AlienVault数据帧,返回一个完整的按ASN聚类的图网络结构,同时也可以绘制出恶意流量类型的总结图(可选)。


您可以首先载入目标IP地址数据,过滤掉所有不在AlienVault数据库中的IP,然后评估结果并试图了解何种类型的恶意活动正在进行。即使数据可能存在不均衡,可靠性评分越高意味着节点是恶意的可能性越大。因此,您可以关注评分高于6的节点,并通过graph.cc()对符合要求的127个节点进行处理和绘图,参见图26。

图26

右侧的柱状图作为图节点的颜色图例,同时还给出了每种节点类型的总数。在图27中,可以看到有一些潜在的C&C流量,并且美国拥有最多的潜在恶意IP。利用图26中的graph.asn()和交叉分析例子,您应该有足够的工具来形成自己的观点,进而分析恶意流量的不同方面。

图27  按国家聚类的恶意目的流量图

四、结语


本文的主要目的是说明完全理解用来分析和可视化的数据是非常重要的。同时,我们从一个问题开始,多次使用计算和可视化的方法寻找答案。互联网上还有很多类似的数据集可以替代例子中的数据集,下载这些数据集(或者像最后一个例子那样,也可以使用自己防火墙的数据),通过对这些数据进行样本分析,定出自己的问题,这会使您对数据分析的工作流有更清晰的认识。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存