Введение

Руткит – это набор компьютерных программ, как правило, вредоносных, предназначенных для обеспечения несанкционированного доступа к компьютеру или к области его программного обеспечения (например, для неавторизованного пользователя) и часто маскирующих свое существование или существование другого программного обеспечения. Термин "руткит" имеет негативную коннотацию из-за связи с вредоносным ПО. Получение такого доступа является результатом прямой атаки на систему, то есть эксплуатации уязвимости (например, повышения привилегий) или пароля (полученного путем взлома или методов социальной инженерии, таких как "фишинг"). После установки становится возможным скрыть факт вторжения, а также поддерживать привилегированный доступ. Полный контроль над системой позволяет изменять существующее программное обеспечение, включая то, которое могло бы быть использовано для его обнаружения или обхода. Обнаружение руткитов затруднено, поскольку они могут подрывать работу программного обеспечения, предназначенного для их поиска. Методы обнаружения включают использование альтернативной доверенной операционной системы, поведенческий анализ, сканирование по сигнатурам, сканирование различий и анализ дампов памяти. Удаление может быть сложным или практически невозможным, особенно если руткит находится в ядре системы; в таких случаях переустановка операционной системы может быть единственным решением. При работе с руткитами прошивки для их удаления может потребоваться замена оборудования или специализированное оборудование.

История

Термин rootkit, rkit или root kit первоначально относился к злонамеренно модифицированному набору административных инструментов для Unix-подобной операционной системы, предоставлявшему доступ с правами "root". Если злоумышленник мог заменить стандартные административные инструменты в системе на rootkit, он получал бы root-доступ к системе, одновременно скрывая эти действия от законного системного администратора. Эти руткиты первого поколения было легко обнаружить с помощью таких инструментов, как Tripwire, которые не были скомпрометированы для доступа к той же информации. В лекции, произнесенной при получении премии Тьюринга в 1983 году, Кен Томпсон из Bell Labs, один из создателей Unix, высказал предположение о подмене C-компилятора в дистрибутиве Unix и обсудил соответствующую уязвимость. Модифицированный компилятор обнаруживал бы попытки компиляции команды входа в систему Unix и генерировал бы измененный код, который принимал бы не только правильный пароль пользователя, но и дополнительный "черный ход" – пароль, известный злоумышленнику. Кроме того, компилятор обнаруживал бы попытки компиляции новой версии самого себя и внедрял бы те же уязвимости в новый компилятор. Проверка исходного кода команды входа в систему или обновленного компилятора не выявила бы никакого вредоносного кода. Эта уязвимость была эквивалентна rootkit. Первый задокументированный компьютерный вирус, нацеленный на персональный компьютер и обнаруженный в 1986 году, использовал методы маскировки для сокрытия: вирус Brain перехватывал попытки чтения загрузочного сектора и перенаправлял их в другое место на диске, где хранилась копия исходного загрузочного сектора. Со временем методы маскировки вирусов DOS становились все более сложными. Продвинутые техники включали перехват низкоуровневых дисковых прерываний BIOS INT 13H для скрытия несанкционированных изменений файлов. В то время как червь Stuxnet стал первым, нацеленным на программируемые логические контроллеры (PLC).

Скандал с защитой от копирования Sony BMG

В 2005 году Sony BMG выпустила компакт-диски с защитой от копирования и программным обеспечением для управления цифровыми правами под названием Extended Copy Protection, разработанным компанией First 4 Internet. Программное обеспечение включало музыкальный проигрыватель, но незаметно устанавливало руткит, ограничивающий доступ пользователя к содержимому диска. Инженер-программист Марк Руссинович, создатель инструмента для обнаружения руткитов RootkitRevealer, обнаружил этот руткит на одном из своих компьютеров. Руткит маскировался, скрывая от пользователя любые файлы, начинающиеся с "$sys$". Вскоре после публикации отчета Руссиновича появился вредоносный код, использующий уязвимость существующего руткита на зараженных системах. Sony BMG выпустила исправления для удаления руткита, однако они привели к возникновению еще более серьезной уязвимости. В конечном итоге компания отозвала эти диски. В Соединенных Штатах против Sony BMG был подан групповой иск.

Типы

Существует по крайней мере пять типов руткитов, начиная с тех, которые находятся на самом низком уровне в прошивке (с наивысшими привилегиями), и заканчивая наименее привилегированными пользовательскими вариантами, работающими в Ring 3. Гибридные комбинации этих типов также возможны, охватывающие, например, пользовательский и режим ядра. Поскольку все приложения в пользовательском режиме работают в собственном адресном пространстве, руткиту необходимо выполнять исправления в адресном пространстве каждого запущенного приложения. Кроме того, руткиту необходимо отслеживать систему на предмет запуска новых приложений и исправлять их адресное пространство до полного выполнения. Любое программное обеспечение, такое как антивирус, работающее на скомпрометированной системе, также уязвимо. В этой ситуации ни одной части системы нельзя доверять. Руткит может изменять структуры данных в ядре Windows, используя метод, известный как прямое манипулирование объектами ядра (DKOM). Этот метод можно использовать для скрытия процессов. Руткит в режиме ядра также может перехватывать таблицу дескрипторов системных служб (SSDT) или изменять шлюзы между пользовательским и режимом ядра, чтобы замаскировать себя. Часто руткит создает скрытую зашифрованную файловую систему, в которой он может скрывать другое вредоносное ПО или исходные копии зараженных файлов. Операционные системы развиваются, чтобы противостоять угрозе руткитов режима ядра. Например, 64-разрядные версии Microsoft Windows теперь реализуют обязательную подпись всех драйверов ядра, чтобы усложнить выполнение ненадежного кода с наивысшими привилегиями в системе.

Ботинки

Вариант руткита, работающий в режиме ядра и называемый буткитом, может заражать загрузочный код, такой как Master Boot Record (MBR), Volume Boot Record (VBR) или загрузочный сектор, и таким образом может быть использован для атак на системы полного шифрования диска. Примером такой атаки на шифрование диска является "атака недобросовестной горничной", при которой злоумышленник устанавливает буткит на незащищенный компьютер. Представляемый сценарий заключается в том, что горничная проникает в номер отеля, где жертвы оставили свое оборудование. Буткит заменяет легитимную загрузочную программу на программу, находящуюся под контролем злоумышленника. Как правило, загрузчик вредоносного ПО сохраняется при переходе в защищенный режим, когда ядро уже загружено, и таким образом способен скомпрометировать ядро. Например, "Stoned Bootkit" компрометирует систему, используя взломанную загрузочную программу для перехвата ключей шифрования и паролей. В 2010 году руткит Alureon успешно обошел требование о 64-битной подписи драйверов ядра в Windows 7, модифицировав главную загрузочную запись. Хотя это и не является вредоносным ПО в том смысле, что оно выполняет действия, нежелательные для пользователя, определенное программное обеспечение, такое как "Vista Loader" или "Windows Loader", работает аналогичным образом, внедряя таблицу ACPI SLIC (System Licensed Internal Code) в кэшированную версию BIOS в оперативной памяти во время загрузки, чтобы обойти процесс активации Windows Vista и Windows 7. Этот вектор атаки стал бесполезным в (несерверных) версиях Windows 8, которые используют уникальный, специфичный для каждого компьютера ключ, который может быть использован только на данной машине. Многие антивирусные компании предоставляют бесплатные утилиты и программы для удаления буткитов.

Уровень гипервизора

В академических кругах руткиты были созданы как гипервизоры типа II в качестве доказательств концепции. Используя возможности аппаратной виртуализации, такие как Intel VT или AMD V, этот тип руткита работает на уровне Ring 1 и запускает целевую операционную систему как виртуальную машину, что позволяет руткиту перехватывать аппаратные вызовы, выполняемые исходной операционной системой. В отличие от обычных гипервизоров, им не требуется загружаться перед операционной системой, но они могут загружаться в уже работающую операционную систему, прежде чем преобразовать её в виртуальную машину. Программное обеспечение Blue Pill является еще одним примером. В 2009 году исследователи из Microsoft и Университета Северной Каролины продемонстрировали антируткит на основе гипервизорного слоя под названием Hooksafe, обеспечивающий универсальную защиту от руткитов, работающих в режиме ядра. Windows 10 представила новую функцию под названием "Device Guard", которая использует виртуализацию для обеспечения независимой внешней защиты операционной системы от вредоносного ПО типа руткитов.

Ферм-программы и аппаратные средства

Фермварный руткит использует прошивку устройства или платформы для создания постоянного образа вредоносного ПО в аппаратном обеспечении, таком как маршрутизатор, сетевая карта, жесткий диск или системный BIOS. Руткит скрывается в прошивке, поскольку прошивка обычно не проверяется на целостность кода. Джон Хисман продемонстрировал возможность реализации фермварных руткитов как в ACPI-фермваре, так и в ROM-карте расширения PCI. В октябре 2008 года злоумышленники повредили европейские устройства для считывания кредитных карт до их установки. Эти устройства перехватывали и передавали данные кредитных карт через сеть мобильной связи. В марте 2009 года исследователи Альфредо Ортега и Анибал Сакко опубликовали подробности руткита Windows на уровне BIOS, который мог пережить замену диска и переустановку операционной системы. Через несколько месяцев они узнали, что некоторые ноутбуки продаются с легальным руткитом, известным как Absolute CompuTrace или Absolute LoJack для ноутбуков, предустановленным во многих образах BIOS. Это система защиты от кражи, которую, как показали исследователи, можно использовать в злонамеренных целях. Некоторые вредоносные установки руткитов мотивированы коммерческой выгодой, с оплатой за установку (PPI), типичной для распространения. После установки руткит предпринимает активные меры для сокрытия своего присутствия в хост-системе путем подрыва или обхода стандартных средств безопасности операционной системы и интерфейсов прикладного программирования (API), используемых для диагностики, сканирования и мониторинга. Руткиты достигают этого, изменяя поведение основных компонентов операционной системы путем загрузки кода в другие процессы, установки или модификации драйверов или модулей ядра. Методы обфускации включают в себя сокрытие запущенных процессов от механизмов мониторинга системы и скрытие системных файлов и других конфигурационных данных. Руткиты часто отключают возможность ведения журнала событий операционной системы, чтобы скрыть следы атаки. Руткиты теоретически могут нарушить любую деятельность операционной системы и избегают установки на виртуальные машины, где исследователям может быть легче их обнаружить и проанализировать.

Обнаружение

Основная проблема обнаружения руткитов заключается в том, что если операционная система была скомпрометирована, особенно руткитом уровня ядра, ей нельзя доверять в поиске несанкционированных изменений в ней самой или её компонентах. Такие действия, как запрос списка запущенных процессов или списка файлов в каталоге, не могут выполняться предсказуемо. Иными словами, детекторы руткитов, работающие на зараженных системах, эффективны только против руткитов, имеющих дефект в маскировке, или работающих с более низкими правами пользовательского режима, чем программное обеспечение для обнаружения в ядре. Как и в случае с компьютерными вирусами, обнаружение и удаление руткитов – это непрерывная борьба между противоборствующими сторонами, а также проведение криминалистического сканирования памяти для выявления признаков скрытых процессов. Среди средств обнаружения руткитов для Unix – Zeppoo, chkrootkit, rkhunter и OSSEC. Для Windows доступны инструменты, такие как Microsoft Sysinternals RootkitRevealer, Avast Antivirus, Sophos Anti Rootkit, F-Secure, Radix, GMER и WindowsSCOPE. Любой детектор руткитов, оказавшийся эффективным, в конечном итоге способствует своей собственной неэффективности, поскольку разработчики вредоносного ПО адаптируют и тестируют свой код, чтобы избежать обнаружения хорошо известными инструментами. Обнаружение путем проверки носителей информации, когда подозрительная операционная система не запущена, может пропустить руткиты, не распознаваемые проверяющим программным обеспечением, поскольку руткит неактивен и подавляется подозрительная активность; традиционное антивирусное программное обеспечение, работающее при активном рутките, может оказаться неэффективным, если руткит успешно скрывается.

Альтернативный надежный носитель

Лучший и наиболее надежный способ обнаружения руткитов на уровне операционной системы — выключить компьютер, который предположительно заражен, а затем проверить его накопители, загрузившись с альтернативного доверенного носителя (например, с "восстановительного" CD-ROM или USB-накопителя). Этот метод эффективен, поскольку руткит не может активно скрывать свое присутствие, если он не запущен.

На основе поведения

Поведенческий подход к обнаружению руткитов пытается определить присутствие руткита, выявляя поведение, характерное для руткитов. Например, путем профилирования системы, различия во времени и частоте вызовов API или в общей загрузке ЦП могут указывать на наличие руткита. Метод сложен и затруднен высокой вероятностью ложных срабатываний. Дефектные руткиты иногда вносят очень явные изменения в систему: руткит Alureon приводил к сбоям в системах Windows после обновления безопасности, выявившего ошибку в его коде. Журналы анализатора пакетов, межсетевого экрана или системы предотвращения вторжений могут содержать свидетельства активности руткита в сетевой среде. Такой комплексный подход вынуждает злоумышленников реализовывать механизмы противодействия, или "ретро" рутины, направленные на завершение работы антивирусных программ. Методы обнаружения на основе сигнатур эффективны против хорошо известных руткитов, но менее эффективны против специально разработанных, кастомных руткитов. Однако, в первом случае, некоторые допустимые различия могут быть вызваны механизмами операционной системы, такими как перенос памяти или shimming. Руткит может обнаружить наличие подобного сканера или виртуальной машины (последняя часто используется для проведения криминалистического анализа) и изменить свое поведение, чтобы избежать обнаружения каких-либо различий. Обнаружение на основе сравнения использовалось инструментом RootkitRevealer от Руссиновича для обнаружения руткита Sony DRM. Однако, упрощенные схемы проверяют лишь факт изменения кода после установки; более раннее вмешательство остается незамеченным. "Отпечаток" необходимо восстанавливать каждый раз после внесения изменений в систему, например, после установки обновлений безопасности или пакета обновлений. Хеш-функция создает дайджест сообщения – относительно короткий код, вычисляемый для каждого бита файла с использованием алгоритма, который вызывает значительные изменения в дайджесте даже при незначительных изменениях исходного файла. Регулярный пересчет и сравнение дайджестов установленных файлов с доверенным списком дайджестов позволяет выявлять и отслеживать изменения в системе, при условии, что исходная база была создана до добавления вредоносного ПО. Более сложные руткиты способны обойти процесс проверки, представляя для анализа неизмененную копию файла или внося изменения в код только в памяти, в регистры переконфигурации, которые затем сравниваются с "белым списком" ожидаемых значений. Код, выполняющий операции хеширования, сравнения или расширения, также должен быть защищен. В этом контексте концепция "неизменного корня доверия" подразумевает, что первый код, измеряющий параметры безопасности системы, должен быть надежным, чтобы гарантировать, что руткит или загрузочный комплект не скомпрометируют систему на самом фундаментальном уровне.

Сброс памяти

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

Удаление

Ручное удаление руткита часто крайне сложно для обычного пользователя компьютера, но ряд поставщиков программного обеспечения для обеспечения безопасности предлагают инструменты для автоматического обнаружения и удаления некоторых руткитов, как правило, в составе антивирусного пакета. С 2005 года ежемесячный инструмент удаления вредоносного программного обеспечения Windows от Microsoft способен обнаруживать и удалять некоторые классы руткитов. Кроме того, Windows Defender Offline может удалять руткиты, поскольку он запускается из доверенной среды до запуска операционной системы. Некоторые антивирусные сканеры могут обходить файловые API, которые уязвимы для манипуляций руткитом. Вместо этого они получают доступ к структурам файловой системы напрямую и используют эту информацию для проверки результатов, полученных из системных API, чтобы выявить любые расхождения, которые могут быть вызваны руткитом. Есть эксперты, которые считают, что единственный надежный способ их удаления – переустановить операционную систему с доверенного носителя. Это связано с тем, что антивирусные и инструменты удаления вредоносных программ, работающие на скомпрометированной системе, могут быть неэффективны против хорошо написанных руткитов, работающих в режиме ядра. Загрузка альтернативной операционной системы с доверенного носителя может позволить смонтировать зараженный системный том и потенциально безопасно очистить его, а также скопировать критически важные данные или, альтернативно, провести криминалистическую экспертизу. Для этой цели можно использовать облегченные операционные системы, такие как Windows PE, Windows Recovery Console, Windows Recovery Environment, BartPE или Live Distros, что позволяет "очистить" систему. Даже если тип и характер руткита известны, ручное восстановление может быть непрактичным, в то время как переустановка операционной системы и приложений является более безопасным, простым и быстрым решением. Применение обновлений безопасности, реализация принципа минимальных привилегий, уменьшение поверхности атаки и установка антивирусного программного обеспечения – это стандартные передовые методы обеспечения безопасности, эффективные против всех классов вредоносных программ. Новые спецификации безопасной загрузки, такие как UEFI, были разработаны для противодействия угрозе загрузочных руткитов, но даже они уязвимы, если не используются предлагаемые ими функции безопасности.