Книга «Ловушка для багов. Полевое руководство по веб-хакингу»
Привет, Хаброжители! «Чтобы чему-то научиться, надо применять знания на практике. Именно так мы освоили ремесло взлома» — Майкл Принс и Йоберт Абма, соучредители HackerOne. «Ловушка для багов» познакомит вас с белым хакингом — поиском уязвимостей в системе безопасности. Неважно, являетесь ли вы новичком в области кибербезопасности, который хочет сделать интернет безопаснее, или опытным разработчиком, который хочет писать безопасный код, Питер Яворски покажет вам, как это делается.
В книге рассматриваются распространенные типы ошибок и реальные хакерские отчеты о таких компаниях, как Twitter, Facebook, Google, Uber и Starbucks. Из этих отчетов вы поймете принципы работы уязвимостей и сможете сделать безопасней собственные приложения.
Вы узнаете:
- как работает интернет, и изучите основные концепции веб-хакинга;
- как злоумышленники взламывают веб-сайты;
- как подделка запросов заставляет пользователей отправлять информацию на другие веб-сайты;
- как получить доступ к данным другого пользователя;
- с чего начать охоту за уязвимостями;
- как заставить веб-сайты раскрывать информацию с помощью фейковых запросов.
На кого рассчитана эта книга
Книга написана для начинающих хакеров. Ими могут быть веб-разработчики, веб-дизайнеры, родители в декрете, школьники, пенсионеры и др.
Конечно, опыт программирования и общее представление о веб-технологиях пригодятся, но не будут обязательным условием для хакинга.
Навыки программирования могут облегчить поиск уязвимостей, связанных с программной логикой. Если вы сможете поставить себя на место программиста или прочитать его код (если таковой доступен), ваши шансы на успех будут выше.
Глава 1. Основы охоты за уязвимостями. Вы узнаете, что такое уязвимости и награды за их обнаружение и в чем разница между клиентами и серверами. Также мы рассмотрим работу интернета: HTTP-запросы, ответы и методы и отсутствие состояния в протоколе HTTP.
Глава 2. Open Redirect. Мы опишем атаку, при которой доверенный домен перенаправляет пользователей на адрес злоумышленника.
Глава 3. Засорение HTTP-параметров. Мы рассмотрим внедрение в HTTP-запрос дополнительных параметров.
Глава 4. Межсайтовая подделка запросов. Вы узнаете, как с помощью вредоносного веб-сайта заставить браузер послать другому сайту HTTP-запрос, который будет принят.
Глава 5. Внедрение HTML и подмена содержимого. Мы объясним, как злоумышленники внедряют собственные HTML-элементы в веб-страницы атакуемого сайта.
Глава 6. Внедрение символов переноса строки. Вы научитесь внедрять закодированные символы в HTTP-сообщения, чтобы повлиять на их интерпретацию сервером, прокси и браузером.
Глава 7. Межсайтовый скриптинг. Мы объясним, как злоумышленники запускают собственный JavaScript-код на сайте, не фильтрующем пользовательский ввод.
Глава 8. Внедрение шаблонов. Вы научитесь использовать движки шаблонизации на сайте, который не фильтрует пользовательский ввод. Эта глава содержит клиентские и серверные примеры.
Глава 9. Внедрение SQL. Мы опишем, как злоумышленник запрашивает информацию у базы данных или атакует ее.
Глава 10. Подделка серверных запросов. Мы объясним, каким образом злоумышленник может заставить серверную платформу выполнять непреднамеренные сетевые запросы.
Глава 11. Внешние XML-сущности. Мы покажем, как пользоваться ошибками, которые допускает приложение в ходе анализа XML-ввода и обработки включения в этот ввод внешних сущностей.
Глава 12. Удаленное выполнение кода. Мы рассмотрим примеры эксплуатации злоумышленниками серверов и приложений для выполнения собственного кода.
Глава 13. Уязвимости памяти. Вы узнаете, как использовать механизм управления памятью приложения, чтобы спровоцировать непреднамеренное поведение, в том числе выполнение команд.
Глава 14. Захват поддомена. Мы покажем, как злоумышленник может управлять поддоменом от имени реального родительского домена.
Глава 15. Состояние гонки. Вы научитесь пользоваться ситуациями, в которых процессы сайта выполняют работу с учетом исходных условий, которые во время выполнения становятся недействительными.
Глава 16. Небезопасные прямые ссылки на объекты. Вы научитесь получать несанкционированный доступ к ссылке на объект, такой как файл, запись базы данных или учетная запись.
Глава 17. Уязвимости в OAuth. Мы опишем ошибки в реализации протокола, призванного упростить и стандартизировать безопасную авторизацию в веб, на мобильных устройствах и в настольных приложениях.
Глава 18. Уязвимости в логике и конфигурации приложений. Вы научитесь пользоваться ошибкой в программной логике или конфигурации приложения, чтобы заставить сайт выполнять действия.
Глава 19. Самостоятельный поиск уязвимостей. Мы опишем, где и как искать уязвимости, с учетом опыта и методологии. Эта глава не является пошаговой инструкцией для взлома сайтов.
Глава 20. Отчеты об уязвимостях. Мы расскажем, как писать информативные и заслуживающие доверия отчеты об уязвимостях, чтобы найденные вами ошибки не были проигнорированы.
Приложение А. Инструменты. Мы перечислим инструменты, предназначенные для хакинга, в том числе для проксирования веб-трафика, составления перечня поддоменов, создания снимков экрана и т.д.
Приложение Б. Дополнительный материал. Мы перечислим дополнительные ресурсы для расширения ваших хакерских познаний (онлайн-обучение, платформы для охоты за уязвимостями, блоги и т.д.
14 Захват поддомена
Захват поддомена позволяет злоумышленнику распространять собственный контент или перехватывать трафик на чужом сайте.
Доменные имена
Домен — это URL-адрес для доступа к веб-сайту. Он привязывается к IP-адресу с помощью DNS-серверов. В его иерархической структуре отдельные части разделяются точками, а заключительный элемент (крайний справа) называется доменом верхнего уровня. Примерами таких доменов являются .com, .ca, .info и т.д. Левее идет доменное имя. Эта часть иерархии предназначена для доступа к веб-сайту. Например, .com является зарегистрированным доменным именем с доменом верхнего уровня .com.
Поддомены составляют крайнюю левую часть URL-адреса и могут принадлежать разным веб-сайтам в одном и том же зарегистрированном домене. Например, компания Example создала веб-сайт, но при этом ей нужен отдельный адрес для электронной почты. Она может использовать два разных поддомена с разным контентом: www.
Для создания поддоменов владельцы сайта могут использовать несколько методов, например добавление в описание доменного имени одной из двух записей: A или CNAME. Запись A привязывает имя сайта к одному или нескольким IP-адресам. Уникальная запись CNAME связывает два домена. Право создавать DNS-записи есть только у администратора сайта.
Как происходит захват поддомена
Поддомен считается захваченным, если пользователь контролирует IP- и URL-адреса, на которые указывает запись A или запись CNAME. Пример: создав новое приложение, разработчик размещал его в Heroku и создавал запись CNAME, указывающую на поддомен главного сайта Example. Эта ситуация выходила из-под контроля, если:
- Компания Example регистрировала учетную запись на платформе Heroku, не используя SSL.
- Heroku назначал новому сайту компании Example поддомен unicorn457.herokuapp.com.
- Компания Example создавала на странице своего DNS-провайдера запись CNAME, согласно которой поддомен test.
.com ссылался на unicorn457.herokuapp.com. - Через несколько месяцев компания Example решала убрать поддомен test.
.com, закрывала свою учетную запись в Heroku и удаляла свой сайт с серверов платформы. Но запись CNAME оставалась. - Недоброжелатель замечает, что запись CNAME ссылается на незарегистрированный URL-адрес на платформе Heroku, и забирает себе поддомен unicorn457.heroku.com.
- Некто публикует контент в домене test.
.com, который благодаря своему URL-адресу выглядит как настоящий сайт компании Example.
Последствия от захвата поддомена зависят от его конфигурации и настроек родительского домена. Например, в своей презентации Web Hacking Pro Tips #8 (www.youtube.com/watch? v=76TIDwaxtyk) Арне Свиннен описывает способы группирования куки для передачи только подходящих доменов. Но если указать в качестве поддомена одну точку, например, …com, браузер отправит куки .com любому поддомену компании Example, который посещает пользователь. Контролируя адрес test…com, хакер может похитить куки .com у жертвы, которая заходит на захваченный поддомен test…com.
Но даже если куки не сгруппированы таким образом, злоумышленник все равно может создать поддомен, имитирующий родительский сайт. Разместив в этом поддомене форму входа, он может заставить пользователей передать ему свои учетные данные. Эта уязвимость делает возможными два распространенных вида атак, но есть и другие методы взлома, такие как перехват электронных писем.
Чтобы найти уязвимости с захватом поддоменов, проанализируйте DNS-записи сайта с помощью инструмента KnockPy, который ищет в поддоменах типичные для таких уязвимостей сообщения об ошибках, возвращаемых сервисами вроде S3. KnockPy поставляется со списком распространенных доменных имен, которые стоит проверить, но вы можете его дополнить. Аналогичный список можно найти в GitHub-репозитории SecLists (https://github.com/danielmiessler/SecLists/).
Захват поддомена Ubiquiti
Сложность: низкая
URL: assets.goubiquiti.com
Источник: hackerone.com/reports/109699/
Дата подачи отчета: 10 января 2016 года
Выплаченное вознаграждение: 500 долларов
Amazon Simple Storage (или S3) — это сервис хранения файлов, входящий в состав Amazon Web Services (AWS). Учетная запись в S3 имеет вид бакета, с которым можно работать через URL-адрес AWS, начинающийся с имени учетной записи. Для URL-адресов своих бакетов Amazon использует глобальное пространство имен, поэтому каждый зарегистрированный бакет является уникальным. Например, если я зарегистрирую бакет
Компания Ubiquiti создала для сайта assets.goubiquiti.com запись CNAME и привязала ее к бакету S3 uwn-images, доступному по адресу uwn-images.s3.website.us-west-1.amazonaws.com. Поскольку серверы Amazon разбросаны по всему миру, этот URL-адрес содержал информацию о географическом регионе, в котором был размещен бакет, —. us-west-1 (Северная Калифорния).
Этот бакет либо не был зарегистрирован, либо компания Ubiquiti удалила его из своей учетной записи AWS, не убрав при этом запись CNAME, но при посещении assets.goubiquiti.com браузер пытался получить содержимое из S3. Хакер забрал себе этот бакет и сообщил об уязвимости.
Выводы
Обращайте внимание на DNS-записи, которые указывают на сторонние сервисы, такие как S3. В случае обнаружения таких записей проверьте, правильно ли компания сконфигурировала этот сервис. Помимо этого, вы можете непрерывно отслеживать записи и сервисы с помощью автоматизированных инструментов наподобие KnockPy — на случай, если компания удалит поддомен, но забудет обновить настройки DNS.
Поддомен Scan.me, ссылающийся на Zendesk
Сложность: низкая
URL: support.scan.me
Источник: hackerone.com/reports/114134/
Дата подачи отчета: 2 февраля 2016 года
Выплаченное вознаграждение: 1000 долларов
Платформа Zendesk предоставляет службу клиентской поддержки в поддоменах веб-сайтов. Например, если бы ее использовала компания Example, этот поддомен мог бы выглядеть как support.
Как и в предыдущем примере, владельцы сайта scan.me создали запись CNAME, которая привязывала support.scan.me к scan.zendesk.com. Позже сервис scan.me был приобретен компанией Snapchat. Незадолго до оформления сделки поддомен support.scan.me был удален из Zendesk, но его запись CNAME осталась. Обнаружив это, хакер под псевдонимом harry_mg зарегистрировал сайт scan.zendesk.com и опубликовал на нем свой контент, используя платформу Zendesk.
Выводы
В процессе интеграции между родительской и дочерней компаниями некоторые поддомены могут удаляться. Если администраторы забывают обновить DNS-записи, появится угроза захвата поддоменов. Поскольку поддомен может поменяться в любой момент, непрерывное отслеживание информации о записях начните сразу после объявления о покупке компании.
Захват поддомена windsor на сайте Shopify
Сложность: низкая
URL: windsor.shopify.com
Источник: hackerone.com/reports/150374/
Дата подачи отчета: 10 июля 2016 года
Выплаченное вознаграждение: 500 долларов
Захват поддомена не всегда подразумевает регистрацию учетной записи в стороннем сервисе. Хакер zseano обнаружил, что компания Shopify создала запись CNAME для windsor.shopify.com, которая указывала на aislingofwindsor.com. Он узнал об этом в ходе поиска всех поддоменов Shopify на сайте crt.sh, который отслеживает все зарегистрированные SSL-сертификаты и связанные с ними поддомены. Эта информация является публичной, так как любой SSL-сертификат должен быть выдан центром сертификации, чтобы браузеры могли подтвердить его подлинность при посещении сайта. Сайты также могут регистрировать так называемые wildcard-сертификаты, которые предоставляют SSL-защиту для всех их поддоменов (на crt.sh в таких случаях вместо поддомена указывается звездочка).
Когда веб-сайт регистрирует wildcard-сертификат, crt.sh не может определить, для какого поддомена он предназначен, но показывает его уникальный хеш. Сервис censys.io отслеживает хеши сертификатов и поддомены, в которых они используются, сканируя интернет. Если поискать на censys.io хеш wildcard-сертификата, можно обнаружить новые поддомены.
Пролистывая список поддоменов на crt.sh и посещая каждый из них, zseano заметил, что сайт windsor.shopify.com возвращал ошибку »404 Page not Found». То есть либо сайт был пустым, либо больше не принадлежал aislingofwindsor.com. Чтобы проверить второй вариант, zseano посетил сервис регистрации доменных имен и попробовал найти aislingofwindsor.com. Оказалось, что этот домен можно было купить за 10 долларов. Сделав это, zseano сообщил представителям Shopify об уязвимости с захватом поддомена.
Выводы
Если вы найдете поддомен, который указывает на другой сайт и возвращает ошибку 404, проверьте, доступен ли этот сайт для регистрации. Сервис crt.sh может послужить отправной точкой в идентификации поддомена. Если вы обнаружите там wildcard-сертификат, поищите его хеш на censys.io.
Захват поддомена fastly на сайте Snapchat
Сложность: средняя
URL: fastly.sc-cdn.net/takeover.html
Источник: hackerone.com/reports/154425/
Дата подачи отчета: 27 июля 2016 года
Выплаченное вознаграждение: 3000 долларов
Fastly — это сеть доставки содержимого (content delivery network, или CDN). Она хранит копии содержимого на серверах по всему миру, чтобы они были как можно ближе к пользователям, которые их запрашивают.
Хакер Ибраитас сообщил компании Snapchat о неправильной конфигурации DNS для ее домена sc-cdn.net. У URL-адреса fastly.sc-cdn.net была запись CNAME, которая ссылалась на поддомен fastly. Последний принадлежал Snapchat, но не был корректно зарегистрирован. В то время сервис Fastly давал возможность регистрировать пользовательские поддомены при условии шифрования трафика с помощью TLS, для чего использовался общий wildcard-сертификат Fastly. В случае неправильной конфигурации пользовательского поддомена на сайте выводилось сообщение об ошибке: «Fastly error: unknown domain: . Please check that this domain has been added to a service» (Неизвестный домен: <неправильно сконфигурированный домен>. Пожалуйста, убедитесь в том, что этот домен был добавлен к сервису).
Прежде чем сообщить о проблеме, Ибраитас поискал домен sc-cdn.net на сайте censys.io и подтвердил его принадлежность компании Snapchat по сведениям о регистрации его SSL-сертификата. Затем он настроил сервер для получения трафика с этого URL-адреса и показал, что домен на самом деле использовался.
Специалисты Snapchat подтвердили, что небольшая доля посетителей продолжала пользоваться старой версией их приложения, которая запрашивала с этого поддомена неаутентифицированное содержимое. Пользовательская конфигурация была обновлена со ссылкой на другой URL-адрес. Теоретически на протяжении короткого отрезка времени злоумышленник мог раздавать пользователям с этого поддомена вредоносные файлы.
Выводы
Ищите сайты, ссылающиеся на сервисы, которые возвращают сообщения об ошибках. Найдя такую ошибку, почитайте документацию сервиса и разберитесь в том, как он используется. Затем попробуйте найти некорректную конфигурацию, с помощью которой можно захватить поддомен.
Захват поддомена на сайте Legal Robot
Сложность: средняя
URL: api.legalrobot.com
Источник: hackerone.com/reports/148770/
Дата подачи отчета: 1 июля 2016 года
Выплаченное вознаграждение: 100 долларов
Даже когда поддомен стороннего сервиса имеет корректную конфигурацию, сам сервис может быть настроен неправильно. Франс Розен сообщил компании Legal Robot, что DNS-запись CNAME для поддомена api.legalrobot.com указывала на сайт Modulus.io, который он мог захватить.
После обнаружения страницы с ошибкой хакер должен был посетить сервис и зарегистрировать поддомен. Но в случае с api.legalrobot.com это не увенчалось успехом: компания Legal Robot уже владела этим сайтом.
Не сдавшись, Розен попробовал зарегистрировать wildcard-поддомен *.legalrobot.com, который оставался доступным. Конфигурация сайта Modulus отдавала приоритет wildcard-поддоменам перед более подробными записями, среди которых была и api.legalrobot.com. В результате, как видно на рис. 14.1, Розену удалось разметить на сайте api.legalrobot.com свое собственное содержимое.
Обратите внимание на содержимое, размещенное Розеном на рис. 14.1. Вместо того чтобы пристыдить владельцена сайта и заявить о захвате поддомена, он использовал скромную текстовую страницу с HTML-комментарием, который подтверждал, что этот текст разместил именно он.
Выводы
Когда сайт использует сторонние сервисы для размещения поддомена, он полагается на механизмы безопасности этих сервисов. Не забывайте о том, что в случае успешного захвата поддомена демонстрацию лучше делать осторожно.
Об авторе
Питер Яворски стал хакером, самостоятельно изучая опыт предшественников (некоторые из них упоминаются в книге). Ныне это успешный охотник за уязвимостями, на счету которого благодарности от Salesforce, Twitter, Airbnb, Verizon Media, Министерства обороны США и др., сейчас он является инженером по безопасности приложений в Shopify.
О научном редакторе
Цан Чи Хонг, известный под псевдонимом FileDescriptor, — пентестер и охотник за уязвимостями. Проживает в Гонконге, пишет статьи о веб-безопасности на сайте blog.innerht.ml, интересуется саундтреками и криптовалютой.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Hacking
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.