Как я сдавал OSCP
Мы с коллегами прошли курс OSCP и сдали экзамен. В этой статье я подробно расскажу, как всё проходит экзамен, какие подводные камни и стоит ли игра свеч вообще.
С чего всё началось
Мой коллега c4n два года назад сказал, что надо бы сдать OSCP и я согласился, но как это часто бывает с хорошими идеями, мы забили отложили эту хорошую идею.
Спустя год в нашей компании появилась возможность бесплатного обучения полезным вещам для сотрудников (увы, моё понимание полезно не совпадает с руководством и курсы сомелье мне все ещё отказываются оплатить). К славной затее сдать OSCP подтянулся @GolovnyaD, сказал, что наши отговорки про занятость так себе и что надо приступать.
И мы приступили.
Что мы знали о OSCP
Мы знали, что OSCP состоит, по сути, из 3 частей: теоретический материал (дальше я буду называть его пдфка), доступ к лаборатории с виртуальными машинами (дальше буду называть лаба) и экзамен.
Начало пути
Как оказалось, доступ к лабе можно приобрести на 30, 60 или 90 дней стоит это 999$, 1199$, 1349$. Так как мы не хотели посвящать всё свободное время только OSCP, а разница между 30 днями и 90 всего 350$), мы выбрали доступ на 90 дней.
9 октября 2019 года, я оплатил курс, ожидая получить веселье на 3 месяца, как же я ошибался, мне досталось веселье на 5 месяцев. И вот почему:
первая подстава: нельзя начать обучение завтра. В моём случае ближайшая дата для старта была 20 октября (как пишут на форумах среднее время до старта после оплаты — 2 недели).
Тогда же 9 октября прислали тестовый пакет (Connectivity Pack) для подключения к VPN. У меня судя по их тестам не было проблем с VPN-подключением (как оказалось потом тест у них так себе, расскажу дальше). Тогда же прислали ссылку на их сборку Kali (на вид ничем не отличается от обычной), которая специально подготовлена для прохождения.
Старт курса
Формально курс начался у меня в 3:00 ночи 20 октября, но письмо с материалами курса мне пришли в 03:09 (заметил эту нестыковку только сейчас, когда писал статью). В письме с материалами курса содержатся ссылки на:
- пдфку на 380 страниц
- видеоматериалы к этой пдфке
- VPN Connectivity Pack
И тут нас ждёт вторая подстава: ссылки на скачивание действительны 72 часа и если не успели скачать, то попросят дополнительные 100$, после чего они заботливо говорят сделайте бэкап и вставляют шуточку:»Remember the wise saying: «There are two types of people. Those who backup and those who have yet to lose everything to a system crash.»
Также на всех форумах рекомендуют начать прохождения курса с выполнения задач из пдфки. Мы все так и поступили.
Задачи из пдфки
Задачи из пдфки надо сделать чтобы узнать новые тулзы и техники, вспомнить как использовать тулзы и, возможно, получить 5 дополнительных балов на экзамене. Из удивительного: в пдфке нет ни слова про Burp Suite и PowerShell Empire (должны были добавить в обновлении от февраля).
Пдфка ведёт свое повествование с азов: нас учат гуглить, пользоваться nc.exe (netcat), tcpdump и wireshark и прочими тулзами, которые скорее относятся к системной инженерии, а не к безопасности. Только на 113 странице из 380 мы знакомимся с nmap!
Также нас учат пользоваться тулзами типа OpenVAS, которыми нельзя пользоваться на экзамене. Так же примеры часто используют meterpreter, который тоже запрещён (можно использовать только на одной машине). Я в целом так и не понял, чем обусловлен этот запрет на meterpreter как шел, понятно, что повышаться с его помощью можно запретить, но держать реверс шел с несколькими консолями было бы удобно.
Интересно становится со страницы 148, где начинается переполнение буфера, и тут я словил проблему с VPN-соединением. Как оказалось мой интернет — провайдер зарезает размер пакетов, а VPN в лабе строится по UDP и мои пакеты с переполнением буфера просто не пролезали и пропадали. Решение простое — поправить конфиг добавив строки:
tun-mtu 1492
mssfix 1370
Но очень жалко, что такие проверки не делаются организаторами OSCP, т.к. на их форуме многие жалуются. Я потерял на этом часов 5 и очень много нервов (дойдя до решения самостоятельно, потом я нашёл кучу веток на форуме про это).
Для того чтобы писать переполнения буфера и делать всякие эксперименты с windows, нам дают виртуальную машину внутри лабы, это довольно удобно. За весь курс я не поставил ни одной собственной виртуальной машины (один раз порывался поставить Windows XP SP2, но не нашёл рабочий торрент).
В целом задания на переполнения буфера очень хорошо прописаны (как для Windows, так и для Linux), было бы круто, чтобы именно так, по шагам, это преподавали в вузах. Курс OSCP заведомо говорит, что обход DEP и ASLR не входит в курс.
Дальше нам рассказывают, как готовить эксплойты, передавать файлы, рассказывают про повышение привилегий, но с этим ещё наиграемся в лабе, так что ничего страшного.
Дальше идёт блок, посвящённый атакам на пользователей (Client Side Attacks), где я словил проблему со «специально подготовленной» Kali машиной, на ней стояла более новая версия Java и мой Java Appet не работал на тестовой машине. Ещё часов 5 гугления и решение проблемы самостоятельно и, разумеется, на форуме есть тред и про это)
Вообще на форуме можно найти всё, это очень полезное место если вы встряли в тупик, но я это понял только под конец курса.
Дальше идут атаки на web — XSS, LFI, RFI, SQL-инъекции и другое. Написано понятно и хорошо, дают примеры потыкать. Рассказывают про sqlmap, который тоже нельзя использовать на экзамене, но, разумеется, полезно знать.
Дальше атаки на пароли (брут и получение хэшей для Windows и Linux), по мне очень растянуто, часть заданий я оставил на потом (и сделал их уже внутри лабы). В конце идёт рассказ про метасплойт и как его юзать, весьма подробно, с написанием собственного модуля. Также приводится пример взлома вымышленной компании, в котором используются многие описанные техники (занимает 34 страницы).
В целом из всей пдфки по делу страниц 100 (и там огромное количество скриншотов). На её прочтение и выполнение задач у меня ушло 2 недели (но я никуда не спешил).
Если у вас что-то не получается из курса пдфки, то на всё есть видеоматериалы, где все шаги показаны, это удобно.
Лаба
Решая лабу, было принято решение не использовать Metasploit и Meterpreter, т.к. их нельзя (можно только один раз) использовать на экзамене.
Лаба состоит примерно из 60 виртуальных машин, все машины разбиты на 4 подсети (публичная сеть, сеть девелоперов, сеть айти департамента, сеть администраторов). Изначально доступ есть только в публичную сеть (на самом деле доступ есть во все сети, просто мы не можем ревертить машины из не публичной сети). В лабе (пишу про события до февральского обновления) все машины довольно старые, самая свежая Windows — Windows server 2012R2 (довольно много Windows XP), Linux машины это Ubuntu 14 (в лабе встречались и Ubuntu 8), Centos 7 (встречался и Centos 5).
В теории, вся лаба должна решаться, используя уязвимости опубликованные до 2016 года, но я себе таких ограничений не ставил.
Лаба (не привилегированный шел доступ)
В целом лаба хорошо соответствует тому, что было изложено в пдфке. В плане получения непривилегированного доступа, надо использовать различные техники (включая атаки на клиентов), собирать пароли со сломанных машин и их использовать повторно, запускать бруты и так далее. Наверное, хуже всего раскрыта тема SQL-инъекций и blind-инъекций — они не встречались ни разу.
Алгоритм получения доступа инициализирующего шела везде как в жизни:
- енумерация (Enumeration) портов и сервисов
- брут директорий для веба
- определение продуктов и версий
- поиск и модификация эксплойта
Пара машин требует написание собственных эксплойтов blackbox-ом, но ничего сложного — LFI/RFI. Больше всего меня радовало, что почти отсутствуют машины из разряда CTF, где есть картинка, внутри которой спрятана ещё картинка, внутри которой спрятан zip-архив и так далее.
Лаба (повышение привилегий)
Для меня это была самая интересная часть и она отнимала у меня большую часть времени (по началу).
Windows
Для windows машин я пользовался вот этим наборам сплойтов
Но на некоторых Windows машинах специально пропатчены все уязвимости «ядра» и приходилось придумывать, как подняться. Тут есть машины на любой вкус, сервисы, автозагрузки, шедулед таски, установленное ПО. Установленное ПО — это конечно большой провал, т.к. очевидно, что тачки подготовлены и если на системе установлено всего одно приложение, то через него можно подняться.
Linux
Для Linux тут, конечно, можно всегда использовать уязвимости ядра, любимый всеми dirty cow работает на половине машин, я использовал вот эту версию, оно хоть и зависает почти на всех машинах в лабе, но пользователя с доступом по ssh успешно создаёт.
Но почти везде можно подняться через уязвимости в конфигурации, тут помогает LinEnum, а для ленивых linux-smart-enumeration
Вообще злоупотреблять уязвимостями ядра в лабе не стоит, если вы хотите подготовиться к экзамену, то лучше использовать уязвимости конфигураций, т.к. все машины на экзамене будут со свежими ядрами и установленными апдейтами (по крайне мере мне достались такие).
Постэксплотация в лабе
Часть постэксплотации я оставил на потом, но вообще собрав все пароли и просмотрев все базы данных, файлы конфигураций и логов, вы сможете легко получить доступ ко многим машинам (особенно в непаблик сети).
Многие машины ломаются по цепочке, это важно понимать, особенно для атак на клиентов, если тачка называется mail, то возможно к ней кто-то будет цепляться почтовым клиентом), а если HELPDESK, то заходить на открытые тикеты.
Большая четвёрка
В лабе есть 4 машины, которые считаются самыми сложными и некоторые рекомендуют оставить их на конец, это: Pain, Sufferance, Gh0st and Humble. Я знал про их наличие с самого начала, но специально от них не сбегал или их не искал. К моменту, когда я решил вернуться к ним две из четырёх мной уже было сломано.
Моё впечатление от них:
- Pain — крутая тачка, сложная как и в получении инициализирующего шела, так и в повышении.
- Sufferance — сложный инициализирующий шел, в несколько этапов, что-то похожее мне досталось на экзамене. Простое повышение.
- Gh0st — начало и инициализирующий шел как на CTF машинах, но одно из самых красивых повышений во всей лабе.
- Humble — возможно самый сложный инициализирующий шел в лабе, но простое повышение.
В целом это крутые тачки, и я почти уверен, что если вы сломали их в лабе, то вы сдадите экзамен без проблем, один Humble я ломал дольше, чем сдавал экзамен.
В мой топ ещё бы вошли:
- Sherlock — пруф получается за пару минут, а над получением реверса можно долго посидеть.
- beta — очень жизненная машина как и в получении первичного доступа, так и повышения (ограниченный bash).
Итоги лабы
В целом лаба произвела хорошее впечатление, я сломал все машины, за которые брался (около 45 машин).
В целом вспомнилось много вещей, которыми не так часто приходится пользоваться.
Подготовка к экзамену
За несколько дней до окончания доступа к лабе, я решил, что пора записаться на экзамен. Тут я был не прав, лучше это сделать заранее. Ближайшая дата в выходной день была только через месяц на 23 февраля (и то на 9 утра).
Вывод и подстава три — если хотите сдавать экзамен в удобное время и на выходных записывайтесь заранее.
Так же я начал писать отчёт по лабе (надо описать 10 машин, если хотите получить 5 дополнительных балов), стандартный пример отчёта слишком заумен, поэтому я стал использовать вот этот. Для подробного описания я выбирал или интересные машины или случаи, где сразу получаешь рута.
Мне понадобилось сделать 10–15 дополнительных скриншотов, поэтому я рекомендую иметь доступ к лабе во время написания этого отчёта.
Подготовка к экзамену. Тренировка. Бинарщина
В экзамене одна из составных частей — это написание эксплойта на переполнение буфера, она даёт 25 балов, и, не умея это делать быстро и хорошо, идти на экзамен особо не имеет смысла, стоит набить руку.
Добрые люди уже собрали набор ПО, на которых можно потренироваться.
Я решил штук 7, и если на первую я потратил 2 часа времени, то седьмую я решил за 20 минут, по сути, со скоростью написания кода и ввода команд. Алгоритм, который меня не подводил:
- фазим на падение буквами A (на экзамене этот шаг уже будет сделан за нас)
- ищем офсет, стандартно через pattern_create.rb и pattern_offset.rb
- проверяем длину, стандартно меняем A на B в нужном месте, а после B вставляем много C, чтобы посмотреть возможный размер полезной нагрузки без прыжков внутрь наш0его буфера
- проверяем плохие символы (я сразу отрезаю \x00, так как он будет плохим в 99% случаев)
- ищем «jmp esp» (самый сложный шаг, и техники могут быть разными)
- проверяем валидность найденного адреса, через брекпоинт в отладчике
- генерим пейлоад с реверс шелом (в начало добавляем 20 нопов — \x90)
- профит
Подготовка к экзамену. Тренировка. Сервисы
В одном из врайтапов по процедуре экзамена я нашёл вот такую картинку:
На этой картинке показаны какие машины на hackthebox.eu похоже на тачки с экзамена (тачка brainfuck вообще не похожа, на ней рекомендую не тренить). Для активации тачек требуется платная подписка (10 баксов за месяц, сразу не забудьте её отменить).
Я потратил 8 часов и решил 10 машин, чередуя Windows и Linux. И решил, что с меня хватит, но, наверное, тут, как и с переполнением буфера надо доводить до автоматизма. Эти машины проще чем машины на экзамене, по крайне мере в плане повышения привилегий (некоторые копии машин из лабы, не знаю, кто у кого позаимствовал).
Подготовка к экзамену. Тренировка. Повышение привилегий
Можно тренить на тех же машинах с hackthebox.eu, но в целом будет достаточно почитать врайтапы, чтобы понимать, какие техники есть, там есть примеры на все техники, которые вам могут пригодиться на экзамене.
Подготовка к экзамену. Организационная часть
Для сдачи экзамена потребуется:
- заграничный паспорт (ваше имя и фамилия должны быть написаны на английском)
- веб-камера
- стабильный интернет
Хорошо иметь дополнительно:
- запасной интернет (я использовал мобильный)
- запасной компьютер (у меня рядом лежал запасной ноут полностью настроенный на сдачу экзамена)
- снепшот ВМ с Kali
- копия ВМ с Kali (я положил одну копию на жесткий диск, вторую — на внешний жесткий диск)
Экзамен!
Экзамен считается очным (Proctored Exam) поэтому он начинается за 15 минут до выбранного времени. Вы подключаетесь к специальной веб-платформе, шарите свои экраны, в текстовом чате вам начинают задавать задачи и вопросы:
- показать паспорт по веб-камере
- показать, что в комнате никого нет
- выдать результаты тестового скрипта для подключения
Тут у меня случился фейл и при попытке скопировать новый конекшен пак на виртуалку с Kali, она упала. Я был готов к этому, откатил виртуалку, скопировал пак, запустил и начал ждать 9 утра.
Доступ я получил в 9:01.
У меня был простой план действий:
- запустить инумерацию сервисов
- сделать тачку на переполнение буфера за 1 час
- сделать тачку на 10 баллов за 1 час
- сделать первую тачку на 20 баллов за 2 часа
- сделать вторую тачку на 20 баллов за 2 часа
- сделать тачку на 25 баллов за 3 часа
Как видно по моему плану мне требовалось 9 часов на прохождения экзамена, но всё пошло не по плану с самого начала :) я забыл учесть важный тормозящий фактор — записывать по шагам всё что сделано со всеми скриншотами для отчета.
Итоговый результат у меня получился следующий:
- переполнение буфера — 2.5 часа. Час потерял, т.к. не заметил пару плохих символов, ещё 30 минут на отчёты
- тачка за 10 — 30 минут: 10 минут взлом, 20 минут скрины
- первая тачка за 20 — 2.5 часа: 1.5 часа взлом, 40 минут скрины и отчёт, 20 минут перерыв
- вторая тачка за 20 — 2 часа: 1.5 часа взлом, 30 минут скрины и отчёт.
- тачка за 25 — 3.5 часа: 3 часа взлом (с двумя перерывами), 30 минут скрины и отчёт
В целом экзамен куда интереснее лабы, уязвимости все достаточно свежие — 2018–2019 год. Повышения везде не через уязвимости ядра.
Дольше всего я сидел, ожидая повышения привилегий, все непривилегированные шелы были получены за 10–30 минут.
В экзамене сделано множество ложных путей, которые не приведут к успеху. Если для инициализирующего шела всё легко отбрасывается (например, эксплойт для переполнения буфера на Winodws XP SP2, хотя сам сервис запущен на Windows 10), то в повышении я пару раз погряз в этих ложных путях. Тут главное вовремя сказать себе, что этот вектор стоит изменить и выбрать новый.
Спустя 11 часов я закончил экзамен, сломав всё и отправился выпить пару пинт пива (всего пару, так как на следующий день надо ещё написать формальный красивый отчёт).
Написание и отправка отчёта
Взял шаблон с того же репозитория где и шаблон по лабам и заполнил его часа за 4.
Дальше началось веселье с тем куда это отправлять и как. Сначала это надо зашифровать, используя 7z с паролем, пароль не случайный, а ваш айдишник в системе (5 цифр, брутится за 0.3 секунды на CPU). Дальше я долго искал информацию куда вкладывать отчёт по лабе в тот же архив или в другой (Ответ: надо вкладывать в тот же архив). Дальше я напоролся на то, что формат задания пароля в архиве 7z, флаг -p, после которого пароль надо писать слитно, т.е. примерно так -pPassword. На самом деле все шаги описаны в гайде, просто их надо уметь искать.
Полученный архив надо загрузить на сайт, получить ссылку и эту ссылку отправить на специальную почту! Зачем такие сложности в 2020 году, для меня загадка.
Спустя пару часов, вы получите ответное письмо, что: «Мы получили вашу ссылку, но не проверили, что там нормальный архив, что он расшифровывается и что в нём нужные данные. И о том, что результаты экзамена мы сообщим в течении 10 рабочих дней».
Итог
Спустя ровно неделю после экзамена, в воскресенье 1 марта я получил радостное письмо, что я составил архив правильно:
После этого я заполнил данные для отправки мне физического сертификата и карточки OSCP-сертификации.
Кому нужна это сертификация
У меня получился вот такой список (отсортированный по осмысленности получения и требования этого сертификата):
- студенты 4–5 курса. Для них это прям очень крутая практика.
- тем, кто решил перейти в безопасность из смежных отраслей. Все описывается на хорошем уровне, куча примеров, есть чему научиться.
- работодатель. Сертификат показывает, что человек что-то знает и что-то умеет делать руками (в наших вакансиях мы указываем это как плюс).
- людям в отрасли, которым хочется освежить/протестировать свои знания
- опытные пентестеры. Возможно, красивая корочка позволит им стать более интересными для работодателей.
Дальше в планах сдать OSWE (Offensive Security Web Expert). Как по мне, он интереснее, чем OSCE (Offensive Security Certified Expert). А для тех, кому интересно почитать про различные виды сертификации в области ИБ, мы написали отдельную статью.