Тестирование на проникновение – это процесс выявления уязвимостей безопасности в приложении. Проводится путем проверки системы с использованием различных вредоносных методов. В этом процессе выявляются слабые места ПО посредством санкционированной имитации атаки.
Цель тестирования на проникновение – защитить важные данные от злоумышленников, которые могут получить доступ к системе. При обнаружении уязвимости её используют для эксплуатации системы, чтобы получить доступ к важной информации.
Тест на проникновение также известен как пентест, а тестировщиков называют этичными хакерами или пентестерами.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туторилов, задач по автоматизации и книг по QA.
Содержание
- Что такое тестирование на проникновение?
- Причины уязвимости
- Зачем нужно тестирование на проникновение?
- Что должно быть проверено?
- Типы тестирования на проникновение
- Техники пен-тестирования
- Примеры тест-кейсов для тестирования на проникновение
- Заключение
Что такое тестирование на проникновение?
С помощью тестирования на проникновение мы можем выявить слабые места компьютерной системы, веб-приложения или сети.
Этот вид тестирования показывает, достаточно ли эффективны существующие защитные меры, используемые в системе, чтобы предотвратить любые нарушения безопасности. В отчетах, которые составляются после тестирования, также прописываются контрмеры, которые можно предпринять для снижения риска взлома системы.
Причины уязвимости
- Ошибки проектирования и разработки. В конструкции ПО иногда встречаются ошибки, например, в дизайне. Они могут подвергнуть риску важные для бизнеса данные.
- Неудачная конфигурация системы. еще одна распространенная причина уязвимости. Если система плохо настроена, в ней могут появиться лазейки, через которые злоумышленники могут получить доступ к важной информации.
- Человеческие ошибки. Человеческий фактор – неправильная утилизация документов, оставление документов без присмотра, ошибки кодирования, внутренние угрозы, обмен паролями на фишинговых сайтах и т.д. может привести к нарушениям безопасности.
- Подключение. Если система подключена к незащищенной сети (открытые соединения), она может быть доступна для хакеров.
- Сложность. Уязвимость безопасности возрастает пропорционально сложности системы. Чем больше функций в системе, тем больше шансов, что она будет подвергнута хакерской атаке.
- Пароль. Пароли используются для предотвращения несанкционированного доступа. Они должны быть достаточно сложными, чтобы никто не мог их угадать. Пароли нельзя передавать кому-либо, их следует периодически менять. Несмотря на эти инструкции, порой люди сообщают свои пароли другим, записывают их где-нибудь или делают их слишком легкими.
- Пользовательский ввод. Вы наверняка слышали об SQL-инъекциях, переполнениях буфера и т.д. Данные, полученные электронным способом в таком виде, могут быть использованы для взлома системы.
- Управление. Управлять безопасностью сложно и дорого. Иногда организациям не хватает надлежащего управления рисками, что приводит к появлению уязвимостей в системе.
- Дефицит знаний. Отсутствие должной подготовки и необходимых знаний по вопросам безопасности у персонала организации.
- Коммуникация. Такие каналы, как мобильные сети, интернет, телефон, открывают возможности для кражи средств защиты.
Зачем нужно тестирование на проникновение?
Вы определенно слышали об атаке программы-вымогателя WannaCry, которая случилась в мае 2017 года. Она заблокировала более 2 миллионов компьютеров по всему миру и потребовала выкуп в криптовалюте Bitcoin. Эта атака затронула многие крупные организации с различных стран.
В связи с такими масштабными и опасными кибератаками, происходящими в наше время, стало неизбежным регулярно проводить тестирование на проникновение, чтобы защитить информационные системы от нарушений безопасности.
Почему необходимо тестирование на проникновение:
- Финансовые или другие важные данные должны быть защищены при передаче их между различными системами или по сети.
- Многие клиенты просят проводить пентесты в рамках выпуска программного обеспечения.
- Защита пользовательских данных.
- Поиск уязвимостей безопасности в приложении.
- Поиск лазеек, через которые можно проникнуть в систему.
- Оценка влияния атак на бизнес.
- Для соответствия требованиям информационной безопасности в организации.
- Для реализации эффективной стратегии безопасности.
Любой организации необходимо выявлять проблемы безопасности, присутствующие во внутренней сети и компьютерах. Владея этой информацией, можно спланировать защиту от любых попыток взлома. Конфиденциальность пользователей и безопасность данных – самые большие проблемы в наше время.
Представьте, если хакер сможет получить данные пользователя социальной сети, например, Facebook. Организация столкнется с серьезными юридическими проблемами из-за небольшой лазейки, оставленной в программной системе. Поэтому крупные организации сначала получают сертификаты соответствия стандарту PCI (Payment Card Industry), прежде чем начинать сотрудничество со сторонними клиентами.
Что должно быть проверено?
- Программное обеспечение (операционные системы, сервисы, приложения)
- Аппаратное обеспечение
- Сеть
- Процессы
- Поведение конечного пользователя
Типы тестирования на проникновение
1. Тест на социальную инженерию. В этом тесте предпринимаются попытки заставить человека раскрыть конфиденциальную информацию, такую как пароли, важные данные и т.д. Такие тесты чаще всего проводятся по телефону или через Интернет и направлены на службы поддержки, сотрудников и процессы.
Человеческие ошибки – наиболее частая причина уязвимости системы безопасности. Стандарты и политики безопасности должны соблюдаться всеми сотрудниками, во избежание попыток проникновения с помощью социальной инженерии. Примером таких стандартов является запрет на упоминание какой-либо конфиденциальной информации по электронной почте или при телефонном общении. Для выявления и устранения недостатков процесса многие организации проводят аудиты безопасности.
2. Тестирование веб-приложений. Используя программные методы, можно определить наличие слабых мест в системе. Они проверяют уязвимость веб-приложений и программ, размещенных в целевой среде.
3. Физический тест на проникновение. Для защиты конфиденциальных данных применяются серьезные методы физической безопасности. Этот метод обычно используется в военных и правительственных учреждениях. Все физические сетевые устройства и точки доступа проверяются на возможность взлома. Этот тест не относится к сфере тестирования программного обеспечения.
4. Проверка сетевых служб. Один из наиболее часто проводимых тестов на проникновение, в ходе которого определяют пробелы в сети, через которые осуществляется вход в системы для проверки наличия уязвимостей.
5. Тест на стороне клиента. Направлен на поиск и использование уязвимостей в программах на стороне клиента.
6. Удаленный дозвон. Поиск модемов в окружении и попытка войти в системы, подключенные через эти модемы, путем подбора пароля или перебора.
7. Тест беспроводной безопасности. Обнаруживает открытые, несанкционированные и небезопасные точки доступа или сети Wi-Fi и подключается через них.
Применяемые методы
Тестирование на проникновение может проводиться тремя методами:
- “Черный ящик”. Тестировщик оценивает систему, сеть или процесс без детальных знаний о них. Предоставляется очень высокий уровень входных данных, таких как URL или название компании, с помощью которых можно проникнуть в целевую среду. В этом методе не затрагивается программный код.
- “Белый ящик”. Тестировщик получает полную информацию о целевой среде – системы, сеть, ОС, IP-адрес, исходный код, схему и т. д. Он изучает код и находит ошибки проектирования и разработки. Происходит имитация атаки на внутреннюю безопасность.
- “Серый ящик”. Тестировщик располагает ограниченными сведениями о целевой среде для воспроизведения имитации атак на внешнюю безопасность системы.
Техники тестирования на проникновение
- Ручное тестирование
- Автоматизированное
- Комбинация как ручного, так и автоматизированного процессов.
Третий вариант является наиболее распространенным для выявления всех видов уязвимостей.
Ручное тестирование на проникновение
Трудно обнаружить все уязвимости с помощью автоматизированных инструментов. Некоторые из них можно выявить только с помощью ручного исследования. Иногда тестировщики разрабатывают более эффективные сценарии атаки на приложения, основываясь на своих навыках и знаниях о системе.
Такие методы, как социальная инженерия, выполняются только людьми. Ручные проверки также включают в себя проверку дизайна, бизнес-логики и программного кода.
Процесс тестирования на проникновение
Рассмотрим фактический сценарий, которому следуют специалисты по тестированию на проникновение. Первым важным шагом в этом процессе является выявление уязвимостей, имеющихся в системе. После этого принимаются меры по их устранению. Одни и те же тесты на проникновение повторяются до тех пор, пока система не получит отрицательный ответ на каждый их них.
Мы можем разделить этот процесс на следующие этапы:
1. Сбор данных. Для получения данных о целевой системе используются различные методы, в том числе и поиск в Google. Можно также использовать технику анализа исходного кода веб-страниц, чтобы получить больше информации о системе, версиях программного обеспечения и плагинов.
На рынке есть много бесплатных инструментов и сервисов, которые могут предоставить информацию о названиях баз данных или таблиц, версиях БД и ПО, оборудовании и различных сторонних плагинах, используемых в целевой системе.
2. Оценка уязвимости. На основе данных, собранных на первом этапе, можно найти слабые места в безопасности целевой системы. Это помогает QA инженерам проводить атаки, используя обнаруженные точки входа в систему.
3. Фактическая эксплуатация. Очень важный этап, который требует специальных навыков для запуска атаки на целевую систему. Осуществляется только опытными тестировщиками.
4. Анализ результатов и подготовка отчета. После завершения тестов на проникновение составляются подробные отчеты для принятия корректирующих действий. В этих отчетах перечисляются все выявленные уязвимости и рекомендуемые методы их устранения.
Примеры тест-кейсов для тестирования на проникновение
Не забывайте, это нефункциональное тестирование. Основная цель тестов на проникновение – найти бреши в системе безопасности.
Ниже приведены типовые тест-кейсы, которые не обязательно применять ко всем приложениям.
- Проверьте, способно ли веб-приложение идентифицировать спам-атаки на контактные формы, используемые на сайте.
- Проверьте, контролируется ли сетевой трафик прокси-устройствами. Прокси-сервер затрудняет получение внутренних данных сети хакерами, тем самым защищая систему от внешних атак.
- Проверьте, фильтруется ли входящий и исходящий почтовый трафик и блокируются ли нежелательные письма.
- Многие почтовые клиенты поставляются с уже встроенными фильтрами спама, которые настраиваются в соответствии с потребностями конкретной организации. Правила настройки могут применяться к заголовкам, теме или телу письма.
- Убедитесь, что вся сеть или компьютер защищены брандмауэрами. Это может быть программное или аппаратное обеспечением, которое блокирует несанкционированный доступ к системе. Брандмауэры помогут предотвратить отправку данных за пределы сети без вашего разрешения.
- Попробуйте использовать все серверы, настольные системы, принтеры и сетевые устройства.
- Убедитесь, что все имена пользователей и пароли зашифрованы и передаются по безопасным соединениям типа https.
- Проверьте информацию, хранящуюся в файлах cookie сайта. Она не должна быть в удобочитаемом формате.
- Перепроверьте ранее найденные уязвимости и убедитесь, что они исправлены.
- Проверьте, нет ли в сети открытых портов.
- Проверьте все телефонные устройства.
- Проверьте безопасность сети WiFi.
- Проверьте все методы HTTP. Методы PUT и Delete не должны быть включены на веб-сервере.
- Проверьте, соответствует ли пароль требуемым стандартам. Он должен состоять не менее чем из 8 символов, содержать хотя бы одну цифру и один специальный символ.
- Имя пользователя не должно быть “admin” или “administrator”.
- Страница входа в приложение должна блокироваться после нескольких неудачных попыток входа.
- Сообщения об ошибках должны быть общими и не должны содержать конкретные детали, такие как “Неверное имя пользователя” или “Неверный пароль”.
- Убедитесь, что специальные символы, теги HTML и скрипты правильно обрабатываются в качестве входных данных.
- Внутренние детали системы не должны раскрываться ни в одном из сообщений об ошибках или предупреждений.
- В случае сбоя веб-страницы конечным пользователям должны отображаться общие пользовательские сообщения об ошибках.
- Проверьте использование записей реестра. Конфиденциальная информация не следует хранить в реестре.
- Все файлы должны быть просканированы перед загрузкой на сервер.
- Конфиденциальные данные не должны передаваться через URL-адреса при обмене данных с различными внутренними модулями веб-приложения.
- В системе не должно быть жестко закодированного имени пользователя или пароля.
- Проверьте все поля ввода с длинными строками ввода с пробелами и без них.
- Убедитесь, что функция сброса пароля защищена.
- Проверьте приложение на SQL-инъекцию.
- Проверьте приложение на межсайтовый скриптинг.
- Важная проверка ввода должна выполняться на стороне сервера вместо проверки JavaScript на стороне клиента.
- Критически важные ресурсы системы должны быть доступны только уполномоченным лицам и службам.
- Все журналы доступа должны вестись с соответствующими разрешениями на доступ.
- Убедитесь, что сеанс пользователя завершается при выходе из системы.
- Убедитесь, что просмотр каталогов на сервере отключен.
- Убедитесь, что все приложения и базы данных имеют актуальные версии.
- Проверьте манипуляции с URL-адресами, чтобы убедиться, что веб-приложение не показывает нежелательную информацию.
- Проверьте утечку памяти и переполнение буфера обмена.
- Проверьте, сканируется ли входящий сетевой трафик на предмет обнаружения троянов.
- Проверьте, защищена ли система от Brute-force атак – метод взлома путем подбора данных учетной записи для поиска конфиденциальной информации.
- Проверьте, защищена ли система или сеть от DoS-атак. Хакеры могут атаковать сеть или отдельный компьютер непрерывными запросами, в результате чего ресурсы целевой системы перегружаются, что приводит к отказу в обслуживании законных запросов.
- Проверьте приложение на наличие атак внедрения HTML-сценариев.
- Проверьте приложение на атаки COM и ActiveX.
- Проверка на спуфинг-атаки. Спуфинг может принимать различные формы, такие как подделка электронной почты, подмена IP и т. д.
- Проверка на атаку строки неконтролируемого формата – атака безопасности, которая может привести к аварийному завершению работы приложения или выполнению в нем вредоносного скрипта.
- Проверка на атаку XML-инъекции – используется для изменения предполагаемой логики приложения.
- Проверка на атаки каноникализации (приведение XML к канонической форме).
- Проверьте, отображается ли на странице ошибки информация, которая может упростить хакеру проникновение в систему.
- Проверьте, не хранятся ли конфиденциальные данные, такие как пароль, в секретных файлах системы.
- Проверьте, не возвращает ли приложение больше данных, чем требуется.
Это лишь основные тест-кейсы, которые используются при тестировании на проникновение. Существуют сотни продвинутых методов, которые могут быть исполнены как вручную, так и с помощью средств автоматизации.
Дополнительные материалы
Стандарты пен-тестирования:
- PCI DSS (Стандарт безопасности данных индустрии платежных карт)
- OWASP (Открытый проект безопасности веб-приложений)
- ISO/IEC 27002, OSSTMM (Руководство по методологии тестирования безопасности с открытым исходным кодом)
Сертификация:
- GPEN
- Ассоциированный тестировщик безопасности (AST)
- Старший тестировщик безопасности (SST)
- Сертифицированный тестировщик на проникновение (CPT)
Заключение
Если вы являетесь тестировщиком на проникновение, вы должны собирать и регистрировать все уязвимости в системе. Старайтесь не пропустить ни один сценарий, считая, что он не будет выполнен конечными пользователями.
Перевод статьи «A Complete Penetration Testing Guide with Sample Test Cases».
Пингбэк: Большой учебник по тестированию