Skip to content

ASIM: Add Proofpoint POD Message EmailEvent parsers - #15409

Open
adbhogeGit wants to merge 19 commits into
masterfrom
adbhoge-microsoft-proofpoint-message-parser
Open

adbhogeGit wants to merge 19 commits into
masterfrom
adbhoge-microsoft-proofpoint-message-parser

Conversation

@adbhogeGit

@adbhogeGit adbhogeGit commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Required items, please complete

Change(s):

  • Add parameterless and parameterized EmailEvent parsers for the CCP connector's ProofpointPODMessage_CL table, with unifier registrations, changelogs and synthetic fixtures.
  • Register the exact connector table schema in the repository KQL validation catalog, resolving the earlier missing-table KS204 failure.
  • Map the supplied case-insensitive DMARC and disposition values while preserving original source values.
  • Validate connection.host before mapping ASIM source identity fields: valid FQDNs map to SrcFQDN/SrcDomain, valid single-label hostnames map to SrcHostname, and IP-shaped or malformed values are not mislabeled. This rule is documented in parser metadata.
  • Remove the standalone PowerShell test file and restore the schema README to the base, as requested in review.
  • Leave ARM generation/commits to the repository GitHub action; no ARM files were manually edited. Latest head 356fd3691b contains only action-generated ARM README updates after parser commit 840108b770.

Reason for Change(s):

  • Implements Azure DevOps task 5510371.
  • Resolves KQL CI KS204, incorporates supplied source value enumerations, and fixes EmailEvent DataTester errors for SrcHostname, SrcDomain, and SrcFQDN without fabricating host identity.

Version Updated:

  • Both Message source parsers: 0.1.2, with paired changelogs and updated LastUpdated metadata.
  • N/A for Detection/Analytic Rule templates, which are unchanged.

Testing Completed:

  • PASS: 84 existing repository Proofpoint KQL validation tests:
    dotnet test .script\tests\KqlvalidationsTests\Kqlvalidations.Tests.csproj --filter "DisplayName~Proofpoint" --no-build --logger "console;verbosity=minimal"
  • PASS: Kusto.Language syntax/semantic/type analysis for both parser queries (50 output columns each) and local host cases including valid FQDN, localhost, bracketed/unbracketed IP literals, malformed values and invalid hostname labels.
  • PASS: git diff --check; source changes are parser metadata/query and changelogs. No manual ARM edits.
  • Hosted ASIM run 40068154606 for parser commit 840108b770 confirms no errors for SrcHostname, SrcDomain, or SrcFQDN. It reports only EmailToRecipients array element-type validation, plus the unsupported-schema filtering check. Template validation and sample-data ingestion passed. The repository action then generated ARM README output in head 356fd3691b.

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

  • DMARC: pass -> Pass; quarantine/reject -> Fail with EmailDmarcPolicy=Quarantine/Reject; none -> None. Matching is case-insensitive. temperror/permerror remain in EmailDmarcOriginalResult and produce no normalized result because EmailEvent 1.0.0 has no matching normalized error enum.
  • Dispositions: reject/discard -> Blocked; hold -> Quarantined; redirect -> Redirected; continue/accept/retry -> NA. Unknown values remain NA. Inspection events retain EventResult=NA; filter acceptance is not proof of inbox delivery.
  • The remaining DataTester error says populated EmailToRecipients arrays of sanitized email strings fail because the ASIM tester catalog leaves ArrayValuesType blank. The filter test reports EmailEvent is unsupported. Shared validator support is tracked separately in PR #15412; this PR does not modify validator code or the tester catalog.
  • Live user-workspace validation remains deferred: the supplied workspace did not contain ProofpointPODMessage_CL. No user-workspace queries, deployment or ingestion were performed; synthetic fixtures are not observed telemetry.
  • PR is open and ready for review, not merged.

Aditi Bhoge and others added 5 commits October 21, 2026 23:31
Add parameterless and filtering parsers, unifier registrations, fixtures, focused offline validation, and generated ARM assets. Live validation is deferred by user direction.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Remove generated ARM changes and retain source-only offline checks and documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
@contentautomationbot

Copy link
Copy Markdown

ASIM parsers have been changed. ARM templates were regenerated from the updated KQL function YAML files.
To find the new ARM templates, pull your branch.

@adbhogeGit
adbhogeGit marked this pull request as ready for review October 23, 2026 18:01
@adbhogeGit
adbhogeGit requested review from a team as code owners October 23, 2026 18:01
@adbhogeGit
adbhogeGit requested a balanced review from Copilot October 23, 2026 18:03

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.

🔵 Needs a closer look

The reported KQL catalog failures, deferred live validation, and unverified source mappings require maintainer review before merging.

No open issues 🎉

What changed in this PR

Adds Proofpoint POD message support to ASIM EmailEvent 1.0.0, making ProofpointPODMessage_CL available through the standard EmailEvent unifiers.

Changes:

  • Adds parameterless and filtering parsers that preserve one event per source message, with optional source details.
  • Registers both parsers in the unifiers and includes generated ARM deployment artifacts.
  • Adds synthetic fixtures, offline validation checks, changelogs, and documentation of mapping limitations and deferred live validation.
File Description
Sample Data/​ASIM/​ProofpointPODMessage_CL_Schema.csv Defines the source fixture schema.
Sample Data/​ASIM/​Proofpoint_POD_EmailEvent_IngestedLogs.csv Adds four synthetic message scenarios.
Parsers/​ASimEmailEvent/​Tests/​ProofpointPODMessage.Tests.ps1 Checks contracts, KQL types, filter bindings, and registrations offline.
Parsers/​ASimEmailEvent/​README.md Documents mappings, filters, limitations, and validation status.
Parsers/​ASimEmailEvent/​Parsers/​vimEmailEventProofpointPODMessage.yaml Adds the filtering Proofpoint parser.
Parsers/​ASimEmailEvent/​Parsers/​imEmailEvent.yaml Registers the filtering parser and forwards parameters.
Parsers/​ASimEmailEvent/​Parsers/​ASimEmailEventProofpointPODMessage.yaml Adds source-to-EmailEvent normalization.
Parsers/​ASimEmailEvent/​Parsers/​ASimEmailEvent.yaml Registers the parameterless parser.
Parsers/​ASimEmailEvent/​CHANGELOG/​vimEmailEventProofpointPODMessage.md Records the filtering parser’s initial release.
Parsers/​ASimEmailEvent/​CHANGELOG/​imEmailEvent.md Records the filtering unifier update.
Parsers/​ASimEmailEvent/​CHANGELOG/​ASimEmailEventProofpointPODMessage.md Records the parameterless parser’s initial release.
Parsers/​ASimEmailEvent/​CHANGELOG/​ASimEmailEvent.md Records the parameterless unifier update.
Parsers/​ASimEmailEvent/​ARM/​vimEmailEventProofpointPODMessage/​vimEmailEventProofpointPODMessage.json Adds the filtering parser deployment template.
Parsers/​ASimEmailEvent/​ARM/​vimEmailEventProofpointPODMessage/​README.md Provides filtering parser deployment links.
Parsers/​ASimEmailEvent/​ARM/​imEmailEvent/​imEmailEvent.json Updates the deployed filtering unifier.
Parsers/​ASimEmailEvent/​ARM/​FullDeploymentEmailEvent.json Includes both source parsers in full deployment.
Parsers/​ASimEmailEvent/​ARM/​ASimEmailEventProofpointPODMessage/​README.md Provides parameterless parser deployment links.
Parsers/​ASimEmailEvent/​ARM/​ASimEmailEventProofpointPODMessage/​ASimEmailEventProofpointPODMessage.json Adds the parameterless parser deployment template.
Parsers/​ASimEmailEvent/​ARM/​ASimEmailEvent/​ASimEmailEvent.json Updates the deployed parameterless unifier.

Review effort: Balanced

Aditi Bhoge and others added 4 commits October 23, 2026 11:30
Register the exact CCP custom-table schema and normalize JSON-encoded dynamic columns so CI fixture ingestion produces typed EmailEvent arrays.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Document that checked-in parser ARM templates are generated and committed by the repository GitHub action, rather than manually edited.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Keep the parser mappings native to their dynamic connector columns; the hosted recipient-array error comes from missing ArrayValuesType metadata, and the filter validator lacks EmailEvent support.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86

@yummyblabla Derrick Lee (yummyblabla) left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't

@@ -0,0 +1,216 @@
$ErrorActionPreference = 'Stop'

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

We don't need this file

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done

Comment thread Parsers/ASimEmailEvent/README.md Outdated
- [Normalization and the Advanced Security Information Model (ASIM)](https://aka.ms/AboutASIM)
- [Deploy all of ASIM](https://aka.ms/DeployASIM)
- [ASIM Email Event normalization schema reference](https://aka.ms/ASimEmailEventDoc) No newline at end of file
- [ASIM Email Event normalization schema reference](https://aka.ms/ASimEmailEventDoc)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Changes not needed in this README

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done

Aditi Bhoge and others added 3 commits October 23, 2026 21:53
Normalize observed DMARC policies and message actions in both parser variants. Remove the standalone PowerShell harness and restore the schema README as requested in review. Leave ARM generation to the repository action.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
@adbhogeGit

Copy link
Copy Markdown
Contributor Author

Schema tester Output:
(1) Warning: Missing recommended field [DstIpAddr]
(1) Warning: Missing recommended field [DvcIpAddr]
(1) Warning: Missing recommended field [EmailFileCount]
(1) Warning: Missing recommended field [EmailReplyToAddress]
(1) Warning: Missing recommended field [EmailUrlCount]
(1) Warning: Missing recommended field [EventResultDetails]
(1) Warning: Missing recommended field [EventSeverity]
(1) Warning: Missing recommended field [EventUid]
(1) Warning: Missing recommended field [SrcUserUpn]
(2) Info: Missing optional alias [Rule] aliasing non-existent column [RuleName]
(2) Info: Missing optional alias [User] aliasing non-existent column [SrcUserName]
(2) Info: Missing optional field [AttackRemediationSteps]
(2) Info: Missing optional field [AttackTactics]
(2) Info: Missing optional field [AttackTechniques]
(2) Info: Missing optional field [DvcDescription]
(2) Info: Missing optional field [DvcId]
(2) Info: Missing optional field [DvcInterface]
(2) Info: Missing optional field [DvcMacAddr]
(2) Info: Missing optional field [DvcOsVersion]
(2) Info: Missing optional field [DvcOs]
(2) Info: Missing optional field [DvcScopeId]
(2) Info: Missing optional field [DvcScope]
(2) Info: Missing optional field [DvcZone]
(2) Info: Missing optional field [EmailBCCRecipients]
(2) Info: Missing optional field [EmailCCRecipients]
(2) Info: Missing optional field [EmailDeliveryLocation]
(2) Info: Missing optional field [EmailDkimSignature]
(2) Info: Missing optional field [EmailDmarcOverride]
(2) Info: Missing optional field [EmailDmarcPolicy]
(2) Info: Missing optional field [EmailFiles]
(2) Info: Missing optional field [EmailOriginalDeliveryLocation]
(2) Info: Missing optional field [EmailReplyToDomain]
(2) Info: Missing optional field [EmailUrls]
(2) Info: Missing optional field [EventMessage]
(2) Info: Missing optional field [EventOriginalResultDetails]
(2) Info: Missing optional field [EventOriginalSeverity]
(2) Info: Missing optional field [EventOriginalType]
(2) Info: Missing optional field [EventOwner]
(2) Info: Missing optional field [EventReportUrl]
(2) Info: Missing optional field [EventSubType]
(2) Info: Missing optional field [IndicatorAssociation]
(2) Info: Missing optional field [IndicatorType]
(2) Info: Missing optional field [RuleDescription]
(2) Info: Missing optional field [RuleName]
(2) Info: Missing optional field [RuleNumber]
(2) Info: Missing optional field [SrcDescription]
(2) Info: Missing optional field [SrcDeviceType]
(2) Info: Missing optional field [SrcDvcId]
(2) Info: Missing optional field [SrcDvcScopeId]
(2) Info: Missing optional field [SrcDvcScope]
(2) Info: Missing optional field [SrcGeoCity]
(2) Info: Missing optional field [SrcGeoLatitude]
(2) Info: Missing optional field [SrcGeoLongitude]
(2) Info: Missing optional field [SrcGeoRegion]
(2) Info: Missing optional field [SrcIsp]
(2) Info: Missing optional field [SrcUserIdType]
(2) Info: Missing optional field [SrcUserId]
(2) Info: Missing optional field [SrcUserName]
(2) Info: Missing optional field [SrcUserScopeId]
(2) Info: Missing optional field [SrcUserScope]
(2) Info: Missing optional field [SrcUsernameType]
(2) Info: Missing optional field [ThreatCategory]
(2) Info: Missing optional field [ThreatConfidence]
(2) Info: Missing optional field [ThreatFirstReportedTime]
(2) Info: Missing optional field [ThreatId]
(2) Info: Missing optional field [ThreatIpAddr]
(2) Info: Missing optional field [ThreatIsActive]
(2) Info: Missing optional field [ThreatLastReportedTime]
(2) Info: Missing optional field [ThreatName]
(2) Info: Missing optional field [ThreatOriginalCategory]
(2) Info: Missing optional field [ThreatOriginalConfidence]
(2) Info: Missing optional field [ThreatOriginalRiskLevel]
(2) Info: Missing optional field [ThreatRiskLevel]
(2) Info: extra unnormalized column [DvcEntityKey]
(2) Info: extra unnormalized column [EventProduct]
(2) Info: extra unnormalized column [EventVendor]
(2) Info: extra unnormalized column [TimeGenerated]
(2) Info: extra unnormalized column [Type]

Only map valid FQDNs into SrcFQDN and SrcDomain, and retain valid single-label hostnames in SrcHostname. Leave malformed and IP-shaped connection.host values out of hostname fields.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
@adbhogeGit

Copy link
Copy Markdown
Contributor Author

ASim DataTester output:
(2) Info: Empty value in 1172 records (11.72%) in optional field [SrcFQDN] (Schema:EmailEvent)
(2) Info: Empty value in 1172 records (11.72%) in recommended field [SrcDomain] (Schema:EmailEvent)
(2) Info: Empty value in 1380 records (13.8%) in optional field [EmailMailFromAddress] (Schema:EmailEvent)
(2) Info: Empty value in 1380 records (13.8%) in optional field [EmailMailFromDomain] (Schema:EmailEvent)
(2) Info: Empty value in 1409 records (14.09%) in recommended field [EmailFromAddress] (Schema:EmailEvent)
(2) Info: Empty value in 1445 records (14.45%) in optional field [EmailLanguage] (Schema:EmailEvent)
(2) Info: Empty value in 1834 records (18.34%) in optional field [EmailFromDomain] (Schema:EmailEvent)
(2) Info: Empty value in 3194 records (31.94%) in optional field [EmailSpfOriginalResult] (Schema:EmailEvent)
(2) Info: Empty value in 3194 records (31.94%) in optional field [EmailSpfResult] (Schema:EmailEvent)
(2) Info: Empty value in 3474 records (34.74%) in optional field [EmailDmarcOriginalResult] (Schema:EmailEvent)
(2) Info: Empty value in 5054 records (50.54%) in optional field [EmailDmarcResult] (Schema:EmailEvent)
(2) Info: Empty value in 5570 records (55.7%) in optional field [EmailDkimDomain] (Schema:EmailEvent)
(2) Info: Empty value in 5570 records (55.7%) in optional field [EmailDkimOriginalResult] (Schema:EmailEvent)
(2) Info: Empty value in 5570 records (55.7%) in optional field [EmailDkimResult] (Schema:EmailEvent)
(2) Info: Empty value in 638 records (6.38%) in recommended field [SrcHostname] (Schema:EmailEvent)
(2) Info: Empty value in 887 records (8.87%) in recommended field [EmailSubject] (Schema:EmailEvent)

Aditi Bhoge and others added 3 commits October 23, 2026 22:37
Use the current local calendar date in parser changelogs and metadata.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Describe how connection.host maps to ASIM host fields in both Message parser metadata.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 723d3767-4cf2-432d-8609-3cff81330f86
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants