Proofpoint Forensics & Threat Response
Overview
Proofpoint Forensics provides deep investigation capabilities for email-borne threats. When a threat is detected after delivery, Proofpoint Threat Response Auto-Pull (TRAP) can automatically or manually remediate messages that have already reached user mailboxes. This skill covers evidence collection, message investigation, search and destroy operations, and incident response workflows.
TRAP integrates with Microsoft 365 and Google Workspace to move or delete messages from user mailboxes after delivery, closing the gap between detection and remediation.
Anti-triggers
- Stopping a message before it is delivered — everything here acts
after delivery. Releasing or deleting mail still held pre-delivery is
proofpoint-quarantine.
- The threat event that prompted the investigation — GUIDs,
dispositions, scores, and click records come from
proofpoint-tap;
this skill starts once you already have a GUID or threat ID.
- Campaign attribution, actor names, and IOC context — use
proofpoint-threat-intel.
- "Search and destroy" on endpoints rather than mailboxes — TRAP
reaches Microsoft 365 and Google Workspace mailboxes only. Killing
processes or removing persistence on a host is
huntress-incidents.
Key Concepts
Remediation is a two-step sequence, not one call
The single most important thing to know about this domain: finding
messages and removing them are separate tools.
proofpoint_forensics_search_messages — read-only. Takes criteria
(sender, subject, message_id, threat_id, startDate,
endDate) and returns matching delivered messages. Changes nothing.
proofpoint_forensics_pull_messages — destructive. Takes
message_ids (an explicit array) plus a reason string for the audit
trail, and removes those messages from mailboxes.
The scope of the destructive step is therefore fixed and inspectable
before you call it. Always look at the ID list the search returned, and
its length, before passing it on. Piping step 1 straight into step 2
without reading the result is how an over-broad criterion ("subject
contains Invoice") turns into hundreds of deleted legitimate messages.
Remediation actions are a tenant setting, not a parameter
Proofpoint TRAP can move a pulled message to junk, soft-delete it,
hard-delete it, or quarantine it. None of these is selectable through
this plugin — proofpoint_forensics_pull_messages exposes no action
argument, so what "pull" does is whatever the tenant's TRAP policy says.
Do not promise a user that a removal is recoverable; check the tenant's
configuration in the Proofpoint console, because no tool here reports it.
Evidence types
proofpoint_forensics_get_threat returns forensic evidence for one
threat, and proofpoint_forensics_get_campaign returns it aggregated
across a campaign. Depending on what the tenant's analysis produced, the
response may contain any of:
| Type |
Contents |
screenshot |
PNG of the rendered threat page or attachment |
pcap |
Full packet capture from sandbox detonation |
sample |
The original malicious file |
headers |
Full RFC 822 headers |
urls |
All URLs found in the message |
attachments |
File names, hashes, sizes |
sandbox_report |
Behavioural analysis results |
These are response contents, not arguments — there is no per-type fetch.
sample and pcap are live malware; pulling one into the session is
read-tier by blast radius and handled-as-malware by common sense.
Field Reference
Forensic Report Fields
| Field |
Type |
Description |
id |
string |
Unique forensic report identifier |
GUID |
string |
Message GUID (links to TAP events) |
scope |
string |
online (cloud analysis) or sandbox (detonation) |
type |
string |
Type of forensic evidence |
name |
string |
Display name for the evidence |
threatTime |
datetime |
When the threat was classified |
engineResults |
object[] |
Results from analysis engines |
platforms |
object[] |
Platforms where evidence was collected |
Engine Result Fields
| Field |
Type |
Description |
engine |
string |
Analysis engine name |
verdict |
string |
malicious, suspicious, benign |
score |
int |
Confidence score (0-100) |
details |
string |
Detailed analysis findings |
iocs |
object[] |
IOCs extracted by this engine |
Message Trace Fields
| Field |
Type |
Description |
GUID |
string |
Message GUID |
messageId |
string |
RFC 822 Message-ID header |
sender |
string |
Envelope sender |
recipients |
string[] |
All recipients |
subject |
string |
Message subject |
receivedTime |
datetime |
When Proofpoint received the message |
deliveryTime |
datetime |
When delivered to mailbox |
disposition |
string |
Final message disposition |
policyActions |
string[] |
Policy actions applied |
routingPath |
string[] |
Mail routing hops |
MCP Tools
| Tool |
Description |
Key Parameters |
proofpoint_forensics_get_threat |
Forensic evidence for one threat — behavioural analysis, network activity, file modifications, sandbox results |
threat_id (required), includeCampaignForensics |
proofpoint_forensics_get_campaign |
The same evidence aggregated across every threat in a campaign |
campaign_id (required) |
proofpoint_forensics_search_messages |
Find delivered messages to remediate. Read-only |
sender, subject, message_id, threat_id, startDate, endDate |
proofpoint_forensics_pull_messages |
⚠ Destructive. Auto-pull / search-and-destroy: removes delivered messages from mailboxes |
message_ids (required, array), reason |
proofpoint_smart_search_trace |
Trace messages through mail flow — delivery status and processing history |
sender, recipient, subject, message_id, startDate, endDate, status |
Not available through this plugin
Do not substitute a near-miss for any of these; the correct answer is that
Proofpoint is not reachable this way here.
- Polling a remediation's progress.
proofpoint_forensics_pull_messages
returns no operation ID and there is no status, list, or history tool.
The call's own response is the only confirmation you get.
- Reading TRAP auto-pull configuration. No tool exposes whether
auto-pull is on, or in which mode. Check the Proofpoint console.
- Choosing the removal action. See above — no action parameter exists.
- A standalone sandbox-report call. Sandbox behavioural analysis comes
back inside
proofpoint_forensics_get_threat; there is no separate
fetch.
Common Workflows
Investigate a Delivered Threat
- From a TAP delivered-message event, get the
threat_id
- Call
proofpoint_forensics_get_threat for the full forensic analysis,
including sandbox results and extracted IOCs
- Set
includeCampaignForensics (or call
proofpoint_forensics_get_campaign) if the threat belongs to a
campaign and you need the wider picture
- Determine impact with
proofpoint_forensics_search_messages — how many
mailboxes actually hold the message
- If remediation is needed, proceed to the sequence below
Search and Destroy
- Identify the message to remediate — sender, subject,
message_id, or
the threat_id from the investigation above
- Call
proofpoint_forensics_search_messages with those criteria
- Read the result. Check the returned message IDs and their count
against what you expected. If the count is surprising, the criteria
were wrong — narrow them and search again. This is the only point at
which the mistake is still free
- Get human approval on the resolved ID list, not on the criteria
- Call
proofpoint_forensics_pull_messages with those message_ids and
a reason for the audit trail
- Confirm the outcome by re-running the search — the pull reports no
per-mailbox result, and mailboxes on legal hold will silently not be
remediated
- Record the criteria, the ID list, and the reason in the incident notes
Post-Incident Evidence Collection
- Call
proofpoint_forensics_get_threat for the threat
- Review the returned evidence — screenshots, pcaps, samples, sandbox
behavioural analysis all arrive in that one response
- Call
proofpoint_forensics_get_campaign for campaign-wide context
- Extract IOCs from the forensic response
- Cross-reference with
proofpoint_threat_get_iocs
- Package evidence for the incident report
Message Trace Investigation
- User reports a suspicious message they received
- Call
proofpoint_smart_search_trace with sender and recipient
- Review the routing path and policy actions applied
- Check if TAP flagged the message and what disposition was applied
- If the message was delivered and is malicious, run the search-and-destroy
sequence above
- If the message was blocked, confirm with the user
Error Handling
Common API Errors
| Code |
Message |
Resolution |
| 400 |
Invalid search criteria |
proofpoint_forensics_search_messages needs at least one criterion |
| 400 |
message_ids required |
proofpoint_forensics_pull_messages will not run without an explicit ID array — there is no "pull everything matching" form |
| 401 |
Authentication failed |
Verify service principal and secret |
| 403 |
TRAP access not enabled |
Ensure your license includes Threat Response |
| 404 |
Forensic data not found |
proofpoint_forensics_get_threat has no data for every threat ID; absence is not a clean bill of health |
| 429 |
Rate limit exceeded |
Forensics allows 500 requests/hour — back off rather than retrying tightly |
Search-and-Destroy Failures
| Failure Reason |
Resolution |
| Mailbox not accessible |
Check Microsoft 365/Google Workspace integration credentials |
| Message already deleted |
User may have deleted the message manually |
| Permission denied |
Service account needs impersonation rights |
| Mailbox on hold |
Legal hold prevents deletion; use move-to-junk instead |
| Timeout |
Large-scope operations may timeout; use narrower criteria |
Best Practices
- Read the ID list before you pull it - The search result is the last
point at which an over-broad criterion costs nothing. Check the count
- Narrow your scope - Use specific criteria (
message_id + sender)
rather than a bare subject match
- Never assume the removal is recoverable - No action parameter is
exposed; the tenant's TRAP policy decides. Do not tell a user their
mail can be restored unless you have checked the console
- Verify, do not trust the return - Re-run
proofpoint_forensics_search_messages after pulling. There is no
operation-status tool and per-mailbox failures (legal hold, missing
integration) do not surface in the pull response
- Document everything - Record the criteria, the resolved ID list,
and the
reason string you passed; that reason is the audit trail
- Collect evidence first - Call
proofpoint_forensics_get_threat
before remediating. Once the messages are pulled you cannot go back for
what you did not capture
- Coordinate with users - Notify affected users that messages were
removed and explain why
- Use message trace for debugging - When users report missing
legitimate email, trace the path with
proofpoint_smart_search_trace
Related Skills
1---2name: proofpoint-forensics3description: Proofpoint Forensics and Threat Response (TRAP) fundamentals: auto-pull and search-and-destroy remediation actions, evidence collection, message trace, and post-delivery incident response workflows for email-borne threats.4---56# Proofpoint Forensics & Threat Response78## Overview910Proofpoint Forensics provides deep investigation capabilities for email-borne threats. When a threat is detected after delivery, Proofpoint Threat Response Auto-Pull (TRAP) can automatically or manually remediate messages that have already reached user mailboxes. This skill covers evidence collection, message investigation, search and destroy operations, and incident response workflows.1112TRAP integrates with Microsoft 365 and Google Workspace to move or delete messages from user mailboxes after delivery, closing the gap between detection and remediation.1314## Anti-triggers1516- **Stopping a message before it is delivered** — everything here acts17 after delivery. Releasing or deleting mail still held pre-delivery is18 `proofpoint-quarantine`.19- **The threat event that prompted the investigation** — GUIDs,20 dispositions, scores, and click records come from `proofpoint-tap`;21 this skill starts once you already have a GUID or threat ID.22- **Campaign attribution, actor names, and IOC context** — use23 `proofpoint-threat-intel`.24- **"Search and destroy" on endpoints rather than mailboxes** — TRAP25 reaches Microsoft 365 and Google Workspace mailboxes only. Killing26 processes or removing persistence on a host is `huntress-incidents`.2728## Key Concepts2930### Remediation is a two-step sequence, not one call3132The single most important thing to know about this domain: **finding33messages and removing them are separate tools.**34351. `proofpoint_forensics_search_messages` — read-only. Takes criteria36 (`sender`, `subject`, `message_id`, `threat_id`, `startDate`,37 `endDate`) and returns matching delivered messages. Changes nothing.382. `proofpoint_forensics_pull_messages` — destructive. Takes39 `message_ids` (an explicit array) plus a `reason` string for the audit40 trail, and removes those messages from mailboxes.4142The scope of the destructive step is therefore fixed and inspectable43*before* you call it. Always look at the ID list the search returned, and44its length, before passing it on. Piping step 1 straight into step 245without reading the result is how an over-broad criterion ("subject46contains Invoice") turns into hundreds of deleted legitimate messages.4748### Remediation actions are a tenant setting, not a parameter4950Proofpoint TRAP can move a pulled message to junk, soft-delete it,51hard-delete it, or quarantine it. **None of these is selectable through52this plugin** — `proofpoint_forensics_pull_messages` exposes no action53argument, so what "pull" does is whatever the tenant's TRAP policy says.54Do not promise a user that a removal is recoverable; check the tenant's55configuration in the Proofpoint console, because no tool here reports it.5657### Evidence types5859`proofpoint_forensics_get_threat` returns forensic evidence for one60threat, and `proofpoint_forensics_get_campaign` returns it aggregated61across a campaign. Depending on what the tenant's analysis produced, the62response may contain any of:6364| Type | Contents |65|------|----------|66| `screenshot` | PNG of the rendered threat page or attachment |67| `pcap` | Full packet capture from sandbox detonation |68| `sample` | The original malicious file |69| `headers` | Full RFC 822 headers |70| `urls` | All URLs found in the message |71| `attachments` | File names, hashes, sizes |72| `sandbox_report` | Behavioural analysis results |7374These are response contents, not arguments — there is no per-type fetch.75`sample` and `pcap` are live malware; pulling one into the session is76read-tier by blast radius and handled-as-malware by common sense.7778## Field Reference7980### Forensic Report Fields8182| Field | Type | Description |83|-------|------|-------------|84| `id` | string | Unique forensic report identifier |85| `GUID` | string | Message GUID (links to TAP events) |86| `scope` | string | `online` (cloud analysis) or `sandbox` (detonation) |87| `type` | string | Type of forensic evidence |88| `name` | string | Display name for the evidence |89| `threatTime` | datetime | When the threat was classified |90| `engineResults` | object[] | Results from analysis engines |91| `platforms` | object[] | Platforms where evidence was collected |9293### Engine Result Fields9495| Field | Type | Description |96|-------|------|-------------|97| `engine` | string | Analysis engine name |98| `verdict` | string | `malicious`, `suspicious`, `benign` |99| `score` | int | Confidence score (0-100) |100| `details` | string | Detailed analysis findings |101| `iocs` | object[] | IOCs extracted by this engine |102103### Message Trace Fields104105| Field | Type | Description |106|-------|------|-------------|107| `GUID` | string | Message GUID |108| `messageId` | string | RFC 822 Message-ID header |109| `sender` | string | Envelope sender |110| `recipients` | string[] | All recipients |111| `subject` | string | Message subject |112| `receivedTime` | datetime | When Proofpoint received the message |113| `deliveryTime` | datetime | When delivered to mailbox |114| `disposition` | string | Final message disposition |115| `policyActions` | string[] | Policy actions applied |116| `routingPath` | string[] | Mail routing hops |117118## MCP Tools119120| Tool | Description | Key Parameters |121|------|-------------|----------------|122| `proofpoint_forensics_get_threat` | Forensic evidence for one threat — behavioural analysis, network activity, file modifications, sandbox results | `threat_id` (required), `includeCampaignForensics` |123| `proofpoint_forensics_get_campaign` | The same evidence aggregated across every threat in a campaign | `campaign_id` (required) |124| `proofpoint_forensics_search_messages` | Find delivered messages to remediate. Read-only | `sender`, `subject`, `message_id`, `threat_id`, `startDate`, `endDate` |125| `proofpoint_forensics_pull_messages` | ⚠ **Destructive.** Auto-pull / search-and-destroy: removes delivered messages from mailboxes | `message_ids` (required, array), `reason` |126| `proofpoint_smart_search_trace` | Trace messages through mail flow — delivery status and processing history | `sender`, `recipient`, `subject`, `message_id`, `startDate`, `endDate`, `status` |127128### Not available through this plugin129130Do not substitute a near-miss for any of these; the correct answer is that131Proofpoint is not reachable this way here.132133- **Polling a remediation's progress.** `proofpoint_forensics_pull_messages`134 returns no operation ID and there is no status, list, or history tool.135 The call's own response is the only confirmation you get.136- **Reading TRAP auto-pull configuration.** No tool exposes whether137 auto-pull is on, or in which mode. Check the Proofpoint console.138- **Choosing the removal action.** See above — no action parameter exists.139- **A standalone sandbox-report call.** Sandbox behavioural analysis comes140 back inside `proofpoint_forensics_get_threat`; there is no separate141 fetch.142143## Common Workflows144145### Investigate a Delivered Threat1461471. From a TAP delivered-message event, get the `threat_id`1482. Call `proofpoint_forensics_get_threat` for the full forensic analysis,149 including sandbox results and extracted IOCs1503. Set `includeCampaignForensics` (or call151 `proofpoint_forensics_get_campaign`) if the threat belongs to a152 campaign and you need the wider picture1534. Determine impact with `proofpoint_forensics_search_messages` — how many154 mailboxes actually hold the message1555. If remediation is needed, proceed to the sequence below156157### Search and Destroy1581591. Identify the message to remediate — sender, subject, `message_id`, or160 the `threat_id` from the investigation above1612. Call `proofpoint_forensics_search_messages` with those criteria1623. **Read the result.** Check the returned message IDs and their count163 against what you expected. If the count is surprising, the criteria164 were wrong — narrow them and search again. This is the only point at165 which the mistake is still free1664. Get human approval on the resolved ID list, not on the criteria1675. Call `proofpoint_forensics_pull_messages` with those `message_ids` and168 a `reason` for the audit trail1696. Confirm the outcome by re-running the search — the pull reports no170 per-mailbox result, and mailboxes on legal hold will silently not be171 remediated1727. Record the criteria, the ID list, and the reason in the incident notes173174### Post-Incident Evidence Collection1751761. Call `proofpoint_forensics_get_threat` for the threat1772. Review the returned evidence — screenshots, pcaps, samples, sandbox178 behavioural analysis all arrive in that one response1793. Call `proofpoint_forensics_get_campaign` for campaign-wide context1804. Extract IOCs from the forensic response1815. Cross-reference with `proofpoint_threat_get_iocs`1826. Package evidence for the incident report183184### Message Trace Investigation1851861. User reports a suspicious message they received1872. Call `proofpoint_smart_search_trace` with sender and recipient1883. Review the routing path and policy actions applied1894. Check if TAP flagged the message and what disposition was applied1905. If the message was delivered and is malicious, run the search-and-destroy191 sequence above1926. If the message was blocked, confirm with the user193194## Error Handling195196### Common API Errors197198| Code | Message | Resolution |199|------|---------|------------|200| 400 | Invalid search criteria | `proofpoint_forensics_search_messages` needs at least one criterion |201| 400 | `message_ids` required | `proofpoint_forensics_pull_messages` will not run without an explicit ID array — there is no "pull everything matching" form |202| 401 | Authentication failed | Verify service principal and secret |203| 403 | TRAP access not enabled | Ensure your license includes Threat Response |204| 404 | Forensic data not found | `proofpoint_forensics_get_threat` has no data for every threat ID; absence is not a clean bill of health |205| 429 | Rate limit exceeded | Forensics allows 500 requests/hour — back off rather than retrying tightly |206207### Search-and-Destroy Failures208209| Failure Reason | Resolution |210|----------------|------------|211| Mailbox not accessible | Check Microsoft 365/Google Workspace integration credentials |212| Message already deleted | User may have deleted the message manually |213| Permission denied | Service account needs impersonation rights |214| Mailbox on hold | Legal hold prevents deletion; use move-to-junk instead |215| Timeout | Large-scope operations may timeout; use narrower criteria |216217## Best Practices2182191. **Read the ID list before you pull it** - The search result is the last220 point at which an over-broad criterion costs nothing. Check the count2212. **Narrow your scope** - Use specific criteria (`message_id` + `sender`)222 rather than a bare subject match2233. **Never assume the removal is recoverable** - No action parameter is224 exposed; the tenant's TRAP policy decides. Do not tell a user their225 mail can be restored unless you have checked the console2264. **Verify, do not trust the return** - Re-run227 `proofpoint_forensics_search_messages` after pulling. There is no228 operation-status tool and per-mailbox failures (legal hold, missing229 integration) do not surface in the pull response2305. **Document everything** - Record the criteria, the resolved ID list,231 and the `reason` string you passed; that reason is the audit trail2326. **Collect evidence first** - Call `proofpoint_forensics_get_threat`233 before remediating. Once the messages are pulled you cannot go back for234 what you did not capture2357. **Coordinate with users** - Notify affected users that messages were236 removed and explain why2378. **Use message trace for debugging** - When users report missing238 legitimate email, trace the path with `proofpoint_smart_search_trace`239240## Related Skills241242- [Proofpoint TAP](../tap/SKILL.md) - Threat events that trigger forensic investigation243- [Proofpoint Quarantine](../quarantine/SKILL.md) - Pre-delivery message management244- [Proofpoint Threat Intelligence](../threat-intel/SKILL.md) - Campaign and IOC context245- [Proofpoint API Patterns](../api-patterns/SKILL.md) - Authentication and rate limits