`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Nozzle – перспективная защита от атак на память

Статья опубликована в №1-2 (713) от 26 января

+22
голоса

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

Nozzle – перспективная защита от атак на память
Лучший способ защититься от возможных уязвимостей – отключить всю неактуальную или редко используемую функциональность, особенно связанную с исполнением стороннего кода. Например, JavaScript в Adobe Reader в основном применяется в работе с заполняемыми формами, и его можно включать лишь при реальной необходимости. Но в случае с браузерами такой метод, очевидно, вряд ли годится, потому-то разработчики и ломают голову над хитрыми технологиями...

Внедрение вредоносного кода посредством атаки на память приложения имеет достаточно долгую по меркам ИТ историю – впервые переполнение буфера (оно возникает при отсутствии проверки выхода за границы области) было использовано в «черве» Морриса еще в 1988 г. Таким образом, искажается содержимое переменных состояния и параметров программы, в результате чего удается передать управление вредоносному коду. По мере эволюции языков программирования, с появлением автоматических средств предотвращения переполнения буфера эффективность подобных атак была существенно нивелирована, и, естественно, стали активнее использоваться другие уязвимости. Вместо размещения вредоносных инструкций в буфере атакующие нашли способы их внедрения в так называемые кучи (heap), т. е. области динамически распределяемой памяти программ. Современные ОС также применяют различные технологии защиты от подобных атак. К примеру, в Windows Vista появился механизм Address Space Layout Randomization, при каждом включении ПК размещающий важные системные файлы в новых областях памяти.

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

Сегодня многие веб-страницы содержат JavaScript, т. е. исполняемый код. Именно поэтому JavaScript особенно часто используется для размещения копий вредоносных объектов и инициализации их исполнения через известные уязвимости браузеров. С точки зрения хакеров атаки типа heap spray чрезвычайно легки в реализации – по сути, необходим всего один цикл на JavaScript для «распыления» вредоносных объектов в куче и исполняемый код буквально в одну строку.

Кстати, браузеры – не единственные приложения, которые позволяют провести подобного рода вторжения, фактически любая программа, допускающая выполнение кода JavaScript, может оказаться уязвимой. Другим примером служат Adobe Reader и Acrobat, хотя многие ошибочно считают PDF-файлы совершенно «пассивными», предназначенными только для чтения. Буквально при подготовке этой статьи пришло сообщение об очередной такой уязвимости (www.adobe.com/support/security/advisories/apsa09-07.html), основанной именно на JavaScript и уже популярной in wild.

Занимаясь проблемой защиты браузеров, ученые из Microsoft Research Бен Зорн (Ben Zorn) и Бен Лившиц (Ben Livshits) в сотрудничестве с Паружем Ратанаворабханом (Paruj Ratanaworabhan) из Университета Корнелла создали инфраструктуру мониторинга Nozzle, которая отслеживает переполнение кучи подозрительными объектами, повышающими число ошибок в памяти уязвимых приложений.

Концептуально решение достаточно простое – проверить все содержащиеся в куче объекты, выявить вредоносные и изолировать их. Но проблема в том, что зачастую в x86-системах данные выглядят как код, а код мимикрирует под данные, к тому же полиморфность JavaScript-«червей» делает сигнатурные методы идентификации неэффективными. Поэтому разработчики использовали характерную поведенческую особенность вредоносного кода: как правило, его конечная цель – попасть в резидентный системный код (скажем, explorer.exe в случае Windows), что сразу предоставит взломщику широкий выбор возможностей.

На уровне отдельного объекта кучи Nozzle обнаруживает NOP (пустые машинные команды, не выполняющие никаких действий), обилие которых в реальных программах не является нормой. Считается, что если объект ничего не делает 10% времени, вероятнее всего, он представляет опасность для пользователя. Находящийся в объекте исполняемый код может содержать комбинации случайных инструкций (не только NOP), а злоумышленники рассчитывают на то, что код будет исполнен при случайном переходе в конкретную область памяти (т. е. не могут его шифровать). Эмулятор Nozzle интерпретирует код данного объекта в безопасной среде («песочнице»), строит диаграмму потока команд управления и идентифицирует другие объекты, которые могут быть достигнуты в результате. Если среди последних, независимо от точки входа, всегда оказывается резидентный системный код, объект считается подозрительным. При мониторинге потоков управления Nozzle использует подход на основе выявления присоединенных данных.

К сожалению, в исходном виде описанная методика дает достаточно высокий уровень ложных срабатываний, поэтому ученые дополнительно предложили специальные глобальные метрики, характеризующие «здоровье» кучи приложения. Для того чтобы атака типа heap spray была успешной, необходимо разместить в куче как можно больше вредоносных объектов, следовательно, при вторжении их число скачкообразно растет, и динамически распределяемая память загружается максимально полно. Кроме того, надежным показателем атаки является высокая плотность объектов, идентифицируемых как подозрительные. Nozzle считает, что атака имеет место, когда обе характеристики – заполненность кучи и плотность подозрительных объектов – превышают некие установленные значения.

Разработчиками было проведено комплексное тестирование Nozzle с браузером Mozilla Firefox 2.0.0.16 (Microsoft давно не отрицает определенных достоинств открытого ПО) – система идентифицировала 100% атак heap spray, которые проводились с использованием 12 известных и 2 тыс. искусственно созданных уязвимостей. При тестировании на 150 популярных интернет-ресурсах Nozzle демонстрировала отсутствие ложных срабатываний даже при установке порогов глобальных метрик в 6 раз меньше обычных. Тестирование Nozzle на Adobe Reader (без специальной адаптации) также дало 100%-ный результат, и можно предположить, что инструмент способен работать с любым приложением, допускающим включение JavaScript.

Следует отметить, что Nozzle разрабатывалась в первую очередь с прицелом на конкурентный рынок браузеров, поэтому одним из важнейших требований к системе мониторинга являлось ее быстродействие. Однако, как показало первоначальное тестирование, при проверке всех объектов кучи Nozzle замедляет работу браузера в 2–14 раз, что совершенно неприемлемо. Поэтому были дополнительно реализованы параллельное сканирование и мониторинг на основе выборок – в этом случае, ненамного проигрывая в надежности, система замедляет работу браузеров лишь на 7%, а Adobe Reader – на 8%.

И все же создатели Nozzle не считают ее панацеей от heap spray-атак, а в качестве главного достоинства рассматривают применение совершенно иных подходов, чем в традиционных средствах защиты. При использовании метода динамической компиляции JIT-код помещается непосредственно в кучу, и запретить его исполнение не всегда возможно. В 2008 г. другими исследователями была описана spray-атака, в которой вредоносный код помещался в адресное пространство процесса через встроенные пользовательские элементы управления .NET, неподвластные системным механизмам Data Execution Prevention (DEP). Поэтому Nozzle может оказаться полезной и эффективной именно там, где DEP не работает.

Нужно также отметить, что Nozzle не лишена недостатков, в частности выполняет сканирование объектов по расписанию, а значит, программа остается уязвимой в промежутках между ними. Пороговые стратегии дают возможность атакующему избежать обнаружения за счет уменьшения числа вредоносных объектов (хотя, по оценкам разработчиков, порог в 50% является минимально возможным – меньшее число просто не даст достаточного количества успешных атак ПК и сделает heap spray экономически неэффективной). Могут найтись способы атаковать кучу и без цепочек NOP, с использованием переходов между инфицированными объектами и пр. Не приходится сомневаться, что рано или поздно хакеры научатся обходить Nozzle, как нельзя исключить и того, что развитие подобных технологий противодействия когда-то сделает атаки heap spray бесполезными. Но тогда обязательно появится что-то новое, и гонка продолжится...

+22
голоса

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT