У цій статті ми розберемося, чому звичні методи захисту мережі часто дають хибне відчуття безпеки. Ви дізнаєтесь, як справжні зловмисники непомітно проникають у систему, отримують доступ до найціннішого та залишають адмінів ні з чим. Ми покажемо зовсім інший підхід до моніторингу, який дозволяє бачити кожен крок атакуючого наскрізь. Жодної сухої теорії – тільки реальна практика та розбір польотів на рівні мережевого трафіку.
Салют, ком’юніті HackYourMom! Сьогодні ми ліземо в самі нетрі безпеки Active Directory. Будемо відверті: серце будь-якої корпоративної мережі на базі Windows – це протокол аутентификації Kerberos. Ви логінитесь на свій робочий комп’ютер, лізете на мережеву файлову помийку, стукаєтесь у базу даних MS SQL чи відкриваєте внутрішній корпоративний портал – усе це генерує безперервний, щільний потік Kerberos-трафіку.
Саме тому для будь-якого адекватного пентестера (або реального хакера-практика) цей протокол – мета номер один. Ламаєш Kerberos – забираєш ключі від усього домену і стаєш богом у цій інфраструктурі.
Звично Blue Team будує свій захист навколо логів Windows та дорогих EDR-рішень. Побачили Event ID 4768 (запит квитка) чи 4771 (помилка аутентификації) у своїй SIEM-системі – і побігли розбиратися. Але чи не здається вам, що цей підхід трохи застарів і має купу сліпих зон?
У цій статті ми розберемо, чому справжня магія Threat Hunting ховається не в журналах подій на кінцевих точках, а безпосередньо у мережевому трафіку. Ми покажемо, як за допомогою аналізу сирих байтів та відкритих систем виявлення вторгнень, таких як Suricata IDS, ловити атакуючих за руку ще до того, як вони встигнуть закріпитися у вашій мережі.
Давайте чесно відповімо на питання: чому довіряти виключно Event Logs та агентам на серверах – це шлях в нікуди? Здавалося б, Microsoft дає нам непогані інструменти аудиту. Але на практиці все працює інакше:
Їх дуже легко почистити. Якщо зловмисник отримав права локального адміна (Local Admin) або вище, перше, що він зробить – пропише в консолі
Clear-EventLog -LogName Security. І все, кінці в воду. Ви навіть не дізнаєтесь, що саме він робив перед цим.
Малвар вміє їх “осліплювати”. Сучасні руткіти та просунуті імпланти (навіть базові штуки з Cobalt Strike) просто перехоплюють виклики ETW (Event Tracing for Windows) або роблять unhooking API-функцій вашого EDR. Система логування працює, дашборди в SOC світяться заспокійливим зеленим кольором, а хакер тим часом спокійно дампить хеші з пам’яті процесу LSASS.
Постійні затримки (Latency). Лог має записатися локально на диску, потім агент має відправити його по мережі в Splunk чи ELK, потім іде індексація, потім спрацювання правила кореляції, і тільки потім вилазить алерт. Цей лаг може складати хвилини, а іноді й години. Для вивантаження критичних даних цього часу більш ніж достатньо.
Брак контексту. Лог Windows показує лише сухий факт: “Хтось спробував залогінитись”. Але він не показує, як саме був сформований мережевий пакет, які специфічні прапорці були виставлені, і яка утиліта використовувалась.
А от мережевий трафік не бреше. Його не можна стерти заднім числом, якщо він вже пройшов через ваш комутатор і потрапив на TAP-інтерфейс або SPAN-порт. Пакет або був у дроті, або його там не було.
Щоб бачити аномалії, треба спочатку розуміти, як виглядає нормальний процес. Kerberos працює як класична система VIP-перепусток на закриту вечірку.
Вся ця кухня крутиться навколо служби KDC (Key Distribution Center), яка зазвичай висить на контролерах домену. Процес ділиться на два етапи:
Authentication Service (AS) – це ніби головна каса на вході. Ви показуєте свій логін і пароль, а каса видає вам загальний браслет TGT (Ticket Granting Ticket). Обмін відбувається через пакети
AS-REQ(запит від клієнта) таAS-REP(відповідь від сервера).
Ticket Granting Service (TGS) – це охоронці біля барів чи закритого бекстейджу. Ви показуєте їм свій TGT-браслет, просите доступ до конкретного сервера (наприклад, до файлового сховища), і вони видають вам вузькоспрямований сервісний квиток. Це пакети
TGS-REQтаTGS-REP.
Усе це бігає по портах TCP/88 та UDP/88 і упаковується у специфічний бінарний формат стандарту ASN.1. Звучить нудно, але саме розуміння структури ASN.1 дозволяє нам розбирати пакети на молекули.
А тепер подивимося, як цей “ідеальний” процес ламають на практиці.
Коли хакер тільки-но потрапив у мережу (наприклад, через фішинг чи вразливість у веб-додатку), він майже завжди сліпий. Йому потрібні валідні логіни для подальшої роботи. Замість ручного тикання навмання він запускає утиліти типу Kerbrute.
Ця штука масово плює в контролер домену запитами AS-REQ, але робить це хитро – взагалі без блоку попередньої аутентификації (PA-DATA). Тобто пароль навіть не відправляється!
Якщо юзера в природі не існує, KDC лається помилкою
PRINCIPAL UNKNOWN.
Якщо такий логін є, KDC відповідає
PREAUTH_REQUIRED(мовляв, “ок, я тебе знаю, тепер давай пароль”).
Фішка в тому, що така атака ніколи не заблокує акаунт цільового користувача (Account Lockout), бо неправильний пароль просто не вводився. Ідеально для стелс-режиму.
Як це спалити у Wireshark? У HEX-дампі запиту від Kerbrute завжди світяться специфічні байти, які легко закинути в ASN.1 Decoder:
a1 03 02 01 05 a2 03 02 01 0a ... 6b 72 62 74 67 74
a1 03 02 01 05– це мітка протоколу Kerberos v5.
a2 03 02 01 0a– це вказівка, що тип повідомлення дорівнює 10 (тобтоAS-REQ).
6b 72 62 74 67 74– це тупо рядокkrbtgtу ASCII-кодуванні.
Оскільки утиліта відправляє десятки запитів за секунду, ми можемо написати правило для Suricata, яке буде реагувати виключно на ненормальну швидкість таких пакетів з однієї айпішки.
Сигнатура:
alert udp any any -> any 88 (
msg:"[UDP] High Rate of Kerberos AS-REQ, Possible Enumeration";
content:"|a1 03 02 01 05 a2 03 02 01 0a|";
content:"|6b 72 62 74 67 74|"; fast_pattern;
threshold:type limit, track by_src, count 5, seconds 10;
sid:100000; rev:1;
)
Якщо з однієї IP-адреси за 10 секунд прилітає 5 таких пакетів – це гарантовано не людина. Здіймаємо тривогу.
Знайшли валідні логіни? Погнали підбирати до них паролі. Тут теж використовується AS-REQ, але з’являється одна критична деталь – блок пре-аутентификації PA-DATA (зашифрована мітка часу). Хакер бере пароль зі свого словника, шифрує ним поточний час і відправляє на KDC. Якщо пароль невірний, KDC поверне помилку.
Відрізнити брутфорс від попередньої атаки (Enumeration) дуже легко на рівні байтів. У HEX-дампі з’явиться новий індикатор PA-ENC-TIMESTAMP (тип 2):
a1 03 02 01 02
Але тут є нюанс. Класичний брутфорс (багато паролів до одного логіна) швидко блокує акаунт. Тому розумні хакери роблять Password Spraying: вони беруть один популярний пароль (наприклад, Winter2026!) і пробують його по черзі до тисячі різних користувачів.
Оновлюємо правило для брутфорсу/спреїнгу:
alert tcp any any -> any 88 (
msg:"[TCP] Intensive Kerberos Bruteforce Attack Detected";
content:"|a1 03 02 01 05 a2 03 02 01 0a|";
content:"|6b 72 62 74 67 74|"; fast_pattern;
content:"|a1 03 02 01 02|"; distance:0;
threshold:type threshold, track by_src, count 20, seconds 5;
sid:100002; rev:1;
)
Ми додали перевірку на наявність PA-DATA і задрали поріг спрацьовування (count 20 за seconds 5). Брутфорс створює дуже багато шуму. Якщо хтось так часто помиляється з паролем – це точно не бухгалтерка, яка випадково ввімкнула CapsLock.
Це вже вищий пілотаж. Ціль цієї атаки – не звичайні користувачі, а так звані сервісні акаунти (Service Accounts), до яких прив’язані SPN (Service Principal Names). Наприклад, це може бути акаунт, під яким крутиться сервер MS SQL. Зазвичай у таких акаунтів дуже складні, але старі паролі, які роками ніхто не змінює.
Хакер (маючи на руках валідний TGT звичайного юзера) просить у контролера домену сервісний квиток для цього MS SQL сервера. Сервер радо видає йому пакет TGS-REP. А далі починається магія: частина цього квитка зашифрована хешем пароля того самого сервісного акаунта! Зловмисник зберігає цей пакет на диск і забирає до себе на Kali Linux, щоб спокійно брутфорсити його офлайн. Для цього часто використовують утиліту Rubeus.
Найцікавіше, що хакери навмисно просять KDC видати квиток із застарілим алгоритмом шифрування RC4-HMAC (тип 23), тому що його зламати на відеокартах значно легше, ніж сучасний AES-256. У трафіку це виглядає як аномальний запит пониження криптографії (encryption downgrade).
Якщо ви бачите у своєму трафіку TGS-REQ, який жорстко вимагає etype 23 – це жирний червоний прапор.
Ще одна класика сучасного пентесту. Її ціль – специфічні акаунти, у яких колись давно (можливо, через легасі-системи) зняли вимогу попередньої аутентификації (галочка DONT_REQ_PREAUTH в налаштуваннях Active Directory).
Тут хакеру навіть не потрібен первинний доступ. Він просто відправляє пустий запит і просить сервер видати AS-REP. Оскільки пре-аутентификація відключена, KDC слухняно відповідає. А частина цієї відповіді, знов-таки, зашифрована хешем пароля користувача! Згодовуємо цей смітник у Hashcat і чекаємо результату.
Найчастіше для цього юзають швейцарський ніж хакера – скрипти з набору Impacket (конкретно GetNPUsers.py).
Як виглядає почерк Impacket у трафіку? Він має свої унікальні “відбитки пальців”. Скрипт завжди виставляє специфічний набір прапорців FORWARDABLE | PROXIABLE | RENEWABLE та просить слабке RC4-шифрування. У HEX це виглядає як стабільна комбінація: a0 07 03 05 00 50 80 00 00 a1.
Пишемо сигнатуру для вилову:
alert tcp any any -> any 88 (
msg:"Suspicious AS-REQ Packet, Possible AS-REP Roasting (Impacket)";
flow:to_server, stateless;
content:"|a0 07 03 05 00 50 80 00 00 a1|";
content:"|6b 72 62 74 67 74|"; fast_pattern;
content:!"|a1 03 02 01 02|";
sid:100009; rev:1;
)
Зверніть увагу на хитрий трюк: знак оклику !"|a1 03 02 01 02|" перед контентом. Це означає, що ми шукаємо пакети, де блоку пре-аутентификації (PA-DATA) тупо НЕМАЄ. Адже AS-REP Roasting працює виключно на акаунтах без пре-аутентификації.
Окей, ми написали круті правила. Але куди їх пхати? Якщо ви поставите IDS просто на свій ноут у Wi-Fi мережі, ви нічого не побачите. Вам потрібна правильна архітектура захоплення пакетів:
SPAN-порти (Port Mirroring): Налаштуйте ваші ядерні комутатори (Core Switches) так, щоб вони дублювали весь трафік, який іде до портів контролерів домену, на окремий порт моніторингу, до якого підключений сервер із Suricata.
Network TAPs: Це апаратні “жучки”, які фізично врізаються в оптику або мідь між комутатором і сервером. Вони гарантують 100% захоплення трафіку без навантаження на свіч. Це ідеальний варіант для параноїків.
Мережевий аналіз – це буквально рентген для вашого домену. Ви бачите структуру протоколів, алгоритми шифрування і реальну поведінку запитів, яку хакер фізично не може приховати чи видалити.
Мінімум дій для Blue Team на завтрашній ранок:
Впровадьте IDS: Розгорніть Suricata або Zeek хоча б перед контролерами домену. Без цього ви просто граєте в рулетку наосліп.
Вбийте RC4: Знайдіть у налаштуваннях вашого домену всі згадки про застаріле шифрування RC4 і вимкніть його через GPO (Групові політики). Залиште тільки AES-128 та AES-256.
Аудит Pre-Auth: Прошерстіть Active Directory на наявність користувачів з відключеною пре-аутентификацією (
Do not require Kerberos preauthentication). Знайшли таких? Знімайте галочку негайно (попередньо перевіривши, чи не покладете ви цим якийсь стародавній сканер штрих-кодів на складі).
Створіть пісочницю: Не копіпастіть правила не дивлячись. Підніміть тестову віртуалку з AD, натравіть на неї Kerbrute, зніміть дамп трафіку і відкалібруйте сигнатури під свої реалії, щоб не тонути у False Positives (хибних спрацьовуваннях).
Хакери стають розумнішими кожного дня, вони чудово обходять антивіруси і чистять за собою сліди на серверах. Але є одна фундаментальна річ: вони фізично не можуть зламати мережу, не генеруючи мережевих пакетів.
Будьте розумнішими. Аналізуйте трафік!