教程:开始使用 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy
备注
Azure Sentinel 现在称为 Microsoft Sentinel,我们将在几周内更新相关页面。 详细了解最近的 Microsoft 安全性增强。
本教程介绍如何运行“Microsoft Sentinel ML Notebook 入门指南”笔记本,该笔记本设置了用于在 Microsoft Sentinel 中运行 Jupyter 笔记本和运行简单数据查询的基本配置。
“Microsoft Sentinel ML Notebook 入门指南”笔记本使用 MSTICPy,这是一个由 Microsoft 构建的网络安全工具 Python 库,可提供威胁搜寻和调查功能。
MSTICPy 减少了客户需要为 Microsoft Sentinel 编写的代码量,并提供以下功能:
- 数据查询功能,针对 Microsoft Sentinel 表、Microsoft Defender for Endpoint、Splunk 和其他数据源。
- 使用 TI 提供商(例如 VirusTotal 和 AlienVault OTX)进行威胁情报查找。
- 扩充功能,如 IP 地址的地理定位、入侵指标 (IoC) 提取和 WhoIs 查找。
- 使用事件时间线、流程树和地理映射的可视化工具。
- 高级分析,例如时序分解、异常检测和聚类分析。
本教程中的步骤介绍如何在 Azure ML 工作区中通过 Microsoft Sentinel 来运行“Microsoft Sentinel ML 笔记本入门指南”笔记本。 在其他环境(包括本地)中执行类似步骤以运行笔记本时,也可以使用此教程作为指南。
有关更多信息,请参阅使用笔记本进行调查和使用 Jupyter 笔记本搜寻安全威胁。
备注
某些 Microsoft Sentinel 笔记本不使用 MSTICPy,例如“凭据扫描器”笔记本或 PowerShell 和 C# 示例。 如果笔记本不使用 MSTICpy,则不需要本文中所述的 MSTICPy 配置。
先决条件
-
若要在 Microsoft Sentinel 中使用 notebook,请确保你具有所需的权限。 有关详细信息,请参阅管理对 Microsoft Sentinel 笔记本的访问。
-
若要执行本教程中的步骤,需要 Python 3.6 或更高版本。 在 Azure ML 中,可以使用 Python 3.8 内核(推荐)或 Python 3.6 内核。
-
此笔记本使用 MaxMind GeoLite2 地理定位查找服务来查找 IP 地址。 若要使用 MaxMind GeoLite2 服务,需要帐户密钥。 您可以在 Maxmind 注册页面注册一个免费帐户和密钥。
-
此笔记本使用 VirusTotal (VT) 作为威胁情报源。 若要使用 VirusTotal 威胁情报查找,需要一个 VirusTotal 帐户和 API 密钥。
可以在 VirusTotal 入门页上注册一个免费的 VT 帐户。 如果已经是 VirusTotal 用户,可以使用现有密钥。
警告
如果使用 VT 企业密钥,请存储在 Azure 密钥保管库,而不是存储在 msticpyconfig.yaml 文件中。 有关详细信息,请参阅 MSTICPY 文档中的将机密指定为密钥保管库机密。
如果不想立即设置 Azure 密钥保管库,请注册并使用免费帐户,直到可以设置密钥保管库存储。
运行并初始化“入门指南”笔记本
此过程介绍如何启动笔记本并初始化 MSTICpy。
-
在 Microsoft Sentinel 中,选择左侧的“笔记本”。
-
从“模板”选项卡中,选择“Microsoft Sentinel ML Notebook 入门指南”>“保存 notebook”以将其保存到 Azure ML 工作区。
选择“启动笔记本”以运行笔记本。 该笔记本包含一系列单元:
- Markdown 单元包含文本和图形以及使用笔记本的说明
- “代码”单元包含执行笔记本功能的可执行代码
读取和运行代码单元
请按顺序读取并运行代码单元。 跳过单元或乱序运行可能会导致笔记本随后出现错误。
选择每个单元左侧的播放按钮即可运行每个单元。 根据正在执行的功能,单元中的代码可能运行得非常快,或者可能需要几秒钟才能完成。
运行时,播放按钮变为加载微调控件,并且在单元底部显示状态“
Executing
”以及已用时间。提示
如果笔记本似乎没有按照描述的那样工作,请重新启动内核并从头开始运行笔记本。 例如,如果“入门指南”笔记本中的任何单元运行时间超过一分钟,请尝试重新启动内核并重新运行笔记本。
“入门指南”笔记本包含有关 Jupyter 笔记本基本使用的说明,包括重新启动 Jupyter 内核。
阅读并运行“Jupyter Notebook 简介”部分中的单元后,便可以开始配置任务,从“设置笔记本环境”部分开始。
-
运行笔记本的“设置笔记本环境”部分中的第一个代码单元,其中包括以下代码:
Python# import some modules needed in this cell from pathlib import Path from IPython.display import display, HTML REQ_PYTHON_VER="3.6" REQ_MSTICPY_VER="1.2.3" display(HTML("Checking upgrade to latest msticpy version")) %pip install --upgrade --quiet msticpy[azuresentinel]>=$REQ_MSTICPY_VER # intialize msticpy from msticpy.nbtools import nbinit nbinit.init_notebook( namespace=globals(), extra_imports=["urllib.request, urlretrieve"] ) pd.set_option("display.html.table_schema", False)
初始化状态显示在输出中。 由于尚未配置任何内容,应该会出现有关
Missing msticpyconfig.yaml
文件中缺少设置的配置警告。
备注
大多数 Microsoft Sentinel 笔记本以 MSTICpy 初始化单元开始,该单元的作用是:
- 定义笔记本所需的 Python 和 MSTICPy 的最低版本。
- 确保安装了最新版本的 MSTICPy。
- 导入并运行
init_notebook
函数。
创建配置文件
基本初始化后,便可以使用基本设置创建配置文件,以便使用 MSTICPy。
许多 Microsoft Sentinel 笔记本连接到 VirusTotal (VT) 等外部服务以收集和扩充数据。 若要连接到这些服务,需要设置和存储配置详细信息,例如身份验证令牌。 请在配置文件中包含此数据,这样便无需在每次使用笔记本时都必须输入身份验证令牌和工作区详细信息。
MSTICPy 使用 msticpyconfig.yaml 存储各种配置详细信息。 默认情况下,一个 msticpyconfig.yaml 文件由笔记本初始化函数生成。 如果从 Microsoft Sentinel 门户克隆此 notebook,Microsoft Sentinel 工作区数据将填充此配置文件。 此数据是从 config.json 文件中读取的,该文件是在启动笔记本时在 Azure ML 工作区中创建的。 有关详细信息,请参阅配置 MSTICPy 包配置文档。
以下部分介绍了如何向 msticpyconfig.yaml 文件添加其他配置详细信息。
备注
如果再次运行“入门指南”笔记本,并且已经有一个最低配置的 msticpy config.yaml 文件,则 init_notebook
函数不会覆盖或修改你现有的文件。
提示
在任何时间点,选择 MSTICPy 配置工具中的 -Help 下拉菜单即可获得更多说明和详细文档的链接。
显示 MSTICPy 设置编辑器
-
在代码单元中,运行以下代码以导入
MpConfigEdit
工具并显示 msticpyconfig.yaml 文件的设置编辑器:Pythonfrom msticpy.config import MpConfigEdit mpedit = MpConfigEdit( "msticpyconfig.yaml") mpedit.set_tab("AzureSentinel") display(mpedit)
例如:
设置编辑器中显示的自动创建的 msticpyconfig.yaml 文件包含 Microsoft Sentinel 部分中的两个条目。 这些都填充了从中克隆笔记本的 Microsoft Sentinel 工作区的详细信息。 一个条目包含你的工作区名称,另一个条目名为 Default。
MSTICPy 允许存储多个 Microsoft Sentinel 工作区的配置并允许切换配置。 Default 条目可在默认情况下对“主”工作区进行身份验证,而无需明确命名。 如果添加其他工作区,可以将其中任何一个配置为 Default 条目。
备注
在 Azure ML 环境中,设置编辑器可能需要 10 到 20 秒才会出现。
-
验证当前的设置,然后选择“保存设置”。
添加威胁情报提供程序设置
此过程描述了如何将 VirusTotal API 密钥存储在 msticpyconfig.yaml 文件中。 可以选择将 API 密钥上传到 Azure 密钥保管库,但必须先配置密钥保管库设置。 有关详细信息,请参阅配置密钥保管库设置。
在 MSTICPy 设置编辑器中添加 VirusTotal 详细信息:
-
在代码单元中输入以下代码并运行:
Pythonmpedit.set_tab("TI Providers") mpedit
-
在“TI 提供程序”选项卡中,选择“添加提供程序”>“VirusTotal”>“添加”。
-
在“身份验证密钥”下,选择“存储”选项旁边的“文本”。
-
在“值”字段中,粘贴 API 密钥。
-
选择更新,然后选择设置编辑器底部的“保存设置”。
提示
有关其他受支持的威胁情报提供程序的详细信息,请参阅 MSTICPy 文档中的威胁情报提供程序和 Microsoft Sentinel 中的威胁情报集成。
添加 GeoIP 提供程序设置
此过程描述了如何在 msticpyconfig.yaml 文件中存储 MaxMind GeoLite2 帐户密钥,这样你的笔记本便可以使用针对 IP 地址的地理定位查找服务。
在 MSTICPy 设置编辑器中添加 GeoIP 提供程序设置:
-
在一个空白的代码单元中输入以下代码并运行:
Pythonmpedit.set_tab("GeoIP Providers") mpedit
-
在“GeoIP 提供程序”选项卡中,选择“添加提供程序”>“GeoIPLite”>“添加”。
-
在“值”字段中,输入 MaxMind 帐户密钥。
-
如果需要,更新用于存储下载的 GeoIP 数据库的默认 ~/.msticpy 文件夹。
- 在 Windows 上,此文件夹映射到 %USERPROFILE%/.msticpy。
- 在 Linux 或 macOS 上,此路径映射到主文件夹中的 .msticpy 文件夹。
提示
有关其他支持的地理定位查找服务的更多信息,请参阅 MSTICPy GeoIP 提供程序文档。
配置 Azure Cloud 设置
如果你的组织不使用 Azure 公有云,则必须在设置中指定此项才能成功进行身份验证并使用来自 Microsoft Sentinel 和 Azure 的数据。 有关详细信息,请参阅指定 Azure 云和默认 Azure 身份验证方法。
验证设置
在设置编辑器中选择“验证设置”。
应该会出现有关配置缺少的警告消息,但不应收到任何有关威胁情报提供程序或 GeoIP 提供程序设置的警告消息。
根据你的环境,可能还需要配置密钥保管库设置或指定 Azure 云。
如果由于验证而需要进行任何更改,请进行这些更改,然后选择“保存设置”。
完成后,选择“关闭”按钮以隐藏验证输出。
有关详细信息,请参阅:适用于 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy 的高级配置
加载已保存的 MSTICPy 设置
在创建配置文件过程中,你已将设置保存到你的本地 msticpyconfig 文件。
但在重新启动内核或运行另一个笔记本之前,MSTICPy 不会自动重新加载这些设置。 若要强制 MSTICPy 从新配置文件重新加载,请使用以下代码继续下一个代码单元并运行它:
import msticpy
msticpy.settings.refresh_config()
测试笔记本
由于已经初始化了你的环境并为工作区配置了基本设置,因此要使用 MSTICPy QueryProvider
类来测试笔记本。 QueryProvider
查询数据源,在本例中为 Microsoft Sentinel 工作区,并使查询的数据可用于在笔记本中查看和分析。
使用以下过程创建 QueryProvider
类的实例、从笔记本向 Microsoft Sentinel 进行身份验证,以及使用各种不同的参数选项查看和运行查询。
提示
可以加载 QueryProvider
的多个实例以用于多个 Microsoft Sentinel 工作区或其他数据提供程序,例如 Microsoft Defender for Endpoint。
加载 QueryProvider
若要为 AzureSentinel
加载 QueryProvider
,请使用以下代码转到单元并运行该单元:
# Initialize a QueryProvider for Microsoft Sentinel
qry_prov = QueryProvider("AzureSentinel")
备注
如果在加载 Microsoft Sentinel 驱动程序时看到警告 Runtime dependency of PyGObject is missing
,请参阅错误:缺少 PyGObject 的运行时依赖项。 此警告不会影响笔记本功能。
从笔记本对你的 Microsoft Sentinel 工作区进行身份验证
在 Azure ML 笔记本中,身份验证默认使用用于对 Azure ML 工作区进行身份验证的凭据。
使用托管标识进行身份验证
运行以下代码,对 Sentinel 工作区进行身份验证。
# Get the default Microsoft Sentinel workspace details from msticpyconfig.yaml
ws_config = WorkspaceConfig()
# Connect to Microsoft Sentinel with our QueryProvider and config details
qry_prov.connect(ws_config)
笔记本中将显示类似于以下内容的输出:
使用 Azure CLI 缓存登录令牌
若要避免在重新启动内核或运行其他笔记本的情况下重新进行身份验证,可以使用 Azure CLI 来缓存登录令牌。
计算实例上的 Azure CLI 组件缓存一个刷新令牌,可供重复使用,直到令牌超时。MSTICPy 会自动使用 Azure CLI 凭据(如果可用)。
若要使用进行身份验证 Azure CLI,请在空白单元中输入以下内容并运行:
!az login
备注
如果重启计算实例或切换到其他实例,将需要重新进行身份验证。 有关详细信息,请参阅 Microsoft Sentinel Notebook GitHub 存储库 wiki 中的使用 Azure CLI 缓存凭据部分。
查看 Microsoft Sentinel 工作区数据架构和内置的 MSTICPy 查询
连接到 Microsoft Sentinel QueryProvider 之后,可以通过查询 Microsoft Sentinel 工作区数据架构来理解可查询的数据类型。
Microsoft Sentinel QueryProvider 有一个 schema_tables
属性,可提供架构表的列表,还有一个 schema
属性,这其中还包括每个表的列名和数据类型。
查看 Microsoft Sentinel 架构中的前 10 个表:
转到包含以下代码的下一个单元,并运行该单元。 可以省略 [:10]
以列出工作区中的所有表。
# Get list of tables in the Workspace with the 'schema_tables' property
qry_prov.schema_tables[:10] # Output only a sample of tables for brevity
# Remove the "[:10]" to see the whole list
随即显示以下输出:
Sample of first 10 tables in the schema
['AACAudit',
'AACHttpRequest',
'AADDomainServicesAccountLogon',
'AADDomainServicesAccountManagement',
'AADDomainServicesDirectoryServiceAccess',
'AADDomainServicesLogonLogoff',
'AADDomainServicesPolicyChange',
'AADDomainServicesPrivilegeUse',
'AADDomainServicesSystemSecurity',
'AADManagedIdentitySignInLogs'] ==》spl类似
MSTICPy 还包含许多可供运行的内置查询。 使用 .list_queries()
列出可用查询,如果在调用时包含问号 (?
) 作为参数,则可以获取有关查询的特定详细信息。 或者,也可以在查询浏览器中查看查询列表和关联帮助。
查看可用查询的示例:
转到包含以下代码的下一个单元,并运行该单元。 可以省略 [::5]
以列出所有查询。
# Get a sample of available queries
print(qry_prov.list_queries()[::5]) # showing a sample - remove "[::5]" for whole list
随即显示以下输出:
Sample of queries
=================
['Azure.get_vmcomputer_for_host', 'Azure.list_azure_activity_for_account', 'AzureNetwork.az_net_analytics', 'AzureNetwork.get_heartbeat_for_ip', 'AzureSentinel.get_bookmark_by_id', 'Heartbeatget_heartbeat_for_host', 'LinuxSyslog.all_syslog', 'LinuxSyslog.list_logon_failures', 'LinuxSyslog.sudo_activity', 'MultiDataSource.get_timeseries_decompose', 'Network.get_host_for_ip','Office365.list_activity_for_ip', 'SecurityAlert.list_alerts_for_ip', 'ThreatIntelligence.list_indicators_by_filepath', 'WindowsSecurity.get_parent_process', 'WindowsSecurity.list_host_events','WindowsSecurity.list_hosts_matching_commandline', 'WindowsSecurity.list_other_events']
通过传递 ?
作为参数来获取有关查询的帮助:
# Get help about a query by passing "?" as a parameter
qry_prov.Azure.list_all_signins_geo("?")
随即显示以下输出:
Help for 'list_all_signins_geo' query
=====================================
Query: list_all_signins_geo
Data source: AzureSentinel
Gets Signin data used by morph charts
Parameters
----------
add_query_items: str (optional)
Additional query clauses
end: datetime (optional)
Query end time
start: datetime (optional)
Query start time
(default value is: -5)
table: str (optional)
Table name
(default value is: SigninLogs)
Query:
{table} | where TimeGenerated >= datetime({start}) | where TimeGenerated <= datetime({end}) | extend Result = iif(ResultType==0, "Sucess", "Failed") | extend Latitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).latitude) | extend Longitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).longitude)
在可滚动的可筛选列表中查看表和查询:
转到包含以下代码的下一个单元,并运行该单元:
qry_prov.browse_queries()
对于选定的查询,将显示所有必需的参数和可选参数,以及查询的完整文本。 例如:
有关更多信息,请参阅 MSTICPy 文档中的运行预定义查询。
备注
虽然无法从浏览器运行查询,但可以在每个查询的末尾复制并粘贴示例,以便在笔记本中的其他位置运行。
运行带有时间参数的查询
大多数查询都需要时间参数。 日期/时间字符串输入起来很乏味,而且在多个地方修改它们很容易出错。
每个查询提供程序都具有查询的默认开始时间和结束时间参数。 只要调用时间参数,默认情况下都会使用这些时间参数。 可以通过打开 query_time
控件更改默认时间范围。 更改将一直有效,直到再次更改。
转到包含以下代码的下一个单元,并运行该单元:
# Open the query time control for your query provider
qry_prov.query_time
根据需要设置 start
和 end
时间。 例如:
使用内置时间范围运行查询
将以 Pandas DataFrame 形式返回查询结果,这是一种表格数据结构,类似于电子表格或数据库表。 可以使用 pandas 函数对查询结果执行额外的筛选和分析。
下面的代码单元使用查询提供程序默认时间设置运行查询。 可以更改此范围,并再次运行代码单元以查询新的时间范围。
# The time parameters are taken from the qry_prov time settings
# but you can override this by supplying explict "start" and "end" datetimes
signins_df = qry_prov.Azure.list_all_signins_geo()
# display first 5 rows of any results
# If there is no data, just the column headings display
signins_df.head()
输出显示结果的前五行。 例如:
如果没有数据,则只显示列标题。
使用自定义时间范围运行查询
还可以创建一个新的查询时间对象并将其作为参数传递给查询,这样你便可以针对不同的时间范围运行一次性查询,而不会影响查询提供程序的默认值。
# Create and display a QueryTime control.
time_range = nbwidgets.QueryTime()
time_range
设置所需的时间范围后,可以将时间范围传递给查询函数,在与之前代码不同的单元中运行以下代码:
signins_df = qry_prov.Azure.list_all_signins_geo(time_range)
signins_df.head()
还可以使用 start
和 end
参数将日期时间值作为 Python 日期时间或日期时间字符串传递:
from datetime import datetime, timedelta
q_end = datetime.utc.now()
q_start = end – timedelta(5)
signins_df = qry_prov.Azure.list_all_signins_geo(start=q_start, end=q_end)
自定义查询
可以通过添加额外的查询逻辑来自定义内置查询,或使用 exec_query
函数来运行完整查询。
例如,大多数内置查询都支持 add_query_items
参数,可以使用该参数将筛选器或其他操作附加到查询中。
-
运行以下代码单元以添加按警报名称汇总警报数量的数据框:
Pythonfrom datetime import datetime, timedelta qry_prov.SecurityAlert.list_alerts( start=datetime.utcnow() - timedelta(28), end=datetime.utcnow(), add_query_items="| summarize NumAlerts=count() by AlertName" )
-
将完整的 KQL 查询字符串传递给查询提供程序。 查询针对连接的工作区运行,数据以 panda DataFrame 形式返回。 运行:
Python# Define your query test_query = """ OfficeActivity | where TimeGenerated > ago(1d) | take 10 """ # Pass the query to your QueryProvider office_events_df = qry_prov.exec_query(test_query) display(office_events_df.head())
有关详细信息,请参阅:
测试 VirusTotal 和 GeoLite2
检查 VirusTotal 数据中的 IP 地址:
若要使用威胁情报查看某个 IP 地址是否出现在 VirusTotal 数据中,请使用以下代码运行单元:
# Create your TI provider – note you can re-use the TILookup provider (‘ti’) for
# subsequent queries - you don’t have to create it for each query
ti = TILookup()
# Look up an IP address
ti_resp = ti.lookup_ioc("85.214.149.236")
ti_df = ti.result_to_df(ti_resp)
ti.browse_results(ti_df, severities="all")
输出会显示有关结果的详细信息。 例如:
请务必向下滚动以查看完整结果。 有关更多信息,请参阅 MSTICPy 中的威胁情报查找。
测试地理位置 IP 查找:
若要使用 MaxMind 服务获取 IP 地址的地理位置详细信息,请使用以下代码运行单元:
# create an instance of the GeoLiteLookup provider – this
# can be re-used for subsequent queries.
geo_ip = GeoLiteLookup()
raw_res, ip_entity = geo_ip.lookup_ip("85.214.149.236")
display(ip_entity[0])
输出将显示 IP 地址的地理位置信息。 例如:
ipaddress
{ 'AdditionalData': {},
'Address': '85.214.149.236',
'Location': { 'AdditionalData': {},
'CountryCode': 'DE',
'CountryName': 'Germany',
'Latitude': 51.2993,
'Longitude': 9.491,
'Type': 'geolocation',
'edges': set()},
'ThreatIntelligence': [],
'Type': 'ipaddress',
'edges': set()}
备注
第一次运行此代码时,应该会看到 GeoLite 驱动程序正在下载其数据库。
有关详细信息,请参阅 MSTICPy GeoIP 提供程序。
配置密钥保管库设置
仅当在 Azure 密钥保管库中存储机密时,本节才有意义。
在 Azure 密钥保管库中存储机密时,需要先在 Azure 全局密钥保管库管理门户中创建密钥保管库。
必需的设置是你从 Vault 属性中获得的所有值,尽管有些可能具有不同的名称。 例如:
- VaultName 显示在 Azure 密钥保管库的“属性”屏幕的左上角
- TenantId 显示为“目录 ID”
- AzureRegion 显示为“位置”
- Authority 表示 Azure 服务的云。
要从 Vault 检索机密,只需要 VaultName 、 TenantId 和 Authority 值。 如果选择从 MSTICPy 创建保管库,则需要其他值。 有关详细信息,请参阅将机密指定为密钥保管库机密。
默认情况下选择“使用密钥环”选项,并允许在本地密钥环中缓存密钥保管库凭据。 有关详细信息,请参阅密钥环文档。
注意
如果不完全信任运行笔记本的“计算”主机,请勿使用“使用密钥环”选项。
在我们的例子中,“计算”是指运行笔记本内核的 Jupyter 中心服务器,而不一定是运行浏览器的机器。 如果使用的是 Azure ML,则“计算”将是所选的 Azure ML 计算实例。 密钥环在运行笔记本内核的主机上进行缓存。
在 MSTICPy 设置编辑器中添加密钥保管库设置:
-
转到包含以下代码的下一个单元,并运行该单元:
Pythonmpedit.set_tab("Key Vault") mpedit
-
输入密钥保管库的保管库详细信息。 例如:
-
选择“保存”,然后“保存设置”。
测试密钥保管库
若要测试密钥保管库,请检查能否连接并查看机密。 如果尚未添加机密,则看不到任何详细信息。 如果需要,请将测试机密从 Azure Key Vault 门户添加到保管库,并检查该机密是否显示在 Microsoft Sentinel。
例如:
mpconfig = MpConfigFile()
mpconfig.refresh_mp_config()
mpconfig.show_kv_secrets()
注意
不要让输出显示在你保存的笔记本中。 如果输出中有真正的秘密,请在保存笔记本之前使用笔记本的“清除输出”命令。
此外,请删除笔记本的缓存副本。 例如,查看笔记本目录的 .ipynb_checkpoints 子文件夹,并删除此笔记本的所有已发现副本。 保存清除了输出的笔记本应该会覆盖检查点副本。
配置密钥保管库后,可以使用数据提供程序和 TI 提供程序部分中的“上传到 KV”按钮将所选设置移动到保管库。 MSTICPy 将根据设置的路径为秘密生成一个默认名称,例如 TIProviders-VirusTotal-Args-AuthKey
.
如果值成功上传,则设置编辑器中“值”字段的内容将被删除,底层设置将替换为占位符值。 MSTICPy 将使用此占位符值来指示在尝试检索密钥时应自动生成密钥保管库路径。
如果已将所需的机密存储在密钥保管库中,则可以在“值”字段中输入机密名称。 如果机密未存储在你的默认保管库中(在“密钥保管库”部分中指定的值),则可以指定路径 VaultName/SecretName。
当前不支持从不同租户中的保管库获取设置。 有关详细信息,请参阅将机密指定为密钥保管库机密。
指定 Azure 云和 Azure 身份验证方法
如果使用的是主权或政府 Azure 云,而不是公共或全球 Azure 云,则必须在你的设置中选择适当的云。 对于大多数组织,全球云是默认云。
还可以使用这些 Azure 设置来定义 Azure 身份验证类型的默认首选项。
要指定 Azure 云和 Azure 身份验证方法:
-
转到包含以下代码的下一个单元,并运行该单元:
Pythonmpedit.set_tab("Azure") mpedit
-
选择你的组织使用的云,或保留默认选择的“全球”选项。
-
选择以下一种或多种方法:
- 选择 env 可将 Azure 凭据存储在环境变量中。
- 选择 msi 可使用托管服务标识,这是分配给运行 Jupyter 中心的主机或虚拟机的标识。 Azure ML Compute 实例目前不支持 MSI。
- 选择 cli 可使用来自经过身份验证的 Azure CLI 会话的凭据。
- 选择 interactive 可使用采用了一次性设备代码的交互式设备授权流程。
提示
在大多数情况下,我们建议选择多种方法,例如 cli 和 interactive。 Azure 身份验证将按照上面列出的顺序尝试每种配置的方法,直到成功为止。
-
选择“保存”,然后“保存设置”。
例如:
后续步骤
本文介绍了在 Microsoft Sentinel 中将 MSTICPy 与 Jupyter 笔记本一起使用的基础知识。 有关详细信息,请参阅适用于 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy 的高级配置。
还可以尝试存储在 Microsoft Sentinel Notebook GitHub 存储库中的其他 notebook,例如:
提示
如果在另一个 Jupyter 环境中使用本教程中描述的笔记本,则可以使用任何支持 Python 3.6 或更高版本的内核。
若要在 Microsoft Sentinel 和 Azure 机器学习 (ML) 之外使用 MSTICPy 笔记本,还需要配置 Python 环境。 使用 Anaconda 发行版安装 Python 3.6 或更高版本,其中包含许多必需的包。
里面提供了一些异常检测的包可以使用:
Security Analysis
This subpackage contains several modules helpful for working on security investigations and hunting:
Anomalous Sequence Detection
Detect unusual sequences of events in your Office, Active Directory or other log data. You can extract sessions (e.g. activity initiated by the same account) and identify and visualize unusual sequences of activity. For example, detecting an attacker setting a mail forwarding rule on someone's mailbox.
Anomalous Sessions and Anomalous Sequence Notebook
Time Series Analysis
Time series analysis allows you to identify unusual patterns in your log data taking into account normal seasonal variations (e.g. the regular ebb and flow of events over hours of the day, days of the week, etc.). Using both analysis and visualization highlights unusual traffic flows or event activity for any data set.
Visualization
Event Timelines
Display any log events on an interactive timeline. Using the Bokeh Visualization Library the timeline control enables you to visualize one or more event streams, interactively zoom into specific time slots and view event details for plotted events.
Timeline and Timeline Notebook
Process Trees
The process tree functionality has two main components:
- Process Tree creation - taking a process creation log from a host and building the parent-child relationships between processes in the data set.
- Process Tree visualization - this takes the processed output displays an interactive process tree using Bokeh plots.
There are a set of utility functions to extract individual and partial trees from the processed data set.