Стандартными средствами обнаружить программу-невидимку достаточно сложно, поскольку она скрывает основные каналы поиска аномалий в файлах, в поведении процессов и в реестре. Однако нельзя сказать, что ее вообще невозможно обнаружить, — на рынке уже появилось ПО для поиска и удаления известных утилит скрытого управления. В основном они предназначены для Unix, поскольку проблемы с «невидимками» там возникли раньше. Тем не менее для Windows также начинают появляться аналогичные программы
Утилита скрытого управления (rootkit) — это программа или набор программ, которые стараются скрыть свое присутствие после установки на компьютер. Она обычно маскируется, перехватывая системные вызовы операционной системы и фильтруя результаты их работы. Между тем эта утилита позволяет удаленно и скрыто управлять атакованной системой

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

Однако и раньше программы-невидимки, или rootkit, были в свободном доступе и даже с открытыми кодами. Самой известной из таких программ является Hacker Defender. Эта утилита успешно скрывалась от наблюдения антивируса даже под теми операционными системами, коды которых не попадали в руки хакеров. Дело в том, что для написания программы-невидимки нужно знать то, что и так открыто, — интерфейс системных вызовов.

Невидимость...

Однако прежде, чем мы приступим к анализу методов сокрытия программ и файлов в Windows, следует несколько слов сказать про историю развития rootkit. Само это слово означает «набор инструментов для администратора», и первые такие наборы появились для операционной системы Unix. Были утилиты для скрытия файлов, чистки системного журнала, фильтрации выдачи системной утилиты ls, с помощью которой выводится список файлов, и другие полезные для хакера средства скрытия своего присутствия на захваченном компьютере. Однако со временем все утилиты были объединены в одну, которая позволяла отвести глаза системного администратора от подозрительных файлов, потоков и сетевых соединений. Эти утилиты совершенствовались под Unix и Linux, а несколько лет назад были разработаны и для Windows.

Основной метод, который применяют программы-невидимки, это фильтрация результата выдачи системных вызовов или же изменение данных самого ядра операционной системы. Собственно, есть два типа «невидимок»: действующие на уровне пользователя и на уровне ядра. В первом случае программа внедряется в функции, которые обращаются к системным вызовам, например NtQuerySystemInfor?mation, однако они обнаруживаются в том случае, если приложение обращается к системному вызову напрямую. Понятно, что создатели «невидимок» на этом не остановились и разработали методы подмены системных вызовов. Такие программы-призраки действуют уже на уровне ядра. Однако есть и такие программы, которые работают еще ниже — они меняют данные самого ядра операционной системы; эта техника называется Direct Kernel Object Manipulation (DKOM).

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

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

Метод манипулирования объектами ядра можно использовать, например, для скрытия процессов. Дело в том, что в Windows есть определенная избыточность. В частности, эта операционная система имеет две структуры данных, которые содержат сведения о работающих потоках. Одна из них, EPROCESS, представляет собой двусторонний связанный список, содержащий сведения о процессах и привязанных к ним потоках, — именно она возвращается в утилиты показа сведений о процессах. Однако для планирования исполнения процессов планировщик ОС использует другой двусторонний список, KPROCESS, который содержит сведения обо всех потоках. Кроме этих объектов, программа-невидимка может манипулировать маркерами доступа или скрывать открытые порты. Такие «невидимки» пока не реализованы в виде готовых утилит, а представляют собой так называемые «эксплойты» для встраивания в сторонние приложения.

...и обнаружение

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

Второй метод обнаружения, более надежный и сейчас приобретающий все большую популярность, предложила Анна Рутковска, выступая на конференции ITUunderground Conference в октябре 2004 года в Варшаве. Этот метод основан на том, что программа-невидимка манипулирует с определенным набором системных вызовов. То есть для ее выявления достаточно проанализировать соответствующие системные вызовы и сравнить их с некоторым эталоном. Для ядра Linux компилятор, который собирает ядро, создает таблицу системных вызовов, и если в работающем ядре есть несоответствие с этой таблицей, значит, здесь поработала программа-невидимка. Поскольку Windows собирает и компилирует Microsoft, то таблицы системных вызовов в рамках одной версии должны быть одинаковы, и, анализируя их, также можно обнаружить «невидимку».

Есть еще один метод поиска таких программ — анализ скорости исполнения системных вызовов. «Невидимка» добавляет несколько собственных проверок в системный вызов, поэтому по увеличению времени работы системной функции можно определить, встроен ли в нее rootkit. Впрочем, у этого метода велика вероятность ложного срабатывания, поскольку методы встраивания, используемые rootkit, применяются вполне легальными средствами защиты и мониторинга. К тому же два последних метода не увидят DKOM-невидимок — для их обнаружения нужно анализировать объекты данных операционной системы.

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

Избавиться от призраков

Войну rootkit объявила полька Анна Рутковска, которая открыла для этих целей специальный сайт www.invisiblethings.org. На нем описывается, как можно своими силами избавиться от призраков в компьютере. Основным инструментом для этого является отладчик Livekd, который позволяет оперативно анализировать состояние библиотек и ядра операционной системы, таким образом, искать признаки перехвата функций, работающих с системными вызовами. Он также позволяет определять изменения таблицы системных вызовов, выявляя «ядерные» невидимки. Анна описывает сценарий, с помощью которого можно выявить DKOM-невидимки.

Рутковска разработала две утилиты для поиска призраков: patchfinder и klister. Первая обнаруживает «невидимок» по количеству инструкций процессора, которые нужны для выполнения той или иной системной функции. Утилита klister определяет процессы, спрятанные с помощью DKOM-метода модификации списка EPROCESS. Кроме ее утилит, есть детектор невидимок RKdetector, который может в том числе обнаруживать и спрятанные файлы.

На рынке уже появились программы для поиска и удаления известных утилит скрытого управления. В основном они предназначены для ОС Unix, поскольку проблемы с «невидимками» там возникли раньше. Тем не менее для Windows также начинают появляться аналогичные программы. Например, сканер rkdscan может обнаруживать Hacker Defender. Вполне возможно, что средства обнаружения «невидимок» появятся и в составе антивирусов, поскольку методы поиска вирусов можно применять и для отражения этой напасти. Механизм поиска «невидимок» будет включен и в детектор XSpider, разрабатываемый компанией Positive Technologies. Впрочем, методы обнаружения «невидимок» принципиально отличаются от тех, что применяются в антивирусах и детекторах дефектов, что приведет, скорее всего, к появлению специализированных решений, объединяющих несколько методов детектирования.


Скрытое управление от "Святого отца"

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

Автор утилиты скрытого управления Hacker Defender, называющий себя Holy Father («Святой отец»), отказался назвать свое настоящее имя и отклонил предложение телефонной беседы, но сообщил, что живет в Чехии. Web-сайт его программы (http://hxdef.czweb.org) зарегистрирован в Праге на имя Яромира Лненички. Его онлайновый псевдоним отражает желание творить «большие дела» в компьютерном подполье, и в этом отношении он преуспевает. Написанная в соавторстве с одним из членов хакерской группы 29a, программа Hacker Defender, по его словам, была загружена более 100 тыс. раз и привлекла внимание специалистов по безопасности в Microsoft и других ведущих ИТ-компаниях.

Расскажите о себе. Как вы начали писать программы для взломщиков?

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

Писали ли вы раньше вирусы или троянские программы? Разрабатывали ли вы другие виды программ?

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

На коммерческой основе — для кого или для чего?

Я программист. Это означает, что меня нанимают, чтобы что-нибудь запрограммировать. Я принимаю или отклоняю их предложения. Программы, связанные с безопасностью (включая «троянцев», вирусы и программы-шпионы) — вот что я могу написать, и обычно не отказываюсь это делать. Для кого? Для тех, кому они нужны и кто согласен за это платить.

Какую цель вы ставили перед собой при разработке Hacker Defender?

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

Какие разработки легли в основу Hacker Defender?

Когда началась работа над Hacker Defender, была только одна утилита скрытого управления, внедряющаяся в ядро операционной системы, которая была создана Грегом Хогландом, соавтором книги Exploiting Software: How to Break Code. Но эта утилита предназначалась для других целей, и можно сказать, что Hacker Defender сам является образцом для множества подобных программ.

Какие новые функции вы добавили в Hacker Defender?

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

Последняя версия Hacker Defender появилась год назад. Каковы ваши планы относительно следующей?

У меня были планы, но они изменились, и сейчас я не склонен заниматься новыми версиями.

Как бы вы охарактеризовали сообщество программистов, разрабатывающих программы для взлома? Насколько оно отличается от сообщества, создающего вирусы? Занимается ли кто-нибудь и тем и другим или эти сообщества полностью отделены друг от друга?

Я знаю только два сообщества, работающих над программами для взлома, — одно на www.rootkit.com, а второе на моем собственном сайте. С вирусами дело обстоит совершенно иначе. Есть множество групп, выпускающих вирусы. Разумеется, кто пишет утилиты скрытого управления, тот пишет и вирусы. Наше сообщество насчитывает всего несколько человек, которые изучают ядро операционной системы и реализуют такие вещи, которых раньше никто не делал. Это же можно сказать и в отношении сообщества разработчиков вирусов.

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

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

Насколько легко обмануть современные антивирусы?

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

Что должны сделать поставщики систем безопасности для противостояния скрытому управлению на уровне ядра?

Все, что нужно, они уже знают, и их инструменты прекрасно работают. Проблема в том, что всегда можно написать «антикод». Если кто-то написал вирус, вы можете написать антивирус, как это обычно и делается. Точно так же и с утилитой скрытого управления. Вы можете написать детектор, я могу написать новую утилиту, которая будет скрываться от этого детектора.

Недавно еще несколько компаний обнародовали программы борьбы с утилитами скрытого управления. Как вы к этому относитесь?

Я совершенно уверен, что новые детекторы смогут обнаружить утилиту Hacker Defender, поскольку, как вы знаете, он не обновлялся более года... Но меня могут попросить о выпуске новой версии, которая справится с этими детекторами.

Пол Робертс,

Служба новостей IDG, Бостон