Тестирование безопасности сайта с помощью прозрачного прокси

Тестирование безопасности сайта с помощью прозрачного прокси

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

 

 

 

 

  1. Введение
  2. Понимание HTTP
  3. Методы HTTP
  4. Заголовки HTTP
  5. Коды статуса HTTP
  6. Что такое прозрачный прокси
  7. Как установить ZAP
  8. Определение точек входа приложения
  9. Выводы

Введение

Конечно, среднестатистическому системному администратору всегда проще использовать сканирование Nmap или Nessus, однако у таких методов имеются свои недостатки. Дело в том, что базовое сканирование уязвимостей является довольно автоматизированной задачей, не требующей особо напрягать мозг. В то же время для использования прозрачного прокси потребуется включить более строгую логику, чтобы понять, о чем именно нам говорит консоль.

Понимание HTTP

HTTP представляет собой протокол прикладного уровня передачи данных (HyperText Transfer Protocol, протокол передачи гипертекста). Основой HTTP является технология «клиент-сервер», при таком взаимодействии клиент (как правило, веб-браузер) делает запрос, а сервер (как правило, машина, на которой размещается веб-приложение) отвечает на него.

По умолчанию сервер прослушивает порт 80 (http) или порт 443 (https). Каждый HTTP-запрос содержит три части:

  • метод, идентифицирующий тип запроса, плюс URI и HTTP-версию, используемую клиентом;
  • заголовок (header), содержащий опциальные параметры;
  • опциональный MIME-документ, прикрепленный к запросу.

HTTP-ответ также состоит из трех частей:

  • трехзначная строка состояния;
  • заголовок (header);
  • MIME-документ.

Методы HTTP

Существует несколько HTTP-методов, которые можно использовать, например: GET, POST, HEAD, PUT, TRACE и т.д. Однако здесь мы сосредоточим внимание на следующих:

  • GET - самый распространенный. Он используется для получения документа с сервера.
  • HEAD - вариант метода GET, он используется для получения заголовка документа, но не самого документа. Его можно использовать для проверки наличия документа.
  • POST - используется для отправки документа на сервер.

Заголовки HTTP

  • Content-Length — указывает длину документа в байтах;
  • Content-Type — указывает тип MIME-документа. Например, HTML-страницы используют тип "text / html";
  • Content-Encoding — указывает, как документ был закодирован, например, "x-gzip";
  • Server — возвращает версию веб-сервера, сгенерировавшего ответ;
  • Date — указывает, когда ответ был сделан сервером;
  • Last-Modified — дата последней модификации документа;
  • User-Agent — предоставляет информацию о клиенте. Сервер может отправлять разные ответы в зависимости от этого заголовка;
  • If-Modified-Since — это дата. Используя эту дату, сервер вернет документ только в том случае, если он новее, чем версия, хранящаяся в кеше клиента;
  • Referrer — указывает на ссылку, с которой перешел клиент;
  • Host — полное доменное имя запрошенного URI.

Коды статуса HTTP

Как многим известно, все коды, начинающиеся с цифры 2 указывают на положительный ответ, например, статус «200 OK». Все коды состояния, начинающиеся с цифры 3 указывают на то, что документ больше недоступен, пример — «301 Moved Permanently» («Перемещен навсегда»). Те, что начинаются с 4 («404 Not Found») указывают на то, что сервер обнаружил ошибку в запросе клиента. И последние, начинающиеся на 5, говорят нам, что обнаружена внутренняя ошибка сервера.

Что такое прозрачный прокси

Чтобы проверить безопасность вашего веб-приложения, вам нужно понять, как оно действует в тех или иных ситуациях. Единственный способ осуществить это — прочитать каждый запрос и ответ в процессе обмена между сервером и клиентом, анализируя каждую возможность эксплуатации уязвимости. Здесь на помощь приходит прозрачный прокси. Этот инструмент, по сути, является по-настоящему незаменимым для проверки поведения вашего сайта. Прозрачный прокси может фиксировать каждый запрос и ответ сервера, а также предоставляет возможность изменить их.

Если вам стало интересно, зачем может понадобится менять ответ, исходящий от сервера, попробуем разобраться на примере. Скажем, вы просматриваете корзину для покупок на сайте и видите, что определенный товар стоит 300 долларов. Используя прозрачный прокси, можно заметить, что цена фактически определяется при помощи скрытой формы, которую не увидит обычный посетитель сайта. Благодаря использованию прозрачного прокси вы можете изменить запрос, отправляемый на сервер, указав в качестве цены товара 0 долларов, то есть купить вещь бесплатно.

Это всего лишь пример банальной уязвимости, которую вы можете найти таким способом. Кроме этого, так можно обнаружить возможность sql-инъекции или брешь xss (межсайтовый скриптинг).

Как установить ZAP

ZAP или Zed Attack Proxy — это бесплатный инструмент поиска уязвимостей в веб-приложениях. Однозначным плюсом ZAP, помимо того, что он бесплатный, является его кроссплатформенность — его можно установить как в Linux, так и в Windows системах. Рассмотрим вариант установки ZAP в Linux:

  • Загрузите последнюю версию с GitHub;
  • Установите его — ./ZAP_X_X_X_unix.sh;
  • Запустите ZAP — cd /usr/local/bin ; ./zap.sh.

Далее вам будет предложен следующий выбор:

Рисунок 1. Первое диалоговое окно в процессе установки ZAP

Предлагаем выбрать вариант «Yes, I want to persist this session» («Да, я хочу продолжить этот сеанс»), а затем указать имя и местоположение. После этого вы увидите основную консоль, которая пока пустая.

Рисунок 2. Основная консоль ZAP

Перейдите к «tools», «options», «local proxies», запомните, какой порт прослушивает ZAP. Вы можете его поменять, если захотите.

Рисунок 3. Настройки локального прокси ZAP

Теперь нажмите «Dynamic SSL Certificates», а затем generate и save для генерации SSL-сертификата.

Рисунок 4. Генерация SSL-сертификата

Создание сертификата требуется для того, чтобы ваш браузер доверял ZAP как локальному прокси. Теперь можно перейти к настройкам браузера (здесь мы будем использовать Firefox) и установить в качестве порта для прокси тот же, что использует ZAP.

Рисунок 5 и 6. Настройки браузера

Теперь давайте импортируем сертификат в ваш браузер, выбрав место, где вы ранее сохранили сгенерированную копию и нажав «import».

Рисунок 7. Импорт сертифката в браузер

Теперь вы можете серфить по Сети, перехватывая каждый запрос на сервер и ответ сервера с помощью ZAP. По мере того, как вы будете изучать свой сайт на наличие уязвимостей, вы обратите внимание на множество запросов и ответов в консоли.

Рисунок 8. Перехваченные запросы и ответы в консоли ZAP

В левой сетке вы увидите дерево каталогов вашего сайта, а в нижней части консоли список сообщений, которыми обмениваются ваш сайт и браузер. Если нажать на одно из таких сообщений, вам будет предоставлена подробная информация. Да, как мы говорили ранее, такие сообщения можно корректировать и отправлять повторно.

Каждому сообщению присваивается идентификатор и отмечается степень его риска.

Рисунок 9. Подробная информация, выдаваемая ZAP

Если вы хотите поэкспериментировать, можно попробовать установить и другие инструменты прозрачных прокси:

  • Burp Suite
  • WebScarab
  • Vega
  • Paros

Определение точек входа приложения

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

Вы увидите, что GET является наиболее используемым методом, а в POST можно обнаружить конфиденциальную информацию, например, цены на вещи на сайтах интернет-магазинов, а также любые другие данные, которые веб-разработчик пожелал скрыть от пользователя. Также обратите внимание на то, где используются необычные методы, такие как PUT и DELETE, они обычно помогают раскрыть, как себя ведет веб-приложение в нетипичных ситуациях.

Попытайтесь понять, где установлены файлы cookies, а также отследить каждую скрытую форму. Идентифицируйте все скрытые параметры в запросе POST (которые не видны без прозрачного прокси) и все строки в запросах GET (те, у которых есть знак «?»). Найдите все параметры в строках запроса, например «pass = foo», придется их идентифицировать даже если они зашифрованы. Обратите внимание на каждую переадресацию каждого кода состояния 4xx и 5xx.

Выводы

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

Полезные ссылки: 
Anti-Malware Яндекс ДзенПодписывайтесь на канал "Anti-Malware" в Telegram, чтобы первыми узнавать о новостях и наших эксклюзивных материалах по информационной безопасности.

RSS: Новые статьи на Anti-Malware.ru