Паттерны атак

Паттерны атак (англ. attack patterns) — совокупность формальных методик, применяемых для поиска ошибок или дефектов в программном коде, связанных с компьютерной безопасностью[1].

Описание

Паттерны атак часто используются для тестирования программного обеспечения и играют важную роль в обеспечении предотвращения потенциальных уязвимостей[2]. Они позволяют выделять участки кода, требующие особого внимания при проведении мер по усилению безопасности, а также предоставляют рекомендации по типовым решениям для предотвращения атак. Эта практика получила отдельное название — дефенсивное программирование. Паттерны атак описывают последовательность воспроизводимых шагов, с помощью которых можно имитировать атаку на систему с целью проверки её защищённости.

Категории

Существует несколько способов классификации паттернов атак.

Общие категории

  • Архитектурные паттерны атак направлены на изъяны архитектурного проектирования системы: уязвимости в протоколах, стратегиях аутентификации и модуляризации систем; к этой категории относится ряд атак логического характера, а не манипуляции с данными на низком уровне. Например, к архитектурным изъянам относят атаку типа «несовпадение времени проверки и использования»;
  • Атаки на разбор и валидацию. Сюда входят атаки типа SQL-инъекций и межсайтового скриптинга;
  • Безопасность работы с памятью. В языках программирования, не обеспечивающих безопасность работы с памятью, могут быть использованы такие уязвимости, как переполнение буфера и гонка данных, что позволяет получить частичный или полный контроль над программой;
  • Подмена и родственные атаки. Часто нацелены на подмену доменных имён сайтов: фишинг, подмена доменного имени, киберсквоттинг;
  • Атаки на графический интерфейс пользователя (GUI). Охватывают уязвимости графического интерфейса программы: clickjacking, mousetrapping, наложение через HTML-iframe и др.;
  • Мультипликативные атаки. Такие как malvertising, вирусные атаки, распространяющиеся через социальные сети, атаки типа «червь» (worm), массовый сбор уязвимых хостов перед атакой.

Разделение по технологиям

Другой подход к классификации основан на разделении паттернов по конкретным технологиям или типам технологий, например, паттерны атак на базы данных, паттерны атак на веб-приложения, сетевые паттерны атак и т. п., либо более специфические примеры: паттерны атак на SQL Server, Oracle, .NET, Java и др.

Структура

Структура паттернов атак во многом повторяет структуру шаблонов проектирования[1]. Такое оформление стандартизирует их описание и обеспечивает единообразное документирование ключевой информации о каждой атаке.

Рекомендуемая структура описания паттерна атаки включает:

  • Название паттерна.

Общепринятое наименование, с которым ассоциируется этот паттерн.

  • Тип и подтипы.

Позволяют классифицировать паттерн; помогают быстро находить и идентифицировать релевантные группы паттернов. Каждый паттерн имеет тип и возможно — один или несколько подтипов. Примеры основных типов: атака инъекцией, атака типа «отказ в обслуживании», атака криптоанализа. Например, подтипы для DoS: истощение ресурсов, крах системы, злоупотребление политиками.

Классификация по типу/подтипу также предотвращает дублирование уже существующих паттернов; нередко новые эксплойты — это просто новые вариации атаки по известному паттерну. Пример — переполнение буфера: эксплойтов этого типа много, но их объединяет общий паттерн.

В этой же части указывают возможность автоматизации атаки; если это возможно — рекомендуется сопровождать паттерн демонстрационным кодом.

  • Также известно как:

Альтернативные и разговорные названия атаки.

  • Описание.

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

  • Замысел атакующего.

Основная цель атакующего — например, сделать сайт недоступным.

  • Мотивация.

Причина, по которой атакующий реализует атаку — например, финансовый ущерб организации, кража данных и т. п. В отличие от предыдущего пункта, отражает причину достижения такой цели.

  • Эксплуатируемая уязвимость.

Указывается конкретная уязвимость, которую использует атака. Например, при атаке на переполнение целого числа — отсутствие проверки размера значения входных данных и возможности переменной обрабатывать это значение.

  • Участники.

Список субъектов, участвующих в атаке: жертвы, злоумышленник, его инструменты/компоненты; описание их ролей и взаимодействия.

  • Диаграмма процесса.

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

  • Зависимости и условия.

Описание необходимых условий и контекста, при которых атака возможна. Например, для «Integer Overflow» требуется доступ к уязвимому приложению.

  • Демонстрационный код атаки.

Если возможно, приводится пример эксплойта.

  • Известные эксплойты

Можно перечислить реализованные эксплойты или вредоносные программы, использующие этот паттерн; ссылки могут быть внутренними или внешними.

Внимание: эксплойт — это не уязвимость, а конкретная реализация атаки, использующая уязвимость.

  • Последующие атаки.

Атаки, которым способствует данный паттерн. Например, после переполнения буфера часто следуют атаки на повышение привилегий, внедрение трояна.

  • Типы мер противодействия.

Базовые варианты защитных стратегий для предотвращения атак; часто отсылают к «security patterns» или паттернам защитного программирования. Такая классификация позволяет строить библиотеки для устранения целых классов атак.

  • Рекомендуемые меры противодействия.

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

  • Связанные паттерны.

Перечень паттернов, относящихся к данному, поддерживающих или компенсирующих его, включая защитные, архитектурные и другие паттерны.

Пример для «Integer Overflow Attack Pattern»:

  • Меры противодействия: паттерн фильтрации входных данных, паттерн самозащиты;
  • Связанные паттерны: паттерн переполнения буфера;
  • Связанные оповещения, списки и публикации.
  • CVE;
  • CWE;
  • CERT;
  • различные вендорские уведомления.

Примечания

  1. 1 2 Gegick, Michael; Williams, Laurie (2005). “Matching Attack Patterns to Security Vulnerabilities in Software-Intensive System Designs”. ACM SIGSOFT Software Engineering Notes [англ.]. 30 (4). DOI:10.1145/1082983.1083296. Дата обращения 2024-06-16. |access-date= требует |url= (справка)
  2. Moore, A. P. Attack Modeling for Information Security and Survivability : [англ.] / A. P. Moore, R. J. Ellison, R. C. Linger. — Software Engineering Institute, Carnegie Mellon University, 2001.

Литература

  • Александер К., Ишикава С., Сильверстайн М. Язык шаблонов (A Pattern Language). — Нью-Йорк: Oxford University Press, 1977.
  • Гамма Э., Хелм Р., Джонсон Р., Влиссидес Д. Приёмы объектно-ориентированного проектирования. Паттерны проектирования (Design Patterns: Elements of Reusable Object-Oriented Software). — М.: Addison-Wesley, 1995. ISBN 0-201-63361-2.
  • Томпсон Г., Чейз С. The Software Vulnerability Guide. — Charles River Media, 2005. ISBN 1-58450-358-0.
  • Гегик М., Уильямс Л. «Matching Attack Patterns to Security Vulnerabilities in Software-Intensive System Designs», в: ACM SIGSOFT Software Engineering Notes, 2005, т. 30, вып. 4.
  • Ховард М., Леблан Д. Writing Secure Code. — Microsoft Press, 2002. ISBN 0-7356-1722-8.
  • Мур А. П., Эллисон Р. Дж., Лингер Р. С. Attack Modeling for Information Security and Survivability. — Carnegie Mellon University, 2001.
  • Хоглунд Г., Макгроу Г. Exploiting Software: How to Break Code. — Addison-Wesley, 2004. ISBN 0-201-78695-8.
  • Макгроу Г. Software Security: Building Security In. — Addison-Wesley, 2006. ISBN 0-321-35670-5.
  • Виега Дж., Макгроу Г. Building Secure Software: How to Avoid Security Problems the Right Way. — Addison-Wesley, 2001. ISBN 0-201-72152-X.
  • Шумахер М., Фернандес-Буглиони Э., Хайбертсон Д., Бушманн Ф., Зоммерлад П. Security Patterns. — John Wiley & Sons, 2006. ISBN 0-470-85884-2.
  • Койцол Д., Литчфилд Д., Айтел Д., Энли К., Эрен С., Мехта Н., Райли Х. The Shellcoder’s Handbook: Discovering and Exploiting Security Holes. — Wiley, 2004. ISBN 0-7645-4468-3.
  • Шнайер Б. Attack Trees: Modeling Security Threats. — Dr. Dobb’s Journal, декабрь 1999.