Conversation
The parser removes underscores from the names it writes, so journald JOB_RESULT is stored as JOBRESULT and auditd subj_user as subjuser. The JOB_RESULT halves of the job outcome conditions could never match; keep only JOBRESULT (same results). The rename of log.subj_user to origin.user never ran; remove it rather than switch it on, because it would put the SELinux label (for example unconfined_u) into origin.user, which is the account used for attribution, grouping and deduplication. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Change pushed ( What changed (
Why
Validation
Not changed: five rules under |
go-sdk v1.1.35 and later keep "_" in the field names parsers write (EventProcessor 8a3ade7; v11 d2479c1 pins v1.1.36). Journald JOB_RESULT is stored as log.JOB_RESULT on current engines and as log.JOBRESULT on older ones, so the job outcome conditions read both again, as before 75bfef1. The log.subj_user rename stays removed. On current engines it would run and put the SELinux user (for example unconfined_u) into origin.user, the account used for attribution, grouping and deduplication. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Parsers on go-sdk v1.1.35 or later keep "_" in the key names they write (EventProcessor 8a3ade7; v11 d2479c1 pins v1.1.36); older ones remove it. Journald and audit keys such as _HOSTNAME, _COMM, _CMDLINE, _SYSTEMD_UNIT, SYSLOG_IDENTIFIER and __REALTIME_TIMESTAMP therefore arrive as log._HOSTNAME on current engines, and the renames that read only log.HOSTNAME no longer ran. On 220 real Linux records, v11 on the 8a3ade7 engine lost origin.host on 134 events, and four rules lost matches (crontab persistence 6 to 0, reverse shell 7 to 0, systemd timer persistence 2 to 0, modified SSH binaries 2 to 1). The 45 renames of these keys now read both spellings. Rename targets are unchanged, so stored field names stay the same on both engines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Changes pushed ( What changed (
Why
Validation
|
|
The five RHEL-family rules (SELinux, Secure Boot, RPM database, YUM/DNF repository, OpenShift) read fields that no Linux producer writes. They are rebuilt in #2750, which is stacked on this branch because they read |
Linux currently copies vendor job and syscall outcomes into
actionResult, misses native final-login results, and can reject an event when a negative syscall exit is moved into unsignedstatusCode.This change derives canonical
success,failure, anddeniedoutcomes from the native audit collector and systemd job contracts. Canceled/skipped jobs, earlier authentication checks, repeated login-record arrays, unknown values, and nonblocking connections still in progress remain unset. Failed permission checks becomedenied. Vendor outcome and errno fields are retained, and only valid unsigned values populatestatusCode.Final
USER_LOGINrecords also expose valid IPv4/IPv6 peer addresses asorigin.ip, preservinglog.userlogin.addr. Invalid and unspecified addresses remain vendor detail. This makes final login outcome and peer identity available together to correlation.Validation uses fabricated raw collector/journal JSON, the existing ordered extraction model, and the pinned SDK v1.1.33. The model does not run the actual EventProcessor or prove TI membership, live deployment, or alert creation. Read-only raw/normalized samples and current deployed configuration were checked privately; customer records and identifiers are not included here.
Authoritative contracts: pinned audit collector, pinned audit result decoding, systemd job completion, connect completion and errors, audit user address, and SDK standard event schema (wiki revision
c18b54bd5ea5a34abb0e690458d73f89835edd29).Regression results: 91 fabricated raw outcome/IP cases and 14 existing-rule controls pass with SDK v1.1.33. No rule YAML migration is required. Separate isolated pipeline replay validated 98 resulting events and three expected rule alerts; its dependency versions differ from the reviewed snapshot, so this does not establish deployed equivalence.
Companion dependency: the shared TI outcome consumer also needs its compatibility correction before relying on canonical failure or unknown-outcome suppression. That tested change is now available as a separate draft.
Final alerts-module suite: 2,352 passed test events/subtests, 11 documented skips, zero failures.
GitHub CI: dependency and prompt-discovery checks passed. The three AI-review jobs could not start because the workflow requires the missing
THREATWINDS_API_KEYsecret; the aggregate check therefore failed. This is separate from the local regression results above.