Уроки Разработка малвари-6. Процессы Windows


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 168
Репутация
8 302
Безымянный.png


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

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

Что такое процесс Windows?

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

Потоки процесса

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

Память процесса

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

Типы памяти

Процессы могут иметь разные типы памяти:
  • Приватная память предназначена для одного процесса и не может быть поделена с другими процессами. Этот тип памяти используется для хранения данных, специфичных для процесса.
  • Отображенная память может быть разделена между двумя или несколькими процессами. Она используется для обмена данными между процессами, например, общими библиотеками, общими сегментами памяти и общими файлами. Отображенная память видима для других процессов, но защищена от изменений другими процессами.
  • Память образа содержит код и данные исполняемого файла. Она используется для хранения кода и данных, используемых процессом, таких как код программы, данные и ресурсы. Память образа часто связана с файлами DLL, загруженными в адресное пространство процесса.
Process Environment Block (PEB)

Process Environment Block (PEB)
- это структура данных в Windows, которая содержит информацию о процессе, такую как его параметры, информацию о запуске, информацию о выделенной куче, загруженные DLL и другое. Он используется операционной системой для хранения информации о запущенных процессах и загрузчиком Windows для запуска приложений. Также он хранит информацию о процессе, такую как идентификатор процесса (PID) и путь к исполняемому файлу.

Каждый созданный процесс имеет свою собственную структуру данных PEB, которая содержит свой собственный набор информации о нем.

Структура PEB

Структура PEB в C показана ниже. Зарезервированные члены этой структуры можно игнорировать.


C:
typedef struct _PEB {
    BYTE Reserved1[2];
    BYTE BeingDebugged;
    BYTE Reserved2[1];
    PVOID Reserved3[2];
    PPEB_LDR_DATA Ldr;
    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
    PVOID Reserved4[3];
    PVOID AtlThunkSListPtr;
    PVOID Reserved5;
    ULONG Reserved6;
    PVOID Reserved7;
    ULONG Reserved8;
    ULONG AtlThunkSListPtr32;
    PVOID Reserved9[45];
    BYTE Reserved10[96];
    PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
    BYTE Reserved11[128];
    PVOID Reserved12[1];
    ULONG SessionId;
} PEB, *PPEB;

Незарезервированные члены объясняются ниже.

BeingDebugged

BeingDebugged - это флаг в структуре PEB, который указывает, отлаживается процесс или нет. Он устанавливается в 1 (TRUE), когда процесс отлаживается, и 0 (FALSE), когда он не отлаживается. Он используется загрузчиком Windows для определения, следует ли запускать приложение с подключенным отладчиком или нет.

Ldr

Ldr - это указатель на структуру PEB_LDR_DATA в PEB. Эта структура содержит информацию о модулях динамической библиотеки (DLL) процесса. Она включает в себя список загруженных в процесс DLL, базовый адрес каждой DLL и размер каждого модуля. Он используется загрузчиком Windows для отслеживания загруженных в процесс DLL. Структура PEB_LDR_DATA показана ниже.

C:
typedef struct _PEB_LDR_DATA {
    BYTE Reserved1[8];
    PVOID Reserved2[3];
    LIST_ENTRY InMemoryOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;

Ldr может быть использован для поиска базового адреса определенной DLL, а также для определения функций, находящихся в ее адресном пространстве. Это будет использоваться в будущих модулях для создания пользовательской версии GetModuleHandleA/W для дополнительной скрытности.

ProcessParameters

ProcessParameters - это структура данных в PEB. Она содержит параметры командной строки, переданные процессу при его создании. Загрузчик Windows добавляет эти параметры в структуру PEB процесса. ProcessParameters - это указатель на структуру RTL_USER_PROCESS_PARAMETERS, показанную ниже.

C:
typedef struct _RTL_USER_PROCESS_PARAMETERS {
    BYTE Reserved1[116];
    PVOID Reserved2[10];
    UNICODE_STRING ImagePathName;
    UNICODE_STRING CommandLine;
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

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

AtlThunkSListPtr & AtlThunkSListPtr32

AtlThunkSListPtr и AtlThunkSListPtr32 используются модулем ATL (Active Template Library) для хранения указателя на связанный список функций преобразования. Функции преобразования используются для вызова функций, реализованных в другом адресном пространстве, они часто представляют функции, экспортируемые из файла DLL (Dynamic Link Library). Связанный список функций преобразования используется модулем ATL для управления процессом преобразования.

PostProcessInitRoutine

Поле PostProcessInitRoutine в структуре PEB используется для хранения указателя на функцию, которая вызывается операционной системой после завершения инициализации TLS (Thread Local Storage) для всех потоков в процессе. Эта функция может быть использована для выполнения любых дополнительных задач инициализации, необходимых для процесса.

TLS и обратные вызовы TLS будут рассмотрены подробнее позже, когда это потребуется.

SessionId

SessionId в PEB - это уникальный идентификатор, присвоенный одной сессии. Он используется для отслеживания активности пользователя во время сессии.

Thread Environment Block (TEB)

Thread Environment Block (TEB) - это структура данных в Windows, которая хранит информацию о потоке. Он содержит окружение потока, контекст безопасности и другую связанную информацию. Он хранится в стеке потока и используется ядром Windows для управления потоками.

Структура TEB

Структура TEB в C показана ниже. Зарезервированные члены этой структуры можно игнорировать.

C:
typedef struct _TEB {
    PVOID Reserved1[12];
    PPEB ProcessEnvironmentBlock;
    PVOID Reserved2[399];
    BYTE Reserved3[1952];
    PVOID TlsSlots[64];
    BYTE Reserved4[8];
    PVOID Reserved5[26];
    PVOID ReservedForOle;
    PVOID Reserved6[4];
    PVOID TlsExpansionSlots;
} TEB, *PTEB;

ProcessEnvironmentBlock (PEB)

Это указатель на структуру PEB, рассмотренную выше. PEB находится внутри Блока окружения потока (TEB) и используется для хранения информации о текущем выполняющемся процессе.

TlsSlots

Слоты TLS (Thread Local Storage) - это места в TEB, которые используются для хранения данных, специфичных для потока. Каждый поток в Windows имеет свой собственный TEB, и каждый TEB имеет набор слотов TLS. Приложения могут использовать эти слоты для хранения данных, специфичных для этого потока, таких как переменные, специфичные для потока, дескрипторы, специфичные для потока, состояния и так далее.

TlsExpansionSlots

Слоты расширения TLS в TEB - это набор указателей, используемых для хранения данных локального хранилища потока. Слоты расширения TLS зарезервированы для использования системными DLL.

Дескрипторы процесса и потока

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

Эти идентификаторы можно использовать для открытия дескриптора процесса или потока с использованием нижеуказанных WinAPI:
  • OpenProcess - открывает существующий дескриптор объекта процесса через его идентификатор.
  • OpenThread - открывает существующий дескриптор объекта потока через его идентификатор.
Эти WinAPI будут рассмотрены подробнее позже, когда это потребуется. На данный момент достаточно знать, что открытый дескриптор может быть использован для выполнения дополнительных действий с соответствующим объектом Windows, таким как приостановка процесса или потока.

Дескрипторы всегда следует закрывать после того, как они больше не требуются, чтобы избежать утечки дескрипторов. Это достигается с помощью вызова WinAPI CloseHandle.
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
159
Репутация
136
10X!
 

yum

Пользователь
Форумчанин
Регистрация
30.11.2023
Сообщения
47
Репутация
3
Я не понимаю до конца для чего нужны эти структуры , как мне их использовать , для чего они нужны , почему именно это мне надо знать. Как мне использовать PEB или TEB ? Как работать с спроцессами , создавать и получать дескриптор процессора это понятно , но что мне еще надо знать при разработке в малвари
 

yum

Пользователь
Форумчанин
Регистрация
30.11.2023
Сообщения
47
Репутация
3
Можете подсказать какие нибудь атаки на процессы , или как мне можно работать с процессами , чтобы получать меньше детектов ? Чтобы просто я набил себе руку и понимал , а то прочитав это , я просто понял , что за поля там в структурах и через некоторое время просто забуду про них
 

MKII

Просветленный
Просветленный
Регистрация
03.10.2022
Сообщения
263
Репутация
197
Я не понимаю до конца для чего нужны эти структуры , как мне их использовать , для чего они нужны , почему именно это мне надо знать. Как мне использовать PEB или TEB ? Как работать с спроцессами , создавать и получать дескриптор процессора это понятно , но что мне еще надо знать при разработке в малвари
1. PEB: Это типа информационной доски процесса. Тут данные о загруженных DLL, параметры запуска, даже флаг отладки. Например, можешь проверить, не в режиме ли отладки твой процесс - это может спалить твой вирус. Или используй инфу о DLL для маскировки.
2. TEB: Это уже про потоки в процессе. Тут инфа о локальном хранилище, контексте безопасности. Можешь использовать для управления потоками, хитрых штучек с локальным хранением.
 

MKII

Просветленный
Просветленный
Регистрация
03.10.2022
Сообщения
263
Репутация
197
Можете подсказать какие нибудь атаки на процессы , или как мне можно работать с процессами , чтобы получать меньше детектов ? Чтобы просто я набил себе руку и понимал , а то прочитав это , я просто понял , что за поля там в структурах и через некоторое время просто забуду про них
1. Injection Techniques: Используй методы внедрения, типа Process Hollowing или DLL Injection, чтобы запускать свой код внутри доверенных процессов. Это поможет тебе скрыться от антивирусов, потому что твой код будет выполняться в контексте легитимного процесса.
2. Hooking: Применяй хуки на системные вызовы или функции API, чтобы перехватывать и изменять их поведение. Это может помочь тебе мониторить или блокировать определенные действия, не будучи замеченным.
3. Privilege Escalation: Попробуй использовать уязвимости для повышения привилегий твоего процесса. С более высокими привилегиями ты сможешь делать больше вещей, не спалясь.
4. Living off the Land: Используй встроенные инструменты и функции Windows для своих целей. Это делает обнаружение сложнее, так как ты используешь легитимные инструменты системы.
5. Stealth Techniques: Разберись в техниках скрытности, вроде манипулирования PEB для обхода определенных проверок безопасности или использования методов обфускации кода.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 168
Репутация
8 302
Чтобы просто я набил себе руку и понимал , а то прочитав это , я просто понял , что за поля там в структурах и через некоторое время просто забуду про них
Вероятно нужно читать следующие уроки цикла, там есть примеры атак.
Вначале идет теория, дальше там практика уже.)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 168
Репутация
8 302
Там потом отсылки будут на эту часть цикла по структурам...
 
Автор темы Похожие темы Форум Ответы Дата
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 6
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 16
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 6
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 8
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 4
X-Shar Введение в разработку вредоносных программ 2
Похожие темы
На заметку Разработка настоящего вируса в 2024 году
Уроки Разработка вирусов-35.Обход EDRs.Последняя тема цикла
Уроки Разработка вирусов-34.Обход Windows defender
Уроки Разработка вирусов-33.Уменьшение вероятности детекта зверька
Уроки Разработка вирусов-32.Открываем врата ада
Уроки Разработка вирусов-31.Обход виртуальных машин
Уроки Разработка вирусов-30.Черпаем силы в антиотладке
Уроки Разработка малвари-18.Определение PID нужного процесса, или перечисления процессов
Уроки Разработка малвари-14. Размещаем Payload удаленно на сервере
Уроки Разработка малвари-13.Инъекция шелл-кода в процесс
Уроки Разработка малвари-12. Иньекция в процесс
Уроки Разработка малвари-11. Локальный запуск Payload
Уроки Разработка малвари-10. Обфускация Payload
Уроки Разработка малвари-9. Шифруем Payload
Уроки Разработка малвари-8. Куда класть нагрузку ?
Уроки Разработка малвари-7. Виды детектов
Уроки Разработка малвари - 5. Изучаем динамические библиотеки
Уроки Разработка малвари - 4. Шпаргалка по архитектуре винды
Уроки Разработка малвари - 3. Так какой-же язык выбрать !?
Уроки Разработка малвари - 2. Изучаем инструменты
Верх Низ