Миграция правил обнаружения ArcSight в Microsoft Sentinel

Эта статья содержит сведения об определении, сравнении и миграции правил обнаружения ArcSight в правила аналитики Microsoft Sentinel.

Определение и перенос правил

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

  • Обязательно выберите варианты использования, которые позволят согласовать перенос правил, учитывая приоритетность и эффективность для бизнеса.
  • Убедитесь, что вы разбираетесь в типах правил Microsoft Sentinel.
  • Убедитесь, что вы понимаете терминологию правил.
  • Проверьте все правила, которые не активировали оповещения за последние 6–12 месяцев, и определите, по-прежнему ли они актуальны.
  • Устраните низкоуровневые угрозы или оповещения, которые обычно игнорируются.
  • Используйте существующие функции и проверьте, можно ли применить встроенные правила аналитики Microsoft Sentinel в рамках текущих вариантов использования. Так как в Microsoft Sentinel используется аналитика на основе машинного обучения для создания высокоточных инцидентов с действиями, высока вероятность того, что некоторые имеющиеся средства обнаружения могут стать избыточными.
  • Убедитесь, что источники данных подключены, и проверьте методы подключения к данным. Повторно рассмотрите сбор данных, чтобы обеспечить глубину и обширность данных в различных вариантах использования, которые планируется обнаруживать.
  • Ознакомьтесь с такими ресурсами сообщества, как SOC Prime Threat Detection Marketplace, чтобы проверить, доступны ли ваши правила.
  • Подумайте, можно ли использовать для работы с вашими правилами такой преобразователь запросов в сети, как Uncoder.io.
  • Если правила недоступны или не могут быть преобразованы, их необходимо создать вручную с помощью запроса KQL. Проверьте сопоставление правил, чтобы создать новые запросы.

Ознакомьтесь с дополнительными сведениями о рекомендациях по переносу правил обнаружения.

Чтобы перенести правила аналитики в Microsoft Sentinel, выполните следующие действия:

  1. Убедитесь в наличии системы тестирования для каждого правила, которое необходимо перенести.

    1. Подготовьте процесс проверки перенесенных правил, включая скрипты и сценарии полного тестирования.

    2. Убедитесь, что у вашей команды есть полезные ресурсы для тестирования перенесенных правил.

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

  2. Проверьте, доступны ли ваши средства обнаружения в качестве встроенных шаблонов в Microsoft Sentinel:

    • Если встроенных правил достаточно, используйте встроенные шаблоны правил, чтобы создать правила для собственной рабочей области.

      Чтобы создать и изменить соответствующие правила аналитики, в Microsoft Sentinel выберите Configuration (Конфигурация) > Analytics (Аналитика) > Rule templates (Шаблоны правил).

      Дополнительные сведения см. в разделе Встроенное обнаружение угроз.

    • При наличии средств обнаружения, не охватываемых встроенными правилами Microsoft Sentinel, попробуйте использовать преобразователь запросов в Интернете, например Uncoder.io, чтобы преобразовать свои запросы в KQL.

      Определите условие триггера и действие правила, а затем создайте и просмотрите запрос KQL.

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

      1. Определите источники данных, которые будут использоваться в правиле. Чтобы определить таблицы, к которым необходимо выполнить запрос, потребуется создать таблицу сопоставления источников данных и таблиц данных в Microsoft Sentinel.

      2. Определите все атрибуты, поля или сущности в данных, которые будут использоваться в правилах.

      3. Определите критерии и логику правила. На этом этапе вы можете использовать шаблоны правил в качестве примеров для создания запросов KQL.

        Рассмотрите фильтры, правила корреляции, активные списки, эталонные наборы, списки видео к просмотру, аномалии обнаружения, агрегаты и т. д. Вы можете использовать справочные материалы, предоставляемые устаревшим решением SIEM, чтобы понять, как лучше сопоставить синтаксис запросов.

      4. Определите условие триггера и действие правила, а затем создайте и просмотрите запрос KQL. При просмотре запроса учтите рекомендации по оптимизации KQL.

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

  4. Когда результаты будут удовлетворительными, можно будет считать, что правило перенесено. При необходимости создайте сборник схем для действия правила. Дополнительные сведения см. в разделе Автоматизация реагирования на угрозы с помощью сборников схем в Microsoft Sentinel.

См. правила аналитики.

Сравнение терминологии правил

С помощью этой таблицы вы сможете прояснить для себя концепцию правила в Microsoft Sentinel по сравнению с ArcSight.

ArcSight Microsoft Sentinel
Тип правила • Правило фильтра
• Правило присоединения
• Активное правило списка
• И прочее
• Запланированный запрос
• Fusion
• Microsoft Security
• Аналитика поведения машинного обучения (ML)
Критерии Определение в условиях правила Определение в KQL
Условие запуска • Определение в действии
• Определение в агрегате (для агрегирования событий)
Порог: количество результатов запроса
Действие • Задание поля события
• Отправка уведомления
• Создание нового варианта
• Добавление в активный список
• И прочее
• Создание оповещения или инцидента
• Интеграция с Logic Apps

Сопоставление и сравнение примеров правил

Используйте эти примеры для сравнения и сопоставления правил из ArcSight с Microsoft Sentinel в различных сценариях.

Правило Описание Пример правила обнаружения (QRadar) Пример запроса KQL Ресурсы
Фильтр (AND) Пример правила с условиями AND. Событие должно соответствовать всем условиям. Пример фильтра (AND) Пример фильтра (AND) Фильтр строк:
• Строковые операторы

Числовой фильтр:
• Числовые операторы

Фильтр даты и времени:
назад
Дата и время
между
сейчас

Анализ:
анализ
извлечение
parse_json
parse_csv
parse_path
parse_url
Фильтр (OR) Пример правила с условиями OR. Событие может соответствовать любому из условий. Пример фильтра (OR) Пример фильтра (OR) • Строковые операторы
в
Вложенный фильтр Пример правила с вложенными условиями фильтрации. Правило включает инструкцию MatchesFilter, которая также включает условия фильтрации. Пример вложенного фильтра Пример вложенного фильтра Пример функции KQL
Пример функции параметра
• join
где
Активный список (поиск) Пример правила подстановки, использующего инструкцию InActiveList. Пример активного списка (поиск) Пример активного списка (поиск) • Список отслеживания является эквивалентом функции активного списка. Дополнительная информация о списках отслеживания.
Другие способы реализации подстановок
Корреляция (сопоставление) Пример правила, определяющего условие для набора базовых событий с помощью инструкции Matching Event. Пример корреляции (сопоставления) Пример корреляции (сопоставления) оператор соединения:
• join
соединение с временным окном
перетасовка
Трансляция
Объединение

инструкция по определению:
разрешение

Объединение.
make_set
• make_list
make_bag
пакет
Корреляция (временное окно) Пример правила, определяющего условие для набора базовых событий с помощью инструкции Matching Event и использующего условие фильтра Wait time. Пример корреляции (временное окно) Пример корреляции (временное окно) • join
Правила Microsoft Sentinel и оператор соединения

Пример фильтра (AND): ArcSight

Ниже приведен пример правила фильтра с AND условиями в ArcSight.

Схема, иллюстрирующая пример правила фильтра.

Пример фильтра (AND): KQL

Ниже приведено правило фильтрации с условиями AND в KQL.

SecurityEvent
| where EventID == 4728
| where SubjectUserName =~ "AutoMatedService"
| where isnotempty(SubjectDomainName)

Это правило предполагает, что Microsoft Monitoring Agent (MMA) или агент мониторинга Azure (AMA) собирают события Безопасность Windows. Поэтому правило использует таблицу Microsoft Sentinel SecurityEvent.

Прислушайтесь к следующим рекомендациям:

  • Чтобы оптимизировать запросы, не используйте операторы без учета регистра, если это возможно: =~.
  • Используйте ==, если значение не учитывает регистр.
  • Упорядочить фильтры, начиная с инструкции where, которая отфильтровывает большинство данных.

Пример фильтра (OR): ArcSight

Ниже приведен пример правила фильтра с OR условиями в ArcSight.

Схема, иллюстрирующая пример правила фильтра (или).

Пример фильтра (OR): KQL

Ниже приведено несколько способов написания правила фильтра с OR условиями в KQL.

В качестве первого варианта используйте инструкцию in:

SecurityEvent
| where SubjectUserName in
 ("Adm1","ServiceAccount1","AutomationServices")

В качестве второго варианта используйте инструкцию or:

SecurityEvent
| where SubjectUserName == "Adm1" or 
SubjectUserName == "ServiceAccount1" or 
SubjectUserName == "AutomationServices"

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

Пример вложенного фильтра: ArcSight

Ниже приведен пример правила вложенного фильтра в ArcSight.

Схема, иллюстрирующая пример правила вложенного фильтра.

Вот правило для фильтра /All Filters/Soc Filters/Exclude Valid Users.

Схема, иллюстрирующая фильтр

Пример вложенного фильтра: KQL

Ниже приведено несколько способов написания правила фильтра с OR условиями в KQL.

В качестве первого варианта используйте прямой фильтр с инструкцией where:

SecurityEvent
| where EventID == 4728 
| where isnotempty(SubjectDomainName) or 
isnotempty(TargetDomainName) 
| where SubjectUserName !~ "AutoMatedService"

В качестве второго варианта используйте функцию KQL:

  1. Сохраните следующий запрос как функцию KQL с псевдонимом ExcludeValidUsers.

        SecurityEvent
        | where EventID == 4728
        | where isnotempty(SubjectDomainName)
        | where SubjectUserName =~ "AutoMatedService"
        | project SubjectUserName
    
  2. Используйте следующий запрос, чтобы отфильтровать псевдоним ExcludeValidUsers.

        SecurityEvent    
        | where EventID == 4728
        | where isnotempty(SubjectDomainName) or 
        isnotempty(TargetDomainName)
        | where SubjectUserName !in (ExcludeValidUsers)
    

В качестве третьего варианта используйте функцию параметра:

  1. Создайте функцию параметра с ExcludeValidUsers в качестве имени и псевдонима.

  2. Определите параметры функции. Пример:

        Tbl: (TimeGenerated:datatime, Computer:string, 
        EventID:string, SubjectDomainName:string, 
        TargetDomainName:string, SubjectUserName:string)
    
  3. Функция parameter использует следующие значения по умолчанию:

        Tbl
        | where SubjectUserName !~ "AutoMatedService"
    
  4. Выполните следующий запрос, чтобы вызвать функцию параметра:

        let Events = (
        SecurityEvent 
        | where EventID == 4728
        );
        ExcludeValidUsers(Events)
    

В качестве четвертого варианта используйте функцию join :

let events = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName) 
or isnotempty(TargetDomainName)
);
let ExcludeValidUsers = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
| where SubjectUserName =~ "AutoMatedService"
);
events
| join kind=leftanti ExcludeValidUsers on 
$left.SubjectUserName == $right.SubjectUserName

Рекомендации:

  • Рекомендуется использовать прямой фильтр с инструкцией where (первым вариантом ) из-за простоты. Для оптимизации производительности избегайте использования join (четвертый вариант).
  • Чтобы оптимизировать запросы, не используйте операторы =~ и !~ без учета регистра, если это возможно. Используйте операторы == и !=, если значение не учитывает регистр.

Пример активного списка (поиск): ArcSight

Вот правило активного списка (поиска) в ArcSight.

Схема, иллюстрирующая пример правила активного списка (подстановки).

Пример активного списка (поиск): KQL

Это правило предполагает, что список отслеживания учетных записей исключений Cyber-Ark существует в Microsoft Sentinel с полем "Учетная запись".

let Activelist=(
_GetWatchlist('Cyber-Ark Exception Accounts')
| project Account );
CommonSecurityLog
| where DestinationUserName in (Activelist)
| where DeviceVendor == "Cyber-Ark"
| where DeviceAction == "Get File Request"
| where DeviceCustomNumber1 != ""
| project DeviceAction, DestinationUserName, 
TimeGenerated,SourceHostName, 
SourceUserName, DeviceEventClassID

Упорядочить фильтры, начиная с инструкции where, которая отфильтровывает большинство данных.

Пример корреляции (сопоставления): ArcSight

Пример правила ArcSight, определяющего условие для набора базовых событий с помощью инструкции Matching Event.

Схема, иллюстрирующая пример правила корреляции (сопоставление).

Пример корреляции (сопоставления): KQL

let event1 =(
SecurityEvent
| where EventID == 4728
);
let event2 =(
SecurityEvent
| where EventID == 4729
);
event1
| join kind=inner event2 
on $left.TargetUserName==$right.TargetUserName

Рекомендации.

  • Чтобы оптимизировать запрос, убедитесь, что меньшая таблица находится в левой части функции join.
  • Если левая часть таблицы относительно мала (до 100 K записей), добавьте hint.strategy=broadcast для повышения производительности.

Пример корреляции (временное окно): ArcSight

Пример правила ArcSight, определяющего условие для набора базовых событий с помощью инструкции Matching Event и использующего условие фильтра Wait time.

Схема, иллюстрирующая пример правила корреляции (временное окно).

Пример корреляции (временное окно): KQL

let waittime = 10m;
let lookback = 1d;
let event1 = (
SecurityEvent
| where TimeGenerated > ago(waittime+lookback)
| where EventID == 4728
| project event1_time = TimeGenerated, 
event1_ID = EventID, event1_Activity= Activity, 
event1_Host = Computer, TargetUserName, 
event1_UPN=UserPrincipalName, 
AccountUsedToAdd = SubjectUserName 
);
let event2 = (
SecurityEvent
| where TimeGenerated > ago(waittime)
| where EventID == 4729
| project event2_time = TimeGenerated, 
event2_ID = EventID, event2_Activity= Activity, 
event2_Host= Computer, TargetUserName, 
event2_UPN=UserPrincipalName,
 AccountUsedToRemove = SubjectUserName 
);
 event1
| join kind=inner event2 on TargetUserName
| where event2_time - event1_time < lookback
| where tolong(event2_time - event1_time ) >=0
| project delta_time = event2_time - event1_time,
 event1_time, event2_time,
 event1_ID,event2_ID,event1_Activity,
 event2_Activity, TargetUserName, AccountUsedToAdd,
 AccountUsedToRemove,event1_Host,event2_Host, 
 event1_UPN,event2_UPN

Пример агрегата: ArcSight

Ниже приведен пример правила ArcSight с параметрами агрегата: три совпадения в течение 10 минут.

Схема, иллюстрирующая пример правила агрегирования.

Пример агрегата: KQL

SecurityEvent
| summarize Count = count() by SubjectUserName, 
SubjectDomainName
| where Count >3

Дальнейшие действия

Из этой статьи вы узнали, как сопоставить правила миграции из QRadar с Microsoft Sentinel.