Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3204

.pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
3.44 Mб
Скачать

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

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

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

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

2.4.6. Другие уязвимости

Уязвимость program.exe

Как известно, большинство прикладных программ Windows по умолчанию устанавливаются в каталог C:\Program Files. Имя данного каталога содержит пробел и поэтому при

151

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

C:\Program Files\Application Name\Program Name.exe

следующим образом:

-имя программы C:\Program.exe;

-«хвост» командной строки FilesVApplication NameVProgram Name.exe.

Если программа C:\Program. exe не обнаружена, Windows пробует интерпретацию:

-имя программы C:\Program Files\Application.exe;

-«хвост» командной строки NameVProgram Name.exe,

затем интерпретацию:

-имя программы CVVProgram FilesVApplication NameVProgram.exe;

-«хвост» командной строки Name.exe

и только после этого правильную интерпретацию:

-имя программы CVVProgram FilesVApplication NameVProgram Name.exe;

-«хвост» командной строки отсутствует.

Данная ситуация подробно описана в MSDN (mshelp://MS. MSDNQTR.2003JUL.1033/dllproc/base/createprocess.htm) и,

строго говоря, не является уязвимостью Windows. Большинство прикладных и системных программ, вызывая дочерние приложения посредством функции CreateProcess или ее «оберток», корректно используют кавычки, когда это необходимо. Однако некоторые программные пакеты «забывают» использовать кавычки при порождении дочерних процессов, из-за чего в результате вызова CreateProcess может быть запущена совсем другая программа.

Для эксплуатации данной уязвимости достаточно просто создать на жестком диске компьютера исполняемый файл с именем С:\Program.exe. Если в операционной системе присутствует один или несколько уязвимых программных

152

продуктов, то рано или поздно данный файл будет запущен.

На сайте Microsoft опубликован список уязвимых приложений, в их число входят Real Player, Антивирус Касперского и Microsoft AntiSpyWare. Однако этот список далеко не полон. Интересно, что в программном пакете Compuware Driver Studio присутствует аналогичная уязвимость driver.exe.

Водном из пакетов обновления, выпущенных Microsoft

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

2.5.Методы внедрения программных закладок

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

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

153

Формально внедрение программной закладки в атакуемую систему описывается следующим образом:

Stream (Sp Op1–►CTI3/ Create (Ss, On3)->Sn3)

где Sj – субъект, осуществляющий внедрение закладки; Oi – дистрибутив закладки; Оиз – объект – источник закладки (объект, содержащий код программной закладки); Ss – субъект, осуществляющий старт закладки; SU3 – активная программная закладка.

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

Методы внедрения программных закладок в компьютерные системы удобно классифицировать по следующим признакам:

типу SU3 – прикладная или системная программа (в том числе ядро операционной системы);

характеру воздействия на Оиз – создание нового объекта, полная подмена существующего объекта или частичное изменение существующего объекта;

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

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

154

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

Разнообразные методы внедрения программных закладок в операционные системы, описанные в литературе, фактически сводятся к пяти основным методам:

1)маскировка программной закладки под прикладное программное обеспечение;

2)маскировка программной закладки под системное программное обеспечение;

3)подмена программной закладкой системного программного обеспечения;

4)прямое ассоциирование;

5)косвенное ассоциирование.

Взаимосвязи между этими методами приведены на рис. 2.4.

Рис. 2.4. Классификация методов внедрения программных закладок

155

Маскировка программной закладки под прикладное программное обеспечение

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

Опз – файл.

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

документы Microsoft Office, содержащие макросы, активизирую щие закладку;

документы в формате HTML (в том числе и письма электронной почты), содержащие скрипты, активизирующие закладку;

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

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

закладка модели «перехват» или «искажение» могла

156

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

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

В качестве практического примера можно рассмотреть следующую многоступенчатую схему внедрения программной закладки.

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

2)При анализе веб-браузером тэга <OBJECT>, присутствующего в данной веб-странице, задействуется уязвимость браузера Object Tag Vulnerability (данная уязвимость устранена еще в 2003 г., она приводится исключительно как пример), в результате чего браузер несанкционированно и незаметно для пользователя обращается

кзаданному PHP-скрипту веб-сервера, контролируемого нарушителем.

157

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

4)В ходе загрузки НТА-страницы начинается интерпретация содержащегося в коде страницы скрипта на языке VBScript. Данный скрипт выполняет следующие действия:

извлекает из НТА-страницы преобразованный к текстовому виду (например, с помощью преобразования Base64) образ основного исполняемого файла внедряемой закладки;

распаковывает этот образ и записывает результат распаковки во временный файл на жестком диске атакованного компьютера;

запускает на выполнение этот временный файл.

5)Внедренная программная закладка выполняет сканирование программного обеспечения и политики безопасности атакуемой системы на предмет критических уязвимостей, которые закладка способна эксплуатировать. Первая же обнаруженная уязвимость эксплуатируется, в результате чего закладка получает в атакуемой системе административные полномочия.

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

В рассмотренном случае внедряемая программная закладка проходит через различные стадии жизненного цикла:

некорректная ссылка внутри веб-страницы в формате HTML;

некорректный HTTP-ответ, сформированный вебсервером, контролируемым нарушителем;

некорректный скрипт внутри веб-страницы в формате НТА;

158

процесс, выполняющийся с полномочиями обычного пользователя;

процесс, выполняющийся с полномочиями администратора операционной системы.

Обычно количество принципиально различных стадий жизненного цикла, которые проходит закладка в ходе внедрения, значительно меньше и редко превышает 2 – 3. Интересно, что здесь прослеживается аналогия с процедурами размножения биологических паразитов (например, гельминтов), многие из которых в ходе жизненного цикла испытывают метаморфозы, в результате которых структура и функциональность организма меняются коренным образом. У некоторых организмов такие метаморфозы происходят на протяжении жизни несколько раз.

Маскировка программной закладки под системное программное обеспечение

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

Здесь Sn3 – системная программа, Ош – новый файл.

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

159

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

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

В Windows данный метод внедрения программной закладки обычно реализуется посредством несанкционированного создания сервиса. При этом инсталлятор сервиса часто включается непосредственно во внедряемую закладку. Таким образом, в первый раз закладка запускается как прикладная программа, и если у нее имеются необходимые полномочия, она инсталлирует и запускает свою копию в виде сервиса, а затем завершает работу. На языке С это выглядит примерно так:

linclude <windows.h>

//Здесь начинается код, необходимый для того, чтобы

//Windows

//поверила, что программа реально является работоспо-

//собным

//сервисом

SERVICE JTABLE_ENTRY DispatchTable[2]; void _stdcall Servicelnit2 (DWORD

160

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]