Паттерны атак
Паттерны атак (англ. 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 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=(справка) - ↑ 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.