Naar de inhoud
Avanet
Aanmelden

Sophos SIEM Custom Parsers maken, testen en beheren

Een Custom Parser koppelt de velden van een logbericht aan de gestandaardiseerde gebeurtenisschema’s van Sophos XDR. Dit helpt wanneer een gekoppelde bron niet correct wordt genormaliseerd. Het werk gebeurt onder Security Operations > Integrations > Custom Parsers: de parser maken, met verschillende afzonderlijke berichten testen, de werkelijke mapping controleren en pas daarna inschakelen. Een Next-Gen SIEM-subscription en de rol Admin of Super Admin zijn vereist; andere rollen kunnen alleen de lijst met geconfigureerde parsers bekijken.

De parser configureert het logtransport niet. De bron moet eerst gegevens leveren; de SIEM-uitleg onderscheidt opname, normalisatie en detectie. Bij een al ondersteunde integratie wordt eerst het verwachte bronformaat ingesteld, in plaats van voortijdig de globale parserlogica te overschrijven.

Bron, schema en terugweg voorbereiden

Leg vooraf bronproduct, formaat, gebeurtenistypen, tijdreferentie en benodigde analyse vast. Sophos ondersteunt CEF, LEEF, JSON, XML en ongestructureerde berichten. Voor elke relevante variant is een opgeschoond voorbeeld nodig: bijvoorbeeld geslaagde en mislukte aanmeldingen, ontbrekende optionele velden en andere gebruikers- of adreswaarden. Verwijder geheimen, maar behoud de structuur die de parser nodig heeft.

Het doelschema beschrijft het gebeurtenistype. Een aanmelding past bijvoorbeeld bij Auth, een netwerkverbinding bij Netflow en een DNS-verzoek bij DNS. Custom Parsers ondersteunen slechts een deel van alle XDR-schema’s. Controleer onder Data Lake Search > Schema Library de doorzoekbare schema’s en velden; de normalisatiereferentie vermeldt ook de bijbehorende parservelden en gegevenstypen. Alleen een veldnaam bewijst niet dat de bron die waarde levert.

Documenteer voor de wijziging parsernaam, eigenaar, bronformaat, gewenste doelvelden, testberichten en eerdere verwerking. Bewaar bij een bestaande parser de vorige scripttekst op een afgeschermde locatie. Zorg voor een terugweg zonder verwijdering: nieuwe parsers blijven aanvankelijk uitgeschakeld; schakel ze bij problemen opnieuw uit of herstel gecontroleerd de bewaarde scriptversie. Sophos onderhoudt of actualiseert Custom Parsers niet; die verantwoordelijkheid blijft bij de beheerder.

Standalone, Parent of Child kiezen

  • Standalone past bij een bron met precies één berichttype en één doelschema.
  • Parent herkent de bron en bereidt gemeenschappelijke waarden voor. Sophos beveelt scwx.generic als doelschema aan. Bijbehorende Child Parsers normaliseren de afzonderlijke gebeurtenistypen.
  • Child vereist een Parent en het juiste definitieve doelschema. Variabelen en parservelden van de Parent zijn voor de Child beschikbaar.

Een firewall kan bijvoorbeeld aanmeldingen, netwerkverbindingen en HTTP-gebeurtenissen leveren. Eén Parent herkent het gemeenschappelijke bronformaat; drie Children verwerken de verschillende inhoud. Eigen Child Parsers kunnen zelf geen verdere Child Parsers hebben. Voor één eenvoudige bron is deze opsplitsing niet automatisch nodig.

Parser maken en de bron eenduidig herkennen

  1. Open Security Operations > Integrations > Custom Parsers en kies Add Custom Parser.
  2. Geef een herkenbare naam op, bijvoorbeeld EXAMPLE_APP_JSON_AUTH. Dit is een vrij gekozen voorbeeld; product, formaat en doel moeten herkenbaar zijn.
  3. Kies Parent, Child of Standalone. Selecteer bij Child de juiste Parent en stel vervolgens bronformaat en doelschema in.
  4. Open de scripteditor met Create. Het gegenereerde basisscript bevat de splitsfunctie voor het gekozen formaat.

De Confirm String bepaalt of een bericht aan deze parser wordt toegewezen. !CONFIRMWITH=PATTERN selecteert een Go-compatibele reguliere expressie; !CONFIRMWITH=EXPRESSION een voorwaarde die waar of onwaar oplevert. De eigenlijke expressie staat in beide gevallen in !CONFIRMSTRING in het declaratieblok van het script. Deze moet de bedoelde bron en eventueel het gebeurtenistype voldoende nauwkeurig herkennen. Een algemeen woord zoals “network” is meestal te breed. Het volledige sjabloon in het hieronder gelinkte HTTP-/parserpraktijkvoorbeeld toont de modus en matcher samen; het beperkte laboratoriumformaat is niet uitwisselbaar met het volgende example-auth-fragment.

Ook een syntactisch geldige parser kan berichten van andere bronnen oppakken. Sophos garandeert geen vaste volgorde voor alle mogelijke parserconflicten. Test daarom ook minstens één vergelijkbaar bericht dat niet bij de nieuwe parser hoort. Controleer later in het extractor path welke Parent en Child werkelijk zijn gebruikt.

Velden koppelen en tijdstempels controleren

Het script onderscheidt lokale variabelen van parservelden die op $ eindigen. Alleen parservelden die bij het doelschema passen, worden genormaliseerd; een willekeurige eigen veldnaam met $ maakt geen nieuw schemaveld. Schemavelden gebruiken vaak snake_case, parservelden camelCase. Controleer de exacte schrijfwijze aan de hand van het gekozen schema.

Dit fictieve JSON-bericht vormt een klein uitgangspunt voor een Auth-mapping:

{"product":"example-auth","user":"pilot-user","src_ip":"192.0.2.25","time":"2026-10-27T10:15:00Z","result":"success"}

192.0.2.25 is een documentatieadres, geen productiedoel. Een JSON-scriptfragment kan gebruiker en bronadres als volgt uitlezen:

json = JSON(originalData$)
sourceUserName$ = json["$.user"]
sourceAddress$ = json["$.src_ip"]

Een volledige template voor een nauw omschreven synthetisch formaat met tijdstempel, enum-toewijzing en zoekacceptatie staat in het HTTP-/parserpraktijkvoorbeeld.

Dit is een onvolledige parserdefinitie. Confirm String, schema, tijdstempel, authenticatieactie en resultaat ontbreken bewust nog en moeten bij het werkelijke bronformaat passen. Kopieer met name de tekst success niet ongecontroleerd naar een numeriek enum-veld. Het Auth-schema definieert bijvoorbeeld SUCCESS en FAILED voor action_result; controleer hun parsermapping uitdrukkelijk.

Vergelijk voor tijdstempels de ruwe waarde, tijdzone en genormaliseerde event_time_usec. De parserfunctie DATETIME() gebruikt Go-tijdformaatsjablonen. Een tijdwaarde met een onjuiste zone kan technisch succesvol maar inhoudelijk op de verkeerde tijd worden geanalyseerd. Controleer ook de gemeenschappelijke waarden uit de Root Parser tegen de bron.

Herhaalde velden zoals meerdere bijlagen, indicatoren of metadatarecords vereisen objectlijsten die bij het schema passen. Een kommagescheiden tekst vervangt zo’n structuur niet. ADDFIELD() kan arrays tot herhaalde objecten combineren; bij JSON-arrays moeten bij elkaar horende posities behouden blijven. Ontbrekende waarden mogen er bijvoorbeeld niet toe leiden dat een hash aan het verkeerde bestandstype wordt gekoppeld.

Afzonderlijke berichten testen en resultaten lezen

Als de bron al gegevens verzendt, kan onder Data Lake Search met FROM generic WHERE sensor_id='[my data source]' naar passende ruwe berichten worden gezocht. Vervang de placeholder door de bronidentificatie die tegen echte gebeurtenissen is gecontroleerd. Kies in de gebeurtenisdetails Original Data > Copy Original Data en plak de inhoud in Sample Message van de parsereditor. Gebruik anders één opgeschoonde logregel, geen volledig logbestand.

  1. Controleer eerst de opsplitsing met Parse Message. Parsed Source Message toont sleutel/waardeparen voor gestructureerde formaten of geïndexeerde onderdelen voor ongestructureerde berichten.
  2. Controleer onder Source Destination Mapping welke bronwaarden in welke schemavelden terechtkomen. Vergelijk gebruiker, bron-/doeladres, tijd, actie en resultaat afzonderlijk met het ruwe bericht.
  3. Controleer het extractor path. Dit moet het bedoelde parserpad tonen. Een waarschuwing over een andere parser is geen cosmetische melding.
  4. Voeg meer representatieve en bewust niet-passende berichten toe. Test bij Parent/Child zowel de gemeenschappelijke herkenning als de Child-toewijzing.
  5. Voer Run Test uit voor alle opgeslagen voorbeelden en vergelijk schema, veldwaarden en parserpad. Sophos adviseert herhaalde tests, ongeveer 12 tot 15 uitvoeringen, om wisselende onjuiste toewijzingen te ontdekken. Een bepaald aantal garandeert niet dat alle toekomstige berichten correct worden verwerkt.

De testhulpmiddelen controleren de huidige editorinhoud, maar slaan deze niet op. Een ongeldige uitgeschakelde parser kan worden opgeslagen; opslaan alleen is dus geen inhoudelijke goedkeuring. Ontbreken velden, controleer dan eerst broninhoud, gegevenstype, exacte parserveldnamen en eventueel de splitsing van het bericht.

Opslaan en gecontroleerd inschakelen

Bij een nieuwe parser slaat Save and Continue het ontwerp op. Nieuwe parsers zijn standaard uitgeschakeld. Verlaat na succesvolle controle de editor met Exit, kies in de parserlijst het Play-pictogram onder Actions en bevestig met Enable. Schakel bij Parent/Child eerst de Parent en daarna de Children in.

Genereer na het inschakelen een toegestaan onschadelijk bronevent of correleer een toch al verwacht event eenduidig. Zoek de genormaliseerde resultaten op basis van bron, tijd, schema en gewenste velden. Sophos noemt bijvoorbeeld WHERE sensor_type=[your_sensor_type]; de placeholder staat voor het werkelijk aanwezige sensortype en is geen kant-en-klare query.

Verwerking naar aanvullende schema’s vindt naast de generieke events plaats. Een zoekresultaat bewijst in eerste instantie alleen de geteste normalisatie. Automatische detectors zijn niet voor elke Custom-bron gegarandeerd. Gedocumenteerde ondersteunde paden omvatten DGA en Domain Watchlist via DNS query_name, en IP Watchlist via bron-/doeladressen in NIDS of Netflow. Valideer een gewenste detectie afzonderlijk; een gewoon testevent hoeft geen alarm op te leveren.

Klantregels en MDR-verantwoordelijkheid onderscheiden

is_custom_alert, of bij Email vendor_alert_details.is_custom_alert, markeert de herkomst van een alarmregel. Volgens de schemahulp worden zo als Custom Alert gemarkeerde detecties bij true rechtstreeks aan de tenant voor eigen afhandeling geleverd en niet in de MDR-servicequeue opgenomen; hun ernst verandert niet. Stel deze markering niet zo in dat een klantalarm ten onrechte op een ongewijzigde leveranciersdetectie lijkt.

Dit betekent niet dat elk door een Custom Parser genormaliseerd bericht automatisch onder dezelfde uitsluiting valt. Bronevent, daaruit ontstane detectie en caseverantwoordelijkheid blijven afzonderlijke vragen. Het artikel over Cases en Rules verklaart de bestaande grens voor Self-managed Cases uit klantregels.

Fouten oplossen en veilig terugdraaien

Verkeerde parser in het extractor path: Vergelijk de Confirm Strings van de betrokken parsers. Vraag Sophos Support bij een conflict met een globale parser de specificiteit te controleren, in plaats van extra brede overrides te stapelen.

Bericht alleen in generic: Controleer transport en ruw bericht, daarna Confirm String, ingeschakelde parser en gekozen schema. Alleen het ontbreken van een genormaliseerd resultaat bewijst geen transportstoring.

Geldig script, verkeerde waarden: Vergelijk ruw bericht en mapping veld voor veld, vooral tijd en enum-waarden. Herstel bij actieve parsers een verkeerde wijziging gecontroleerd naar de bewaarde versie en controleer opnieuw.

Schakel een nieuwe foutieve parser uit met het Pause-pictogram en Disable. Binnen een hiërarchie moeten alle Children uitgeschakeld of verwijderd zijn voordat de Parent kan worden uitgeschakeld. Na uitschakeling stopt de aanvullende schemanormalisatie onmiddellijk; generieke events blijven ontstaan. Deze terugweg corrigeert niet automatisch eerder verkeerd genormaliseerde historische gegevens of daaruit ontstane detecties.

Verwijderen via het prullenbakpictogram en Delete kan niet ongedaan worden gemaakt. Voor een eerste terugdraaiing volstaat normaal gesproken uitschakelen. Beslis pas over definitieve verwijdering nadat de configuratie is veiliggesteld, afhankelijkheden zijn opgehelderd en de validatie is afgerond.

Globale parsers zelf kunnen niet worden bewerkt. Een Override vervangt hun verwerking voor de eigen toepassing, een Extension voegt eerder niet-genormaliseerde gebeurtenistypen toe. Beide vereisen de juiste globale Parent-koppeling en eigen onderhoud. Zonder eenduidige parsernaam en aangetoonde veldmapping blijft het bestaande globale pad behouden; corrigeer een afwijkende tijdzone of nieuw bronformaat niet in productie met een ongeteste Override.