2015_лекции / Лекция №5_2015
.pdfСлужбы Windows
Варианты запуска службы
0 — Низкоуровневые драйверы, например, драйверы дисков, которые загружаются на самом раннем этапе загрузки — загрузки ядра;
1 — Драйверы, которые загружаются после инициализации ядра ОС;
2 — Службы, которые должны быть загружены диспетчером управления службами (равен параметру —
«Авто»);
3 — Службы, запускаемые диспетчером управления службами только в случае получения явной инструкции на загрузку (равен параметру — «Вручную»);
4 — Службы, которые не загружаются (равен параметру
— «Отключено»).
Службы Windows
Службы Windows
API для работы со службами
OpenSCManager возвращает указатель на диспетчер управления службами. Любой код, работающий с сервисами, вызывает эту функцию.
CreateService добавляет новую службу, и позволяет создающему процессу указать, запускать ли службу автоматически при запуске ОС или в ручном режиме.
StartService запуск службы, используется в том случае, если служба запускается в ручном режиме.
Процессы
Процесс располагает определенными ресурсами. Он размещен в некотором виртуальном адресном пространстве, содержащем образ этого процесса.
Процесс управляет другими ресурсами (файлы, устройства ввода / вывода и т.д.).
Процесс подвержен диспетчеризации.
Процесс может содержать несколько нитей.
Процессы
BOOL CreateProcess( |
|
LPCTSTR lpApplicationName , |
// имя исполняемого модуля |
LPTSTR lpCommandLine, |
// командная строка |
LPSECURITY_ATTRIBUTES lpProcessAttributes , // SD (дескриптор |
|
|
безопасности) |
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD |
|
BOOL bInheritHandles, |
// дескриптор параметра |
|
наследования |
DWORD dwCreationFlags, |
// флажки создания |
LPVOID lpEnvironment, |
// новый блок конфигурации |
LPCTSTR lpCurrentDirectory, |
// имя текущего каталога |
LPSTARTUPINFO lpStartupInfo, |
// информация предустановки |
LPPROCESS_INFORMATION lpProcessInformation // информация о процессе
);
Потоки (Threads)
Потоки внутри процесса разделяют общее адресное пространство и ресурсы. Однако оперируют собственными регистрами процессора и стекомю Эти значения хранятся в специальной структуре thread context.
Потоки (Threads)
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // дескриптор защиты
SIZE_T dwStackSize, // начальный размер стека
LPTHREAD_START_ROUTINE lpStartAddress, // функция
|
потока |
LPVOID lpParameter, |
// параметр потока |
DWORD dwCreationFlags, |
// опции создания |
LPDWORD lpThreadId |
// идентификатор потока |
);
Потоки (Threads)
Способы использования функции
для загрузки ВрПО в адресное пространство другого процесса.
для создания двух потоков отправки и получения данных
Процессы и потоки
TEB = Thread Environment Block
Контейнер для хранения определенных параметров потока (указатель на стек, указатель на список обработчиков исключений и т.д.)
Windows использует сегмент fs для его хранения (смещение 0x18 – указатель на себя)
mov eax, fs:[0x18]
PEB = Process Environment Block
Контейнер для хранения определенных параметров процесса (указатель на список загруженных модулей, статус отладчика, переменные окружения)
TEB есть указатель на структуру PEB по смещению 0x30
Структуры важны при анализе кода
Имеется список загруженных модулей (Peb.Ldr)
Есть проверка на использование отладчика (PEB.BeingDebugged)
Используется для установки обработчика исключений
(TEB.NtTib.ExceptionList)
Мьютексы
Механизм контроля доступа к ресурсам.
Только один поток имеет доступ к мьютексу во время исполнения.
Во ВрПо часто используются жестко прописанные имена мьютексов для организации взаимодействия между вредоносными процессами => их можно использовать как признак заражения системы