Работа кибердетектива: суть, термины и этапы

И в мире ИБ есть свои детективы. Они исследуют, наблюдают, собирают информацию и занимаются профилактикой, как и коллеги из юридической сферы, только их деятельность направлена на безопасность информационную. Как они это делают? Как происходит расследование инцидентов? Что нужно знать, чтобы стать кибердетективом? В статье поговорим об этапах киберрасследования, анализе логов, дампов и не только, а также о том, где этому можно научиться.

Начинать следует всегда сначала: с терминологии. Главное определение здесь тоже взято у коллег — криминалистика, или forensics. Это сокращённая форма foren science (судебная наука), то есть наука об исследовании доказательств. Если доказательства компьютерные, то по-английски мы скажем computer forensics.

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

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

Рассматривать этапы реагирования на инциденты необходимо с подготовки — это первый этап. То есть ещё нет инцидента, но мы уже должны что-то сделать: настроить средства защиты, выявить уязвимые точки, распределить доступы и так далее.

А в целом любой детектив, даже кибер, начинает работу с обнаружения «преступления». Это важный этап, поскольку он может случиться довольно поздно. Есть много различных историй о том, как компании выясняют, что их атаковали несколько лет назад и всё это время вытягивали конфиденциальные данные.

Далее идёт сдерживание, когда мы отрезаем у преступника доступ к жертве, то есть прекращаем возможность злоумышленника влиять на нашу инфраструктуру. Например, находим канал связи, который он использует, и отключаем его. После идёт ликвидация последствий инцидента, когда мы пытаемся исправить всё то, что злоумышленник наделал в нашей инфраструктуре. Если злоумышленник зашифровал наши данные, то нам необходимо их расшифровать или восстановить из бэкапов. И, наконец, этап, который называется «возвращение к деятельности».

Когда мы восстановили справедливость, ещё рано отмечать счастливый финал. Как не допустить повторения? Ищем, что и когда произошло, определяем цель и источник атаки, а также цели и мотивацию атакующего. Были ли соучастники? Какими уязвимостями и инструментами пользовались злоумышленники? Тоже узнаём.

Где искать улики?

1.     Анализ логов в Windows и Linux

Дальше перейдём чуть ближе к практике — к анализу логов. Обычно для того чтобы определить, что случилось в инфраструктуре, в больших инфраструктурах используются SIEM-системы, которые собирают в себе все логи со всех машин. Если у компании нет SIEM-системы, то каждая машина изучается вручную и по отдельности.

Например, в Windows есть стандартная утилита — инструмент, который называется «просмотр событий».

Просмотр событий Windows
Просмотр событий Windows

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

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

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

Фильтрация событий в Windows
Фильтрация событий в Windows

Важно уметь фильтровать эти события: их бывает и несколько сотен тысяч, поэтому необходимо находить только те, которые вам нужны, а не смотреть всё подряд. Их можно фильтровать по дате, например, когда произошла атака. Но один из основных фильтров — это код событий.

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

Также в любом журнале есть настраиваемые свойства. Рассмотрим случай. Как-то раз мы готовили киберучения и в момент тестирования проверяли, все ли логи видны, но заметили, что их вообще нет. Как так? Мы же провели атаку. Логи должны были быть.

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

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

Сравнение стандартного лога Windows с логом Sysmon
Сравнение стандартного лога Windows с логом Sysmon

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

Если разбирать, то у нас есть TCP-соединение от IP 1, в котором использовался порт 60307 до IP 2 по порту 22. Порт 22 отвечает за работу такого протокола, как SSH, он используется для удалённого подключения. Информации всё равно мало, поэтому Sysmon дополнительно обогащает наши логи. Тогда уже видно и другие параметры, и какой hostname у компьютера, и какая утилита запустила этот процесс.

Хэш файла в логе Sysmon
Хэш файла в логе Sysmon

Есть ещё ProcessGuid. Если его забрать и сделать по нему фильтр, то можно найти лог, в котором будет хэш процесса и программы, которые запустили этот процесс. Также мы можем проверить, легитимное ли приложение сам по себе PuTTY (в данном случае да). Но если бы это был какой-нибудь скрипт, то, скорее всего, он был бы нелегитимный.

Проверки можно делать и при помощи определённых сайтов. Например, Virus Total подскажет, это вирус или обычная программа и кто-то просто подключился по работе к другой машине.

Каталог /var/log
Каталог /var/log

С анализом логов Linux всё сложнее и проще одновременно. Все логи хранятся в одной папке var/log с большим количеством файлов, каждый из которых показывает свои логи. Они бывают разные: в auth.log хранятся входы в систему, в boot.log — логи, создающиеся при загрузке операционной системы, kern.log связана с логами ядра.

В Linux уже разработчик RedHat предлагает нам утилиту, которая прокачивает ваши логи на максимум, и можно увидеть дополнительные данные, которые в обычных логах либо отсутствуют, либо разбросаны по различным файлам и обрабатывать их достаточно сложно. Такая утилита называется auditd.

Пример лога auditd
Пример лога auditd

На изображении представлен лог, полученный при помощи утилиты auditd. Читать его не очень удобно, однако если научиться, то можно выяснить очень многое. Более того, такой подход очень хорошо помогает при автоматизации процесса анализа данных логов. Самые основные моменты я выделил на изображении цветом.

  • Время (time), за которым необходимо следить, ведь именно зная время проще всего построить всю цепочку атаки.

  • CWD — папка, откуда запускался процесс.

  • В exe записано usr/bin/vi — это указание на утилиту, которая была запущена, то есть на команду, которую использовал пользователь. Соответственно, vi — это такая утилита (вроде текстового редактора).

  • В полях name можно увидеть путь к файлу, к которому пытались обратиться при помощи указанного выше текстового редактора. Этот файл один из важных в операционной системы, где у нас хранятся все пользователи с их ID.

  • Поле auid содержит идентификатор пользователя. В файле etc/passwd как раз можно было узнать, у какого пользователя какой ID. У пользователя root —нулевой.

  • В поле type находится тип события, в данном поле могут быть различные значения, подробно о них уже написано в статье «Учимся понимать события подсистемы аудита Linux».

2.     Анализ трафика с логами

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

В утилите можно увидеть различного рода параметры, распределённые по столбцам. Если дан трафик и вы видите там TCP, то как минимум нужно нажать на него правой кнопкой мыши –> «отслеживать» –> выбрать TCP-stream, то есть TCP-поток –> у вас откроется окно, где отобразятся передаваемые данные. Здесь у нас было обращение к сайту, был отправлен get-запрос, что видно в самом верху.

Окно Follow TCP-Stream в Wireshark
Окно Follow TCP-Stream в Wireshark

По IP-адресу 1.1.12.1 пытались открыть страничку Show-tech, и внизу видны данные: служебный блок ответа и сами данные.

Также есть дополнительная утилита, Network Miner. Она автоматически анализирует весь трафик, который вы ей подали, собирает, какие IP-адреса там были замечены, что они делали, собирает все файлы, которые найдены в трафике: картинки образа, сообщения, логины и пароли, DNS и так далее. И затем выдаёт только необходимое.

Есть и утилита ZUI. Она автоматически может анализировать трафик на наличие в них конкретных атак: их уже несложно определить по поведению и пакетам. Часто именно ZUI выдаёт больше всего информации.

3. Анализ оперативной памяти

Сам по себе дамп оперативной памяти не так часто делается, но это важный этап при анализе, если мы ловим злоумышленника «за руку» и получаем доступ к его компьютеру. Наверняка некоторые из вас видели ролик о том, как поймали одного из хакеров. Группа реагирования забрала его компьютер для анализа, но один из специалистов вынул флешку, компьютер выключился, и все данные исчезли. Если бы предварительно был сделан дамп оперативной памяти, то как минимум слепок всех тех процессов данных можно было бы достать.

Утилита Volatility достаточно сложная. С её помощью можно понять, что за дамп оперативной памяти нам дан, с какой системы он был снят (Linux/Windows), какой именно. Делается это при помощи команды imageinfo. Командой hivelist можно вывести список блоков реестра, а команда hashdump позволяет достать из реестра эти данные, где есть логины и хэш пароля, так как сам по себе пароль хранится не в открытом виде, а в виде хэша — уникальной строки, которая создаётся при помощи одностороннего процесса, хэширования.

Но шифрование — это обратимый процесс. Из зашифрованного текста при помощи ключа всегда можно получить исходное сообщение. В то же время хэширование — это односторонний процесс, он необратимый. Единственный способ обратить хэш — подобрать такое стартовое значение, которое даёт нам такой же хэш.

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

При помощи дампа оперативной памяти можно даже добыть картинку рабочего стола. Необходимо найти процесс, который взаимодействует с рабочим столом, при помощи команды windows.pstree. Самый простой способ — это забрать explorer.exe, его ID и попытаться выгрузить все данные, которые связаны с процессом. Выгружаем их при помощи команды widnows.memmap и находим у себя файл с этими данными.

Картинка рабочего стола, полученная из дампа памяти
Картинка рабочего стола, полученная из дампа памяти

Файл переименовываем, закидываем его в GIMP и ищем данные, связанные с картинкой, подобрав максимально точное разрешение экрана. Если разрешение сильно отличается, то найти необходимый кадр будет тяжело. Вставляем разрешение 1440 на 900 и, сдвигая ползунок offset, находим картинку рабочего стола. То есть, что было в тот момент, когда выполнялся дамп памяти.

4. Анализ образа диска

Чтобы провести анализ образа диска, забираем файловую систему и всё, что в ней хранится. Делаем из этого один файл и анализируем при помощи таких программ, как FTKimager или OSFMount.

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

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

В OSForensics можно посмотреть, какие действия пользователь проводил на системе, которую вы подгрузили: можно посмотреть удалённые файлы, прочитать весь диск как файл, изучить информацию о системе (что за компьютер, какая ОС, hostname, мощности). К примеру, действия пользователя на системе удобно собраны отфильтрованы по приложениям или данным. Набор инструментов не ограничивается уже написанным, но и приложение платное.

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

Обучение на кибердетектика: практика в CTF

          Умения настоящего кибердетектива не ограничиваются несколькими навыками: он должен знать программирование, стеганографию, сети, криптографию, ОС, ФС, RE, OSINT и много других поначалу страшных аббревиатур.

И одна теория без практики вредна. Закрепить свои навыки можно на CTF — ИБ-соревнованиях.

Примеры флага CTF
Примеры флага CTF

Суть соревнования — найти строчку с флагом и отправить его организаторам. Давайте рассмотрим на примере.

Вы получаете файл, но вам непонятно, для чего он.

Любой файл можно открыть в текстовом редакторе и попытаться его понять. Видим фразы вроде Operation system load error. Понимаем, что это образ диска, значит, его можно открыть в FTK Imager.

Открываем, видим папку root.

Внутри папки root можно найти несколько картинок, открываем их. И на одной из картинок видно наш флаг.

А вот пример другой задачи. Нам дана схема сети и файл access.log. По схеме сети мы можем найти, что из сервисов есть только gitlab, поэтому логичнее искать что-то связанное с этим.

Ищем, что связано с Gitlab. Видим некоторое количество странных запросов на страницы shell и git. Пока они отвечают нам кодом 404 Not Found, ничего страшного, но уже видны первые попытки атаки.

Анализируем дальше и находим запросы на wp-admin, то есть на административную страницу нашего сайта были какие-то запросы.

Скопируем строчку, которая нам кажется наиболее подозрительной, и загуглим её.

Станет понятно, что это большая и популярная уязвимость. Осталось найти файлик — будем искать подобные строчки. Видим такую, которая ведёт на файл id_rsa. Это закрытый ключ ssh, зная который можно получить удалённый доступ к системе. Пробуем его в качестве флага и получаем заслуженные баллы.

Последняя задача. Нам дан файл pcap. Это файл с трафиком, откроем его в Wireshark. Видим в столбце протокола USB, значит, это файл трафика между компьютером и флешкой или каким-то другим устройством, подключённым через USB.

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

Извлечём данные из этого пакета. Для этого есть несколько способов, один из самых простых — нажать правой кнопкой мыши –> Export bytes.

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

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

Открываем её и видим QR-код, сканируем его и получаем флаг.

Где всему этому научиться?

Для этого есть несколько основных сайтов. Forensics Challenges на OverTheWire, также платформа Root me с похожими задачками. Мне как человеку, увлекающемуся CTF, нравится CTF-платформа от Codeby.games. Также существует сайт CTFTime, где можно следить за датами большего количества различных CTF, а после некоторых из них можно ознакомиться с решениями (райтапами) задач, которые были на этих CTF.

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