Безопасность памяти
Что такое Безопасность памяти?
Безопасность памятиБезопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
Гарантии безопасности памяти включают пространственную (без выходов за границы), временную (без use-after-free и double-free), типовую и инициализационную безопасность. C и C++ по умолчанию небезопасны и являются источником большинства критичных CVE через переполнения, UAF и type confusion. Данные Microsoft, Google Project Zero и доклада ONCD США 2024 года показывают, что 60–70% серьёзных уязвимостей в крупных кодбазах C/C++ связаны с дефектами памяти. Меры защиты (ASLR, DEP, CFI, санитайзеры) повышают стоимость эксплуатации, но окончательное решение — устранять баги в источнике через языки с безопасной памятью или формально верифицированные подмножества.
● Примеры
- 01
Запись за пределами буфера превращает кусок кучи в объект, контролируемый атакующим.
- 02
use-after-free освобождает объект JavaScript, указатель на который остаётся в JIT-кеше.
● Частые вопросы
Что такое Безопасность памяти?
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Безопасность памяти?
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
Как работает Безопасность памяти?
Гарантии безопасности памяти включают пространственную (без выходов за границы), временную (без use-after-free и double-free), типовую и инициализационную безопасность. C и C++ по умолчанию небезопасны и являются источником большинства критичных CVE через переполнения, UAF и type confusion. Данные Microsoft, Google Project Zero и доклада ONCD США 2024 года показывают, что 60–70% серьёзных уязвимостей в крупных кодбазах C/C++ связаны с дефектами памяти. Меры защиты (ASLR, DEP, CFI, санитайзеры) повышают стоимость эксплуатации, но окончательное решение — устранять баги в источнике через языки с безопасной памятью или формально верифицированные подмножества.
Как защититься от Безопасность памяти?
Защита от Безопасность памяти обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Безопасность памяти?
Распространённые альтернативные названия: Баги безопасности памяти.
● Связанные термины
- appsec№ 671
Языки с безопасной памятью
Языки с безопасной памятью, такие как Rust, Go, Swift, Java и C#, исключают пространственные и временные ошибки памяти, на которых строится большинство эксплойтов C и C++.
- appsec№ 953
Свойства безопасности Rust
Rust обеспечивает безопасность памяти и потоков на этапе компиляции через владение, заимствования и времена жизни, устраняя UAF и гонки данных без сборщика мусора.
- appsec№ 217
Целостность потока управления
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
- appsec№ 064
ASLR
ASLR случайным образом размещает код, стеки, кучи и библиотеки в памяти при каждом запуске, чтобы атакующий не мог предсказать целевые адреса для эксплойтов.
- appsec№ 303
DEP
Предотвращение выполнения данных (DEP, NX или W^X) помечает страницы памяти как неисполняемые, чтобы атакующий не мог запустить шеллкод, внедрённый в стек или кучу.
- appsec№ 925
Возвратно-ориентированное программирование (ROP)
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.
● См. также
- № 1095Стек-канарейка
- № 1028Теневой стек
- № 581KASLR
- № 1058SMEP / SMAP