简化分析的框架。

stoq-framework的Python项目详细描述



加入Spectrum社区

构建状态coverage statusdocumentation statusdocker buildpypilicense

概述

stoq是一个自动化框架,有助于简化平凡和重复的工作。 分析员必须完成的任务。它使分析师和devsecops团队能够 在不同的数据源、数据库、解码器/编码器之间快速转换, 以及使用丰富和一致的数据结构的许多其他任务。斯塔克 设计为企业就绪和可扩展,同时也足够精益 个别安全研究人员。

文档

如果你想了解更多关于stoq的知识,包括如何开发自己的插件, 查看完整文档

安装

stoq至少需要python 3.6,建议在apython-venv中运行

设置$stoq_home(默认为~/.stoq)文件夹、必要的插件文件夹和虚拟环境:

$ mkdir -p ~/.stoq/plugins
$ python3 -m venv ~/.stoq/.venv
$ source ~/.stoq/.venv/bin/activate

通过PIP安装:

$ pip3 install stoq-framework

或者,您可以安装最新的主控形状:

$ git clone https://github.com/PUNCH-Cyber/stoq
$ cd stoq && python3 setup.py install

插件

stoq目前有很多公开可用的插件。这些插件在插件库中单独提供,可以从stoq轻松安装。

看不到你需要的插件?查看插件或与我们联系。

什么是stoq

stoq最初是帮助我们解决遇到的问题的脚本集合。 每天。这些任务,例如解析smtp会话、提取附件、扫描 他们使用许多自定义和开放源码工具,保存结果,然后 最后分析它们占用了我们团队越来越多的资源。我们花了 越来越多的时间只是试图收集和提取数据。这个 从我们发现和分析对手的能力中夺走了宝贵的资源 瞄准我们的网络。

我们厌倦了做一个轮子里的仓鼠,决定做点什么。 2011年,我们开始开发一个不仅能解决问题的框架 但也允许我们快速改变数据流和自动化分析, 快速转移到新的数据库以存储结果,并且能够简单地响应 改变战术、技术和程序(TTP)。

最重要的是,我们的重点是建立一个工具,使我们能够 爱做的事——保护网络免受坚定、专注和无情的对手的攻击。

2015年,Stoq在多个大型运营网络中成熟后,我们 决定开源我们的工作,希望帮助更广泛的网络防御社区。 从那时起,由于反馈和贡献,我们一直在不断提高stoq。 来自Stoq用户社区。

为什么使用stoq

多年来,已经发布了其他一些开源解决方案 具有与stoq类似的能力。然而,stoq在很多方面都有本质的不同。 与其他可用的解决方案相比。一些关键区别是:

  • 极其轻巧,设计简单。
  • 各种各样的公共可用插件
  • stoq对您的工作流没有任何假设。分析员决定一切,从哪里获得数据 来源,如何扫描/解码/处理,保存到何处。
  • 不仅可以在本机/裸机环境中扩展,还可以使用诸如 kubernetes、aws lambda、google云功能、azure功能等等。
  • 便于快速扩展。你只需要一个插件。
  • 可以在企业环境中使用,也可以由个人使用,无需使用客户机/服务器 基础设施
  • 单元测试覆盖了绝大多数代码。
  • 所有核心功能和插件都利用了类型,并在提交时进行类型检查。
  • 从2011年开始积极开发,从2015年开始开源。
  • 大量最新文档。

哲学

我们与stoq的目标始终是简化日常工作,并最终实现重复性工作的自动化。 使网络防御者能够做他们最擅长的事情——关注威胁。自从我们开始开发, 这一理念没有改变。我们设计和开发的核心理念是 由python的禅宗总结

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Readability counts.

架构

stoq最强大的特性之一是它的灵活性。因为stoq是一个框架,大多数 工作实际上发生在插件中。stoq本身就是用来协调通信的 在各种插件之间并规范化它们的结果。Stoq对架构没有任何假设 这对用户最有效。因此,stoq允许高度可配置和灵活的 可由用户定义的体系结构。

例如,分析人员可以对本地计算机上的单个文件运行stoq,或者对 数以百万计的有效载荷是从电线上提取出来的——以及介于两者之间的一切。有效载荷可以是动态的 使用yara,trid,路由到插件甚至是静态属性。结果可以保存为 弹性搜索一天,然后在splunk下一天,或两者同时进行。可以监视目录 对于新文件,可以利用诸如rabbitmq或google pubsub之类的排队解决方案,或者邮箱甚至可以 监视新电子邮件。不管分析师想用stoq做什么,这只是一个 编写插件。

有关插件体系结构的概述,请参见下面的工作流:

workflow

示例输出

作为stoq输出的一个例子,让我们用exiftool扫描一个本地文件并 有效载荷的散列:

{
    "time": "...",
    "results": [
        {
            "payload_id": "00d2f069-d716-43ed-bc2f-b0bd295574d4",
            "size": 507904,
            "payload_meta": {
                "should_archive": true,
                "extra_data": {
                    "filename": "bad.exe"
                },
                "dispatch_to": []
            },
            "workers": [
                {
                    "hash": {
                        "sha256": "47c6e9b102324ea6c54dd95ad3fdf4b48b18775053b105e241a371a3731488c0",
                        "md5": "16d9f6e5491d99beb46d7ab1500c1799",
                        "sha1": "9e6414bf2802c98fbd13172817db80380c5eeb6a"
                    },
                    "exif": {
                        "SourceFile": "/tmp/tmp3r4juo8e",
                        "ExifToolVersion": 11.11,
                        "FileName": "tmp3r4juo8e",
                        "Directory": "/tmp",
                        "FileSize": 507904,
                        "FileModifyDate": "...",
                        "FileAccessDate": "...",
                        "FileInodeChangeDate": ".",
                        "FilePermissions": 600,
                        "FileType": "Win32 EXE",
                        "FileTypeExtension": "EXE",
                        "MIMEType": "application/octet-stream",
                        "MachineType": 332,
                        "TimeStamp": "2013:04:20 10:50:10-04:00",
                        "ImageFileCharacteristics": 258,
                        "PEType": 267,
                        "LinkerVersion": 9.0,
                        "CodeSize": 386048,
                        "InitializedDataSize": 120832,
                        "UninitializedDataSize": 0,
                        "EntryPoint": 208320,
                        "OSVersion": 5.0,
                        "ImageVersion": 0.0,
                        "SubsystemVersion": 5.0,
                        "Subsystem": 2
                    }
                }
            ],
            "archivers": {},
            "plugins_run": {
                "workers": [
                    [
                        "exif",
                        "hash"
                    ]
                ],
                "archivers": []
            },
            "extracted_from": null,
            "extracted_by": null
        }
    ],
    "request_meta": {
        "archive_payloads": true,
        "source": null,
        "extra_data": {}
    },
    "errors": {},
    "decorators": {},
    "scan_id": "4d053d5e-9f4e-417b-8f0e-deea0d45449d"
}

或者,从Microsoft Word文档中提取几个可执行文件:

{
    "time": "...",
    "results": [
        {
            "payload_id": "e777051a-832b-489f-b74c-9949b2c9a2ce",
            "size": 558592,
            "payload_meta": {
                "should_archive": true,
                "extra_data": {
                    "filename": "sample_doc_with_pe.doc"
                },
                "dispatch_to": []
            },
            "workers": [
                {
                    "exif": {
                        "SourceFile": "/tmp/tmpbqtisxjd",
                        "ExifToolVersion": 11.11,
                        "FileName": "tmpbqtisxjd",
                        "Directory": "/tmp",
                        "FileSize": 558592,
                        "FileModifyDate": "...",
                        "FileAccessDate": "...",
                        "FileInodeChangeDate": "...",
                        "FilePermissions": 600,
                        "FileType": "DOC",
                        "FileTypeExtension": "DOC",
                        "MIMEType": "application/msword",
                        "Identification": 42476,
                        "LanguageCode": 1033,
                        "DocFlags": 4616,
                        "System": 0,
                        "Word97": 0,
                        "Author": "xxxxxxxxxxxx",
                        "Template": "Normal",
                        "LastModifiedBy": "xxxxxxxxxxxx",
                        "Software": "Microsoft Office Word",
                        "CreateDate": "2017:11:13 21:27:00",
                        "ModifyDate": "2017:11:13 21:28:00",
                        "Security": 0,
                        "CodePage": 1252,
                        "Company": "",
                        "CharCountWithSpaces": 20,
                        "AppVersion": 14.0,
                        "ScaleCrop": 0,
                        "LinksUpToDate": 0,
                        "SharedDoc": 0,
                        "HyperlinksChanged": 0,
                        "TitleOfParts": "",
                        "HeadingPairs": [
                            "Titulo",
                            1
                        ],
                        "CompObjUserTypeLen": 36,
                        "CompObjUserType": "Documento do Microsoft Word 97-2003",
                        "LastPrinted": "0000:00:00 00:00:00",
                        "RevisionNumber": 2,
                        "TotalEditTime": 1,
                        "Words": 3,
                        "Characters": 18,
                        "Pages": 1,
                        "Paragraphs": 1,
                        "Lines": 1
                    },
                    "hash": {
                        "sha256": "4e3a682b2187f7c722b88af9bff5292fd7beb4d77233d1b3bc46f0bfc4891068",
                        "md5": "137720063880f80270a61181b021d000",
                        "sha1": "08bc0a52ee27ad0ceaa87bf394b1faa7a43bf27e"
                    }
                }
            ],
            "archivers": {},
            "plugins_run": {
                "workers": [
                    [
                        "pecarve",
                        "exif",
                        "hash"
                    ]
                ],
                "archivers": []
            },
            "extracted_from": null,
            "extracted_by": null
        },
        {
            "payload_id": "471b49f3-ea99-481f-a0a3-502826e69c73",
            "size": 31232,
            "payload_meta": {
                "should_archive": true,
                "extra_data": {
                    "offset": 11367
                },
                "dispatch_to": []
            },
            "workers": [
                {
                    "exif": {
                        "SourceFile": "/tmp/tmpyi0yx_wf",
                        "ExifToolVersion": 11.11,
                        "FileName": "tmpyi0yx_wf",
                        "Directory": "/tmp",
                        "FileSize": 31232,
                        "FileModifyDate": "...",
                        "FileAccessDate": "...",
                        "FileInodeChangeDate": "...",
                        "FilePermissions": 600,
                        "FileType": "Win32 EXE",
                        "FileTypeExtension": "EXE",
                        "MIMEType": "application/octet-stream",
                        "MachineType": 332,
                        "TimeStamp": "2016:07:15 21:44:45-04:00",
                        "ImageFileCharacteristics": 258,
                        "PEType": 267,
                        "LinkerVersion": 14.0,
                        "CodeSize": 8192,
                        "InitializedDataSize": 22528,
                        "UninitializedDataSize": 0,
                        "EntryPoint": 10496,
                        "OSVersion": 10.0,
                        "ImageVersion": 10.0,
                        "SubsystemVersion": 10.0,
                        "Subsystem": 2,
                        "FileVersionNumber": "10.0.14393.0",
                        "ProductVersionNumber": "10.0.14393.0",
                        "FileFlagsMask": 63,
                        "FileFlags": 0,
                        "FileOS": 262148,
                        "ObjectFileType": 1,
                        "FileSubtype": 0,
                        "LanguageCode": "0409",
                        "CharacterSet": "04B0",
                        "CompanyName": "Microsoft Corporation",
                        "FileDescription": "Windows Calculator",
                        "FileVersion": "10.0.14393.0 (rs1_release.160715-1616)",
                        "InternalName": "CALC",
                        "LegalCopyright": "Microsoft Corporation. All rights reserved.",
                        "OriginalFileName": "CALC.EXE",
                        "ProductName": "Microsoft Windows Operating System",
                        "ProductVersion": "10.0.14393.0",
                        "Warning": "Possibly corrupt Version resource"
                    },
                    "hash": {
                        "sha256": "c74f41325775de4777000161a057342cc57a04e8b7be17b06576412eff574dc5",
                        "md5": "40e85286357723f326980a3b30f84e4f",
                        "sha1": "2e391131f9b77a8ec0e0172113692f9e2ccceaf0"
                    }
                }
            ],
            "archivers": {},
            "plugins_run": {
                "workers": [
                    [
                        "exif",
                        "hash"
                    ]
                ],
                "archivers": []
            },
            "extracted_from": "e777051a-832b-489f-b74c-9949b2c9a2ce",
            "extracted_by": "pecarve"
        },
        {
            "payload_id": "5a6279a4-df1d-4575-8587-286f5938839d",
            "size": 507904,
            "payload_meta": {
                "should_archive": true,
                "extra_data": {
                    "offset": 50688
                },
                "dispatch_to": []
            },
            "workers": [
                {
                    "exif": {
                        "SourceFile": "/tmp/tmpsiaa54tm",
                        "ExifToolVersion": 11.11,
                        "FileName": "tmpsiaa54tm",
                        "Directory": "/tmp",
                        "FileSize": 507904,
                        "FileModifyDate": "...",
                        "FileAccessDate": "...",
                        "FileInodeChangeDate": "...",
                        "FilePermissions": 600,
                        "FileType": "Win32 EXE",
                        "FileTypeExtension": "EXE",
                        "MIMEType": "application/octet-stream",
                        "MachineType": 332,
                        "TimeStamp": "2013:04:20 10:50:10-04:00",
                        "ImageFileCharacteristics": 258,
                        "PEType": 267,
                        "LinkerVersion": 9.0,
                        "CodeSize": 386048,
                        "InitializedDataSize": 120832,
                        "UninitializedDataSize": 0,
                        "EntryPoint": 208320,
                        "OSVersion": 5.0,
                        "ImageVersion": 0.0,
                        "SubsystemVersion": 5.0,
                        "Subsystem": 2
                    },
                    "hash": {
                        "sha256": "47c6e9b102324ea6c54dd95ad3fdf4b48b18775053b105e241a371a3731488c0",
                        "md5": "16d9f6e5491d99beb46d7ab1500c1799",
                        "sha1": "9e6414bf2802c98fbd13172817db80380c5eeb6a"
                    }
                }
            ],
            "archivers": {},
            "plugins_run": {
                "workers": [
                    [
                        "exif",
                        "hash"
                    ]
                ],
                "archivers": []
            },
            "extracted_from": "e777051a-832b-489f-b74c-9949b2c9a2ce",
            "extracted_by": "pecarve"
        }
    ],
    "request_meta": {
        "archive_payloads": true,
        "source": null,
        "extra_data": {}
    },
    "errors": {},
    "decorators": {},
    "scan_id": "04f9aec3-afc7-4fa1-b179-73e46c074e81"
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量