Руководство по тестированию на проникновение

Руководство по тестированию на проникновение

Тестирование на проникновение – это процесс выявления уязвимостей безопасности в приложении. Проводится путем проверки системы с использованием различных вредоносных методов. В этом процессе выявляются слабые места ПО посредством санкционированной имитации атаки.

Цель тестирования на проникновение – защитить важные данные от злоумышленников, которые могут получить доступ к системе. При обнаружении уязвимости её используют для эксплуатации системы, чтобы получить доступ к важной информации.

Тест на проникновение также известен как пентест, а тестировщиков называют этичными хакерами или пентестерами.

Друзья, поддержите нас вступлением в наш телеграм канал 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. Анализ результатов и подготовка отчета. После завершения тестов на проникновение составляются подробные отчеты для принятия корректирующих действий. В этих отчетах перечисляются все выявленные уязвимости и рекомендуемые методы их устранения.

Примеры тест-кейсов для тестирования на проникновение

Не забывайте, это нефункциональное тестирование. Основная цель тестов на проникновение – найти бреши в системе безопасности.

Ниже приведены типовые тест-кейсы, которые не обязательно применять ко всем приложениям.

  1. Проверьте, способно ли веб-приложение идентифицировать спам-атаки на контактные формы, используемые на сайте.
  2. Проверьте, контролируется ли сетевой трафик прокси-устройствами. Прокси-сервер затрудняет получение внутренних данных сети хакерами, тем самым защищая систему от внешних атак.
  3. Проверьте, фильтруется ли входящий и исходящий почтовый трафик и блокируются ли нежелательные письма.
  4. Многие почтовые клиенты поставляются с уже встроенными фильтрами спама, которые настраиваются в соответствии с потребностями конкретной организации. Правила настройки могут применяться к заголовкам, теме или телу письма.
  5. Убедитесь, что вся сеть или компьютер защищены брандмауэрами. Это может быть программное или аппаратное обеспечением, которое блокирует несанкционированный доступ к системе. Брандмауэры помогут предотвратить отправку данных за пределы сети без вашего разрешения.
  6. Попробуйте использовать все серверы, настольные системы, принтеры и сетевые устройства.
  7. Убедитесь, что все имена пользователей и пароли зашифрованы и передаются по безопасным соединениям типа https.
  8. Проверьте информацию, хранящуюся в файлах cookie сайта. Она не должна быть в удобочитаемом формате.
  9. Перепроверьте ранее найденные уязвимости и убедитесь, что они исправлены.
  10. Проверьте, нет ли в сети открытых портов.
  11. Проверьте все телефонные устройства.
  12. Проверьте безопасность сети WiFi.
  13. Проверьте все методы HTTP. Методы PUT и Delete не должны быть включены на веб-сервере.
  14. Проверьте, соответствует ли пароль требуемым стандартам. Он должен состоять не менее чем из 8 символов, содержать хотя бы одну цифру и один специальный символ.
  15. Имя пользователя не должно быть “admin” или “administrator”.
  16. Страница входа в приложение должна блокироваться после нескольких неудачных попыток входа.
  17. Сообщения об ошибках должны быть общими и не должны содержать конкретные детали, такие как “Неверное имя пользователя” или “Неверный пароль”.
  18. Убедитесь, что специальные символы, теги HTML и скрипты правильно обрабатываются в качестве входных данных.
  19. Внутренние детали системы не должны раскрываться ни в одном из сообщений об ошибках или предупреждений.
  20. В случае сбоя веб-страницы конечным пользователям должны отображаться общие пользовательские сообщения об ошибках.
  21. Проверьте использование записей реестра. Конфиденциальная информация не следует хранить в реестре.
  22. Все файлы должны быть просканированы перед загрузкой на сервер.
  23. Конфиденциальные данные не должны передаваться через URL-адреса при обмене данных с различными внутренними модулями веб-приложения.
  24. В системе не должно быть жестко закодированного имени пользователя или пароля.
  25. Проверьте все поля ввода с длинными строками ввода с пробелами и без них.
  26. Убедитесь, что функция сброса пароля защищена.
  27. Проверьте приложение на SQL-инъекцию.
  28. Проверьте приложение на межсайтовый скриптинг.
  29. Важная проверка ввода должна выполняться на стороне сервера вместо проверки JavaScript на стороне клиента.
  30. Критически важные ресурсы системы должны быть доступны только уполномоченным лицам и службам.
  31. Все журналы доступа должны вестись с соответствующими разрешениями на доступ.
  32. Убедитесь, что сеанс пользователя завершается при выходе из системы.
  33. Убедитесь, что просмотр каталогов на сервере отключен.
  34. Убедитесь, что все приложения и базы данных имеют актуальные версии.
  35. Проверьте манипуляции с URL-адресами, чтобы убедиться, что веб-приложение не показывает нежелательную информацию.
  36. Проверьте утечку памяти и переполнение буфера обмена.
  37. Проверьте, сканируется ли входящий сетевой трафик на предмет обнаружения троянов.
  38. Проверьте, защищена ли система от Brute-force атак – метод взлома путем подбора данных учетной записи для поиска конфиденциальной информации.
  39. Проверьте, защищена ли система или сеть от DoS-атак. Хакеры могут атаковать сеть или отдельный компьютер непрерывными запросами, в результате чего ресурсы целевой системы перегружаются, что приводит к отказу в обслуживании законных запросов.
  40. Проверьте приложение на наличие атак внедрения HTML-сценариев.
  41. Проверьте приложение на атаки COM и ActiveX.
  42. Проверка на спуфинг-атаки. Спуфинг может принимать различные формы, такие как подделка электронной почты, подмена IP и т. д.
  43. Проверка на атаку строки неконтролируемого формата – атака безопасности, которая может привести к аварийному завершению работы приложения или выполнению в нем вредоносного скрипта.
  44. Проверка на атаку XML-инъекции – используется для изменения предполагаемой логики приложения.
  45. Проверка на атаки каноникализации (приведение XML к канонической форме).
  46. Проверьте, отображается ли на странице ошибки информация, которая может упростить хакеру проникновение в систему.
  47. Проверьте, не хранятся ли конфиденциальные данные, такие как пароль, в секретных файлах системы.
  48. Проверьте, не возвращает ли приложение больше данных, чем требуется.

Это лишь основные тест-кейсы, которые используются при тестировании на проникновение. Существуют сотни продвинутых методов, которые могут быть исполнены как вручную, так и с помощью средств автоматизации.

Дополнительные материалы

Стандарты пен-тестирования:

  • PCI DSS (Стандарт безопасности данных индустрии платежных карт)
  • OWASP (Открытый проект безопасности веб-приложений)
  • ISO/IEC 27002, OSSTMM (Руководство по методологии тестирования безопасности с открытым исходным кодом)

Сертификация:

  • GPEN
  • Ассоциированный тестировщик безопасности (AST)
  • Старший тестировщик безопасности (SST)
  • Сертифицированный тестировщик на проникновение (CPT)

Заключение

Если вы являетесь тестировщиком на проникновение, вы должны собирать и регистрировать все уязвимости в системе. Старайтесь не пропустить ни один сценарий, считая, что он не будет выполнен конечными пользователями.

Перевод статьи «A Complete Penetration Testing Guide with Sample Test Cases».

1 комментарий к “Руководство по тестированию на проникновение”

  1. Пингбэк: Большой учебник по тестированию

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *