Данные из автоматизированного упражнения по эмуляции атакующего BRAWL
Одной из сложных проблем для исследователей в области кибербезопасности, разрабатывающих возможности обнаружения и реагирования, является поиск реалистичной среды для проверки своих гипотез и возможностей.
Самый дешевый метод — тестирование возможностей в небольшой лабораторной сети. Но в такой среде отсутствует масштаб реальной корпоративной сети и шум реальных сред, что значительно усложняет обнаружение. Во многих отношениях лучшей средой было бы тестирование в нескольких корпоративных сетях масштаба предприятия с контролируемым, но реалистичным атакующим и реальным шумом от пользователей, системных администраторов и стороннего ПО/устройств. Проблема тестирования в такой среде заключается в том, что это дорого и в некоторых сценариях сопряжено с высоким риском.
BRAWL стремится создать компромисс, создавая систему для автоматического построения корпоративной сети в облачной среде. В настоящее время поддерживается только OpenStack, но система проектируется таким образом, чтобы в будущем можно было легко поддерживать другие облачные среды. BRAWL также строит аналитическую сеть, содержащую конвейер приема и обработки данных с использованием LogStash и Kafka. В рамках аналитической сети создается система хранения и поиска событий с использованием Elasticsearch и Kibana. BRAWL разворачивает корпоративную сеть «Игровое поле» с образами Windows. В этих образах уже установлены и настроены Microsoft Sysmon и другие сенсоры, которые перенаправляют журналы в платформу приема данных.
В BRAWL также есть концепция ботов, которые могут быть Красными, Синими или Серыми. Красные боты — атакующие, Синие боты — защитные, а Серые боты имитируют легитимное поведение пользователей, чтобы создать шум и усложнить обнаружение. Когда пользователь хочет проверить исследовательские гипотезы, он реализует бота BRAWL. Бот BRAWL регистрируется в Контроллере BRAWL, который затем организует игры между ботами BRAWL на Игровом поле.
Примечание: Из-за проблем с размерами файлов и квотами GitHub мы помещаем все файлы в zip-архив вместо того, чтобы оставлять их в виде обычного текста в репозитории git. Все данные находятся в файле
Этот выпуск содержит некоторые данные прототипа BRAWL. Мы создали небольшую корпоративную сеть, описанную ниже. Затем мы провели одну игру, используя исследовательский проект MITRE CALDERA в качестве красного бота.
CALDERA — это смежный исследовательский проект MITRE, который автоматизирует действия по эмуляции противника на основе информации из модели Adversarial Tactics, Techniques, and Common Knowledge (ATT&CK). Он реализует набор тактик и техник ATT&CK и использует систему планирования (https://dl.acm.org/citation.cfm?id=2991111) для автоматизации применения этих техник и генерации посткомпрометационного поведения противника в корпоративной сети.
Эти данные публикуются под лицензией Creative Commons BY License.
Наша небольшая корпоративная сеть представляет собой плоскую сеть, состоящую из контроллера домена (dc.brawlco.com) и 16 рабочих станций. Каждый ПК имеет имя основного пользователя в имени ПК (например, пользователь beane обычно входит в beane-pc). Этот пользователь имеет права локального администратора на компьютере.
Все ПК работают под управлением Windows 8.1. Контроллер домена работает под управлением Windows Server 2012 R2.
На ПК с Windows 8 мы внесли изменения для включения WDigest для хранения паролей в открытом виде в памяти LSASS с помощью следующей команды реестра: reg ADD HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1 /F
В этом упражнении CALDERA была единственным участвующим ботом BRAWL. Хотя концептуально BRAWL может использоваться для тестирования различных видов поведения атакующих и обнаружения, многие исследовательские усилия MITRE следуют философии «предполагать взлом». Поэтому мы даем CALDERA стартовую точку в качестве локального администратора на компьютере в сети в начале упражнения.
Кроме того, без серого бота, выполняющего вход в различные хосты, Игровое поле BRAWL является стерильным с точки зрения учетных данных, которые могут быть украдены и использованы Красными ботами. Чтобы обеспечить боковое перемещение, Контроллер BRAWL использует psexec для создания событий входа на хостах с учетными данными других пользователей из сети.
CALDERA выполнила следующие техники ATT&CK во время упражнения:
В этом репозитории есть пять типов данных. Каждый из них находится в собственном файле в папке data/.
| Тип данных | Описание |
|---|---|
| game_metadata | Данные, описывающие сценарий BRAWL |
| sysmon | Данные, собранные из Sysmon, работающего на каждой рабочей станции |
| win_event | Журналы событий Windows |
| computer_properties | Данные, собранные с помощью пользовательских скриптов, которые предоставляют информацию о компьютерах в сети |
| bsf | Действия красных ботов в формате BRAWL Shared Format (BSF) |
Красные и синие боты могут записывать информацию о своих действиях или обнаружениях в формате BRAWL Shared Format (BSF). Цель этого — упростить сравнение обнаружений/действий синих ботов с действиями красных ботов.
Формат находится в разработке и может измениться в будущих наборах данных.
Поля BSF описаны ниже в разделе «Сведения об источниках данных».
Разные источники событий в BRAWL обрабатывают время по-разному. Время — это либо время, когда событие поступило в систему приема журналов, либо время, когда событие было сгенерировано на хосте/конечной точке, либо время, записанное ботом в сети. В целом, эти времена должны быть с точностью до нескольких миллисекунд друг от друга. Когда это возможно, система приема журналов использует время события, хранящееся в самом событии, вместо времени поступления события на узлы приема. В таблице ниже указан метод, используемый для каждого типа данных.
| Источник данных | Примечания по времени |
|---|---|
| computer_properties | из поля time |
| game_metadata | время поступления в систему приема |
| sysmon | из поля utc_time |
| win_event | извлечено из времени события Windows |
| bsf | Поле @timestamp — это время поступления в систему приема. Однако поля BSF, связанные со временем (например, happened_after, happened_before и т. д.), — это время начала или окончания событий по времени на сервере управления и контроля CALDERA. |
| Имя поля | Описание |
|---|---|
| @timestamp | Время, связанное с событием. См. примечание о времени выше. |
| @uuid | Уникальный идентификатор события |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| type | Тип события. Для этих записей всегда game_metadata |
| hosts | Список хостов, которые были частью упражнения и «находились в пределах» для красного бота |
| randomization_seed | Начальное значение, которое может использоваться участниками ботов BRAWL для реализации «случайного» поведения, одинакового при разных запусках BRAWL |
| starting_host | Хост, с которого начинает красный бот. |
| Имя поля | Описание |
|---|---|
| @timestamp | Время, связанное с событием. См. примечание о времени выше. |
| @uuid | Уникальный идентификатор события |
| type | Тип события. Для этих записей всегда sysmon |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| data_model.object | CAR объект, с которым выполняется действие. |
| data_model.action | CAR действие, выполняемое над объектом. Это поле является массивом, поскольку некоторые события могут соответствовать более чем одному действию в модели данных CAR. Примером этого являются события создания удаленного потока. |
| data_model.fields.* | Поля, соответствующие данной паре объект/действие. |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| host | Имя хоста, с которого было записано событие. |
Мы используем Sysmon v3.11. В файле sysmon_config.txt содержится вывод команды sysmon -c, описывающий нашу конфигурацию.
Sysmon генерирует множество различных типов событий, которые соответствуют различным парам CAR объект/действие. Поля для каждого типа подробно описаны на сайте CAR: https://car.mitre.org/wiki/Data_Model
Пары объект/действие, которые генерируются Sysmon в нашей конфигурации:
driver/loadfile/attr_modifyflow/startmodule/loadprocess/createprocess/terminatethread/createthreat/remote_createИспользуйте модель данных CAR, чтобы определить имена полей и семантику для полей, содержащихся в data_model.fields.* для каждой пары объект/действие выше.
| Имя поля | Описание |
|---|---|
| @timestamp | Время, связанное с событием. См. каждый тип события ниже для подробностей о том, как это рассчитывается |
| @uuid | Уникальный идентификатор события |
| type | Тип события. Для этих записей всегда win_event |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| host | Хост, записавший событие |
| raw | Запись журнала событий Windows в исходном формате XML |
| data_model.fields.log_name | Имя журнала Windows (Application, System или Security) |
| data_model.fields.log_type | Тип журнала для данного log_name |
| Имя поля | Описание |
|---|---|
| @timestamp | Время, связанное с событием. См. примечание о времени выше. |
| @uuid | Уникальный идентификатор события |
| type | Тип события. Для этих записей всегда computer_properties |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| host | Имя компьютера, на котором выполнялся скрипт |
| netinfo | Коллекция объектов netinfo |
| netinfo.DNSServers | Коллекция DNS-резолверов, настроенных для этого хоста |
| netinfo.Gateway | Шлюз для этого интерфейса |
| netinfo.IPAddress | IP-адреса для этого интерфейса |
| netinfo.IsDHCPEnabled | Включен ли DHCP? |
| netinfo.MACAddress | MAC-адрес для этого интерфейса |
| netinfo.SubnetMask | Маска подсети для соответствующих IP-адресов |
| pcinfo | Объект, описывающий информацию о ПК |
| pcinfo.AssetTag | Инвентарный номер, если доступен |
| pcinfo.CPU | Информация о CPU |
| pcinfo.ChassisType | Не используется в BRAWL. «Unknown» |
| pcinfo.Disks | Информация о подключенных дисках |
| pcinfo.DomainName | Домен, частью которого является система |
| pcinfo.LastBootUpTime | Время загрузки системы |
| pcinfo.Memory | Информация о памяти системы |
| pcinfo.OS | Информация о работающей ОС |
| pcinfo.SerialNumber | Серийный номер оборудования |
| time | Время выполнения скрипта |
| userinfo | Массив объектов userinfo, описывающих пользователей, которые входили в систему с момента последней загрузки |
| userinfo.AuthenticationPackage | Пакет аутентификации, использованный для проверки подлинности |
| userinfo.Domain | Домен (или локальный ПК), которому принадлежит учетная запись |
| userinfo.LogonId | Идентификатор входа |
| userinfo.LogonTime | Время входа |
| userinfo.LogonType | Константы типа входа Windows |
Эти данные собирались периодически с помощью модуля unified_json.ps1 из PowerShell Utilities for Security Situational Awareness MITRE. Поле userinfo может быть полезно для определения того, какие учетные данные могли быть скомпрометированы, если на системе выполнялся сборщик учетных данных, такой как Mimikatz.
| Имя поля | Описание |
|---|---|
| @timestamp | Время, связанное с событием. См. примечание о времени выше. |
| @uuid | Уникальный идентификатор события |
| type | Тип события. Для этих записей всегда bsf_events |
| game_id | Уникальный идентификатор игры для этого упражнения. |
| bsf | Массив событий BSF, описывающих активность бота. Поля для этого массива описаны более подробно ниже. |
| bsf_version | Версия схемы BSF, используемая для массива событий bsf |
| producer_id | Бот, создавший эти данные BSF. |
Объекты внутри поля массива bsf имеют тип operation, step или event. Все объекты имеют поле nodetype, которое можно использовать для определения типа объекта.
event| Поле | Описание |
|---|---|
| id | Уникальный идентификатор каждого события. |
| nodetype | Тип этого узла. Один из: {"operation", "step", "event"}. |
| host | Имя хоста или IP-адрес, на котором было выполнено/обнаружено это событие. |
| time | Примечание: Должно быть указано хотя бы одно из следующих трех временных полей (т.е. "time", "happened_after" или "happened_before"). Особенно желательно "time"; все три приветствуются. См. примечание 1 в общих примечаниях BSF ниже. Примечание о формате времени: вся информация о времени должна быть в формате ISO 8601. Более конкретно: 'yyyy-mm-ddThh:nn:ss.llll00'. Где y — год, m — месяц, d — день, h — час, n — минуты, s — секунды, l — миллисекунды (и два завершающих нуля). Например: 2017-02-22T18:38:14.060000 Опционально: Оценка времени, когда произошло это событие. |
| happened_after | Опционально: Нижняя граница («левая временная скобка») для неопределенности во «time». |
| happened_before | Опционально: Верхняя граница («правая временная скобка») для неопределенности во «time». |
| confidence | Опционально: Позволяет синим ботам указать уверенность (действительное число от 0,0 до 1,0) в связи этого события с атакой. |
| object | Объект, с которым выполнено действие; см. таблицу ниже для допустимых значений. Основано на CAR Data Model |
| action | Действия для данного объекта. Основано на CAR Data Model |
| specific_field_1 .. N | 1-N описательных атрибутов (см. ниже). Основано на CAR Data Model |
| Объект | Действие | Обязательное(ые) поле(я) | Необязательное(ые) поле(я) |
|---|---|---|---|
| process | create terminate scanned | Как минимум одно из: {pid, command_line, exe, image_path} | fqdn hostname md5_hash parent_exe parent_image_path ppid sha1_hash sha256_hash sid signer user |
| flow | start end message | Как минимум одно из: {src_hostname,src_ip} Как минимум одно из: {dest_hostname, dest_ip} Как минимум одно из: {src_port, dest_port, protocol} | content dest_fqdn exe flags fqdn hostname image_path packet_count pid ppid proto_info src_fqdn user |
| file | create delete modify read timestomp write | file_path | company file_name fqdn hostname image_path md5_hash pid ppid sha1_hash sha256_hash signer user |
Вы можете узнать больше о семантике обязательных и необязательных полей, найдя соответствующий объект в CAR Data Model.
stepОбъекты шага объединяют одно или несколько событий в группировку более высокого уровня. Объекты шага также предоставляют место для эмиттеров BSF, чтобы помечать активность метками ATT&CK.
| Имя поля | Описание |
|---|---|
| id | Уникальный идентификатор шагов операции. |
| nodetype | Тип этого узла. Один из: {"operation", "step", "event"}. |
| attack_info | Массив объектов техники (определены в таблице ниже), описывающих, как этот шаг связан с таксономией ATT&CK. Почему массив? Хотя одна техника часто описывает шаг и все его события, в некоторых случаях может быть реализовано несколько техник. |
| attack_info.technique_id | Идентификатор техники ATT&CK (например, "T1059"), описывающий механизм атаки, использованный красным в этом шаге и связанных с ним событиях. |
| attack_info.technique_name | Человекочитаемая строка, описывающая эту технику (например, "Command-Line Interface"). |
| attack_info.tactic | Массив одной или нескольких меток тактик ATT&CK, описывающих намерение/стратегию этой техники. (Обратите внимание, что одна техника может реализовывать несколько тактик.) Например: ["Lateral Movement", "Execution"] |
| description | Опционально: Здесь могут быть примечания или аннотации к этому шагу. |
| events | Массив идентификаторов объектов event, составляющих этот шаг. |
operationОбъекты операции объединяют несколько объектов шага вместе. Однако в этом наборе данных нет объектов Operation.
Описания и примечания для полей событий (особенно для «Как минимум одно из»):1. Поля времени.
event. Остальные поля необязательны, но должны быть указаны, если они известны. В частности, ботов призывают указывать значение "time" как их наилучшую оценку, даже если у них нет точного времени.command_line, запустившую процесс, или exe / image_path, который был выполнен.Хосты в нашей сети BRAWL для этой игры:
| userinfo.LogonTypeName | Описание типа входа |
| userinfo.UserName | Имя пользователя, выполняющего вход |