###### tags: `INT`
# INT-3-Омаров_Джамалутин
*Выполнил Омаров Джамалутин*
## Threat Hunting. Анализ действий злоумышленников
### Написать детект по событиям (в синтаксисе SIGMA) на скачивание файла с помощью certutil.exe
1. Подготовка
Установим `sysmon.exe`, предварительно скачав архив.

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

Обновим конфигурацию.

Таким образом представлены правила, на основании которых `sysmon` детектит события.

Журнал `sysmon`

После применения конфигурации из методички. У нас детектируются события от `certutil.exe`. Также я отключил Windows Defender.
Ранее я проделывал данную работу на Win7, там команда срабатывала без проблем. Позже напишу почему на Win7 выполнить не получилось.

Данные события относятся к одному скачиванию.

То есть, у нас уже есть правила для детектирования, но моя задача, показать как можно написать данные правила, применяя `SIGMA`.
Для начала скачаем архив, далее действуем по командам из репозитория. Там подробно объявляется, что необходимо прописать.
Установим python.

Установим sigmatools.

Готово.

2. Написание правила.
Переходим в данному пути, открываем любое правило для того, чтобы использовать шаблон. Будем писать свое правило.

Вот так оно выглядит.

Если задача детектить загрузку, я бы детектил выход в cmd.exe, далее certutil.exe с флагами. На скриншоте видна детектированная команда.

Написали такое правило в `.yml` файле, который лежит на пути `rules/windows/sysmon`

Положил в данную папку.

Преобразование правила выглядит так.

Теперь объясню почему на Windows 7 не получилось выполнить задание. Начиная с определенной версии python, Windows 7 поддерживать не будет. Необходимая верия python не работала даже после обновления и установки необходимых пакетов. Пересел на `Win10`, сразу все заработало. Обновляйтесь!
### Написать детект по событиям (в синтаксисе suricata) на скачивание файла с помощью certutil.exe
Буду писать правило и постепенно объяснять.
certutil.exe задетектировалось таким образом, обратите внимание на порт и протокол.

Поэтому при написании буду использовать протокол tcp, так как tcp:80 это http. Но суть не в это, а том, чтобы детектировать возможность ображения по данному протоколу для утилиты `certutil.exe` используя набор правил для `suricata`
Ознакомился с документацией и синтаксисом.

Здесь можно найти параметры.

Синтаксис должен быть примерно такой. В нашем случае (так как мы пишем детект) будет `alert`

Делаю вывод, что `Suricata` это про трафик, так как основным параметрами являются ip и port источник и получателя. Остальные поля записываются как фильтр, описывая ситуацию.
В Sigme можно было указать больше параметров для фильтра.
Загрузка будет происходить при помощи tcp:80 протокола, потому что есть необходимость правильности доставки пакетов, а также их целостности.
Обнаружил ip отпрваителя.

На след скриншоте можно увидеть основу. По ходу выполнения строка будет добавляться.

Написал такое, правило (поясню).

* `http.response_body` - сообщение, которое мы получает от сервера в теле запроса. То есть будет поиск по заданному мной слову "download" в направлении ответа.
* `http.method` - используемый метод.
* `filestore` - сохраняет файл в направлении ответа.
### Написать программу, выдающую строку по заданным произвольному началу md5-хеша и длине этой строки
1. Немного тренировки.
Написал программу, которая хеширует введенные данные.

Вот ее код.

Вот данные, хеш которых я записал в файл `hashes.txt`

Слова:
* ticket
* positive
* snake
* password
* family
Их хеш + длина искомой строки на следующем скриншоте.

2. Выполнение задания.
Ранее я немного попрактиковать python, вспомнил как все работает. Сейчас приступим к заданию.
Нам необходимо будет знать начало хэша и длину строки. Я думаю реализую следующим образом. У меня будет прога, которая хэширует строку, по ней буду определять, что я хочу найти. Также у меня будет файл со строками.
Программа ниже просто хэширует строку.

Также у меня будет небольшой список строк.

Написал программу, она пока работает только на совпадение хэша.

Вот так выглядит код.

Теперь можно искать по хэшу + длина строки.

Вот так выглядит код.

А теперь финальное добавление и мы выполнили задание.

Код теперь выглядит вот так.

Немного подробностей.
У меня есть файл, где лежат строки (назовем их пароли). Вначале программа запрашивает у вас начальный хэш и длину пароля. Далее вычисляет `hash_len` (длина введенного хэш). Реализация при помощи try - except. Тут нас ожидает цикл for, который проходит по паролям в файле сразу вычисляет его длину -> кодирует -> хэширует -> возвращает строковый объект. Если получившийся строковый объект, длину которого мы ограничиваем `[0:hash_len]` равен введенному хэшу и длина пароля совпадает с предложенной нами, тогда выведи этот пароль. Если нет, переходи к следующей итерации. Так будет происходить, пока не закончится список паролей или не найдет совпадающий пароль.