GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — feat(detections): add 9 AWS + 9 O365 gap-fill rules by osmontero · Pull Request #2755 · utmstack/UTMStack Conversation
Member
Coverage gap-fill: 9 AWS + 9 O365 detectionsFollows up the gap analysis vs Wazuh / SigmaHQ / Elastic Security / Microsoft Sentinel / MITRE ATT&CK Cloud. Adds the highest-severity missing detections as new rules only — no filter changes. AWS (KryonX v1.1.x schema —
|
| Rule | Trigger | Gap |
|---|---|---|
aws_cloudtrail_trail_created |
CreateTrail |
second/shadow trail (T1685) |
aws_guardduty_detector_updated |
UpdateDetector enable=false |
disable w/o delete (T1685) |
aws_guardduty_finding_filter |
PutFilters |
suppress findings (T1685) |
aws_securityhub_disabled |
DisableSecurityHub |
turn off SecHub (T1685) |
aws_s3_bucket_logging_disabled |
PutBucketLogging no target |
kill S3 access log (T1562.008) |
aws_rds_deletion_protection_or_password_changed |
ModifyDBInstance |
disable del-protection / change master pw (T1485) |
aws_kms_key_disabled_or_deletion |
DisableKey/ScheduleKeyDeletion |
render data unreadable (T1486) |
aws_account_closed |
CloseAccount |
account endgame (T1485) |
aws_sts_assume_role_with_web_identity |
AssumeRoleWithWebIdentity |
K8s/CI OIDC token abuse (T1550) |
Each ships a positive CloudTrail fixture in aws_raw.json; contract count bumped 73→82; filter-contracts/aws.json manifest updated.
action + actionResult + log.Parameters)| Rule | Operation | Gap |
|---|---|---|
o365_mailbox_mass_access |
MailItemsAccessed |
bulk mailbox scrape (T1114) |
o365_mailbox_login_nonowner |
MailboxLogin |
non-owner mailbox access (T1078) |
o365_cas_autoforward |
Set-CASMailbox forwarding |
CAS-level exfil (T1114) |
o365_mailbox_folder_permission |
Add-MailboxFolderPermission |
folder delegation (T1098) |
o365_conditional_access_changed |
Disable/UpdateConditionalAccessPolicy |
CA weakened (T1562) |
o365_dlp_policy_removed |
Remove-DlpPolicy |
DLP removed (T1562) |
o365_mailbox_audit_bypass |
Set-MailboxAuditBypassAssociation |
audit bypass (T1562) |
o365_file_malware_detected |
FileMalwareDetected |
malware staged (T1204) |
o365_security_alert_added |
AlertAdded |
Defender alert surfaced |
All validated through the plugins/alerts offline contract harness (TestAWSRawContracts + TestFilterAndRuleContracts pass).
#2660 and #2661 (both touch filters/aws/aws.yml, aws_contract_test.go, aws_raw.json, filter-contracts/aws.json, and the same O365 area). This PR should be rebased onto whichever of those merges first — the AWS rules assume his v1.1.x filter schema is final.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
❌ Go dependencies check failedThere are outdated Go dependencies, or modules that could not be inspected. Script output |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
✅ AI review — ApprovedNo issues detected in this diff. ✅
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Changes requested — Go dependencies check failed (see above).
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Closes the highest-severity coverage gaps identified against Wazuh, SigmaHQ, Elastic Security, Microsoft Sentinel, and MITRE ATT&CK Cloud. AWS (defense-evasion / impact / credential tier, KryonX v1.1.x schema): - aws_cloudtrail_trail_created CreateTrail - aws_guardduty_detector_updated UpdateDetector (enable=false) - aws_guardduty_finding_filter PutFilters - aws_securityhub_disabled DisableSecurityHub - aws_s3_bucket_logging_disabled PutBucketLogging (no target) - aws_rds_deletion_protection_or_password_changed ModifyDBInstance - aws_kms_key_disabled_or_deletion DisableKey / ScheduleKeyDeletion - aws_account_closed CloseAccount - aws_sts_assume_role_with_web_identity AssumeRoleWithWebIdentity Each ships a positive CloudTrail fixture in aws_raw.json; the contract count is bumped 73 -> 82 and the filter-contract manifest updated. O365 (my v1.2.3 schema, action + actionResult + log.Parameters): - o365_mailbox_mass_access MailItemsAccessed - o365_mailbox_login_nonowner MailboxLogin - o365_cas_autoforward Set-CASMailbox (forwarding) - o365_mailbox_folder_permission Add-MailboxFolderPermission - o365_conditional_access_changed Disable/UpdateConditionalAccessPolicy - o365_dlp_policy_removed Remove-DlpPolicy - o365_mailbox_audit_bypass Set-MailboxAuditBypassAssociation - o365_file_malware_detected FileMalwareDetected - o365_security_alert_added AlertAdded All validated via the plugins/alerts offline contract harness (TestAWSRawContracts + TestFilterAndRuleContracts). No filter changes — every O365 operation passes the existing v1.2.3 drop-list.
4b97f4c to
90cb078
Compare
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Changes requested — Go dependencies check failed (see above).
Sorry, something went wrong.
There was an error while loading. Please reload this page.
FileMalwareDetected (RecordType 6) and AlertAdded (RecordType 78) are system-generated detections that carry no ResultStatus in production. KryonX's v1.4.1 filter (merged #2661) therefore never resolves actionResult=success for them, which would silently dead the rules. The event's presence is the signal, so match on action alone. Verified against the real filter + production data shapes: all 9 O365 gap rules now fire (MailboxLogin RT2/Succeeded, Set-CASMailbox + Add-MailboxFolderPermission + Remove-DlpPolicy + Set-MailboxAuditBypass RT1/True, Disable/UpdateConditionalAccessPolicy RT8/Success, MailItemsAccessed RT50/Succeeded, FileMalwareDetected RT6 + AlertAdded RT78 no-ResultStatus).
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Changes requested — Go dependencies check failed (see above).
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.