Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
70f357e
feat(bec): add full BEC case workflow
Zacgoose Aug 24, 2026
f6890ce
refactor(bec): drop dead run outputs and duplicate reads from the inv…
Zacgoose Sep 6, 2026
b91f95a
refactor(bec): inline the single-use containment wrappers
Zacgoose Sep 6, 2026
517a2b8
refactor(bec): trim the endpoints to what the UI calls
Zacgoose Sep 6, 2026
cb06b2c
refactor(bec): share the case-page predicates and drop unreachable UI
Zacgoose Sep 6, 2026
c358096
fix(bec): resolve mobile-device ids on the mailbox and keep the alert…
Zacgoose Sep 6, 2026
6a7aaf6
chore(openapi): regenerate for the BEC endpoint changes
Zacgoose Sep 6, 2026
dd60698
fix(bec): alert form describes the action's four-step default
Zacgoose Sep 6, 2026
93fd57f
refactor(bec): full is the only investigation mode
Zacgoose Sep 6, 2026
99f81c4
refactor(bec): evidence package without hashes or export records
Zacgoose Sep 6, 2026
963a0a6
refactor(bec): describe findings as data instead of bespoke renderers
Zacgoose Sep 6, 2026
937c661
fix(bec): keep transient Intune errors as failures and name skipped b…
Zacgoose Sep 6, 2026
6c2e470
Update openapi.json
Zacgoose Sep 6, 2026
eb44f4b
fix(bec): keep user-derived text out of the evidence download console…
Zacgoose Sep 6, 2026
ec483be
fix(bec): count containment runs from the stored history, not a missi…
Zacgoose Sep 6, 2026
dfe84d7
test(bec): cover the remaining endpoints, collectors and mutators
Zacgoose Sep 6, 2026
59c4683
fix(bec): correlate audit-log activity by host and keep the raw recor…
Zacgoose Sep 6, 2026
d7c88f3
fix(bec): skip the Intune device check on tenants without an Intune plan
Zacgoose Sep 6, 2026
fd60825
fix(bec): start each evidence list at ten cards on a phone
Zacgoose Sep 6, 2026
fc1a2e3
refactor(bec): preflight every licence gate up front through Get-CIPP…
Zacgoose Sep 6, 2026
8753f97
refactor(bec): read every log to the end of the window instead of a r…
Zacgoose Sep 7, 2026
ae55b49
fix(bec): date inbox rules from their audit trail, keep their full de…
Zacgoose Sep 7, 2026
6136192
feat(bec): flag guest invites and user creation, show new users by type
Zacgoose Sep 7, 2026
16bb72b
feat(bec): classify every audited actor and list partner and CIPP act…
Zacgoose Sep 7, 2026
e011b68
feat(bec): make the by-user view a real grouping with a run-history d…
Zacgoose Sep 9, 2026
c023e01
fix(bec): stop the flat run cache from clobbering the by-user grouping
Zacgoose Sep 9, 2026
ba5dd13
Update get-cipp-formatting.jsx
Zacgoose Sep 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions backend/Config/BecHeuristics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{
"window": {
"days": 7
},
"caps": {
"auditLogPages": 10,
"mailActivityPages": 10
},
"score": {
"thresholds": {
"high": 7,
"medium": 4
},
"newUsersThreshold": 5,
"weights": {
"NewRules": 3,
"InboxRuleChanges": 3,
"PermissionChangesTargetingUser": 2,
"PermissionChanges": 1,
"NewApps": 1,
"NewUsers": 1,
"SafelistChanges": 2,
"SuspiciousRules": 5,
"MaliciousApps": 5,
"ForeignSuccessfulSignIns": 3,
"ForeignActivity": 3,
"AnonymousLinks": 3,
"MassMail": 3,
"RecentMfaMethods": 2,
"RecentIntuneDevices": 2,
"FlaggedDelegations": 2,
"RiskyUserGrants": 3,
"CatalogUserGrants": 5,
"RiskyTransportRuleChanges": 4,
"FlaggedMailboxAddIns": 1,
"TyposquatSenders": 3,
"DefenderDetections": 3,
"FlaggedDirectoryAudits": 2,
"RecentRegisteredDevices": 2,
"ForeignNonInteractiveSignIns": 3,
"SuspiciousMailActivity": 2,
"RiskyUserHigh": 4,
"RiskyUserMedium": 2,
"RiskyUserLow": 1,
"ConfirmedCompromised": 5
}
},
"inboxRules": {
"suspiciousFolderPattern": "RSS",
"lowVisibilityFolderRegex": "(?i)(rss|archive|deleted|junk|conversation history|notes|sync issues)",
"sensitiveNameRegex": "(?i)(invoice|payment|security|alert|verify|microsoft|admin)",
"sensitiveKeywordRegex": "(?i)(invoice|payment|wire|remittance|bank|swift|iban|ach|routing|account number|beneficiary|payroll|password|credential|verif|urgent|confidential)"
},
"phishingSubjectPatterns": {
"Urgent action language": "(?i)urgent.{0,25}(action|response).{0,25}required",
"Account verification language": "(?i)(verify|validate).{0,25}(account|identity|password)",
"Account suspension language": "(?i)(suspend|disable|expire).{0,25}(account|mailbox|access)",
"Prize or lottery language": "(?i)\\b(winner|lottery|prize|gift card)\\b",
"Invoice or payment language": "(?i)\\b(invoice|payment|wire|remittance)\\b"
},
"phishingKeywordPattern": "(?i)\\b(urgent|verify|suspend(?:ed)?|password|credential|invoice|payment|wire|gift card|confidential)\\b",
"typosquat": {
"minDistance": 1,
"maxDistance": 2
},
"riskyScopes": {
"regex": "(?i)(\\.ReadWrite(\\.All)?$|\\.All$|Mail\\.|Files\\.|Directory\\.|RoleManagement\\.|offline_access)"
},
"transportRules": {
"operations": [
"New-TransportRule",
"Set-TransportRule",
"Enable-TransportRule",
"Disable-TransportRule",
"Remove-TransportRule"
],
"riskyParameterRegex": "(?i)^(BlindCopyTo|RedirectMessageTo|CopyTo|AddToRecipients|AddManagerAsRecipientType|RouteMessageOutboundConnector|ModerateMessageByUser|ModerateMessageByManager)$",
"recentParameterRegex": "(?i)^(DeleteMessage|Quarantine|SetSCL|RemoveHeader|SetHeaderName)$",
"descriptionRegex": "(?i)(redirect|blind copy|bcc|delete|quarantine|set the spam confidence)"
},
"directoryAudit": {
"flaggedActivities": [
"User registered security info",
"User registered all required security info",
"User started security info registration",
"User changed default security info",
"User deleted security info",
"Admin registered security info",
"Update user",
"Reset password (by admin)",
"Change user password",
"Reset user password",
"Update StsRefreshTokenValidFrom Timestamp",
"Consent to application",
"Add OAuth2PermissionGrant",
"Add app role assignment to service principal",
"Add app role assignment grant to user",
"Add service principal",
"Add service principal credentials",
"Add delegated permission grant",
"Register device",
"Add device",
"Add registered owner to device",
"Add registered users to device",
"Invite external user",
"Add user",
"Add member to role",
"Add eligible member to role",
"Disable Strong Authentication",
"Update user attributes (StrongAuthentication)"
]
},
"mailActivity": {
"userOperations": [
"MailItemsAccessed",
"HardDelete",
"SoftDelete",
"MoveToDeletedItems",
"Send"
],
"mailboxOwnerOperations": [
"SendAs",
"SendOnBehalf"
],
"hardDeleteThreshold": 20
},
"sentMail": {
"repeatSubjectMessages": 5,
"repeatSubjectRecipients": 20,
"minRepeatedSubjectMessages": 3,
"burstMessages": 10,
"burstRecipients": 30,
"burstWindowMinutes": 10
},
"mailboxAddIns": {
"trustedProviderRegex": "(?i)^microsoft"
},
"delegations": {
"folderScopes": [
"Calendar",
"Inbox"
]
}
}
Loading
Loading