Научная статья на тему 'ВНЕДРЕНИЕ КОДА И ПЕРЕХВАТ. ВИРТУАЛЬНАЯ ПАМЯТЬ'

ВНЕДРЕНИЕ КОДА И ПЕРЕХВАТ. ВИРТУАЛЬНАЯ ПАМЯТЬ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
206
25
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВИРТУАЛЬНАЯ ПАМЯТЬ / ФИЗИЧЕСКАЯ ПАМЯТЬ / ПРОЦЕССЫ / ОПЕРАЦИОННАЯ СИСТЕМА / ЯДРО ОС

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Кусаинова Улжан Болатовна, Сарсенбаева Жаныл, Плескачев Денис Владимирович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Кусаинова Улжан Болатовна, Сарсенбаева Жаныл, Плескачев Денис Владимирович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ВНЕДРЕНИЕ КОДА И ПЕРЕХВАТ. ВИРТУАЛЬНАЯ ПАМЯТЬ»

УДК 004.4

ВНЕДРЕНИЕ КОДА И ПЕРЕХВАТ. ВИРТУАЛЬНАЯ ПАМЯТЬ

Кусаинова У.Б., Сарсенбаева Ж., Плескачев Д.В.

Кокшетауский университет им. Абая Мырзахметова (г. Кокшетау, Республика Казахстан)

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

Ключевые слова: виртуальная память, физическая память, процессы, операционная система, ядро ОС.

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

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

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

Когда вы дважды щелка exe программу, содержащую последовательность инструкций, создается процесс. Операционная система Windows предоставляет каждому новому процессу, созданному с его собственным адресным пространством частной памяти (называемым памятью процесса). Память процесса - это часть виртуальной памяти; виртуальная память - это не реальная память, а иллюзия, созданная диспетчером памяти операционной системы. Именно из-за этой иллюзии каждый процесс думает, что у него есть свое собственное пространство памяти. Во время выполнения диспетчер памяти Windows с помощью оборудования преобразует виртуальный адрес в физический адрес (в ОЗУ), где находятся фактические данные; для управления памятью он выгружает часть памяти на диск [2]. Когда поток процесса обращается к виртуальному адресу, который выгружен на диск, диспетчер памяти загружает его с диска обратно в память. На следующей схеме показаны два процесса, Ли Б, память процессов которых отображается на физическую память, а некоторые части выгружаются на диск:

Виртуальная память делится на память процесса (пространство процесса или пространство пользователя) и память ядра (пространство ядра или системное пространство). Размер адресного пространства виртуальной памяти зависит от аппаратной платформы. Например, в 32-битной архитектуре по умолчанию общее виртуальное адресное пространство (как для памяти процесса, так и для памяти ядра) составляет максимум 4 ГБ. Нижняя половина (нижние 2 ГБ) в диапазоне от 0x00000000 до 0x7FFFFFFF зарезервирована для пользовательских процессов (память процесса или пространство пользователя), а верхняя половина адреса (верхние 2 ГБ) в диапазоне от 0x80000000 до 0xFFFFFFFF зарезервирована для память ядра (пространство ядра) [3].

Процесс А Процесс Б

В 32-битной системе из 4 ГБ виртуального адресного пространства каждый процесс считает, что у него есть 2 ГБ памяти процесса, в диапазоне от 0x00000000 до 0x7FFFFFFF. Поскольку каждый процесс считает, что у него есть собственное частное виртуальное адресное пространство (которое в конечном итоге отображается на физическую память), общий виртуальный адрес становится намного больше, чем доступная физическая память (ОЗУ). Диспетчер памяти Windows решает эту проблему, выгружая часть памяти на диск; это освобождает физическую память, которую можно использовать для других процессов или для самой операционной системы. Несмотря на то, что каждый процесс Windows имеет свое собственное пространство частной памяти, память ядра по большей части является общей и используется всеми процессами.

На следующей диаграмме показана структура памяти 32-разрядной архитектуры. Вы можете заметить разрыв в 64 КБ между пользователем и пространством ядра; эта область недоступна и гарантирует, что ядро случайно не пересечет границу и не повредит пользовательское пространство. Вы можете определить верхнюю границу (последний используемый адрес) адресного пространства процесса, исследуя символ MmHighestUserAddress, и нижнюю границу (первый используемый адрес) пространства ядра, запросив символ MmSystemRangeStart с помощью отладчика ядра, такого как Windbg [4]:

1 Пространство ядра v J OxFFFFFFFF 0x80000000

f Л Процесс А Процесс пользователя V У 0x7FFEFFFF Процесс Б Процесс С Процесс Процесс пользователя пользователя 0x00000000

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

Пространство виртуальной памяти не всегда нужно делить на две половины; это просто настройка по умолчанию. Например, вы можете включить загрузочный переключатель 3 ГБ с помощью следующей команды, которая увеличивает память процесса до 3 ГБ в диапазоне от 0x00000000 до OxBFFFFFFF; память ядра получает оставшийся 1 ГБ из 0xC0000000 -0xFFFFFFFF:

bcdedit /set increaseuserva 3072

Архитектура x64 обеспечивает гораздо большее адресное пространство как для памяти процесса, так и для памяти ядра, как показано на следующей диаграмме. В архитектуре x64 пространство пользователя находится в диапазоне от 0x0000000000000000 до 0x000007ffffffffff, а пространство ядра - от 0xffff080000000000 и выше. Вы можете заметить огромный адресный разрыв между пространством пользователя и пространством ядра; этот диапазон адресов нельзя использовать. Хотя на следующем снимке экрана показано, что пространство ядра начинается с 0xffff080000000000, первый используемый адрес в пространстве ядра начинается с ffff800000000000. Причина в том, что все адреса, используемые в коде x64, должны быть каноническими. Адрес считается каноническим, если биты 47-63 в нем установлены или полностью сброшены. Попытка использовать неканонический адрес приводит к исключению ошибки страницы [5].

Библиографический список

1. K.A. Monnappa. Learning malware Analysis. - Birmingham-Mumbai: Packt, 2018. - 501.

2. Васильков, А.В. Информационные системы и их безопасность. - М.: Форум, 2013. - 528

c.

3. Васильков, А.В. Безопасность и управление доступом в информационных системах. -М.: Форум, 2018. - 592 с.

4. Киселев, С.В. Операционные системы. - М.: Academia, 2018. - 250 с.

5. Таненбаум, Э. Современные операционные системы. - СПб.: Питер, 2019. - 1120 с.

Кусаинова Улжан Болатовна, магистр технических наук, старший преподаватель кафедры Информационные системы и Информатика, Кокшетауский университет им.Абая Мырзахметова (Республика Казахстан, г. Кокшетау).

Сарсенбаева Жаныл, магистр техники и технологии, преподаватель кафедры Информационные системы и Информатика, Кокшетауский университет им.Абая Мырзахметова (Республика Казахстан, г. Кокшетау).

Плескачев Денис Владимирович, магистр технических наук, преподаватель кафедры Информационные системы и Информатика, Кокшетауский университет им.Абая Мырзахметова (Республика Казахстан, г. Кокшетау). e-mail: ulzhan-92-92@mail.ru.

Дата поступления статьи: 17.09.2020

© Кусаинова У.Б., Сарсенбаева Ж., Плескачев Д.В.

i Надоели баннеры? Вы всегда можете отключить рекламу.