![]() |
https://forum.antichat.xyz/attachmen...1184164082.png
Забудьте про свои сканеры уязвимостей, которые тупо долбят 169.254.169.254 и радуются, если видят 200 OK. Сейчас мы поговорим о настоящем колдовстве: как заставить браузер жертвы атаковать сам себя. Как обмануть ту самую пресловутую Same-Origin Policy (SOP), которая якобы стоит на страже веб-безопасности. Мы разберем всё: от матчасти до написания своего кастомного DNS-сервера на коленке, который будет плясать под нашу дудку. Мы пройдемся по реальным кейсам - от кражи ключей AWS до полного компромета локальных сетей. Погнали. Введение: Почему мы всё ещё тут, и кому это нужно? 1.1. Пролог: Миф о "безопасной внутренней сети" Абсолютное большинство людей - от сисадмина с двадцатилетним стажем до домохозяйки, которая ставит пароль "12345" на вай-фай, - свято верят в одну иллюзию. Эта иллюзия называется "Моя локальная сеть - моя крепость". Звучит знакомо, правда? "Ну, у нас же корпоративный фаервол на периметре", "Мы используем NAT, из интернета к нам не достучаться", "У нас белые IP только на DMZ, а внутренние сервера в изоляции". Или на бытовом уровне: "Я ж не идиот, чтобы по подозрительным ссылкам тыкать, у меня антивирус Касперского стоит и вай-фай паролем закрыт". Спойлер: всё это - херня. Прости за прямоту, но это так. Фаервол на периметре не поможет, если атака идёт изнутри. NAT - это не безопасность, а кривой костыль для нехватки IPv4-адресов, который не даёт входящим соединениям пробиться, но понятия не имеет, что делать с исходящими. А антивирус - это вообще табличка "Мойдодыр" на двери сортира: вроде приятно, но если внутрь уже кто-то пролез, эта табличка его не остановит. DNS Rebinding - это именно та атака, которая с хирургической точностью препарирует этот миф. Она не ломает твой фаервол. Она не подбирает пароль к твоему роутеру перебором. Она не эксплуатирует какой-то сложный zero-day баг в ядре Linux. Вместо всего этого она делает нечто гораздо более элегантное и пугающее: она превращает браузер жертвы в прокси для атаки на её же внутреннюю сеть. Представь ситуацию. Ты сидишь в уютном офисе, подключён к корпоративной сети. У тебя запущена внутренняя CRM-система на 192.168.10.50, система мониторинга на 10.0.0.15 и, скажем, админка твоего же собственного пет-проекта на localhost:8080. Ты абсолютно уверен, что эти сервисы в безопасности, потому что из интернета до них просто не добраться. И тут ты открываешь в браузере ссылку, которую тебе прислал "коллега" в мессенджере - ну там, смешной мем с котиком или важный документ. И всё. Твоя внутренняя сеть перестала быть твоей. Она стала нашей. 1.2. Исторический экскурс: Как старая проблема стала новой Знаешь, сколько лет DNS Rebinding? Она старше, чем многие читатели этой статьи. Впервые о ней заговорили ещё в конце 90-х - начале 2000-х. В 2001 году исследователь по имени Dan Kaminsky (тот самый, который позже нашёл фатальную уязвимость в самом протоколе DNS) публично описал эту технику. Уже тогда было понятно, что комбинация доверчивости браузера и гибкости DNS - это гремучая смесь. Почему же она до сих пор жива? Почему мы в 2026 году обсуждаем атаку, которой больше четверти века? Ответ банален до скрежета зубовного: инерция и legacy. Архитектура веба застыла в бетоне совместимости. Нельзя просто так взять и сказать: "А давайте браузеры перестанут менять IP-адрес для одного домена", потому что сразу же сломаются все легитимные системы балансировки нагрузки и CDN, которые используют низкий TTL для быстрого переключения трафика между серверами. Нельзя полностью запретить запросы с публичных IP на приватные, потому что есть куча легитимных кейсов (например, плагины браузера, которые общаются с локальными сервисами). Индустрия выбрала путь пластырей и костылей. Вместо того чтобы перепроектировать фундамент, браузеры обзавелись такими штуками как DNS Pinning (пришпиливание IP), а потом от него отказались. Потом придумали CORS, который должен был регулировать доступ между источниками, но DNS Rebinding обходит CORS на корню, потому что для браузера источник (origin) не меняется. Потом появились спеки вроде Private Network Access (бывший CORS-RFC1918), но их внедрение идёт со скрипом, и в них до сих пор полно дыр (привет, 0.0.0.0). Так что да, это старая атака. Но старая - не значит мёртвая. Старая - значит отточенная, как бритва якудза, и проверенная в бесчисленных реальных кампаниях. 1.3. Почему это работает? Давай на секунду отойдём от технических деталей и подумаем о философии. Почему DNS Rebinding вообще возможна? Потому что в основе взаимодействия браузера с сервером лежит фундаментальное несоответствие: браузер оперирует доменными именами, а сетевое соединение - IP-адресами. Браузер думает категориями "сайтов". Для него Example Domain - это целостная сущность, которой он доверяет (или не доверяет) на основе протокола, домена и порта. Он создаёт изоляцию (песочницу) для каждого такого "сайта". Сеть же - тупая. Ей плевать на домены. Ей нужен IP-адрес, порт и протокол. Она просто пересылает байты туда, куда скажешь. DNS - это клей, который соединяет эти два мира. И это клей - ненадёжный. Он может быть изменён (нами, атакующими) в любой момент. Браузер совершает акт веры. Он говорит: "Я один раз спросил у DNS, где живёт example.com, и запомнил это. Теперь все последующие соединения к example.com я буду отправлять на этот IP, пока DNS не скажет мне что-то другое, или пока я сам не решу проверить заново". Мы, как атакующие, эксплуатируем этот промежуток между "один раз спросил" и "проверил заново". Мы заставляем браузер изменить своё мнение о том, где живёт сайт, прямо во время сессии, сохранив при этом все привилегии, которые даются "сайту". Это как если бы ты договорился встретиться с другом в кафе, пришёл туда, а друг позвонил и сказал: "Слушай, я переехал в другое кафе, но ты всё ещё считай, что мы встречаемся в первом, и заказывай там кофе для меня". Официант (браузер) принесёт кофе (запрос) в пустое кафе (локальный IP), но будет думать, что обслуживает твоего друга (домен). 1.4. Экономика атаки: Зачем это злоумышленникам в 2026 году? А зачем это реальным плохим парням? Какая у них мотивация?
1.5. Прежде чем мы начнём (Pre-flight check) Чтобы тебе было комфортно читать дальше, и чтобы ты мог сразу же пробовать всё на практике, я рекомендую подготовить небольшой полигон. Тебе не обязательно делать это прямо сейчас, но имей в виду.
Цитата:
Прежде чем ломать, нужно понять, что ломаем. Same-Origin Policy (SOP) - это, блин, краеугольный камень безопасности любого браузера. Придумали её в Netscape ещё в 95-м, когда интернет был в основном текстом и ссылками . Идея гениальная в своей простоте: скрипт с одного сайта не должен иметь доступ к данным другого сайта. Иначе любой скрипт с левого ресурса читал бы вашу почту, если вы её открыли в соседней вкладке. Что считается одним источником (Origin)? Это три кита:
URL для сравнения с https://www.somedomain.com/page.htmlРезультатПричина https://www.somedomain.com:81/other.html РазныйПорты не совпадают (81 vs 443) https://somedomain.com/page.html РазныйДомены не совпадают (нужен www.) http://www.somedomain.com:443/page.html РазныйПротоколы разные (HTTP vs HTTPS) https://www.somedomain.com/admin/login.html ОдинМеняется только путь. Это разрешено Так вот, когда наш скрипт с hackers.space пытается стучаться на 192.168.0.1, браузер смотрит: протокол? - может совпадать. А вот хост? Для браузера 192.168.0.1 - это не hackers.space. Всё, блокировка. Именно эту проверку мы и будем обходить. 3. Суть атаки: Фокус с переодеванием DNS Rebinding - это не взлом DNS-сервера провайдера. Это манипуляция на нашем собственном, легитимном DNS-сервере, который мы контролируем. Вот пошаговая схема, как это происходит :
4. Технический ликбез про TTL: Почему 0 - это наше всё TTL (Time-To-Live) в контексте DNS - это время в секундах, которое резолвер (будь то кэш провайдера или ваша операционка) имеет право хранить запись у себя, прежде чем сходить за актуальной версией . В обычной жизни TTL измеряется часами. Это нужно для стабильности. Но нам стабильность не нужна, нам нужен контроль. Если мы выставим TTL в 0, это предписание: "НЕ КЭШИРУЙ ВООБЩЕ!". Но тут есть нюанс. Многие публичные DNS-резолверы (например, Google 8.8.8.8) могут сказать "пошли вы" и проигнорировать TTL=0 из соображений производительности. Они всё равно закэшируют на несколько секунд. Поэтому на практике используют TTL=1 или TTL=2. Достаточно мало, чтобы запись быстро исчезла, но достаточно "вежливо", чтобы резолверы не начали ее игнорировать . Стратегии переключения: Наш DNS-сервер должен уметь отдавать разные IP в зависимости от того, который по счету запрос.
Хватит теории, переходим к хардкору. 5.1. Singularity of Origin (NCCGroup) - мастхэв Это не просто инструмент, это фреймворк. Он поднимает сразу и DNS-сервер, и веб-сервер с эксплойтами. Умеет делать автоматический sweep портов, сканировать внутренние подсети и даже имеет красивую веб-морду для управления атакой . Ставится легко, использует Python. Рекомендую для серьезных пентестов, когда нужно показать заказчику красивые скриншоты его же падения. 5.2. rebind из репозиториев Kali Старый, добрый, консольный. Часто идет в комплекте с Kali Linux . Как пользоваться: Bash: Код:
sudo5.3. lock.cmpxchg8b.com/rebinder.html Если нужно быстро проверить гипотезу или нет желания поднимать свой DNS-сервер, есть этот онлайн-сервис . Он генерирует специальный домен вида 7f000001.c0a80101.rbndr.us. IP-адреса кодируются в шестнадцатеричном формате и разделяются точкой. Например, 7f000001 = 127.0.0.1, а c0a80101 = 192.168.1.1. Сервис отвечает по кругу: сначала на первый IP, потом на второй. Идеально для быстрого POC (Proof of Concept). 5.4. dnsFookup - когда хочется логов Этот инструмент написал парень, который нашел баг в AWS через DNS Rebinding . Он позволяет создавать кастомные правила (например, "3 раза отдай IP атакующего, 1 раз - IP жертвы") и, что самое главное, ведет подробные логи. Вы реально видите каждый запрос, который прилетел на ваш DNS. Помогает понять, что происходит в браузере жертвы, особенно если что-то идет не по плану. Git репа: GitHub - makuga01/dnsFookup: DNS rebinding toolkit . 5.5. Пишем свой простой DNS-сервер на Python Не доверяете готовым решениям? Хотите полный контроль? Понимаю. Давайте набросаем простейший DNS-сервер на Python, который будет делать ровно то, что нам нужно - сначала отдавать один IP, потом другой. Для этого используем библиотеку dnslib. Ставим: Код:
pip install dnslibСоздаем файл rebind_dns.py: Python: Код:
#!/usr/bin/env python3Код:
sudo python3 rebind_dns.pyhttps://forum.antichat.xyz/attachmen...1184193212.png 6. Практика: Охота на локальные сервисы Теперь самое мясо. Как это юзать в реальном мире. Разберем несколько жирных кейсов. 6.1. Кейс 1: Burp Suite MCP Server (2025 год) Это свежий баг, который уже успели закрыть, но суть от этого не меняется . Burp Suite - это основной инструмент любого уважающего себя веб-пентестера. У них есть фича - MCP Server (Model Context Protocol), который по умолчанию висел на localhost:9876 и позволял делать запросы. Проблема была в том, что сервер не проверял, откуда пришел запрос (CORS и валидация origin'а были в зачаточном состоянии) . Атакующий делал следующее:
6.2. Кейс 2: Deluge BitTorrent Client - читаем файлы с диска Тут история еще интереснее. Deluge - популярный торрент-клиент. У него есть веб-интерфейс для управления. И в какой-то момент в нем нашли path traversal . Суть бага: при запросе к /js/deluge-all/..%2F..%2F..%2F..%2Fetc%2Fpasswd сервер отдавал файл, потому что плохо чистил пути. Но доступ к веб-интерфейсу обычно только с localhost. Казалось бы, безопасно? А вот хрен. Атакующий делает DNS Rebinding:
6.3. Кейс 3: AWS Metadata - классика жанра Это классика, которую знают все, но она до сих пор работает в 90% случаев, если разработчики не озаботились защитой . Cloud Metadata - это сервис по адресу 169.254.169.254, который отдает credentials роли инстанса. Если вы смогли до него достучаться - вы получили ключи доступа к AWS API. Представьте приложение, которое рендерит картинки по URL. Оно защищено от SSRF и блокирует прямой доступ к 169.254.169.254. Но оно доверяет запросам от самого себя? Нет? А если эти запросы придут от браузера администратора, который просто зашел посмотреть статистику на сайте? Атакующий отправляет ссылку админу. JS через DNS Rebinding стучится на 169.254.169.254/latest/meta-data/iam/security-credentials/ и забирает ключи. Профит - полный компрометация AWS аккаунта . 7. Обход защит: Игра в "кошки-мышки" с браузерами Производители браузеров не дураки, они пытаются с этим бороться. Но не всегда успешно. 7.1. DNS Pinning Это старая защита. Браузер, получив первый IP для домена, "пришпиливает" его и не меняет до перезагрузки или очень долгого таймаута, игнорируя TTL . Это убивает атаку. Но от этого страдают легитимные сервисы с балансировкой нагрузки (когда IP меняется часто). Поэтому многие браузеры отказались от строгого пиннинга или сделали его очень слабым. В современных браузерах это уже не панацея. 7.2. Local Network Access (CORS-RFC1918) Это новый стандарт, который делит адреса на публичные и приватные (127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8 и т.д.) . По задумке, сайт с публичного IP не может делать запросы на приватный IP, если приватный сервер явно не разрешил это через CORS. Казалось бы, victory? Но нет.
Часто думают: "У нас HTTPS, значит всё ок". Действительно, если ваш сайт на HTTPS, а локальный сервис жертвы - просто HTTP, то при смене IP браузер попытается установить HTTPS-соединение с локальным сервисом. Локальный сервис, естественно, не сможет предоставить валидный сертификат на ваш домен. Соединение оборвется . Но!
Если вы админ и читаете это, чтобы понять, как защитить свою помойку, - ловите чеклист. На стороне сервера (локального сервиса):
Мы прошли с тобой огромный путь. От философии доверия в интернете до шестнадцатеричных кодировок IP-адресов в доменах rbndr.us. От Same-Origin Policy, которую придумали, когда интернет был размером с университетский кампус, до современныхспекак Private Network Access, которые пытаются (и пока безуспешно) заткнуть дыры в этой политике. Мы разобрали атаку DNS Rebinding под микроскопом. Мы увидели, как элегантно и просто она обходит многоуровневую защиту, построенную на доверии к доменным именам. Мы написали свой DNS-сервер, который умеет менять маски на лету. Мы прошлись по реальным уязвимостям в софте, который стоит у каждого второго разработчика (Burp Suite) и у каждого третьего гика (Deluge). Мы заглянули в облака и увидели, как можно украсть ключи от AWS, просто заставив браузер жертвы сходить по адресу 169.254.169.254. И знаешь, какой главный вывод я хочу, чтобы ты вынес из этого всего? В безопасности нет священных коров. Нет ничего, что было бы защищено "по умолчанию" просто потому, что оно "внутри" или "локально". Внутренняя сеть - это не крепость. Это проходной двор с табличкой "посторонним вход воспрещён", на которую всем насрать, если у них есть приглашение от браузера. Localhost - это не магическое заклинание, отгораживающее от мира. Это просто ещё один сетевой интерфейс, к которому можно достучаться, если обмануть того, кто стучится. А браузер - это не безопасная песочница, а доверчивый исполнитель, который делает то, что ему скажет JavaScript, если его правильно попросить. 9.2. Что мы узнали на самом деле? Давай пробежимся по ключевым инсайтам, которые мы вынесли из этого путешествия. 1. DNS - это не просто "телефонная книга", это поле боя. Мы привыкли воспринимать DNS как скучную инфраструктурную данность. Прописал А-запись - и забыл. Но DNS это динамический протокол. TTL существует не просто так, и возможность быстрой смены IP-адреса для одного домена - это фича, а не баг. Фича, которую CDN-провайдеры используют для балансировки, а хакеры для ребайндинга. Мы поняли, что низкий TTL это не всегда хорошо для безопасности, и что кэширование - наш друг, если мы жертва, и враг, если мы атакующий. 2. Same-Origin Policy - это не стена, это решето. SOP - отличная штука, когда нужно разделить evil.com и gmail.com. Но она доверяет идентификатору "источник" (origin) абсолютно слепо. Если мы, как атакующие, можем контролировать резолвинг домена в IP, мы можем заставить браузер считать, что localhost и наш сайт - это один и тот же источник. SOP не проверяет, что за железка отвечает на том конце провода. Ей важен только ярлычок, который мы ловко подменили. 3. Безопасность на уровне сети (Network-level security) бессильна против атак на уровне приложения (или наоборот). Это, пожалуй, самый важный урок. Ты можешь иметь самый крутой корпоративный фаервол с правилами "запрещено всё, что не разрешено". Ты можешь сегментировать сеть VLAN-ами. Ты можешь поставить IDS/IPS на каждом углу. Но если твой сотрудник откроет в браузере ссылку, и его браузер, находясь внутри этой защищённой сети, начнёт атаковать локальные сервисы - твои сетевые защиты просто не увидят этой атаки. Для них это будет легитимный трафик легитимного пользователя к легитимному (с их точки зрения) ресурсу. Это классический разрыв между слоями OSI: мы атакуем на 7-м (прикладном) уровне, используя дыру в 3-м (сетевом) уровне. 4. Разработчики - первые (и главные) виновники. Мы видели это на примере Burp Suite, Deluge и тысячи других приложений. Разработчики внутренних сервисов часто находятся в плену иллюзии безопасности. "Это же локальный сервис, кто к нему достучится, кроме localhost?" - думают они. И не валидируют Host-заголовок. И не ставят аутентификацию на запросы с localhost. И слушают на всех интерфейсах (вдруг пригодится?). И используют устаревшие версии библиотек с path traversal. В результате один клик по ссылке - и локальный сервис, который должен был быть внутренним инструментом, превращается в открытое веб-приложение, доступное для любого скрипта в интернете (через браузер жертвы). 5. Браузеры - это насосы для данных, а не песочницы. Мы привыкли думать о браузере как о безопасном контейнере для запуска кода из интернета. Но реальность такова, что браузер - это мощнейший инструмент для доступа к ресурсам. Он умеет ходить по сети, читать файлы (через file:// API, хотя и с ограничениями), обращаться к железу (через WebUSB, WebBluetooth), хранить кучу данных (cookies, localStorage). И всё, что нужно атакующему - это получить контроль над этим инструментом. DNS Rebinding - один из способов такого контроля. Мы не взламываем браузер, мы просто используем его по назначению, но с подменённой целью. 9.3. Взгляд с обеих сторон баррикад Это значит - понимать мотивы и ограничения всех сторон конфликта.
Давай включим хрустальный шар и попробуем заглянуть в будущее. Что ждёт DNS Rebinding через 5, 10 лет? Оптимистичный сценарий (для защитников):
9.5. Что делать тебе? Ты потратил кучу времени (или просто промотал вниз, но я надеюсь на первое). Что дальше? Как применить это знание? Если ты пентестер или баг-хантер:
Мы - сообщество. Мы - те, кто не принимает всё на веру. Те, кто копает глубже, чем написано в мануалах. Те, кто задаёт вопрос "а что, если...?" и ищет на него ответ, даже если ответ ломает устоявшиеся представления. DNS Rebinding - это всего лишь одна из многих атак, которые демонстрируют хрупкость нашей цифровой цивилизации. Но она - отличная метафора нашего подхода к жизни.
Мир не станет безопаснее после прочтения этой статьи. Уязвимости никуда не денутся. Люди продолжат кликать на ссылки, разработчики - забывать про Host-заголовки, а браузеры - пытаться балансировать между безопасностью и совместимостью. Но, надеюсь, ты стал немного другим. Ты увидел, как за кулисами обычного веб-сёрфинга разворачиваются настоящие драмы. Ты понял, что безопасность - это не набор галочек, а постоянный процесс мышления. Ты вооружился знанием, которое можно использовать и для защиты, и для нападения. Что ты выберешь - дело твоё. Я лишь показал тебе карту. Дальше ты идёшь сам. |
| Время: 02:31 |