---
# System prepended metadata

title: Web Basic Модуль Занятие 4

---

# Web Basic Модуль Занятие 4
## WAF (Web Application Firewall)

В этой работе создадим топологию, в которую включен веб сервер, WAF и атакующая машина. Настроим WAF для блокировки атак из OWASP TOP-10 и проверим работу некоторых атак.
Топология
![](https://i.imgur.com/3y7njAf.png)

### Настройка сети
Для начала понадобится настроить сеть на всех машинах. 
Kali-Linux и WAF (порт e0) будут получать IP-адрес по DHCP от внешнего адаптера, для Web-Server и WAF (порт e1) понадобится объявить статические адреса, а также сделать проброс трафика через WAF на сервер.
Сначала установим адресацию для интерфейса Web-Server
![](https://i.imgur.com/UlhqSRO.png)
И перезагрузим менеджер сетей
![](https://i.imgur.com/SjTj068.png)
Далее настроим подключения на WAF (объявим IP-адрес для ens4 и попросим выдачи IP-адреса на ens3)
![](https://i.imgur.com/3x7CnUC.png)
Включим ip-форвардинг для работы маршрутизации пакетов
![](https://i.imgur.com/pgzQUij.png)
Также воспользуемся iptables и произведем проброс трафика
```
sudo iptables -t nat -a POSTROUTING -j MASQUERADE
```
![](https://i.imgur.com/sYSgLFV.png)
Проверим наличие сети на хостах
![](https://i.imgur.com/O6D7JdF.png)
![](https://i.imgur.com/yJkF0RV.png)

### Настройка Web-Server
Для настройки сервера нам только понадобится установить web-приложение в контейнере Docker и включить его на 80 порт сервера. Для этого:

Обновим пакеты системы
![](https://i.imgur.com/2UbXGk0.png)
Установим модули для инсталляции Docker
```
sudo apt install apt-transport-https ca-certificates curl software-properties-common
```
![](https://i.imgur.com/JiRKFBO.png)
![](https://i.imgur.com/o0I7F1C.png)
Скачаем ключ для репозитория Docker
```
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
![](https://i.imgur.com/THT9a47.png)
Далее добавим репозиторий Docker в список репозиториев для обновления
```
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
```
![](https://i.imgur.com/RxTvsLR.png)
После чего обновим менеджер пакетов
![](https://i.imgur.com/tNuVvvv.png)
Теперь при проверке доступных версий с помощью `apt-cache policy docker-ce` будем получать ссылки на пакеты с официального репозитория
![](https://i.imgur.com/O8a9ECW.png)
Тогда установим Docker
![](https://i.imgur.com/szuHb4V.png)
Проверим, что после установки Docker запустился
![](https://i.imgur.com/VHV1wj2.png)
Теперь скачаем web-приложение для сервера (ссылка: https://hub.docker.com/r/bkimminich/juice-shop, на веб-странице будет команда, которую нужно использовать для установки приложения)
![](https://i.imgur.com/iJLOBNT.png)
После чего можно будет запустить приложение на 80 порту сервера и 3000 порту Docker, оно будет доступно в сети Web-сервера при обращении к IP-адресу сервера в браузере
![](https://i.imgur.com/27Jr9Xn.png)

### Настройка WAF
Для WAF используется Ubuntu 20.04
![](https://i.imgur.com/4CQeZxo.png)
Обновим все пакеты
![](https://i.imgur.com/Nsf0JmD.png)
Теперь проверим, что на сервере нет nginx
![](https://i.imgur.com/o5C3TLa.png)
Теперь добавим репозиторий для nginx и обновим данные менджера пакетов
```
sudo add-apt-repository ppa:ondrej/nginx-stable -y && sudo apt update
```
![](https://i.imgur.com/43Y0FS2.png)
Теперь можно установить пакеты nginx
![](https://i.imgur.com/6wwrUHM.png)
Теперь нам понадобится докачать исходные файлы nginx. Для этого раскоментируем ссылку на исходные файлы в список sources.list менеджера пакетов
![](https://i.imgur.com/nw1TZ79.png)
После добавления обновим данные менеджера пакетов
![](https://i.imgur.com/YMbriV9.png)
Теперь создадим папку, в котой будут находиться исходники nginx (этой папке потребуется изменить права на права пользователя) и переместимся в нее
![](https://i.imgur.com/iS2X9Qm.png)
После скачаем пакет для создания пакетов и исходный код nginx
![](https://i.imgur.com/X0FalL2.png)
Теперь проверим, что все версии совпадают (для этого нужно посмотреть на названия пакетов в папке и на версию установленного nginx)
![](https://i.imgur.com/g5dhhS8.png)
Теперь установим Git
![](https://i.imgur.com/fXwX7Ds.png)
После чего скопируем к себе исходные файлы для ModSecurity в папку рядом с папкой исходных кодов nginx
```
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/
```
![](https://i.imgur.com/ALy9TmL.png)
Теперь можем переместиться в эту папку и поставить еще пакеты, которые используются для сборки программы
```
sudo apt install gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen -y
```
![](https://i.imgur.com/guPlJiV.png)
![](https://i.imgur.com/QJNhzks.png)
Теперь используем git для создания собственных файлов сабмодулей и обновим данные из репозитория ModSecurity
![](https://i.imgur.com/63SmgRe.png)
![](https://i.imgur.com/naZpSe6.png)
Создадим собственное окружение и сконфигурируем его
![](https://i.imgur.com/fONcjPk.png)
![](https://i.imgur.com/kO5aJzy.png)
После чего запустим сборку файлов. Этот процесс может занять время, для ускорения работы можно поставить `-j <количество потоков обработки>`
![](https://i.imgur.com/PHixD8Q.png)
После успешной сборки инсталлируем ModSecurity
![](https://i.imgur.com/rTGzV2U.png)
Теперь нужно скачать коннектор nginx и Modprobe (также находися в GitHub)
```
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/
```
![](https://i.imgur.com/lIyVGUP.png)
Теперь перейдем в папку с исходными пакетами nginx
![](https://i.imgur.com/pFVV3Ec.png)
Настроим зависимости, которые используем nginx и скачаем uuid-dev
![](https://i.imgur.com/wgIzoWm.png)
Теперь сконфигурируем коннектор
```
sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx
```
![](https://i.imgur.com/DOwdU28.png)
Также соберем модули в папке
![](https://i.imgur.com/uFYdB5Q.png)
Скопируем собранные модули к nginx
![](https://i.imgur.com/vfEJn5u.png)
Теперь понадобится показать nginx собранный модуль. Для этого открываем конфигурационный файл nginx и добавляем строчку
![](https://i.imgur.com/RA6MGbB.png)
![](https://i.imgur.com/RyvE9Eu.png)
Также потребуется включить ModSecurity и прописать путь к файлу с правилами файервола
![](https://i.imgur.com/NoM3faX.png)
Теперь создадим папку для конфигов ModSecurity
![](https://i.imgur.com/LeGO9jd.png)
Переместим туда собранный конфиг
![](https://i.imgur.com/7dAawtN.png)
И открыть его на изменение
![](https://i.imgur.com/h4c6osW.png)
И настроим правила для ModSecurity (в начале файла нужно изменить `SecRuleEngine` на On)
![](https://i.imgur.com/jBvqfMm.png)
Также дальше в файле нужно найти строчку с правилами аудита. `SecAuditLogParts` нужно изменить на новое значение
![](https://i.imgur.com/mwWbbMv.png)
Теперь нужно подключить ModSecurity к nginx. Для этого откроем конфигурационный файл для ModSecurity
![](https://i.imgur.com/oiScHlF.png)
И пропишем туда ссылку на рекомендуемые конфигурации
![](https://i.imgur.com/0YjCwpY.png)
Скопируем файл unicode.mapping
![](https://i.imgur.com/d5VcnsE.png)
После чего можно проверить, что в конфигурациях nginx нет ошибок
![](https://i.imgur.com/fRVwnOv.png)
Перезапустим nginx и проверим его состояние
![](https://i.imgur.com/G2fnFNH.png)
Теперь потребуется скачать правила для ModSecurity
```
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip
```
![](https://i.imgur.com/cD7AEj5.png)
Распаковать их из архива
![](https://i.imgur.com/lJVxI9w.png)
Скопировать файл конфигурации правил
![](https://i.imgur.com/Vzs9ghe.png)
А также прописать пути до файлов с правилами
![](https://i.imgur.com/uMRZxd9.png)
![](https://i.imgur.com/IjAJyAZ.png)
Проверим правильность настроек nginx, перезапустим его и проверим состояние после перезапуска
![](https://i.imgur.com/dEuaIkD.png)
Теперь остается открыть конфигурации сервера и прописать правило для пересылки обращений с WAF на Web-Server
![](https://i.imgur.com/WI4BYh9.png)
![](https://i.imgur.com/nsG77sh.png)
После этого еще раз перезапустим nginx
![](https://i.imgur.com/vZ5Q2tB.png)

Теперь можем зайти на Kali-Linux и проверить доступность веб-приложения с Web-Server через адрес WAF
![](https://i.imgur.com/HHdur5x.png)

### Осуществление атак на сервер
Атака SQL-injection (перехватим запрос на авторизацию и изменим данные для входа в качетсве администратора)
![](https://i.imgur.com/14Gjvjb.png)
Получим ошибку 403. Блокировка сработала
![](https://i.imgur.com/Opob2F9.png)
Также информация о возникновении ошибки появилась в логах на сервере (/var/log/nginx/error.log)
![](https://i.imgur.com/CzxzkpP.png)
Попробуем использовать команды внутри оставляемых сообщений для отзывов о товарах (также перехватим запрос и изменим данные в запросе с добавлением какой-то команды)
![](https://i.imgur.com/i2NtOJU.png)
Также получим ошибку 403 о запрете доступа
![](https://i.imgur.com/ndw94xA.png)
А информация о возникшей ошибке появилась в логах
![](https://i.imgur.com/6pUmAj2.png)

И попробуем использовать атаку через подмену путей (к примеру, запрос на скачивание изображения, изменим путь в нем для доступа до /etc/passwd)
![](https://i.imgur.com/GlXsEPk.png)
Также получена ошибка об отказе в доступе
![](https://i.imgur.com/q9mjcls.png)
А информация о неправомерном доступе отобразилась в логах
![](https://i.imgur.com/iOxkCl5.png)
























