# MSTIC Jupyter 和 Python 安全工具  [](https://dev.azure.com/mstic-detections/mstic-jupyter/_build/latest?definitionId=14&branchName=main) [](https://pepy.tech/project/msticpy) Microsoft 威胁情报 Python 安全工具。 **msticpy** 是一个用于在 Jupyter Notebook 中进行信息安全调查和追捕的库。它提供以下功能: - 从多个来源查询日志数据 - 使用威胁情报、地理位置和 Azure 资源数据丰富数据 - 从日志中提取活动指标 (IoA) 并解码编码数据 - 执行高级分析,例如异常会话检测和时间序列分解 - 使用交互式时间线、进程树和多维形态图可视化数据 它还包含一些节省时间的笔记本工具,例如用于设置查询时间边界、从列表中选择和显示项目以及配置笔记本环境的小部件。 <img src="https://assets.kitploit.com/production/public/readmes/4869/97c3e7b33ee7d0b34e5cb314f29bc107b50e55772d00da4422ad32e48b1d0b91.png" alt="时间线" title="Msticpy 时间线控件" height="300" /> **msticpy** 包最初是为支持 [Microsoft Sentinel](https://www.microsoft.com/en-us/security/business/siem-and-xdr/microsoft-sentinel/) 的 [Jupyter Notebook](https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/) 编写而开发的。虽然 Azure Sentinel 仍然是我们工作的重点,但我们正在扩展数据查询/采集组件以从其他来源提取日志数据(目前支持 Splunk、Microsoft Defender for Endpoint 和 Microsoft Graph,但我们正在积极开发对其他 SIEM 平台数据的支持)。大多数组件也可以与任何来源的数据一起使用。Pandas DataFrames 被用作几乎所有组件的通用输入和输出格式。此外,还有一个数据提供程序,用于简化从本地 CSV 文件和 pickle 化 DataFrame 处理数据的过程。 该包满足安全调查人员和追捕者的三个核心需求: - 获取和丰富数据 - 分析数据 - 可视化数据 我们欢迎反馈、错误报告、新功能建议和贡献。 ## 安装 核心安装: `pip install msticpy` 或者用于最新的开发版本: `pip install git+https://github.com/microsoft/msticpy` ## 升级 要将 msticpy 升级到最新的公开发布的非 beta 版本,请运行: `pip install --upgrade msticpy` 请注意,最佳实践是将您的 msticpyconfig.yaml 复制并存储在磁盘上(但在 msticpy 文件夹之外),并通过环境变量引用它。这可以防止您在每次更新 msticpy 安装时丢失配置。 ## 文档 完整文档位于 [ReadTheDocs](https://msticpy.readthedocs.io/en/latest/) 许多模块的示例笔记本位于 [docs/notebooks](https://github.com/microsoft/msticpy/blob/master/docs/notebooks) 文件夹中以及附带的笔记本中。 您还可以浏览本文档末尾引用的示例笔记本,了解在上下文中使用的一些功能。您可以在 mybinder.org 上的交互式演示中体验一些包功能。 [](https://mybinder.org/v2/gh/Azure/Azure-Sentinel-Notebooks/master?filepath=A%20Tour%20of%20Cybersec%20notebook%20features.ipynb) --- ## 日志数据采集 QueryProvider 是一个可扩展的查询库,目标为 Microsoft Sentinel/Log Analytics、Microsoft XDR、Splunk、OData 和其他日志数据源。它还特别支持 [Mordor](https://github.com/OTRF/mordor) 数据集和使用本地数据。 内置参数化查询允许通过单个函数调用运行复杂查询。使用简单的 YAML 模式添加您自己的查询。 [数据查询笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/Data_Queries.ipynb) ## 数据丰富 ### 威胁情报提供程序 TILookup 类可以跨多个 TI 提供程序查找 IoC。内置提供程序包括 AlienVault OTX、IBM XForce、VirusTotal 和 Azure Sentinel。 输入可以是单个 IoC 可观察对象,也可以是包含多个可观察对象的 pandas DataFrame。根据提供程序的不同,您可能需要一个账户和一个 API 密钥。某些提供程序还会强制限制(尤其是免费层),这可能会影响批量查找。 [TIProviders](https://msticpy.readthedocs.io/en/latest/data_acquisition/TIProviders.html) 和 [TILookup 使用笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/TIProviders.ipynb) ### 地理位置数据 GeoIP 查找类允许您匹配 IP 地址的地理位置,可使用以下之一: - GeoLiteLookup - Maxmind Geolite(参见 <https://www.maxmind.com>) - IPStackLookup - IPStack(参见 <https://ipstack.com>) <img src="https://assets.kitploit.com/production/public/readmes/4869/cfda22181d7483aad3a5f9b26a66c0cdbac4b83d6d5b17ccc5ed230225785fe2.png" alt="Folium 地图" title="绘制地理 IP 位置" height="200" /> [GeoIP 查找](https://msticpy.readthedocs.io/en/latest/data_acquisition/GeoIPLookups.html) 和 [GeoIP 笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/GeoIPLookups.ipynb) ### Azure 资源数据、存储和 Azure Sentinel API AzureData 模块包含用于丰富有关 Azure 主机详细信息的函数,这些详细信息通过 Azure API 公开。AzureSentinel 模块允许您查询事件、检索检测器和追捕查询。AzureBlogStorage 让您能够读取和写入 blob 存储中的数据。 [Azure 资源 API](https://msticpy.readthedocs.io/en/latest/data_acquisition/AzureData.html), [Azure Sentinel API](https://msticpy.readthedocs.io/en/latest/data_acquisition/Sentinel.html), [Azure 存储](https://msticpy.readthedocs.io/en/latest/data_acquisition/AzureBlobStorage.html) ## 安全分析 此子包包含几个有助于安全调查和追捕的模块: ### 异常序列检测 检测 Office、Active Directory 或其他日志数据中的异常事件序列。您可以提取会话(例如,同一账户发起的活动),并识别和可视化异常的活动序列。例如,检测攻击者在某人的邮箱上设置邮件转发规则。 [异常会话](https://msticpy.readthedocs.io/en/latest/data_analysis/AnomalousSequence.html) 和 [异常序列笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/AnomalousSequence.ipynb) ### 时间序列分析 时间序列分析允许您识别日志数据中的异常模式,同时考虑正常的季节性变化(例如,一天中的小时、一周中的天数等事件的常规起伏)。通过分析和可视化,可以突出显示任何数据集中异常的业务流量或事件活动。 <img src="https://assets.kitploit.com/production/public/readmes/4869/4fd2983bca85a193be350f49bdaeb72fc1d926a40242c044bda8701f0759b886.png" alt="时间序列异常" title="时间序列异常" height="300" /> [时间序列](https://msticpy.readthedocs.io/en/latest/visualization/TimeSeriesAnomalies.html) ## 可视化 ### 事件时间线 在交互式时间线上显示任何日志事件。使用 [Bokeh 可视化库](https://bokeh.org/),时间线控件使您能够可视化一个或多个事件流,交互式缩放到特定时间段,并查看绘制事件的详细信息。 <img src="https://assets.kitploit.com/production/public/readmes/4869/c045bd779bafa8ae992a1d2b3741f4a71c5adaf4466d37c870c51f1cb00ade10.png" alt="时间线" title="Msticpy 时间线控件" height="300" /> [时间线](https://msticpy.readthedocs.io/en/latest/visualization/EventTimeline.html) 和 [时间线笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/EventTimeline.ipynb) ### 进程树 进程树功能有两个主要组件: - 进程树创建 - 从主机获取进程创建日志,并构建数据集中进程之间的父子关系。 - 进程树可视化 - 获取处理后的输出,使用 Bokeh 图显示交互式进程树。 还有一组实用函数,用于从处理后的数据集中提取单个和部分树。 <img src="https://assets.kitploit.com/production/public/readmes/4869/30c4a7e6484a64a4f9434396b7b26a442e0ab697e26e2bd6d00f0abe754df60b.png" alt="进程树" title="交互式进程树" height="400" /> [进程树](https://msticpy.readthedocs.io/en/latest/visualization/ProcessTree.html) 和 [进程树笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/ProcessTree.ipynb) ## 数据处理和实用函数 ### 枢轴函数 允许您以“以实体为中心”的方式使用 *MSTICPy* 功能。与特定实体类型(例如 Host、IpAddress、Url)相关的所有函数、查询和查找都汇集为该实体类的方法。因此,如果您想对 IP 地址进行操作,只需加载 IpAddress 实体并浏览其方法即可。 [枢轴函数](https://msticpy.readthedocs.io/en/latest/data_analysis/PivotFunctions.html) 和 [枢轴函数笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/PivotFunctions.ipynb) ### base64unpack Base64 和归档 (gz, zip, tar) 提取器。它将尝试识别任何 base64 编码的字符串并尝试解码。如果结果看起来像支持的归档类型之一,它将解包内容。每次解码/解包的结果将重新检查是否包含更多 base64 内容,直到达到指定的深度。 [Base64 解码](https://msticpy.readthedocs.io/en/latest/data_analysis/Base64Unpack.html) 和 [Base64Unpack 笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/Base64Unpack.ipynb) ### iocextract 使用正则表达式查找入侵指标 (IoC) 模式 - IP 地址、URL、DNS 域名、哈希、文件路径。输入可以是单个字符串或 pandas DataFrame。 [IoC 提取](https://msticpy.readthedocs.io/en/latest/data_analysis/IoCExtract.html) 和 [IoCExtract 笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/IoCExtract.ipynb) ### eventcluster(实验性) 此模块旨在将大量事件总结为不同模式的聚类。高容量重复事件通常会使查看独特和有趣的项目变得困难。 <img src="https://assets.kitploit.com/production/public/readmes/4869/ce85802e87219053d8ac425fd3fb3d07ba8f638bcbd0078756a9f4f0bcbb1d06.png" alt="聚类" title="基于命令行可变性的聚类" height="400" /> 这是一个使用 SciKit Learn DBScan 实现的无监督学习模块。 [事件聚类](https://msticpy.readthedocs.io/en/latest/data_analysis/EventClustering.html) 和 [事件聚类笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/EventClustering.ipynb) ### auditdextract 用于加载和解码 Linux 审计日志的模块。它将共享相同消息 ID 的消息合并为单个事件,解码十六进制编码的数据字段,并执行一些特定于事件的格式化和规范化(例如,对于进程启动事件,它将重新组装进程命令行参数为单个字符串)。 ### syslog_utils 用于支持对仅启用 syslog 日志记录的 Linux 主机进行调查的模块。包括用于整理主机数据、聚类登录事件以及检测包含可疑活动的用户会话的函数。 ### cmd_line 一个支持检测已知恶意命令行活动或可疑命令行活动模式的模块。 ### domain_utils 一个支持调查域名和 URL 的模块,包含验证域名和截图 URL 的函数。 ### 笔记本小部件 这些是基于 [Jupyter ipywidgets](https://ipywidgets.readthedocs.io/) 集合构建的,将信息安全工作中有用的常见功能(如列表选择器、查询时间边界设置和事件显示)分组为易于使用的格式。 <img src="https://assets.kitploit.com/production/public/readmes/4869/26d223a31e1750c7407e4e562689fbfb4c92243981b794d649f35d9dafd06836.png" alt="时间跨度小部件" title="查询时间设置器" height="100" /> <img src="https://assets.kitploit.com/production/public/readmes/4869/5491bab202c5644d32270ea256b0e6f9173346595cd7245120d35330dcfe2e8b.png" alt="警报浏览器" title="警报浏览器" height="300" /> --- ## 示例 MSTICPy 笔记本 [MSTICPy 笔记本](https://github.com/microsoft/msticpy/blob/master/docs/notebooks/) ## Azure Sentinel 笔记本 GitHub 上的更多笔记本 [Azure Sentinel 笔记本](https://github.com/Azure/Azure-Sentinel-Notebooks) 示例笔记本: - [MSTICPy 功能游览](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/A%20Tour%20of%20Cybersec%20notebook%20features.ipynb) - [账户浏览器](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Entity%20Explorer%20-%20Account.ipynb) - [域名和 URL 浏览器](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Entity%20Explorer%20-%20Domain%20and%20URL.ipynb) - [IP 浏览器](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Entity%20Explorer%20-%20IP%20Address.ipynb) - [Linux 主机浏览器](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Entity%20Explorer%20-%20Linux%20Host.ipynb) - [Windows 主机浏览器](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Entity%20Explorer%20-%20Windows%20Host.ipynb) - [Azure Sentinel 笔记本入门指南](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/A%20Getting%20Started%20Guide%20For%20Azure%20Sentinel%20ML%20Notebooks.ipynb) 直接在 GitHub 上查看,或将链接复制粘贴到 [nbviewer.org](https://nbviewer.jupyter.org/) ## 带有保存数据的笔记本示例 有关此包实际使用的更多示例,请参阅以下笔记本: - [简单机器学习](https://github.com/Azure/Azure-Sentinel-Notebooks/blob/master/Machine%20Learning%20in%20Notebooks%20Examples.ipynb) ## 支持的平台和包 - msticpy 是操作系统无关的 - 需要 [Python 3.10 或更高版本](https://www.python.org/dev/peps/pep-0494/) - 有关更多详细信息和版本要求,请参阅 [requirements.txt](https://github.com/microsoft/msticpy/blob/main/requirements.txt) --- ## 贡献 有关(简要)开发者指南,请参阅此维基文章 [贡献者指南](https://github.com/microsoft/msticpy/wiki/Contributor-guidelines) 本项目欢迎贡献和建议。大多数贡献要求您同意一份贡献者许可协议 (CLA),声明您有权授予我们使用您贡献的权利。有关详细信息,请访问 <https://cla.microsoft.com>。 当您提交拉取请求时,CLA 机器人会自动确定您是否需要提供 CLA,并以适当方式装饰 PR(例如,标签、评论)。只需按照机器人提供的说明操作即可。您只需要在我们使用 CLA 的所有仓库中执行此操作一次。 本项目已采用 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。有关更多信息,请参阅 [行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/),或通过 [[email protected]](mailto:[email protected]) 联系提出任何其他问题或评论。