Deduplication only applies to a workspace with both the Microsoft Defender XDR and Microsoft Sentinel detection modules connected. See Detection module state.
How ContraForce decides
Both systems label the origin of an incident, and ContraForce reads those labels directly. There is no cross-API lookup, no correlation database, and no dependence on which copy arrives first.
That last row is deliberate. An unreadable label, an unfamiliar provider, or a provider call that fails all mean “show the incident”. A duplicate is a visible annoyance; a discarded incident is silent data loss.
The providerName values you will see
The three forwarding scenarios
- Defender to Sentinel
- Sentinel to Defender
- No forwarding
The Defender XDR data connector in Microsoft Sentinel has Connect incidents & alerts enabled, so Defender incidents are pushed into Sentinel.Those forwarded copies carry
providerName of Microsoft 365 Defender.- Kept: the Defender XDR incident, attributed to Defender.
- Discarded: the Sentinel copy.
- Unaffected: incidents created natively in Sentinel, which carry
Azure Sentineland are never mirrors.
Detection module state
Deduplication is only safe when ContraForce actually reads both systems. Before discarding a mirror, ContraForce checks that the counterpart detection module is connected and enabled on the workspace.Downstream effects
The decision is made once, at ingestion, before any other processing occurs. A discarded mirror never becomes an incident in ContraForce, so it creates no state anywhere downstream.If your incident counts fell when this behaviour was introduced, that is the duplication being removed. The count now reflects distinct real-world incidents. Historical aggregates computed before the change still include the duplicates and are not retroactively corrected.
Direct links still work
Deduplication is applied when listing incidents, not when fetching one. A direct link to a mirrored incident still opens and displays it. This is intentional: a link shared in a ticket, an email, or a chat message continues to resolve rather than returning “not found”.What this replaced
Earlier versions of ContraForce offered a per-workspace toggle to suppress an entire source. That approach was withdrawn because it cannot be made correct:- A workspace commonly forwards in both directions, so there is no single source that is safely redundant.
- Suppressing Microsoft Sentinel discards incidents that never reach Defender at all, including any created manually, through the API, by a playbook, or in a secondary workspace.
Troubleshooting
I see the same incident twice
I see the same incident twice
Confirm both detection modules are connected and enabled on the workspace. With only one connected, ContraForce keeps every incident by design.If both are connected, check the
providerName on the Sentinel incident. A value other than the three listed above is not recognised as a mirror and the incident is kept deliberately, so that an unfamiliar label never causes data loss.An incident is attributed to the source I did not expect
An incident is attributed to the source I did not expect
Attribution follows origin, not arrival. An incident created by a Sentinel analytic rule is attributed to Sentinel even when it also appears in the Defender portal, and an incident created by Defender is attributed to Defender even when it also appears in your Sentinel workspace.
An incident is missing from the queue
An incident is missing from the queue
Deduplication never removes the last copy, so a missing incident is unlikely to be caused by it. Check the time filter first: the incident list filters on incident creation time, while the Microsoft Defender portal displays last activity time. An older incident with recent activity appears recent in Defender and falls outside a short creation-time window in ContraForce.