~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 6AA50E976835A74360E95ABBC22866DB__1711542420 ✰
Заголовок документа оригинал.:
✰ Buffer overflow - Wikipedia ✰
Заголовок документа перевод.:
✰ Переполнение буфера — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Buffer_overflow ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/6a/db/6aa50e976835a74360e95abbc22866db.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/6a/db/6aa50e976835a74360e95abbc22866db__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 08:41:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 27 March 2024, at 15:27 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Переполнение буфера — Википедия Jump to content

Переполнение буфера

Из Википедии, бесплатной энциклопедии
Визуализация программного переполнения буфера. Данные записываются в A, но они слишком велики, чтобы поместиться в A, поэтому они переполняются в B.

В программировании и информационной безопасности или переполнение буфера переполнение буфера — это аномалия , при которой программа записывает данные в буфер буфера за пределами выделенной памяти , перезаписывая соседние памяти ячейки .

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

Использование поведения переполнения буфера является хорошо известным эксплойтом безопасности . Во многих системах структура памяти программы или системы в целом четко определена. Отправляя данные, вызывающие переполнение буфера, можно выполнить запись в области, которые, как известно, содержат исполняемый код , и заменить его вредоносным кодом или выборочно перезаписать данные, относящиеся к состоянию программы, что приведет к поведению, не предусмотренному пользователем. оригинальный программатор. Буферы широко распространены в коде операционной системы (ОС), поэтому можно проводить атаки, повышающие привилегии и получающие неограниченный доступ к ресурсам компьютера. Знаменитый червь Морриса в 1988 году использовал это как один из методов атаки.

К языкам программирования , обычно связанным с переполнением буфера, относятся C и C++ , которые не обеспечивают встроенной защиты от доступа или перезаписи данных в любой части памяти и не проверяют автоматически, что данные, записанные в массив (тип встроенного буфера), находятся внутри. границы этого массива. Проверка границ может предотвратить переполнение буфера, но требует дополнительного кода и времени обработки. Современные операционные системы используют различные методы борьбы со злонамеренным переполнением буфера, в частности, путем рандомизации структуры памяти или намеренного оставления пространства между буферами и поиска действий, записывающих данные в эти области («канарейки»).

Техническое описание [ править ]

Переполнение буфера происходит, когда данные , записанные в буфер, также повреждают значения данных в адресах памяти, соседних с буфером назначения, из-за недостаточной проверки границ . [1] : 41  Это может произойти при копировании данных из одного буфера в другой без предварительной проверки того, что данные помещаются в целевой буфер.

Пример [ править ]

В следующем примере, выраженном на C , программа имеет две переменные, расположенные рядом в памяти: строковый буфер длиной 8 байт, A, и двухбайтовое целое число с прямым порядком байтов , B.

символ             A  [  8  ]   =   ""  ; 
  беззнаковый   короткий   B      =   1979  ; 

Первоначально A содержит только ноль байт, а B содержит число 1979.

имя переменной А Б
ценить [ нулевая строка ] 1979
шестнадцатеричное значение 00 00 00 00 00 00 00 00 07 BB

Теперь программа пытается сохранить строку с нулевым завершением. "excessive" с кодировкой ASCII в буфере A.

strcpy  (  A  ,   «чрезмерный»  ); 

"excessive"имеет длину 9 символов и кодирует 10 байт, включая нулевой терминатор, но A может занимать только 8 байт. Не проверив длину строки, она также перезаписывает значение B:

имя переменной А Б
ценить 'e' 'x' 'c' 'e' 's' 's' 'i' 'v' 25856
шестигранник 65 78 63 65 73 73 69 76 65 00

Значение B теперь случайно заменено числом, сформированным из части строки символов. В этом примере «e», за которым следует нулевой байт, будет равно 25856.

Запись данных за пределами выделенной памяти иногда может быть обнаружена операционной системой и генерировать ошибку сегментации , которая завершает процесс.

Чтобы предотвратить переполнение буфера в этом примере, вызов strcpy можно заменить на strlcpy, который принимает максимальную емкость A (включая символ нулевого завершения) в качестве дополнительного параметра и гарантирует, что в A будет записано не более этого объема данных:

strlcpy  (  A  ,   "чрезмерный"  ,   sizeof  (  A  )); 

При наличии, strlcpy библиотечная функция предпочтительнее strncpyкоторый не завершает буфер назначения нулем, если длина исходной строки больше или равна размеру буфера (третий аргумент, передаваемый функции). Поэтому A не может заканчиваться нулем и не может рассматриваться как допустимая строка в стиле C.

Эксплуатация [ править ]

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

Эксплойт на основе стека [ править ]

Существует несколько способов манипулирования программой, используя переполнение буфера стека:

  • Изменение поведения программы путем перезаписи локальной переменной, расположенной рядом с уязвимым буфером в стеке;
  • Путем перезаписи адреса возврата в кадре стека , чтобы он указывал на код, выбранный злоумышленником, обычно называемый шеллкодом . Как только функция вернется, выполнение возобновится с шелл-кода злоумышленника;
  • Перезаписав указатель функции [2] или обработчик исключений , указывающий на шеллкод, который впоследствии выполняется;
  • Перезаписывая локальную переменную (или указатель) другого кадра стека, которая позже будет использоваться функцией, владеющей этим кадром. [3]

Злоумышленник разрабатывает данные для использования одного из этих эксплойтов, а затем помещает эти данные в буфер, предоставляемый пользователям уязвимым кодом. Если адрес предоставленных пользователем данных, используемых для воздействия на переполнение буфера стека, непредсказуем, использование переполнения буфера стека для удаленного выполнения кода становится намного сложнее. Один из методов, который можно использовать для использования такого переполнения буфера, называется « трамплин ». Здесь злоумышленник найдет указатель на уязвимый буфер стека и вычислит расположение своего шеллкода относительно этого указателя. Затем злоумышленник воспользуется перезаписью для перехода к уже находящейся в памяти инструкции , которая совершит второй переход, на этот раз относительно указателя. Этот второй переход приведет к переходу выполнения в шеллкод. Подходящие инструкции часто присутствуют в большом коде. операционной системе Например, проект Metasploit поддерживает базу данных подходящих кодов операций, хотя в нем перечислены только те, которые встречаются в Windows . [4]

Эксплуатация на основе кучи [ править ]

Переполнение буфера, происходящее в области данных кучи, называется переполнением кучи и может быть использовано иначе, чем переполнение на основе стека. Память в куче динамически выделяется приложением во время выполнения и обычно содержит данные программы. Эксплуатация осуществляется путем повреждения этих данных определенным образом, что заставляет приложение перезаписывать внутренние структуры, такие как указатели связанных списков. Метод канонического переполнения кучи перезаписывает связь динамического распределения памяти (например, метаданные malloc ) и использует полученный обмен указателями для перезаписи указателя функции программы.

Уязвимость Microsoft GDI + при обработке файлов JPEG является примером опасности, которую может представлять переполнение кучи. [5]

Барьеры для эксплуатации [ править ]

Манипулирование буфером, происходящее до его чтения или выполнения, может привести к провалу попытки эксплуатации. Эти манипуляции могут снизить угрозу эксплуатации, но не могут сделать ее невозможной. Манипуляции могут включать преобразование в верхний или нижний регистр, удаление метасимволов и фильтрацию небуквенно -цифровых строк. Однако существуют методы обхода этих фильтров и манипуляций, такие как буквенно-цифровой шеллкод , полиморфный код , самомодифицирующийся код и атаки возврата в libc . Те же методы можно использовать, чтобы избежать обнаружения системами обнаружения вторжений . В некоторых случаях, в том числе при преобразовании кода в Unicode , [6] угроза уязвимости была неверно истолкована разоблачителями как всего лишь отказ в обслуживании, тогда как на самом деле возможно удаленное выполнение произвольного кода.

Практичность эксплуатации [ править ]

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

Техника салазок NOP [ править ]

Иллюстрация полезной нагрузки NOP-салазок в стеке.

NOP-салазки — старейший и наиболее широко известный метод использования переполнения буфера стека. [7] Он решает проблему поиска точного адреса буфера за счет эффективного увеличения размера целевой области. Для этого гораздо большие разделы стека повреждаются с помощью недействующей машинной инструкции. В конце предоставленных злоумышленником данных, после пустых инструкций, злоумышленник помещает инструкцию для выполнения относительного перехода к началу буфера, где шелл-код расположен . Этот набор пустых операций называется «NOP-салазками», потому что, если адрес возврата перезаписывается каким-либо адресом в неактивной области буфера, выполнение будет «скользить» вниз по пустым операциям до тех пор, пока не будет перенаправляется на реальный вредоносный код переходом в конце. Этот метод требует, чтобы злоумышленник угадал, где в стеке находится NOP-след, а не сравнительно небольшой шеллкод. [8]

Из-за популярности этого метода многие поставщики систем предотвращения вторжений будут искать этот шаблон бездействующих машинных инструкций в попытке обнаружить используемый шеллкод. Важно отметить, что NOP-салазки не обязательно содержат только традиционные безоперационные машинные инструкции. Любая инструкция, которая не нарушает состояние машины до такой степени, что шеллкод не запускается, может использоваться вместо аппаратного бездействия. В результате для авторов эксплойтов стало обычной практикой составлять неактивный слейд из случайно выбранных инструкций, которые не окажут реального влияния на выполнение шеллкода. [9]

Хотя этот метод значительно повышает шансы на успех атаки, он не лишен проблем. Эксплойты, использующие эту технику, по-прежнему должны полагаться на некоторую удачу, позволяющую угадать смещения в стеке, находящиеся в пределах области NOP-салазки. [10] Неверное предположение обычно приводит к сбою целевой программы и может предупредить системного администратора о действиях злоумышленника. Другая проблема заключается в том, что салазкам NOP требуется гораздо больший объем памяти для хранения салазок NOP, достаточно больших, чтобы их можно было использовать. Это может стать проблемой, если выделенный размер затронутого буфера слишком мал, а текущая глубина стека мала (т. е. от конца текущего кадра стека до начала стека не так уж много места). Несмотря на свои проблемы, NOP-салазки часто являются единственным методом, который будет работать для данной платформы, среды или ситуации, и как таковой он по-прежнему остается важным методом.

Переход к адресу, хранящемуся в регистровой технике [ править ]

Метод «перехода к регистрации» позволяет надежно использовать переполнение буфера стека без необходимости дополнительного места для NOP-салазок и без необходимости угадывать смещения стека. Стратегия состоит в том, чтобы перезаписать указатель возврата чем-то, что заставит программу перейти к известному указателю, хранящемуся в регистре, который указывает на управляемый буфер и, следовательно, на шелл-код. Например, если регистр A содержит указатель на начало буфера, то любой переход или вызов, использующий этот регистр в качестве операнда, может использоваться для получения контроля над потоком выполнения. [11]

Инструкция из ntdll.dll для вызова DbgPrint() подпрограмма содержит машинный код операции i386 для jmp esp.

На практике программа не может намеренно содержать инструкции для перехода к определенному регистру. Традиционное решение состоит в том, чтобы найти непреднамеренный экземпляр подходящего кода операции в фиксированном месте где-то в памяти программы. Рисунок E слева содержит пример такого непреднамеренного экземпляра i386. jmp espинструкция. Код операции для этой инструкции: FF E4. [12] Эту двухбайтовую последовательность можно найти со сдвигом в один байт от начала инструкции. call DbgPrint по адресу 0x7C941EED. Если злоумышленник перезапишет адрес возврата программы этим адресом, программа сначала перейдет на 0x7C941EED, интерпретировать код операции FF E4 как jmp esp инструкцию, а затем перейдет на вершину стека и выполнит код злоумышленника. [13]

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

Этот метод также позволяет размещать шеллкод после перезаписанного обратного адреса на платформе Windows. Поскольку исполняемые файлы в основном базируются по адресу 0x00400000а x86 — это архитектура Little Endian , последний байт адреса возврата должен быть нулевым, что завершает копирование буфера, и за его пределами ничего не записывается. Это ограничивает размер шеллкода размером буфера, что может быть слишком ограничительным. DLL расположены в верхней памяти (выше 0x01000000) и поэтому имеют адреса, не содержащие нулевых байтов, поэтому этот метод может удалить нулевые байты (или другие запрещенные символы) из перезаписанного адреса возврата. Используемый таким образом метод часто называют «прыжком на батуте DLL».

Защитные контрмеры [ править ]

Для обнаружения или предотвращения переполнения буфера использовались различные методы с различными компромиссами. В следующих разделах описаны доступные варианты и реализации.

Выбор языка программирования [ править ]

Ассемблер, C и C++ — популярные языки программирования, уязвимые к переполнению буфера, отчасти потому, что они допускают прямой доступ к памяти и не являются строго типизированными . [15] C не обеспечивает встроенной защиты от доступа или перезаписи данных в любой части памяти. Точнее, он не проверяет, находятся ли данные, записанные в буфер, в пределах границ этого буфера. Стандартные библиотеки C++ предоставляют множество способов безопасной буферизации данных, а стандартная библиотека шаблонов C++ (STL) предоставляет контейнеры, которые могут дополнительно выполнять проверку границ, если программист явно вызывает проверки при доступе к данным. Например, vectorфункция-член at() выполняет проверку границ и выдает out_of_range исключение , если проверка границ не удалась. [16] Однако C++ ведет себя так же, как C, если проверка границ не вызывается явно. Методы предотвращения переполнения буфера также существуют для C.

Языки, которые строго типизированы и не допускают прямого доступа к памяти, такие как COBOL, Java, Python и другие, в большинстве случаев предотвращают переполнение буфера. [15] Многие языки программирования, кроме C или C++, обеспечивают проверку во время выполнения, а в некоторых случаях даже проверку во время компиляции, которая может отправить предупреждение или вызвать исключение, в то время как C или C++ перезаписывают данные и продолжают выполнять инструкции до тех пор, пока не будут получены ошибочные результаты, что потенциально может привести к программа выйдет из строя. Примеры таких языков включают Ada , Eiffel , Lisp , Modula-2 , Smalltalk , OCaml и такие C-производные, Cyclone , Rust и D. как Среды байт-кода Java и также .NET Framework требуют проверки границ всех массивов. Почти каждый интерпретируемый язык имеет защиту от переполнения буфера, сигнализируя о четко определенной ошибке. Языки, которые предоставляют достаточно информации о типах для проверки границ, часто предоставляют возможность включить или отключить ее. Статический анализ кода может устранить многие динамические проверки привязок и типов, но плохая реализация и неловкие случаи могут значительно снизить производительность. Разработчики программного обеспечения должны тщательно учитывать соотношение между безопасностью и производительностью при принятии решения, какой язык и настройки компилятора использовать.

Использование безопасных библиотек [ править ]

Проблема переполнения буфера распространена в языках C и C++, поскольку они предоставляют низкоуровневые детали представления буферов как контейнеров для типов данных. Переполнения буфера можно избежать, поддерживая высокую степень корректности кода, выполняющего управление буфером. Также давно рекомендуется избегать стандартных библиотечных функций, границы которых не проверяются, таких как gets, scanf и strcpy. Морриса Червь воспользовался gets позвони в Fingerd . [17]

Хорошо написанные и протестированные библиотеки абстрактных типов данных, которые централизуют и автоматически выполняют управление буфером, включая проверку границ, могут уменьшить возникновение и влияние переполнения буфера. Основными типами данных в языках, в которых часто встречаются переполнения буфера, являются строки и массивы. Таким образом, библиотеки, предотвращающие переполнение буфера в этих типах данных, могут обеспечить подавляющее большинство необходимого покрытия. Однако неправильное использование этих безопасных библиотек может привести к переполнению буфера и другим уязвимостям, и, естественно, любая ошибка в библиотеке также является потенциальной уязвимостью. «Безопасные» реализации библиотеки включают «The Better String Library», [18] Vstr [19] и Эрвин. [20] OpenBSD . операционной системы Библиотека C предоставляет функции strlcpy и strlcat , но они более ограничены, чем реализации полностью безопасных библиотек

В сентябре 2007 года был опубликован Технический отчет 24731, подготовленный комитетом по стандартам C. [21] Он определяет набор функций, основанных на строках стандартной библиотеки C и функциях ввода-вывода, с дополнительными параметрами размера буфера. Однако эффективность этих функций для уменьшения переполнения буфера является спорной. Они требуют вмешательства программиста для каждого вызова функции, что эквивалентно вмешательству, которое могло бы сделать безопасным переполнение буфера функций аналогичной старой стандартной библиотеки. [22]

Защита от переполнения буфера [ править ]

Защита от переполнения буфера используется для обнаружения наиболее распространенных случаев переполнения буфера путем проверки того, что стек не был изменен при возврате функции. Если он был изменен, программа завершает работу с ошибкой сегментации . Три таких системы — Libsafe, [23] и StackGuard [24] и ПроПолице [25] патчи gcc .

Реализация Microsoft режима предотвращения выполнения данных (DEP) явно защищает указатель на обработчик структурированных исключений (SEH) от перезаписи. [26]

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

Этот тип защиты также не совсем точен, поскольку обнаруживает не все атаки. Такие системы, как StackGuard, в большей степени ориентированы на поведение атак, что делает их эффективными и быстрыми по сравнению с системами проверки диапазона. [27]

Защита указателя [ править ]

Переполнение буфера происходит путем манипулирования указателями , включая сохраненные адреса. PointGuard был предложен как расширение компилятора, позволяющее злоумышленникам надежно манипулировать указателями и адресами. [28] Этот подход работает благодаря тому, что компилятор добавляет код для автоматического XOR-кодирования указателей до и после их использования. Теоретически, поскольку злоумышленник не знает, какое значение будет использоваться для кодирования и декодирования указателя, невозможно предсказать, на что будет указывать указатель, если он будет перезаписан новым значением. PointGuard так и не был выпущен, но Microsoft реализовала аналогичный подход, начиная с Windows XP SP2 и Windows Server 2003 SP1. [29] Вместо того, чтобы реализовать защиту указателей как автоматическую функцию, Microsoft добавила подпрограмму API, которую можно вызывать. Это позволяет повысить производительность (поскольку он не используется постоянно), но накладывает на программиста обязанность знать, когда его использование необходимо.

Поскольку XOR является линейным, злоумышленник может манипулировать закодированным указателем, перезаписывая только младшие байты адреса. Это может обеспечить успех атаки, если злоумышленник сможет несколько раз попытаться использовать эксплойт или завершить атаку, заставив указатель указывать на одно из нескольких мест (например, любое место в салазке NOP). [30] Microsoft добавила случайную ротацию в свою схему кодирования, чтобы устранить эту слабость, связанную с частичной перезаписью. [31]

Защита исполняемого пространства [ править ]

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

Некоторые процессоры поддерживают функцию под названием бит NX («No eXecute») или XD («eXecute Disabled»), которая в сочетании с программным обеспечением может использоваться для пометки страниц данных (например, тех, которые содержат стек и кучу) как читаемых. и доступен для записи, но не исполняется.

Некоторые операционные системы Unix (например, OpenBSD , macOS ) поставляются с защитой исполняемого пространства (например, W^X ). Некоторые дополнительные пакеты включают в себя:

Более новые варианты Microsoft Windows также поддерживают защиту исполняемого пространства, называемую « Предотвращение выполнения данных» . [35] Собственные дополнения включают в себя:

Защита исполняемого пространства обычно не защищает от атак возврата в библиотеку или любых других атак, которые не зависят от выполнения кода злоумышленника. Однако в 64-битных системах, использующих ASLR , как описано ниже, защита исполняемого пространства значительно затрудняет выполнение таких атак.

пространства Рандомизация макета адресного

Рандомизация макета адресного пространства (ASLR) — это функция компьютерной безопасности, которая включает в себя случайное расположение позиций ключевых областей данных, обычно включая базу исполняемого файла и положение библиотек, кучи и стека, в адресном пространстве процесса.

Рандомизация адресов виртуальной памяти , по которым можно найти функции и переменные, может затруднить, но не сделать невозможным использование переполнения буфера. Это также заставляет злоумышленника адаптировать попытку эксплуатации к конкретной системе, что препятствует попыткам интернет-червей . [38] Аналогичный, но менее эффективный метод — перебазировать процессы и библиотеки в виртуальное адресное пространство.

Глубокая проверка пакетов [ править ]

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

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

Тестирование [ править ]

Проверка переполнений буфера и исправление вызывающих их ошибок помогает предотвратить переполнение буфера. Одним из распространенных автоматизированных методов их обнаружения является фаззинг . [39] Тестирование на крайних случаях также может выявить переполнение буфера, как и статический анализ. [40] Как только обнаружено потенциальное переполнение буфера, его следует исправить. Это делает подход тестирования полезным для программного обеспечения, которое находится в разработке, но менее полезным для устаревшего программного обеспечения, которое больше не обслуживается и не поддерживается.

История [ править ]

Переполнение буфера было понято и частично публично задокументировано еще в 1972 году, когда в «Исследовании планирования технологий компьютерной безопасности» был изложен этот метод: «Код, выполняющий эту функцию, не проверяет должным образом адреса источника и назначения, позволяя перекрывать части монитора пользователя. Это можно использовать для внедрения кода в монитор, который позволит пользователю получить контроль над машиной». [41] Сегодня монитор называли бы ядром.

Самая ранняя задокументированная враждебная эксплуатация переполнения буфера произошла в 1988 году. Это был один из нескольких эксплойтов, использованных червем Морриса для распространения через Интернет. Использованная программа представляла собой сервис Unix « под названием finger» . [42] Позже, в 1995 году, Томас Лопатич независимо заново обнаружил переполнение буфера и опубликовал свои выводы в списке рассылки по безопасности Bugtraq . [43] Год спустя, в 1996 году, Элиас Леви (также известный как Алеф Один) опубликовал в журнале Phrack статью «Разбей стек ради удовольствия и прибыли». [44] пошаговое введение в эксплуатацию уязвимостей переполнения буфера стека.

С тех пор как минимум два крупных интернет-червя использовали переполнение буфера для компрометации большого количества систем. В 2001 году червь Code Red использовал переполнение буфера в службах Microsoft Internet Information Services (IIS) 5.0. [45] а в 2003 году червь SQL Slammer скомпрометировал машины под управлением Microsoft SQL Server 2000 . [46]

В 2003 году переполнение буфера, присутствующее в лицензионных играх для Xbox , было использовано, чтобы позволить нелицензионному программному обеспечению, включая доморощенные игры , запускаться на консоли без необходимости модификаций оборудования, известных как модчипы . [47] Эксплойт независимости PS2 также использовал переполнение буфера, чтобы добиться того же самого для PlayStation 2 . Хак «Сумерек» достиг того же самого с Wii , используя переполнение буфера в The Legend of Zelda: Twilight Princess .

См. также [ править ]

Ссылки [ править ]

  1. ^ Р. Ширей (август 2007 г.). Глоссарий по интернет-безопасности, версия 2 . Сетевая рабочая группа. дои : 10.17487/RFC4949 . РФК 4949 . Информационный.
  2. ^ «CORE-2007-0219: Переполнение буфера удаленного ядра mbufs IPv6 OpenBSD» . Проверено 15 мая 2007 г.
  3. ^ «Современные цели переполнения» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 5 июля 2013 г.
  4. ^ «База данных кодов операций Metasploit» . Архивировано из оригинала 12 мая 2007 года . Проверено 15 мая 2007 г.
  5. ^ «Бюллетень по безопасности Microsoft Technet MS04-028» . Майкрософт . Архивировано из оригинала 4 августа 2011 г. Проверено 15 мая 2007 г.
  6. ^ «Создание произвольного шеллкода в расширенных строках Юникода» (PDF) . Архивировано из оригинала (PDF) 5 января 2006 г. Проверено 15 мая 2007 г.
  7. ^ Вангелис (08 декабря 2004 г.). «Эксплойт переполнения стека: введение в классическую и расширенную технику переполнения» . Wowhacker через Neworder. Архивировано из оригинала (текста) 18 августа 2007 года. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  8. ^ Балабан, Мурат. «Раскрытие тайны о переполнении буфера» (текст) . Enderunix.org. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  9. ^ Акритидис, П.; Евангелос П. Маркатос; М. Полихронакис; Костас Д. Анагностакис (2005). «STRIDE: обнаружение полиморфных салазок посредством анализа последовательности инструкций». (PDF) . Материалы 20-й Международной конференции по информационной безопасности IFIP (IFIP/SEC 2005) . Международная конференция ИФИП по информационной безопасности. Архивировано из оригинала (PDF) 1 сентября 2012 г. Проверено 4 марта 2012 г.
  10. ^ Кляйн, Кристиан (сентябрь 2004 г.). «Переполнение буфера» (PDF) . Архивировано из оригинала (PDF) 28 сентября 2007 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  11. ^ Шах, Сомил (2006). «Написание плагинов Metasploit: от уязвимости к эксплойту» (PDF) . Взломать в коробке . Куала-Лумпур . Проверено 4 марта 2012 г.
  12. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2A: Справочник по набору команд, AM (PDF) . Корпорация Интел. Май 2007 г., стр. 3–508. Архивировано из оригинала (PDF) 29 ноября 2007 г.
  13. ^ Альварес, Серхио (5 сентября 2004 г.). «Реальный процесс Vuln-Dev Win32 Stack BufferOverFlow» (PDF) . Консультации по ИТ-безопасности . Проверено 4 марта 2012 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  14. ^ Укай, Юджи; Соедер, Дерек; Перме, Райан (2004). «Зависимости от среды при эксплуатации Windows» . Блэкхэт Япония . Япония: Цифровая безопасность eEye . Проверено 4 марта 2012 г.
  15. ^ Перейти обратно: а б https://www.owasp.org/index.php/Buffer_OverflowsBuffer Overflows, статья об OWASP. Архивировано 29 августа 2016 г. на Wayback Machine.
  16. ^ "vector::at — Справочник по C++" . Cplusplus.com . Проверено 27 марта 2014 г.
  17. ^ «Архивная копия» . Wiretap.area.com . Архивировано из оригинала 5 мая 2001 года . Проверено 6 июня 2022 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  18. ^ «Лучшая строковая библиотека» .
  19. ^ «Домашняя страница Vstr» . Архивировано из оригинала 5 марта 2017 г. Проверено 15 мая 2007 г.
  20. ^ «Домашняя страница Эрвина» . Проверено 15 мая 2007 г.
  21. ^ Международная организация по стандартизации (2007 г.). «Информационные технологии. Языки программирования, их среды и интерфейсы системного программного обеспечения. Расширения библиотеки C. Часть 1. Интерфейсы проверки границ» . Платформа онлайн-просмотра ISO .
  22. ^ «Инициатива по безопасному кодированию CERT» . Архивировано из оригинала 28 декабря 2012 года . Проверено 30 июля 2007 г.
  23. ^ «Libsafe на FSF.org» . Проверено 20 мая 2007 г.
  24. ^ «StackGuard: автоматическое адаптивное обнаружение и предотвращение атак переполнения буфера, автор: Коуэн и др.» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 20 мая 2007 г.
  25. ^ «ProPolice в X.ORG» . Архивировано из оригинала 12 февраля 2007 года . Проверено 20 мая 2007 г.
  26. ^ «Обход аппаратного предотвращения выполнения данных Windows» . Архивировано из оригинала 30 апреля 2007 г. Проверено 20 мая 2007 г.
  27. ^ Ли, Кён Сок; Чапин, Стив Дж. (25 апреля 2003 г.). «Уязвимости переполнения буфера и форматной строки» . Программное обеспечение: практика и опыт . 33 (5): 423–460. дои : 10.1002/сп.515 . ISSN   0038-0644 .
  28. ^ «12-й симпозиум по безопасности USENIX – Технический документ» . www.usenix.org . Проверено 3 апреля 2018 г.
  29. ^ «Защита от уловок указателя (своего рода!)» . msdn.com . Архивировано из оригинала 2 мая 2010 г. Проверено 3 апреля 2018 г.
  30. ^ «USENIX — Ассоциация передовых вычислительных систем» (PDF) . www.usenix.org . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 3 апреля 2018 г.
  31. ^ «Защита от манипуляций с указателями (Redux)» . msdn.com . Архивировано из оригинала 19 декабря 2009 г. Проверено 3 апреля 2018 г.
  32. ^ «PaX: Домашняя страница команды PaX» . Проверено 3 июня 2007 г.
  33. ^ «KernelTrap.Org» . Архивировано из оригинала 29 мая 2012 г. Проверено 3 июня 2007 г.
  34. ^ «Патч ядра Openwall Linux 2.4.34-ow1» . Архивировано из оригинала 19 февраля 2012 г. Проверено 3 июня 2007 г.
  35. ^ «Microsoft Technet: Предотвращение выполнения данных» . Архивировано из оригинала 22 июня 2006 г. Проверено 30 июня 2006 г.
  36. ^ «BufferShield: предотвращение использования переполнения буфера для Windows» . Проверено 3 июня 2007 г.
  37. ^ «Защитник стека NGSec» . Архивировано из оригинала 13 мая 2007 г. Проверено 3 июня 2007 г.
  38. ^ «PaX на GRSecurity.net» . Проверено 3 июня 2007 г.
  39. ^ «The Exploitant — Информация и руководства по безопасности» . Проверено 29 ноября 2009 г.
  40. ^ Ларошель, Дэвид; Эванс, Дэвид (13 августа 2001 г.). «Статическое обнаружение вероятных уязвимостей переполнения буфера» . Симпозиум USENIX по безопасности . 32 .
  41. ^ «Исследование планирования технологий компьютерной безопасности» (PDF) . п. 61. Архивировано из оригинала (PDF) 21 июля 2011 г. Проверено 2 ноября 2007 г.
  42. ^ « Экскурсия по червю», Донн Сили, Университет Юты» . Архивировано из оригинала 20 мая 2007 г. Проверено 3 июня 2007 г.
  43. ^ «Архив списка рассылки по безопасности Bugtraq» . Архивировано из оригинала 1 сентября 2007 г. Проверено 3 июня 2007 г.
  44. ^ « Разбивание стопки ради удовольствия и прибыли» Алеф Один» . Проверено 5 сентября 2012 г.
  45. ^ «Цифровая безопасность eEye» . Архивировано из оригинала 20 июня 2009 г. Проверено 3 июня 2007 г.
  46. ^ «Бюллетень по безопасности Microsoft Technet MS02-039» . Майкрософт . Архивировано из оригинала 7 марта 2008 г. Проверено 3 июня 2007 г.
  47. ^ «Хакер взламывает защиту Xbox без мод-чипа» . Архивировано из оригинала 27 сентября 2007 г. Проверено 3 июня 2007 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 6AA50E976835A74360E95ABBC22866DB__1711542420
URL1:https://en.wikipedia.org/wiki/Buffer_overflow
Заголовок, (Title) документа по адресу, URL1:
Buffer overflow - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)