Conversation
…eeps The parser plugins remove every character except letters, digits and dots from the field names they write. The Kaspersky filter added its 4 correlation markers with underscores (for example log.correlationCandidate.lateral_movement_indicators), so they were stored without them (log.correlationCandidate.lateralmovementindicators) and the 4 history rules that count them never matched. Rename the markers to camelCase (for example log.correlationCandidate.lateralMovementIndicators) in the filter and in every rule that reads them, and bump those rules to v1.1.1. Rule conditions, thresholds and windows are unchanged. Tests: the Kaspersky parse model now stores grok, rename and add targets the way the parser does, the history test counts each marker by its new name, and a new test checks that every marker the filter adds and every marker a Kaspersky rule reads are the same name, made only of letters, digits and dots. The fixture that forges a marker in the input now uses the new name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Change pushed ( What changed
Why
Validation
Not changed
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Kaspersky filter's CEF extension and native KSC syslog groks do not match the sequential EventProcessor executor. It trims before each pattern and rejects empty matches, so the reviewed filter loses action and IP fields. That prevents an explicit
AlloworBlockedaction from producing a reliable finalactionResult, and loses the endpoint IP on native health events.Change
Use nonempty captures compatible with the actual grok plugin. Clear any incoming
actionResultand derive it from explicit finalactvalues: allow tosuccess; block, deny, drop, reject and quarantine todenied; fail tofailure. Leave unknown actions and native KSC endpoint-health records without an outcome. Preserve CEF source/destination IP roles and map a valid nativehiptotarget.ipwithout treating a health status as a successful connection. Preserve CEF message text and prevent an escaped equals sign in it from creating a false source IP.Validation
target.ipand leavesactionResultunset on all 20. Raw records and identifiers stay in the private evidence pack.plugins/alertsGo suite passes, including 85 existing Kaspersky raw contracts and positive/negative SDK CEL predicates. The local parser uses EventProcessor's default SDKv1.1.26; this branch's alerts module pinsv1.1.33, so deployed behavior after rollout remains unverified.The grok implementation establishes its trim and empty-match behavior; the SDK schema defines controlled result values. The configured Kaspersky documentation links redirected to a generic support page and did not provide an event contract, so the new verdicts are limited to unambiguous action words. No customer configuration was changed and no production TI alert is claimed.
GitHub's AI review jobs cannot start on this fork PR because
THREATWINDS_API_KEYandTHREATWINDS_API_SECRETare unavailable to the runner; their log stops at the missing-key check, so they reported no code findings. The Go dependency check passes, and the local parser and Go tests above provide validation for this draft.