Все способы обмануть CDN и найти реальный IP-адрес сайта
Что такое CDN
CDN - это географически распределённая сетевая инфраструктура, позволяющая быстро передавать ресурсы, такие как HTML, Javascript, CSS, изображения и видео, необходимые для загрузки интернет-контента. Со временем, популярность услуг CDN-провайдеров продолжает расти, и сегодня большая часть веб-трафика обслуживается именно через их сервера, включая трафик с таких крупных сайтов, как Facebook, Netflix и Amazon.
Зачем веб-сайтам нужен CDN
Производительность всегда имеет приоритетное значение. Если веб-сайт не использует CDN, чтобы получить контент, компьютеры пользователей вынуждены отправлять запросы на один единственный сервер. Такой подход не практичен, так как может привести к большой нагрузке на сервер, в результате чего производительность сайта снизится. В настоящее время большинство сервисов используют CDN, поскольку эта технология помогает им повысить скорость загрузки сайта, снизить затраты на полосу пропускания, повысить безопасность и многое другое.
CDN-сети предлагают множество преимуществ для различных типов предприятий и организаций, таких как:
- Электронная коммерция
- Правительство
- Финансы
- СМИ / Издательства
- Мобильные приложения
- Технологии и SaaS
Каковы преимущества использования CDN
- Повышение скорости работы и уменьшение времени отклика.
- Снижение затрат на пропускную способность.
- Повышение безопасности.
- SEO-преимущества
- Масштабируемость
- Лучшая конверсия
- Надежность
- И т.п.
Поэтому, если вы хотите иметь надежный веб-сайт с хорошей производительностью, вам следует подумать об использовании 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-адресов.