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

Современные атаки, особенно те, что управляются человеком, оставляют минимум следов, и их сложно обнаружить стандартными средствами защиты. Но совсем незаметно действовать невозможно — какие-то артефакты все равно остаются. Проблема в том, что потенциально полезных артефактов много, но по сути это разные структуры данных: где-то логи ОС, где-то персистентные кеши. Многие артефакты плохо задокументированы, а о каких-то вообще нет доступной информации. Бесплатные инструменты для их сбора имеют недостатки: например, собирают неполные данные, поддерживают не все ОС.

В этой статье разбираем, как расследовать инциденты с помощью бесплатного инструмента BI.ZONE Triage, у которого появилась версия для macOS. Хотя эта ОС обладает встроенными механизмами защиты: XProtect, Malware Removal Tool и другими, устройства Apple остаются уязвимыми, в том числе для сложных APT-угроз и изощренных методов обхода встроенной защиты. Расскажем об особенностях сбора и анализа артефактов в macOS-среде и покажем, как инструмент помогает найти скрытые следы атак.

Как устроена утилита BI.ZONE Triage

BI.ZONE Triage помогает оперативно собрать криминалистические артефакты с операционных систем, провести расследование и оценить системы на факт компрометации. В частности, решение:

  • Проводит глубокую и подробную инвентаризацию текущего состояния устройства: от перечня запущенных процессов до списка подключенных к нему устройств.

  • Сканирует файловую систему устройства предоставленными пользователем YARA-правилами, чтобы выявить известные паттерны вредоносных файлов.

  • Сканирует системы предоставленным набором индикаторов компрометации.

BI.ZONE Triage не заменяет EDR-решение, так как у него более узкие задачи и функциональность.

Сравнение особенностей BI.ZONE Triage и EDR-решения

 BI.ZONE Triage

Коммерческое EDR-решение

Назначение

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

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

Принцип работы

Применяется точечно для сбора необходимых данных и анализа уже произошедших событий

Работает непрерывно, предотвращая атаки и моментально реагируя на них

Особенности

Использует те же механизмы сбора данных и анализа, что и, например, BI.ZONE EDR, но в более упрощенном и доступном формате для проведения расследований

Собирает большой объем телеметрии и анализирует ее в реальном времени на признаки атак. Данные доступны для анализа в централизованном хранилище

Версия BI.ZONE Triage для macOS представляет собой бинарный файл с облегченным агентом BI.ZONE EDR для macOS. Для запуска файла не потребуется дополнительных компонентов. Скачать бесплатную утилиту можно с GitHub. Запуск возможен только с привилегиями root.

Какие данные можно собирать

Для сбора данных в BI.ZONE Triage предусмотрено использование профилей (Profiles) и пресетов (Presets). Каждый профиль включает в себя набор данных ОС, сгруппированных по смыслу. В свою очередь, каждый пресет включает набор определенных профилей.

Набор собираемых данных в каждом профиле обширен (описание структуры и списка артефактов доступно на GitHub). Приведем примеры, чтобы разобраться, зачем нужно столько типов артефактов, что полезного в них можно найти и что подозрительного в них может быть.

Профили

Профиль

Описание

Что позволяет выявлять

hostinfo

Данные о хосте (имя хоста, информация об ОС, информация о процессоре и т. д.)

— Устройства, присутствующие в инфраструктуре (инвентаризация)

— Используемые ОС, включая сильно устаревшие и неподдерживаемые Apple

networks

Информация об IP-адресах и интерфейсах системы, записях ARP, маршрутах, записях в файлах hosts и resolv, а также информация о сетях Wi-Fi

— Модифицированный файл /etc/hosts для перенаправления корпоративных доменов на неизвестные IP-адреса

— Необычные записи в таблице маршрутизации

— Разрешение доменов Apple, использующие IP-адреса, отличные от Apple

— Другие отклонения в сетевой конфигурации ОС

netconn

Активные сетевые подключения, открытые на прослушивание порты

— Процессы, прослушивающие нестандартные порты (например, 4444)

— Исходящие соединения с известными вредоносными IP-адресами

— Активность C2-фреймворков (долгоживущие соединения с неизвестным IP-адресом)

— Другие отклонения в поведении ОС в сети

processes

Инвентаризация запущенных процессов

— Процессы, запущенные из /tmp или других необычных мест

— Аномальные связи между родителем процесса и самим процессом (например, сценарии, в которых Python запускает curl, и другие)

— Процессы со случайными именами

— Другие подозрительные активности процессов 

sessions

Активные пользовательские сессии

— Сеансы, поддерживающие соединение в течение необычно длительного времени (длительный uptime)

— Успешные входы в систему в необычное время суток

— Необычные типы сеансов (например, SSH, в случаях когда он не должен использоваться, ведь по умолчанию в macOS служба SSH отключена)

— Другие аномалии в пользовательских сессиях

users

Пользователи, группы, SSH-ключи, правила sudoers, информация из файлов known_hosts

— Неизвестные учетные записи из локальной группы администраторов

— Слишком широкие правила в sudoers, позволяющие повысить привилегии

— Скрытые учетные записи пользователей

— Известные ключи вредоносных серверов, с которых подключались к macOS-хосту по SSH

autoruns

Данные автозагрузки cron, at, LaunchAgent, LaunchDaemon, библиотеки из DYLD_*

— Запуск LaunchAgent/LaunchDaemon из /tmp, /Downloads и т. д. 

— Процессы, в которых на момент запуска были использованы переменные среды DYLD_INSERT_LIBRARIES, PERL5*, RUBYOPT, ELECTRON_RUN_AS_NODE

— Необычные задания cron или at

— Другие подозрительные артефакты закрепления злоумышленников на устройстве

logonhist

История попыток входа в систему

— Неудачные попытки входа с одного и того же IP-адреса

— Попытки входа с использованием стандартных, распространенных или системных имен пользователей (например, nginx, apache или root)

— Необычные методы входа (например, SSH, когда он не должен использоваться)

— Входы в систему с IP-адресов скомпрометированных хостов

cmdhist

История вводимых команд (.bash_history и т. п.)

— Команды, использующиеся для отключения механизмов безопасности (межсетевого экрана, GateKeeper, EDR и т. д.)

— Наличие закодированных base64 строк

— Попытки получения доступа к чувствительным или критичным файлам, например к sudoers

— Попытки загрузки и запуска файлов, например, при помощи curl или bash

— Другие команды, которые обычно не запускаются пользователями в стандартных сценариях работы 

shares

Информация об общих ресурсах SMB/NFS

— Общие ресурсы с включенным анонимным доступом

— Общие ресурсы, предоставляющие доступ к конфиденциальным каталогам

containers

Docker-контейнеры (Running, Stopped)

— Контейнеры созданные с использованием недоверенных образов

— Контейнеры, в которых работают майнеры криптовалюты

— Другие факты несанкционированного использования контейнеров

packages

Информация об используемых репозиториях, установленных пакетах (системные, Python, Ruby, Homebrew и т. д.), информация об установленном ПО

— Пакеты или приложения, установленные из неизвестных репозиториев

— Недавно установленные пакеты, чьи файлы совпадают с хешами известных вредоносных программ

— Уязвимые версии пакетов или приложений

homedirinfo

Инвентаризация файлов в home-каталогах пользователей системы

— Скрытые подозрительные каталоги

— Недавно измененные/созданные конфиденциальные файлы или файлы с секретами (пароли, API-ключи, приватные SSH-ключи)

— Потенциальные следы действий злоумышленника в виде файлов

keydirsinfo

Инвентаризация файлов в ключевых директориях системы с обогащением атрибутами файловой системы (tmp, bin, sbin, dev, run, proc, etc)

— Модифицированные системные двоичные файлы

— Неподписанные расширения ядра

— Файлы с измененными временными метками

— Хеши файлов, относящихся к известным IoC

— Необычные атрибуты файлов

downloads

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

— Файлы, загруженные с известных вредоносных доменов

— Файлы с двойными расширениями

— Недавно загруженные подозрительные файлы

— Файлы, соответствующие хешам известных вредоносных программ

security

Инвентаризация настроек встроенных механизмов безопасности (SIP, FileVault, GateKeeper, XProtect)

— Статус механизмов безопасности (SIP, Gatekeeper, FileVault, ALF)

— Статус и наличие актуальных установленных сигнатур XProtect

— Права TCC для сервисов (в т. ч. информация о Full Disk Access, FDA)

devices

Информация о подключенных устройствах (USB, Bluetooth)

— Устройства, подключенные во время инцидентов безопасности

— Потенциально вредоносные USB-устройства

settings

Инвентаризация системных настроек (Airdrop, настройка удаленного доступа, проверка подключения устройства к домену)

Проверка текущей конфигурации ОС на предмет наличия небезопасных настроек удаленного доступа

fileperm

Инвентаризация файловой системы (папки загрузок, файлов из корзины) и инвентаризация установленных SUID/SGID-прав на файлы

— Недавно удаленные в корзину файлы 

— Файлы с широкими правами (например, системные)

— Бинарные файлы с установленными SUID\SGID-правами

browser

Расширенная информация о браузерах (список установленных расширений)

— Подозрительные браузерные расширения

— Уязвимые браузерные расширения

quarantine

Инвентаризация карантинных файлов (по результатам проверки XProtect)

Файлы, попавшие в карантин XProtect

vpn

Инвентаризация VPN профилей в ОС

Установленные VPN-профили в системе

Набор потенциальных индикаторов компрометации шире, чем примеры, перечисленные в столбце «Что позволяет выявлять».

Пример использования утилиты BI.ZONE Triage
Пример использования утилиты BI.ZONE Triage
Пример запуска с указанием нужного профиля
Пример запуска с указанием нужного профиля

Пресеты

Использование пресетов позволяет не перечислять все профили по отдельности.

Профили объединяются в группы следующим образом:

Пресет

Профиль

all

Все существующие профили

investigation

hostinfoprocesses netconnsessions autoruns networks users logonhist cmdhistpackagesdownloads

iocsfs

processes autoruns keydirsinfodownloads

iocsfull

processes netconnautoruns userskeydirsinfodownloads

Пресеты и профили при запуске указываются через запятую, например -p=logonhist,cmdhist или -p=investigation,containers. Чтобы при запуске пресета исключить из него определенные профили, каждый исключаемый профиль указывается с префиксом '-'. Например, для сбора данных по всем профилям, кроме autoruns, используется ключ со следующим значением: -p=full,-autoruns.

Пример запуска с использованием пресета iocsfs
Пример запуска с использованием пресета iocsfs

Как сканировать систему с помощью YARA-правил

Кроме заранее подготовленных механизмов сбора данных можно проверять объекты файловой системы с помощью собственных YARA-правил, а также искать известные индикаторы компрометации. 

Пример, когда с помощью YARA-правил обнаружили подозрительный файл:

Результаты проверки каталога Downloads с помощью YARA-правил
Результаты проверки каталога Downloads с помощью YARA-правил

Как проверить файловую систему на наличие файловых IoC

Рассмотрим пример, когда нужно собрать данные по файлам в ключевых директориях ОС, а также проверить их на наличие индикаторов компрометации из заданного набора. В решении BI.ZONE Triage для этого используется пресет iocsfs. Для проверки подготовим файл с набором индикаторов. Искать будем по хешам MD5.

Подготовим файл с хешем искомого файла iocs.txt:

90B05F1916CBD2DE0A4A7E139A0EDA9A

Далее выполним команду:

sudo ./bz_triage -p=iocsfs --stdout 2>/dev/null | grep -f ./iocs.txt

Таким образом, если искомые файлы найдутся, мы получим вывод записей JSON с информацией о них в STDOUT:

Результаты проверки на наличие IoC
Результаты проверки на наличие IoC

Как отправлять события в Elasticsearch

С помощью BI.ZONE Triage также можно разными способами выводить результаты. Кроме классических способов вывода в STDOUT и в файл, существует возможность оправлять данные по сети в произвольный IP:port. Этот сценарий позволяет собирать и централизованно хранить данные от BI.ZONE Triage, а также работать с ними, например в Elasticsearch. 

Рассмотрим пример отправки событий в эту систему. Для этого подготовим конфигурацию Logstash и индекс в Elasticsearch. Простой пример конфигурации с последующей передачей данных может выглядеть следующим образом:

input {  tcp {
    id => "watch_to_logstash"
    port => 5000
    codec => json
  }
}filter {
}
output {
 elasticsearch {
    id => "logstash-esm-indexer"
    hosts => ["https://10.10.10.11:9200"]
    user => "${BZ_TRIAGE_USER}"
    password => "${BZ_TRIAGE_PASS}"
    ilm_enabled => false
    manage_template => false
    index => "bz-triage-esm"
    ssl_certificate_verification => false
  }
} 

Пример команды запуска утилиты BI.ZONE Triage для отправки результата по сети:

sudo ./bz_triage -p=investigation --yararules=./rules.yar --yaradir=/tmp --dsthost=logstash.elk.local --dstport=5000 

В результате выполнения команды:

  • будут собраны данные, указанные в пресете investigation (все профили последовательно);

  • YARA-сканер просканирует директорию /tmp с поддиректориями до третьего уровня (установлен по умолчанию);

  • все события будут переданы в виде отдельных записей JSON в logstash на адрес logstash.elk.local и TCP-порт 5000.

Как расследовать инцидент при помощи BI.ZONE Triage

Сотрудник обратился в службу кибербезопасности компании с запросом:

Я отвлекся на секунду, и на рабочем столе появилось окно от «Связки ключей» с просьбой ввести пароль. Затем появилось что-то странное, и устройство начало сильно греться.

Прикрепляю скриншот:

Поскольку macOS-устройства в компании не покрыты EDR-агентами, аналитик кибербезопасности анализирует события с помощью BI.ZONE Triage.

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

sudo ./bz_triage -p=all --dsthost=logstash.elk.local --dstport=5000

По команде с ОС собираются полезные артефакты, а затем эти данные отправляются в Elasticsearch, в котором аналитик и будет анализировать события.

Пошаговый анализ событий

1. Анализ событий BI.ZONE Triage. Поиск по истории вводимых в терминал (*_history) подозрительных команд.

Запрос Lucene:

dev_os_type:macos AND event_type:ConsoleCommandInfo

Обнаружена подозрительная активность:

Osascript и AppleScript — это языки сценариев Apple, используемые для автоматизации задач на macOS. Они позволяют пользователям управлять приложениями и системными функциями, отправляя команды и выполняя сценарии.

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

2. Поиск подозрительных запущенных процессов.

Запрос Lucene:

dev_os_type:macos AND event_type:ProcessInfo

Обнаружен подозрительный процесс:

Видно, что в момент запуска BI.ZONE Triage также был запущенный процесс XMRig (известный майнер криптовалют).

3. Определение способа доставки файла на устройство.

Запрос Lucene:

dev_os_type:macos AND event_type:ConsoleCommandInfo AND cmdline:("wget" OR "curl")

Обнаружен подозрительный запуск curl:

4. Выявление активных пользователей и способа их входа.

Запрос Lucene:

dev_os_type:macos AND event_type:LogonHistorySuccess

Способ входа пользователя — SSHD:

По умолчанию служба SSH в macOS отключена. Эта активность — специфична и свидетельствует об успешной компрометации устройства.

Также замечаем событие успешного входа от службы VNC:

5. Поиск дополнительных артефактов, чтобы определить, что еще злоумышленник успел сделать на устройстве.

Запрос Lucene:

dev_os_type:macos AND event_type:ConsoleCommandInfo

Обнаружены попытки дополнительно собрать информацию:

Итог расследования

  1. Злоумышленник подключился к устройству удаленно через настроенные службы, такие как VNC. Используя инструменты, позволяющие обойти аутентификацию, он смог войти в текущую сессию без необходимости вводить пароль.

  2. Затем злоумышленник применил скрипт на AppleScript через Osascript для инициирования поддельного оконного интерфейса, напоминающего стандартный запрос на ввод пароля от приложения KeyChain, который просит пароль с поддельным текстом. Когда пользователь ввел настоящий пароль, злоумышленник получил его в формате plain-text.

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

Таймлайн инцидента
Таймлайн инцидента

Заключение

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

BI.ZONE Triage поможет автоматизированно собрать эти артефакты, значительно упростит их анализ, а также позволит отправить данные в централизованное хранилище. Решение доступно бесплатно и поддерживает macOS и Linux.

Комментарии (0)