Главная страница
Навигация по странице:

  • 2.2.3 Манипулирование аппаратурой

  • 2.3 Клавиатурные шпионы

  • 3. Методики обнаружения RootKit в системе

  • Список использованной литературы

  • Руткиты, и способы противодействия им. Принципы работы руткита


    Скачать 465.04 Kb.
    НазваниеПринципы работы руткита
    АнкорРуткиты, и способы противодействия им
    Дата21.10.2021
    Размер465.04 Kb.
    Формат файлаdocx
    Имя файлаРуткиты, и способы противодействия им.docx
    ТипДокументы
    #252986
    страница2 из 2
    1   2
    2.2.2 Модификация кода во время исполнения

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

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

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

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

    Внедрение кода обхода

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


    Рис. 4. Изменение хода исполнения программы
    На рисунке 4 показано, как руткит изменяет ход исполнения программы, внедряя в нее свой код.

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

    Эта техника очень мощна и, как правило, позволяет легко ускользать от защитного программного обеспечения.

    Разновидности метода модификации кода

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

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

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

    Модификация функций основного назначения ядра позволит обеспечить скрытность установленных драйверов и программ. Довольно интересным местом для внесения изменений является программа загрузки ядра. Можно модифицировать функции проверки целостности системы, с тем чтобы скрыть работу троянских программ и модификацию файлов. Сетевые функции могут быть модифицированы для захвата пакетов и других данных. Чрезвычайно трудно обнаружить изменения в микропрограммном обеспечении и BIOS. При внедрении зачастую приходится вставлять в код довольно много новых инструкций. Что касается драйвера, лучше всего выделить для внедряемого кода область в неперемещаемом пуле памяти. Для большей скрытности можно задействовать незанятые области памяти, которые есть в конце многих страниц оперативной памяти. О подобном использовании областей существующих страниц иногда говорят как о заражении пустот(cavern infection), поскольку незанятые области памяти называют пустотами, или кавернами(caverns).

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

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

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

    Перехват паролей зачастую предполагает, помимо прямого обращения к аппаратуре, еще и исправление кода ядра операционной системы непосредственно в оперативной памяти. Если модифицировать толькосетевую карту компьютера, можно перехватить пароли и (или) хэши паролей. Руткит, использующий данную технологию, очень долго может оставаться незамеченным. Например, если администратор обновит версию Windows или установит пакет обновления, это никак не скажется на работоспособности руткита. Однако если помимо изменения встроенных микропрограмм сделать любые изменения в ядре, установка новой версии ОС может разрушить все. Использование BIOS и прямая модификация встроенных микропрограмм – дело довольно рискованное и чрезвычайно зависимое от платформы. Однако при тщательном подходе к планированию и разработке такой руткит будет очень сложно обнаружить. Вообще, сама идея изменения встроенных микропрограмм для Ethernet-карт весьма актуальна и интересна, но для ее осуществления нужно иметь достаточно много детальной информации о сетевой карте. Получить ееможно восстановлением исходного кода микропрограмм и чтением доступной документации. Неплохо было бы также достать внутреннюю документацию фирмы-производителя. Перепрограммирование карты не обязательно производить непосредственно на рабочем месте пользователя, гораздо лучше, если есть возможность перепрограммировать сразу партию устройств.

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

    Но не все компьютеры – это те «персональные компьютеры», которые мы знаем. Многие компьютеры – это небольшие встроенные системы, решающие достаточно специфические задачи. Эти системы повсюду вокруг нас, но в большинстве случаев мы их просто не замечаем.

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

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

    Модификация микропрограмм

    Современная аппаратура устроена так, что процессор всегда начинает работу с выполнения программы, сохраненной в микросхеме памяти. Например, персональный компьютер начинает свою работу с выполнения программы, находящейся в микросхеме BIOS. Все устройства очень отличаются друг от друга, хотя для всех них существует один общий принцип: рано или поздно, так или иначе запускается загрузочный код. Этот код и называется встроенной микропрограммой. Микропрограмма находится в энергонезависимой памяти (то есть она не стирается, когда система выключается). Если вы не знаете, с чего начать, начните с загрузочного кода.

    Учитывая, что микропрограмма очень важна для нормального функционирования системы, руткит не должен оказывать на нее негативного влияния. Наоборот, руткит должен наделять существующий код новыми возможностями. Это легко сделать, если восстановить исходную микропрограмму утилитой наподобие IDA-Pro и найти подходящее место, куда можно внести исправления. Объем микропрограммы ограничен, так что если размер руткита недостаточно мал, чтобы поместиться в свободное место на микросхеме памяти, то придется еще и переписать некоторые фрагменты микропрограммы. Иногда случается, что в микропрограмме предусмотрены возможности, которые никогда не используются устройством, или же существуют секции с «лишними» в данных условиях данными. Именно эти фрагменты могут быть кандидатами на перезапись.

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

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

    Доступ к устройству

    Помимо способности вычислять, любое программное обеспечение имеет еще одну очень полезную способность – способность перемещать данные с одного места на другое. Фактически, перемещение данных иногда даже более важно, чем вычисления. Ни один уважающий себе пользователь ПК не игнорирует скорость пересылки данных, то есть быстродействие шины, накопителей и процессора. Чем выше скорость – тем лучше. Большинство аппаратных средств компьютера позволяют программно управлять пересылкой данных и кода в микрочипы. У большинства устройств имеются микрочипы, которые можно адресовать каким-либо образом.

    Адресация устройств

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

    После того как микросхема выбрана, она читает данные из шины данных. Именно эта микросхема контролирует поток данных. Многие устройства имеют специальный микроконтроллер, который позволяет пересылать данные внутрь устройства через адресуемую область памяти – порт. Чтение из порта и запись в порт могут потребовать использования специальных машинных инструкций, и большинство процессоров имеет набор команд, специально предназначенных для этого.

    Доступ к BIOS

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

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

    Доступ к PCI- и PCMCIA-устройствам

    Очень много хороших устройств присоединяется к шинам PCI и PCMCIA, например, сетевые карты, карты беспроводной связи и великое множество внешних устройств. На каждом PCI-устройстве может быть собственная микросхема BIOS, и было бы очень неплохо разместить там свой руткит. Еще одна интересная идея состоит в том, чтобы использовать переносимые устройства (такие, как PCMCIA-карты или USB-ключи) для того, чтобы при их подключении вставить тело руткита непосредственно в оперативную память компьютера1.

    Несомненно, при работе с аппаратурой возникает много сложностей. Но в то же время у руткитов аппаратного уровня большой потенциал.

    Обновление микрокода

    Современные процессоры от Intel и AMD имеют возможность обновления микрокода. Специальный код загружается в процессор и изменяет работу процессора. Что происходит «под капотом», все еще остается тайной. Доступной документации по данному вопросу практически нет.

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

    В теории если бы хакер получил возможность изменить микрокод процессора, он смог бы добавить специальную «подрывную» инструкцию. Главным препятствием на данный момент является сам механизм обновления микрокода. Как только он будет раскрыт, станет возможным добавление специальных кодов с лазейкой. Очевидным примером могла бы быть инструкция, способная игнорировать разницу между третьим и нулевым кольцами защиты. Инструкция GОRINGZERO, например, могла бы переключать процессор в нулевое кольцо без каких-либо проверок безопасности.

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

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

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

    2.3 Клавиатурные шпионы

    Клавиатурные шпионы – это программа для скрытной записи информации о нажимаемых пользователем клавишах. У термина «клавиатурный шпион» есть ряд синонимов: Keyboard Logger, KeyLogger, кейлоггер; реже встречается термины "снупер", "snoop", "snooper" (от англ. snoop – буквально "человек, вечно сующий нос в чужие дела")

    Как правило, современные клавиатурные шпионы не просто записывает коды вводимых клавиш – он "привязывает" клавиатурный ввод к текущему окну и элементу ввода. Кроме того, многие клавиатурные шпионы отслеживают список запущенных приложений, умеют делать "снимки" экрана по заданному расписанию или событию, шпионить за содержимым буфера обмена и решать ряд задач, нацеленных на скрытное слежение за пользователем. Записываемая информация сохраняется на диске и большинство современных клавиатурных шпионов могут формировать различные отчеты, могут передавать их по электронной почте или http/ftp протоколу. Кроме того, ряд современных клавиатурных шпионов пользуются RootKit технологиями для маскировки следов своего присутствия в системе.

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

    Клавиатурный шпион на базе руткит-технологии в UserMode

    Принцип действия такого клавиатурного шпиона основан на перехвате ряда функций USER32.DLL для мониторинга их вызовов. Данные вредоносные программы пока не получили особого распространения, но это только вопрос времени. Опасность применения руткит-технологии в клавиатурном шпионе объясняется тем, что, во-первых, многие антикейлоггеры не рассчитаны на поиск шпионов такого типа и не способны им противодействовать, а во-вторых, антируткиты часто не проверяют перехваты функций библиотеки user32.dll.

    Принцип работы шпиона достаточно прост: при помощи любой из известных руткит-технологий производится перехват одной или нескольких функций, позволяющих получить контроль над вводимой с клавиатуры информацией. Самым простым является перехват функций GetMessage и PeekMessage (рис. 1).


    Рис. 1
    Работа шпиона организована следующим образом. Приложение вызывает функцию PeekMessage для того, чтобы узнать, есть ли в очереди сообщения указанного типа. Этот вызов перехватывается по руткит-принципу (методика в данном случае не имеет значения). Затем перехватчик вызывает реальную функцию PeekMessage из user32.dll и анализирует возвращаемые результаты. Если функция возвращает true, это означает, что сообщение было в очереди и что оно извлечено в тот буфер, указатель на который передается в качестве первого параметра функции. В этом случае перехватчик проверяет сообщения в буфере на предмет обнаружения сообщений типа WM_KEYDOWN (нажатие клавиши), WM_KEYUP (отпускание клавиши), WM_CHAR (посылается окну после обработки WM_KEYDOWN при помощи TranslateMessage). При выявлении подобного сообщения можно узнать код нажимаемой клавиши и передать его системе протоколирования и анализа (шаг 4). Далее управление возвращается приложению (шаг 5), которое не знает о наличии перехватчика.

    Подобный клавиатурный шпион очень опасен, так как:

    • он не обнаруживается стандартными методиками поиска клавиатурных шпионов;

    • возможно внедрение перехватчика по определенным условиям, в результате чего он внедряется не во все GUI-процессы, а в строго определенные (например, в процессы браузера или в приложение типа WebMoney);

    • против него бесполезны экранные клавиатуры и прочие средства борьбы с клавиатурными шпионами;

    • кроме перехвата функций PeekMessage и GetMessage, могут быть перехвачены функции копирования информации при работе с буфером обмена (OpenClipboard, CloseClipboard, GetClipboardData, SetClipboardData), опроса состояния клавиатуры (GetKeyState, GetAsyncKeyState, GetKeyboardState) и другие функции user32.dll, что усиливает опасность шпиона, а перехват функций типа CreateWindow позволяет отслеживать создание окон.

    Клавиатурный шпион на базе руткит-технологии в KernelMode

    Принцип действия шпиона данного типа аналогичен UserMode, но в данном случае производится перехват одной или нескольких функций win32k.sys. Как и в случае с UserMode, наибольший интерес для перехватчика представляет функция PeekMessage и ее аналоги, поскольку это позволяет производить мониторинг и модификацию абсолютно всех получаемых программой сообщений без установки ловушки или фильтра.

    На рис. 2 перехватчик показан условно, поскольку для его установки существуют разные методики, в частности:

    • перехват SYSCALL и INT 2E;

    • перехват функции с подменой адреса в соответствующей ячейке таблицы KeServiceDescriptorTableShadow. Единственной сложностью для создателя подобного шпиона является поиск этой таблицы, которая не экспортируется ядром и не документирована. Однако известны пути преодоления этой проблемы, а средства для этого можно найти в Интернете;

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



    Рис. 2

    Алгоритм работы шпиона весьма прост. Приложение вызывает функцию библиотеки user32.dll (шаг 1; в качестве примера рассмотрим вызов PeekMessage). Функция PeekMessage в user32.dll по своей сути является переходником, а в конечном счете при помощи SYSCALL в Windows XP или INT 2E в Windows NT и Windows 2000 будет произведен вызов функции ядра (шаг 2). Этот вызов будет перехвачен шпионом (местоположение перехватчика зависит от методики перехвата). Перехватчик, в свою очередь, вызовет реальную функцию (шаг 3) и проанализирует возвращенные ей результаты. В случае успешного извлечения из очереди сообщения нужного шпиону типа он произведет его анализ и запротоколирует результаты (шаг 4). Работа шпиона абсолютно незаметна для всех приложений, и обнаружить его можно только специальными программами, производящими поиск перехватов и модификации машинного кода модулей ядра.

    Программы для поиска и удаления клавиатурных шпионов

    Любой антивирусный продукт. Все антивирусы в той или иной мере могут находить клавиатурные шпионы, однако клавиатурный шпион не является вирусом и в результате пользы от антивируса мало;

    Утилиты, реализующие механизм сигнатурного поиска и эвристические механизмы поиска. Примером может служить утилита AVZ, сочетающая сигнатурный сканер и систему обнаружения клавиатурных шпионов на базе ловушек;

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

    Глава Буткит

    Буткит (Bootkit) (от англ. boot – загрузка и kit – набор инструментов) – это вредоносная программа (так называемая MBR-руткит), которая осуществляет модификацию загрузочного сектора MBR (Master Boot Record) – первого физического сектора на жёстком диске. (Известный представитель − Backdoor.Win32.Sinowal).

    Назначение

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

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

    Заражение

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

    Обнаружение и ликвидация

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

    3. Методики обнаружения RootKit в системе
    Обнаружение руткитов может быть делом довольно сложным, особенно если они работают в ядре. Причина в том, что руткит режима ядра способен менять функции, используемые всеми программами, в том числе программами защиты.

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

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

    Рассмотрим два основных подхода к обнаружению руткитов: определение факта присутствия руткита и выявление его деятельности.

    Обнаружение факта присутствия

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

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

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

    Поскольку программам, подобным Tripwire, присущи указанные ограничения, используются и другие методы обнаружения руткитов.

    Обнаружение деятельности

    Выявление деятельности руткита – это многообещающее новое направление в области обнаружения руткитов. Идея – поймать операционную систему на «лжи». Если вы найдете API-функции, которые возвращают неверные значения, то вы не только определите факт наличия руткита, но и узнаете, что он пытается скрыть. Однако для того чтобы определить, что система «врет», вам требуется получить истинное значение, не полагаясь на значение, возвращаемое проверяемой API-функцией.

    Базовые методики поиска RootKit:

    1. Сравнение двух «снимков» системы (например, списка файлов на диске). Первый снимок делается на проверяемой системе, второй – после загрузки с CD или подключения исследуемого HDD к заведомо чистому компьютеру. Подобная методика гарантированно позволит обнаружить любой RootKit, который маскирует на диске свои файлы.

    2. Сравнение данных, возвращаемых API функциями разного уровня и (или) получаемых низкоуровневыми методами (например, прямым чтением диска и анализом файлов реестра). Данная методика не требует перезагрузки исследуемого ПК и реализована в бесплатной утилите RootkitRevealer от SysInternals. Другим примером может случить утилита KLister (www.rootkit.com) для построения списка запущенных процессов, которая состоит из драйвера и консольной программы, использующей этот драйвер;

    3. Анализ в памяти функций основных библиотек на предмет наличия изменений их машинного кода. Данный метод наиболее эффективен для борьбы с RootKit в пользовательском режиме. Подобная методика позволяет не только обнаружить перехват функций, но и восстановить нормальную работу поврежденных функций. Кроме того, сравнение «снимков» системы, полученных до и после восстановления функций API во многих случаях позволяет обнаружить маскирующиеся процессы, сервисы и драйверы. Данная методика не требует перезагрузки и один из вариантов реализован в утилите AVZ;

    4. Анализ и восстановление ServiceDescriptorTable. Данная методика позволяет бороться с рядом перехватчиков, работающих в режиме ядра (собственно, с перехватчиками, основанными на правке SDT). Практическая реализация – утилита SDTRestore. Однако восстановление SDT окажет воздействие на работу всей системы и может привести к очень неприятным последствиям (в простейшем случае – полное зависание системы с выходом на BSoD, в худшем – непредсказуемое нарушение нормальной работы приложений, перехватывающих NativeAPI для реализации своих функций).


    Заключение
    Описанные выше базовые методики перехвата функций поясняют основные принципы работы RootKit. Однако следует помнить, что разработчики RootKit-технологий не стоят на месте, в результате постоянно появляются новые разработки, подходы и методы.

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

    Список использованной литературы

    1. Бабаш, А.В. Информационная безопасность. Лабораторный практикум: Учебное пособие / А.В. Бабаш, Е.К. Баранова, Ю.Н. Мельников. — М.: КноРус, 2016. — 136 c.

    2. Гафнер, В.В. Информационная безопасность: Учебное пособие / В.В. Гафнер. — Рн/Д: Феникс, 2017. — 324 c.

    3. Духан Е. И., Синадский Н. И., Хорьков Д.А. Программно-аппаратные средства защиты компьютерной информации. Екатеринбург: УрГУ; 2018. 240 с.

    4. Гинодман В.А., Обелец Н. В., Павлов А.А. От первых вирусов до целевых атак. М.: МИФИ; 2014. 96 с.

    5. Зайцев О.В. ROOTKITS, SPYWARE/ADWARE, KEYLOGGERS & BACKDOORS: обнаружение и защита. - СПб.: БХВ-Петербург, 2016.

    6. Кияев В. И. Безопасность информационных систем. М.: Открытый Университет «ИНТУИТ»; 2016. 192 с.

    7. Климентьев К. Е. Компьютерные вирусы и антивирусы. Д.А. Мовчан, ред. М.: ДМК-Пресс; 2015.

    8. Ложников П. С., Михайлов Е. М. Обеспечение безопасности сетевой инфраструктуры на основе операционной системы Microsoft. М.: Бином; 2016.

    9. Рудниченко А. К., Шаханова М. В. Актуальные способы внедрения компьютерных вирусов в информационные системы. Молодой ученый. 2016;(11):221-223.

    10. Шаньгин, В.Ф. Информационная безопасность компьютерных систем и сетей: Учебное пособие / В.Ф. Шаньгин. — М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2017. — 416 c.

    11. Ярочкин, В.И. Информационная безопасность. 5-е изд. / В.И. Ярочкин. — М.: Академический проект, 2016. — 544 c.
    1   2


    написать администратору сайта