Введение в MSTICPy#

Вступление#

MSTICPy или Microsoft Threat Intelligence Python Security Tools — это набор инструментов на языке Python, предназначенных для расследования инцидентов в области кибербезопасности, поиска индикаторов компрометации (IoC). Многие из инструментов возникли как Jupyter-блокноты, написанные для решения задач форензики. Некоторые инструменты полезны только в блокнотах (например, виджеты и визуализация), но многие другие можно использовать из командной строки или импортировать в свой Python-код.

Пакет отвечает трем основным потребностям в расследовании инцидентов кибербезопасности:

  • получение и обогащение данных;

  • анализ данных;

  • визуализация данных.

Дополнительно:#

Отличная обзорная статья на Хабре о том, чем Jupyter-блокноты могут помочь исследователям кибербезопасности.

Также Microsoft ежегодно проводит онлайн конференцию Infosec Jupyterthon по использованию Jupyter-блокнотов в кибербезопасности.

Варианты использования и среды#

Хотя MSTICPy изначально разрабатывался для использования с Azure Sentinel (это такая облачная SIEM от Microsoft), большая часть пакета не зависит от источников данных. Также включены компоненты запроса данных для Splunk (это платформа для сбора, хранения, обработки и анализа логов), Microsoft 365 Defender Advanced, Microsoft Graph и других.

По опыту использования MSTICPy сильно привязан к облачным API, для которых необходимы лицензии и прочие ключи доступа, что несколько снижает заявленную открытость/доступность/полезность пакета. По сути MSTICPy является всего лишь интерфейсом поверх десятка различных API и различных пакетов Python.

API-интерфейсы инструментов обычно используют формат DataFrame пакета pandas в качестве входных данных и, при необходимости, возвращают данные в виде DataFrame.

Установка#

MSTICPy требует Python 3.8 или более поздней версии. У меня получилось установить только с Python 3.11.

Если вы используете Jupyter-блокноты локально, то потребуется установить Python 3.11. Рекомендую дистрибутив Ananconda, поскольку он поставляется со многими предустановленными пакетами, необходимыми для MSTICPy.

MSTICPy имеет большое количество зависимостей и, чтобы избежать конфликтов с пакетами в существующей среде Python, вы можете создать виртуальную среду conda и установить пакет там.

Для сonda используйте команду conda create из оболочки conda.

(base) conda create --name infosec python==3.11

Активируем созданное виртуальное окружение:

(base) conda activate infosec

Следующий шаг - установка MSTICPy. Вы можете выбрать несколько конфигураций пакетов, но у меня получилось установить только с полным набором (в MacOS):

(infosec) pip install msticpy\[all]

PS. или в ОС Windows:

(infosec) pip install msticpy[all]

Вручную обновите MSTICPy до крайней версии, иначе примеры работать не будут:

(infosec) pip install --upgrade msticpy==2.2.0

Я предпочитаю использовать оболочку Jupyter Lab, поэтому далее устанавливаю ее:

(infosec) conda install -c conda-forge jupyterlab

Запукаем Jupyter Lab и радуемся, что все работает:

(infosec) jupyter lab

Вы можете импортировать MSTICPy как есть или переименовать его во что-то более простое для ввода, например mp:

import msticpy as mp

Доступна простая помощь:

help(mp)
Help on package msticpy:

NAME
    msticpy - Jupyter and Python Tools for InfoSec.

DESCRIPTION
    -----------------------------------------------
    
    Requires Python 3.8 or later.
    
    To quickly import common modules into a notebook run:
    
    >>> import msticpy as mp
    >>> mp.init_notebook()
    
    If not running in a notebook/IPython use
    >>> mp.init_notebook(globals())
    
    To see help on `init_notebook`:
    >>> help(mp.init_notebook)
    
    Search msticpy modules for a keyword:
    >>> mp.search(keyword)
    
    -----------------------------------------------
    
    Full documentation is available at:
    https://msticpy.readthedocs.io
    
    GitHub repo:
    https://github.com/microsoft/msticpy
    
    
    Package structure:
    
    - analysis - analysis functions
    - auth - authentication and secrets management
    - common - utility functions, common types, exceptions
    - config - configuration tool
    - data - queries, data access, context functions
    - datamodel - entities and pivot functions
    - init - package initialization
    - nbtools - deprecated location
    - nbwidgets - notebook widgets
    - resources - data resource files
    - transform - data transforms and decoding
    - vis - visualizations
    
    Configuration:
    
    - set MSTICPYCONFIG environment variable to point to the path
      of your `msticpyconfig.yaml` file.

PACKAGE CONTENTS
    _version
    analysis (package)
    auth (package)
    common (package)
    config (package)
    context (package)
    data (package)
    datamodel (package)
    init (package)
    nbtools (package)
    nbwidgets (package)
    sectools (package)
    transform (package)
    vis (package)

SUBMODULES
    entities
    settings

DATA
    GeoLiteLookup = <msticpy.common.utility.types.SingletonArgsClass objec...
        GeoIP Lookup using MaxMindDB database.
        
        See Also
        --------
        GeoIpLookup : Abstract base class
        IPStackLookup : IPStack GeoIP Implementation
    
    Pivot = <msticpy.common.utility.types.SingletonClass object>
        Pivot environment loader.
    
    VERSION = '2.2.0'
    current_providers = {}

VERSION
    2.2.0

AUTHOR
    Ian Hellen, Pete Bryan, Ashwin Patil

FILE
    /Users/dm_fedorov/miniconda3/envs/infosec/lib/python3.11/site-packages/msticpy/__init__.py

Используйте функцию search, чтобы найти необходимый модуль для импорта:

mp.search("geo")

Modules matching 'geo'

ModuleHelp
msticpy.context.geoipmsticpy.context.geoip
msticpy.datamodel.entities.geo_locationmsticpy.datamodel.entities.geo_location

Инициализация MSTICpy#

Функция инициализации init_notebook предназначена для подготовки блокнота. Она делает несколько полезных вещей:

  • Импортирует некоторые распространенные (не MSTICPy) пакеты, такие как pandas, numpy, ipywidgets.

  • Импортирует ряд компонентов MSTICPy, таких как Entities.

  • Проверяет наличие действительного файла конфигурации msticpyconfig. Для некоторых элементов MSTICPy требуются параметры конфигурации. Примером могут служить поставщики Threat Intelligence, т.е. потоков данных (фидов) с индикаторами компрометации.

  • Инициализирует магию блокнота MSTICPy и средства доступа к pandas.

  • Перехватывает обработку исключений блокнота для отображения дружественных исключений MSTICPy (другие исключения не затрагиваются).

help(mp.init_notebook)
Help on function init_notebook in module msticpy.init.nbinit:

init_notebook(namespace: Optional[Dict[str, Any]] = None, def_imports: str = 'all', additional_packages: List[str] = None, extra_imports: List[str] = None, **kwargs)
    Initialize the notebook environment.
    
    Parameters
    ----------
    namespace : Dict[str, Any], optional
        Namespace (usually globals()) into which imports
        are to be populated.
        By default, it will use the ipython `user_global_ns`.
    def_imports : str, optional
        Import default packages. By default "all".
        Possible values are:
        - "all" - import all packages
        - "nb" - import common notebook packages
        - "msticpy" - import msticpy packages
        - "none" (or any other value) don't load any default packages.
    additional_packages : List[str], optional
        Additional packages to be pip installed,
        by default None.
        Packages are specified by name only or version
        specification (e.g. "pandas>=0.25")
    user_install : bool, optional
        Install packages in the "user" rather than system site-packages.
        Use this option if you cannot or do not want to update the system
        packages.
        You should usually avoid using this option with standard Conda environments.
    extra_imports : List[str], optional
        Additional import definitions, by default None.
        Imports are specified as up to 3 comma-delimited values
        in a string:
        "{source_pkg}, [{import_tgt}], [{alias}]"
        `source_pkg` is mandatory - equivalent to a simple "import xyz"
        statement.
        `{import_tgt}` specifies an object to import from the package
        equivalent to "from source_pkg import import_tgt"
        `alias` allows renaming of the imported object - equivalent to
        the "as alias" part of the import statement.
        If you want to provide just `source_pkg` and `alias` include
        an additional placeholder comma: e.g. "pandas, , pd"
    friendly_exceptions : Optional[bool]
        Setting this to True causes msticpy to hook the notebook
        exception handler. Any exceptions derived from MsticpyUserException
        are displayed but do not produce a stack trace, etc.
        Defaults to system/user settings if no value is supplied.
    verbose : Union[int, bool], optional
        Controls amount if status output, by default 1
        0 = No output
        1 or False = Brief output (default)
        2 or True = Detailed output
    config : Optional[str]
        Use this path to load a msticpyconfig.yaml.
        Defaults are MSTICPYCONFIG env variable, home folder (~/.msticpy),
        current working directory.
    no_config_check : bool, optional
        Skip the check for valid configuration. Default is False.
    verbosity : int, optional
    
    Raises
    ------
    MsticpyException
        If extra_imports data format is incorrect.
        If package with required version check has no version
        information.
mp.init_notebook()

Notebook setup completed with some warnings.

One or more configuration items were missing or set incorrectly.

Please run the Getting Started Guide for Azure Sentinel ML Notebooks notebook. and the msticpy configuration guide.

This notebook may still run but with reduced functionality.

Вы можете заполнить msticpyconfig вручную или использовать редактор настроек MSTICPy для просмотра и редактирования сохраненных там настроек.

#msticpy.MpConfigEdit()

Доступ к наборам данных Mordor#

Рассмотрим два способо загрузки данных из области кибербезопасности:

  • с помощью модуля requests;

  • с помощью MSTICPy.

Использование requests для доступа к наборам данных Mordor#

Проект Security Datasets — это инициатива с открытым исходным кодом, которая предоставляет предварительно записанные наборы данных, описывающие вредоносные действия с разных платформ, сообществу кибербезопасности для ускорения анализа данных и исследования угроз.

Начнем с импорта необходимых библиотек Python для доступа к содержимому наборов данных:

import requests
from zipfile import ZipFile
from io import BytesIO
from pandas.io import json

Мы сделаем HTTP-запрос к репозиторию Security Datasets с помощью метода GET и сохраним содержимое ответа в переменной zipFileRequest.

Важно отметить, что мы используем ссылку на необработанные данные, связанную с набором данных. Этот тип ссылок обычно начинается с https://raw.githubusercontent.com/ + ссылка на проект.

url = 'https://raw.githubusercontent.com/OTRF/Security-Datasets/master/datasets/atomic/windows/discovery/host/empire_shell_net_localgroup_administrators.zip'
zipFileRequest = requests.get(url)
type(zipFileRequest)
requests.models.Response
# Тип данных содержимого HTTP-ответа
type(zipFileRequest.content)
bytes

Мы создадим объект BytesIO для доступа к содержимому ответа и сохраним его в объекте ZipFile. Все манипуляции с данными выполняются в памяти.

zipFile = ZipFile(BytesIO(zipFileRequest.content))
type(zipFile)
zipfile.ZipFile

Любой объект ZipFile может содержать более одного файла. Мы можем получить доступ к списку имен файлов, используя метод namelist. Поскольку наборы данных содержат один файл, то будем ссылаться на первый элемент списка при извлечении файла JSON.

zipFile.namelist()
['empire_shell_net_localgroup_administrators_2020-09-21191843.json']

Мы извлечем файл JSON из сжатой папки, используя метод extract. После запуска приведенного ниже кода загрузим и сохраним файл в каталоге, указанном в параметре path.

Важно отметить, что этот метод возвращает нормализованный путь к файлу JSON. Мы сохраняем путь к каталогу в переменной datasetJSONPath и используем его при попытке прочитать файл.

datasetJSONPath = zipFile.extract(zipFile.namelist()[0], path = '../data')

print(datasetJSONPath)
../data/empire_shell_net_localgroup_administrators_2020-09-21191843.json

Теперь, когда файл загружен и известен путь к нему, мы можем прочитать файл JSON с помощью метода read_json.

Важно отметить, что при записи набора данных каждая строка файла JSON представляет собой событие. Поэтому важно установить для параметра lines значение True.

dataset = json.read_json(path_or_buf=datasetJSONPath, 
                         lines=True)

Метод read_json возвращает объект DataFrame:

type(dataset)
pandas.core.frame.DataFrame

Наконец, мы должны начать исследовать наш набор данных, используя различные функции или методы, такие как head.

dataset.head(n=1)
Keywords SeverityValue TargetObject EventTypeOrignal EventID ProviderGuid ExecutionProcessID host Channel UserID AccountType ThreadID ProcessGuid EventReceivedTime Opcode EventTime @timestamp SourceModuleType port AccountName RecordNumber Task Domain @version OpcodeValue ... AccessReason AccessList RestrictedSidCount ResourceAttributes CallerProcessName TargetSid CallerProcessId Status SourcePortName DestinationPort SourceHostname DestinationIp SourceIp DestinationIsIpv6 Initiated SourceIsIpv6 DestinationPortName DestinationHostname Service Details ShareName EnabledPrivilegeList DisabledPrivilegeList ShareLocalPath RelativeTargetName
0 -9223372036854775808 2 HKU\S-1-5-21-4228717743-1032521047-1810997296-1104\Software\Microsoft\Windows\CurrentVersion\Int... INFO 12 {5770385F-C22A-43E0-BF4C-06F5698FFBD9} 3172 wec.internal.cloudapp.net Microsoft-Windows-Sysmon/Operational S-1-5-18 User 4048 {b34bc01c-2f95-5f69-5f01-000000000900} 2020-09-21 19:18:44 Info 2020-09-21 19:18:41 2020-09-21T23:18:44.265Z im_msvistalog 64545 SYSTEM 3226968 12 NT AUTHORITY 1 0.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

1 rows × 155 columns

Использование MSTICPy для доступа к наборам данных Mordor#

import pandas as pd
from msticpy.data import QueryProvider
from msticpy.vis import mp_pandas_plot

Чтобы использовать Mordor провайдер, сначала создайте провайдер запросов Mordor. Затем вызовите функцию connect: она загрузит метаданные из Mordor и Mitre для заполнения набора запросов.

qry_prov_sd = QueryProvider("Mordor")

Ход загрузки отображается с помощью индикатора выполнения.

qry_prov_sd.connect()
Retrieving Mitre data...
Retrieving Mordor data...

После загрузки метаданных поставщик заполняется функциями запроса, которые можно использовать для извлечения наборов данных.

Вы можете увидеть список доступных запросов с помощью функции list_queries.

qry_prov_sd.list_queries()[:10]
['atomic.aws.collection.ec2_proxy_s3_exfiltration',
 'atomic.aws.discovery.aws_s3_honeybucketlogs',
 'atomic.linux.defense_evasion.host.sh_binary_padding_dd',
 'atomic.linux.discovery.host.sh_arp_cache',
 'atomic.windows.collection.host.msf_record_mic',
 'atomic.windows.credential_access.host.cmd_lsass_memory_dumpert_syscalls',
 'atomic.windows.credential_access.host.cmd_psexec_lsa_secrets_dump',
 'atomic.windows.credential_access.host.cmd_sam_copy_esentutl',
 'atomic.windows.credential_access.host.covenant_dcsync_dcerpc_drsuapi_DsGetNCChanges',
 'atomic.windows.credential_access.host.empire_dcsync_dcerpc_drsuapi_DsGetNCChanges']

Вы можете использовать функцию провайдера search_queries для поиска запросов на соответствие требуемым атрибутам.

qry_prov_sd.search_queries("empire + localgroup")
['atomic.windows.discovery.host.empire_shell_net_localgroup_administrators (Empire Net Local Administrators Group)']

Чтобы получить набор данных, выполните требуемый запрос. Все запросы доступны как атрибуты провайдера Mordor.

emp_df = qry_prov_sd.atomic.windows.discovery.host.empire_shell_net_localgroup_administrators()
emp_df.head()
https://raw.githubusercontent.com/OTRF/Security-Datasets/master/datasets/atomic/windows/discovery/host/empire_shell_net_localgroup_administrators.zip
Extracting empire_shell_net_localgroup_administrators_2020-09-21191843.json
Keywords SeverityValue TargetObject EventTypeOrignal EventID ProviderGuid ExecutionProcessID host Channel UserID AccountType ThreadID ProcessGuid EventReceivedTime Opcode EventTime @timestamp SourceModuleType port AccountName RecordNumber Task Domain @version OpcodeValue ... AccessReason AccessList RestrictedSidCount ResourceAttributes CallerProcessName TargetSid CallerProcessId Status SourcePortName DestinationPort SourceHostname DestinationIp SourceIp DestinationIsIpv6 Initiated SourceIsIpv6 DestinationPortName DestinationHostname Service Details ShareName EnabledPrivilegeList DisabledPrivilegeList ShareLocalPath RelativeTargetName
0 -9223372036854775808 2 HKU\S-1-5-21-4228717743-1032521047-1810997296-1104\Software\Microsoft\Windows\CurrentVersion\Int... INFO 12 {5770385F-C22A-43E0-BF4C-06F5698FFBD9} 3172 wec.internal.cloudapp.net Microsoft-Windows-Sysmon/Operational S-1-5-18 User 4048 {b34bc01c-2f95-5f69-5f01-000000000900} 2020-09-21 19:18:44 Info 2020-09-21 19:18:41 2020-09-21T23:18:44.265Z im_msvistalog 64545 SYSTEM 3226968 12 NT AUTHORITY 1 0.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 0 2 NaN NaN 4103 {A0C1853B-5C40-4B15-8766-3CF1C58F985A} 7456 wec.internal.cloudapp.net Microsoft-Windows-PowerShell/Operational S-1-5-21-4228717743-1032521047-1810997296-1104 User 840 NaN 2020-09-21 19:18:44 To be used when operation is just executing a method 2020-09-21 19:18:41 2020-09-21T23:18:44.265Z im_msvistalog 64545 pgustavo 162586 106 THESHIRE 1 20.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 0 2 NaN NaN 4103 {A0C1853B-5C40-4B15-8766-3CF1C58F985A} 7456 wec.internal.cloudapp.net Microsoft-Windows-PowerShell/Operational S-1-5-21-4228717743-1032521047-1810997296-1104 User 840 NaN 2020-09-21 19:18:44 To be used when operation is just executing a method 2020-09-21 19:18:41 2020-09-21T23:18:44.266Z im_msvistalog 64545 pgustavo 162587 106 THESHIRE 1 20.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 -9214364837600034816 2 NaN NaN 5158 {54849625-5478-4994-A5BA-3E3B0328C30D} 4 wec.internal.cloudapp.net Security NaN NaN 1536 NaN 2020-09-21 19:18:44 Info 2020-09-21 19:18:41 2020-09-21T23:18:44.267Z im_msvistalog 64545 NaN 1901286 12810 NaN 1 0.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 -9214364837600034816 2 NaN NaN 5156 {54849625-5478-4994-A5BA-3E3B0328C30D} 4 wec.internal.cloudapp.net Security NaN NaN 1536 NaN 2020-09-21 19:18:44 Info 2020-09-21 19:18:41 2020-09-21T23:18:44.267Z im_msvistalog 64545 NaN 1901287 12810 NaN 1 0.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 155 columns

Убедитесь, что временные метки действительно являются временными метками, а не строками.

emp_df["EventTime"] = pd.to_datetime(emp_df["EventTime"])
emp_df.mp_plot.timeline(time_column="EventTime", 
                        group_by="EventID")
Loading BokehJS ...
Column(
id = '2577', …)

Виджеты MSTICPy#

MSTICPy включает ряд виджетов, упрощающих взаимодействие с данными, особенно для пользователей, не имеющих опыта программирования.

Виджеты предназначены для выполнения ряда общих задач, которые могут потребоваться пользователю для взаимодействия с блокнотом, таких как выбор элементов из возвращенных данных или установка временных рамок для запроса.

Сами виджеты встроены в ipywidgets и доступны в модуле msticpy.nbtools.nbwidgets.

Примечание. Виджеты автоматически импортируются программой init_notebook.

Приведенный ниже код создает виджет Временной диапазон, который можно использовать, чтобы позволить пользователю установить временной диапазон. Мы говорим ему использовать дни в качестве единицы измерения и устанавливаем максимальный диапазон для выбора.

from msticpy.nbtools.nbwidgets import *

time_select = QueryTime(units="day", 
                        max_before=20, 
                        before=5, 
                        max_after=1)
time_select.display()

Затем мы можем вызвать свойства start / end и получить объекты даты и времени на основе выбора пользователя.

time_select.start
datetime.datetime(2023, 1, 2, 11, 0, 31, 313226)

Другие виджеты позволяют выбирать элементы из списка вместе с опцией текстового фильтра, чтобы помочь пользователям найти элементы:

items = ["item 1", "item 2", "item 3"]

selection = SelectItem(item_list=items, 
                       description="Select item", 
                       auto_display=True)

Существуют также специальные виджеты, такие как SelectAlert, которые позволяют пользователю выбрать конкретное предупреждение из списка предупреждений.

import pandas as pd
from msticpy.nbtools.nbdisplay import display_alert

alerts = pd.read_pickle("https://github.com/microsoft/msticpy/raw/main/tests/testdata/localdata/alerts_list.pkl")

alert_select = SelectAlert(alerts=alerts, 
                           action=display_alert)
alert_select.display()
21
TenantId 52b1ab41-869e-4138-9e40-2a4457f09bf0
TimeGenerated 2019-02-15 03:51:09
AlertDisplayName Detected suspicious file download
AlertName Detected suspicious file download
Severity Low
Description Analysis of host data has detected suspicious download of remote file on MSTICALERTSLXVM2.
ProviderName Detection
VendorName Microsoft
VendorOriginalId caab1270-55d3-4447-8618-16cf8672e4e1
SystemAlertId 2518520981440769999_caab1270-55d3-4447-8618-16cf8672e4e1
ResourceId /subscriptions/40dcc8bf-0478-4f3b-b275-ed0a94f2c013/resourceGroups/ASIHuntOMSWorkspaceRG/provide...
SourceComputerId 44623fb0-bd5f-49ea-84d1-56aa11ab8a25
AlertType SCUBA_RULE_Suspicious_file_download
ConfidenceLevel Unknown
ConfidenceScore NaN
IsIncident False
StartTimeUtc 2019-02-15 03:50:55
EndTimeUtc 2019-02-15 03:50:55
ProcessingEndTime 2019-02-15 03:51:09
RemediationSteps [\r\n "Review with dbadmin that the command identified in the alert was legitimate activity tha...
ExtendedProperties {'Compromised Host': 'MSTICALERTSLXVM2', 'User Name': 'dbadmin', 'Account Session Id': '0x2e083'...
Entities [{'$id': '4', 'DnsDomain': '', 'NTDomain': '', 'HostName': 'MSTICALERTSLXVM2', 'NetBiosName': 'M...
SourceSystem Detection
WorkspaceSubscriptionId 40dcc8bf-0478-4f3b-b275-ed0a94f2c013
WorkspaceResourceGroup asihuntomsworkspacerg
ExtendedLinks
ProductName
ProductComponentName
AlertLink
Type SecurityAlert
CompromisedEntity MSTICALERTSLXVM2
0
TenantId 52b1ab41-869e-4138-9e40-2a4457f09bf0
TimeGenerated 2019-02-18 02:29:07
AlertDisplayName SSH Anomalous Login ML
AlertName SSH Anomalous Login ML
Severity Low
Description Anomalous login detected for SSH account
ProviderName CustomAlertRule
VendorName Alert Rule
VendorOriginalId b0e143b8-4fa8-47bc-8bc1-9780c8b75541
SystemAlertId f1ce87ca-8863-4a66-a0bd-a4d3776a7c64
ResourceId
SourceComputerId
AlertType CustomAlertRule_0a4e5f7c-9756-45f8-83c4-94c756844698
ConfidenceLevel Unknown
ConfidenceScore NaN
IsIncident False
StartTimeUtc 2019-02-18 01:49:02
EndTimeUtc 2019-02-18 02:19:02
ProcessingEndTime 2019-02-18 02:29:07
RemediationSteps
ExtendedProperties {'Alert Mode': 'Aggregated', 'Search Query': '{"detailBladeInputs":{"id":"/subscriptions/40dcc8b...
Entities [{'$id': '3', 'Address': '23.97.60.214', 'Type': 'ip', 'Count': 1}, {'$id': '4', 'HostName': 'MS...
SourceSystem Detection
WorkspaceSubscriptionId 40dcc8bf-0478-4f3b-b275-ed0a94f2c013
WorkspaceResourceGroup asihuntomsworkspacerg
ExtendedLinks
ProductName
ProductComponentName
AlertLink
Type SecurityAlert
CompromisedEntity

Другие виджеты MSTICPy включают:

  • Простой слайдер обратного просмотра на основе даты и времени Lookback

  • Текстовое поле для захвата пользовательского ввода GetText

  • Виджет для захвата и возврата переменной среды GetEnvrionmentKey

  • Виджет для выбора подмножества элементов из списка SelectSubset

  • Виджет, показывающий ход выполнения задачи Progress

  • Кнопки с несколькими вариантами с функцией ожидания, которая приостанавливает выполнение ячейки до тех пор, пока пользователь не выберет вариант OptionButtons

  • Более подробную информацию о виджетах MSTICPy можно найти здесь.

Примеры официальных блокнотов по ссылке.