yandex metrika
Impacket: взгляд red team и blue team

Impacket: взгляд red team и blue team

Дата публикации: 8 октября 2025 г.

Введение

Impacket — это мощная библиотека на Python, ориентированная на работу с сетевыми протоколами на низком уровне, а также набор примеров и утилит, удобных для пентестеров и злоумышленников.

Impacket сочетает в себе две взаимодополняющие части:

  1. Библиотечный (API) уровень — классы, функции для создания, парсинга и взаимодействия с протоколами (Ethernet, IP, TCP/UDP, SMB, MSRPC и др.).
  2. Утилитарный (инструментальный) уровень — готовые Python-скрипты (например, psexec.py, wmiexec.py, secretsdump.py и др.), демонстрирующие применение библиотеки в задачах пентеста, постэксплуатации, перемещения по сети и вытягивания учетных данных.

Impacket ≠ набор скриптов.
Это фреймворк, который реализует внутренние структуры пакетов, ASN.1-деревья, Netlogon RPC, Kerberos AP_REQ/AP_REP/TGS_REQ, SMB2_COM_TREE_CONNECT и пр.
Его сила — в возможности передавать бинарные протоколы как Python-объекты и строить поверх них любые цепочки атак.

Ниже — глубокий разбор архитектуры, ключевых механизмов, техник злоупотребления и методов обнаружения.


Архитектура Impacket и основные компоненты

1. Компоненты библиотеки

Impacket разбит на модули, соответствующие уровням протоколов и сервисам:

  • Нижний уровень / канальный уровень / IP / транспортный уровень
    Модули для Ethernet, ARP, IP (v4/v6), TCP, UDP, ICMP и др. Эти классы позволяют вручную строить или парсить пакеты.
  • Сетевые протоколы Windows / SMB / MSRPC / NMB / DCE-RPC
    Это самая используемая часть библиотеки. Включены реализации SMB1, SMB2, SMB3, NMB, транспортных слоёв MSRPC (над TCP, над SMB, над HTTP и т.д.).
  • Аутентификация / безопасность / Kerberos / NTLM
    Поддерживается аутентификация с использованием паролей, хэшей (Pass-the-Hash), Kerberos (с билетами, AES-ключами и т.д.).
  • Примеры интерфейсов / сервисов MSRPC
    Частичные или полные реализации таких интерфейсов как LSAD, SAMR, SRVS, WKST, SCMR, DCOM, WMI, даже LDAP, TDS и др.
  • Инструменты / утилиты (скрипты)
    Примеры использования API: psexec.py, wmiexec.py, smbexec.py, secretsdump.py, GetTGT.py, GetST.py, GetNPUsers.py, ticketer.py и др.
  • Серверные компоненты (SMB-сервер, обратные SMB-серверы и др.)
    Например, impacket-smbserver позволяет поднять SMB-сервер на стороне атакующего, с целью получения NTLM-хэшей от жертв или для приема входящих соединений.

2. Поток работы и зависимости

Когда используется скрипт Impacket:

  1. Скрипт создает объекты соединения (например, SMBConnection, RPCTransport и т.д.).
  2. Устанавливает транспорт (TCP, SMB, HTTP) и нижележащий протокол.
  3. Проводится аутентификация (пароль / хэш / Kerberos).
  4. Выполняются действия — вызовы RPC / MSRPC / DCOM / WMI / вызовы интерфейсов и функций.
  5. Получаются ответы, парсятся, возвращаются результаты.
  6. В некоторых случаях создаются обратные соединения, серверы, динамические SMB-сервисы и др.

Ключ к гибкости Impacket — то, что пентестер может не использовать утилитарные скрипты, а строить собственные модули, комбинируя классы библиотеки.


Ключевые техники и модули / сценарии использования

Ниже — разбор наиболее значимых модулей, техник злоупотребления и сценариев, которые часто встречаются на практике.

1. Удалённое исполнение команд

Это, пожалуй, одна из самых популярных возможностей Impacket в сценариях постэксплуатации.

  • wmiexec.py
    Использует Windows Management Instrumentation (WMI) и DCOM для удалённого запуска процессов без необходимости установки агента на целевой системе. Минус: требуется административные права на целевой машине. Внутренний механизм: устанавливается SMB-сессия, далее через DCOM (через интерфейсы WMI) инициируется запуск.
  • smbexec.py / psexec.py
    Позволяют выполнять команды, иногда задействуя создание сервиса RemComSvc или создание обратных SMB-соединений для получения вывода. smbexec.py в некоторых случаях работает «без RemComSvc», создавая локальный SMB-сервер для приема результатов. psexec.py более «традиционный» подход, похожий на PsExec, но реализованный через библиотеки Impacket.
  • dcomexec.py / atexec.py
    Альтернативные пути запуска команд — через DCOM, COM интерфейсы (например, MMC, ShellWindows и др.), либо через Планировщик задач (Task Scheduler).

Эти утилиты позволяют реализовать «живое» выполнение команд без копирования бинарей, что повышает скрытность.

2. Добыча учетных данных и репликация AD / DCSync / доступ к SAM / LSA

  • secretsdump.py
    Это один из наиболее мощных и часто используемых скриптов. Он может:

    • Добывать хэши из удалённых реестров SAM/LSA или из DCSync, если запрошены соответствующие права.
    • Использовать -no-pass / -k (Kerberos) для сценариев без пароля.
    • Извлекать NTDS.dit (Active Directory БД), хэши NTLM, ключи Kerberos, истории паролей, остаточные секреты и др.
    • При наличии нужных прав на контроллере — инициировать DRSGetNCChanges и репликацию данных домена (то есть техника DCSync).
  • GetTGT.py / GetST.py
    Эти утилиты позволяют запросить Kerberos TGT (и TGS), используя пароли, хэши или существующие билеты, включая опции -impersonate, -s4u2proxy и др.

  • GetNPUsers.py
    Техника AS-REP Roasting: нахождение пользователей, у которых отключена предварительная аутентификация (DONT_REQUIRE_PREAUTH), запрос их TGT и последующее получение TGT в виде слабого шифра (поддающегося брутфорсу).

  • ticketer.py
    Создание фальшивых или «золотых» / «серебряных» билетов Kerberos (Golden / Silver Ticket) с возможностью задания групп, SIDs, срока действия и др.

  • rbcd.py / raiseChild.py
    Модули, работающие с доверительными отношениями между доменами и пробуждением привилегий через свойства msDS-AllowedToActOnBehalfOfOtherIdentity (RBCD / Abusing constrained delegation).

3. Relay-атаки и NTLM Relaying

Impacket можно использовать для реализации NTLM relay-атак:

  • Скрипты из набора Impacket (например, ntlmrelayx.py — расширенный relay инструмент) позволяют перехватывать NTLM-аутентификацию и перенаправлять её к интегрированным сервисам (SMB, LDAP, MSSQL и др.).
  • В контексте SMB-сервера (например, impacket-smbserver) можно «ловить» хэши от жертв, которые пытаются аутентифицироваться к такому псевдо-SMB-серверу, и далее использовать их в атаках.

4. Пользовательские инструменты / расширения

Поскольку Impacket — библиотека, специалисты могут создавать свои утилиты, расширяющие функционал: например, автоматизированные процессы lateral movement, интеграция с C2, расширенные RPC-интерфейсы и уязвимости. Библиотека дает возможность глубокого контроля над сетевым обменом, над форматами, над поведением протоколов (например, настройка таймингов, рекурсивных вызовов, нестандартных структур).


Уязвимости в применении и ограничения

Impacket — мощный инструмент, но не без слабых мест и ограничений:

  1. Неавторизованный доступ требует прав
    Многие функции (например, secretsdump, DCSync) требуют значительных прав в домене (Domain Replication, привилегий на DC и т.д.). Без этого возможности ограничены.
  2. Надёжность обработки исключений / таймаутов
    При медленной или нестабильной сети некоторые модули могут проявлять нестабильность или падать на таймаутах. Код сторонний может быть недостаточно устойчив к плохим условиям.
  3. Обнаружимость и следы в журналах
    Поскольку утилиты выполняют операции через легитимные протоколы (SMB, DCOM, RPC, WMI), они могут быть «mimicry» атак, но всё же оставляют характерные артефакты в журналах Windows, сетевой активности, RPC- и DCOM-логи.
  4. Поддержка обновлений / изменения API / совместимость версий
    Изменения в операционных системах, в протоколах Windows могут «поломать» некоторые утилиты Impacket или потребовать правок.
  5. Не полностью реализованные интерфейсы
    Некоторые RPC-интерфейсы реализованы частично или не до конца, что может ограничивать возможности конкретных атак.

Как злоумышленники используют Impacket: реальные кейсы и тактики

  • Широкое распространение в атаках
    По данным Red Canary, Impacket — вторая по распространённости угроза в их мониторинге. Также MITRE ATT&CK относит Impacket как инструмент S0357.
    В отчёте CISA указано, что APT-группы использовали Impacket в реальных атаках.
  • Латеральное перемещение и постэксплуатация
    Инструменты wmiexec.py, smbexec.py, psexec.py активно используются злоумышленниками для покорения новых хостов внутри сети без необходимости скачивать чужие бинарники.
  • Credential access / репликация AD
    secretsdump.py и техники DCSync часто применяются злоумышленниками, особенно при наличии прав репликации.
  • Abuse доверительных отношений / делегирования
    Использование rbcd.py, raiseChild.py и др. модулей позволяет злоумышленникам расширять свои привилегии, особенно в более сложных инфраструктурах с доменами и поддоменами.
  • Бесследное исполнение / «living off the land»
    Поскольку утилиты Impacket взаимодействуют через системные протоколы (SMB, RPC, DCOM), они часто выглядят как легитимный трафик и сложны для отделения от административной активности.
  • Автоматизация / интеграция в цепочки атак
    Злоумышленники могут интегрировать вызовы Impacket в свои скрипты, C2 или фреймворки, тем самым автоматизируя латеральные перемещения и credential dumping.

Обнаружение и защита от использования Impacket

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

1. Артефакты логов Windows / аудита

  • События создания процесса / командной строки
    Утилиты Impacket часто запускаются как python.exe wmiexec.py, psexec.py и т.д. – можно искать такие шаблоны командной строки (CmdLine) в логах Event ID 4688/4689 и др.
  • События службы / DCOM / RPC
    Активность DCOM / WMI вызовов может оставлять записи в журналах WMI-Operational, Microsoft-Windows-DCOM и др.
  • События аудита доступа к административным интерфейсам
    Доступ к интерфейсам LSAD, SRVS, SAMR и др. может быть зарегистрирован как нестандартный доступ.
  • Репликация AD / DRSGetNCChanges
    Использование DCSync оставляет характерные следы в журнале категории Directory Service RPC, особенно если вызываются привилегированные интерфейсы.

2. Сетевые признаки / поведенческий анализ

  • Необычные SMB-сессии
    Например, соединения с необычных исходных IP, соединения с административными ресурсами (IPC$, ADMIN$ и др.) с нестандартными инструментами.
  • RPC / DCOM вызовы, WMI-запросы
    Большой объём DCOM / RPC-трафика, особенно из хостов, где нет необходимости в этом функционале.
  • SMB-сервер, раздающий ресурсы (обратный SMB-сервер злоумышленника)
    Утилиты Impacket (например, smbserver) могут работать как SMB-источник.
  • Направленные запросы Kerberos / TGS / S4U / импользование нестандартных SPN
    Поведение, характерное для GetTGT / GetST / Ticketer — запросы на TGS, impersonate и т.д.
  • Аномалии по количеству соединений / повторению атак
    Высокая частота попыток подключения, повторные запросы, особенно в короткие промежутки времени.

3. Детекционные правила / тактические подходы

  • Использование Sigma-правил, которые ищут запуск утилит wmiexec, psexec, smbexec, net view и т.д.
  • Мониторинг командной строки в PowerShell / WMI процессов для подозрительных параметров (например, -k, -no-pass, -hashes).
  • Выявление обратных SMB-соединений и обнаружение SMB-серверов, отличных от штатных.
  • Слежение за событиями аудита AD / репликации (DRS RPC).
  • Ограничение прав репликации AD (только доверенные аккаунты), мониторинг доступа к этим правам.
  • Сегментация сети, запрет ненужных RPC / SMB между сегментами, усиление контроля административных соединений.
  • Жёсткая политика контроля запуска Python-скриптов и нестандартных бинарей на рабочих станциях и серверах.

Многие операторы безопасности в своих публикациях обращают внимание, что хотя детектировать Impacket достаточно легко, сложнее отличить легитимное использование от злонамеренного без контекста.


Пример глубокой интеграции: написание кастомного модуля на основе Impacket

Допустим, вашей задачей является построение модуля, который:

  • Подключается к целевой машине через SMB
  • Вызывает конкретный RPC-интерфейс (например, LSAD)
  • Получает определённые записи из AD (например, атрибуты учетной записи)
  • Сохраняет результат

Шаги реализации

  1. Импорт необходимых классов и настроек:
from impacket.smbconnection import SMBConnection from impacket.dcerpc.v5 import transport, lsad from impacket.dcerpc.v5.rpcrt import DCERPCException
  1. Установление SMB соединения:
conn = SMBConnection(target_ip, target_ip) conn.login(user, password)
  1. Поднятие транспортного уровня RPC через SMB:
rpc_transport = transport.SMBTransport(target_ip, filename=r'\lsarpc', smb_connection=conn) dce = rpc_transport.get_dce_rpc() dce.connect() dce.bind(lsad.MSRPC_UUID_LSAD)
  1. Отправка запроса RPC:
# Пример вызова LsarOpenPolicy2 и LsarEnumerateAccountRights request = lsad.OpenPolicy2(...) resp = lsad.hLsarEnumerateAccountRights(dce, ...)
  1. Разбор ответа и сохранение данных.

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

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

Примеры практического использования Impacket


1. Получение хэшей с удалённого DC — secretsdump.py

Сценарий: DCSync-атака через DRSUAPI

python3 secretsdump.py 'corp.local/Administrator:Password123@dc01.corp.local'

Что делает:

  • Подключается к \\PIPE\\drsuapi по SMB (порт 445);
  • Выполняет IDL_DRSGetNCChanges;
  • Реплицирует данные каталога;
  • Извлекает NTLM-хэши и Kerberos keys.

Forensic следы:

  • DCE/RPC BIND → UUID DRSUAPI (0x12345778-...);
  • События Directory Services 4662 (репликация объектов);
  • SMB соединения с IPC$/ADMIN$.

Detection idea:
DCE/RPC UUID DRSUAPI в сетевом трафике + Python process с SMB connect.


2. Удалённое выполнение команд — wmiexec.py

Сценарий: тихий удалённый запуск

python3 wmiexec.py 'corp.local/administrator:Password123@10.10.10.50' "whoami /all"

Что делает:

  • Аутентифицируется через DCOM/WMI;
  • Выполняет команду на удалённом хосте;
  • Возвращает stdout по RPC.

Forensic следы:

  • EventID 4688: cmd.exe, wmic.exe, или python.exe;
  • WMI-операции в Microsoft-Windows-WMI-Activity/Operational;
  • DCOM соединения (порт 135).

Detection idea:
Корреляция DCOM-инициализаций с процессом python.exe.


3. SMB релей и получение админ-доступа — ntlmrelayx.py

Сценарий: релей NTLM аутентификации на LDAP

python3 ntlmrelayx.py -t ldap://dc01.corp.local --escalate-user jdoe

Что делает:

  • Принимает NTLM-challenge от жертвы;
  • Релеет к LDAP на DC;
  • Меняет ACL для пользователя jdoe, добавляя его в Domain Admins.

Forensic следы:

  • LDAP Modify Request с SID History/Group membership;
  • Netlogon events с непривычных IP.

Detection idea:
Аномальные LDAP Modify в короткое время после SMB Auth события.


4. Подделка Kerberos тикета — ticketer.py

Сценарий: Golden Ticket / S4U2self

python3 ticketer.py -nthash 31d6cfe0d16ae931b73c59d7e0c089c0 -domain corp.local -domain-sid S-1-5-21-1177238915-3623811015-336143560 -user eviladmin

Что делает:

  • Создает TGT (AS-REP) от имени krbtgt;
  • Формирует PAC с нужными SID’ами;
  • Подписывает PAC и сохраняет .ccache.

Forensic следы:

  • Нет легитимного AS_REQ в DC logs;
  • Необычные TGS_REQ без предшествующего TGT;
  • Kerberos ticket lifetime не совпадает с policy.

Detection idea:
Искать Kerberos tickets с PAC Signatures от неизвестных key IDs.


5. Удалённое создание задачи — atexec.py

Сценарий: обход запрета на psexec

python3 atexec.py 'corp.local/admin:Password123@10.10.10.50' "net user evil Passw0rd! /add"

Что делает:

  • Создает задачу через AT RPC;
  • Запускает на целевой машине;
  • Возвращает stdout через SMB.

Forensic следы:

  • EventID 4698 (Task Created);
  • EventID 106 (Task Scheduler operational);
  • SMB сессия на IPC$.

Detection idea:
Задачи от системных пользователей, не соответствующих стандартным шаблонам.

Impacket: взгляд red team и blue team