Перевод статьи подготовлен специально для студентов курса «Пентест. Практика тестирования на проникновение».
Вы интересуетесь развитием методов взлома и хотите поделиться своими открытиями с сообществом информационной безопасности? В этой статье я дам некоторые рекомендации тем, кто хочет стать аналитиком в области веб-безопасности, а также расскажу о возможностях и ловушках, которые сам когда-то встретил на своем пути.
Аналитики в области сетевой безопасности – это люди, которые выходят за рамки использования известных методов взлома, таких как SQLi и XSS, и находят новые угрозы для веб-сайтов. Это могут быть инновационные решения, которые усложняют существующие методы, как, например, подход к эксплуатации уязвимостей local+blind XXE, или целые новые классы угроз, как Web Cache Deception (отравление кэша веб-приложений).
Очень трудно защитить веб-сайты от неизвестных методов атаки, поэтому они часто могут быть задействованы для эксплуатации большого количества других безопасных веб-сайтов. Это значит, что публикация ваших открытий в этой области может помочь веб-сайтам устранить уязвимости, тем самым повышая общий уровень безопасности всей экосистемы.
Большинство исследований связано с использованием существующих методов, которые немного продвинулись вперед, поэтому для начала хорошо бы ознакомиться с текущим положением дел. Самый быстрый способ сделать это – найти работу, на которой большую часть своего времени вы будете применять какие-либо методы взлома. Многие хорошие люди уже давали советы о том, как попасть в индустрию информационной безопасности, поэтому здесь я буду краток.
Я рекомендую практико-ориентированный подход, начиная от нашей Академии Сетевой Безопасности, переходя к более открытым задачам, таким, как на моем hackxor.net, двигаться вперед сначала через простые задачи с маленьким вознаграждением за старания на HackerOne и BugCrowd, а затем, наконец, переходить на хорошо зарекомендовавшие себя щедрые программы по поиску уязвимостей с хорошими выплатами. После того, как вы найдете и проанализируете несколько уязвимостей, стать консультантом по информационной безопасности и каждый день проводить, взламывая новые сайты и веб-приложения должно быть несложно.
Есть множество бесплатных онлайн-ресурсов, которые послужат вам хорошую службу на этом пути, в том числе наша методология Burp, Hacker 101 от HackerOne и руководство по тестированию OWASP. Что касается книг, я бы порекомендовал почитать WebApp Hacker’s Handbook и The Tangled Web. Вышеупомянутая Академия Сетевой Безопасности предназначена для интерактивного использования в качестве замены WebApp Hacker's Handbook, но нам потребуется некоторое время, чтобы охватить все необходимые темы, поэтому на данный момент я бы порекомендовал использовать оба источника.
Как только вы начнете работать и весь свой рабочий день будете заниматься взломами, вы поймете уровень нагрузки, через какое-то время ваш опыт будет обширным и новые знания будут даваться тяжело. На этом этапе самый важный шаг – это не позволить себе остановиться на достигнутом и продолжать учиться и практиковаться. Только так вы станете настоящим специалистом.
Все понимают, что нужно идти в ногу с новыми разработками и мониторить отраслевых экспертов, новостных агрегаторов и посещать конференции по безопасности. Однако следить исключительно за новыми разработками значит не замечать те драгоценные знания и исследования, которые были сделаны давным-давно и забыты.
Каждый раз, когда вы находите хорошую статью в блоге, не скупитесь на время – прочтите весь архив. Там часто скрываются бесценные и забытые фрагменты информации. Например, возьмите вот эту статью от RSnake о перепривязывании DNS, написанную в 2009 году. Перепривязывание DNS обходит контроли доступа на основе IP/брандмауэра на веб-сайтах, при этом единственный эффективный способ избежать его – это добавить ваше приложение в белый список в HTTP-заголовка Host. Люди быстро решили, что браузеры вполне с этим справляются, и вот девять лет спустя с новой чередой эксплойтов стало понятно, что эта уязвимость вновь начала использоваться.
Просмотр архивов также поможет вам не изобретать велосипед, который уже изобрел кто-то другой, например, как было с повторным изобретением CSS атаки десять лет спустя. Тем не менее, некоторые исследования действительно трудно найти, поэтому случайное их дублирование неизбежно. Однажды я опубликовал исследование и обнаружил, что kuza55 уже делал то же самое пять лет назад. Поэтому делайте все возможное, чтобы избежать дублирования исследований, но, если такое случится – не паникуйте, со всеми бывает.
Чтобы связать темы и определить возможности, которые упускают другие люди, очень важно собирать информацию из различных источников. Для начала, не ограничивайте себя в чтении контента по информационной безопасности; вы быстро найдете документацию, которая послужит руководством для создания эксплойта. Опять же, и следующий совет может быть довольно очевидным, но перед тем как лезть в Google или пытаться сформулировать вопрос в Twitter/Reddit/StackOverflow, убедитесь в том, что спросили у своих коллег. Часто бывает, что необходимые знания где-то рядом, но некоторые люди просто не делятся ими публично.
Кроме того, постарайтесь сохранять разнообразие и в своем опыте.
Выполнения black-box тестирований на проникновение для консультаций по информационной безопасности должно предоставить вам широкий спектр внешних и внутренних веб-приложений, с которыми вы может быть никогда и не встретитесь в программе bug bounty. Однако ограничение по времени помешает вам углубиться в такой уровень понимания приложения, который приходит за месяцы bug bounty за одной целью. Несмотря на то, что это медленный и ограниченный процесс, обзор white-box исходного кода может предложить альтернативную перспективу атаки, о которой black-box пентестер даже не подумал бы. Чтобы развиваться как аналитик, вам нужно сочетать все три методики работы. Дополнительные возможности, такие как игры в CTF и написание веб-приложений также расширят ваши перспективы.
Одна из худших ловушек, в которую можно угодить – это отбросить отличную идею, предполагая, что она точно не сработает, и так и не попробовать ее, потому что «кто-то другой уже точно бы это заметил» или «она слишком глупая, чтобы сработать». Я раньше таким страдал, до такой степени, что одна часть исследования проявилась на два года позже, чем должна была. Нет разницы, обход ли это аутентификации повторным вводом одного и того же пароля, или же взлом страницы администрирования Google с телефона, вместо ноутбука, ведь следующий значимый эксплойт может родиться из действительно дурацкой идеи.
Если какая-то технология считается сложной, неудобной или опасной – это явно тема, нуждающаяся в проведении исследований. После многократного опыта настоящих прорывов после занятия темами, которые находятся далеко за пределами моей зоны комфорта, я решил, что самый быстрый путь к новым открытиям – это активный поиск тем, которые заставляют меня чувствовать себя некомфортно. Скорее всего, этих тем избегают и другие хакеры, давая им серьезный исследовательский потенциал. Для меня это единственное правдоподобное объяснение тому, почему я смог взять технику, впервые задокументированную в 2005 году, и снова представленную на DEF CON в 2016 году, и использовать ее чтобы заработать 70 тыс. долларов на bug bounty в 2019 году.
Повторять, изобретать, делиться
Самый простой способ начать работу – найти чье-либо перспективное исследование, построить на его базе нечто свое, смешивая какие-то методы, а затем попробовать применить свой новый подход в полевых условиях, и посмотреть, не случится ли чего интересного.
Например, вот эта статья о неправильной конфигурации CORS, указала на интересное поведение и в ней говорилось о том, что такое поведение крайне распространено, но автор на этом остановился и не изучал влияния на отдельные веб-сайты.
Я взял за основу предложенную концепцию и применил ее к bug bounty сайтам, на которых я мог вполне легально экспериментировать и пробовать свои силы в уклонении от всех возможных способов защиты на них представленных. По пути я кое-что улучшил, использовав известные методы эксплойта open redirect, наконец обнаружил происхождение “null”, прочитав документацию CORS, и изучил возможности отравления кэша.
В этом процессе не было ничего, что требовало бы невероятной интуиции или выдающихся технических знаний, тем не менее был с легкостью получен конечный результат – эксплуатация CORS misconfigurations для биткойнов и bounty.
Повторение работ других людей – это круто, но самые крутые исследования берут свое начало буквально из ниоткуда, будь то перезапись относительного пути или отравление кэша веб-приложений. Я считаю, что такие открытия вызваны личными переживаниями, которые складываются в подсказки. Я называю их «ведущими переживаниями» или «хлебными крошками», поскольку они порой таинственны и их может понадобиться множество, чтобы привести вас к полезному открытию.
Например, в 2011 году я пытался взломать защиту CSRF, которую использовали в
Некоторое время спустя я взглянул на исходный код функции сброса пароля Piwik и нашел строку, которая выглядела примерно так:
Ага, подумал я. Piwik использует PHP, который очень весело обрабатывает путь, поэтому я могу запросить сброс пароля по адресу piwik.com/reset.php/foo;http://evil.com, в результате я получаю электронное письмо с двумя ссылками, и секретный токен отправляется на
Третья и последняя крошка заключалась в том, как Piwik попытался исправить эту уязвимость. Они заменили
Описывая появление открытий так многословно, надеюсь, я смог развеять тайну вокруг процесса исследования и показать его непохожим на спонтанную идею из ниоткуда. С такой точки зрения, кажется, что основной навык (помимо имеющихся знаний и опыта) заключается в распознавании таких хлебных крошек и следовании по пути, который они указывают. Я не могу доступно сформулировать как это делать, но я знаю, как нужно рассматривать те вещи, которые заставляют вас раз за разом говорить «это бессмысленно».
Важно делиться своими исследованиями с сообществом. Это поможет увеличить ваше портфолио и, возможно, сподвигнет вашего работодателя выделять вам больше рабочего времени на исследования. Кроме того, это поможет вам избежать потери времени и стимулировать дальнейшие исследования. Критика ваших работ и комментарии к ним могут помочь увидеть то, чего вы раньше не замечали. Также нет ничего более полезного, чем видеть, как другой аналитик разрабатывает свои методики на основе ваших.
Пожалуйста, не думайте, что технологией или идеей не стоит делиться только потому, что она не является новаторской. Два логотипа и презентация – публикуйте все, что у вас есть (в идеале – в блоге, а не на какой-либо плохоиндексируемой закрытой платформе, как Twitter).
Когда вы делитесь исследованием, всегда полезно показать пример применения вашего метода на реальном веб-приложении. Без этого у людей неизбежно возникнут трудности с его пониманием, и они могут усомниться в его практической ценности.
Наконец, презентации отлично подходят для охвата более широкой аудитории, но не попадайте в замкнутый круг и не тратьте свое время на бесконечное повторение прошлых презентаций.
Мне и самому еще многое предстоит узнать о сетевой безопасности, поэтому я бы вернулся к этой теме несколько лет спустя со свежим взглядом и новыми идеями. Кроме того, я знаю, что у других аналитиков могут быть другие точки зрения, и с нетерпением жду идей, которыми они могут поделиться.
Краткое содержание моих советов о том, как стать аналитиком в области сетевой безопасности:
Итак, если вы ищете с чего начать, я могу посоветовать вам нашу ежегодную подборку десяти лучших техник веб-хакинга. В дополнение к этому я создал список различных блогов, которые вдохновляли меня многие годы. Удачи вам в исследованиях и получайте удовольствие!
Вы интересуетесь развитием методов взлома и хотите поделиться своими открытиями с сообществом информационной безопасности? В этой статье я дам некоторые рекомендации тем, кто хочет стать аналитиком в области веб-безопасности, а также расскажу о возможностях и ловушках, которые сам когда-то встретил на своем пути.
Кто такой аналитик в области сетевой безопасности?
Аналитики в области сетевой безопасности – это люди, которые выходят за рамки использования известных методов взлома, таких как SQLi и XSS, и находят новые угрозы для веб-сайтов. Это могут быть инновационные решения, которые усложняют существующие методы, как, например, подход к эксплуатации уязвимостей local+blind XXE, или целые новые классы угроз, как Web Cache Deception (отравление кэша веб-приложений).
Очень трудно защитить веб-сайты от неизвестных методов атаки, поэтому они часто могут быть задействованы для эксплуатации большого количества других безопасных веб-сайтов. Это значит, что публикация ваших открытий в этой области может помочь веб-сайтам устранить уязвимости, тем самым повышая общий уровень безопасности всей экосистемы.
Ломаем для жизни
Большинство исследований связано с использованием существующих методов, которые немного продвинулись вперед, поэтому для начала хорошо бы ознакомиться с текущим положением дел. Самый быстрый способ сделать это – найти работу, на которой большую часть своего времени вы будете применять какие-либо методы взлома. Многие хорошие люди уже давали советы о том, как попасть в индустрию информационной безопасности, поэтому здесь я буду краток.
Я рекомендую практико-ориентированный подход, начиная от нашей Академии Сетевой Безопасности, переходя к более открытым задачам, таким, как на моем hackxor.net, двигаться вперед сначала через простые задачи с маленьким вознаграждением за старания на HackerOne и BugCrowd, а затем, наконец, переходить на хорошо зарекомендовавшие себя щедрые программы по поиску уязвимостей с хорошими выплатами. После того, как вы найдете и проанализируете несколько уязвимостей, стать консультантом по информационной безопасности и каждый день проводить, взламывая новые сайты и веб-приложения должно быть несложно.
Есть множество бесплатных онлайн-ресурсов, которые послужат вам хорошую службу на этом пути, в том числе наша методология Burp, Hacker 101 от HackerOne и руководство по тестированию OWASP. Что касается книг, я бы порекомендовал почитать WebApp Hacker’s Handbook и The Tangled Web. Вышеупомянутая Академия Сетевой Безопасности предназначена для интерактивного использования в качестве замены WebApp Hacker's Handbook, но нам потребуется некоторое время, чтобы охватить все необходимые темы, поэтому на данный момент я бы порекомендовал использовать оба источника.
Выход за рамки известных методов
Как только вы начнете работать и весь свой рабочий день будете заниматься взломами, вы поймете уровень нагрузки, через какое-то время ваш опыт будет обширным и новые знания будут даваться тяжело. На этом этапе самый важный шаг – это не позволить себе остановиться на достигнутом и продолжать учиться и практиковаться. Только так вы станете настоящим специалистом.
Охота за забытыми знаниями
Все понимают, что нужно идти в ногу с новыми разработками и мониторить отраслевых экспертов, новостных агрегаторов и посещать конференции по безопасности. Однако следить исключительно за новыми разработками значит не замечать те драгоценные знания и исследования, которые были сделаны давным-давно и забыты.
Каждый раз, когда вы находите хорошую статью в блоге, не скупитесь на время – прочтите весь архив. Там часто скрываются бесценные и забытые фрагменты информации. Например, возьмите вот эту статью от RSnake о перепривязывании DNS, написанную в 2009 году. Перепривязывание DNS обходит контроли доступа на основе IP/брандмауэра на веб-сайтах, при этом единственный эффективный способ избежать его – это добавить ваше приложение в белый список в HTTP-заголовка Host. Люди быстро решили, что браузеры вполне с этим справляются, и вот девять лет спустя с новой чередой эксплойтов стало понятно, что эта уязвимость вновь начала использоваться.
Просмотр архивов также поможет вам не изобретать велосипед, который уже изобрел кто-то другой, например, как было с повторным изобретением CSS атаки десять лет спустя. Тем не менее, некоторые исследования действительно трудно найти, поэтому случайное их дублирование неизбежно. Однажды я опубликовал исследование и обнаружил, что kuza55 уже делал то же самое пять лет назад. Поэтому делайте все возможное, чтобы избежать дублирования исследований, но, если такое случится – не паникуйте, со всеми бывает.
Собирайте редкости
Чтобы связать темы и определить возможности, которые упускают другие люди, очень важно собирать информацию из различных источников. Для начала, не ограничивайте себя в чтении контента по информационной безопасности; вы быстро найдете документацию, которая послужит руководством для создания эксплойта. Опять же, и следующий совет может быть довольно очевидным, но перед тем как лезть в Google или пытаться сформулировать вопрос в Twitter/Reddit/StackOverflow, убедитесь в том, что спросили у своих коллег. Часто бывает, что необходимые знания где-то рядом, но некоторые люди просто не делятся ими публично.
Кроме того, постарайтесь сохранять разнообразие и в своем опыте.
Выполнения black-box тестирований на проникновение для консультаций по информационной безопасности должно предоставить вам широкий спектр внешних и внутренних веб-приложений, с которыми вы может быть никогда и не встретитесь в программе bug bounty. Однако ограничение по времени помешает вам углубиться в такой уровень понимания приложения, который приходит за месяцы bug bounty за одной целью. Несмотря на то, что это медленный и ограниченный процесс, обзор white-box исходного кода может предложить альтернативную перспективу атаки, о которой black-box пентестер даже не подумал бы. Чтобы развиваться как аналитик, вам нужно сочетать все три методики работы. Дополнительные возможности, такие как игры в CTF и написание веб-приложений также расширят ваши перспективы.
Не существует слишком глупых идей
Одна из худших ловушек, в которую можно угодить – это отбросить отличную идею, предполагая, что она точно не сработает, и так и не попробовать ее, потому что «кто-то другой уже точно бы это заметил» или «она слишком глупая, чтобы сработать». Я раньше таким страдал, до такой степени, что одна часть исследования проявилась на два года позже, чем должна была. Нет разницы, обход ли это аутентификации повторным вводом одного и того же пароля, или же взлом страницы администрирования Google с телефона, вместо ноутбука, ведь следующий значимый эксплойт может родиться из действительно дурацкой идеи.
Откажитесь от комфорта
Если какая-то технология считается сложной, неудобной или опасной – это явно тема, нуждающаяся в проведении исследований. После многократного опыта настоящих прорывов после занятия темами, которые находятся далеко за пределами моей зоны комфорта, я решил, что самый быстрый путь к новым открытиям – это активный поиск тем, которые заставляют меня чувствовать себя некомфортно. Скорее всего, этих тем избегают и другие хакеры, давая им серьезный исследовательский потенциал. Для меня это единственное правдоподобное объяснение тому, почему я смог взять технику, впервые задокументированную в 2005 году, и снова представленную на DEF CON в 2016 году, и использовать ее чтобы заработать 70 тыс. долларов на bug bounty в 2019 году.
Повторять, изобретать, делиться
Повторять
Самый простой способ начать работу – найти чье-либо перспективное исследование, построить на его базе нечто свое, смешивая какие-то методы, а затем попробовать применить свой новый подход в полевых условиях, и посмотреть, не случится ли чего интересного.
Например, вот эта статья о неправильной конфигурации CORS, указала на интересное поведение и в ней говорилось о том, что такое поведение крайне распространено, но автор на этом остановился и не изучал влияния на отдельные веб-сайты.
Я взял за основу предложенную концепцию и применил ее к bug bounty сайтам, на которых я мог вполне легально экспериментировать и пробовать свои силы в уклонении от всех возможных способов защиты на них представленных. По пути я кое-что улучшил, использовав известные методы эксплойта open redirect, наконец обнаружил происхождение “null”, прочитав документацию CORS, и изучил возможности отравления кэша.
В этом процессе не было ничего, что требовало бы невероятной интуиции или выдающихся технических знаний, тем не менее был с легкостью получен конечный результат – эксплуатация CORS misconfigurations для биткойнов и bounty.
Изобретать
Повторение работ других людей – это круто, но самые крутые исследования берут свое начало буквально из ниоткуда, будь то перезапись относительного пути или отравление кэша веб-приложений. Я считаю, что такие открытия вызваны личными переживаниями, которые складываются в подсказки. Я называю их «ведущими переживаниями» или «хлебными крошками», поскольку они порой таинственны и их может понадобиться множество, чтобы привести вас к полезному открытию.
Например, в 2011 году я пытался взломать защиту CSRF, которую использовали в
addons.mozilla.org
. Я обошел проверку токенов, но они еще проверяли, чтобы хост в заголовке Referer соответствовал текущему сайту. Я обратился за помощью на форум sla.ckers
, и ‘barbarianbob’
сказал, что Django определяет хост текущего сайта, глядя на значение поля Host в заголовках HTTP, и он может быть переопределен заголовком X-Forwarded-Host. Эту мысль можно было объединить с идеей уязвимости внедрения заголовков в Flash, чтобы обойти проверку CSRF, но что было еще важнее – то была первая хлебная крошка. Именно она привела к мысли, что приложения могут полагаться на заголовок хост, чтобы определить текущее местоположение.Некоторое время спустя я взглянул на исходный код функции сброса пароля Piwik и нашел строку, которая выглядела примерно так:
$passwordResetLink = getCurrentUrlWithoutQueryString() + $secretToken
Ага, подумал я. Piwik использует PHP, который очень весело обрабатывает путь, поэтому я могу запросить сброс пароля по адресу piwik.com/reset.php/foo;http://evil.com, в результате я получаю электронное письмо с двумя ссылками, и секретный токен отправляется на
evil.com
. Эта идея сработала, принесла мне выгоду и заложила фундамент для последующих исканий.Третья и последняя крошка заключалась в том, как Piwik попытался исправить эту уязвимость. Они заменили
getCurrentUrlWithoutQueryString()
на getCurrentUrlWithoutFileName()
. Это означало, что я больше не могу использовать свой способ для эксплойта. Благодаря тому, что я уже был знаком с Django, я решил углубиться в код и узнать, как Piwik определил, каким является текущее имя хоста. Я обнаружил, что, как и Django, они использовали хост-заголовок, а это значило, что я мог легко генерировать отправленные письма для сброса пароля. Как оказалось, этот прием сработал на addons.mozilla.org
и Gallery, и Symfony, и Drupal, и целом ряде других сайтов. В итоге это привело к практике атак с подменой HTTP-заголовка Host. Описывая появление открытий так многословно, надеюсь, я смог развеять тайну вокруг процесса исследования и показать его непохожим на спонтанную идею из ниоткуда. С такой точки зрения, кажется, что основной навык (помимо имеющихся знаний и опыта) заключается в распознавании таких хлебных крошек и следовании по пути, который они указывают. Я не могу доступно сформулировать как это делать, но я знаю, как нужно рассматривать те вещи, которые заставляют вас раз за разом говорить «это бессмысленно».
Делиться
Важно делиться своими исследованиями с сообществом. Это поможет увеличить ваше портфолио и, возможно, сподвигнет вашего работодателя выделять вам больше рабочего времени на исследования. Кроме того, это поможет вам избежать потери времени и стимулировать дальнейшие исследования. Критика ваших работ и комментарии к ним могут помочь увидеть то, чего вы раньше не замечали. Также нет ничего более полезного, чем видеть, как другой аналитик разрабатывает свои методики на основе ваших.
Пожалуйста, не думайте, что технологией или идеей не стоит делиться только потому, что она не является новаторской. Два логотипа и презентация – публикуйте все, что у вас есть (в идеале – в блоге, а не на какой-либо плохоиндексируемой закрытой платформе, как Twitter).
Когда вы делитесь исследованием, всегда полезно показать пример применения вашего метода на реальном веб-приложении. Без этого у людей неизбежно возникнут трудности с его пониманием, и они могут усомниться в его практической ценности.
Наконец, презентации отлично подходят для охвата более широкой аудитории, но не попадайте в замкнутый круг и не тратьте свое время на бесконечное повторение прошлых презентаций.
Заключение
Мне и самому еще многое предстоит узнать о сетевой безопасности, поэтому я бы вернулся к этой теме несколько лет спустя со свежим взглядом и новыми идеями. Кроме того, я знаю, что у других аналитиков могут быть другие точки зрения, и с нетерпением жду идей, которыми они могут поделиться.
Краткое содержание моих советов о том, как стать аналитиком в области сетевой безопасности:
- Ищите забытые знания и читайте архивные записи;
- Получайте информацию из как можно большего числа различных источников;
- Углубляйтесь в сложные и «страшные» темы;
- Повторяйте, изобретайте, делитесь;
- Не существует слишком глупых идей.
Итак, если вы ищете с чего начать, я могу посоветовать вам нашу ежегодную подборку десяти лучших техник веб-хакинга. В дополнение к этому я создал список различных блогов, которые вдохновляли меня многие годы. Удачи вам в исследованиях и получайте удовольствие!