Skip to content

New solution: ContraForce (ContraForce Events data connector + analytic rules) - #14890

Open
DanielMLCF wants to merge 3 commits into
Azure:masterfrom
ContraForce:contraforce-events-solution
Open

New solution: ContraForce (ContraForce Events data connector + analytic rules)#14890
DanielMLCF wants to merge 3 commits into
Azure:masterfrom
ContraForce:contraforce-events-solution

Conversation

@DanielMLCF

Copy link
Copy Markdown

Required items, please complete

Change(s):

  • New solution Solutions/ContraForce (v3.0.0): the ContraForce Events CCF data connector (Customizable definition, RestApiPoller polling config, DCR, custom table ContraForceEvents_CL) and three scheduled analytic rules: ContraForce - Privileged access change, ContraForce - Machine credential activity, ContraForce - Destructive workspace action.
  • Logos/contraforce.svg.
  • Package generated with the Create-Azure-Sentinel-Solution V3 tool (mainTemplate.json, createUiDefinition.json, 3.0.0.zip).

Reason for Change(s):

  • New solution submission by ContraForce (Commercial Marketplace publisher contraforce1580881495588): ingest ContraForce security service delivery events (incident detections, administrative access changes, machine credential activity, destructive workspace actions) into customers' Microsoft Sentinel with out-of-the-box detections.

Version Updated:

  • Yes: initial release; solution 3.0.0, all three analytic rules at 1.0.0.

Testing Completed:

  • Yes. The generated Package/mainTemplate.json was deployed to a Microsoft Sentinel environment with no custom parsers, functions, or tables; the connector was connected through the connector page UI (the Connect flow created the DCE, DCR, table, and poller connection); live data was ingested by the CCF poller; and each analytic rule was instantiated from its template and produced incidents from real triggering events end to end. No custom parsers or functions are required by this solution.

Checked that the validations are passing and have addressed any issues that are present:

  • Yes: ARM-TTK was run locally against the generated package (the only remaining result, IDs Should Be Derived From ResourceIDs, matches published solutions' packages, e.g. 1Password). The analytic rules query only the solution's own table with built-in KQL operators.

@DanielMLCF
DanielMLCF requested review from a team as code owners August 12, 2026 20:12
@DanielMLCF

Copy link
Copy Markdown
Author

@microsoft-github-policy-service agree company="ContraForce"

1 similar comment
@arledesma

Copy link
Copy Markdown

@microsoft-github-policy-service agree company="ContraForce"

@v-atulyadav
v-atulyadav requested a lite review from Copilot August 13, 2026 06:41
@v-atulyadav v-atulyadav added Codeless Connector Framework (CCF) Connector New Solution For new Solutions which are new to Microsoft Sentinel labels Aug 13, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds the new ContraForce Microsoft Sentinel solution package, including a CCF (RestApiPoller) data connector to ingest ContraForce events and three scheduled analytic rule templates for out-of-the-box detections.

Changes:

  • Added solution metadata + release notes for ContraForce solution v3.0.0.
  • Added generated solution package artifacts (ARM mainTemplate.json, createUiDefinition.json, testParameters.json).
  • Added connector assets (DCR, custom table, polling config, connector definition) and 3 analytic rule YAML templates.

Reviewed changes

Copilot reviewed 13 out of 15 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
Solutions/ContraForce/SolutionMetadata.json Adds Marketplace/solution metadata (publisher/offer, categories, support).
Solutions/ContraForce/ReleaseNotes.md Adds initial release notes entry for v3.0.0.
Solutions/ContraForce/Package/testParameters.json Adds deployment test parameters used by the generated package.
Solutions/ContraForce/Package/mainTemplate.json Adds the generated ARM solution package containing the connector + analytic rule templates.
Solutions/ContraForce/Package/createUiDefinition.json Adds the installation UI definition for selecting workspace and describing solution content.
Solutions/ContraForce/Data/Solution_ContraForce.json Adds solution manifest listing included connector + analytic rules.
Solutions/ContraForce/Data Connectors/ContraForceEvents_ccp/ContraForceEvents_tables.json Defines the custom table schema for ContraForce events.
Solutions/ContraForce/Data Connectors/ContraForceEvents_ccp/ContraForceEvents_PollingConfig.json Defines the RestApiPoller configuration for ingesting events.
Solutions/ContraForce/Data Connectors/ContraForceEvents_ccp/ContraForceEvents_DataConnectorDefinition.json Defines the connector UI + permissions + instructions.
Solutions/ContraForce/Data Connectors/ContraForceEvents_ccp/ContraForceEvents_DCR.json Defines the DCR stream + transform mapping into the custom table.
Solutions/ContraForce/Analytic Rules/ContraForcePrivilegedAccessChange.yaml Adds scheduled analytic rule template for privileged access changes.
Solutions/ContraForce/Analytic Rules/ContraForceMachineCredentialActivity.yaml Adds scheduled analytic rule template for machine credential lifecycle activity.
Solutions/ContraForce/Analytic Rules/ContraForceDestructiveWorkspaceAction.yaml Adds scheduled analytic rule template for destructive workspace actions.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +1 to +3
| **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** |
|-------------|--------------------------------|-----------------------------------------------------------------|
| 3.0.0 | 07-08-2026 | Initial solution release: ContraForce Events CCF data connector and three **Analytic rules** (privileged access change, machine credential activity, destructive workspace action). |

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the ReleaseNotes table: the rows begin with a single |; we've verified the table renders correctly on GitHub.

"Analytic Rules/ContraForceMachineCredentialActivity.yaml",
"Analytic Rules/ContraForceDestructiveWorkspaceAction.yaml"
],
"BasePath": "C:\\repos\\Azure-Sentinel\\Solutions\\ContraForce",
Comment on lines +613 to +616
"guidValue": {
"defaultValue": "[[newGuid()]",
"type": "securestring"
},
}
},
{
"name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'ContraForceEvents', parameters('guidValue'))]",
Comment on lines +698 to +707
"dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
"dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]"
},
"auth": {
"type": "Basic",
"userName": "[[parameters('clientId')]",
"password": "[[parameters('clientSecret')]"
},
"request": {
"apiEndpoint": "[[concat(parameters('apiBaseUrl'),'/api/v2/workspaces/',parameters('cfWorkspaceId'),'/export/audit')]",
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "[variables('dataConnectorCCPVersion')]",
"parameters": {
"name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'ContraForceEvents', parameters('guidValue'))]",
"apiVersion": "2023-02-01-preview",
"type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors",
"location": "[parameters('workspace-location')]",
"apiVersion": "2022-06-01",
"type": "Microsoft.Insights/dataCollectionRules",
"location": "[parameters('workspace-location')]",
"kind": "[variables('blanks')]",
Comment on lines +53 to +57
"requiredPermissions": {
"read": true,
"write": true,
"delete": true
}
- T1098
query: |
ContraForceEvents_CL
| where ingestion_time() > ago(5m)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the ingestion_time() filter in the analytic rules: this follows the documented guidance for handling ingestion delay in scheduled analytics rules (https://learn.microsoft.com/azure/sentinel/ingestion-delay). The connector delivers events several minutes after their TimeGenerated, so filtering on ingestion time with a wider queryPeriod lookback is what guarantees late-arriving events are not missed; during pre-submission validation we confirmed that a plain TimeGenerated window missed events for exactly this reason, while the current pattern alerted exactly once per event (incident-level dedup via EventId custom-detail grouping).

…ble schema and ContraForceEvents connector id
@DanielMLCF
DanielMLCF requested a review from a team as a code owner August 13, 2026 14:59
… and conventional BasePath; package regenerated with the V3 tool
@DanielMLCF

DanielMLCF commented Aug 13, 2026

Copy link
Copy Markdown
Author

Thanks for the review. We've addressed the feedback as follows:

Accepted and fixed in the latest commit:

  • Data/Solution_ContraForce.json: BasePath updated to the conventional path.
  • Connector definition workspace permissions: delete set to false (least privilege); package regenerated with the Create-Azure-Sentinel-Solution V3 tool.

On the Package/mainTemplate.json comments (expression escaping, workspace-location in the embedded template, kind: variables('blanks')): these are properties of the output generated by the repository's V3 packaging tool. The flagged patterns are identical to currently published solutions built with the same tool (for example, the 1Password solution's Package/mainTemplate.json contains the same [[newGuid()] expressions and "kind": "[variables('blanks')]"). We also validated the generated template end to end before submission: deploying mainTemplate.json to a Microsoft Sentinel workspace and completing the connector's Connect flow successfully created the DCE, DCR, table, and poller connection, and the packaged analytic rule templates produced incidents from live data.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Codeless Connector Framework (CCF) Connector New Solution For new Solutions which are new to Microsoft Sentinel

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants