###### tags: `INT` # INT-3-Омаров_Джамалутин *Выполнил Омаров Джамалутин* ## Threat Hunting. Анализ действий злоумышленников ### Написать детект по событиям (в синтаксисе SIGMA) на скачивание файла с помощью certutil.exe 1. Подготовка Установим `sysmon.exe`, предварительно скачав архив. ![](https://i.imgur.com/zvwkMlz.png) Для этого воспользуемся представленной в задании ссылкой на репозиторий с конфигурацией. Скачаем архивом и используем данные команды для конфигурирования. ![](https://i.imgur.com/77zP2NG.png) Обновим конфигурацию. ![](https://i.imgur.com/qYlhSTc.png) Таким образом представлены правила, на основании которых `sysmon` детектит события. ![](https://i.imgur.com/qViUFE4.png) Журнал `sysmon` ![](https://i.imgur.com/3jVz9U5.png) После применения конфигурации из методички. У нас детектируются события от `certutil.exe`. Также я отключил Windows Defender. Ранее я проделывал данную работу на Win7, там команда срабатывала без проблем. Позже напишу почему на Win7 выполнить не получилось. ![](https://i.imgur.com/9bI8ug3.png) Данные события относятся к одному скачиванию. ![](https://i.imgur.com/uX0VEYb.png) То есть, у нас уже есть правила для детектирования, но моя задача, показать как можно написать данные правила, применяя `SIGMA`. Для начала скачаем архив, далее действуем по командам из репозитория. Там подробно объявляется, что необходимо прописать. Установим python. ![](https://i.imgur.com/w1ERyuq.png) Установим sigmatools. ![](https://i.imgur.com/AVoW161.png) Готово. ![](https://i.imgur.com/DkSWTeU.png) 2. Написание правила. Переходим в данному пути, открываем любое правило для того, чтобы использовать шаблон. Будем писать свое правило. ![](https://i.imgur.com/7t4RhDb.png) Вот так оно выглядит. ![](https://i.imgur.com/k638wph.png) Если задача детектить загрузку, я бы детектил выход в cmd.exe, далее certutil.exe с флагами. На скриншоте видна детектированная команда. ![](https://i.imgur.com/25Gc04P.png) Написали такое правило в `.yml` файле, который лежит на пути `rules/windows/sysmon` ![](https://i.imgur.com/0Jhmdas.png) Положил в данную папку. ![](https://i.imgur.com/1P1UJ0N.png) Преобразование правила выглядит так. ![](https://i.imgur.com/0du8ceI.png) Теперь объясню почему на Windows 7 не получилось выполнить задание. Начиная с определенной версии python, Windows 7 поддерживать не будет. Необходимая верия python не работала даже после обновления и установки необходимых пакетов. Пересел на `Win10`, сразу все заработало. Обновляйтесь! ### Написать детект по событиям (в синтаксисе suricata) на скачивание файла с помощью certutil.exe Буду писать правило и постепенно объяснять. certutil.exe задетектировалось таким образом, обратите внимание на порт и протокол. ![](https://i.imgur.com/QqPsYAd.png) Поэтому при написании буду использовать протокол tcp, так как tcp:80 это http. Но суть не в это, а том, чтобы детектировать возможность ображения по данному протоколу для утилиты `certutil.exe` используя набор правил для `suricata` Ознакомился с документацией и синтаксисом. ![](https://i.imgur.com/zEtwaOG.png) Здесь можно найти параметры. ![](https://i.imgur.com/TbO96pH.png) Синтаксис должен быть примерно такой. В нашем случае (так как мы пишем детект) будет `alert` ![](https://i.imgur.com/z0HFNnl.png) Делаю вывод, что `Suricata` это про трафик, так как основным параметрами являются ip и port источник и получателя. Остальные поля записываются как фильтр, описывая ситуацию. В Sigme можно было указать больше параметров для фильтра. Загрузка будет происходить при помощи tcp:80 протокола, потому что есть необходимость правильности доставки пакетов, а также их целостности. Обнаружил ip отпрваителя. ![](https://i.imgur.com/sZjXXzG.png) На след скриншоте можно увидеть основу. По ходу выполнения строка будет добавляться. ![](https://i.imgur.com/jEGfQEv.png) Написал такое, правило (поясню). ![](https://i.imgur.com/OTQCczC.png) * `http.response_body` - сообщение, которое мы получает от сервера в теле запроса. То есть будет поиск по заданному мной слову "download" в направлении ответа. * `http.method` - используемый метод. * `filestore` - сохраняет файл в направлении ответа. ### Написать программу, выдающую строку по заданным произвольному началу md5-хеша и длине этой строки 1. Немного тренировки. Написал программу, которая хеширует введенные данные. ![](https://i.imgur.com/qO0OGEu.png) Вот ее код. ![](https://i.imgur.com/KZ4ci81.png) Вот данные, хеш которых я записал в файл `hashes.txt` ![](https://i.imgur.com/KdzyXoC.png) Слова: * ticket * positive * snake * password * family Их хеш + длина искомой строки на следующем скриншоте. ![](https://i.imgur.com/K2ndevy.png) 2. Выполнение задания. Ранее я немного попрактиковать python, вспомнил как все работает. Сейчас приступим к заданию. Нам необходимо будет знать начало хэша и длину строки. Я думаю реализую следующим образом. У меня будет прога, которая хэширует строку, по ней буду определять, что я хочу найти. Также у меня будет файл со строками. Программа ниже просто хэширует строку. ![](https://i.imgur.com/4bf72Ho.png) Также у меня будет небольшой список строк. ![](https://i.imgur.com/u9zk0a1.png) Написал программу, она пока работает только на совпадение хэша. ![](https://i.imgur.com/D5TJKXT.png) Вот так выглядит код. ![](https://i.imgur.com/Nr65VGY.png) Теперь можно искать по хэшу + длина строки. ![](https://i.imgur.com/VDlkZnh.png) Вот так выглядит код. ![](https://i.imgur.com/UWKu1wa.png) А теперь финальное добавление и мы выполнили задание. ![](https://i.imgur.com/VoW40br.png) Код теперь выглядит вот так. ![](https://i.imgur.com/KXXhdaH.png) Немного подробностей. У меня есть файл, где лежат строки (назовем их пароли). Вначале программа запрашивает у вас начальный хэш и длину пароля. Далее вычисляет `hash_len` (длина введенного хэш). Реализация при помощи try - except. Тут нас ожидает цикл for, который проходит по паролям в файле сразу вычисляет его длину -> кодирует -> хэширует -> возвращает строковый объект. Если получившийся строковый объект, длину которого мы ограничиваем `[0:hash_len]` равен введенному хэшу и длина пароля совпадает с предложенной нами, тогда выведи этот пароль. Если нет, переходи к следующей итерации. Так будет происходить, пока не закончится список паролей или не найдет совпадающий пароль.