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)

Эти технологии не работают изолированно — атаки почти всегда используют их в комбинации. Например:

  1. SMB → для доступа к системе.

  2. Named Pipe → для создания RPC-канала.

  3. RPC → для выполнения вредоносных команд.

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

SMB - Server Message Block

Сетевой протокол прикладного уровня (работает поверх TCP 445).

Ключевые версии:

  • SMBv1 - устаревший, уязвим к EternalBlue (MS17-010)

  • SMBv2

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

Специальные административные шарыC$ и ADMIN$

Назначение:

  • C$ — доступ к корню системного диска (обычно C:, может быть D:, Z: и какой угодно)

  • ADMIN$ — альтернативный путь к %SYSTEMROOT% (обычно C:\Windows)

Особенности:

  • Доступны только аутентифицированным пользователям с административными правами

  • Автоматически создаются при установке Windows

  • Часто используются для горизонтального перемещения

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

Какой в итоге предоставлен: чтение/запись/чтение атрибутов и т.д.

Основываясь на событии 5145 SOC'и любят писать правила: на анонимный доступ, на доступ к административным шарам, на массовый доступ к общим ресурсам или доступ к критичным файлам.

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

По-настоящему Event ID 5145 полезен для обнаружения:

Общая схема работы RPC

  1. Клиент обращается к EPM (порт 135), чтобы узнать динамический порт службы svcctl.

  2. EPM возвращает текущий порт (например, 49672), который использует svchost.exe с загруженным svcctl.

  3. Клиент подключается напрямую к этому порту и отправляет команду (например, "запусти службу X").

  4. 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), который позволяет передавать данные между родственными процессами (обычно между родительским и дочерним процессом).

  1. Однонаправленность:

    • Могут передавать данные только в одном направлении

    • Для двусторонней связи нужно создавать два канала

  2. Анонимность:

    • Не имеют имён (в отличие от именованных каналов)

    • Не видны в объектном менеджере Windows

  3. Ограниченная область применения:

    • Работают только между родственными процессами

    • Обычно между родительским и дочерним процессом

    • Используется в командных процессорах для перенаправления вывода. Например, в cmd.exe для конструкции dir | more

  4. Нет олицетворения (Impersonation):

    • В отличие от именованных каналов, анонимные не поддерживают ImpersonateNamedPipeClient

    • Поэтому не могут быть использованы для атак типа GetSystem

  5. Ограниченная область видимости:

    • Каналы доступны только процессам, которые явно получили хэндлы

    • Не могут быть случайно перехвачены другими процессами

  6. Автоматическое закрытие:

    • При завершении процесса все хэндлы закрываются

    • Уменьшает риск утечки ресурсов

Last updated

Was this helpful?