Telegram став одним із найбільш інформативних джерел даних для розвідки кіберзагроз у реальному часі. Загрозливі актори, що пов'язані з державами, хактивістські колективи та злочинні угруповання, що проводять атаки проти урядових, критично важливих інфраструктурних і оборонних цілей, регулярно оголошують операції до або одразу після їх здійснення — називаючи жертв, заявляючи вектори атак і публікуючи докази. Проблема полягає в обсязі й структурі: сотні каналів, тисячі повідомлень на день, майже всі — неструктурована природна мова, змішана з шумом, репостами та дезінформацією.

Corvus.Sense побудовано для вирішення цієї проблеми у виробничому масштабі. В основі — багатоетапний LLM-конвеєр, що приймає необроблені потоки повідомлень Telegram і виробляє структуровані записи розвідки загроз із секторною класифікацією, географічною атрибуцією, тегуванням вектора атаки та оцінкою довіри — менш ніж за 90 секунд з моменту публікації повідомлення. У цій статті описано архітектуру цього конвеєра та обґрунтування кожного проектного рішення.

Чому LLM, а не правилові системи вилучення

Першим проектним рішенням стало питання: використовувати детерміноване вилучення (регулярні вирази, пошук за ключовими словами, розпізнавання іменованих сутностей) чи генеративний LLM-висновок для класифікації. Обидва підходи було детально оцінено на розміченому наборі з 12 000 підтверджених оголошень про атаки в 34 каналах Telegram. Висновки виявилися однозначними.

Правилові системи досягали прийнятної точності для добре відомих груп акторів із послідовними патернами публікацій, але давали збій на нових акторах, перемиканні кодів (повідомлення, що поєднують українську, російську та англійську мови), скороченнях, навмисній обфускації та стилістичних варіаціях. Рівень хибних негативів понад 30% для каналів нових акторів робив правилове вилучення операційно неприйнятним — пропускати одне з трьох справжніх оголошень про атаку не є прийнятним розвідувальним продуктом.

Класифікація на основі LLM досягла понад 91% F1 на тому самому оціночному наборі, включно з повідомленнями з перемиканням кодів і каналами нових акторів, відсутніх у навчальних даних. Компроміс — затримка та вартість на повідомлення, які обидва вирішуються через архітектуру конвеєра, описану нижче.

Етап конвеєра 1: прийом і попередня обробка

Corvus.Sense підключається до каналів Telegram через Telegram API за допомогою виділених службових облікових записів. Кожен налаштований канал опитується з налаштовуваним інтервалом (за замовчуванням 30 секунд). Нові повідомлення з моменту останнього опитування вибираються, дедублюються за індексом ідентифікаторів повідомлень і ставляться в чергу для обробки.

Попередня обробка вирішує кілька проблем якості даних до будь-якого висновку. Повідомлення коротші за 20 токенів відкидаються — вони несуть недостатній семантичний зміст для класифікації. Переслані повідомлення відстежуються з їхнім оригінальним каналом-джерелом; якщо оригінал уже оброблено, пересилання позначається як дублікат і пропускається, запобігаючи генерації кількох записів сповіщень для одного й того самого оголошення. Повідомлення лише з медіа (зображення, відео без підпису) ставляться в окрему чергу для конвеєра на основі зору, що виходить за рамки цієї статті.

Визначення мови виконується для кожного повідомлення, щоб позначити мову-джерело (ISO 639-1). Цей тег передається нижче за течією до підказки LLM для підтримки мовно-відповідних прикладів у підказці класифікації.

Етап конвеєра 2: бінарна класифікація релевантності

Повний виклик класифікації LLM є дорогим відносно обсягу оброблюваних повідомлень. Перед будь-яким LLM-висновком спрацьовує легкий шлюз бінарного класифікатора для фільтрації нереквізитного контенту. Цей класифікатор є донавченою моделлю-енкодером (350 млн параметрів), навченою розрізняти оперативні оголошення про атаки та коментарі, репости новин, вербувальні публікації, пропаганду і загальний контент каналів.

Бінарний класифікатор працює менш ніж за 200 мілісекунд на повідомлення на апаратному забезпеченні з виведенням лише на CPU. На виробничому оціночному наборі він досягає 94,3% точності та 89,7% повноти. Показник повноти навмисно не підвищується — вартість хибного негативу на цьому етапі (справжнє оголошення, що не переходить до класифікації LLM) висока, тому поріг встановлено консервативно для максимізації повноти. Хибні спрацьовування на цьому етапі коштують повного виклику LLM-висновку, що є контрольованим компромісом.

Ключова думка: Бінарний шлюз не є вузьким місцем точності — він є фільтром витрат. Точність забезпечується етапом LLM. Шлюз існує для того, щоб LLM обробляв лише повідомлення-кандидати на оперативні, скорочуючи щоденні виклики LLM приблизно на 78% порівняно з виконанням LLM-висновку на повному потоці повідомлень.

Етап конвеєра 3: класифікація та збагачення LLM

Повідомлення, що пройшли бінарний шлюз, потрапляють на етап класифікації LLM. Corvus.Sense використовує підказку зі структурованим виведенням, яка інструктує модель витягувати та класифікувати кожне з наступних полів із тексту повідомлення:

Організація-жертва. Названа або мається на увазі організація-ціль, нормалізована до канонічної форми. Там, де повідомлення називає конкретну організацію (наприклад, міністерство, комунальне підприємство або фінансову установу), це ім'я витягується дослівно. Там, де жертва мається на увазі за сектором і географією без конкретного імені, поле заповнюється як null і позначається для перевірки аналітиком.

Секторна класифікація. Одна з восьми фіксованих таксономічних міток: критична інфраструктура, фінанси, уряд, телеком, енергетика, оборона, охорона здоров'я або транспорт. Фіксована таксономія є навмисною — відкрита класифікація виробляє непослідовні мітки, які не можна надійно агрегувати. LLM забезпечується визначеннями для кожної категорії та інструктується обирати єдину найбільш відповідну мітку.

Географічна атрибуція. ISO 3166-1 alpha-2 код країни для країни операції жертви. Там, де кілька країн названо цілями, всі вони витягуються як масив. Модель явно інструктується розрізняти країну жертви від передбачуваної країни походження актора — поширене джерело помилок у наївних підходах до вилучення.

Вектор атаки. Одна з шести категорій вектора: DDoS, дефейс, викрадення даних, здирницьке ПЗ, крадіжка облікових даних або компрометація ланцюжка постачання. Багатовекторні атаки представлені як масив.

Оцінки довіри. Для кожного витягнутого поля модель повертає оцінку довіри від 0 до 1. Підказка інструктує модель представляти справжню епістемічну невизначеність — повідомлення, яке говорить «ми атакуємо українську енергетику», дає високу довіру щодо географії (UA) і сектора (енергетика), але нижчу довіру щодо вектора атаки (не вказано) та організації-жертви (не названа). Оцінки не є апостеріорним калібруванням; вони безпосередньо отримані з представлення невизначеності моделі під час генерації.

Підказка LLM структурована для виробництва відповіді JSON, що відповідає суворій схемі. Розбір відповіді перевіряє схему при отриманні; неправильно сформовані відповіді ініціюють автоматичну повторну спробу з додатковою інструкцією виправити помилку форматування. Логіка повторних спроб обмежена двома спробами; повідомлення, які все ще виробляють неправильно сформований вивід після двох повторних спроб, позначаються для перевірки аналітиком і виключаються з автоматизованої обробки.

Ключова думка: Обмеження фіксованої таксономії для сектора і вектора атаки є критичним для операційної придатності. LLM, якому дозволено генерувати мітки класифікації у вільному тексті, виробляє непослідовні синоніми — «енергосистема», «електрична інфраструктура» та «комунальний сектор» усі відносяться до цілей в енергетичному секторі, але не можуть агрегуватися без етапу нормалізації. Обмеження фіксованим набором міток під час висновку усуває весь цей клас проблем якості даних нижче за течією.

Побудова графа ланцюжка атак

Кожен класифікований запис повідомлення записується до графової бази даних ланцюжка атак після класифікації LLM. Граф моделює ландшафт загроз як граф властивостей із трьома типами вузлів: загрозливі актори, організації-жертви та події атак. Ребра представляють відносини: «провів» (актор до події), «цілився» (подія до жертви) та «використав вектор» (подія до вузла таксономії вектора атак).

Коли надходить новий класифікований запис, рушій графа виконує розв'язання сутностей: перевіряє, чи вже існує названа організація-жертва як вузол (використовуючи нечітке зіставлення імен і розрізнення за кодом країни) та чи відповідає вихідний канал Telegram відомому профілю актора. Якщо обидва вирішуються, створюється ребро, що з'єднує вузол актора з вузлом жертви через новий вузол події атаки. Якщо актор новий (канал ще не зіставлений з профілем), створюється тимчасовий вузол актора для перевірки аналітиком.

Граф уможливлює запити, які плоскі реляційні бази даних не можуть ефективно підтримувати. Приклади з робочих процесів аналітиків: «Показати всі організації в енергетичному секторі, на які цей актор цілився за останні 90 днів, із розбивкою за вектором атаки.» «Які актори цілилися на організації як оборонного, так і фінансового сектору в Польщі цього місяця?» «Який часовий розподіл атак цієї групи відносно кінетичних подій у театрі?» Ці запити виконуються як обходи графа, повертаючи результати за секунди на графах із десятками тисяч вузлів.

Моніторинг загроз на основі OSINT на такому рівні структури був неможливий до впровадження вилучення на основі LLM у масштабі та з точністю, необхідними для безперервного наповнення графа з відкритих джерел. Попередні підходи вимагали значних зусиль аналітиків вручну на запис, що обмежувало щільність і свіжість графа.

Аналіз паттерну поведінки для груп загрозливих акторів

Як тільки профіль загрозливого актора накопичує достатню історію в графі (зазвичай 7 або більше днів збору даних), Corvus.Sense обчислює метрики паттерну поведінки. Вони отримуються з часових і структурних властивостей вузлів подій атак актора в графі.

Розподіл годин активності. Часові мітки подій атак розподіляються за UTC-годиною доби та днем тижня. Більшість державно пов'язаних груп діють у робочі години свого домашнього часового поясу; відхилення від цього патерну (незвичні нічні сплески, сплески у вихідні) можуть вказувати на зміни оперативного темпу або участь кількох географічно розподілених підгруп. Гістограма годин активності оновлюється щодня.

Теплова карта переваг у виборі цілей. Співвідношення атак за сектором і географією обчислюється по всій повній історії подій актора. Це виявляє послідовні переваги у виборі цілей — актор, що атакував українську енергетичну інфраструктуру в 73% подій, явно спеціалізується на цьому, і нові оголошення про цілі в енергетиці від цього актора повинні отримувати підвищений пріоритет незалежно від оцінки довіри.

Відстеження еволюції TTPs. Розподіли векторів атак обчислюються у ковзних 30-денних вікнах і порівнюються з історичним базовим рівнем актора. Група, що історично проводила DDoS-операції і тепер класифікується як така, що проводить події з викрадення даних, представляє зміну TTPs — розвідувальний сигнал високої цінності, що вказує на розвиток можливостей або зміну цілей.

Ключова думка: Аналіз паттерну поведінки найбільш цінний не для підтвердження того, що вже відомо про загрозливого актора, а для виявлення змін у його поведінці. Стабільні патерни є корисними базовими рівнями; відхилення від цих патернів є сигналом, що потребує уваги аналітика та потенційної ескалації до старших споживачів розвідки.

Автоматизована генерація виконавчих резюме

Corvus.Sense включає автоматизований конвеєр генерації резюме, що виробляє зрозумілі людині розвідувальні продукти зі структурованих даних графа. Резюме генеруються за налаштовуваним розкладом (щодня, щотижня або на вимогу) або ініціюються порогові подіями (кількість атак відстежуваного актора, що перевищує налаштований ліміт протягом часового вікна).

Конвеєр резюме запитує граф щодо відповідного актора, сектора або географічної області, визначеної шаблоном звіту, отримує структуровані записи подій і метрики паттерну поведінки та передає цей структурований контекст до моделі генерації з підказкою нарративного синтезу. Вивід — прозовий розвідувальний брифінг у реєстрі, відповідному для виконавчих споживачів — без JSON, без міток полів, без оцінок довіри, якщо вони не є аналітично значущими.

Критично важливо, що модель генерації резюме працює на структурованих даних, отриманих із графа, а не на необробленому тексті повідомлень Telegram. Це архітектурне розділення запобігає галюцинаціям із неоднозначного вихідного матеріалу: модель генерації може посилатися лише на події, що існують як перевірені класифіковані записи в графі. Якщо заявлена атака не пройшла перевірки якості класифікації, вона не з'являється в резюме.

Оцінка довіри та обробка невизначеності

Кожен класифікований запис у Corvus.Sense містить оцінки довіри на рівні полів. Ці оцінки передаються всім нижнім споживачам: панель аналітика відображає довіру візуально, правила сповіщень можна налаштувати для спрацьовування лише вище мінімального порогу на поле, а експорт STIX відображає оцінки довіри на властивість confidence у STIX.

Записи, де будь-яке критичне поле (сектор, географія або атрибуція актора) опускається нижче налаштованого порогу, поміщаються в чергу перевірки аналітика, а не генерують автоматичні сповіщення. Поріг налаштовується для кожного розгортання: установки з високою чутливістю, що моніторять критичну інфраструктуру, можуть знижувати пороги для максимізації повноти; ширші розгортання моніторингу можуть підвищувати пороги для зменшення обсягу черги аналітика.

Для полів, де довіра LLM є граничною (між 0,65 та 0,80 за замовчуванням), Corvus.Sense опціонально надсилає повідомлення на другий незалежний прохід LLM із використанням іншого формулювання підказки. Коли обидва проходи погоджуються щодо значення поля, оцінка довіри підвищується; коли вони розходяться, поле позначається як суперечливе, і обидва значення-кандидати надаються аналітику.

Налаштування Corvus.Sense для відстеження конкретного загрозливого актора

Наступна послідовність описує, як налаштувати Corvus.Sense для цільового моніторингу названої хакерської групи в її каналах Telegram.

Крок 1 — Визначте канали Telegram актора. Складіть числові ідентифікатори каналів і @псевдоніми для всіх відомих каналів, що керуються або пов'язані з цільовою групою, включно з дзеркальними та резервними каналами. Corvus.Sense приймає обидва формати.

Крок 2 — Створіть профіль актора. На панелі Actors створіть новий профіль із канонічним ім'ям групи та відомими псевдонімами. Призначте ідентифікатори технік MITRE ATT&CK, що відображають відомі TTPs групи. Прив'яжіть ідентифікатори каналів до цього профілю. З цього моменту всі повідомлення з цих каналів асоціюються з цим вузлом актора в графі.

Крок 3 — Налаштуйте секторну та географічну область. Оберіть сектори та коди країн, які ви хочете відстежувати для цього актора. Атаки поза областю все одно приймаються й класифікуються, але виключаються з генерації специфічних для актора сповіщень. Це дозволяє широкий прийом, зберігаючи обсяг сповіщень зосередженим на оперативно релевантних подіях.

Крок 4 — Встановіть пороги довіри та доставку сповіщень. Налаштуйте мінімальні пороги довіри для кожного поля. Для секторів оборони та критичної інфраструктури нижчі пороги (0,65) максимізують повноту. Налаштуйте доставку сповіщень на електронну пошту, вебхук або кінцеву точку інтеграції SIEM. Corvus.Sense підтримує формати сповіщень CEF і JSON для прийому SIEM.

Крок 5 — Перегляньте та виправте початкові класифікації. Протягом перших 72 годин переглядайте всі класифіковані записи в черзі аналітика для цього актора, незалежно від оцінки довіри. Вбудовані інструменти виправлення дозволяють редагування на рівні поля. Виправлення реєструються й можуть бути надані для покращення калібрування моделі для мовних патернів цього актора з часом.

Крок 6 — Увімкніть аналіз паттерну поведінки. Після 7 днів накопичених даних про події увімкніть перегляд паттерну поведінки. Розподіли годин активності, теплові карти переваг у виборі цілей і гістограми TTPs обчислюються з графа та оновлюються щодня. Цей перегляд є основним вхідним сигналом для передбачення майбутньої поведінки у виборі цілей.

Крок 7 — Експортуйте структуровану розвідку. Використовуйте експорт профілю актора для генерації розвідувальних продуктів у форматі JSON, PDF або пакет STIX 2.1. Експорт STIX відображає дані профілю актора на об'єкти STIX Threat Actor та Campaign для обміну через TAXII або імпортування до зовнішніх CTI-платформ.