Impacket: взгляд red team и blue team
Дата публикации: 8 октября 2025 г.
Введение
Impacket — это мощная библиотека на Python, ориентированная на работу с сетевыми протоколами на низком уровне, а также набор примеров и утилит, удобных для пентестеров и злоумышленников.
Impacket сочетает в себе две взаимодополняющие части:
- Библиотечный (API) уровень — классы, функции для создания, парсинга и взаимодействия с протоколами (Ethernet, IP, TCP/UDP, SMB, MSRPC и др.).
- Утилитарный (инструментальный) уровень — готовые 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:
- Скрипт создает объекты соединения (например, SMBConnection, RPCTransport и т.д.).
- Устанавливает транспорт (TCP, SMB, HTTP) и нижележащий протокол.
- Проводится аутентификация (пароль / хэш / Kerberos).
- Выполняются действия — вызовы RPC / MSRPC / DCOM / WMI / вызовы интерфейсов и функций.
- Получаются ответы, парсятся, возвращаются результаты.
- В некоторых случаях создаются обратные соединения, серверы, динамические 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 — мощный инструмент, но не без слабых мест и ограничений:
- Неавторизованный доступ требует прав
Многие функции (например, secretsdump, DCSync) требуют значительных прав в домене (Domain Replication, привилегий на DC и т.д.). Без этого возможности ограничены. - Надёжность обработки исключений / таймаутов
При медленной или нестабильной сети некоторые модули могут проявлять нестабильность или падать на таймаутах. Код сторонний может быть недостаточно устойчив к плохим условиям. - Обнаружимость и следы в журналах
Поскольку утилиты выполняют операции через легитимные протоколы (SMB, DCOM, RPC, WMI), они могут быть «mimicry» атак, но всё же оставляют характерные артефакты в журналах Windows, сетевой активности, RPC- и DCOM-логи. - Поддержка обновлений / изменения API / совместимость версий
Изменения в операционных системах, в протоколах Windows могут «поломать» некоторые утилиты Impacket или потребовать правок. - Не полностью реализованные интерфейсы
Некоторые 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 (например, атрибуты учетной записи)
- Сохраняет результат
Шаги реализации
- Импорт необходимых классов и настроек:
from impacket.smbconnection import SMBConnection from impacket.dcerpc.v5 import transport, lsad from impacket.dcerpc.v5.rpcrt import DCERPCException
- Установление SMB соединения:
conn = SMBConnection(target_ip, target_ip) conn.login(user, password)
- Поднятие транспортного уровня 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)
- Отправка запроса RPC:
# Пример вызова LsarOpenPolicy2 и LsarEnumerateAccountRights request = lsad.OpenPolicy2(...) resp = lsad.hLsarEnumerateAccountRights(dce, ...)
- Разбор ответа и сохранение данных.
Этот пример демонстрирует, как, без использования стандартных утилит, можно интегрировать функции 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:
Задачи от системных пользователей, не соответствующих стандартным шаблонам.