---
# System prepended metadata

title: WEB_Basic-Омаров_Джамалутин-Практика-4
tags: [WEB basic]

---

###### tags: `WEB basic`
# WEB_Basic-Омаров_Джамалутин-Практика-4
*Выполнил Омаров Джамалутин*
## Практическая работа №4.1 Web Application Firewall

### Часть 1. Настройка NGINX на ubuntu 20.04

1.1 Update and Upgrade;
![](https://i.imgur.com/a1IC84e.png)

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

У меня данный сервис не установлен.
![](https://i.imgur.com/0fDpsyh.png)

Добавим репозиторий для версии Nginx Mainline.
![](https://i.imgur.com/eCZv3Dp.png)

Установим.
![](https://i.imgur.com/ZMtsbjS.png)

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

Откроем данный файл.
![](https://i.imgur.com/C9YAYRB.png)

Раскомментируем.
![](https://i.imgur.com/vJ7trB3.png)

Сохраним и обновим.
![](https://i.imgur.com/LXOXAyi.png)

Создадим расположение.
![](https://i.imgur.com/Wpjm83s.png)

Установим зависимости и загрузим их.
![](https://i.imgur.com/0OKvOQA.png)

Проверим версии.
![](https://i.imgur.com/8sfMSBD.png)

Убедимся, что пакет исходного кода совпадает с версией nginx.
![](https://i.imgur.com/89YTcTY.png)

### Часть 2. Установка libmodsecurity3 для ModSecurity

2.1 Установим git для дальнейшего клонирования пакетов;
![](https://i.imgur.com/p61iIJU.png)

2.2 Склонируем с репозитория libmodsecurity3;
![](https://i.imgur.com/62HobaR.png)

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

![](https://i.imgur.com/xp8QKc6.png)

![](https://i.imgur.com/zAs0GMp.png)

Также установим подмодули git.
![](https://i.imgur.com/RXTfdvO.png)

И обновим их.
![](https://i.imgur.com/qyX3u1W.png)

### Часть 3. Создание среды ModSecurity

3.1 Создадим среду и выполним команду конфигурации;

![](https://i.imgur.com/kEt7ubr.png)

![](https://i.imgur.com/GsD9DJE.png)

3.2 Компиляция кода;

Выполним команду.
![](https://i.imgur.com/p3lWTIu.png)

После компиляции исходного кода выполним команду установки в терминале.
![](https://i.imgur.com/FpSFFWt.png)

### Часть 4. Установка и настройка Коннектора Modsecrity-nginx

4.1 Склонируем его с git;

![](https://i.imgur.com/pPuOcOF.png)

4.2 Установим зависимости;

Перейдем в нужный каталог.
![](https://i.imgur.com/HBBmBFC.png)

Выполним команду.
![](https://i.imgur.com/WSyj9NZ.png)

Скомпилируем.
![](https://i.imgur.com/s6KJPEf.png)

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

![](https://i.imgur.com/KuOgDPd.png)

Переместим только что созданный модуль.
![](https://i.imgur.com/2ChseFe.png)

4.4 Загрузим и настроим коннектор;

Необходимо указать load_module и путь к модулю.
![](https://i.imgur.com/gao6uk4.png)

Добавим эту строчку.
![](https://i.imgur.com/gg2C2Og.png)

Затем перейдем в раздел http и добавим следующее.
![](https://i.imgur.com/ypmL5TJ.png)

Сохраним и выйдем.

### Часть 5. Создание каталога для файлов ModSecuruty

5.1 Создадим каталог;

![](https://i.imgur.com/SI1e9vK.png)

5.2 Скопируем его в созданный каталог;
![](https://i.imgur.com/BuUTqmb.png)

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

Откроем его.
![](https://i.imgur.com/bKMuKmc.png)

Включим данное правило.
![](https://i.imgur.com/p4UhXN8.png)

И это тоже.
![](https://i.imgur.com/EMaQtjc.png)

Созраним и выйдем.

5.4 Отредактируем еще один файл;

Создадим его.
![](https://i.imgur.com/ZuzcxA2.png)

Впишем следующее.
![](https://i.imgur.com/Q23ztaA.png)

Сохраним и выйдем.

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

![](https://i.imgur.com/kgYQH8O.png)

5.6 Дальнейшая конфигурация;

Произведем сухой запуск.
![](https://i.imgur.com/iKkiIcd.png)

Все в норме.
![](https://i.imgur.com/EDKQ08z.png)

Для внесения изменений перезапустим данную службу.
![](https://i.imgur.com/2KL7vTz.png)

### Часть 6. Установка набора правил OWASP для ModeSecurity

6.1 Загрузим и распакуем архив OWASP;

Скачаем архив.
![](https://i.imgur.com/0pcyYKM.png)

Установим unzip распаковщик.
![](https://i.imgur.com/zUnpLP4.png)

Распакуем архив.
![](https://i.imgur.com/Tk2J4NE.png)

Сохраним как резервную копию распакованную конфигурацию файла и скопируем ее.
![](https://i.imgur.com/Qi44Nuy.png)

6.2 Включим эти правила;

Открываем файл.
![](https://i.imgur.com/pC0OAC1.png)

Вносим изменения.
![](https://i.imgur.com/ntAt9VN.png)

Сохраняем и выходим. Выполним сухой запуск nginx.
![](https://i.imgur.com/QgS2BAG.png)

Выполним перезапуск.
![](https://i.imgur.com/1dlmubM.png)

### Часть 7. Использование и понимание набора правил OWASP

Установленные правила OWASP из коробки могут защитить большинство серверов, не навредив пользователям.

7.1 Просмотрим следующий файл;

![](https://i.imgur.com/nqrVdb5.png)

Видим первый режим работы (оценка аномалий).
![](https://i.imgur.com/f1xl4ty.png)

Второй режим работы (автономный режим).
![](https://i.imgur.com/lQRGEiV.png)

4 уровня паранои представлены тут.
![](https://i.imgur.com/N2FTNjs.png)

### Часть 8. Тестирование OWASP CRS на сервере

8.1 Откроем браузер по следующей ссылке;

![](https://i.imgur.com/2gZJBDt.png)

У нас 403 ошибка, она означает, что доступ запрещен!

## Практическая работа №4.2 Самостоятельная базовая конфигурация WAF

Мы должны попытаться атаковать приложение, используя атаки из OWASP TOP 10.

Ранее мы настроили ModSecurity на Ubuntu 20.04. Буду настраивать WAF по аналогии, а также настрою на нем обратный прокси. **Защиту, которая уже есть на Ubuntu я просто выключу**. Настройки продемонстрирую.

### Часть 1. Настройка NGINX обратный прокси

Буду настраивать обратный прокси, используя nginx.

1.1 На созданной машине WAF открываем sites-enabled/default;
![](https://i.imgur.com/ZSThs4G.png)

Для конфигурирования виртуальных хостов рекомендуется использовать именно 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 Результат;
![](https://i.imgur.com/4j1Jxu8.png)
![](https://i.imgur.com/QiKc80n.png)
![](https://i.imgur.com/NmshLdf.png)
![](https://i.imgur.com/cMVTCa0.png)

Обращаясь по ip WAF мы попадаем в приложение. Для наглядности приложил скриншот развернулых виртуалок с показанным ip.
Также скриншот запущенного веб-приложения и корректного синтаксиса nginx.

Итог: WAF является прокси для Ubuntu.

### Часть 2. WAF ModSecurity

Устанавливал ModSecurity по аналогии с практической работой 4.1. Только на WAF машину.

2.1 Актуальная версия nginx;
![](https://i.imgur.com/MJULYIm.png)

2.2 Пакет исходного кода совпадает с установленной версией nginx;
![](https://i.imgur.com/deMUwhe.png)

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

2.3 Динамический модуль уже скомпилирован.
![](https://i.imgur.com/eNH2KuR.png)

![](https://i.imgur.com/Jk3iz0g.png)

![](https://i.imgur.com/s7PzC9o.png)

![](https://i.imgur.com/zKzFHKB.png)

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

![](https://i.imgur.com/ymMDPWL.png)

Добавил load_module, а также указал `modsecurity on`, чтобы ModSecurity заработал, и путь к конфигурации `modsec-config.conf`.

2.5 Включаем блокирование вредоносного поведения, по умолчанию параметр SecRuleEngine установлен в DetectionOnly, что означает обнаружение подобный вредоносных запросов, но не блокирование!

![](https://i.imgur.com/Vhzg3TR.png)

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

![](https://i.imgur.com/of6afnO.png)

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

![](https://i.imgur.com/8LXwHGg.png)

![](https://i.imgur.com/MKNCjWI.png)

2.7 Включаем файл с правилами следующие строчки, для того чтобы ModSecurity понимал, какие действия необходимо детектить и блокировать.
![](https://i.imgur.com/zqKjqVh.png)

Настройка на данном этапе Лабораторной работы завершена.

Демонстрирую, что ранее развернутый веб-сайт открывается при коннекте на WAF. Я сделал это в предыдущей части работы, покажу снова.
Обратите внимание на ip адрес... Это адрес веб-сервера, на котором развернуто приложение.
![](https://i.imgur.com/DB6M23X.png)

А теперь обратимся на ip адрес WAF. В практической работе 4.2 части 1 я показал как настраивать проксирование.
![](https://i.imgur.com/QMVDj1N.png)

Вот результат!

### Часть 3. OWASP Top 10

Задача: Настроить WAF с детеком OWASP TOP 10.

3.1 Ранее мы уже включили файлы конфигурации в правила ModSecurity;
![](https://i.imgur.com/qIuW6jr.png)

3.2 Теперь посмотрим какие конфиги мы включили, более подробно;
![](https://i.imgur.com/VSeJlb3.png)

3.2 А также конфиг crs-setup.conf; 
![](https://i.imgur.com/a5ry1rE.png)

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

XSS;
![](https://i.imgur.com/zeai01f.png)

IP Reputation;
![](https://i.imgur.com/5D0kK9M.png)

SQL-Injection;
![](https://i.imgur.com/x90lGdJ.png)

### Часть 4. Атаки

Перейдем к Атакам. Необходимо провести 3 атаки из списка OWASP top 10 и продемонстрировать работоспособность WAF.

1. Broken Access Control

Попробуем ввод кавычки в поле ввода логина, а пароль введем любой, как мы делали на portswigger.

![](https://i.imgur.com/iQHDryH.png)

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

![](https://i.imgur.com/jer5Q9h.png)

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

![](https://i.imgur.com/g69G25K.png)

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

![](https://i.imgur.com/AsXLfe6.png)

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

![](https://i.imgur.com/fU5oSxb.png)

Вот информация по тому, как именно отразилась атака, какое правило использовалось при отражении.
![](https://i.imgur.com/J5ArmRQ.png)

Строчка `REQUEST-942-APPLICATION-ATTACK-SQLI.conf` говорит нам об этом.

2. Отзыв о товаре

Заметил, что получаю запрет на оставление отзыва о товаре.

![](https://i.imgur.com/nj0Udid.png)

![](https://i.imgur.com/Xta9vl5.png)

Это происходит, потому что данная логика в приложении уязвима, и WAF заведомо блокирует доступ. 
![](https://i.imgur.com/TdetR13.png)

![](https://i.imgur.com/GbwF3dA.png)

Можно было бы развить атаку, я бы посмотрел, какой именно параметр меняется, возможно он появится в теле запроса в BURP. Возможно имя пользователя передается без проверки, можно было бы подставить другое, к примеру.

Скорее всего произошел ложный блок, что мы и наблюдаем.

3. Блокирование SQL иньекции

Используем достаточно простую логику `'or 1=1--`
![](https://i.imgur.com/cpq2wk3.png)

Задетеклили атаку.
![](https://i.imgur.com/jM8aoSp.png)

Сообщения из Burp.
![](https://i.imgur.com/KvlmjrQ.png)

Как видели из burp некоторые запросы были заблокированы, и страницу соответственно мы тоже не увидим.
![](https://i.imgur.com/0Qxp9Sw.png)

4. XSS

Оформляем заказ.
![](https://i.imgur.com/TVkUc9I.png)

Нажимаем "отследить заказ".
![](https://i.imgur.com/b0YrnAe.png)

Там появляется параметр id, прямо в url. Воспользуемся!
![](https://i.imgur.com/BGe8g5a.png)

Напишем простой скрипт.
![](https://i.imgur.com/GNQneXZ.png)

Нажмем enter -> обновим страницу.
![](https://i.imgur.com/4GtgPQz.png)

Как видим произошло кодирование, но атака не прошла.
![](https://i.imgur.com/3lxsqXl.png)

Задетектил атаку!
![](https://i.imgur.com/ycQXCKN.png)

И alert не выводится.
![](https://i.imgur.com/KYoHa5t.png)

### Настройка Топологии

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

UBUNTU
![](https://i.imgur.com/Bvh0I6b.png)

WAF
![](https://i.imgur.com/iOVjP6f.png)

Windows (основной хост)
![](https://i.imgur.com/fvCSGc5.png)

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

