Разное

Технология предотвращающая переполнение буфера в результате вирусных атак: Как устроены дыры в безопасности: переполнение буфера / Хабр

NX (XD) и EVP

Технологии NX (No Xecute), XD (eXecute Disable) и EVP (Enhanced Virus Protection), не смотря на разные названия, являются одним и тем же — важным компонентом любого современного процессора, обеспечивающим повышенную защиту компьютера от вирусов и хакерских атак, использующих механизм переполнения буфера.

Названия NX и XD характерны для процессоров Intel. EVP — для процессоров AMD.

Встречаются также и другие варианты названий, такие как DEP (Data Execution Prevention), XN (eXecute Never) и т.д.

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

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

Переполнение происходит, когда в буфер записываются данные, объем которых превышает его размер. Это возможно, если разработчик программы в каком-либо ее месте не предусмотрел проверку соответствия объема копируемых данных размеру буфера. В результате переполнения «лишние» данные попадают в память компьютера и располагаются за пределами конкретного буфера, «несанкционировано» заменяя часть находящихся в памяти данных.

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

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

Острота проблемы

Впервые механиз переполнение буфера был использован при создании компьютерного вируса, получившего название «червь Морриса». Это был самораспространяющийся червь, «расползшийся» в 1988 году по всему Интернету (который тогда еще только начинал развиваться).

С указанного времени массовые заражения компьютеров вредоносным кодом, основанным на этой уязвимости, неоднократно имели место. С ростом Интернета увеличивались и их масштабы. В 2001 году червь Code Red инфицировал более 350 тыс. компьютеров по всему миру, в 2003 году червь SQL Slammer распространился на не менее чем 75 тысяч компьютеров и т.д.

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

Механизм работы NX и EVP

Технологии NX и EVP используются в процессорах с 2004 года и основываются на «изоляции» блоков виртуальной памяти компьютера, предназначенных для хранения исполняемого кода, от блоков, в которые записываются обрабатываемые данные. В таких условиях даже если злоумышленнику удастся внедрить свой код в память компьютера, он не будет выполнен процессором.

Чтобы эта защита полноценно функционировала, компьютер должен использовать соответствующую операционную систему. В Windows поддержка NX/EVP появилась в версии Windows XP SP2. А Windows 8, 10 и вовсе не работают на компьютерах, процессоры которых не поддерживают указанные технологии.

NX/EVP не обеспечивают полную защиту от угроз переполнения буфера, однако, сильно снижают вероятность взлома системы.

бит | это… Что такое XD-бит?

Описание

NX (XD) — атрибут страницы памяти в архитектурах x86-64, который может применяться для более надежной защиты системы от программых ошибок, а также использующих их вирусов, троянских коней и прочих вредоносных программ. NX (No eXecute) — терминология AMD. Xecution Disable).

Поскольку в современных компьютерных системах память разделяется на страницы, имеющие определенные атрибуты, разработчики процессоров добавили еще один: запрет исполнения кода на странице. То есть, такая страница может быть использована для хранения данных, но не программного кода. При попытке передать управление на такую страницу процессор сформирует особый случай ошибки страницы и программа (чаще всего) будет завершена аварийно. Атрибут защиты от исполнения давно присутствовал в других микропроцессорных архитектурах, однако в x86-системах такая защита реализовывалась только на уровне программных сегментов, механизм которых давно не используется современными ОС. Теперь она добавлена еще и на уровне отдельных страниц.

Современные программы четко разделяют на сегменты кода («text»), данных («data»), неинициализированных данных («bss»), а также динамически распределяемую область памяти, которая подразделяется на кучу («heap») и программный стек («stack»). Если программа написана без ошибок, указатель команд никогда не выйдет за пределы сегментов кода, однако, в результате программных ошибок, управление может быть передано в другие области памяти. При этом процессор перестанет выполнять какие-то запрограммированные действия, а будет выполнять случайную последовательность команд, за которые он будет принимать хранящиеся в этих областях данные, до тех пор, пока не встретит недопустимую последовательность, или попытается выполнить операцию, нарушающюю целостностность системы, которая вызовет срабатывание системы защиты. В обоих случаях программа завершится аварийно. Также процессор может встретить последовательность, интерпретируемую как команды перехода к уже пройденному адресу. В таком случае процессор войдет в бесконечный цикл, и программа «зависнет», забрав 100% процессорного времени. Для предотвращения подобных случаев и был введен этот дополнительный атрибут: если некоторая область памяти не предназначена для хранения программного кода, то все ее страницы должны помечаться NX-битом, и в случае попытки передать туда управление процессор сформирует особый случай и ОС тут же аварийно завершит программу, сигнализировав выход за пределы сегмента (SIGSEGV).

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

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

Технические детали

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

Благодаря атрибуту NX такое становится невозможным. Область стека помечается NX-битом и любое выполнение кода в нём запрещено. Теперь же, если передать управление стеку, то сработает защита. Хоть программу и можно заставить аварийно завершиться, но использовать её для выполнения произвольного кода становится очень сложно (для этого потребуется ошибочное снятие программой NX-защиты).

Однако, некоторые программы используют выполнение кода в стеке или куче. Такое решение может быть связано с оптимизацией, динамической компиляцией или просто оригинальным техническим решением. Обычно, операционные системы предоставляют системные вызовы для запроса памяти с разрешенной функцией исполнения как раз для таких целей, однако многие старые программы всегда считают всю память исполнимой. Для запуска таких программ под Windows приходится отключать функцию NX на весь сеанс работы, и чтобы включить ее вновь, требуется перезагрузка. Примером такой программы может служить Iris.

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

Ссылки

  • Функция на сайте Intel

BufferShield — Описание | Sys-Manage

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

Основная причина того, что существующие технологии безопасности не могут защитить организации от новых угроз безопасности, заключается в том, что они полагаются на неполную или неточную информацию. Некоторые полагаются на анализ сетевого трафика, другие используют сигнатуры известных атак, а некоторые комбинируют и то, и другое.

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

Наши клиенты используют BufferShield самыми разными способами:

  • Добавляют дополнительный уровень безопасности в обновления Windows, антивирусные сканеры и брандмауэры
  • Повышение безопасности текущих настольных и серверных операционных систем
  • Повышение безопасности критически важных систем инфраструктуры
  • Повышение безопасности для более не поддерживаемых устаревших ОС, таких как Windows NT 4.0 и Windows 2000, по-прежнему предназначенных для
  • Пережить фазу дня-0, через которую проходит любая общеизвестная уязвимость, пока не будут доступны исправления/заплаты
  • В качестве компонента приманки, инициирующего сигнал тревоги для обнаружения новых и вредоносных угроз на самой ранней стадии

В отличие от аппаратной технологии DEP от Microsoft, требующей установки пакета обновления 2 для XP и наличия определенных функций процессора (технология Intel XD и AMD NX), BufferShield защищает все операционные системы Microsoft, начиная с NT4, даже если они аппаратного обеспечения нет.

Кроме того, аппаратно реализованная функция предотвращения выполнения данных (DEP) в Windows XP SP2 и Windows Server 2003 SP1 и SP2 не обеспечивает надежной защиты от переполнения буфера в настройках по умолчанию. Нажмите здесь, чтобы узнать больше о преимуществах использования BufferShield вместо аппаратного DEP.

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

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

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

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

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

Переполнение буфера обычно используется хакерами и вирусами для внедрения вредоносного кода в ваши системы. Например, черви Zotob, Sasser или LovSan/MSBlaster использовали такую ​​технику для атаки на удаленные системы.

BufferShield использует аналогичные технологии, реализованные проектом PaX, для защиты платформы Linux от переполнения буфера.

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

Основные возможности BufferShield :

  • Обнаруживает выполнение кода в стеке, куче по умолчанию, динамической куче, виртуальной памяти и сегментах данных
  • Может завершать рассматриваемые приложения, если обнаружено переполнение буфера
  • Сообщает в журнал событий Windows® в случае обнаружения переполнения
  • Позволяет определить область защиты либо для защиты только определенных приложений, либо для исключения определенных приложений или диапазонов памяти из защиты
  • Использует аппаратную технологию Intel XD/AMD NX, если она доступна
  • SMP поддержка
  • Рандомизация размещения адресного пространства (ASLR)

BufferShield поддерживает следующие операционные системы:

  • Рабочая станция Microsoft Windows® NT 4. 0
  • Сервер Microsoft Windows® NT 4.0
  • Microsoft Windows® NT 4.0 Server Enterprise Edition
  • Microsoft Windows® NT 4.0 Terminal Server Edition
  • Microsoft Windows® 2000 Профессиональная
  • Microsoft Windows® 2000 Сервер
  • Расширенный сервер Microsoft Windows® 2000
  • Microsoft Windows® XP Профессиональная
  • Microsoft Windows® XP Home Edition
  • Microsoft Windows® 2003 Server Standard Edition
  • Microsoft Windows® 2003 Small Business Server
  • Microsoft Windows® 2003 Server Enterprise Edition
  • Microsoft Windows® 2003 Server Web Edition
  • Microsoft Windows® 2003 Datacenter Edition

BufferShield совместим с такими антивирусными программами, как:

  • Symantec Norton AntiVirus™
  • Антивирус Касперского
  • CA EZ Антивирус
  • G Data AntiVirenKit
  • Trendmicro PC-cillin Internet Security
  • . ..

BufferShield в настоящее время несовместим с VMWare, Microsoft Virtual PC и Virtual Server 2005 R2

Переполнение буфера | Компьютерный мир

Практическое руководство

Соавтор, Компьютерный мир |

Разве хорошего может быть слишком много? Это, безусловно, верно для компьютерного ввода. Выполните поиск в Интернете по термину переполнение буфера, и вы найдете сотни тысяч ссылок, в основном связанных с безопасностью.

В индексе компьютерных уязвимостей ICAT Национального института стандартов и технологий (http://icat.nist.gov) шесть из десяти основных связаны с переполнением буфера. В 1999 году ныне не существующая исследовательская фирма Hurwitz Group Inc. назвала переполнение буфера компьютерной уязвимостью №1. Четыре года спустя, это все еще серьезная проблема.

Подробнее

Computerworld
QuickStudies

Если вы когда-нибудь наливали галлон воды в кастрюлю размером с пинту, вы знаете, что означает перелив — вода разливается повсюду.

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

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

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

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

Плохое программирование

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

Некоторые языки программирования невосприимчивы к переполнению буфера: Perl автоматически изменяет размеры массивов, а Ada95 обнаруживает и предотвращает переполнение буфера. Однако C — наиболее широко используемый сегодня язык программирования — не имеет встроенной проверки границ, а программы на C часто пишут после конца массива символов.

Кроме того, в стандартной библиотеке C есть много функций для копирования или добавления строк, которые не проверяют границы. C++ немного лучше, но все же может вызывать переполнение буфера.

Cracker’s Choice

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

В июле 2000 года было обнаружено, что Microsoft Outlook и Outlook Express позволяют злоумышленникам компрометировать целевые компьютеры, просто отправляя сообщения электронной почты. Никто даже не должен был открывать сообщение; как только пользователь загружал сообщение, в действие вступали процедуры обработки заголовков сообщений — с непроверенными буферами, которые могли переполниться и вызвать выполнение кода. С тех пор Microsoft создала патч, устраняющий уязвимость.

Кей является писателем Computerworld в Вустере, штат Массачусетс. Свяжитесь с ним по адресу [email protected].

См. дополнительные материалы Computerworld QuickStudies

Советы экспертов по безопасности

Истории в этом отчете:

  • Примечание редактора: Советы1 от профессионалов в области безопасности 914
  • История на данный момент: ИТ-безопасность
  • Знай своих пользователей: правильное управление идентификацией
  • Мнение: чувство неуверенности в отношении баз данных
  • Оценка партнеров по аутсорсингу
  • Усиление безопасности во время слияний
  • Пресечение злоупотреблений со стороны инсайдеров
  • Защита конфиденциальности, шаг за шагом
  • Закройте бреши в системе обмена мгновенными сообщениями
  • Повышайте свою карьеру в сфере безопасности
  • Альманах: ИТ-безопасность
  • Переполнение буфера
  • Следующая глава: ИТ-безопасность
  • Предотвращение атак на веб-серверы Apache
  • Советы по обеспечению безопасности операционной системы Windows
  • Беспроводной набор инструментов хакера, часть 1
  • Как защититься от внутренних угроз безопасности
  • Десять способов защиты от вирусов
  • Декодирование безопасности мобильных устройств
  • Пять способов предотвратить угрозы вашей сети
  • Секреты лучших паролей
  • Социальная инженерия: вопрос доверия
  • Пять советов по эффективному управлению исправлениями
  • Основы безопасности: с чего начать
  • Шаги к безопасной операционной системе
  • Наборы микросхем
  • WLAN открывают новую дверь к незащищенности

Связанный:

  • Безопасность

Copyright © 2003 IDG Communications, Inc.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *