PyFunnels:信息安全工作流的数据归一化
*TJ Nicholls // BHIS 特邀撰稿人
摘要
您有多少次不得不解析相同工具的输出?难道不想把这些时间节省回来吗? 作为信息安全专业人员,我们使用的工具和执行的工作流存在大量重叠。不必每次需要从工具中提取数据时都重新发明轮子。 PyFunnels可以作为一个集中化和协作式库。享受他人劳动的成果。? 如果功能尚未支持,可以考虑将您的Python3代码提交到GitHub库中以供将来使用。以下是一个快速入门示例:
|
|
当前支持的工具和数据点可以通过一个方法查看。
|
|
项目启动
作为SANS信息安全管理工程硕士(MSISE)的一部分,我最近开始了一个新项目。该项目需要解决安全领域中尚未解决的问题。我为自己设定了一个优先事项,即这将是一个Python编码项目,因为这是我需要提升的技能集。在参加一门关于CIS关键控制的SANS课程时,我了解到实施安全控制的一个关键成功因素是自动化。这样,当您转向新项目时,控制措施仍然有效。这是扩展安全性的好方法,也是我一直试图融入项目中的东西。考虑到这一点,我还希望该项目有助于自动化。
那么,什么符合这个范围且尚未解决?这对我来说是一个具有挑战性的问题。我开始头脑风暴我定期执行的任务以及能让我的生活更轻松的流程。我向同事发出了一些试探,并与我的顾问进行了反复讨论。
一个早期的想法是找出如何从事件或案例中归一化指示器,以便将相关数据集成到工具中并可能共享。通过一些谷歌搜索,我很快发现了安全事件响应平台(SIRP’s),如theHive项目。这既是一个胜利也是一个损失。该死,有人已经做了。哦,哇,那真的很酷,有人已经做了!
然后我开始思考一种归一化工具输出的方法。我相信这是我们作为信息安全专业人员在自己工作流中不断重新发明的东西。换句话说,我们使用的工具有很多重叠。如果您和我想枚举一个网络块的域和子域,很可能我们在该过程中至少使用一个相同的工具。所以我的想法是,当解析输出已经被做了上百次时,为什么要重做这项工作。解析输出通常没有什么特别困难的地方,特别是如果您只使用一个工具。但我们有更好的事情要做,而且如果您使用多个工具来提高发现的保真度,任务开始花费更多时间。
PyFunnels
PyFunnels登场。PyFunnels是一个Python3库,旨在聚合来自工具的数据并返回统一的数据集。尽管工具的输出可能不是标准的,但我们可以构建可靠的方法来检索数据。
考虑我们有一个或多个用于收集数据的工具。工具通常具有由多个数据点组成的输出。当我说“数据点”时,我简单地指的是IP地址、URL、域名、电子邮件、文件、登录页面等。
想法是隔离这些数据点。您为每个工具这样做的方式会有所不同,但我们需要一种统一的方法来从每个输出中获取数据点。这实际上是PyFunnels的核心,创建和存储代码以隔离数据。然后对隔离的数据进行去重和聚合。然后可以针对任何用例利用该聚合数据。
以下是我刚才描述的动画视图: 动画1:PyFunnels概念
示例场景
以一个使用五个工具(我知道是过度杀伤)收集域和子域的示例。目标是用输出来比较发现的域与已知清单。一旦我们有了这些信息,我们就可以根据需要继续进行修复,停用未经批准的服务或为它们添加适当的保护。理想情况下,这是一个持续和自动化的过程,并在有发现时生成警报。
PyFunnels的目标是加快提取数据的过程。以下是过程:
- 指定输出文件(图1)
- 实例化一个对象(图1)
- 在对象上调用一个方法,提供感兴趣的数据点(图2)
|
|
图1:示例设置
PyFunnels将返回去重和聚合的数据作为列表(图2)。
|
|
图2:示例输出
就是这样… 继续您的一天… 让数据工作… 您不需要重新发明轮子。毕竟,您可能不是第一个从该输出文件中解析这些数据的人。使用PyFunnels节省时间,并使用您或其他人先前提交的代码。
思考过程与经验教训
PyFunnels的设计是模块化的,每个工具是自己的类,每个数据点是该类的一个方法。工具类彼此独立工作。您不必为工具构建所有方法。理想情况下,每个工具都会支持它收集的每个数据点,但这可以有机地发生。以这种方式布局库使得任何级别的程序员都容易贡献,并允许PyFunnels容纳不可预见的工具数量。
这是我第一个真正的编码项目。在我确定想法后,我就开始运行它。我遇到的一个早期问题是我发现在调用每个工具时重复使用代码块。我不知道布局类和方法的最佳方式。经过同行评审和一些研究,我能够将147行代码压缩到12行。这对我来说是一个巨大的时刻,对于库的增长是必要的。我在这里学到的教训是,如果您有一个想法,开始把它组合起来。代码一开始可能看起来不太好,但您可以在开发过程中改进和完善。
结论
信息安全是一个独特的领域,我们不需要彼此竞争。跨行业,在同一行业内,不竞争符合我们的最佳利益。这是该项目的一个大动机,我想找到一种协作方式并为社区提供价值。
我相信随着一些社区的采用,这可以变得非常强大。PyFunnels的概念可以简化为,当您编写Python3代码从工具中隔离数据时,提交代码以便它可以被重用。
我的目标是让PyFunnels对其他专业人员有用,并让它增长以支持大范围的工具和数据点。如果您使用该库和/或查看代码,我很乐意得到反馈。编码对我来说是新的,我确信我的实现可以改进。
感谢阅读,我希望您发现该库有用并能在您的工作流中使用它。
PyFunnels库可以在以下位置找到: https://github.com/packetvitality/PyFunnels https://pypi.org/project/PyFunnels/
我作为MSISE一部分撰写的完整论文可以在以下位置找到: https://www.sans.org/reading-room/whitepapers/OpenSource/pyfunnels-data-normalization-infosec-workflows-38785
注意:自从我写论文以来,我已经打包了库并进行了修改。请参考Github和库内的文档以获取当前使用示例