> For the complete documentation index, see [llms.txt](https://nskarapetyants.gitbook.io/linux-hevd-tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nskarapetyants.gitbook.io/linux-hevd-tutorial/laboratornaya-rabota-5/arbitrary-write/zadanie.md).

# Задание

## Настройка виртуального окружения

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

### Шаг 1. Скачать Vagrantfile

В первую очередь необходимо скачать Vagrantfile последней версии перейдя по ссылке: <https://github.com/kolyandaemon/linux-hevd/releases/>. После скачанный файл необходимо скопировать в директорию, путь к которой должен содержать только латинские буквы.&#x20;

### Шаг 2. Установить виртуальную среду&#x20;

Далее необходимо в  директории, куда был скопирован файл, необходимо выполнить следующую команду:&#x20;

```
$ vagrant up
```

Чтобы открыть терминал в Windows 10 в директории достаточно навести курсор мыши на пустое пространство окна проводника, зажать клавишу `Shift` и нажать правую кнопку мыши. В появившемся контекстном меню выбрать поле "Открыть окно PowerShell здесь".

### Шаг 3. Выполнить сборку и установку модуля

После того как процесс настройки модуля будет завершен необходимо осуществить вход в виртуальную среду и запустить сценарий сборки и установки модуля. Это производиться тремя командами:&#x20;

```
$ vagrant ssh
$ cd linux-hevd
$ sh compile_and_insmod.sh
```

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

{% embed url="<https://www.youtube.com/watch?v=gnDlMtZOlak&ab_channel=KolyanDaemon>" %}
Видеоинструкция&#x20;
{% endembed %}

### 1 этап&#x20;

С учетом приобретенных навыков в второй лабораторной работе необходимо отключить следующие средства защиты: KASLR, SMEP, SMAP и stack canary. Это нужно для облегчения понимания функционирования уязвимости в ядре.&#x20;

### 2 этап

Далее необходимо собрать модуль ядра, установить его. Сделать это можно с помощью инструкции выше.  Также рекомендуется изучить исходные файлы функции, демонстрирующую уязвимость:     [ArbitraryWrite.c](https://github.com/kolyandaemon/linux-hevd/blob/master/sources/HEVD/Linux/ArbitraryWrite.c),  [ArbitraryWrite.h](https://github.com/kolyandaemon/linux-hevd/blob/master/sources/HEVD/Linux/ArbitraryWrite.h)  [Common.h](https://github.com/kolyandaemon/linux-hevd/blob/master/sources/HEVD/Linux/Common.h),  [hevd.py](https://github.com/kolyandaemon/linux-hevd/blob/master/exploit/hevd.py),  [arbitrary\_write.py](https://github.com/kolyandaemon/linux-hevd/blob/master/exploit/arbitrary_write.py)

### 3 этап&#x20;

Необходимо выполнить системный вызов функции, демонстрирующую уязвимость CWE-457: Use of Uninitialized Variable при разных условиях: с выключенными механизмами защиты и с включенными механизмами защиты. Поскольку функция осуществляет запись входных данных напрямую в память необходимо не допустить состояния "Kernel Panic" при вызове системного вызова.
