SMB: Атаки через RPC и именованные каналы
Как детектировать атаки через SMB, RPC и именованные каналы. Разбор работы инструментов, примеры логов. Учимся ловить Impacket, горизонтальное перемещение и secretsdump.
SMB (Server Message Block) — протокол для доступа к файлам, принтерам и удалённому управлению (порт 445). SMB — это транспорт.
RPC (Remote Procedure Call) — механизм для вызова функций на удалённых системах (порт 135 + динамические порты).
RPC — язык общения между системами.
Named Pipes (именованные каналы) — механизм IPC (Inter-Process Communication) для обмена данными между процессами (в т.ч. по сети). Named Pipes — способ доставки RPC-команд.
Примеры каналов:
\pipe\lsarpc
— для аутентификации (LSA)\pipe\samr
— для управления учётными записями (SAM)\pipe\svcctl
— для управления службами (PsExec)
Эти технологии не работают изолированно — атаки почти всегда используют их в комбинации. Например:
SMB → для доступа к системе.
Named Pipe → для создания RPC-канала.
RPC → для выполнения вредоносных команд.
Понимание, как это работает, помогает находить сложные атаки и популярные способы горизонтального перемещения.
SMB - Server Message Block
Сетевой протокол прикладного уровня (работает поверх TCP 445).
Ключевые версии:
SMBv1 - устаревший, уязвим к EternalBlue (MS17-010)
SMBv2
SMBv3 - шифрованный, еще мало применяется в корпоративных средах. По умолчанию используется в актуальной версии Impacket. Поэтому пока наличие шифрованного SMB может стать индикатором, пока SMBv3 не приобрел широкого применения.
Специальные административные шарыC$
и ADMIN$
C$
и ADMIN$
Назначение:
C$
— доступ к корню системного диска (обычноC:
, может бытьD:
,Z:
и какой угодно)ADMIN$
— альтернативный путь к%SYSTEMROOT%
(обычноC:\Windows
)
Особенности:
Доступны только аутентифицированным пользователям с административными правами
Автоматически создаются при установке Windows
Часто используются для горизонтального перемещения
IPC$
(Inter-Process Communication)
IPC$
(Inter-Process Communication)Механизм межпроцессного взаимодействия (IPC) в Windows позволяет организовать обмен данными между процессами.
Назначение:
Единственная шара, которая не содержит файлов
Используется для RPC-коммуникации через именованные каналы
Критичен для работы многих системных функций (WMI, DCOM)
Технические детали:
Подключение к
IPC$
создаёт контекст безопасности для последующих RPC-вызововТребует аутентификации (даже анонимной при определённых настройках)
Event ID 5145
При доступе к системе по SMB, не важно к файлам или IPC$
, в системе Windows регистрируется событие Event ID 5145 (требуется расширенный аудит).
На самом деле будет зарегистрировано минимум 3 события (у всех трех будет совпадать порт источника подключения):
Event ID 4624 - успешная авторизация, с типом входа 3 (сетевой вход)
Event ID 5140 - общее подключение к шаре (без деталей файлов)
Event ID 5145 - наиболее интересное для анализа.
Subject
Под какой учетной записью произошло подключение, созданная сессия
Network Information
Откуда было подключение
Share Information
Куда было подключение: Share Name, Share Path ShareLocalPath - это локальный путь до файла на системе
Access Request Information
Какой доступ был запрошен Определяется как битовая маска
Access Check Results
Какой в итоге предоставлен: чтение/запись/чтение атрибутов и т.д.
По-настоящему Event ID 5145 полезен для обнаружения:
Общая схема работы RPC
Клиент обращается к EPM (порт 135), чтобы узнать динамический порт службы
svcctl
.EPM возвращает текущий порт (например,
49672
), который используетsvchost.exe
с загруженнымsvcctl
.Клиент подключается напрямую к этому порту и отправляет команду (например, "запусти службу X").
svcctl
внутриsvchost.exe
выполняет операцию через Windows API и возвращает результат.
В RPC (Remote Procedure Call) каждый сервис (например, svcctl
, lsarpc
, samr
) идентифицируется уникальным UUID (Universally Unique Identifier). Это позволяет клиентам находить нужный RPC-сервис.
Поскольку RPC использует динамические порты, простое блокирование портов неэффективно. Вместо этого можно:
# Запрещаем входящие вызовы к svcctl (управление службами)
New-NetFirewallRule -DisplayName "Block Svcctl RPC" `
-Direction Inbound `
-Action Block `
-Program "%SystemRoot%\system32\svchost.exe" `
-Service "RpcSs" `
-Protocol TCP
→ Блокирует все RPC-вызовы к svchost.exe
, где работает svcctl
.
Либо заблокировать конкретный интерфейс по uuid:
netsh rpc filter> add rule layer=um actiontype=block
netsh rpc filter> add condition field=if_uuid matchtype=equal data=c681d488-d850-11d0-8c52-00c04fd90f7e
netsh rpc filter> add filter
Эффективно против атак принудительной авторизации: Принудительная авторизация (Coerce Auth) — как заставить систему авторизоваться там, где не надо
Именованные каналы (Named Pipes) в Windows
Именованные каналы (Named Pipes) — это механизм межпроцессного взаимодействия (IPC) в Windows, позволяющий организовать обмен данными между процессами, возможно даже работающими на разных компьютерах в сети.
Основные характеристики:
Двунаправленная коммуникация: поддерживают чтение и запись
Именованные объекты: имеют уникальные имена в формате
\\.\pipe\ИмяКанала
\\.\pipe\ИмяКанала # Локальные каналы \\сервер\pipe\ИмяКанала # Удаленные каналы
Работают по принципу "клиент-сервер":
Сервер создает канал и ожидает подключений
Клиент подключается к существующему каналу
Особенность именованных каналов — поддержка Impersonation (олицетворения):
Сервер может временно "принять" права клиента
Реализуется через
ImpersonateNamedPipeClient
После олицетворения сервер получает токен доступа клиента
Анонимные каналы (Anonymous Pipes)
Анонимные каналы — это механизм однонаправленного межпроцессного взаимодействия (IPC), который позволяет передавать данные между родственными процессами (обычно между родительским и дочерним процессом).
Однонаправленность:
Могут передавать данные только в одном направлении
Для двусторонней связи нужно создавать два канала
Анонимность:
Не имеют имён (в отличие от именованных каналов)
Не видны в объектном менеджере Windows
Ограниченная область применения:
Работают только между родственными процессами
Обычно между родительским и дочерним процессом
Используется в командных процессорах для перенаправления вывода. Например, в cmd.exe для конструкции
dir | more
Нет олицетворения (Impersonation):
В отличие от именованных каналов, анонимные не поддерживают ImpersonateNamedPipeClient
Поэтому не могут быть использованы для атак типа GetSystem
Ограниченная область видимости:
Каналы доступны только процессам, которые явно получили хэндлы
Не могут быть случайно перехвачены другими процессами
Автоматическое закрытие:
При завершении процесса все хэндлы закрываются
Уменьшает риск утечки ресурсов
Last updated
Was this helpful?