Всем привет. Давно появилась идея писать что-то вроде журнала,который будет содержать материалы об "Темной стороне силы" в программировании.
Мой журнал будет состоять из нескольких глав , которые расскажут вам об разных трюках "Темной стороны"
В сегодняшней главе мы будем говорить об "Руткитах" (Англ.RootKit)
- ============= Руткит/RootKit - ==============
Итак,начнем.
Возможно вы много раз слышали термин "Руткит" , сегодня я расскажу вам об этом.
Руткит (англ. rootkit, т.е. «набор root'а») — программа или набор программ для скрытия следов присутствия злоумышленника или вредоносной программы в системе.
(С Википедии,более корректного описания термину придумать не смог)
Итак, мы уже знаем что Руткит - программа позволяющая злым мальчикам скрывать своих "Зверей" в нашей системе, негодяи!
Как же работают Руткиты?
Существует несколько типов Руткитов, я буду разбирать каждый из них.
1. Руткит посредством перехвата API (Windows API) Функций .
Данный тип Руткита работает в третьем кольце (Ring3) .
Для начала стоило бы узнать,что из себя представляет Ring3 кольцо (User-Mode) посредством Википедии .
Код:
Кольца защиты — архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное разделение системного и пользовательского уровней привилегий. Структуру привилегий можно изобразить в виде нескольких концентрических кругов. В этом случае системный режим (режим супервизора или нулевое кольцо, так называемое «кольцо 0»), обеспечивающий максимальный доступ к ресурсам, является внутренним кругом, тогда как режим пользователя с ограниченным доступом — внешним. Традиционно семейство микропроцессоров x86 обеспечивает четыре кольца защиты.
Архитектуре колец защиты обычно противопоставляют системы, основанные на мандатной адресации, обеспечивающей доступ к объекту по его описанию (англ. Capability-based security).
Из данного текста мы поняли,что существует несколько колец(Уровней).
Кольцо через которое работаем мы - Обычные пользователи,и большинство из наших программ - Номер 3 . Данное кольцо является самым "Низко-Привилегированным". У нас - минимум привилегий.
Самым "Крутым" уровнем является нулевое Кольцо (RING- 0) , Программа работающая в данном режиме не имеет почти никаких ограничений, и может - ВСЕ! (Если ей не помешать в этом, об этом буду говорить ниже!)
Итак,начинаем разбирать Ring-3 Руткит.
Ring-3 Руткит в большинстве случаев работает посредством перехвата Windows API (WINAPI) функций и манипуляций над ними.
После запуска Троянского коня содержащего в себе Ring-3 руткит происходит следующее :
1. Троянский конь проводит иньекцию в доверенный процесс (Посредством кодовой иньекции - a.k.a RunPE) или же DLL иньекции.
В нашем случае кодовая иньекция на много лучше чем DLL иньекция. (После DLL иньекции троянский конь оставляет следы библиотеки на HDD (Дроппер), поэтому является более уязвимым к антивирусным детектам.
Существуют способы реализации DLL иньекции без Дроппинга файла на диск (Мануальный маппинг) , однако будет лучше писать кодовую иньекцию!
После процесса иньекции в действие вступает Сам Руткит! Он начинает перехватывать функции Windows API на уровне третьего кольца и использовать их в своих интересах!
После перехвата API Руткит может скрывать себя в системе посредством :
1. Скрывать регистрационные данные.
2. Скрывать файл от файловой системы.
3. Скрывать процесс от таск-менеджера и других программ.
4. Защищать процесс от терминации.
Руткит перехватывает разные функции WinAPI , поэтому он скрывается в системе в зависимости от того какие функции перехватил )
К примеру -
NtQuerySystemInformation
NtEnumerateKey
NtEnumerateValueKey
NtOpenFile
NtQueryDirectoryFile
и так далее.
Такой способ реализации Руткита не лучший,так как он работает в том же Третьем кольце, однако все-равно является отличным методом скрытия от глаз пользователя.
К сожалению оттечественные вирусо-писатели не владеют достаточным количеством знаний даже для реализации Ринг-3 Руткита,чего уже говорить об Kernel-mode (Ring 0). Большинство Руткитов такого типа работают лишь на х86 Системах (Из за не профессионализма авторов,которые копи-пастят Hook библиотеки и тд,не имея знаний для реализации такого механизма с 0.)
Многие пользователи входят в заблуждение думая о том что Боты которых они покупают (Dirt-Jumper,Pandora,Optima) и так далее очень крутые и ОГОГО. Однако в них нет ничего хорошего,все они написаны на дельфи,с парочкой ДДос-методов и тупой-авто-загрузкой. Платить за них даже 20$ жалко.
================================================== =====
Итак,мы закончили разговор о Ring-3 (UserMode) РутКитах , и теперь разговор пойдет о Ring-0 (Kernel Mode ) Руткитах.
Ring-0 Руткит это крайне сложная система,реализовать которую может не каждый, иногда даже самый профессиональный программист. Иногда все зависит не от знаний программиста,а от того - сможет ли он найти уязвимость в системе для внедрения Драйвера (СМ Подробнее - ниже!)
Итак, Ring-0 Руткит (В данном случае я разбираю лучший вариант - Установка Драйверного обеспечивания)
Работает на уровне Нулевого кольца,и может позволить себе почти Все, так как уровень привилегий в данном кольце является безлимитным.
Это то же самое что работать на одном уровне с операционной системой!
Механизм реализации крайне сложный,для работы на нулевом уровне требуются огромный опыт + знания,и конечно же Эксплойты в системе (Куда же без них?)
1. Программист должен написать Драйвер (ASM/C)
2. Троянский конь содержащий Ринг-0 Руткит должен подгрузить драйвер в нулевое кольцо.
Проблемой является то - что драйвера загрузить могут не каждые программы, в операционных системах Windows существует некая защита от загрузки НЕ проверенного драйверного обеспечения (Driver SIGN Protection) .
Для обхода такой защиты требуются специальные эксплойты (Привилегионная эскалация,другие примеры) .
Поэтому цена таких систем очень высокая (бывает даже 60 000$ и более!)
Используют такие системы чаще всего очень "Мажорные" боты.
В пример могу привести - Zutick/Rustock/Carberp/Rovnix и так далее. Цены каждого из приведенных в моем примере ботов - Выше 10 000 АШШ Долларов. Конечно же не каждый школьник может позволить себе такую махину,да и если бы деньги были - купить их не легко.
Большинство из таких систем продаются лишь на закрытых площадках .
================================================== ======
Ring 0 Руткит - Подкласс данного типа - BootKIT (БутКИТ)!
Буткит - еще более сложный механизм , по сравнению с обычным Kernel-Mode руткитом.
Буткит начинает действовать еще до того как операционная система загрузится!! (Звучит невероятно,верно? Наверное вам интересно как он способен проделывать такое - СМ.Ниже!)
Для начала узнаем - Что такое MBR (Master Boot Record) о котором мы будем говорить.
Вики рассказывает нам следующее :
Код:
Главная загрузочная запись (англ. master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации.
MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и специальную сигнатуру.
Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС происходит на более поздних этапах алгоритма.
В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.
Итак,наверное вы уже догадались,что буткит внедряется в MBR!
Как же он проделывает такой трюк? Как я и писал выше (СМ.Обычный РИНГ 0 Руткит)
Ему потребуются эксплойты/методы внедрения и обхода защиты.
1. Для начала Буткит записывается в МБР в виде 16 битного ASM кода.
2. Затем Буткит должен иметь специальный метод перехода на следующую стадию (Проход Real Mode Switch и тд)
3. После этого Буткит грузит 32 битный ASM код,который в свою очередь Сразу после загрузки системы грузит Драйвер в Ring0.
Такой метод реализации УНИКАЛЕН и стоит очень больших денег. Такие виды Троянских коней просто неуловимы почти для каждого антивирусного обеспечения на протяжении огромного промежутка времени.
Каждая строка кода,каждый Байт критически важны (В случае ошибки система вообще не загрузится)
Наверное вы понимаете,что реализация таких систем требует огромного труда и времени!
-----------------------------------------------------------------------
Антивирусы и средне-статистические "Трояны" , последний абзац.
Как вы поняли прочитав статью - Бутикты и Кернел-Мод Руткиты стоят десятки тысяч долларов,и не доступны всем. Однако средне-статистическому трояну высокого качества требуется лишь Ring 3 (Usermode) руткит или хороший метод иньекции (System-Wide) и тд.
Большинство проактивных защит (Kaspersky,Comodo и тд) перехватывают все API используемые большинством троянов и обнаруживают их .
В пример могу привести WriteProcessMemory,URLDownloadtoFileA(У Лоадеров), функции библиотеки Kernel32.dll , ntdll.dll .
Для обхода проактивных защит используют разные методы. Об этом будем говорить в других выпусках журнала.
Спасибо за внимание,надеюсь вам понравится,и у меня будет мотивация для дальнейшей работы!!
Темная сторона силы - ГЛАВА 1 . [END]