###### 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