Исследование

Эволюция руткитов

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

Вступление

Мое первое знакомство с руткитами состоялось в 2004 году. Будучи совсем неопытным вирусным аналитиком и имея лишь смутные представления о руткитах для UNIX, я однажды наткнулась на исполняемый файл для Windows, который после запуска вроде бы никак не проявлял себя. Но что-то все-таки привлекло мое внимание, я стала смотреть внимательнее и… обнаружила в памяти компьютера загруженный модуль, отсутствующий на диске. (Очевидно, тот руткит содержал ошибки, поэтому мне посчастливилось случайно заметить его невооруженным взглядом – сейчас для обнаружения руткита может оказаться недостаточно нескольких специально разработанных утилит).

Это был далеко не первый Windows-руткит. Но для меня он открыл некий новый мир, в котором программа могла играть с операционной системой, нарушать ее правила и чудесным образом исчезать из списка процессов или файлов. Тогда я потратила много времени на изучение драйвера, при помощи которого программа скрывала свое присутствие в системе. Это был целевой руткит – написанный для конкретной системы и внедряемый точечно – и довольно сложный для тех времен (Trojan-Dropper.Win32.SmallProxy).

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

UNIX руткиты

Говоря о руткитах, непременно упоминают этимологию термина rootkit: “root” – привилегированный администратор UNIX-системы, “kit” – набор инструментов, rootkit – набор утилит для обеспечения «привилегированного» доступа злоумышленника к системе незаметно для настоящего администратора. Такие утилиты для UNIX появились в начале 90-х гг. и существуют до сих пор, но практически не развиваются.

Однако часто забывают о том, что у Windows-руткитов был более близкий по функционалу предшественник, чем UNIX-руткиты – а именно, стелс-вирусы для DOS.

Stealth-вирусы

Стелс-вирусы появились едва ли не раньше, чем UNIX-руткиты – около 1990 г. В отличие от UNIX-руткитов, основная задача которых – впустить злоумышленника в систему и маскировать его действия, стелс-вирусы DOS, заражая файлы, просто скрывали себя от пользователя и антивирусных программ. То же делает и современный Windows-руткит. Используемые стелс-вирусами и Windows-руткитом технологии также во многом схожи. Например, перехват системных вызовов и маскировка вредоносного кода посредством выдачи ложной информации о содержимом диска или памяти – одна из техник Windows-руткитов и преобладающая техника стелс-вирусов.

Windows-руткиты появились десятью годами позже стелс-вирусов, и то, что их назвали именно руткитами, а не стелс-вирусами, что было бы логичнее, – заслуга исключительно Грега Хогланда (Greg Hoglund). Он был одним из первых, кто реализовал появляющиеся тут и там техники обхода системных механизмов защиты Windows в форме утилиты, нацеленной на сокрытие информации в системе. Результаты его работы были опубликованы в электронном журнале PHRACK. Утилита, названная автором NT Rootkit, впоследствии была применена во многих вредоносных программах и по сей день вдохновляет исследователей и руткитостроителей.

Родоначальники и популяризаторы

Статья Хогланда датирована 1999 годом. В ней он опирается на исследования ядра Windows, опубликованные годом раньше в форумах Usenet неким программистом из Шри-Ланки.

Еще раньше, начиная с 1995, гуру Windows-программирования Джефри Рихтер (Jeffrey Richter) в своей знаменитой книге «Advanced Windows» и четвертом ее издании «Programming Applications for Microsoft Windows» раскрывает технологии перехвата системных вызовов на уровне пользователя [1], которые будут впоследствии использованы во многих руткитах с точностью до приведенного в книге исходного кода.

Техники перехвата системных вызовов на уровне ядра общедоступно раскрыты в двух других классических книгах по программированию: С. Шрайбер «Недокументированные возможности Windows 2000», 2001 (Sven Schreiber Undocumented Windows 2000 secrets) и П. Дабак и др. «Недокументированные возможности Windows NT», 1999 (P. Dabak et al Undocumented Windows NT).

Первые Windows-руткиты

Исследования системных механизмов защиты Windows продолжились, и вслед за NTRootkit было выпущено еще несколько утилит, позволяющих скрывать объекты в операционной системе.

2000 г. he4hook, проект русского программиста. Утилита не несет в себе вредоносного функционала, но является инструментом для сокрытия файлов. Работает в режиме ядра. Что характерно, самим автором не обозначается как руткит.
2002 г. Hacker Defender (он же HacDef). Это также лишь инструмент, но уже более мощный – при помощи него можно скрыть любой файл, процесс или ключ реестра, параметры гибко настраиваются в файле конфигурации. Работает преимущественно в режиме пользователя.
2003 г. Vanquish – инструмент, позволяющий скрывать файлы, директории и ключи реестра. Кроме того, в нем уже предусмотрена вредоносная функция – логгирование паролей. Работает в режиме пользователя [2].

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

2003 г. Haxdoor (он же A-311 Death и в модифицированном варианте Nuclear Grabber). Это уже не утилита, а полноценный бэкдор, использующий руткит-технологии для самомаскировки. Работает в режиме ядра.
2004 г. FU – утилита для скрытия процессов. Реализует принципиально новую технологию, основанную на изменении самих системных структур, а не путей доступа к ним.

Все перечисленные в этой мини-хронологии руткиты являются ключевыми в истории Windows-руткитов. Особенно стоит отметить HacDef, Haxdoor и FU, широко распространявшихся in the wild [3] в связке с вредоносными программами.

Руткиты этого периода (2000-2004) четко вписываются в общепринятую, но устаревшую классификацию: руткит может функционировать на уровне пользователя (user level) или на уровне ядра (kernel level), на основе модификации цепочки системных вызовов (Execution Path Modification) или на основе прямого изменения системных данных (Direct Kernel Objects Manipulation). Эта классификация многократно обсуждалась, поэтому приводить ее я здесь не буду; заинтересовавшиеся могут найти технические подробности в статьях моих коллегwww.securitylab.ru; http://z-oleg.com; www.securityfocus.com

.

Выход руткитов в массы

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

  • Троянцы, использующие для своей маскировки готовую утилиту или библиотеку. В качестве готовых утилит в основном использовались – очень и очень массово – Hacker Defender и FU.
  • Готовые руткиты-вредоносы, которые любой человек мог скачать или купить и слегка изменить в своих целях. Например, Haxdoor. Так же как и HacDef, он был очень популярен: осенью 2005 г. в базы Kaspersky Antivirus ежедневно добавляли по несколько сигнатур новых модификаций этого руткита.
  • Заказные разработки, предназначенные для точечного внедрения. Такие руткиты попадали в антивирусную лабораторию, как правило, из крупных организаций, часто в результате анализа компьютерных систем клиента на месте. Технология разработки этих руткитов была на очень высоком уровне, а количество – исчезающе мало.

В середине 2000-х порядка 80% всех руткитов приходилось на HacDef и Haxdoor.
Первыми среди уже существовавших вредоносных программ, куда начали встраиваться руткит-технологии, были многофункциональные бэкдоры Rbot и SdBot. Это и понятно – любое функциональное преимущество коммерческого троянца оборачивается выгодой для его хозяина, поэтому владельцы бот-сетей были первыми, кто подхватил новую технологию.

Немного позже – около 2006 г. – руткит-технологии начали встраивать в популярные e-mail-черви (Bagle) и троянцы-шпионы (Goldun), еще позже появился Mailbot (Rustock), оказавшийся серьезным вызовом для антивирусных продуктов.
К тому времени как использование руткит-технологий в троянцах стало обычным явлением, существовало уже несколько антируткит-утилит – равновесие было восстановлено.

Руткит-скандалы

В 2005 году руткит-технологии стали настолько широко применяться во вредоносных программах, что привлекли внимание крупных секьюрити-вендоров и СМИ. Специалисты из Microsoft подняли вопрос о руткит-угрозах на конференции RSA Security.

Один из показателей того, что к этому времени история руткит-технологий достигла пика, – серия скандалов 2006 года, связанных с тем, что в коммерческих продуктах использовались технологии, аналогичные руткит-технологиям.

  1. Обнаружилось, что установленная на некоторых CD защита от копирования Sony DRM прячет свои файлы от пользователя. Причем технология была внедрена таким образом, что создавала хорошую лазейку для злоумышленника: ему достаточно было поименовать любые свои файлы определенным образом, чтобы они автоматически оказались под прикрытием защиты Sony DRM.
  2. В продукте Symantec была обнаружена похожая функция – он использовал папку, скрытую от пользователя. Этот случай немного более смешной: «защищенная корзина» документирована Symantec, легко отключается, и идея прятать в ней файлы ненамного более интересна, чем идея прятать файлы в глубине структуры системных каталогов, куда никто никогда не заглядывает.
  3. Следующей жертвой тестов свеженаписанных антивирусных утилит оказался продукт Kaspersky Antivirus. Обнаружилось, что продукт хранит некоторую информацию в «стримах» файлов, т.е. в скрытых от пользователя участках файловой системы. Чем эта технология может угрожать пользователям, так и осталось загадкой, но слово «руткит» многих напугало.

Антируткит-истерия

Другая сторона истории с руткитами – антируткит-истерия. К середине 2006 г. все крупные производители антивирусов осознали необходимость реагировать на новую угрозу. Реагировали по-разному. Одни доработали технологии продуктов так, чтобы получать доступ к скрытым объектам в процессе обычного антивирусного сканирования. Другие выпускали отдельные антируткит-утилиты. Третьи делали нечто среднее – встраивали отдельную функцию антируткит-сканирования в интерфейс антивирусного продукта. Никто из поздно проснувшихся особенно не преуспел – все лишь догоняли уже ушедший поезд.

В связи с этой гонкой из крупных антивирусных производителей стоит отметить разве что F-Secure: их антируткит-утилита была одной из первых после Rootkit Revealer от Sysinternals. Она умела искать только скрытые процессы, зато основывалась на proof-of-concept-технологии.

Независимые антируткит-утилиты

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

Первые антируткит-утилиты были нацелены на выявление какого-то одного типа объектов – например, скрытых файлов. Впоследствии антируткиты становятся все более многофункциональными, использующими системный подход. На сегодняшний день наиболее полезные из утилит общего назначения, как показывает практика, – это GMER и Rootkit Unhooker. Они позволяют быстро и со всех сторон оценить ситуацию в подозрительной системе, а при необходимости можно исследовать ее более специализированными инструментами.

В настоящий момент существует пара десятков бесплатных антируткитов, основанных на нескольких подходах к детектированию руткитов (подробнее о подходах к детектированию см. http://z-oleg.com
, www.securityfocus.com). Одна из относительно новых тенденций в руткитостроительстве – использование технологии аппаратной виртуализации, и старым техникам она не под силу. В настоящее время полноценных антируткитов, которые могут детектировать руткиты, основанные на аппаратной виртуализации, нет. Несмотря на то что и реальных руткитов такого типа нет (только концептуальные разработки, которым далеко до практического воплощения во вредоносные программы), уже ведутся разработки технологий их детектирования. Мне известно два открытых проекта, посвященных разработке антируткита на основе аппаратной виртуализации: российский North Security Labs и американский Hypervista Technologies. На сайте второго только теоретическая информация, а в первом случае бета-версия продукта Hypersight Rootkit Detector доступна для скачивания, хотя и находится в зачаточной стадии развития.

Концепт-руткиты

К 2006 году большинство руткитов уже более или менее успешно обнаруживались расплодившимися к тому времени антируткитами; бум руткитов пошел на спад. Но пытливая исследовательская мысль продолжала поиск новых недетектируемых техник.

Больше всего энтузиазма вызывала идея использовать аппаратную виртуализацию, встраиваемую в новые процессоры от Intel и AMD, для того чтобы решить задачу перехвата управления операционной системой. При таком перехвате ни одна антируткит-утилита, известная на сегодняшний день, не может детектировать руткит. В течение 2006 года было представлено три таких концепции: SubVirt (pdf), BluePill (pdf)
и Vitrio (pdf). Сейчас детектирование этих руткитов считается открытой проблемой – но «в дикой природе» они не встречаются.

Второе направление исследований – загрузочные руткиты. Они решают все ту же задачу тотального управления операционной системой, перехватывая ее на стадии загрузки. Старая идея записывания кода в загрузочный сектор диска, известная еще со времен DOS-вирусов, возродилась в виде концептуального руткита eEye Bootroot (pdf) в 2005 году. Была еще одна похожая концепт-реализация – Vbootkit (pdf) (2007), которая позиционировалась в первую очередь как исследование актуального в тот момент вопроса о безопасности MS Vista.

Последние тенденции

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

Этот руткит, больше известный как «буткит» в силу своей «загрузочной» специфики, основан на коде концептуальной разработки eEye Bootroot (немного измененном) и представляет собой не столько самостоятельную вредоносную программу, сколько инструмент для сокрытия любого троянца. Что позволяет предполагать, что этот руткит распространяется (возможно, небесплатно) в определенных кругах и будет все шире использоваться в различных вредоносных программах.

Мифический руткит

В конце 2006 года на форумах, посвященных информационной безопасности, появились слухи о существовании некоего «неуловимого руткита» – Rustock.C, продолжающего линейку спам-ботов семейства Rustock. Через полтора года после появления обсуждений этот руткит был обнаружен специалистами из копании DrWeb, а специалистами «Лаборатории Касперского» произведен анализ схем его распространения. В истории с «Рустоком» до сих пор много загадок – в частности, неясен реальный масштаб угрозы. Имеющиеся данные позволяют предполагать, что этот масштаб невелик. Эти же данные позволяют предполагать, что настоящая «дата рождения» руткита – сентябрь 2007, а вовсе не конец 2006 г.

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

То есть Rustock.c – гораздо более интересное явление с точки зрения информационных процессов в обществе, чем с точки зрения технологии. Несмотря на то что слухи о его существовании, распространявшиеся с конца 2006 года, никогда и ничем не были подтверждены – они успешно подготовили интернет-сообщество к его появлению. В частности, когда сам руткит был обнаружен, сообщество среагировало на него с преувеличенным энтузиазмом (тот самый, неуловимый!), не успев разобраться в фактах. Rustock.c – не столько знаменательный руткит, сколько убедительная демонстрация неспособности людей критически оценивать информацию.

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

Руткиты для альтернативных ОС

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

Для OS X (Macintosh) известно несколько руткитов, и существует даже антируткит-утилита (OS X Rootkit Hunter). Кроме того, поскольку OS X – это UNIX-система, то некоторые UNIX-руткиты можно модифицировать так, что они будут работать в OS X. Но в целом, в настоящий момент в области руткитов для Macintosh не наблюдается ни развития технологий, ни серьезных угроз.

Руткитов для малых ОС – Windows Mobile, Symbian и т.д. – насколько мне известно, не существует. Но для этих ОС и вирусов пишется мало, и антивирусы используются редко, поэтому применять продвинутые технологии руткитов нет необходимости – и так никто не отслеживаетсписок процессов.

«Недоруткиты»

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

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

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

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

Так что же такое руткиты?

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

Любая из таких техник в большей или меньшей степени вписывается в понятие «руткит», которое каждый сам определяет для себя, так или иначе опираясь на мнение большинства либо на точку зрения авторитетного меньшинства специалистов. Для чего нужно это определение? Для того чтобы не попасть в ловушку слов, когда речь идет о таких пограничных случаях, как упомянутое выше скандальное обнаружение «руткитов» в коммерческих продуктах. Вместо того чтобы делать поспешные выводы, испугавшись страшного слова «руткит», стоит разобраться, как именно реализован механизм, объявленный кем-то компрометирующим, и какие именно угрозы он в себе таит в действительности. Весьма показателен в этом смысле «скандальный руткит», обнаруженный в продукте Kaspersky Antivirus 7.0. Используемая в продукте техника, которую сочли компрометирующей, – размещение служебной информации в «стримах» файловой системы, т. е. в таких ее участках, которые недоступны при прямом наблюдении. Есть ли в этой технике обход системных механизмов? Нет; «стримы» – это документированная функция операционной системы. Скрывается ли вредоносная активность? Нет; скрывается только служебная небинарная информация. Является ли эта техника уязвимостью – иными словами, может ли злоумышленник воспользоваться ею в своих целях? Нет, он может воспользоваться лишь самими «стримами» для сокрытия кода вируса (что действительно реализовано в некоторых вредоносных программах) – но это уже уязвимость ОС, а не коммерческого продукта. Так и где же здесь руткит?

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


Временная линейка руткит-событий

Заключение

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

Примечания

[1] Уровень системных привилегий, на котором по умолчанию работает любое пользовательское приложение.

[2] Режим пользователя – стандартный, пониженный уровень привилегий ОС; режим ядра – максимальный уровень привилегий.

[3] В реальности, на компьютерах пользователей.

Эволюция руткитов

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

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике