Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

вторая_чать_диплома

.pdf
Скачиваний:
8
Добавлен:
19.03.2016
Размер:
1.63 Mб
Скачать

Для достижения поставленной цели необходимо разобраться в

следующем:

1)Посмотреть на хронологию развития, провести анализ наиболее распространѐнных методов перехвата и скрытия, применяемых в современных руткит приложениях;

2)Для проведения экспериментов подготовить тестовую платформу для проведения исследований:

Установить ОС Windows на Virtual PC;

Заразить тестовую платформу некоторым вариантом вредоносного приложения с функциональностью скрытия своего присутствия для проведения тестов по поиску и удалению.

3)Попытаться использовать готовые решения для поиска угроз;

4)По итогам исследований реализовать готовый продукт по поиску

иудалению скрытого вредоносного программного обеспечения.

Конечными пользователями модуля будут пользователи настольных

Windows систем версий XP, Vista, 7, 8 и более поздние.

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

Исполняемый файл приложения;

Набор библиотек Qt, используемых для построения графического интерфейса;

Runtime библиотеки Microsoft Visual C++;

Файлы и каталоги с конфигурационными файлами приложения.

2.1 Общая классификация компьютерных угроз

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

11

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

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

Во всѐм мире принято классифицировать подобные приложения на некоторые категории [5]:

Вирус(Virus) – это самовоспроизводящийся программный код,

который внедряется в установленные программы без согласия пользователя.

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

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

Некоторые черви существуют в виде сохраненных на жестком диске файлов,

анекоторые находятся лишь в оперативной памяти компьютера;

Троянская программа (Trojan). По своему действию является противоположностью вирусам и червям. Его предлагают загрузить под видом законного приложения, однако вместо заявленной функциональности

12

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

например, бэкдор (средства удалнного администрирования) и троян-

загрузчик (устанавливает на компьютер жертвы вредоносный код);

Бэкдор (Backdoor) (средство удаленного администрирования).

Бэкдор, или RAT (remote administration tool), – это приложение, которое позволяет честному системному администратору или злобному злоумышленнику управлять вашим компьютером на расстоянии. В

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

Загрузчик (Downloader). Является небольшой частью кода,

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

при просмотре зараженной картинки, он соединяется с удаленным сервером и загружает основную программу;

Руткит (Rootkit). Комплекс программ, набор технологий,

предназначенный для скрытия вредоносной активности.

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

либо даже прекращающих работу приложений для защиты пользовательской

13

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

2.2 Родоначальники и историческое развитие руткит технологий

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

Usenet неким программистом из Шри-Ланки. Еще раньше, начиная с 1995,

гуру Windows-программирования Джефри Рихтер в своей знаменитой книге

[6] «Advanced Windows» и четвертом ее издании «Programming Applications for Microsoft Windows» раскрывает технологии перехвата системных вызовов на уровне пользователя, которые будут впоследствии использованы во многих руткитах с точностью до приведенного в книге исходного кода.

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

Исследования системных механизмов защиты Windows продолжились,

и вслед за NTRootkit (автор Хоглунд) было выпущено еще несколько утилит,

позволяющих скрывать объекты в операционной системе.

2000 г. he4hook, проект русского программиста. Утилита не несет в себе вредоносного функционала, но является инструментом для сокрытия файлов. Работает в режиме ядра. Что характерно, самим автором не обозначается как руткит.

2002 г. Hacker Defender (HacDef). Это также лишь инструмент, но уже более мощный – при помощи него можно скрыть любой файл, процесс или ключ реестра, параметры гибко настраиваются в файле конфигурации.

Работает преимущественно в режиме пользователя.

2003 г. Vanquish – инструмент, позволяющий скрывать файлы,

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

14

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

2003 г. Haxdoor. Это уже не утилита, а полноценный бэкдор,

использующий руткит-технологии для самомаскировки. Работает в режиме ядра.

2004 г. FU – утилита для скрытия процессов. Реализует принципиально новую технологию, основанную на изменении самих системных структур, а

не путей доступа к ним. Автор Хогланд.

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

Руткиты этого периода (2000–2004) четко вписываются в общепринятую, но устаревшую классификацию: руткит может функционировать на уровне пользователя или на уровне ядра, на основе модификации цепочки системных вызовов (Execution Path Modification) или на основе прямого изменения системных данных (Direct Kernel Objects Manipulation). Современные руткиты (Rustok, TDSS, TDL) это крайне сложные и защищѐнные системы, представляющие собой компиляцию различных техник скрытия и противодействия системам обнаружения. Они активно применяют старые и давно известные технологии – заражения исполняемых файлов с целью распространения и внедрения в ядро системы,

шифрование вредоносного кода [7], трафика, внедрение в загрузочные сектора жѐстких дисков, а для полной скрытности реализуют свои собственные файловые системы.

2.3 Наиболее популярные механизмы скрытия

Перед тем как начать рассматривать технологии скрытия необходимо вспомнить, что современные операционные системы работают в

15

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

котором происходит сбой [8]. В таких случаях говорится, что процессы операционной системы работают в пользовательском режиме (user mode или же ring3). Существует второй режим работы процессора, называется он режимом ядра (kernel mode или ring0). В режиме ядра выполняются все драйвера, а так же и сама операционная система. Сбой на уровне ядра,

приводит к полному краху системы. Исходя из этого, все руткиты делятся на два типа – те, которые выполняются в режиме пользователя и те, которые выполняются в привилегированном режиме (т.е. в ядре).

Помимо этого, сами методы сокрытия присутствия в системе можно разделить на группы:

модификация пути выполнения обработчиков;

модификация системных структур;

скрытие контекста выполнения.

Данные методы используются для сокрытия сетевой активности,

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

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

основанный на перехвате вызов API-функций [9] (рисунок 3):

16

Рисунок 3 - Перехват обращений к функциям

Данный способ основан на использовании особенности вызовов системных API-функций, которые производятся приложениями либо через специальные области данных [10] (таблицы импорта/экспорта), либо обращением через полученный с помощью API-функции GetProcAddress

адрес. Программный код реализуется в DLL-модулях, которые затем внедряются в адресные пространства существующих в системе процессов,

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

что облегчает его использование.

Но вместе с этим преимуществом подобная реализация, как и другие реализации rootkit пользовательского режима, обладает существенным недостатком — низким качеством сокрытия информации. Это означает, что присутствие в системе rootkit пользовательского режима без труда можно обнаружить с помощью специализированных утилит, несмотря на существование целого ряда методик скрытия модуля из памяти процесса. Но тут есть интересная особенность – современные антируткит приложения при поиске скрытых угроз в пользовательском режиме могут ограничиваться несколькими системными процессами, к примеру, проводником Windows (explorer.exe) или даже только одним, собственным. А это значит, что если вредоносный модуль не будет внедрѐн в процесс антивирусного приложения, его активность замечена не будет. Такой подход обусловлен гонкой за скоростью, а не качеством защиты. Именно по причине эффективности скрытия обусловлен отмеченный в последнее время рост

17

интереса к rootkit-технологиям режима ядра, несмотря на более высокую сложность их разработки.

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

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

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

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

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

18

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

Примером использования метода модификации системных структур является изменение системного списка PsActiveProcessList. Этот подход использует rootkit FU, что позволяет скрыть любой процесс от просмотра его

большинством системных утилит (рисунок 4, 5):

Рисунок 4 - Оригинальный список процессов

19

Рисунок 5 - Модифицированный список процессов

Из рисунка 4 видно, что запущенный текстовый редактор Notepad

виден в списке активных процессов под именем notepad.exe. Снимок экрана,

приведенный на рисунке 5, сделан после запуска rootkit FU с командой сокрытия процесса. Из рисунка видно, что при активном редакторе, его имя пропало из списка активных процессов (отмечено красной стрелкой). Идея скрытия из системных структур очень простая, для начала необходимо получить адрес одной из интересуемых структур, а затем скрыть еѐ из списка подобных системных структур. На практике данный метод показал свою большую эффективность. Далеко не многие сканеры скрытых угроз в состоянии обнаружить сокрытие т.к. требуется хорошее понимание принципов устройства конкретной версии операционной системы и знание

20