《数据驱动安全:数据安全分析、可视化和仪表盘》一3.5 回到具体问题
本节书摘来异步社区《数据驱动安全:数据安全分析、可视化和仪表盘》一书中的第3章 ,第3.5节,[美]杰·雅克布(Jay Jacobs)鲍布·鲁迪斯(Bob Rudis) 着 薛杰 王占一 张卓 胡开勇 蒋梦飏 赵爽 译, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.5 回到具体问题
考虑AlienVault信誉数据的问题和主要用例:将信誉数据导入SEIM或入侵检测系统/入侵防御系统(Intrusion Detection System/Intrusion Prevention System,IDS/IPS)来警示应急响应小组成员或录入/阻止恶意活动。如何进行设置使信誉数据的总览结果影响SIEM的配置,以确保产生最少数量的“琐碎”的警报?
让我们通过下面的问题将上述问题转化为更实际的问题:“信誉数据库中的哪个节点代表了潜在的真正威胁?”
AlienVault同时包含Risk和Reliability字段是有原因的,你应该能够使用这些属性将节点分为两类:1)你真正关心的节点,2)其他内容。“真正关心”的定义可能有些主观,但是,想依赖258 626个节点中的一个来检测到所有的活动并生成警报是不现实的。必须生成优先分流或优先级,该过程最好基于数据的统计分析和证据来生成分流和优先级,而不是仅单独利用专家系统或突发奇想。
你可以通过对比Risk和Reliability因子发现哪些节点需要引起注意。关联表是一种特定变量的多元频率分布的表格视图,可以帮助你完成这项工作。换句话说,关联表可以显示两个变量之间的关系。在建立关联表后,你可以从数据和图形的结果发现AlienVault节点在哪里“聚集”。
程序清单3-19的R代码的输出结果显示在图3-8中,该图以分级和尺寸、颜色定量表示的形式展现了关联表的输出。而程序清单3-20的Python代码用于生成一个标准的热度图(见图3-9),该热度图只依靠颜色来表示数量。(热度图是一种图形表示,它将包含在矩阵中的各个数值表示为颜色。参考https://en.wikipedia.org/wiki/Heat_map获得更多信息。)结合上述两个因子,很明显数据集的值集中在[2,2]附近,这是一种偏差的标志。
程序清单3-19
有趣的是,你可以确定你所看到的现象是否是偶然,或者发现它们的潜在意义。尽管你需要做一些高级统计或使用Fisher准确度检验,但不要觉得麻烦。如果你假设Risk和Reliability的所有值都是等概率出现会怎么样?分级图是什么样?你应该想到在系统和数据收集过程中存在一些因素,导致一些组合结果出现的概率会比较大。但是它们和当前数据差别有多大呢?
你可以使用sample()函数生成正态分布的随机样本,如[1,7]和[1,10],然后利用这些随机样本构建一个关联表。多次运行将得到不同的随机表。每次运行称为随机过程的实现(realization)。
图3-9 风险(Risk)/可靠性(Reliability)关联表热度图(Python)
程序清单3-21中的R代码生成了图3-10中的分级图,该图说明了两个内容。第一,你可以用少量的代码制作精美的随机方块。第二,确实存在一些因素使节点趋向于较低的Risk和Reliability类(也就是趋向于0)。这可能是因为数据只具有低风险性和可靠性,或者采样方法或评分系统误导了数据的分布。
程序清单3-21
图3-10 风险(Risk)/可靠性(Reliability)无偏估计图(R)
现在将你的注意力转移到Type变量,看看是否能在Risk和Reliability的评级结果间建立关系。仔细观察Type变量,你会发现一些条目的内容已经超出了“类型”给它们定义的范围,这些内容由分号分隔(如共有215个Scanning Host; Malicious Host值)。因为你想看到这些类型的比较,这些组合类型不应该和其他类型混在一起。因此,不需要解析出多类型的节点,你应该把它们归为一个Multiples类以便表示它们被赋予了多种类型的属性。现在,你可以生成一个三路关联表。在坐标系中加入Type列观察其对结果的影响。
程序清单3-22中的R代码生成了图3-11中的三路关联表点阵图,你可以对比在Risk和Reliability分类中Type产生的影响。相应的Python代码在程序清单3-23中,用柱状图表示了三路关联表(见图3-12)。
程序清单3-22
相较于文字,图形更有说服力。这个结果包含了Scanning Hosts中的234 000个数据点(大约90%的项被分类为“Scanning Hosts”)。这个类别很大,并且它的低风险掩盖了其他类别的风险。将其从Type因子中移除并重新生成图像。这并不是说Scanning Hosts类不重要,而是通过这种方法找出你真正关心的项。你并不关心低风险和可靠评级的节点。所以应该剥离它们然后观察掩盖在Scanning Hosts下的数据关系。我们继续程序清单3-22和程序清单3-23中的例子,在程序清单3-24和程序清单3-25中生成新的结果图,参见图3-13(R的点阵图)和图3-14(Python的柱状图)。
程序清单3-24
现在你就要得到一些结果。在图3-13中,你会发现Malware domain类的风险评级在2到3之间,可靠性集以2为中心向外蔓延。你也可以观察其他类型的图形结果,包括图3-14,但是现在你需要重新生成移除了Malware domain后的图形。另外,看起来Malware distribution没有产生任何风险,你可以从剩余的类中过滤掉它(在程序清单3-26和3-27中)以观察最终结果图3-15(R的点阵图)和图3-16(Python柱状图)。
通过最后的筛选,你已经将原来的列表减少到不到6%,而且合理地找到了真正关心的节点。如果想一步降低范围,可以过滤掉Reliability与Risk的一些组合。或者,也可从已经被过滤掉的类别中选取一部分重新观察。
这里简单的解析与分割数据并没有展示出哪些变量是最重要的,只是帮你了解这些数据的关系和出现的频率。因为90%的数据是Scanning Hosts,也许你只想筛选出风险不大于2的主机。这个分析只是帮你定位能产生更高警报优先级的节点,你仍然可以将其他类型节点捕捉到低优先级或者信息日志中。
因为AlienVault每小时更新这个列表,你可以在将新的版本导入到安全工具之前创建一个脚本来进行过滤。然后,你可以保持节点过滤的百分比作为潜在调整规则所需的百分比。此外,你应该考虑在半频率(semi-frequent)下实现这种探索分析。这将帮助你确定是否需要重新考虑到底由什么构成特殊节点。
最后更新:2017-06-21 18:02:43