Правила хорошего пентестера, или «Я никогда не»
Тестирование на проникновение — профессия серьезная, правила в ней основаны на горьком опыте, но вы все равно можете повеселиться, изучая их. Сегодня поделюсь советами, которые помогут стать хорошим пентестером и избежать неприятностей. А заодно расскажу несколько баек о том, в какие абсурдные ситуации можно попасть, нарушая эти правила. Так что устраивайтесь поудобнее, открывайте этот гайд, а по прочтении — делитесь своими историями в комментариях.
Советы для всех пентестеров
Не забывайте о профессиональной этике
И киберпреступники, и пентестеры постоянно что-то ломают. Но есть нюансы: пентестер делает в рамках закона; киберпреступник — вопреки всем правилам. Еще одно принципиальное различие — профессиональная этика. Чужая инфраструктура — не игровая площадка, и пентестер не может делать все, что ему вздумается. Помните, что ваша основная задача заключается в том, чтобы помочь клиенту, и действуйте соответствующе.
Не взламывайте все подряд
Иногда пентестерам хочется проявить немного креативности. Скажем, вам поручают тест на физическое проникновение в офис и говорят, что вы можете попробовать забрать что-нибудь, например, рабочие ноутбуки. Главное, потом вернуть все на место.
А на следующий день ребята из вашей команды выкатывают из офиса шредер для конфиденциальных документов размером с небольшой холодильник и оставляют во дворе перед окном директора по безопасности. А когда он выглядывает в окно, объясняют: «Вы же сказали, что мы можем брать все».
Так вот, троллинг не входит в поверхность атаки.Да, вам платят за нарушение многих общепринятых правил, но не забывайте, что есть определенный скоуп пентеста. В него входят виды тестов, которые разрешено проводить; согласованные временные окна; системы или активы, которые подлежат исключению из области тестирования, и просто пределы разумного.
Не забывайте проверять IP и прочую информацию от заказчика
Мы все ошибались, бывает. Ставишь точку не в том месте, и что-то идет не так. Проверяйте IP-адреса перед началом тестирования, проверяйте во время тестирования, проверяйте в отчетах. Чтобы не запутаться, лучше составить отдельный список целей и сверяться с ним время от времени. В худшем случае вы быстро поймете, что ошиблись.
Я слышал историю о том, как пентестеры получили от заказчика неверный диапазон IP-адресов. Судя по всему, фирма, которую они взломали, оказалась очень похожа на компанию заказчика. Пентестеры узнали о своей ошибке, только когда написали и отправили отчет…
Сотрудники заказчика тоже не безгрешны и вполне могут ошибиться, так что по большому счету это правило распространяется на всю информацию о целях пентеста, полученную от заказчика.
Не выкачивайте все подряд
У некоторых начинающих пентестеров есть привычка — скачивать все, до чего они смогут дотянуться: не просто взять файл с паролями, а стянуть файловый сервер целиком. Авось пригодится. Так делать нельзя, ведь там может быть все что угодно.
Предположим, пентестер слил с рабочей станции пользователя «Administrator», каталог в котором помимо прочего лежат файлы лицензий на Exchange. Теперь он не просто пентестер, он пират. Можно заводить попугая, так как фактически это кража лицензии. Потом поди объясни, зачем она ему понадобилась.
Папки профилей в этом плане еще опаснее. Там могут лежать документы: копии паспортов, свидетельства о рождении, водительские права и так далее. Все это — персональные данные, и скачивание их с сервера — это статья 272: неправомерный доступ к защищаемой информации. «Авось пригодится» здесь не прокатит.
Поэтому общее правило: у вас всегда должно быть объяснение, зачем потребовалось скачивать тот или иной файл и какую роль он играет в пентесте. Профессионалы избегают прямого доступа к конфиденциальным данным взломанной системы. Если нужно продемонстрировать возможность утечки, они делают это на примере тестовых учетных записей.
Не работайте за пределами рабочего времени
Если заказчик просит не работать в выходные или важные для бизнес-процессов часы — стоит к этому прислушаться. Серьезно.
Однажды один пентестер сканировал Nmap IP-адреса, которые выдал заказчик, и случайно вывел из строя четверть системы видеонаблюдения критической инфраструктуры. Оказалось, что в прошивке камер была никем не описанная ошибка, из-за которой они зависали при сканировании определенного порта. Некоторые вещи невозможно предугадать. Хорошо, что специалисты заказчика все быстро подняли.
А теперь представьте, что это случилось ночью или, еще хуже, в выходные. Вы не можете связаться с админами или безопасниками, потому что они спят или отдыхают. И кстати, убедитесь, что, если что-то случится, и вы спалите всю сеть компании, благодарный клиент сможет до вас дозвониться.
Не используйте эксплойты, не изучив их
«Я только что нашел целую кучу анонимных эксплойтов на GitHub. Надо их срочно попробовать!»
Иногда, правда, везет и в сети находится инструмент, который может помочь в пентесте, но не надо спешить. Сначала разберитесь, как он работает, что делает и что может натворить. Во-первых, это часть учебного процесса, а во-вторых, это поможет избежать нежелательных последствий.
Яркий пример — эксплойт для некогда популярной уязвимости Zerologon. С его помощью любой человек, подключившись к LAN и выполнив 3–4 команды, мог захватить домен-контроллер, даже не имея учетной записи. Эксплойт изменяет пароль хоста на «нулевой», но есть и маленький побочный эффект: при неправильном использовании эксплойта никто больше не может авторизоваться нарушается синхронизация и рушится весь домен.
Не забывайте предупреждать заказчика, прежде чем сделать нечто серьезное
Вы все прочитали про те эксплойты с GitHub, и они оказались очень крутыми. Адреналин зашкаливает, вы готовы к атаке. Если все получится — вы полноправный админ…, но сперва получите разрешение, прежде чем использовать эту гадость, хорошо?
Если не уверены в стабильности эксплойта, предупредите заказчика, чтобы специалисты с той стороны могли проследить за ситуацией, перезагрузить сервер и исправить неполадки, если они возникнут. А может быть, они просто скажут: «Мы ценим вашу помощь, но лучше не надо».
Не забывайте сохранять результаты работы и собирать доказательства
Пожалуй, самый важный пункт в этом списке. Ну или второй по важности после проверки IP-адресов.
Представьте: вы провели успешный пентест, взломали AD, скомпрометировали все, что можно, и вышли из сети заказчика победителем. На следующий день садитесь за отчет и понимаете, что не хватает каких-то данных. Вы пытаетесь вспомнить, что делали, но память подводит. Ищете записи, которые делали, но не находите их. Или вы отлучились куда-то прямо в процессе пентеста, и, пока вас не было, процесс завис, система вылетела, а прогресс был потерян.
Заказчику не понравится, если вы расскажете про уязвимость, но не покажете никаких подтверждений. Поэтому всегда сохраняйтесь перед тем, как делать что-то рискованное или ресурсоемкое. Собирайте улики: сохраняйте выдачу инструментов в файлы, ведите заметки и делайте скриншоты. И помните: вы должны суметь повторить все, что нашли.
Сохраняйте столько информации, чтобы через полгода суметь ответить на любой вопрос о ваших находках.
Я обычно пишу часть отчета в конце каждого рабочего дня. Хороший шаблон оформления можно посмотреть на Offensive Security. Да, так тесты занимают больше времени, но будущий вы и те люди, которые будут читать отчет, будут признательны за ваши усилия.
Не пренебрегайте защитой данных
Помните многочисленные новости о забытых в кафе секретных документах или опубликованных в Discord разведданных? Не повторяйте эти ошибки. Шифруйте виртуальные машины, компьютеры и носители информации так, чтобы в случае кражи или потери не подвергать клиента риску. Не отправляйте информацию об уязвимостях по незащищенным каналам, не используйте для ее хранения сторонние сервисы.
Слышали про заметочник Pastebin? Мы расследовали хакерскую атаку по целевым адресам. Делали OSINT и нашли общедоступную заметку со списком IP. Стали разбираться, и оказалось, что несколько лет назад ее сделал фрилансер, с которым тогда сотрудничала эта компания. Был большой скандал.
Правила внешнего пентеста
Не запускайте сканеры, не подумав
Если вы тестируете сайт и первым делом запускаете сканер уязвимостей, то рискуете создать уйму проблем. Особенно, если на страницах есть формы запросов на модификацию/добавление/удаление.
Еще одна ошибка — случайно натравить сканер на endpoint или форму комментирования. Так можно заспамить и даже замедлить весь сайт. Сканер может отправить тысячи запросов в службу поддержки и нарушить ее работу.
Поэтому, если тестируете продовую инфраструктуру, начните с исследования функционала сервиса, способов аутентификации, ручного тестирования. Выделяйте формы и эндпоинты подлежащие исключению из области сканирования. И конечно, настраивайте сканер под конкретное приложение, исключая лишние проверки и учитывая используемый стек технологий.
Не злоупотребляйте многопоточностью
Не каждый сайт выдерживает такую нагрузку, как сервисы Google или Яндекс, которым все, что слону дробина. Мы часто имеем дело с внутренними служебными ресурсами, которые работают без запаса мощности и не рассчитаны на внезапные перегрузки. Уронить их проще, чем кажется.
Не оставляйте следы эксплуатации
Да, это не критическая ошибка, но, во-первых, это некрасиво, а во-вторых, пентестеры не должны ухудшать пользовательский опыт. Если, например, оставить хранимые XSS в местах, куда заходят пользователи, то это повлияет на юзабилити. Убедившись, что уязвимость «стреляет», сделайте скриншот и удалите запись.
Правила внутреннего пентеста
Не подключайте уязвимые системы к сети клиента
Это здорово, что вы нашли нечто критически опасное, но будет немного неудобно, если окажется, что это дыра в вашей системе.
Допустим, вам дают некий диапазон адресов, и там оказывается ваш компьютер и ноутбуки ваших коллег. Вы изучаете сеть целый день, находите ряд уязвимостей, уже собираетесь домой и тут замечаете, что одна из уязвимых машин отключилась.
Вы идете к клиенту и говорите: «Привет! Я получил доступ к машине по этому адресу, а она не отвечает. Просто хочу убедиться, что она не упала». А они в ответ: «Это не наш IP». И тут вы понимаете, что это IP вашего коллеги, который просто закончил с тестированием чуть раньше.
В общем, убедитесь, что поддерживаете ПО в актуальном состоянии.
Не обновляйте софт прямо перед выездом на пентест
Может быть, дело в лени или, напротив, в уйме работы, но порой пентестеры выезжают к клиентам неподготовленными, например, с устаревшим Metasploit и думают что-то типа: «Обновлюсь на месте, чего уж там». Но вы же понимаете, что это рискованно.
В лучшем случае вы получите новые фичи и исправления багов. В худшем — новые баги и исправления фич. Поэтому следует подготовиться заранее, установить обновления за несколько дней до начала работы и проверить работоспособность инструментов перед выездом на объект.
И снова: не запускайте сканеры, не подумав
Правило то же, что и при внешних пентестах, но специфика другая. Если сканируете внутреннюю сеть на TCP-порты, не поленитесь подкрутить параметры своей утилиты. Все они позволяют задать группы хостов, скорость запросов и количество потоков.
Это важно, потому что стандартные настройки могут быть слишком агрессивными или неэффективными. Например, метрики для rate-лимитов, запросов в секунду у Nmap по умолчанию довольно высоки. Вряд ли вы положите всю сеть, но вполне можете спровоцировать реакцию систем защиты или получить от сканера неверные результаты.
Не перебирайте пароли учетных записей, не изучив политику
Прежде чем пытаться подобрать пароли к аккаунтам, узнайте парольную политику. Ничего не раздражает сильнее, чем массовая блокировка учеток во всем офисе. Это ночной кошмар доменного администратора и один из самых глупых факапов пентестера.
Не применяйте RCE и LPE эксплойты с низкой стабильностью на серверах
Один из таких эксплойтов — BlueKeep (CVE-2019–0708). Он позволяет выполнить удаленный код на системе без аутентификации, но только в 20% случаев. Использовать его — плохая идея, особенно, если это сервер базы данных, куда идет запись. Для атак на сервера лучше выбирать эксплойты со стабильностью не менее 80%.
Не забывайте (замести) убрать следы работы
Удаляйте свои инструменты и учетки после завершения работ, возвращайте все к исходным настройкам. Это не только профессиональная этика, но и здравый смысл, ведь иначе можно спровоцировать ложный инцидент.
Если занимаетесь еще и расследованиями, можете ничего не удалять. Пройдет время, вас позовут разобраться в подозрительной активности в сети компании, и вы найдете свои же следы. Идеальный бизнес-план. Так у вас всегда будет работа!
Но если серьезно, то не оставлять следов не так просто, как кажется. Когда в азарте пробираешься по сети заказчика, переходя с одного хоста на другой, легко что-то упустить. Особенно если параллельно идет несколько проектов.
Можно забыть, где создал временную учетку, кому отправил файл с полезной нагрузкой, которая открывает шелл, или на каком хосте отключил антивирус. А ведь, например, не защищенный антивирусом терминальный сервер запросто «поймает» шифровальщика.
Чтобы избежать таких инцидентов, стоит придерживаться простых правил:
Делать бэкапы всех изменений в процессе работы. Неважно, что это: продовые данные или настройки сетевого оборудования.
Возвращать все к исходным настройкам и удалять инструменты, как только они перестали быть нужны.
Замечу, что есть ситуации, когда не можешь полностью прибрать за собой. Например, если запросил сертификат на имя админа, но не можешь его удалить из центра сертификации. Для таких случаев есть специальный раздел в отчете о пентесте. Там перечисляются такие изменения и заказчику даются инструкции по возвращению инфраструктуры в исходное состояние.
Не стесняйтесь просить о помощи
И последнее, но не менее важное правило. Пентест — командная работа. Вы не можете знать и уметь все. У каждого пентестера свои сильные и слабые стороны, своя специализация. Так что порой стоит поделиться своими находками или проблемами с коллегами, чтобы получить совет.
Это не значит, что нужно спрашивать все подряд, как только возникают трудности. Вы должны уметь самостоятельно искать информацию, но также вы должны уметь признавать, что застряли или ошиблись. И тогда не стесняйтесь обратиться за помощью к опытным коллегам. В конечном счете это ускоряет профессиональный рост и помогает развиваться всей команде.
P.S.
Все описанные ситуации вымышлены, хотя и могли произойти в реальности. Любые совпадения случайны, а в каждой шутке есть доля шутки.