ScholarGate
Ассистент

Безопасность программного обеспечения и приложений

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

Найти тему в PaperMindСкороFind papers & topics
Tools & resources
Скачать слайды
Learn & explore
ВидеоСкоро

Definition

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

Scope

Эта область охватывает безопасность самого программного обеспечения: классы уязвимостей (ошибки безопасности памяти, инъекции, логические ошибки) и способы их эксплуатации, практики создания безопасного программного обеспечения (безопасное проектирование, анализ кода, тестирование, фаззинг), анализ вредоносного программного обеспечения и специфические проблемы веб-приложений. Она рассматривает наступательные и оборонительные аспекты совместно. Исключаются криптографические алгоритмы, а также сетевая инфраструктура и инфраструктура контроля доступа, которые рассматриваются в смежных областях.

Sub-topics

Core questions

  • Какие классы программных ошибок приводят к эксплуатируемым уязвимостям?
  • Как злоумышленники превращают уязвимость в выполнение кода или кражу данных?
  • Как можно проектировать, писать и тестировать программное обеспечение, чтобы оно было безопасным с самого начала?
  • Как анализируется вредоносное программное обеспечение и как от него защищаться?
  • Почему одни и те же классы уязвимостей повторяются, несмотря на десятилетия осведомленности?

Key concepts

  • классы уязвимостей
  • безопасность памяти
  • переполнение буфера
  • инъекционные атаки
  • эксплуатация и меры по смягчению
  • жизненный цикл безопасной разработки
  • статический и динамический анализ
  • фаззинг
  • анализ вредоносного ПО

Key theories

Безопасность памяти и эксплуатация
Языки без безопасности памяти допускают ошибки, такие как переполнение буфера, которые позволяют злоумышленникам перезаписывать управляющие данные и перехватывать выполнение; понимание эксплуатации (и мер по смягчению, таких как ASLR, DEP, stack canaries) является центральным для безопасности программного обеспечения.
Встраивание безопасности
Безопасность наиболее эффективна, когда она интегрирована на протяжении всего жизненного цикла разработки — посредством моделирования угроз, безопасного кодирования, анализа кода и тестирования — а не прикрепляется впоследствии, перемещая дефекты влево, где их исправление обходится дешевле.

Clinical relevance

Уязвимости программного обеспечения являются основной причиной большинства реальных инцидентов безопасности: ошибки безопасности памяти в C/C++ лежат в основе значительной доли критических уязвимостей, ошибки инъекций компрометируют базы данных, а атаки на цепочки поставок (SolarWinds, Log4Shell) распространяются через зависимости. Эта область напрямую влияет на то, как укрепляются операционные системы, браузеры и приложения, а также на функционирование экосистем раскрытия уязвимостей, патчинга и вознаграждений за обнаружение ошибок.

Evidence & guidelines

Область организована вокруг общих баз знаний: OWASP Top Ten и CWE каталогизируют общие уязвимости, система CVE/NVD отслеживает раскрытые уязвимости с оценками серьезности CVSS, а фреймворк MITRE ATT&CK сопоставляет методы злоумышленников. Фреймворки безопасной разработки (Microsoft SDL, NIST SSDF / SP 800-218) и языки с безопасной работой с памятью (Rust) представляют собой текущие рекомендации по передовой практике.

History

Безопасность программного обеспечения возникла, когда сетевые системы сделали программы уязвимыми для удаленных злоумышленников. Червь Морриса 1988 года использовал переполнение буфера; статья Алефа Одина 1996 года «Smashing the Stack» популяризировала технику эксплуатации, что привело к появлению мер по смягчению (stack canaries, неисполняемая память, ASLR). В 2000-х годах была формализована безопасная разработка (Microsoft SDL после меморандума Trustworthy Computing 2002 года), а повторяющиеся кризисы — Heartbleed, Log4Shell — поддерживают актуальность этой области, стимулируя сейчас внедрение языков с безопасной работой с памятью.

Key figures

  • Gary McGraw
  • Ross Anderson
  • Elias Levy (Aleph One)
  • Dan Geer

Related topics

Seminal works

  • anderson2020
  • mcgraw2006
  • aleph1996

Frequently asked questions

Почему одни и те же уязвимости (например, переполнения буфера) продолжают появляться?
Большая часть критически важного программного обеспечения написана на языках, небезопасных для работы с памятью, сжатые сроки и сложность приводят к ошибкам, а старый код сохраняется десятилетиями. Даже при наличии осведомленности, одна пропущенная проверка может быть эксплуатируемой, поэтому в этой области все чаще отдают предпочтение языкам с безопасной работой с памятью и автоматизированному анализу.
Отделена ли безопасность приложений от криптографии?
Они дополняют друг друга. Криптография защищает данные при правильном использовании, но приложения обычно взламываются из-за логических ошибок, инъекций или ошибок памяти, которые полностью обходят криптографию. Для того чтобы криптографические защиты действительно работали, необходима надежная безопасность программного обеспечения.

Methods for this concept

Related concepts