Переполнение буфера все еще существует?
Я смотрел университетскую лекцию о переполнении буфера, и профессор закончил тем, что сказал
даже если мы смогли заполнить буфер с помощью кода эксплойта и перейти в этот код, мы все равно не сможем его выполнить..
Причины, отметил он, следующие:
программисты избегают использования функций, которые вызывают переполнение.
рандомизированные смещения стека: при запуске программы выделяйте случайное количество места в стеке, чтобы затруднить прогнозирование начала вставленного кода.
использовать методы для обнаружения повреждения стека.
неисполняемые сегменты кода: разрешить выполнение кода только из "текстовых" разделов памяти.
Теперь мне интересно, существует ли атака переполнения буфера в наши дни? или это устарело.
подробный ответ будет очень признателен!
1 ответ
Не всех нас. Каждый день появляется куча новых программистов. Наши коллективные знания
strcpy
это плохо распространяться на них магическим образом? Я так не думаю.Сложно, да. Невозможно, нет. Любая уязвимость, которая может быть превращена в произвольное чтение, может обойтись без такой защиты.
Действительно, мы можем обнаружить повреждение стека при определенных обстоятельствах. Канарские острова, например, могут быть перезаписаны, их значение зависит от компилятора, и они могут не защищать от всех видов повреждения стека (например, GCC
-fstack-protector-strong
защищает от перезаписи EIP, но не от других видов переполнения)W ^ X память - это реальность, но сколько ОС приняли ее за стек? Это был бы интересный маленький исследовательский проект для твоих выходных.:) Кроме того, если вы посмотрите на методы возврата-ориентированного программирования (ROP) (возврат к libc является его применением), вы увидите, что его также можно обойти.