Найти статью
Безопасность приложений
Безопа́сность приложе́ний — область защиты веб-приложений, мобильных программ и их программных интерфейсов от умышленных воздействий: внедрения постороннего кода через данные пользователя, обхода контроля доступа, кражи сеансов и манипуляции запросами[1]. Приложение принимает данные из ненадёжных источников — форм, адресов, заголовков, файлов — и исполняет их на сервере и в браузере клиента, поэтому каждая точка приёма данных становится потенциальной точкой входа для противника[2]. Особенность области в том, что дефект проектируется вместе с функциональностью: уязвимость не «заносится» извне, как вирус, а возникает там, где программист доверился данным, которым доверять нельзя[3][4][5].
Предмет области образуют два контура. Первый — сами приложения: корректная обработка входных данных, разделение кода и данных, устойчивые механизмы аутентификации и управления сеансами. Второй — процесс разработки: проверка кода до выпуска, тестирование на проникновение, обновления зависимостей. Классификация уязвимостей, которую ведёт сообщество OWASP с 2003 года, показывает смещение акцентов: от технических дефектов ввода к архитектурным ошибкам проектирования и рискам цепочек поставки[6][7][8]. Термин закрепился в 2000-е годы, когда прикладные дефекты были признаны самостоятельным массовым источником инцидентов, не сводимым к настройке сетей и платформ[9].
Общие сведения
Что важно знать
| Безопасность приложений | |
|---|---|
| Область использования | информационная безопасность, программная инженерия, безопасность программного обеспечения |
| Дата появления | 2000-е годы как самостоятельная дисциплина; предпосылки — 1960—1970-е годы |
| Место появления | США (исследования защищённых операционных систем, промышленные программы Microsoft и консалтинговые методики) |
| Автор понятия | коллективная разработка; заметный вклад — Дж. Виега, Г. Макгроу, М. Ховард, А. Шостак |
| Ключевые слова | уязвимость, модель угроз, принцип наименьших привилегий, аутентификация, управление доступом, кодовое рецензирование |
| Базовые понятия | программное обеспечение, данные, доступ, протокол прикладного уровня |
Понятие и место в системе защиты
Приложение — целостная программная система, выполняющая функции для пользователей или других систем: веб-приложение, сервисный интерфейс, мобильная программа, корпоративная система, распределённая служба, встраиваемое управляющее ПО. Защищаются конфиденциальность персональных и служебных данных, их целостность и доступность сервиса, а также целостность кода и конфигурации, изменение которых искажает смысл остальных операций[10].
Специфика прикладного уровня — опора на смыслы, а не на адреса: по порту 443 могут идти и запрос на оплату, и попытка изменить чужой профиль. Прикладной контроль различает операции, субъектов и объекты, проверяя допустимость конкретного действия конкретного участника над конкретными данными[11].
Безопасность приложения оценивается по достижимым цепочкам, а не по наличию отдельных средств: правильная аутентификация бесполезна, если функция импорта файлов исполняет загруженный код с привилегиями службы, а надёжное шифрование теряет смысл при доступности ключа для модуля отладки[7].
Для веб-приложений предмет охватывает разделение клиентской и серверной частей, сессии, файлы, межсайтовые взаимодействия, шаблонизацию и интерфейсы взаимодействия[11]. В мобильных приложениях добавляется недоверие к среде устройства: локальное хранение, межприложенное взаимодействие, секреты на ненадёжных носителях[12]. В корпоративных системах и интерфейсных службах главное — границы между службами: кто вправе вызывать операцию, как передаётся идентичность пользователя и как ограничиваются привилегии промежуточного сервиса[7]. Во встраиваемых устройствах классические меры дополняются защитой прошивки и каналов диагностики[10]. Независимо от формы задачи одинаковы: границы доверия, модель угроз, разграничение в архитектуре, обработка недоверенных данных, защита каналов, проверка, обновления и наблюдение[7].
История
1960—1970-е: появление базовых принципов защиты (наименьшие привилегии, экономность механизма, полное посредничество) в системах разделения времени (Multics)[3][13].
1980—1990-е: осознание масштаба угроз после инцидентов (Червь Морриса), начало фаззинга и систематизация классов уязвимостей[14][15].
2000-е: оформление дисциплины. Внедрение Security Development Lifecycle (SDL), появление OWASP и переход к принципу «безопасность как качество кода»[16][17].
2010—2020-е: стандартизация протоколов (OAuth, JWT, HSTS), рост внимания к мобильной безопасности, автоматизированному анализу (символьное исполнение) и защите цепочек поставки[18][19].
Модель угроз и границы доверия
Состав модели
Модель угроз описывает, что защищается, от кого и на каких допущениях: разбор на компоненты и потоки; активы и классификация данных; способности нарушителя; сопоставление способностей с потоками и выбор мер[20]. Результат — конкретный перечень сценариев с известным источником, целью и контрмерами[17].
Разложение на доверенные и недоверенные части определяет границы доверия: между вводом и кодом разбора, приложением и хранилищем, службами, клиентом и сервером, сборкой и средой выполнения. За границей принимающая сторона не вправе доверять формату, смыслу и происхождению получаемых данных без проверки[7].
Типовые категории целей
Цели нарушителя систематизируются моделью STRIDE: выдача себя за другое лицо, искажение данных, отказ от авторства, раскрытие сведений, нарушение доступности, расширение полномочий[20]. Каждой категории соответствуют защитные свойства: аутентификация против подмены, целостность против правки, журналирование и подпись против отрицания, конфиденциальность против извлечения, резервирование против истощения, разграничение доступа против захвата власти[3]. Категории применяются к потокам: раскрытие различно для запроса формы, ответа кэша и журнала службы[20]. Без привязки к потокам модель превращается в формальность, а обходные пути — служебные интерфейсы, отладочные режимы, прямые обращения к хранилищу — остаются неописанными[7].
Сценарии злоупотребления
Сценарии злоупотребления — формально допустимые действия, разрушающие намеренное свойство: многократная смена адреса для захвата учётной записи, рассылка запросов для исчерпания очереди, использование предпросмотра файла для чтения произвольных путей[21]. От атак с эксплуатацией они отличаются тем, что не нарушают правил платформы: опасную возможность предоставляет само приложение[17]. Для каждого сценария ищется альтернатива: ограничение, разделение, подтверждение или отказ от функции[21].
Классы уязвимостей и приёмы защиты
Ввод и интерпретация кода
Массовый класс: недоверенное значение включается в состав инструкции — инъекции в язык запросов, команд оболочки, выражений шаблонов, селекторов, заголовков. Опасность — в смешении уровней: один текст для одной части системы — данные, для другой — код[22]. Механический фильтр по подстрокам ненадёжен: кодировки, кавычки и синтаксис приёмника позволяют обойти любой текстовый фильтр[11].
Надёжный приём — сохранение различения на всём пути: шаблонные запросы с параметрами, кодирование вывода под приёмник (страницу, письмо, файл), разбор с ограничениями по типу, длине и диапазону[22]. Для файлов и сериализованных представлений служит типизированный разбор без исполнения; исполнение недоверенного кода интерпретатором — грубая ошибка[23].
Управление доступом
Прикладной доступ страдает от двух ошибок: проверка выполнена не на всех путях (отсутствует полное посредничество) и проверка выполнена с неверными атрибутами — идентификатор объекта без отношения к субъекту, доступ к управлению через «случайные» адреса[3]. Вариантов немного, реализаций безгранично: надёжность измеряется охватом, а не наличием модуля авторизации[11].
Практика: проверка на входе в операции (включая служебные интерфейсы и фоновые задания), право как пара «субъект — объект», отказ по умолчанию, разделение прав просмотра, изменения и управления, ограничение выдачи идентификаторов, допускающих перебор[3]. Особый риск — доверие клиенту в правах: серверная проверка принимает любые «клиентские ограничения»[11].
Аутентификация и сеансы
Пароли хранятся необратимыми представлениями с индивидуальными солями и намеренно медленными функциями[24]. Двухфакторная аутентификация добавляет второй независимый признак, а восстановление доступа проектируется отдельно: слабый канал восстановления обнуляет основной[25]. Ограничение попыток, задержки и мониторинг аномальных входов уменьшают подбор и подмену сессий[10].
Сеанс оформляется маркером с каждым запросом: атрибуты защищённости транспорта и недоступности скриптам, состояние и срок жизни — на сервере[26]. Маркеры со встроенными утверждениями облегчают распределение проверок, но обязывают задавать издателя, аудиторию, срок и отзыв, иначе «самопроверяемость» превращается в бессрочный пропуск[27].
Делегированный доступ по модели OAuth позволяет действовать от имени пользователя без передачи секрета; описания угроз предупреждают о перехвате перенаправлений, подмене аудиторий, повторном использовании кодов[28]. Действующие руководства ужесточают требования к перенаправлению, короткоживущие маркеры и проверку пары «эмитент — аудитория»[29].
Передача и хранение данных
Транспортная защита необходима, но недостаточна: TLS 1.3 упростил рукопожатие и убрал небезопасные параметры[30], строгий транспорт запрещает клиентам незащищённое обращение к домену[31]. Прикладной уровень требует выбора версий, проверки имён и недопущения понижения защиты[24].
Шифрование хранимых данных закрывает угрозу изъятия носителя, но не подменяет контроль доступа: без разграничения ролей ключ доступен тому же кругу, что и данные[7]. Для данных «в использовании» шифрование хранилища бессильно, и защита опирается на изоляцию и привилегии[24].
Память и типы данных
Переполнение буфера и родственные дефекты (границы, освобождённая память, целочисленные переполнения, неверные типы) превращают ошибку записи в исполняемую возможность: переиспользование готовых последовательностей обходило запреты исполнения[32] и строило цепочки без полных вызовов функций[33].
Смягчения действуют на уровне среды: проверки границ, ограничения исполнения и размещения, случайные смещения, целостность потока переходов[34]. Языки с контролем времени жизни памяти уменьшают риск на исходном уровне, но не устраняют логических ошибок[23]. Смягчения затрудняют эксплуатацию, но исправление — за разработчиком, и каждое смягчение контролируется в конфигурации сборки[7].
Состояние, гонки и бизнес-логика
Ошибки состояния возникают при разделении проверки и использования: запись изменяется между ними, конкурентные потоки проводят двойное списание[23]. Меры относятся к проектированию: атомарность проверок, идемпотентность повторов, явные переходы состояний, лимиты одновременных операций[11]. Бизнес-логические дефекты формально корректны: цена рассчитана верно, но по правилу, неприменимому к этому участнику. Их не находят сигнатурные проверки — их ищут сценариями злоупотребления и рецензированием правил[21].
Конфигурация и окружение
Значительная часть инцидентов — от настройки, а не кода: отладка, открытые панели и каталоги, широкие права, секреты в репозиториях[7]. Меры: безопасные значения по умолчанию, отделение секретов, повторяемость сборки, эталон конфигурации и его проверка[11].
Зависимости и состав
Прикладной код составляет меньшую часть по сравнению с окружением: модули, рантаймы, контейнерные образы, плагины — и уязвимость компонента становится уязвимостью приложения[7]. Практики: фиксация версий и контрольных значений, бюллетени, своевременное обновление, минимизация зависимостей, учёт состава[21].
Доверие к процессу сборки — отдельная линия: источник пакета, зеркало и репозиторий образуют цепочку, где компрометация звена распространяется на всех потребителей; подписи и изолированные воспроизводимые сборки ограничивают риск[7].
Средства архитектурной защиты
Архитектура начинается с перечня свойств, обеспечиваемых механизмами: наименьшие привилегии, полное посредничество, разрешительные политики по умолчанию, разделение обязанностей, простота проверяемого ядра, открытость проекта при секретности ключей, приемлемость для пользователей[3].
Разделение на компоненты держит опасные функции в узких областях: разбор загрузок не пересылает почту, рассылка не читает хранилище. Чем меньше пересечений привилегий, тем меньше доверенная вычислительная база каждой угрозы[7]. Изоляция дополняется границами — пространства исполнения, песочницы, отдельные записи служб, — но прикладная логика не полагается на них как на единственную проверку[10].
Отказоустойчивость защиты: ошибка одного механизма не приводит к полному обходу политики. Отсюда многослойность — фильтры и параметризация, проверка прав в сервисе и в хранилище, лимиты операций, целостность журналов, — и наблюдаемость: каждый отказ проверки фиксируется так, чтобы быть полезным при разборе[7], — и наблюдаемость: каждый отказ проверки фиксируется так, чтобы быть полезным при разборе[17].
Криптография применяется по готовым библиотекам с явным управлением ключами; «самодельная криптография» относится к каноническим антипаттернам[24]. Проектирование различает подлинность источника, целостность, конфиденциальность, неотказуемость — и не подменяет одно другим[7]. Безопасность по умолчанию и при отказе — требования к конфигурации и деградации: поведение при недоступности проверки, невыдаче маркера, переполнении журнала[17]. Модель отказов — часть проектной документации, а не импровизация[7].
Практики безопасной реализации
Работа с вводом унифицируется на уровне инфраструктуры: единые типы, лимиты размеров, явные кодировки, отказ при неопознанном представлении. Противопоставление «данные vs код» реализуется библиотеками доступа, форматированием вывода и запретом конкатенации там, где значение попадает в интерпретатор[22]. Проверка вводимых данных ограничивает и ресурсные последствия: размер, вложенность, скорость обработки[15].
Обработка ошибок — часть политики: сообщения не раскрывают структур хранения и стеков, детали — в защищённом журнале, состояние при отказе последовательно[17]. Журналирование охватывает события безопасности — входы, отказы права, смену ключей, административные действия — с защитой записей от модификации[10]. Секреты отделяются от кода и конфигурации, ограничиваются областью действия и подлежат регулярной замене по сроку и событиям; их утечка в репозиторий — компрометация[7]. Работа с памятью ведётся по правилам платформы: границы, валидация целочисленных значений, освобождение, контроль сериализуемых форм[23].
Требования к коду закрепляются стандартами проекта, а не пересказываются в каждом модуле; отступления требуют обоснования и регистрации[35]. Интеграционные конвенции (версионирование, идемпотентность, лимиты) — часть безопасности: они определяют поверхность злоупотреблений[11].
Анализ, тестирование и верификация
Методы различаются доступом к коду и средой исполнения. Ревью проверяет семантику и согласованность с моделью угроз; статический анализ ищет шаблоны небезопасных операций и подозрительные потоки[21]. Статические методы дают и ложные срабатывания, и пропуски; их ценность — в массовом охвате и воспроизводимости[36][37].
Динамическое тестирование исполняет приложение: сценарии из модели угроз, сканирование сервиса, фаззинг с ориентацией на покрытие[18]. Фаззинг связали с символьным исполнением, порождающим тесты для глубоких ветвей[38][39]; промышленные движки показали достижимость автоматического поиска через распараллеливание и обратную связь по покрытию[40]. Классические эксперименты с псевдослучайным вводом остаются методологическим основанием[15].
Испытание на проникновение ищет достижимые цепочки; его результат — описание пройденных путей, а не гарантия отсутствия прочих[21]. Приёмочная проверка — чек-лист по модели угроз: расхождение останавливает выпуск[35].
Проверка сборки и состава: воспроизводимость образов, контроль зависимостей, сканирование слоёв, проверка подписей и сроков[7]. Встроенные компоненты требуют дополнительных приёмов, включая аппаратные ограничения[10].
Формальные методы и верификация
Формальная верификация доказывает свойства критических компонентов для выбранной модели; области применения — протоколы, ядерные подсистемы, средства разграничения[7]. Для прикладного уровня полнота разбивается о три факта: модель среды (компиляторы, библиотеки, ОС) сама требует допущений; спецификация может быть неверной; произвольная проверка программ неразрешима, и автоматизм ограничен эвристикой[3]. Практическая ценность формальных подходов — дисциплина спецификации: граничные условия, инварианты, свойства отказов. Прикладная инженерия использует их фрагментарно: для протоколов, схем ключей, критичных состояний, отдельных механизмов разграничения[34]. Где доказательство слишком дорого, его заменяют сужением области доверия и проверяемой изоляцией[41].
Встраивание в процесс разработки
В промышленной практике «безопасность встраивается, а не добавляется» — контрольные точки расставляются по фазам жизненного цикла[21]. Требования — классификация данных; проектирование — модель угроз; реализация — стандарты и ревью; испытания — описанные методы; внедрение — эталон конфигурации; эксплуатация — наблюдение, патчи, пересмотр прав[35].
Классификаторы CLASP ставят вопросы к архитектуре: кто обращается к данным, как проверяются входные сообщения, где границы доменов, что защищается криптографией, что журналируется[42]. Методика превращает заботу о «надёжности» в список решений[16].
Контрольные точки дают право остановить выпуск: непроверенные изменения интерфейсов, новые источники ввода, перенос данных, смена поставщика аутентификации требуют возврата к предыдущей фазе[35]. Автоматизация переносит проверки в непрерывную интеграцию: сборка невозможна без дешёвых тестов, дорогие выполняются по регламенту[18].
Обучение — организационная часть дисциплины: результаты проверок возвращаются в стандарты и шаблоны[21]. Зрелость измеряется воспроизводимостью: один класс изменений проходит одни проверки вне зависимости от команды[35].
Сборка, артефакты и среда запуска
Безопасность начинается до запуска: конвейер — часть доверенной вычислительной базы. Настройки компиляции включаются на уровне стандарта проекта; компилятор и линковщик — проверяемая часть сборки[7]. Зависимости фиксируют точные версии и контрольные значения, а повторная сборка обязана воспроизводить артефакт, иначе расхождение «проверенного» и «выпущенного» неотличимо от подмены[23]. Секреты сборки и доступы к реестрам ограничиваются ролями и сроком[35]. Среда, в которой осуществляется запуск, отделяет права сервиса от администратора, ограничивает хранилища, исключает инструменты разработки[10]. Поведение при недоступности внешних служб проверяется отдельно: деградация не открывает «аварийный» путь с пониженной проверкой[7].
Управление уязвимостями и раскрытие
Уязвимость — не только дефект кода, но и процесс: приём сообщений, подтверждение, оценка воздействия, выпуск исправления, уведомление зависимых[21]. Координация оформилась после первых крупных инцидентов с червями и фиксирует роли групп реагирования и сроки[43]. Совместное раскрытие балансирует защиту пользователей и открытость исследований: ранняя публикация расширяет окно риска[14][44]. Критичность опирается на достижимость, права, данные и последствия: распространённая ошибка без пути эксплуатации не тождественна редкой с полным захватом[10]. Шкалы дают общий язык, но не заменяют контекстного разбора[23]. Для потребителя важны наличие исправления, обходных мер и сведений о затронутых версиях[21].
Примечания
- ↑ OWASP Top 10. top10.owasp.org. Дата обращения: 28 сентября 2026.
- ↑ Dowd M., McDonald J., Schuh J. The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities. — Addison-Wesley, 2007. — ISBN 978-0-13-270193-8.
- ↑ 1 2 3 4 5 6 7 Saltzer J.H., Schroeder M.D. The Protection of Information in Computer Systems // Proceedings of the IEEE. — 1975. — Т. 63, № 9. — С. 1278—1308. — doi:10.1109/PROC.1975.9939.
- ↑ Кинтонова А. Ж., Баенова Г. М., Урынбасарова А. Ж. Вопросы безопасности веб приложений // Colloquium-journal. — 2020. — № 13 (65). — doi:10.24411/2520-6990-2020-11848.
- ↑ Гладкий М. В. Безопасность приложений на платформах облачных вычислений // Труды БГТУ. Серия 3: Физико-математические науки и информатика. — 2015. — № 6 (179).
- ↑ Керим А. Г. Сравнительный анализ версий OWASP Top Ten: эволюция угроз веб-безопасности // Вестник науки. — 2025. — № 5 (86).
- ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Anderson R. Security Engineering: A Guide to Building Dependable Distributed Systems. — 3rd ed.. — Wiley, 2020. — ISBN 978-1-119-64278-7.
- ↑ Гурвиц Г. А., Ешенко Р. А. Обеспечение информационной безопасности корпоративных приложений // Вестник Хабаровского государственного университета экономики и права. — 2018. — № 2.
- ↑ McGraw G. Building Secure Software: Better Than Protecting Bad Software // IEEE Software. — 2002. — Т. 19, № 6. — С. 57—58. — doi:10.1109/MS.2002.1049391.
- ↑ 1 2 3 4 5 6 7 8 Gollmann D. Computer Security. — 3rd ed.. — Wiley, 2011. — ISBN 978-0-470-74115-3.
- ↑ 1 2 3 4 5 6 7 8 Stuttard D., Pinto M. The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws. — 2nd ed.. — Wiley, 2011. — ISBN 978-1-118-02647-2.
- ↑ Enck W., Gilbert P., Han S. et al. TaintDroid: An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones // ACM Transactions on Computer Systems. — 2014. — Т. 32, № 2. — С. 1—29. — doi:10.1145/2619091.
- ↑ Landwehr C.E., Bull A.R., McDermott J.P., Choi W.S. A Taxonomy of Computer Program Security Flaws // ACM Computing Surveys. — 1994. — Т. 26, № 2. — doi:10.1145/185403.185412.
- ↑ 1 2 Spafford E.H. The Internet Worm Program: An Analysis // ACM SIGCOMM Computer Communication Review. — 1989. — Т. 19, № 1. — С. 17—57. — doi:10.1145/66093.66095.
- ↑ 1 2 3 Miller B.P. An Empirical Study of the Reliability of UNIX Utilities // Communications of the ACM. — 1990. — Т. 33, № 12. — С. 32—44. — doi:10.1145/96267.96279.
- ↑ 1 2 Viega J., McGraw G. Building Secure Software. — Addison-Wesley Professional, 2001. — ISBN 978-0-321-77495-8.
- ↑ 1 2 3 4 5 6 Howard M., LeBlanc D. Writing Secure Code. — 2nd ed.. — Microsoft Press, 2003. — ISBN 978-0-7356-1722-3.
- ↑ 1 2 3 Manès V.J.M., Han H., Han C., Cha S.K., Egele M., Schwartz E.J., Woo M. The Art, Science, and Engineering of Fuzzing: A Survey // IEEE Transactions on Software Engineering. — 2021. — Т. 47, № 11. — С. 2312—2331. — doi:10.1109/TSE.2019.2946563.
- ↑ Hardt D. The OAuth 2.0 Authorization Framework // RFC. — 2012. — № 6749. — doi:10.17487/RFC6749.
- ↑ 1 2 3 Shostack A. Threat Modeling: Designing for Security. — Wiley, 2014. — ISBN 978-1-118-80999-0.
- ↑ 1 2 3 4 5 6 7 8 9 10 McGraw G.R. Software Security: Building Security In. — Boston: Addison-Wesley Professional, 2006. — ISBN 978-0-321-35670-3.
- ↑ 1 2 3 Halfond W.G.J., Orso A. Preventing SQL Injection Attacks Using AMNESIA // Proceedings of the 28th International Conference on Software Engineering. — 2006. — С. 795—798. — doi:10.1145/1134285.1134416.
- ↑ 1 2 3 4 5 6 Dowd M., McDonald J., Schuh J. The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities. — Boston: Addison-Wesley Professional, 2006. — ISBN 978-0-321-44442-4.
- ↑ 1 2 3 4 Ferguson N., Schneier B., Kohno T. Cryptography Engineering: Design Principles and Practical Applications. — Wiley, 2010. — ISBN 978-0-470-47424-2.
- ↑ Pfleeger C.P. Security in Computing. — 5th ed.. — Boston: Pearson, 2015. — ISBN 978-0-13-408504-3.
- ↑ Jones M., Bradley J., Sakimura N. JSON Web Token (JWT) // RFC. — 2015. — № 7519. — doi:10.17487/RFC7519.
- ↑ Lodderstedt T., McGloin M., Hunt P. OAuth 2.0 Threat Model and Security Considerations // RFC. — 2013. — № 6819. — doi:10.17487/RFC6819.
- ↑ Lodderstedt T., Bradley J., Labunetz A., Fett D. Best Current Practice for OAuth 2.0 Security // RFC. — 2024. — № 9700. — doi:10.17487/RFC9700.
- ↑ Rescorla E. The Transport Layer Security (TLS) Protocol Version 1.3 // RFC. — 2018. — № 8446. — doi:10.17487/RFC8446.
- ↑ Hodges J., Jackson C., Barth A. HTTP Strict Transport Security (HSTS) // RFC. — 2012. — № 6797. — doi:10.17487/RFC6797.
- ↑ Shacham H. The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls // Proceedings of the 14th ACM Conference on Computer and Communications Security. — 2007. — С. 552—561. — doi:10.1145/1315245.1315313.
- ↑ Bletsch T., Jiang X., Freeh V.W., Liang Z. Jump-Oriented Programming: A New Class of Code-Reuse Attack // Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security. — 2011. — С. 30—40. — doi:10.1145/1966913.1966919.
- ↑ 1 2 Abadi M., Budiu M., Erlingsson U., Ligatti J. Control-Flow Integrity // Proceedings of the 12th ACM Conference on Computer and Communications Security. — 2005. — С. 340—353. — doi:10.1145/1102120.1102165.
- ↑ 1 2 3 4 5 6 Howard M., Lipner S. The Security Development Lifecycle. — Redmond: Microsoft Press, 2006. — ISBN 978-0-7356-2214-2.
- ↑ М. Ю. Быков, А. В. Звягинцева. Анализ актуальных угроз безопасности веб-приложений // Пожарная безопасность: проблемы и перспективы. — 2019. — № 10.
- ↑ Панков Н. О. Повышение безопасности веб-приложений путем автоматизированного тестирования на проникновение с помощью нескольких сканеров уязвимостей // Международный журнал гуманитарных и естественных наук. — 2025. — № 3—1 (102).
- ↑ Godefroid P., Kiezun A., Levin M.Y. Grammar-Based Whitebox Fuzzing // Proceedings of the 29th ACM SIGPLAN Conference on Programming Language Design and Implementation. — 2008. — С. 206—215. — doi:10.1145/1375581.1375607.
- ↑ Фатхи В. А., Дьяченко Н. В. Тестирование безопасности приложений // Инженерный вестник Дона. — 2021. — № 5 (77).
- ↑ Cadar C., Novak K. KLEE Symbolic Execution Engine in 2019 // International Journal on Software Tools for Technology Transfer. — 2021. — Т. 23, № 6. — С. 867—870. — doi:10.1007/s10009-020-00570-3.
- ↑ Лапина М. А., Багаутдинова А. Р., Загнетов Н. Исследование уязвимостей безопасности веб-приложений // Auditorium. — 2024. — № 1 (41).
- ↑ Viega J. Building Security Requirements with CLASP // Proceedings of the 2005 Workshop on Software Engineering for Secure Systems. — 2005. — С. 1—7. — doi:10.1145/1083200.1083207.
- ↑ Mauldin J. Expectations for Computer Security Incident Response // RFC. — 1998. — № 2350. — doi:10.17487/RFC2350.
- ↑ Лапина М. А., Багаутдинова А. Р., Загнетов Н. Исследование уязвимостей безопасности веб-приложений // Auditorium. — 2024. — № 1 (41).
Литература
- М. Ю. Быков, А. В. Звягинцева. Анализ актуальных угроз безопасности веб-приложений // Пожарная безопасность: проблемы и перспективы. — 2019. — № 10.
- Гурвиц Г. А., Ешенко Р. А. Обеспечение информационной безопасности корпоративных приложений // Вестник Хабаровского государственного университета экономики и права. — 2018. — № 2.
- Фатхи В. А., Дьяченко Н. В. Тестирование безопасности приложений // Инженерный вестник Дона. — 2021. — № 5 (77).
- Anderson, Ross. Security Engineering: A Guide to Building Dependable Distributed Systems. — 3rd ed.. — Wiley, 2020. — ISBN 978-1-119-64278-7.
- Viega, John, and Gary McGraw. Building Secure Software: How to Avoid Security Problems the Right Way. — Boston: Addison-Wesley Professional, 2001. — ISBN 978-0-321-77495-8.
- Gollmann, Dieter. Computer Security. — 3rd ed.. — Wiley, 2011. — ISBN 978-0-470-74115-3.
- Dowd, Mark, John McDonald, and Justin Schuh. The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities. — Boston: Addison-Wesley Professional, 2006. — ISBN 978-0-321-44442-4.
- McGraw, Gary. Software Security: Building Security In. — Boston: Addison-Wesley Professional, 2006. — ISBN 978-0-321-35670-3.
- Ferguson, Niels, Bruce Schneier, and Tadayoshi Kohno. Cryptography Engineering: Design Principles and Practical Applications. — Wiley, 2010. — ISBN 978-0-470-47424-2.
- Howard, Michael, and David LeBlanc. Writing Secure Code. — 2nd ed.. — Redmond: Microsoft Press, 2003. — ISBN 978-0-7356-1722-3.