---
# System prepended metadata

title: INT-3-Омаров_Джамалутин
tags: [INT]

---

###### 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]` равен введенному хэшу и длина пароля совпадает с предложенной нами, тогда выведи этот пароль. Если нет, переходи к следующей итерации. Так будет происходить, пока не закончится список паролей или не найдет совпадающий пароль.


