Telegram is een van de meest waardevolle gegevensbronnen geworden voor realtime cyberdreigingsinformatie. Staatsgezinde dreigingsactoren, hacktivistische collectieven en criminele groepen die aanvallen uitvoeren op overheids-, kritieke infrastructuur- en defensiedoelen kondigen operaties routinematig aan voor of direct nadat ze plaatsvinden – ze noemen slachtoffers, claimen aanvalsvectoren en plaatsen bewijs. Het probleem is volume en structuur: honderden kanalen, duizenden berichten per dag, bijna allemaal ongestructureerde natuurlijke taal, vermengd met ruis, doorstuurberichten en misleiding.

Corvus.Sense is gebouwd om dit probleem op productieschaal op te lossen. De kern bestaat uit een meertraps LLM-pijplijn die ruwe Telegram-berichtstromen opneemt en gestructureerde dreigingsinformatierecords produceert met sectorclassificatie, geografische toewijzing, aanvalsvectortagging en betrouwbaarheidsscoring — in minder dan 90 seconden na publicatie van het bericht. Dit artikel beschrijft hoe die pijplijn is ontworpen en waarom elke ontwerpbeslissing is genomen.

Waarom LLM's en geen regelgebaseerde extractie

De eerste ontwerpbeslissing was of deterministische extractie (regex, trefwoordovereenkomst, herkenning van benoemde entiteiten) of generatieve LLM-inferentie voor classificatie gebruikt moest worden. We hebben beide benaderingen uitgebreid geëvalueerd op een gelabelde dataset van 12.000 bevestigde aanvalsaankondigingen over 34 Telegram-kanalen. De conclusies waren ondubbelzinnig.

Regelgebaseerde systemen behaalden acceptabele precisie voor bekende acteurgroepen met consistente berichtpatronen, maar bezweken bij nieuwe acteurs, code-switching (berichten die Oekraïens, Russisch en Engels mixen), afkortingen, opzettelijke verduistering en stilistische variatie. Valse-negatiefpercentages boven 30% voor nieuwe acteurkanalen maakten regelgebaseerde extractie operationeel ontoereikend — één op de drie echte aanvalsaankondigingen missen is geen levensvatbaar inlichtingenproduct.

LLM-gebaseerde classificatie behaalde meer dan 91% F1 op dezelfde evaluatieset, inclusief code-switching berichten en nieuwe acteurkanalen die niet aanwezig waren in de trainingsdata. De afweging is latentie en kosten per bericht, die beide worden aangepakt door de hieronder beschreven pijplijnarchitectuur.

Pijplijnfase 1: opname en voorverwerking

Corvus.Sense maakt via de Telegram API verbinding met Telegram-kanalen via toegewijde serviceaccounts. Elk geconfigureerd kanaal wordt gepolled op een configureerbaar interval (standaard 30 seconden). Nieuwe berichten sinds de laatste poll-tijdstempel worden opgehaald, ontdubbeld met de bericht-ID-index en in de wachtrij geplaatst voor verwerking.

Voorverwerking behandelt meerdere problemen met gegevenskwaliteit voordat enige inferentie plaatsvindt. Berichten korter dan 20 tokens worden verwijderd — ze bevatten onvoldoende semantische inhoud voor classificatie. Doorgestuurde berichten worden bijgehouden met hun originele bronkanaal; als het origineel al is verwerkt, wordt het doorstuurde bericht gemarkeerd als een duplicaat en overgeslagen, waardoor wordt voorkomen dat dezelfde aankondiging meerdere waarschuwingsrecords genereert. Berichten met alleen media (afbeeldingen, video zonder bijschrift) worden apart in de wachtrij geplaatst voor een op visie gebaseerde pijplijn buiten het bereik van dit artikel.

Taaldetectie wordt uitgevoerd op elk bericht om de brontaal te taggen (ISO 639-1). Deze tag wordt stroomafwaarts doorgegeven aan de LLM-prompt om taalgeschikte few-shot voorbeelden in de classificatieprompt mogelijk te maken.

Pijplijnfase 2: binaire relevantieclassificatie

De volledige LLM-classificatieaanroep is duur ten opzichte van het volume verwerkte berichten. Een lichtgewicht binaire classificatorpoort wordt uitgevoerd vóór enige LLM-inferentie om niet-operationele inhoud uit te filteren. Deze classifier is een verfijnd encodermodel (350 miljoen parameters) getraind om operationele aanvalsaankondigingen te onderscheiden van commentaar, nieuwsdoorgestuurde berichten, wervingsberichten, propaganda en algemene kanaalinhoud.

De binaire classifier werkt in minder dan 200 milliseconden per bericht op alleen-CPU-inferentiehardware. Op de productie-evaluatieset behaalt hij 94,3% precisie en 89,7% herinnering. Het herinnercijfer wordt opzettelijk niet hoger gedrukt — de kosten van een vals negatief in deze fase (een echte aankondiging die niet doorgaat naar LLM-classificatie) zijn hoog, dus de drempel is conservatief ingesteld om de herinnering te maximaliseren. Valse positieven in deze fase kosten een volledige LLM-inferentieaanroep, wat de gecontroleerde afweging is.

Kernobservatie: De binaire poort is niet de nauwkeurigheidsknelpunt — het is een kostenfilter. Nauwkeurigheid wordt geleverd door de LLM-fase. De poort bestaat om ervoor te zorgen dat de LLM alleen kandidaat-operationele berichten verwerkt, waardoor de dagelijkse LLM-aanroepen met ongeveer 78% worden verminderd vergeleken met het uitvoeren van LLM-inferentie op de volledige berichtenstroom.

Pijplijnfase 3: LLM-classificatie en verrijking

Berichten die de binaire poort passeren, komen in de LLM-classificatiefase terecht. Corvus.Sense gebruikt een gestructureerde uitvoerprompt die het model instrueert om elk van de volgende velden uit de berichttekst te extraheren en te classificeren:

Slachtofferorganisatie. De genoemde of geïmpliceerde doelorganisatie, genormaliseerd tot een canonieke vorm. Waar het bericht een specifieke organisatie noemt (bijv. een ministerie, nutsbedrijf of financiële instelling), wordt die naam letterlijk geëxtraheerd. Waar het slachtoffer wordt geïmpliceerd door sector en geografie zonder een specifieke naam, wordt het veld gevuld als null en gemarkeerd voor analistenbeoordeling.

Sectorclassificatie. Een van acht vaste taxonomielabels: kritieke infrastructuur, financieel, overheid, telecom, energie, defensie, gezondheidszorg of transport. De vaste taxonomie is opzettelijk — open-ended classificatie produceert inconsistente labels die niet betrouwbaar kunnen worden geaggregeerd. De LLM krijgt definities voor elke categorie en wordt geïnstrueerd om het enige best passende label te selecteren.

Geografische toewijzing. ISO 3166-1 alpha-2 landcode voor het land van werking van het slachtoffer. Waar meerdere landen als doelwit worden genoemd, worden ze allemaal geëxtraheerd als een array. Het model wordt expliciet geïnstrueerd om het slachtofferland te onderscheiden van het vermoedelijke herkomstland van de acteur — een veelvoorkomende foutbron bij naïeve extractiebenadering.

Aanvalsvector. Een van zes vectorcategorieën: DDoS, defacement, data-exfiltratie, ransomware, diefstal van inloggegevens of supply chain compromis. Aanvallen met meerdere vectoren worden weergegeven als een array.

Betrouwbaarheidsscores. Voor elk geëxtraheerd veld retourneert het model een betrouwbaarheidsscore van 0 tot 1. De prompt instrueert het model om echte epistemische onzekerheid weer te geven — een bericht dat zegt "we zullen Oekraïense energie aanvallen" geeft hoge betrouwbaarheid op geografie (UA) en sector (energie), maar lagere betrouwbaarheid op aanvalsvector (niet gespecificeerd) en slachtofferorganisatie (niet benoemd). Scores zijn geen post-hoc kalibratie; ze zijn direct afgeleid van de onzekerheidsrepresentatie van het model tijdens generatie.

De LLM-prompt is gestructureerd om een JSON-respons te produceren die voldoet aan een strikt schema. Responsverwerking valideert het schema bij ontvangst; misvormde responses activeren een automatische nieuwe poging met een aanvullende instructie om de opmaakfout te corrigeren. Herhalingslogica is beperkt tot twee pogingen; berichten die na twee nieuwe pogingen nog steeds misvormde uitvoer produceren, worden gemarkeerd voor analistenbeoordeling en verwijderd uit geautomatiseerde verwerking.

Kernobservatie: De vaste taxonomiebeperking voor sector en aanvalsvector is cruciaal voor operationele bruikbaarheid. Een LLM die vrije tekstclassificatielabels mag genereren, produceert inconsistente synoniemen — "elektriciteitsnet," "elektrische infrastructuur" en "nutssector" verwijzen allemaal naar energiesectordoelen, maar kunnen niet worden geaggregeerd zonder een normalisatiestap. Het beperken tot een vaste labelset tijdens inferentietijd elimineert deze hele klasse van gegevenskwaliteitsproblemen stroomafwaarts.

Constructie van aanvalsketengrafiek

Elk geclassificeerd berichtrecord wordt na LLM-classificatie naar de aanvalsketengrafiekdatabase geschreven. De grafiek modelleert het dreigingslandschap als een eigenschappengrafiek met drie knooppunttypen: dreigingsactoren, slachtofferorganisaties en aanvalsgebeurtenissen. Randen vertegenwoordigen relaties: "uitgevoerd" (acteur naar gebeurtenis), "gericht op" (gebeurtenis naar slachtoffer) en "gebruikte vector" (gebeurtenis naar aanvalsvectortaxonomieknooppunt).

Wanneer een nieuw geclassificeerd record arriveert, voert de grafiekengine entiteitsresolutie uit: het controleert of de genoemde slachtofferorganisatie al bestaat als een knooppunt (met behulp van fuzzy-naamovereenkomst en landcode-ondubbelzinnigmaking) en of het bron-Telegram-kanaal overeenkomt met een bekend acteurprofiel. Als beide worden opgelost, wordt een rand gecreëerd die het acteurknooppunt verbindt met het slachtofferknooppunt via een nieuw aanvalsgebeurtenisknooppunt. Als de acteur nieuw is (kanaal nog niet toegewezen aan een profiel), wordt een voorlopig acteurknooppunt gecreëerd voor analistenbeoordeling.

De grafiek maakt query's mogelijk die vlakke recorddatabases niet efficiënt kunnen ondersteunen. Voorbeelden uit analistenworkflows: "Toon alle organisaties in de energiesector die door deze acteur de afgelopen 90 dagen zijn aangevallen, met aanvalsvectoruitsplitsing." "Welke actoren hebben zowel defensie- als financiëlesectororganisaties in Polen deze maand aangevallen?" "Wat is de tijdsverdeling van aanvallen door deze groep ten opzichte van kinetische gebeurtenissen in het theater?" Deze query's worden uitgevoerd als grafiektransversalen en retourneren resultaten in seconden op grafieken van tienduizenden knooppunten.

OSINT-gebaseerde dreigingsmonitoring op dit structuurniveau was niet haalbaar vóór LLM-gebaseerde extractie op de schaal en nauwkeurigheid die nodig zijn om een grafiek continu vanuit open bronnen te vullen. Eerdere benaderingen vereisten aanzienlijke handmatige analisteninspanning per record, wat de grafiekdichtheid en versheid beperkte.

Levenspatroonanalyse voor dreigingsacteurgroepen

Zodra een dreigingsacteurprofiel voldoende geschiedenis in de grafiek heeft opgebouwd (doorgaans 7 of meer dagen van opname), berekent Corvus.Sense levenspatroonmetrieken. Deze zijn afgeleid van de temporele en structurele eigenschappen van de aanvalsgebeurtenisknooppunten van de acteur in de grafiek.

Activiteitsuurverdeling. Tijdstempels van aanvalsgebeurtenissen worden ingedeeld per UTC-uur van de dag en dag van de week. De meeste staatsgezinde groepen werken tijdens kantooruren in hun thuistijdzone; afwijkingen van dit patroon (ongebruikelijke late-nachtstijgingen, weekendpieken) kunnen operationele tempoveranderingen of betrokkenheid van meerdere geografisch verspreide subgroepen aangeven. Het activiteitsuurhistogram wordt dagelijks bijgewerkt.

Doelvoorkeursheatmap. De verhouding van aanvallen per sector en geografie wordt berekend over de volledige gebeurtenisgeschiedenis van de acteur. Dit onthult consistente doelvoorkeuren — een acteur die in 73% van de gebeurtenissen Oekraïense energie-infrastructuur heeft aangevallen, is duidelijk gespecialiseerd, en nieuwe aankondigingen tegen energiedoelen van die acteur moeten verhoogde prioriteit krijgen, ongeacht de betrouwbaarheidsscore.

TTP-evolutietracking. Aanvalsvectorverdelingen worden berekend over rollende 30-dagenvensters en vergeleken met de historische basislijn van de acteur. Een groep die historisch DDoS-operaties uitvoerde en nu wordt geclassificeerd als data-exfiltratiegebeurtenissen uitvoerend, vertegenwoordigt een TTP-verschuiving — een waardevolle inlichtingensignaal dat capaciteitsontwikkeling of gewijzigde doelstellingen aangeeft.

Kernobservatie: Levenspatroonanalyse is het meest waardevol niet voor het bevestigen van wat u al weet over een dreigingsacteur, maar voor het detecteren wanneer hun gedrag verandert. Stabiele patronen zijn nuttige basislijnen; afwijkingen van die patronen zijn het signaal dat analistenaandacht en mogelijke escalatie naar senior inlichtingenconsumenten rechtvaardigt.

Geautomatiseerde generatie van managementsamenvatting

Corvus.Sense bevat een geautomatiseerde samenvattingsgeneratiepijplijn die mensvriendelijke inlichtingenproducten produceert uit de gestructureerde grafiekdata. Samenvattingen worden gegenereerd op een configureerbaar schema (dagelijks, wekelijks of op aanvraag) of geactiveerd door drempelgebeurtenissen (aanvalsaantal door een gevolgde acteur dat een geconfigureerde limiet overschrijdt binnen een tijdvenster).

De samenvattingspijplijn bevraagt de grafiek voor de relevante acteur, sector of geografische reikwijdte die is gedefinieerd door het rapportagesjabloon, haalt de gestructureerde gebeurtenisrecords en levenspatroonmetrieken op, en geeft deze gestructureerde context door aan een generatiemodel met een narratieve syntheseprompt. De uitvoer is een proza-inlichtingenbrief in het register dat geschikt is voor managementconsumenten — geen JSON, geen veldlabels, geen betrouwbaarheidsscores tenzij ze analytisch significant zijn.

Cruciaal is dat het samenvattingsgeneratiemodel werkt op gestructureerde gegevens opgehaald uit de grafiek, niet op ruwe Telegram-berichttekst. Deze architecturale scheiding voorkomt hallucinatie van dubbelzinnig bronmateriaal: het generatiemodel kan alleen verwijzen naar gebeurtenissen die bestaan als gevalideerde geclassificeerde records in de grafiek. Als een geclaimde aanval niet geslaagd is voor kwaliteitscontroles van classificatie, verschijnt het niet in een samenvatting.

Betrouwbaarheidsscoring en omgang met onzekerheid

Elk geclassificeerd record in Corvus.Sense bevat betrouwbaarheidsscores op veldniveau. Deze scores vloeien door naar alle downstream-consumenten: het analistendashboard toont betrouwbaarheid visueel, waarschuwingsregels kunnen worden geconfigureerd om alleen boven een minimumdrempel per veld te activeren, en de STIX-export koppelt betrouwbaarheidsscores aan de STIX-betrouwbaarheidseigenschap.

Records waarbij een kritiek veld (sector, geografie of acteurstoewijzing) onder de geconfigureerde drempel valt, worden in de analistbeoordelingswachtrij geplaatst in plaats van geautomatiseerde waarschuwingen te genereren. De drempel is configureerbaar per implementatie: installaties met hoge gevoeligheid die kritieke infrastructuur monitoren, kunnen drempels verlagen om de herinnering te maximaliseren; bredere monitoringsimplementaties kunnen drempels verhogen om het volume van de analistenwachtrij te verminderen.

Voor velden waarbij het vertrouwen van de LLM marginaal is (standaard tussen 0,65 en 0,80) stuurt Corvus.Sense het bericht optioneel in voor een tweede onafhankelijke LLM-doorgang met een andere promptformulering. Wanneer beide doorgangen het eens zijn over een veldwaarde, wordt de betrouwbaarheidsscore verhoogd; wanneer ze het oneens zijn, wordt het veld gemarkeerd als betwist en worden beide kandidaatwaarden aan de analist gepresenteerd.

Corvus.Sense configureren om een specifieke dreigingsacteur te volgen

De volgende reeks beschrijft hoe Corvus.Sense in te stellen voor gerichte monitoring van een genoemde hackergroep via zijn Telegram-kanalen.

Stap 1 — Identificeer de Telegram-kanalen van de acteur. Stel numerieke kanaal-ID's en @gebruikersnamen op voor alle bekende kanalen die worden beheerd door of gelieerd zijn aan de doelgroep, inclusief spiegel- en back-upkanalen. Corvus.Sense accepteert beide formaten.

Stap 2 — Maak een acteurprofiel aan. Maak in het Acteurspaneel een nieuw profiel aan met de canonieke groepsnaam en bekende aliassen. Wijs MITRE ATT&CK-techniek-ID's toe die de bekende TTP's van de groep weerspiegelen. Koppel de kanaalidentificatoren aan dit profiel. Vanaf dit punt worden alle berichten van die kanalen gekoppeld aan dit acteurknooppunt in de grafiek.

Stap 3 — Configureer sector- en geografiebereik. Selecteer de sectoren en landcodes die u voor deze acteur wilt monitoren. Buiten het bereik vallende aanvallen worden nog steeds opgenomen en geclassificeerd, maar uitgesloten van acteurspecifieke waarschuwingsgeneratie. Dit maakt brede opname mogelijk terwijl het waarschuwingsvolume gefocust blijft op operationeel relevante gebeurtenissen.

Stap 4 — Stel betrouwbaarheidsdrempelwaarden en waarschuwingslevering in. Configureer minimale betrouwbaarheidsdrempelwaarden per veld. Lagere drempels (0,65) voor defensie- en kritieke infrastructuursectoren maximaliseren de herinnering. Configureer waarschuwingslevering naar e-mail, webhook of een SIEM-integratie-eindpunt. Corvus.Sense ondersteunt CEF- en JSON-waarschuwingsformaten voor SIEM-opname.

Stap 5 — Beoordeel en corrigeer initiële classificaties. Beoordeel gedurende de eerste 72 uur alle geclassificeerde records in de analistenwachtrij voor deze acteur, ongeacht de betrouwbaarheidsscore. Inline correctietools bieden bewerkingsmogelijkheden op veldniveau. Correcties worden geregistreerd en kunnen worden ingediend om de modelkalibratie voor de taalpatronen van deze acteur in de loop van de tijd te verbeteren.

Stap 6 — Activeer levenspatroonanalyse. Activeer na 7 dagen geaccumuleerde gebeurtenisdata de levenspatroonweergave. Activiteitsuurverdelingen, doelvoorkeursheatmaps en TTP-histogrammen worden berekend uit de grafiek en dagelijks bijgewerkt. Deze weergave is de primaire input voor het anticiperen op toekomstig doelgedrag.

Stap 7 — Exporteer gestructureerde inlichtingen. Gebruik de acteurprofielexport om inlichtingenproducten te genereren in JSON-, PDF- of STIX 2.1-bundelformaat. De STIX-export koppelt acteurprofieldata aan STIX Threat Actor- en Campaign-objecten voor delen via TAXII of import in externe CTI-platforms.