March 3, 2021

Все способы обмануть CDN и найти реальный IP-адрес сайта

Что такое CDN

CDN - это географически распределённая сетевая инфраструктура, позволяющая быстро передавать ресурсы, такие как HTML, Javascript, CSS, изображения и видео, необходимые для загрузки интернет-контента. Со временем, популярность услуг CDN-провайдеров продолжает расти, и сегодня большая часть веб-трафика обслуживается именно через их сервера, включая трафик с таких крупных сайтов, как Facebook, Netflix и Amazon.

Зачем веб-сайтам нужен CDN

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

CDN-сети предлагают множество преимуществ для различных типов предприятий и организаций, таких как:

  • Электронная коммерция
  • Правительство
  • Финансы
  • СМИ / Издательства
  • Мобильные приложения
  • Технологии и SaaS

Каковы преимущества использования CDN

  1. Повышение скорости работы и уменьшение времени отклика.
  2. Снижение затрат на пропускную способность.
  3. Повышение безопасности.
  4. SEO-преимущества
  5. Масштабируемость
  6. Лучшая конверсия
  7. Надежность
  8. И т.п.

Поэтому, если вы хотите иметь надежный веб-сайт с хорошей производительностью, вам следует подумать об использовании CDN.

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

Обратный CDN прокси

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

  • Балансировка нагрузки и масштабируемость
  • Повышенная безопасность и надежность

Безопасность CDN и WAF

Сами по себе CDN не могут блокировать нашествия ботов, они уязвимы перед подобными атаками, поэтому владельцам сайтов необходимо использовать WAF.

WAF или брандмауэр веб-приложений помогают защитить веб-приложения, фильтруя и отслеживая HTTP-трафик между им и интернетом.

Как правило, WAF защищает веб-приложения от таких атак, как межсайтовый скриптинг (XSS), PHP-инъекции, SQL-инъекций и прочие.

Исходный IP веб-сайтов

Многие сайты используют упомянутые выше средства защиты, чтобы скрыть свой исходный IP-адрес и предотвратить DDOS-атаки (и прочие вредоносные действия) со стороны злоумышленников.

Использование облачных технологий, прокси или служб на основе DNS затрудняет поиск исходного IP.

Зачем нам нужен исходный IP

Ответ довольно прост и краток; если у вас есть исходный IP-адрес веб-сайта, вы можете обойти все меры защиты, предоставляемые CDN.

Как узнать исходный IP-адрес сайта

https://twitter.com/HolyBugx/status/1343156549162852352?s=20

Как я уже упоминал в своем Твиттере, есть несколько способов найти исходный IP-адрес, скрытый за CDN или WAF. Мы обсудим большинство актуальных методов, которые можно использовать атакующей стороне.

Реверс-инжиниринг

Всякий раз, когда вы хотите что-то обойти, поставьте себя на место противника и перестройте свой мыслительный процесс. Думайте, как Blue Team, чтобы попытаться выяснить, как они могут быть защищены!

Защита Blue Team

Вот общий список того, что делают CDN-провайдеры и Blue Team, чтобы скрыть исходный IP-адрес веб-сайтов.

  • Сокрытие всех поддоменов под одним CDN

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

  • Запрет соединений на основании действий пользователя

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

  • Сокрытие исходного IP-адреса при настройке CDN

Ресурсные DNS - это множество мест, в которые записывается история IP-адресов веб-сайта. Эти DNS-записи могут содержать IP-адрес веб-сайта с использованием CDN.

  • Запрет прямого доступа к сайту по IP

Еще один интересный вариант, который есть в арсенале у Blue Team, - это ограничить доступ пользователям, пытающимся получить доступ к веб-сайту по IP. Таким образом, веб-сайт загружается только при указании доменного имени. Давайте посмотрим, как такое можно реализовать на Nginx.

Чтобы отключить / заблокировать прямой доступ по IP для 80 порта, мы создаем конфигурацию сервера следующим образом:

server {
 listen 80 default_server;
 server_name _;
 return 404;
}

Чтобы отключить / заблокировать прямой доступ по IP для 443 порта, мы используем следующий сниппет в одном из блоков конфигурации сервера:

if ($host != "example.com") {
 return 404;
}

Пример:

server {
 listen 443 ssl;
 server_name example.com
 
 ssl_certificate /etc/nginx/ssl/example.com.crt;
 ssl_certificate_key /etc/nginx/ssl/example.com.key;

 if ($host != "example.com") {
  return 404;
 }
}

Это заблокирует весь трафик на https://YOUR_IP_ADDRESS

Мы сможем обойти такое ограничение с помощью одного интересного метода.

  • Белые списки

Возможное решение для разрешения запросов только из CDN - просто добавить CDN в белый список. Этот метод может показаться исчерпывающим и достаточно надежным для обороняющихся, чтобы скрыть свой исходный адрес. На практике это довольно сложно, поскольку для реализации существует только 3 подхода не факт, что они будут корректно работать:

  • Вариант А. Внесение IP-адресов в белый список

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

Это проблематично. Многие CDN-сети не выдают список своих IP-адресов, и даже если они это и делают, при модернизации, они могут получать новые IP-адреса, изменить их и забывать уведомлять об этом. Эти белые списки необходимо регулярно обновлять, чтобы не нарушить работу сайта.

  • Вариант Б. Добавление уникального идентификатора из запроса в белый список

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

  • Вариант C: неизвестное имя хоста источника

Это, вероятно, самое надежное решение для Blue Team, при котором злоумышленники, если и попытаются добраться до исходного веб-сервера, они попросту не смогут его найти. Обороняющиеся создают случайный длинный набор буквенно-цифровых символов и используют их в качестве субдомена. Например, если их доменное имя - «telegramchannel.cybred», тогда они устанавят имя поддомена «2547d0jeid15ma.telegramchannel.cybred».

Это имя будет известно только им и их CDN-провайдеру, и они смогут занести в белый список запросы с этим именем хоста.

Заключение

Вернемся на сторону атакующего

Я описал несколько базовых способов, используя которые Blue Team защищают собственные веб-сервисы от потенциальных атак. На основе их концепции безопасности, я подготовил Mindmap того, что мы будем делать, как атакующие, пытаясь обойти их защиту и найти исходный IP Веб-сервера.

Выше представлена диаграмма с методами, которые мы должны попробовать, при тестировании сайта на предмет утечки IP-адреса. Давайте углубимся в это.

Recon

https://medium.com/bugbountywriteup/guide-to-basic-recon-bug-bounties-recon-728c5242a115

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

  • Диапазоны IP/CIDRs
  • Информация, связанная с хостом
  • DNS-записи
  • Веб-серверы
  • Vhosts
  • Сервисы, работающие на сервере (например, почтовые)
  • Уязвимости

Все о DNS-записях

DNS-записи - это множество мест, в которых хранится информация о соответствии имени и служебной информации сервера. Архив таких записей, скорее всего, будут содержать исходный IP-адрес веб-сайта с использованием CDN.

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

1- SecurityTrails

SecurityTrails позволяет просматривать полные текущие и архивные данные для любых интернет-ресурсов. История IP и DNS, домена, SSL и открытые порты.

Мы собираемся выполнить простой запрос для нашей цели, чтобы увидеть ее DNS-записи, поскольку они позволят узнать A, AAAA, MX, NS, SOA и TXT.

Это может быть удобно, чтобы узнать реальный IP-адрес сервера, когда веб-сайт работал непосредственно на IP-адресе сервера, а затем был перемещен в CDN.

Затем мы кликаем на "Historical Data", чтобы просмотреть полезную информацию о нашей цели.

Ни одна из записей DNS не должна содержать упоминания об IP-адресе источника. Внимательно изучите все записи SPF и TXT.

Простые записи A, AAA, CNAME или MX могут послужить источником исходного IP.

2- Dig

Вы можете использовать утилиту dig, чтобы выполнить несколько простых запросов и узнать, пользуется ли наша цель услугами CDN-провайдеров, таких как Cloudflare.

Этот диапазон IP-адресов принадлежит Cloudflare. Чтобы удостовериться в этом, мы можем использовать whois для найденного нами IP-адреса A-записи:

Кроме того, есть еще один способ узнать, спрятана цель за Cloudflare или нет, при помощи curl:

Все о MX-записях

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

1- Заголовки писем и сброс пароля

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

Обратите внимание, что вам следует исследовать все IP-адреса, которые вы видите в полученном письме, и попробовать обратиться к ним вручную, чтобы узнать, являются ли они исходными IP-адресами сервера. Иногда значение директивы «Return-Path» может оказаться полезным.

2- Исходящая электронная почта

Есть еще один интересный метод, который вы можете использовать: отправка электронного письма на несуществующий адрес электронной почты «non-existent@target.com» приведет к отказу; поскольку такого пользователя существовать не будет, доставка не удастся, и мы сможем получить обратно уведомление об этом, содержащее исходный IP-адрес сервера.

Обнаружение виртуальных хостов

Когда у вас на руках будут IP-адреса веб-серверов, вы должны выяснить, настроен ли целевой домен на этих серверах как виртуальный хост.

Для обнаружения виртаульных хостов, я предлагаю несколько специально разработанных для этого утилит:

  • VHostScan от Codingo
  • Virtual-host-discovery by Jobertabma
  • Gobuster от OJ

Используя их, у вас есть шанс найти исходный IP сайта.

Неверная конфигурация безопасности

Неправильную конфигурацию можно легко эксплутировать. К примеру, если URL-адрес загружаемого содержимого указывает на IP, который не является частью CDN, скорее всего, он окажется реальным IP-адресом сервера.

Поисковые системы IoT

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

1- Censys

Censys - это платформа, которая помогает специалистам по информационной безопасности обнаруживать устройства, доступные из Интернета. С помощью Censys вы можете найти ценную информацию, такую как:

  • Айпи адрес
  • Открытые порты
  • Сертификаты SSL
  • Хостинг-провайдеры
  • и т.п.

Мы можем просто запросить нужный домен и посмотреть, есть ли утечки IP.

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

Теперь открывайте каждый результат, чтобы отобразить подробную информацию, и в меню «Обзор» справа выберите «Хосты IPv4»:

Чтобы наглядно показать вам, как Censys может помочь найти исходный IP, я оставлю скриншот из поиска сайта, над которой я недавно работал, и с помощью простого запроса IPv4, я нашел IP-адрес, стоящий за CDN:

2- Shodan

Shodan - это еще одна поисковая система интернет вещей. Исследователям безопасности может быть полезно найти информацию об атакуемой цели.

В Shodan есть что искать, я настоятельно рекомендую вам ознакомиться с руководством по фильтрам. Для этой статьи мы можем просто поискать домен и найти IP-адреса.

Используя Shodan, вы можете использовать различные фильтры:

  • Организации
  • ASN
  • Хэши Favicon
  • SSL-сертификаты
  • и т.п.

3- Zoomeye

ZoomEye - это еще одна поисковая система IoT, с помощью которой можно обнаруживать:

  • Веб сервер
  • IP и порты
  • Заголовки и коды состояния
  • Уязвимости
  • и т.п.

Прямой доступ к веб-сайту с использованием IP-адреса

Я уже упоминал об этом ранее

Еще один интересный вариант, который есть в арсенале у Blue Team, - это ограничить доступ пользователям, пытающимся получить доступ к веб-сайту по IP. Таким образом, веб-сайт загружается только при указании доменного имени.
Мы сможем обойти такое ограничение с помощью одного интересного метода.

Давайте мыслить нестандартно. Что, если мы просканируем диапазон IP-адресов нашего целевого CDN-провайдера, а затем сделаем что-нибудь волшебное с Curl?

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

Таким образом, мы сканируем диапазон IP-адресов цели. Затем находим "живые" адреса с помощью Httpx. Затем используем curl для предоставления заголовка Host, содержащего целевой домен, таким образом обходя все ограничения.

Время проявить творческий подход: хэши Favicon

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

Shodan позволяет выполнять поиск хэша фавикона через http.favicon.hash. Хеш - это MurmurHash3 содержимого Favicon в base64.

Скрипт на Python3 для генерации хэша:

import mmh3
import requests
import codecs

response = requests.get('https://<website>/<favicon path>')
favicon = codecs.encode(response.content, 'base64')
hash = mmh3.hash(favicon)
print(hash)

Ознакомьтесь со следующим постом в блоге для более глубокого погружения: Asm0d3us — Favicon hashes

Еще один полезный инструмент, который можно использовать, - это Fav-Up от pielco11. С помощью данной утилиты вы сможете найти реальный IP-адрес, имея на руках Favicon и используя Shodan.

XML-RPC Pingback

XML-RPC позволяет администраторам сайтов удаленно управлять контентом при помощи XML-запросов.

Pingback - это один из методов уведомления авторов интеллектуальной собственности о том, когда кто-либо ссылается на их контент. Когда сайт A берет контент с сайта B, упоминая, при этом, его как источник, выполняется проверка связанности, после чего сайт B уведомляет сайт A о том, что ему известно об упоминании. Это пингбэк.

Вы можете легко проверить его работоспособность, обратившись по адресу https://www.target.com/xmlrpc.php. Должно получиться следующее:

Сервер XML-RPC принимает только POST-запросы.

Вы также можете использовать XML-RPC Validator.

Согласно API Pingback XML-RPC WordPress, функции принимают 2 параметра sourceUri и targetUri. Вот как это выглядит в Burp Suite:

Заключительные слова

Большое спасибо всем читателям за такую поддержку! Я изо всех сил старался написать такую статью, которая могла бы помочь всем вам разобраться в процессе работы CDN, подходах Blue Team и Red Team. Чтобы вы, зная то, как они действуют, умели сами как защищать, так и тестировать сервера на предмет утечки исходных IP-адресов.