pyspark 环境搭建_开放式威胁狩猎基础设施搭建

fcb56667b58bdb4656607d6421964d8a.gif

21ff114c0f416a2574fdaffcdbb5642b.png

自从我开始公开记录检测结果以来,已经过去了将近三年时间,我一直在想,“我怎样才能以更实用、更互动的方式分享检测结果,让世界上的任何人都能从同一个地方访问、运行和验证每一个分析结果? ”

我并不只是想分享一个静态文档,其中包含任何人都可以复制和粘贴的规则或查询。我想提供一种鼓励协作的方法,并允许其他人甚至可以查询我在分析开发期间使用的数据集。此外,我认为,如果我能找到一种方法,让其他人在不需要自己建立分析平台的情况下测试探测,这实际上将帮助那些在世界各地甚至没有这样搭建过基础设施或拥有这种资源或技能的人。

在这篇文章中,我将向你展示我是如何将来自 Threat Hunter Playbook 的检测和来自 Mordor 的预先录制的数据集与令人惊叹的 BinderHub 项目整合在一起,从而赋予社区力量,并允许世界各地的其他人在公共计算环境中交互运行每个检测,并且通过网络浏览器产生相同的结果。

我相信,在深入了解我做到这些事情背后的技术方面之前,首先理解除了 BinderHub 之外的每个项目提供了什么是很重要的。这里有很多关于它们的文档,所以我将提供一个简短的摘要和链接,供你阅读更多关于它们的内容。

f3fef61933beb6942b4a1d9b7056466a.png什么是魔多计划?

31f3d8f3e33d433d77efecf15e2cef94.png

Mordor 项目以 JSON 文件的形式提供预先记录的安全事件,这些安全事件是由模拟对抗技术生成的,以便于使用。这个模拟对抗技术可以提供 JSON 文件。预先记录的数据按照 Mitre ATT&CK 框架定义的平台、对手组、策略和技术进行分类。它的官方 Twitter 账号是@Mordor_Project。

这个项目是 Threat Hunters Forge 社区的一部分,开始是为了让我和我的兄弟  Jose Luis Rodriguez 一起做研究时分享数据集。我们意识到,我们每个人都花了太多时间模拟相同的对手技术变化,同时从行为的角度生成相同的安全事件。

例如,当对手查询 Windows 注册表项的值时会发生什么?无论是通过 PowerShell 还是 C# ,从 Windows 安全事件的角度来看,对手都会触发下面所示的几个相同事件。当然,只有在注册表对象的系统访问控制列表(SACL)中设置了正确的访问控制条目(ACE)时才可以。

428ee72e3d9fb59d8aa7c22cf554fe16.png

我们认为,如果我们可以标准化模拟环境并记录启用的遥测技术,其中一个就可以运行模拟,收集数据并与另一个共享,以便进行进一步分析。然后,我们开始考虑其他人有类似的限制或者甚至不能首先模拟这种技术,所以我们决定开始与世界共享每一个数据集,这就是 Mordor 存储库的诞生。要了解更多关于我们如何在模拟对抗性技术的同时获取数据快照或者我们如何使用预先录制的数据集的信息,你可以访问项目的 Wiki 或者观看以下视频:

f3fef61933beb6942b4a1d9b7056466a.png什么是威胁猎手 Playbook 项目?

806481d38046eb098609024934174373.png

https://twitter.com/HunterPlaybook/status/1189908361367691266

威胁猎人 Playbook 是另一个来自 Threat Hunters Forge 社区的倡议,旨在分享威胁狩猎策略并激发新的检测手段。它的官方 twitter 账号是@HunterPlaybook,我每隔一周就用它来分享一个检测 notebook。它提供了特定的安全事件链,你可以使用这些事件以首选工具或查询格式开发数据分析。该项目还遵循 MITRE ATT&CK 框架的结构,将后妥协对手行为归类为战术小组。

此外,该项目以交互式笔记本的形式记录检测策略,以提供一种简单灵活的方式来保存、复制和可视化分析和预期输出。

把笔记本想象成一个文档,你可以通过一个 web 界面访问它,这个界面允许你保存交互式会话的输入(即实时代码)和输出(即代码执行结果 / 评估代码输出) ,以及解释执行特定任务(即数据分析)的方法和步骤所需的重要说明。

b10f3168b3fd7d8f6ce156084891baf9.png

https://nbviewer.jupyter.org/github/hunters-forge/ThreatHunter-Playbook/blob/master/playbooks/windows/06_credential_access/T1003_credential_dumping/remote_interactive_taskmngr_lsass_dump.ipynb

此外,每个笔记本都带有来自 Mordor 项目的预记录数据集的链接,以验证正在分析的特定对抗技术的检测。这非常有用,因为我觉得这个特性为共享的分析提供了额外的上下文。

f3fef61933beb6942b4a1d9b7056466a.png魔多数据集和威胁狩猎手册?

我决定开始在每个检测中添加 Mordor 数据集链接。我希望它能鼓励其他人看一看正在使用的数据集,并且可能帮助我改进检测逻辑。在创建检测时,有几个事件我甚至可能(总是!)没有考虑到。

例如,对于笔记本“远程交互任务管理器 LSASS 转储” ,我认为以下数据源对开发分析非常有用

· 安全事件4778: 会话被重新连接到 Windows 工作站

· Sysmon 1: Process Creation

· Sysmon 10: Process Access

· Sysmon 11: File Create

然而,如果我看一下用于这种检测的 Mordor 数据集提供的元数据,还有一些其他的事件可能是有趣的,可以用来探索增强检测或创建额外的分析

091418925f278d89dc47dfc6ec89fa02.png

f3fef61933beb6942b4a1d9b7056466a.png那我要解决什么问题呢?

到目前为止,我相信并希望通过笔记本分享检测结果,并提供在分析开发过程中使用的预先记录的数据集的链接是有帮助的。虽然有些人可能只想复制和粘贴提供的分析,但其他人可能希望运行一些验证测试,并从数据的角度深入分析。我相信这也有助于那些刚刚起步的研究人员,他们可能希望直接进入数据分析领域,并将所提供的分析作为未来检测开发的参考或例子。

尽管这听起来很棒(我希望如此) ,它需要以下步骤,以便能够充分利用笔记本和魔多数据集的方法。

· 克隆存储库:https://github.com/hunters-forge/ThreatHunter-Playbook

· 在一个 Jupyter Notebook Server 上,存放所有由 Threat Hunter Playbook 项目提供的笔记本

· 在你的 Jupyter Notebook 服务器上安装 Python 库,如PySpark 和OpenHunt 以便运行数据分析

· 克隆存储库https://github.com/hunters-forge/mordor ,然后在建立/部署 Jupyter Notebook 服务器时,将设置的笔记本目录中的数据集进行回收,这样你就可以使用每个笔记本上的数据集

· 解压每个mordor数据集(.tar.gz文件)

对于那些熟悉 Docker 容器的人来说,上面的所有步骤都可以放在 Docker 文件 (Dockerfile) 中。然而,尽管在计算机中部署一个 docker 容器可能非常容易,但并不是每个人都具备相同的技能。因此,我开始寻找自动化部署的方法,但是我找不到一个简单的方法来分享我的研究成果,除非我对 Docker 或者 vagrant 或者 packer 或者 AWS CloudFormation 有一些基本的了解,或者通过云提供商进行部署。我一直在寻找一键式的部署方法,直到我知道 Binder 项目及其产品 BinderHub,我发现这是可以做到的。

f3fef61933beb6942b4a1d9b7056466a.png 进入 Binder 项目

Binder 项目是一个开放的社区,可以创建共享的、交互的、可重复的环境。 社区创建的主要技术产品称为 BinderHub,一个 BinderHub 的部署存在于 mybinder.org。 本网站由 Binder 项目提供公共服务,方便其他人分享他们的工作。

f3fef61933beb6942b4a1d9b7056466a.png什么是 BinderHub?

Binderhub 的主要目标是创建可供许多远程用户使用的自定义计算环境。Binderhub 使最终用户能够从 Git 存储库轻松地指定所需的计算环境。然后,BinderHub 以用户可以远程访问的 URL 为自定义计算环境提供服务。

f3fef61933beb6942b4a1d9b7056466a.pngBinderhub 是如何工作的?

根据 BinderHub 文档,它将几个服务连接在一起,以提供动态创建和注册的 Docker 镜像。

Binderhub 将所有事情连接在了一起:

· JupyterHub 提供一个可扩展的用户认证系统,并生成单用户 Jupyter Notebook 服务器。

· Repo2Docker 使用在线托管的 Git 仓库生成一个 Docker 镜像。

它利用以下服务:

· 云提供商,如谷歌云、微软 Azure、亚马逊 EC2等

· Kubernetes管理云上的资源

· Helm配置和控制库 Kubernetes

· Docker用于标准化计算环境的容器

· BinderHub可以让用户能够通过访问它来指定他们想要构建的 Git 仓库,以便使用 Git 存储库的 URL 生成 Docker 镜像

· Docker注册商 (例如 gcr.io) 用于托管容器镜像

· JupyterHub为用户部署临时容器

f3fef61933beb6942b4a1d9b7056466a.png我需要创建自己的 BinderHub 吗?

如果你愿意,你可以创建自己的 BinderHub 部署并在云端运行代码,但 Binder 团队已经为你做到了这一点,并且在 mybinder.org 上有一个 BinderHub 服务器作为公共服务运行(免费!) . 如果浏览到那个站点,只需要提供托管 Binder 存储库的名称或 URL。

c9d676a0906e2f4cb43aa4dd0d2e2662.png

你可以在 Github、 GitLab 等中托管你的 Binder 存储库,如下所示:

694d1b2435306c4bac69ff5cf3999ab6.png

f3fef61933beb6942b4a1d9b7056466a.pngBinder 仓库?

根据 Binder 文档的说明,Binder (也称为可用 Binder 存储库)是一个代码存储库,至少包含两个内容:

· 你希望人们运行的代码或内容(例如,Jupyter notebook)

· 你的环境的配置文件(即 Dockerfile)

f3fef61933beb6942b4a1d9b7056466a.png什么是「配置文件」 ?

这些是 Binder 用来构建运行代码所需的环境的文件。例如,如果我想构建一个 Jupyter Notebook 服务器,我必须告诉 Binder 如何去做。有关可用于创建环境的所有配置文件的列表,请参阅“配置文件”页。此外,还有几种方法可以做到这一点,你可以在这里看到一些 Binder 存储库的例子。

我使用 Docker 容器来建立 Jupyter notebook,所以我决定创建一个可以与其他人分享我的笔记本和研究。我还有一个名为 Notebooks Forge 的项目,这是一个围绕着 Jupyter Notebooks和Docker 容器展开的项目。这个项目致力于为防守和进攻。

f3fef61933beb6942b4a1d9b7056466a.png通过 Docker 为威胁狩猎Playbook 环境建立了一个Binder 仓库

如果你希望使用 Docker 作为你自己的 Binder 存储库,请确保你阅读了 Binder 文档,并注意文档中指定的所有需求。

正如我之前提到的,我通过项目 Notebooks Forge 中的 Docker 文件构建了 Jupyter Notebooks 服务器,并在我自己的公共 Docker 注册表中保存了已构建的 Docker 镜像。你可以下载这些镜像,然后马上使用它们。

f18448fe0ab9f1ae2cf4aba091f74dc9.png

对于我的 Binder 配置文件,我从我的公共 Docker 注册表中获取了名为 jupyter-pyspark 的 Docker 镜像,并将其作为一个基础来处理将 Threat Hunter Playbook 和 Mordor 项目与 BinderHub 部署所需的特定要求集成所需的所有步骤。你可以在这里阅读 Dockerfile 的内容。

我创建了 Docker 文件(Dockerfile 文件) ,并将其放置在 Threat Hunter Playbook GitHub 存储库的根目录下,如下所示:

5c9db8e593c2ea6f16ba4267cb5fb8a5.png

f3fef61933beb6942b4a1d9b7056466a.pngBinderHub 如何构建威胁猎手 Playbook 环境?

在后端有几个步骤,但是我所需要做的就是进入 https://mybinder.org/ 网站,填写所需的信息,如下所示。如果你注意到了,一旦我输入了 GitHub 仓库的 URL,它就会提供下面的 Binder 链接 https://mybinder.org/v2/gh/hunters-forge/ThreatHunter-Playbook/master,让我可以马上与其他人分享。

66a2c8cece1e214c3077b8d8d85efd40.png

此外,当我点击页面底部的下拉三角形时,我会得到一个活页夹徽章的信息,可以用于我的威胁狩猎 Playbook README 文件。这可以帮助实现初始步骤的自动化。

68e8724f33ff8e5474e6853e55bea986.png

最后,我所要做的就是点击橙色的 Launch 按钮,BinderHub 就开始从 Dockerfile 中构建 Jupyter Notebook 环境,该文件是我在仓库的根目录中创建的,包括所有来自 Threat Hunter Playbook 的笔记本和来自 Mordor 项目的预先录制的数据集。

出现了那个 Binder 徽章,我现在可以为任何访问仓库的人自动执行步骤。你所要做的就是点击“launch binder”。

f679c429264441cb8d2b6d377a3a892e.png

f3fef61933beb6942b4a1d9b7056466a.png但是,后端发生了什么呢?

点击 Binder 徽章后,BinderHub 会解析链接,后端会发生以下情况:

21ff114c0f416a2574fdaffcdbb5642b.png

BinderHub 检查 Docker 镜像是否已经存在于它的 Docker 注册表中。

· 如果镜像不存在(在第一次构建时) ,BinderHub 则会进行创建,BinderHub 将使用Repo2Docker 将 GitHub 存储库转换成支持 Docker Image 的 Jupyter。这需要Dockerfile在存储库中,构建镜像之后,将其推送到 BinderHub 的 Docker 注册表,并保存注册表信息以备将来参考

· 如果镜像存在,它会检查是否是最新的。如果镜像不是最新的,BinderHub将再次使用Repo2Docker 创建一个新的镜像并更新其 Docker 注册表中的镜像

如果 Docker 镜像存在并且是最新的,则 BinderHub 将 Docker 镜像注册表发送到 JupyterHub

· JupyterHub 为 Jupyter Notebook 镜像创建了一个 Kubernetes pod

· JupyterHub 监视用户的 pod 是否有活动,并在短时间的不活动后将其销毁

一旦这一切发生了,你将会看到一个 Jupyter Notebook 菜单界面和所有来自威胁狩猎 playbook 项目的笔记本。

f617a6ef4cfd947e27f4de5456f49064.png

你也可以访问这个路径(mordor > small_datasets)或小型数据集中的所有已经解压缩的预录制 Mordor 数据集,如下所示:

090d19a64b71beba5c94a1ae63146032.png

然后你可以回到主笔记本的菜单,双击任何笔记本。例如,你可以双击“远程交互任务管理器 LSASS 转储”笔记本,你将能够交互式运行每一个输入单元。第一个输入单元只是一个 markdown 文本。

9f49778f8a29e89ba433af71a6c87333.png

如果你回到主笔记本菜单,点击 Running 选项卡,你可以看到笔记本实际上是在运行,它不是一个静态视图。

672e3e0434d1177677b62b73e486fa30.png

只需在键盘上按[ SHIFT ] + [ ENTER ] ,就可以运行每个笔记本单元格。下面图片中的这些操作如下:

· 导入 python 库

· 开始一个 Spark 会话

· 读取特定 Mordor 文件的内容并返回一个 DataFrame

· 将 DataFrame 公开为 Spark SQL 临时视图,以在其顶部运行类似 SQL 的查询

019c2d8078b5d3d9777290bddde38ce6.png

这个笔记本是为 CAR-2019–08–001 而创建的,所以我决定对照 Mordor 数据集验证所提供的分析,如下所示:

f3fef61933beb6942b4a1d9b7056466a.pngCAR 解析伪代码

files = search File:Create

lsass_dump = filter files where (

  file_name = "lsass*.dmp"  and

  image_path = "C:\Windows\*\taskmgr.exe")

output lsass_dump

f3fef61933beb6942b4a1d9b7056466a.png威胁狩猎 Playbook SQL 查询

SELECT `@timestamp`, computer_name, Image, TargetFilename, ProcessGuid

FROM mordor_file

WHERE channel = "Microsoft-Windows-Sysmon/Operational"

    AND event_id = 11

    AND Image LIKE "%taskmgr.exe"

    AND lower(TargetFilename) RLIKE ".*lsass.*\.dmp"

85a705713b8baa8640b68f4cc4532ef7.png

然后,我决定添加其他到潜在的检测中,并开始加入 Sysmon 事件,以便为最初的分析添加更多的上下文。

SELECT o.`@timestamp`, o.computer_name, o.Image, o.LogonId, o.ProcessGuid, a.SourceProcessGUID, o.CommandLine

FROM mordor_file o

INNER JOIN (

    SELECT computer_name,SourceProcessGUID

    FROM mordor_file

    WHERE channel = "Microsoft-Windows-Sysmon/Operational"

        AND event_id = 10

        AND lower(TargetImage) LIKE "%lsass.exe"

        AND (lower(CallTrace) RLIKE ".*dbgcore\.dll.*" OR lower(CallTrace) RLIKE ".*dbghelp\.dll.*")

        ) a

ON o.ProcessGuid = a.SourceProcessGUID

WHERE o.channel = "Microsoft-Windows-Sysmon/Operational"

    AND o.event_id = 1

487218dadc7679bbd5c574abd67306bc.png

我还想展示如何关联数据源(即 Sysmon 和 Windows 安全事件)。并在具有唯一值的公共字段上执行 join 语句。在这个笔记本中,我展示了如何将上面的图片中我执行的第一个 Sysmon 联结的结果与 Windows Security 事件 4778: : 一个会话重新连接到指定的 LogonId 值上的一个 Window 工作站。通过 RDP 从本地到远程交互行为进行检测。

cc0dcba7a1f08dd993ef368bb874ba16.png

就是这样!我现在可以共享数据集和检测笔记本,并允许其他人从同一个地方访问、运行和验证每一个分析!

5758f67b10e6b80dacc0b6e606a1d6eb.png

f3fef61933beb6942b4a1d9b7056466a.png它看起来到底像什么?

如果你想在自己动手尝试之前通过浏览器实时看到这个过程,那么我为你整理了一个视频,向你展示了世界上任何人访问检测笔记本和预先录制的数据集是多么容易,并且能够通过 web 浏览器和开放计算环境交互式地运行每一个分析过程,充分利用 BinderHub 的好处。

我和 Jose Luis Rodriguez 在 ATT&CKcon 2.0 上分享了同一段视频,并将视频与下面的幻灯片放在一起:

f3fef61933beb6942b4a1d9b7056466a.pngBinder 使用指引

尽管 Binder 提供了一个公共的 BinderHub 服务供任何人使用,但是有一些特定的指导方针是应该遵循的。你可以点击这里了解更多。

· 如果出现了 Binder 团队定义的一些不受欢迎的行为,那么威胁狩猎 Playbook 可以在任何时候被临时禁止。我把这个项目看作是一个概念验证,一个演示和分享检测威胁的笔记本的方法,并作为公开研究的结果

· Binder 团队不希望单个存储库控制所有流向 Binder 的流量,所以他们设置了最大限度的并发用户会话,这些会话指向相同的 Binder 链接。给定存储库的最大并发用户数为100。

如果你还有其他问题,可以先看看 Binder 文档中的“常见问题”部分。非常有帮助!

f3fef61933beb6942b4a1d9b7056466a.png增强社区力量

我以前从未见过这种技术被用于信息安全社区的这类用例,我很高兴,Threat Hunter Playbook 是我们这个行业中第一个利用 BinderHub 与世界各地的其他人分享检测结果,并允许任何拥有网络浏览器的人通过笔记本和预先记录的数据集重现研究结果的公共项目。

6c250b958043bf3383c741be043ca551.png

f3fef61933beb6942b4a1d9b7056466a.png未来工作

· 我正在为一些研讨会和培训班准备一些材料,我将使用到这篇文章中提到所有项目,所以请继续关注

· 为信息安全社区创建一个官方的 BinderHub,通过笔记本分享任何研究(希望得到社区的赞助)

· 今年(2019年)我在SANS 威胁狩猎峰会和ATT&CKcon 2.0 做了一个现场演示 , 并且这是第一次,观众中的任何人都可以在演讲期间交互地运行和验证分析,而不需要我或其他人预先建立的基础设施来观看演示。我计划在2020年做更多类似的事情,帮助更多的人。

这就是这篇文章的全部内容!我希望你喜欢它!如果你想继续讨论这项技术以及本文中提到的其他项目,并了解未来培训活动的最新情况,请随时加入 Hunters Forge Slack 群组。

slack 群组邀请地址: https://launchpass.com/threathunting

此外,如果你在华盛顿地铁区域,可以随时加入NOVA Threat Hunters Forge meetup 群组。

Meetup URL: https://www.meetup.com/NOVA-Threat-Hunters-Forge/

f3fef61933beb6942b4a1d9b7056466a.pngBinderHub 性能和成本参考:

· 实时 Grafana 仪表盘

· 成本的半最新数据集

· 显示每天的成本的Binder Notebook

f3fef61933beb6942b4a1d9b7056466a.png其他参考资料

https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists

https://mordor.readthedocs.io/en/latest/

https://mybinder.readthedocs.io/en/latest/index.html

https://binderhub.readthedocs.io/en/latest/

https://github.com/hunters-forge/ThreatHunter-Playbook

https://binderhub.readthedocs.io/en/latest/overview.html#what-happens-when-a-user-clicks-a-binder-link

https://mybinder.org/

https://www.youtube.com/watch?v=fZ8S1uI_hcA

本文翻译自:https://medium.com/threat-hunters-forge/threat-hunter-playbook-mordor-datasets-binderhub-open-infrastructure-for-open-8c8aee3d8b4

fdbbf968440388977edd30c6fc114dae.png

7a8f9897e360693437a20c1e32095590.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值