Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
f991c0b
feat(bec): add full BEC case workflow
Zacgoose Aug 24, 2026
af11e97
refactor(bec): drop dead run outputs and duplicate reads from the inv…
Zacgoose Sep 6, 2026
517d46a
refactor(bec): inline the single-use containment wrappers
Zacgoose Sep 6, 2026
bcd02e3
refactor(bec): trim the endpoints to what the UI calls
Zacgoose Sep 6, 2026
a23d107
refactor(bec): share the case-page predicates and drop unreachable UI
Zacgoose Sep 6, 2026
6bb91eb
fix(bec): resolve mobile-device ids on the mailbox and keep the alert…
Zacgoose Sep 6, 2026
e46b74e
chore(openapi): regenerate for the BEC endpoint changes
Zacgoose Sep 6, 2026
1f4e659
fix(bec): alert form describes the action's four-step default
Zacgoose Sep 6, 2026
7d15a71
refactor(bec): full is the only investigation mode
Zacgoose Sep 6, 2026
8827ba4
refactor(bec): evidence package without hashes or export records
Zacgoose Sep 6, 2026
990516e
refactor(bec): describe findings as data instead of bespoke renderers
Zacgoose Sep 6, 2026
06687ee
fix(bec): keep transient Intune errors as failures and name skipped b…
Zacgoose Sep 6, 2026
9deb686
Update openapi.json
Zacgoose Sep 6, 2026
24500e4
fix(bec): keep user-derived text out of the evidence download console…
Zacgoose Sep 6, 2026
878cfbb
fix(bec): count containment runs from the stored history, not a missi…
Zacgoose Sep 6, 2026
fd60f51
test(bec): cover the remaining endpoints, collectors and mutators
Zacgoose Sep 6, 2026
17e6b75
fix(bec): correlate audit-log activity by host and keep the raw recor…
Zacgoose Sep 6, 2026
5b0013a
fix(bec): skip the Intune device check on tenants without an Intune plan
Zacgoose Sep 6, 2026
e536361
fix(bec): start each evidence list at ten cards on a phone
Zacgoose Sep 6, 2026
bc3e985
refactor(bec): preflight every licence gate up front through Get-CIPP…
Zacgoose Sep 6, 2026
39c4966
refactor(bec): read every log to the end of the window instead of a r…
Zacgoose Sep 7, 2026
495c1e7
fix(bec): date inbox rules from their audit trail, keep their full de…
Zacgoose Sep 7, 2026
a5e1e49
feat(bec): flag guest invites and user creation, show new users by type
Zacgoose Sep 7, 2026
56d504f
feat(bec): classify every audited actor and list partner and CIPP act…
Zacgoose Sep 7, 2026
84fc55d
feat(bec): make the by-user view a real grouping with a run-history d…
Zacgoose Sep 9, 2026
0e4c57c
fix(bec): stop the flat run cache from clobbering the by-user grouping
Zacgoose Sep 9, 2026
3776d90
Update get-cipp-formatting.jsx
Zacgoose Sep 9, 2026
5676632
feat(bec): instance-wide remediation defaults and a case page that st…
Zacgoose Sep 23, 2026
30c1aeb
fix(bec): keep a one-entry containment history a list
Zacgoose Sep 23, 2026
4cdc37f
feat(bec): run containment as a background job with live progress
Zacgoose Sep 23, 2026
223bec4
feat(bec): collapsible history and timeline, full-screen timeline view
Zacgoose Sep 23, 2026
a1442b4
fix(bec): correlate timeline sources by host, ignoring the client port
Zacgoose Sep 23, 2026
401071c
feat(ip-list): blocked state and CIDR ranges on the CIPP IP allow/blo…
Zacgoose Sep 23, 2026
3241bf2
feat(bec): judge each IP behind a case as attacker, user or service
Zacgoose Sep 23, 2026
5f221a6
fix(graph): retry throttled first pages in New-GraphBulkRequest
Zacgoose Sep 23, 2026
5c9c240
feat(bec): item-level attacker activity, Forms and delegated mailboxes
Zacgoose Sep 23, 2026
98d7e87
feat(bec): review a case's IP verdicts and re-run what depends on them
Zacgoose Sep 23, 2026
f6ab512
feat(bec): colleague sampling, CIPP's own sign-ins as a service, unch…
Zacgoose Sep 23, 2026
a48b327
feat(bec): attacker IP group, IP review drawer and a start of comprom…
Zacgoose Sep 23, 2026
71a314a
fix(bec): treat partner delegated administration sign-ins as a service
Zacgoose Sep 23, 2026
f5402e7
fix(bec): only re-run an IP review with at least one address decided
Zacgoose Sep 23, 2026
ea1a73d
feat(bec): never judge the technician's own address as the user or th…
Zacgoose Sep 23, 2026
d617ec5
fix(bec): give the technician's own address a trusted start instead o…
Zacgoose Sep 23, 2026
c062d02
feat(bec): blast radius of the attacker addresses across the tenant
Zacgoose Sep 23, 2026
f7265ed
feat(bec): attacker addresses, activity and reach in the BEC report
Zacgoose Sep 23, 2026
df97bad
feat(bec): guide the removal of a phishing form
Zacgoose Sep 23, 2026
e18fa25
fix(bec): label the attacker group in the report's objective breakdown
Zacgoose Sep 23, 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
243 changes: 243 additions & 0 deletions backend/Config/BecHeuristics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
{
"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,
"AttackerIPs": 4,
"AttackerMailAccess": 3,
"AttackerFileAccess": 2,
"AttackerForms": 3,
"DelegatedMailboxAttackerAccess": 3,
"OtherAccountsReached": 3
}
},
"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",
"AttachmentAccess",
"Move",
"UpdateFolderPermissions",
"UpdateCalendarDelegation",
"SearchQueryInitiatedExchange",
"Set-Mailbox"
],
"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"
]
},
"baseline": {
"days": 30,
"colleagueSample": 8
},
"ipVerdict": {
"thresholds": {
"likelyAttacker": 6,
"suspicious": 3,
"likelyUser": -3
},
"minBaselineSignIns": 10,
"regularShare": 0.05,
"regularDays": 3,
"knownAsnShare": 0.2,
"knownLocationShare": 0.1,
"serviceAsnRegex": "(?i)microsoft",
"scriptedUserAgentRegex": "(?i)(python|axios|curl|okhttp|go-http-client|node-fetch|powershell|libwww|java/|httpclient|postman)",
"weights": {
"flaggedAction": 4,
"flaggedActionExtraKind": 1,
"hostingOrProxy": 3,
"foreign": 2,
"newToUser": 2,
"newNetwork": 1,
"newLocation": 1,
"riskySignIn": 3,
"riskySignInLow": 1,
"scriptedClient": 3,
"widerAttack": 2,
"sharedSession": 3,
"blockListHint": 2,
"baselineRegular": -4,
"baselineSeen": -2,
"knownNetwork": -1,
"knownLocation": -1,
"compliantDevice": -2,
"colleagues": -2,
"trustedNamedLocation": -4,
"technicianAddress": -4,
"allowListHint": -1,
"onlyFailedSignIns": -3
},
"serviceAppIds": {
"2832473f-ec63-45fb-976f-5d45a7d4bb91": "Partner Customer Delegated Administration (GDAP)"
}
},
"attackerActivity": {
"fileOperations": [
"FileAccessed",
"FileDownloaded",
"FileSyncDownloadedFull",
"FilePreviewed",
"FileUploaded",
"FileModified",
"FileDeleted",
"FileRecycled",
"FileMoved",
"FileCopied",
"FileRenamed",
"SearchQueryPerformed"
],
"linkUsageOperations": [
"AnonymousLinkUsed",
"CompanyLinkUsed",
"SecureLinkUsed",
"SharingInvitationAccepted"
],
"formsResponseOperations": [
"CreateResponse",
"SubmitResponse",
"ViewRuntimeForm",
"UpdatePhishingStatus"
],
"formsAttackerOperations": [
"CreateForm",
"EditForm",
"ShareForm",
"SendForm",
"AllowShareFormForCopy",
"AddFormCoauthor",
"ConnectToExcelWorkbook",
"ExportForm",
"ViewResponses",
"GetSummaryLink"
],
"subjectLookbackDays": 90
}
}
Loading
Loading