На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Использование существующего кода или блоков данных в памяти

ЕСЛИ хакер хочет использовать регистр для вызова полезной нагрузки, он должен разместить набор команд, которые отвечают за выполнение технических задач. Затем хакер жестко кодирует адрес, где хранятся эти команды. Любой набор байтов может быть расценен атакуемым процессором как команды, поэтому хакеру вовсе необязательно заниматься поиском действительного блока кода. На самом деле хакеру достаточно найти только набор байтов, которые при определенных условиях будут интерпретированы как интересующие его команды. Заметим, что для этого подойдут любые байты. Хакер может даже выполнить операцию, которая вставит эти байты в надежную область. Например, хакер отправит приложению запрос в виде строки символов, который будет интерпретирован как машинный код. В векторе вторжения будет жестко закодирован адрес, где сохранен этот запрос (при этом сохранение происходит совершенно законно), а затем этот запрос будет использован для неблаговидных целей.
Переполнение буфера и встроенные системы
Встроенные системы существуют повсюду и к ним относятся все типы устройств, которые мы используем ежедневно: сетевое оборудование, принтеры, мобильные телефоны и другие небольшие устройства. Неудивительно, что программный код, с помощью которого осуществляется управление этими встроенными системами, особенно уязвим для атак на переполнение буфера. Из этого факта следует любопытный вывод: в то время, как серверное программное обеспечение становится все более устойчивым против атак на переполнение буфера, сегодня основной акцент этих атак смещается на программное обеспечение для встроенных систем.
Встроенные системы запускаются на самых различных аппаратных платформах. В большинстве таких систем для хранения данных используется технология NVRAM. В этом разделе мы рассмотрим множество атак на переполнение буфера против встроенных систем.

Встроенные системы, используемые в военной и коммерческой сферах
Встроенные системы широко распространены в современных платформах устройств военного предназначения начиная от систем связи и заканчивая радарными сетями. Удачным примером стандартной военной системы, в которой используются многочисленные встроенные возможности, является радарная система AN/SPS-73. Эта радарная система работает под управлением защищенной системы VxWorks (стандартной, коммерческой, встроенной операционной системы для работы в реальном времени). Как и в большинстве коммерческих систем с закрытым исходным кодом, в операционной системе VxWorks и связанном с ней программном коде есть достаточно много ошибок, позволяющих проводить атаки на переполнение буфера. Большинство этих уязвимых мест могут быть использованы без аутентификации, например, с помощью RPC-пакетов. Таким образом, оборудование со встроенными системами является не менее привлекательной целью для атак, чем обычное программное обеспечение.
Чтобы понять всю серьезность проблемы, рассмотрим следующий сценарий.
Встроенные системы как цели атаки
Как известно, Турция, в силу своего географического положения, играет немаловажную роль в экспорте каспийской нефти с помощью танкеров. Правда, перевозка нефти осуществляется через очень узкие проливы (причем их длина составляет около 300 км). Чтобы остано­вить поставки нефти из Каспийского моря на несколько дней, хакеру достаточно провести удаленную атаку на компьютер, отвечающий за навигацию танкеров, и спровоцировать аварийную ситуацию.
Такая гипотетическая атака не так уж* далека от реальности, как может показаться на первый взгляд. На современных танкерах установлены автоматические системы навигации" которые связаны с глобальной системой VTMIS (Vessel Traffic Management Information System). Эта интегрированная система призвана облегчить работу капитана при плохих погодных условиях, встречном движении и возможных аварийных ситуациях. Для доступа ко всем управляющим функциям этой системы требуется пройти аутентификацию. Однако эта же система VTMIS поддерживает также функции отслеживания информации и отправки сообщений, для доступа к которым не требуется ни имени пользователя, ни пароля. Запросы принимаются протоколом и затем обрабатываются внешним программным модулем. Данное программное обеспечение было написано на языке С, и система навигации уязвима для атак на переполнение буфера, которые позволяют обойти стандартную процедуру аутентификации т.е, хакер может использовать классические ошибки для загрузки новой программы управления танкером.
Хотя для обеспечения безопасности в программе навигации доступно множество возможностей для переключения на ручное управление, но опытный хакер имеет хорошие шансы для создания серьезной аварии танкера, внедрив вредоносную программу в управляющее оборудование танкера, особенно если такое внедрение происходит при прохождении кораблем опасного участка пути. Любая аварийная ситуация на танкере может привести к утечке тысяч галлонов нефти в узком проливе и, как следствие, блокированию пути сообщения на несколько дней (и действительно, проливы Турции настолько опасны для навигации, что происходит значительное количество аварий и без атак хакеров).

И все же довольно распространенным является мнение, что встроенные системы неуязвимы для удаленных атак, что якобы из-за отсутствия в устройстве интерактивного командного интерпретатора доступ или использование "кода командного интерпретатора" невозможно. Вот почему многие люди (ошибочно) поясняют, что самое худшее, на что способны хакеры в данном случае, — это вывести из строя управляемое ими устройство. На самом деле внедренный код способен выполнить любой набор команд, включая полную программу командного интерпретатора, которая упакована для удобного использования, поддерживая функции уровня операционной системы. Не имеет никакого значения тот факт, что этот код не поставляется вместе с устройством. Очевидно, что этот код может быть просто добавлен в атакуемое устройство во время атаки. Другими словами, при подобных атаках совсем не требуется наличие полнофункционального интерактивного командного интерпретатора TCP/IP. Вм.есто этого при атаке может полностью стираться конфигурационный файл или тодаеняться пароль.
Существует множество сложных программ, которые могут быть установлены в ходе удаленных атак на встроенную систему. Код командного интерпретатора является только одним из вариантов. Даже код самых необычных устройств может быть восстановлен, выполнена его отладка и исследование. Вовсе неважно, какой используется процессор или схема адресации, поскольку хакеру нужно только создать действующий код для атакуемых аппаратных средств. В основном, аппаратные средства со встроенным программным обеспечением хорошо документированы и эта документация является общедоступной.
Правда, определенные типы важных устройств не подключены непосредственно к сетям, к которым имеют доступ потенциальные хакеры. Например, к Internet не подключены устройства наведения баллистических ядерных ракет, средства противовоздушной обороны и устройства запуска ракет. *
Переполнение буфера в маршрутизаторе Cisco на основе процессора Motorola
Исследовательская группа по проблемам безопасности Phenoelit создала программу с кодом командного интерпретатора для проведения удаленной атаки на маршрутизатор Cisco 1600 на основе процессора Motorola 68360 QUICC (программа была представлена на азиатской конференции Blackhat в 2002 году). Для этой атаки в векторе вторжения используется переполнение буфера в операционной системе IOS от Cisco и несколько новых методов использования структур управления кучей в IOS. Изменяя структуры кучи, можно внедрить и исполнить вредоносный код. В опубликованном варианте атаки код командного интерпретатора представляет собой созданный вручную код в виде машинных команд Motorola, который открывает потайной ход на маршрутизаторе. Этим кодом можно воспользоваться при наличии любого переполнения буфера в устройствах Cisco5.

Переполнения буфера в системах управления базами данных
Системы управления базами данных (СУБД) нередко бывают наиболее дорогостоящими и наиболее важными частями крупных корпоративных систем, работающих в реальном времени, что делает их целью вероятных атак. Некоторые сомневаются в том, что системы управления базами данных уязвимы для атак на переполнение буфера, но это правда. Используя стандартные операторы SQL, в этом разделе мы продемонстрируем, как некоторые атаки на переполнение буфера работают в среде баз данных.
В любой системе управления базами данных существует несколько точек для проведения атак. Крупное приложение для работы с базой данных состоит из бесчисленного количества взаимодействующих компонентов. В их число входят сценарии (объединяющие различные части приложения воедино), программы для работы через интерфейс командной строки, хранимые процедуры и клиентские программы, непосредственно связанные с базой данных. Каждый из этих компонентов является потенциальным объектом для проведения атаки на переполнение буфера.
В самом коде системы управления базой данных могут быть ошибки анализатора и проблемы преобразования чисел со знаком и без, которые приводят к проблемам переполнения буфера. В качестве примера уязвимой платформы можно назвать SQL Server, в котором есть функция OpenDataSource (), уязвимая для атак на переполнение буфера6.
Атака на функцию OpenDataSource () была выполнена с помощью протокола транзакций SQL (T-SQL), для которого устанавливается привязка к ТСР-порту 1433. По существу, этот протокол позволяет многократно передавать анализатору операторы SQL. Например, для проведения этой атаки оператор SQL может выглядеть приблизительно следующим образом.
SELECT * FROM OpenDataSource("Microsoft.Jet.OLEDB.4.0","Data Source="c:\[NOP SLED Padding Here] [ Injected Return Address ] [ More padding][Payload]";User ID=Admin;Password=;Extended properties=Excel 5.0")...xactions'
В этом примере [NOP SLED], [Padding], [Return Address] и [Payload] представляют собой блоки кода, вставленные в обычную строку в формате Unicode.
Хранимые процедуры
Хранимые процедуры часто используются для передачи данных сценариям или библиотекам DLL. Если в сценарии или библиотеке DLL есть ошибки строки форматирования, или если в сценарии используются уязвимые вызовы библиотечных функций (вспомним хотя бы strcpyO или system ()), то появляется шанс использовать их в своих целях с помощью системы управления базой данных. Практически каждая хранимая процедура передает часть запроса. В данном случае хакер может использовать передаваемую часть запроса для переполнения буфера.
Хорошим примером может послужить давняя ошибка в Microsoft SQL Server. Злоумышленник мог вызвать переполнение буфера в коде, который обрабатывает расширенные хранимые процедуры'.
Программы с интерфейсом командной строки
Иногда сценарий или хранимая процедура вызывают программу с интерфейсом командной строки и подают ей на ввод данные из запроса. Во многих случаях это приводит к переполнению буфера или уязвимому месту с возможностью передачи команд. Кроме того, если в сценарии не используется библиотека API для работы с базой данных, то обычные операторы SQL могут быть переданы для обработки программе с интерфейсом командной строки. Это еще одна возможность для организации атаки на переполнение буфера.
Клиентские программы базы данных
Когда клиентская программа делает запрос, она обычно должна обработать полученный результат. Если хакер сможет исказить данные ответа на запрос, в клиентской программе возникнет ситуация переполнения буфера. Такие атаки очень эффективны, когда с базой данных одновременно работает большое количество пользователей. Тогда хакер одним махом способен скомпрометировать сотни клиентских компьютеров.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика