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

В сегодняшнем материале мы разберем технологии скрытия вредоносной активности в целевой системе, усвоим, что такое rootkits- и bootkits-инструментарий, узнаем об инжектах (внедрениях) в процессы и DLL-библиотеки и, конечно же, рассмотрим, как все это детектировать и анализировать на живых примерах.

WARNING

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

 

Malware tools, или искусство сокрытия

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

Поэтому речь сегодня о malware tools — это специальное программное обеспечение, которое само по себе не вредоносно, но загружается на целевую систему, чтобы заразить ее малварью и скрыть все следы. Самый идеальный вариант для злоумышленника — это когда антивирус или подобное ему ПО просто не может детектировать малварь, запущенную на зараженной машине. А раз нет прецедента, соответственно, нет и паники, нет и действий для активного лечения системы. И для достижения этих целей писатели вредоносного кода используют техники, скрывающие его присутствие в системе. Некоторые из них мы разберем более подробно.

 

Rootkit: невидимый ниндзя

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

  • маскировка объектов (таких как процессы в памяти, файлы и директории);
  • нелегитимное управление системой (изменение событий, происходящих в зараженной системе);
  • сбор различных данных (hardware- и software-параметров, конфирмации TCP/IP, рабочего окружения и так далее).

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

Как мы выяснили из описания, руткит работает в привилегированном режиме (от имени root’a или учетки NT AUTHORITY\System) и, соответственно, имеет самые высокие привилегии на исполнение кода и доступ к ресурсам системы. По уровню привилегий все руткиты можно разделить на руткиты:

  • уровня пользователя (user-mode, режим, в котором выполняются все основные программы);
  • уровня ядра (kernel-mode, в том числе драйверы), или так называемое ring 0.
Распределение колец защиты CPU и привилегий выполнения
Распределение колец защиты CPU и привилегий выполнения

По принципу действия в зараженной системе:

  • изменяющие алгоритмы выполнения системных функций (Modify execution path);
  • изменяющие системные структуры данных (Direct kernel object manipulation).

Более подробно о связи ring 0 и rootkits можно почитать в этой статье, в статье на форуме АНТИЧАТ и в небольшом описании для Linux.

Семейство ОС Windows также подвержено заражению руткитами. Здесь наиболее распространены такие методы, как захват таблиц вызовов (IAT, IDT, SSDT, GDT), перехват функций (например, модификацией начальных байтов), непосредственное изменение системных объектов (DKOM), методы использования драйверов.

Если очень кратко, то наиболее вероятные варианты — это либо захват таблиц вызова, либо перехват системных вызовов в режиме работы системного драйвера. Для первого случая таблица вызовов представляет собой некий массив, в котором каждый его элемент хранит адрес соответствующей процедуры. Такие таблицы существуют и в режиме ядра (IDT, CPU MSRs, GDT, SSDT, IRP dispatch table), и в режиме пользователя (Import Address Table, IAT).

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

  • блокировать вызовы, производимые определенными приложениями (например, антивирус);
  • замещать исходную процедуру (подмена бинарного кода);
  • вести мониторинг системы, перехватывая вводимые параметры;
  • фильтровать или вовсе отбрасывать выходные параметры.
Общая схема классификации руткитов
Общая схема классификации руткитов

Для второго случая при работе руткита в режиме системного драйвера используется схожая схема. Модель драйверов Microsoft поддерживает многоуровневую архитектуру, поэтому запрос ввода/вывода (I/O request, обмен данными между приложениями и драйверами) может обслуживаться серией подключенных драйверов, каждый из которых выполняет свою задачу. В актуальной на сегодня модели WDM определено три типа драйверов: драйвер шины, функциональные драйверы и драйверы-фильтры.

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

Модель взаимодействия драйвера с hardware через ОС
Модель взаимодействия драйвера с hardware через ОС

Более подробно о программировании и функционировании программы в режиме драйвера можно почитать в архивах WASM — раздел «Секреты Win32. Драйверы режима ядра».

В операционных системах UNIX/Linux заражение руткитами реализуется:

  • подменой основных системных утилит;
  • загрузкой модифицированного модуля ядра, который позволяет перехватывать таблицы системных вызовов (sys_call_table);
  • закладкой, основанной на модификации физической памяти ядра.
Схема выполнения руткитов в Linux
Схема выполнения руткитов в Linux

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

Руткиты в Linux
Руткиты в Linux

Для тех, кто хочет подробно покопаться в коде, на этом ресурсе выложены исходники WinNT-руткита Nerzhul Rootkit, написанного на C, и код руткита Agony ring 0. В одной из старых статей нашего журнала можно почитать, как написать свой non-kernel-руткит на Perl.

 

Bootkit

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

Схема загрузки компьютера
Схема загрузки компьютера

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

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

Общая схема инициализации буткитов
Общая схема инициализации буткитов

Более подробно о методах работы буткитов можно почитать здесь, здесь и еще вот здесь.

 

Методы детектирования и борьба с руткитами

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

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

Базовый арсенал средств отлова руткитов основывается на следующих методах.

  1. Сигнатурный поиск. Применяется еще со времен первых антивирусов и представляет собой поиск в проверяемом файле уникальной цепочки байтов (сигнатуры), присущей вредоносной программе.
  2. Эвристический или поведенческий анализатор. Эта технология основывается на поиске отклонений в настройках системы, конфигурационных файлах Linux или реестре Windows, подозрительном поведении процессов и модулей и так далее.
  3. Контроль целостности. Этот тип поиска основан на сравнении контрольной суммы (MD5 и тому подобное) или цифровой подписи разнообразных системных файлов с базой, содержащей контрольную сумму оригинальных файлов. В случае несовпадения программа делает вывод, что файл был модифицирован или вовсе заменен.

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

В качестве более полного ликбеза на данную тему могу порекомендовать почитать эту статью и вот эту книжку: A Comparitive Analysis of Rootkit Detection Techniques, которая доступна для загрузки и чтения в формате PDF. И не забудь ознакомиться с работой нашего соотечественника Игоря Коркина, посвященной форензике оперативной памяти и поиску в ней руткитов, — Applying memory forensics to rootkit detection.

INFO

Malware tools, такие как загрузчики (downloaders and droppers), rootkits, bootkits, в большинстве случаев сами по себе не являются вредоносным ПО в классическом понимании. Однако с помощью подобного инструментария злоумышленник может инфицировать целевую систему, при этом заметая следы взлома и заражения, что значительно усложняет последующий поиск и детектирование malware внутри системы.


Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


6 комментариев

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …