###### tags: `WEB basic`
# WEB_Basic-Омаров_Джамалутин-Практика-4
*Выполнил Омаров Джамалутин*
## Практическая работа №4.1 Web Application Firewall
### Часть 1. Настройка NGINX на ubuntu 20.04
1.1 Update and Upgrade;

1.2 Удалим сервис nginx и установим последнюю версию;
У меня данный сервис не установлен.

Добавим репозиторий для версии Nginx Mainline.

Установим.

1.3 Вручную установим исходный код, который не добавлен по умолчанию;
Откроем данный файл.

Раскомментируем.

Сохраним и обновим.

Создадим расположение.

Установим зависимости и загрузим их.

Проверим версии.

Убедимся, что пакет исходного кода совпадает с версией nginx.

### Часть 2. Установка libmodsecurity3 для ModSecurity
2.1 Установим git для дальнейшего клонирования пакетов;

2.2 Склонируем с репозитория libmodsecurity3;

2.3 Установим зависимости libmodsecurity3;


Также установим подмодули git.

И обновим их.

### Часть 3. Создание среды ModSecurity
3.1 Создадим среду и выполним команду конфигурации;


3.2 Компиляция кода;
Выполним команду.

После компиляции исходного кода выполним команду установки в терминале.

### Часть 4. Установка и настройка Коннектора Modsecrity-nginx
4.1 Склонируем его с git;

4.2 Установим зависимости;
Перейдем в нужный каталог.

Выполним команду.

Скомпилируем.

4.3 Создадим динамические модули;

Переместим только что созданный модуль.

4.4 Загрузим и настроим коннектор;
Необходимо указать load_module и путь к модулю.

Добавим эту строчку.

Затем перейдем в раздел http и добавим следующее.

Сохраним и выйдем.
### Часть 5. Создание каталога для файлов ModSecuruty
5.1 Создадим каталог;

5.2 Скопируем его в созданный каталог;

5.3 Отредактируем этот файл;
Откроем его.

Включим данное правило.

И это тоже.

Созраним и выйдем.
5.4 Отредактируем еще один файл;
Создадим его.

Впишем следующее.

Сохраним и выйдем.
5.5 Скопируем другой файл в тот же каталог;

5.6 Дальнейшая конфигурация;
Произведем сухой запуск.

Все в норме.

Для внесения изменений перезапустим данную службу.

### Часть 6. Установка набора правил OWASP для ModeSecurity
6.1 Загрузим и распакуем архив OWASP;
Скачаем архив.

Установим unzip распаковщик.

Распакуем архив.

Сохраним как резервную копию распакованную конфигурацию файла и скопируем ее.

6.2 Включим эти правила;
Открываем файл.

Вносим изменения.

Сохраняем и выходим. Выполним сухой запуск nginx.

Выполним перезапуск.

### Часть 7. Использование и понимание набора правил OWASP
Установленные правила OWASP из коробки могут защитить большинство серверов, не навредив пользователям.
7.1 Просмотрим следующий файл;

Видим первый режим работы (оценка аномалий).

Второй режим работы (автономный режим).

4 уровня паранои представлены тут.

### Часть 8. Тестирование OWASP CRS на сервере
8.1 Откроем браузер по следующей ссылке;

У нас 403 ошибка, она означает, что доступ запрещен!
## Практическая работа №4.2 Самостоятельная базовая конфигурация WAF
Мы должны попытаться атаковать приложение, используя атаки из OWASP TOP 10.
Ранее мы настроили ModSecurity на Ubuntu 20.04. Буду настраивать WAF по аналогии, а также настрою на нем обратный прокси. **Защиту, которая уже есть на Ubuntu я просто выключу**. Настройки продемонстрирую.
### Часть 1. Настройка NGINX обратный прокси
Буду настраивать обратный прокси, используя nginx.
1.1 На созданной машине WAF открываем sites-enabled/default;

Для конфигурирования виртуальных хостов рекомендуется использовать именно sites-enabled/default. У меня были попытки настройки прокси через nginx.conf, который является конфигурационным файлом, но к сожалению они оказались безуспешными, тогда я решил прописать location именно в sites-enabled/default.
1.2 Дописываем следующее: `location / {proxy_pass http:192.168.146.145:3000/;}`
где:
server - здесь находятся секции location, каждая из которых отвечается за определенный URL запроса, который мы выставим.
listen - обозначение порта на WAF, который слушает, то есть WAF в данном случае выступает посредником, прослушивающим и анализирующим трафик.
proxy_pass указывает на то, что будем слушать. На данном адресе на 3000 порту у нас находится приложение, которое мы развернули при помощи docker.
1.3 Результат;




Обращаясь по ip WAF мы попадаем в приложение. Для наглядности приложил скриншот развернулых виртуалок с показанным ip.
Также скриншот запущенного веб-приложения и корректного синтаксиса nginx.
Итог: WAF является прокси для Ubuntu.
### Часть 2. WAF ModSecurity
Устанавливал ModSecurity по аналогии с практической работой 4.1. Только на WAF машину.
2.1 Актуальная версия nginx;

2.2 Пакет исходного кода совпадает с установленной версией nginx;

Первые два пункта указал как базис, используя который уже можно устанавливать и конфигурировать ModSecurity 3.
2.3 Динамический модуль уже скомпилирован.




2.4 Теперь нужно отредактировать nginx так, чтобы ModSecurity работал с nginx.

Добавил load_module, а также указал `modsecurity on`, чтобы ModSecurity заработал, и путь к конфигурации `modsec-config.conf`.
2.5 Включаем блокирование вредоносного поведения, по умолчанию параметр SecRuleEngine установлен в DetectionOnly, что означает обнаружение подобный вредоносных запросов, но не блокирование!

2.6 SecAuditLogParts определяет, какая информация будет включена в каждый журнал аудита. Это нам необходимо поэтому меняем.

Информацию о параметрах нашел в интернете.


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

Настройка на данном этапе Лабораторной работы завершена.
Демонстрирую, что ранее развернутый веб-сайт открывается при коннекте на WAF. Я сделал это в предыдущей части работы, покажу снова.
Обратите внимание на ip адрес... Это адрес веб-сервера, на котором развернуто приложение.

А теперь обратимся на ip адрес WAF. В практической работе 4.2 части 1 я показал как настраивать проксирование.

Вот результат!
### Часть 3. OWASP Top 10
Задача: Настроить WAF с детеком OWASP TOP 10.
3.1 Ранее мы уже включили файлы конфигурации в правила ModSecurity;

3.2 Теперь посмотрим какие конфиги мы включили, более подробно;

3.2 А также конфиг crs-setup.conf;

Настройка происходит раскомментированием определенных секций в конфиге, приведу пример скриншотами некоторых конфигов...
XSS;

IP Reputation;

SQL-Injection;

### Часть 4. Атаки
Перейдем к Атакам. Необходимо провести 3 атаки из списка OWASP top 10 и продемонстрировать работоспособность WAF.
1. Broken Access Control
Попробуем ввод кавычки в поле ввода логина, а пароль введем любой, как мы делали на portswigger.

Получаем такой вывод.

Попробуем зайти как administrator и заигнорить пароль.

Отлично, наш WAF среагировал и выдал ошибку 403.

Задетектили атаку, так выглядит лог файл.

Вот информация по тому, как именно отразилась атака, какое правило использовалось при отражении.

Строчка `REQUEST-942-APPLICATION-ATTACK-SQLI.conf` говорит нам об этом.
2. Отзыв о товаре
Заметил, что получаю запрет на оставление отзыва о товаре.


Это происходит, потому что данная логика в приложении уязвима, и WAF заведомо блокирует доступ.


Можно было бы развить атаку, я бы посмотрел, какой именно параметр меняется, возможно он появится в теле запроса в BURP. Возможно имя пользователя передается без проверки, можно было бы подставить другое, к примеру.
Скорее всего произошел ложный блок, что мы и наблюдаем.
3. Блокирование SQL иньекции
Используем достаточно простую логику `'or 1=1--`

Задетеклили атаку.

Сообщения из Burp.

Как видели из burp некоторые запросы были заблокированы, и страницу соответственно мы тоже не увидим.

4. XSS
Оформляем заказ.

Нажимаем "отследить заказ".

Там появляется параметр id, прямо в url. Воспользуемся!

Напишем простой скрипт.

Нажмем enter -> обновим страницу.

Как видим произошло кодирование, но атака не прошла.

Задетектил атаку!

И alert не выводится.

### Настройка Топологии
Данную лабораторную работу проводил, используя VMWARE. Настраивать сетевой мост не потребовалось.
UBUNTU

WAF

Windows (основной хост)

Сеть 192.168.146.0/24
WAF 192.168.146.146
UBUNTU 192.168.146.145
WINDOWS 192.168.146.1