Как начать карьеру в пентесте: опыт сотрудника Angara Security
Мы продолжаем цикл материалов о старте карьеры в кибербезопасности.
Этот материал подготовил сотрудник отдела анализа защищенности Angara Security, по просьбе автора, мы не будем раскрывать его имя. Если после прочтения статьи будут вопросы, welcome в комментарии или в личные сообщения нашему эксперту. Итак, как вкатиться в пентест в 2024 году.
Всем привет! Я @the_ospf, работаю в команде анализа защищенности Angara Security. Мы занимаемся пентестом ИБ-инфраструктуры крупных и средних компаний, тестируем web- и мобильные приложения. В этой статье я расскажу о своем пути от начинающего специалиста до эксперта по анализу защищенности, как я собирал необходимый багаж знаний, своих ошибках и поделюсь материалами, которые помогут вам в подготовке для вашего первого трудоустройства в качестве специалиста по анализу защищенности веб-приложений.
Статья ориентирована по большей части на новичков в области анализа защищенности веб-приложений, а также на студентов, которые сильно желают стать хакером попробовать свои силы в этом направлении.
Дисклеймер: здесь описано по большей части моё мнение, часто оно подкрепляется моими товарищами по специальности и анализом рынка.
WEB Offensive / Application Security
Пентестер — довольно сложная профессия. Работа специалистом по анализу защищенности в области веба подразумевает поиск различных багов и уязвимостей в веб-приложениях разными методами (чёрный, серый, белый ящик). Для того, чтобы работать в данном направлении, важно непрерывно развиваться. Поскольку, пока вы разбираетесь с уязвимостями в одном фреймворке, выходят ещё 10 других «ресерчей» на них (утрированно), и нужно иметь хорошие навыки самообразования, чтобы при встрече на проекте с ранее неизвестным фреймворком и технологий, вы могли относительно быстро разобраться в том, какие уязвимости потенциально могут быть заложены.
Веб-направление является наиболее творческим, поскольку у вас по большей части нет четкого подхода, как действовать с тем или иным приложением, и всё зависит от его функционала (а его, порой, бывает совсем мало).
Необходимые технические знания
Основной объект нашего исследования здесь — веб-приложения. Соответственно, нужно хорошо знать ту базу, которая как-то к ним относится.
Принципы сетевого взаимодействия. Если вы хотите работать «вебером», но не знаете, как работает приложение на уровне сети: TCP-хендшейки, разрешения ip, в доменные имена, прокси и т.д, — то у меня для вас плохие новости))) Поэтому знать хорошо сети на базовом уровне — это must have.
Принцип работы протоколов HTTP/HTTPS. Это, на самом деле, относится к первому пункту, но решил субъективно выделить в отдельный. Важно понимать разницу в http-методах. Почему в определённых случаях используется PATCH вместо POST? Что такое OPTIONS? Отличия HTTP 0.9/1.1 от HTTP2? Для чего нужны центры сертификации? На эти все вопросы предлагаю ответить в рамках подготовки.
Архитектура построения веб-приложений. Уязвимости не всегда зависят от кода непосредственно веб-приложения. Иногда бывает, что уязвимость заложена в самой архитектуре, например в веб-сервере (привет, Request Smuggling). И почти всегда, вы как специалист не сможете явно определить архитектуру, а только сделаете предположения, как она может выглядеть. Поэтому без соответствующих знаний будет непросто.
Представление об уязвимостях. За последние 10 лет безопасность ушла далеко вперед и сейчас анализ веб-приложений — это нечто большее, чем ставить кавычки и » в веб-формы. Работая на проектах, вам придётся исследовать более сложные уязвимости, а также цепочки, в которых они могут возникать. Если вы придёте в это направление с почти нулевым уровнем, найти работу вряд ли получится, плюс будет крайне тяжело одновременно искать уязвимости и в них разбираться. Чем больше багаж знаний об уязвимостях на старте, тем проще. К слову, когда я начал работать в пентесте, у меня уже было приличное понимание об уязвимостях, но всё равно были случаи, когда я что-то не находил, поскольку не знал о существовании подобной технологии или уязвимости.
Базовые навыки поиска по открытым источникам. Вам необходим навык поиска ответов на любые возникающие у вас вопросы самостоятельно. Даже если у вас есть знакомые, которые имеют опыт по вашему вопросу, первым делом идем в открытые источники, а уже если самостоятельно не можете разобраться, идём за помощью к товарищам. На большой дистанции этот навык очень сильно упростит вам жизнь.
Умение/писать читать код. Как уже описывалось выше, есть несколько методов для анализа веб-приложений. И в случае использование метода «белый ящик» у вас будут исходные коды приложения — здесь опыт разработки веб-приложений совсем не помешает))) Часто гораздо проще посмотреть, как тот или иной механизм реализован в коде, чем тестировать его динамически. Не говоря уже о том, что вам постоянно придётся анализировать JavaScript на клиентской части. Поэтому вы должны уметь читать код, и что важно — уметь читать код на разных языках.
Базово хотя бы:PHP, JavaScript, Python, Java, C# и упаси господи C++.
Также часто в работе вам придётся писать скрипты автоматизации или адаптировать под себя другие инструменты/скрипты.Общее понимание сферы работы. Часто бывают ситуации, что приходится анализировать веб-приложения с точки зрения тестирования внешнего периметра, поэтому важно знать что-то из инфраструктурного пентеста. При таких условиях часть вашего арсенала как «вебера» становится бесполезным. Надо иметь базовые понятие о том, как просканить сетку, какие бывают уязвимые сервисы, на каких портах они крутятся. Чтобы не пропустить какую-нибудь торчащую наружу шару, в которой лежат креды «клиартекстом», из-за того, что вы умеете смотреть только веб)))))
База по ИБ. Нужно понимать базовые термины из серии баз данных, свойства информации, что такое уязвимость, эксплуатация и т.д. Про английский на уровне чтения технической документации молчу))) А также must have-навыками являются администрирование windows и linux систем. Но не то, что пишут 99% студентов в резюме, а реальные умения настроить окружение под себя, раскатать нужную тулзу, решить зависимости, в общем всё то, что потребуется вам в работе.
А теперь ответ на главный вопрос этой публикации. А как же всё-таки начать карьеру в пентесте?
Я расскажу историю своего трудоустройства как специалиста по анализу защищенности.
Мне в какой-то степени повезло, я начал искать работу в ИБ во время учебы на третьем курсе Московского Политехнического университета. Мы обучались по программе «ассоциатов», что означает погружение в специальность, и только затем теория. Поэтому уже на третьем курсе я неплохо знал сети (мог сдать CCNA R1), также у нас было несколько хороших курсов по разработке, в том числе, веб-приложений, но не обошлось и без администрирования винды и линукса. А также я успел немного поработать разработчиком на PHP и уже хотел дальше продвигаться по этому пути, но…
Мою судьбу поменяли впервые появившиеся у нас два предмета: анализ защищенности и инструментальные средства анализа защищенности. Курсы были очень сырые, но уже тогда эта область мне показалась интересной. Я и ещё несколько заинтересованных студентов начали работать в этом направлении, попутно задавая преподавателю вопросы. Это всё продолжалось полгода.
Тогда я получил базовые навыки в области анализа защищенности, успел погрузиться в bWAPP и DVWA и даже немного попрактиковался в инфраструктурном пентесте. Когда я решился искать работу в этом направлении, передо мной стоял выбор: веб или инфра. Учитывая мой предыдущий опыт в разработке веб-приложений, выбор был очевиден.
Но когда я с гордостью сел искать вакансии веб-пентестера, то был разочарован, поскольку тогда у компаний был немного иной подход к данной должности и джунов/стажёров практически не набирали (сейчас всё не так).
Мои знания, мягко говоря, не дотягивали до требуемого уровня. Я начал искать компании, через которые возможно будет дорасти до специалиста по анализу защищенности. Я устроился в Angara Security в ИБ-техподдержку, на первом же собеседовании заявив, что планирую идти в ОАЗ (отдел анализа защищенности). Через пару месяцев мне всё-таки поставили собеседование на эксперта по анализу защищенности, на котором я и понял свои слабые места.
Ну, а дальше ничего интересного, мне дали наставника и учебные материалы, чтобы закрыть свои пробелы. И ещё через 4 собеседования… и несколько месяцев изучения, цель была достигнута.
На одни и те же грабли дважды
Главной моей ошибкой в процессе изучение было вот что: я думал, чем больше уязвимостей я изучу, тем круче буду как специалист, но на деле оказалось всё совсем не так. Выполнение лабораторок по уязвимостям дает понимание непосредственно только уязвимости, но не дает навыков по поиску этой уязвимости или её проявлений. Например, решая лабу на root.me на XSS, вы имеете: приложение с очень ограниченным функционалом, об уязвимости в котором известно изначально. В таком ключе сложность поиска уязвимости сводится к минимуму.
На реальных проектах вы никогда не знаете, где может быть заложена уязвимость, и основная сложность заключается в её поиске. Из-за этого мне на первых порах часто не хватало усидчивости. Плюсом к этому часто эксплуатация багов на реальных проектах усложняется другими моментами, например, сессионным механизмом, WAF«ом и т.д.
Я очень рекомендую, помимо изучения вышеописанного, раскатывать и анализировать различные уязвимые приложения, не подсматривая заранее стек технологий и где заложены уязвимости. Это даст минимальный опыт, и понимание, как может выглядеть реальный проект (ссылки на несколько оставлю).
Боль начинающего вебера
На этапе поиска работы вы скорее всего столкнетесь с выбором: идти в известную компанию или в «ноунейма». И здесь выбор не так однозначен, как кажется на первый взгляд.
Если пойти в известную компанию, то там будет более высокий уровень экспертизы, скорее всего хорошо развитая политика наставничества, но парадокс заключается в том, что критичных и интересных багов на проектах будет крайне мало.
Связано это по большей части с тем, что у крупных или относительно известных компаний услуги пентеста стоят больше, соответственно и заказчики будут с нормальными бюджетами на разработку и на анализ защищенности, а значит нужно будет тестировать «крепкие» приложения, или приложения, которые до вас уже кто-то тестировал. И в случае отсутствия практики до этого, будет особенно сложно).
Рекомендую искать компании, которые работают в основном на внешних проектах. Можно идти работать в компании, которые набирают команду на внутренние проекты, но там и требования выше, и работа рутинная, поэтому всё-таки рекомендую рассматривать интеграторов.
В случае с малоизвестными компаниями, скорее всего наставника у вас не будет. А также придётся сидеть с низким уровнем экспертизы и оплаты труда. Но именно в таких компаниях чаще всего будут заказывать пентест на самые «дырявые» и интересные с точки зрения анализа приложения.
Куда двигаться — выбор за вами, я для себя выбрал первый вариант. Но у меня есть как минимум несколько знакомых, которые пошли по 2 пути и сейчас имеют хороший уровень.
Материал для подготовки:
Как и обещал, составляю список того, что обязательно поможет (обязательно поможет) в подготовке для вашей первой работы. Материалы старался подбирать преимущественно бесплатные, чтобы у всех была возможность учиться.
Если совсем нет азов в области анализа защищенности (например, не было пар в вузе на эту тему или вы не обучались по специальности), то рекомендую, пройти любой платный базовый курс по пентесту. Честно говоря, хорошие курсы (CEH, например) весьма дорогие, а из более бюджетного сегмента я не знаю хороших.
Прилагаю подборку некоторых курсов, посмотрите, что вам будет интересно. Посмотрите какой-нибудь наиболее близкий вам курс, так у вас появится фундамент, на который в последствии будут наслаиваться знания. Главное понимать, что курс даст лишь первичное понимание сферы, а не сделает из вас уже готовых специалистов, как это часто позиционируют разработчики курсов.
Изучение уязвимостей и их эксплуатации:
PortSwigger Web Academy — крутая академия для веб-пентестеров, включает весьма неплохой пул уязвимостей с объяснением, а также с лабами для тренировки. Для меня во время подготовки это был ключевой ресурс. Если не смотреть в «райтапы», а стараться погрузиться в каждую уязвимость, то обязательно очень сильно прокачает. Единственный минус, иногда встречаются ну очень замудренные чейны, которые на проектах никогда не встретить, но шанс знатно «подгореть».
Root.me — хороший ресурс для изучение уязвимостей. Но минус, опять же, в том, что концепция лаб далека от реальных проектов. Стоит использовать в подкрепление к Portswigger и решать лабы по изученным темам. Слишком погружаться не стоит, поскольку все лабы, начиная с уровня сложности «сложно», вообще не для начинающих…
Hacktricks — энциклопедия пентестера. Сборник пейлоадов для эксплуатации огромного спектра уязвимостей.
PayloadAllTheThings — ещё один гиганский сборник пейлоадов, однозначно будет полезен.
Приложения, которые стоит поковырять (WebGoat, DVWA, VWA)
Уязвимые «project-like» приложения:
Обязательно советую пораскатывать себе подобные приложения и порешать, представляя, что вы на проекте и проводите анализ защищенности данного приложения.
OWASP Juice Shop — уязвимый магазин от OWASP.
DVGA — уязвимая прила с graphql.
Generic University — очень хорошее приложение с точки зрения поиска уязвимостей в API.
VAPI — ещё немного уязвимого API.
Архитектура веб-приложений:
Это — очень хороший видос про архитектуру веб-приложений.
Это — немного сложная, с точки зрения терминологии, статья, но в закрепление к видео будет очень полезно. Плюс в ней расписываются различные технологии и фреймворки, которые применяются в современных веб-приложениях.
Умение писать/читать код:
Если совсем нет навыков программирования, но есть очень большое желание научиться, то можно начать с бесплатных курсов по C++(не рофл), а позже перейти на Python.
Есть платная альтернатива, но это уже на ваше усмотрение, но я сам этот курс не смотрел и не могу быть уверен в необходимости.
Я считаю, что Python — самый подходящий язык для веб-оффенсива, поскольку он довольно быстрый в плане написания кода, что позволяет экономить время на проектах. Также важно, что Python интерпретируемый и не требует создания проекта, как например тот же Golang. Но в любом случае вы вольны выбирать.
Принципы сетевого взаимодействия / Принцип работы протоколов HTTP/HTTPS:
Это — довольно простой и понятный курс, который всеобъемлюще описывает веб-приложение. Если есть пробелы в понимании взаимодействия с веб-приложением, то очень советую.
База по ИБ:
Сюда просто приведу всё, что я когда-либо смотрел и считаю полезным для того, чтобы освежить знания и закрыть пробелы.
Курс по БД
Базированная книга по ИБ
JavaScript для пентестеров
Крутой курс по администрированию OC Linux
Хороший курс по сетям — не советую сильно углубляться в конфигурацию промежуточных устройств, если не изучали сети до этого. В любом случае стоит разобраться в Packet Tracer, особенно в режиме Simulation, поскольку в нём возможно посмотреть, как перемещаются пакеты по сети. Также можно просмотреть содержимое пакета, например, «раскатать на серваке вебчик», и посмотреть, как происходит обращение клиента к серверу веб-приложения.
Полезные «тулзы»:
Привожу список инструментов, которые мне кажутся наиболее полезными. Но вы должны понимать, что существует огромное количество различных вариантов для выполнения тех или иных задач, и каждый пользуется тем, что считает удобным.
Burp Suite — фундаментальное средство для проведения анализа веб-приложений, также отлично работает как анализатор HTTP/HTTPS- трафика. Аналоги есть, например OWASP ZAP, но по своему функционалу и расширяемости Burp очень сильно их превосходит.
Ffuf — прекрасное средство для фаззинга, атак методом грубой силы, эксплуатации race condition. Аналоги — WFuzz, GoBuster.
x8 — инструмент для обнаружение скрытых параметров в веб-формах. Хороший аналог ParamMiner, является расширением для Burp Suite.
SqlMap — автоматизация поиска SQLi, предустановлен в kali.
Burp Active Scan — является компонентом Burp Suite Professional, наверное лучший сканер для поиска уязвимостей в веб-приложениях.
В случае «ступора» на этапе поиска уязвимостей можно пробовать применять Acunetix или Nessus.
На просторах интернета встретил вот такую статью от коллег из Digital Security по этой теме, рекомендую посмотреть.
В общем и целом…
Не опускайте руки
Старайтесь полностью погрузиться в то, что изучаете
Изучайте все планомерно
Активно пользуйтесь гуглом и ищите информацию по всем непонятным моментам
Когда для себя поймете, что готовы искать работу, не бойтесь ходить на собеседования.
Счастья, здоровья, удачи, да прибудет с вами web offensive =)