# Web.Практическая работа № 4 ## 4.0 Схема стенда Схема нашей сети. Атаки будем проводить с Kali, для этого разместим еще один коммутатор в DMZ. Подлючим в него Internet, Kali, WAF. IP план такой: - Kali - 192.168.225.111, gw 192.168.225.1, dns 8.8.8.8 - WAF - 192.168.225.254, 10.1.1.1, gw 192.168.225.1, dns 8.8.8.8 - WEB - 10.1.1.225, gw 10.1.1.1, dns 8.8.8.8 ![](https://i.imgur.com/M7Rpivy.png) ## 4.1 Установка и настройка машины с веб приложением Данное веб приложение поднимали в практической работе №1, поэтому тут подробно описывать не будем. Настроим сеть на машине ![](https://i.imgur.com/RzmnGTY.png) ![](https://i.imgur.com/OiOaCyk.png) ![](https://i.imgur.com/jyJDKEw.png) ![](https://i.imgur.com/OSlymmN.png) Проверим работу сети ![](https://i.imgur.com/h5CKFzg.png) --- Обновим машину ![](https://i.imgur.com/gltO0L6.png) ![](https://i.imgur.com/ZSwf0AL.png) Установим необходимые пакеты ![](https://i.imgur.com/gS1IJI0.png) ![](https://i.imgur.com/fMQA8Bd.png) ![](https://i.imgur.com/QU2Y2CJ.png) ![](https://i.imgur.com/9f3efAN.png) --- Добавим ключи от репозитория docker ![](https://i.imgur.com/0fkCTkv.png) --- Обновим информацию о пакетах. Установим docker ![](https://i.imgur.com/cMm6T9z.png) ![](https://i.imgur.com/U9lpbs3.png) ![](https://i.imgur.com/TfJ82hD.png) --- Включим, запустим и проверим состояние docker ![](https://i.imgur.com/0odqv8r.png) Скачаем ![](https://i.imgur.com/HbevWPv.png) И запустим наше веб приложение ![](https://i.imgur.com/b5wrSUD.png) ## 4.2 Настройка WAF ### 4.2.1 Настройка машины для WAF Разрешим пропускать через себя трафик ```bash= sudo nano /etc/sysctl.conf ``` ![](https://i.imgur.com/bVRRXM9.png) ---- ```bash= net.ipv4.ip_forward=1 ``` ![](https://i.imgur.com/OktkQXQ.png) --- Посмотрим текущую адресацию ```bash= ip address ``` ![](https://i.imgur.com/9wbiFPO.png) --- Установим адресацию ```bash= sudo ip address add 192.168.225.254/24 dev ens4 sudo ip link set up dev ens4 sudo ip route add default via 192.168.225.1 sudo ip addess add 10.1.1.1/24 dev ens3 ip address sudo ip link set up dev ens3 ip address ``` ![](https://i.imgur.com/pfjBo7e.png) --- Проверим работу сети ```bash= ping 192.168.225.1 ping 8.8.8.8 ``` ![](https://i.imgur.com/odtuWLT.png) --- Для сети 10.1.1.0/24 нужен NAT. Настроим его средствами iptables. Посмотрим таблицы. Настроим NAT. Проверим результат. ```bash= sudo iptables -t nat -L sudo iptables -t nat -A POSTROUTING -o ens4 -s 10.1.1.1/24 -j MASQUERADE sudo iptables -t nat -L ``` ![](https://i.imgur.com/nCj3Xrs.png) --- Настроим dns ```bash= sudo nano /etc/resolv.conf ``` ![](https://i.imgur.com/bWaUKF2.png) --- Возьмемь google ```bash= nameserver 8.8.8.8 ``` ![](https://i.imgur.com/Nu6KlMg.png) --- Проверим работу dns ```bash= ping google.com ``` ![](https://i.imgur.com/qM8BtPH.png) --- Обновим информацию о пакетах ```bash= sudo apt update ``` ![](https://i.imgur.com/TMDmrOa.png) --- Обновим сами пакеты ```bash= sudo apt upgrade ``` ![](https://i.imgur.com/tMynVCN.png) --- Установим пакет поддержки сохранения правил iptables ```bash= sudo apt install iptables-persistent ``` ![](https://i.imgur.com/hoXB0jA.png) ![](https://i.imgur.com/yS32Rw7.png) --- ### 4.2.2 Настройка и конфигурирование WAF Обновим пакеты ```bash= sudo apt update -y && sudo apt upgrade -y ``` ![](https://i.imgur.com/TRLxf5I.png) ---- Установим необходимые пакеты ```bash= sudo apt install dpkg-dev git 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 curl unzip ``` ![](https://i.imgur.com/I5dxFN0.png) ![](https://i.imgur.com/xsSZTlc.png) ---- Добавим репозиторий NGINX Нам необходим также и исходный код, однако, добавление репозитория через официальную установку, не работает, т.к. после изменения файла(add deb-scr) перестает проверяться подпись. Поэтому добавим репозиторий прямо в соурс лист и сделаем доверенным. ![](https://i.imgur.com/ZHNfD2E.png) Обновим информацию о пакетах ```bash= sudo apt update ``` ![](https://i.imgur.com/acYNuE2.png) Установим NGINX ```bash= sudo apt install nginx-core nginx-common nginx nginx-full ``` ![](https://i.imgur.com/0Qv7uYz.png) ![](https://i.imgur.com/nO23Bso.png) ---- Создадим каталог для исходного кода ```bash= sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx ``` ![](https://i.imgur.com/Ar4Hh7u.png) ---- Настроим права ```bash= sudo chown user:user /usr/local/src/ -R ``` ![](https://i.imgur.com/1wmALzt.png) ---- Скачаем исходники ```bash= sudo apt source nginx ``` ![](https://i.imgur.com/nExh1hf.png) ---- Посмотрим что в каталоге, проверим версию NGINX ```bash= ls sudo nginx -v ``` ![](https://i.imgur.com/zHJnt7o.png) ---- Склонируем репозиторий с ModSecurity ```bash= git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/ cd /usr/local/src/ModSecurity ``` ![](https://i.imgur.com/gz3sEI8.png) ---- Инициализируем и обновим сабмодули ```bash= git submodule init git submodule update ``` ![](https://i.imgur.com/4PiIPrC.png) ---- Билд ```bash= ./build.sh ``` ![](https://i.imgur.com/vnl9cwl.png) ---- Конфигурация ```bash= ./configure ``` ![](https://i.imgur.com/7JQQbu4.png) ![](https://i.imgur.com/DUHGF5c.png) ![](https://i.imgur.com/Rn3FVoj.png) ---- Компиляция ModSecurity ```bash= make -j 4 ``` ![](https://i.imgur.com/qGe8tdL.png) ![](https://i.imgur.com/HJiqtdy.png) ![](https://i.imgur.com/MklGPMq.png) ---- Установим ModSecurity ```bash= sudo make install ``` ![](https://i.imgur.com/gdTH0dF.png) ![](https://i.imgur.com/PKqMvEJ.png) ---- Посмотрим что в каталоге ```bash= ls /usr/local/modsecurity ``` ![](https://i.imgur.com/ZRhCgr2.png) ---- Склонируем репозиторий коннектора ModSecurity к NGINX. Перейдем в каталог NGINX. ```bash= sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/ cd /usr/local/src/nginx/nginx-1.23.1 ``` ![](https://i.imgur.com/B5SV8Zm.png) ---- ```bash= Установим необходимые зависимости sudo apt build-dep nginx && sudo apt install uuid-dev ``` ![](https://i.imgur.com/pQyU8BF.png) ![](https://i.imgur.com/jQXneun.png) ---- Сконфигурируем ```bash= sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx ``` ![](https://i.imgur.com/diU4fAU.png) ![](https://i.imgur.com/n60bTbg.png) ---- И соберем ```bash= sudo make modules ``` ![](https://i.imgur.com/vwDfvcp.png) ---- Скопируем собранный модуль в NGINX. Создадим необходимые каталоги. Скопируем конфигурацию и маппинг. ```bash= sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/ sudo mkdir /etc/nginx/modsec/ sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/ ``` ![](https://i.imgur.com/N6DQWrL.png) ---- Настроим NGINX ```bash= sudo nano /etc/nginx/nginx.conf ``` ![](https://i.imgur.com/Jwvmz59.png) ---- Подгрузим модуль, включим ModSecurity, укажем конфигурацию. ```bash= load_module modules/ngx_http_modsecurity_module.so; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf; ``` ![](https://i.imgur.com/HnDoitN.png) ---- Настроим ModSecurity. ```bash= sudo nano /etc/nginx/modsec/modsecurity.conf ``` ![](https://i.imgur.com/LfeWtZv.png) ---- Переключим ModSecurity с Only Detect на активную защиту. Приведем описание ключей: - A Audit log header (mandatory) - B Request headers - C Request body - D Reserved - E Response body - F Response headers - G Reserved - H Audit log trailer, which contains additional data - I Compact request body alternative (to part C), which excludes files - J Information on uploaded files - K Contains a list of all rules that matched for the transaction - Z Final boundary (mandatory) ```bash= SecRuleEngine On SecAuditLogParts ABCEFHJKZ ``` ![](https://i.imgur.com/rJUyUw0.png) ![](https://i.imgur.com/04zusWp.png) ---- Создадим конфиг файл. ```bash= sudo nano /etc/nginx/modsec/modsec-config.conf ``` ![](https://i.imgur.com/RMwzM5L.png) ---- Будем включать в него конфигурации ```bash= Include /etc/nginx/modsec/modsecurity.conf ``` ![](https://i.imgur.com/yLTi3DL.png) ---- Протестируем настройки NGINX ```bash= sudo nginx -t ``` ![](https://i.imgur.com/SymDWTq.png) ---- Перезапустим NGINX, проверим результат ```bash= sudo systemctl restart nginx sudo systemctl status nginx ``` ![](https://i.imgur.com/2BeGgY3.png) ---- Теперь добавим в ModSecurity набор правил OWASP core. Скачаем набор правил ```bash= wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip ``` ![](https://i.imgur.com/uA0SO7N.png) ---- Распакуем набор правил в каталог modsec ```bash= sudo unzip v3.3.2.zip -d /etc/nginx/modsec/ ``` ![](https://i.imgur.com/m4FnnjN.png) ![](https://i.imgur.com/Pwg29Ph.png) ---- Скопируем конфигурацию правил ```bash= sudo cp /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf ``` ![](https://i.imgur.com/VdbCZyC.png) ---- Откроем наш конфиг ```bash= sudo nano /etc/nginx/modsec/modsec-config.conf ``` ![](https://i.imgur.com/kBI5udZ.png) ---- Добавим в него конфиги правил ```bash= Include /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf Include /etc/nginx/modsec/coreruleset-3.3.2/rules/*.conf ``` ![](https://i.imgur.com/SaJIxgW.png) ---- Протестируем изменнения ```bash= sudo nginx -t ``` ![](https://i.imgur.com/UOLSasy.png) ---- Перезапустим и проверим NGINX ```bash= sudo systemctl restart nginx sudo systemctl status nginx ``` ![](https://i.imgur.com/FRTYcR3.png) ---- Посмотрим конфиг набора ```bash= sudo nano /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf ``` ![](https://i.imgur.com/BTnTmVg.png) ![](https://i.imgur.com/pJZR9C9.png) ![](https://i.imgur.com/2YuI2mh.png) ---- Создадим файл для ротации логов ```bash= sudo nano /etc/logrotate.d/modsec ``` ![](https://i.imgur.com/hpkVmYj.png) ---- Настроим ротацию логов ```bash= /var/log/modsec_audit.log { rotate 31 daily missingok compress delaycompress notifempty } ``` ![](https://i.imgur.com/53paiJd.png) ---- Настроим проксирование нашего сайта через NGINX. Проксировать будем по пути ./juice Отредактируюем конфиг ```bash= sudo nano /etc/nginx/sites-available/default ``` ![](https://i.imgur.com/vJ28gVT.png) Перезапустим NGINX ![](https://i.imgur.com/OdEe8Et.png) Проверим проксирование на Kali указав адрес NGINX. ![](https://i.imgur.com/KT6XJQh.png) Проверим что WAF работает ![](https://i.imgur.com/MeZ39kH.png) ---- ## 4.3 Проведение атак из OWASP TOP 10 ### 4.3.0 Для демонстации работы WAF выполним три атаки: - SSRF RCE - SQL Ijection - XSS С целью простоты демонстации, атаки будем выполнять вручную. Будем использовать форму логона. --- ### 4.3.1 Server-Side Request Forgery (SSRF) RCE Попробуем получить доступ к локльному файлу. ```bash= <span file://etc/passwd</span> ``` Рузультат в браузере ![](https://i.imgur.com/La04orD.png) Рузультат в логах modsecurity ![](https://i.imgur.com/BrqPph2.png) --- ### 4.3.2 SQL injection Попробуем простейшую SQL иньекцию ```bash= 'or '1'='1 ``` Результат в браузере ![](https://i.imgur.com/hgZVs0l.png) Лог WAF ![](https://i.imgur.com/YpSRQ68.png) --- ### 4.3.3 XSS Создадим простейший XSS ```bash= <script>alert(document.domain)</scrit> ``` Результат в браузере ![](https://i.imgur.com/ZhKgppZ.png) Результат в логах ![](https://i.imgur.com/AVapqAf.png) --- На этом данная работа завершена. WAF с правилами OWASP работает.