Abnormal Security Threat Detection & Analysis
Overview
Abnormal Security uses behavioral AI to detect email threats that bypass traditional secure email gateways (SEGs). Unlike signature or rule-based detection, Abnormal profiles normal communication patterns and detects deviations indicative of attacks. This skill covers threat types, attack vectors, severity assessment, remediation, and investigation workflows.
Anti-triggers
- An email a user reported to the abuse mailbox — those arrive as
cases carrying their own AI judgment and action set; use
Abnormal Security Cases.
- A mailbox behaving strangely rather than an email arriving —
impossible travel, new inbox rules, and lateral sending are account
compromise, and this server exposes no account-takeover surface at all.
Investigate identity in the M365 tenant instead; use
cipp-users.
- Header, SPF/DKIM/DMARC, or attachment forensics on one message —
use
Abnormal Security Messages.
- Releasing something from a quarantine queue — Abnormal has no
gateway queue. It inspects mail post-delivery through the M365 API and
pulls it back out of inboxes. Anything sitting in a hold queue belongs
to the gateway holding it:
SpamTitan Quarantine,
Mimecast Message Tracking, or Proofpoint Quarantine.
- A threat the gateway already stopped — mail blocked before
delivery never reaches the mailbox, so Abnormal never sees it. Search
the gateway's own logs.
- The same mail flagged by Check Point Harmony Email — Avanan is
the other API-based, post-delivery platform on this stack and
produces its own threat records; use
avanan-threats.
Threat Types
| Type |
Description |
Severity Range |
| BEC (Business Email Compromise) |
Impersonation of executives or trusted contacts to request financial actions |
High - Critical |
| Credential Phishing |
Emails designed to harvest credentials via fake login pages |
Medium - Critical |
| Malware |
Emails containing malicious attachments or links to malware downloads |
High - Critical |
| Extortion |
Threatening emails demanding payment (sextortion, DDoS threats) |
Medium - High |
| Social Engineering |
Manipulation attacks using urgency, authority, or trust |
Medium - Critical |
| Spam |
Unsolicited bulk email |
Low |
| Graymail |
Marketing, newsletters, and promotional content |
Low |
| Scam |
Advance-fee fraud, fake invoices, lottery scams |
Medium - High |
| Supply Chain Compromise |
Attacks from compromised vendor or partner email accounts |
Critical |
Detection Approach
| Engine |
Description |
What It Detects |
| Behavioral AI |
Models normal communication patterns per user/org |
BEC, social engineering, impersonation |
| Content Analysis |
NLP analysis of email body and intent |
Urgency, financial requests, credential harvesting |
| Sender Profiling |
Reputation and authentication of sender |
Spoofing, domain impersonation, first-time senders |
| URL Analysis |
Real-time scanning of embedded links |
Credential phishing pages, malware delivery |
| Attachment Analysis |
File inspection and sandboxing |
Malware, ransomware payloads |
| VendorBase |
Vendor risk intelligence network |
Supply chain compromise, compromised vendor accounts |
Threat Field Reference
Core Fields
| Field |
Type |
Description |
threatId |
string |
Unique threat identifier (UUID) |
abxMessageId |
long |
Abnormal internal message ID |
abxPortalUrl |
string |
Direct link to threat in Abnormal portal |
attackType |
string |
BEC, PHISHING, MALWARE, EXTORTION, SPAM, etc. |
attackStrategy |
string |
Specific attack strategy (e.g., "Invoice/Payment Fraud") |
sentTime |
datetime |
When the email was sent |
receivedTime |
datetime |
When the email was received |
attackVector |
string |
How the attack was delivered (Link, Attachment, Text) |
summaryInsights |
string[] |
AI-generated summary of why this is a threat |
Sender Fields
| Field |
Type |
Description |
senderAddress |
string |
Sender email address |
senderName |
string |
Sender display name |
fromAddress |
string |
From header address |
fromName |
string |
From header display name |
replyToEmails |
string[] |
Reply-to addresses |
returnPath |
string |
Return-path/envelope sender |
senderIpAddress |
string |
Originating IP address |
senderDomain |
string |
Sender domain |
impersonatedParty |
string |
Who is being impersonated (if applicable) |
Recipient Fields
| Field |
Type |
Description |
recipientAddress |
string |
Primary recipient |
toAddresses |
string[] |
All To: addresses |
ccAddresses |
string[] |
All CC: addresses |
Remediation Fields
| Field |
Type |
Description |
remediationStatus |
string |
Auto-Remediated, Not Remediated, Post-Remediated |
remediationTimestamp |
datetime |
When remediation action was taken |
postRemediated |
boolean |
Whether email was remediated after delivery |
isRead |
boolean |
Whether the recipient read the email |
MCP Tools
Two tools cover the threat domain. There is no threat-level action tool —
nothing here changes a threat's state, and abnormal_threats_get is a
read.
| Tool |
Description |
Parameters |
abnormal_threats_list |
List detected threats. Returns threat IDs plus summary only — no message bodies, no headers. |
pageSize (default 100, max 100), pageNumber (1-indexed), filter (OData string) |
abnormal_threats_get |
Get one threat by ID, including its related message IDs. |
threatId (required) |
There is no date-range parameter. Narrow by time through the OData
filter string: receivedTime gt 2026-03-20T00:00:00Z.
ID vocabulary
threatId is a UUID string. The neighbouring caseId used by
abnormal_cases_get is a number. The two identifiers read alike in
prose ("pull case 12345", "pull the case for that threat") and are not
interchangeable — passing a threat UUID to abnormal_cases_get is a type
error, not a lookup miss.
Tool Usage Examples
List recent threats:
{
"tool": "abnormal_threats_list",
"parameters": {
"filter": "receivedTime gt 2026-03-20T00:00:00Z",
"pageSize": 25
}
}
Get threat details:
{
"tool": "abnormal_threats_get",
"parameters": {
"threatId": "184def76-3c28-4e1b-9ef0-a5abc123def4"
}
}
Threat Investigation Workflows
BEC Investigation Workflow
- Review threat details - Check attackType, attackStrategy, summaryInsights
- Analyze impersonation:
- Who is being impersonated (impersonatedParty)
- Display name vs actual email address mismatch
- Reply-to vs from address mismatch
- First-time sender or unusual communication pattern
- Check financial indicators:
- Wire transfer, ACH, or gift card requests
- Invoice or payment redirection
- Urgency language ("urgent", "today", "confidential")
- Assess scope:
- Re-run
abnormal_threats_list over the window and correlate on
sender in the results — there is no tenant-wide message search, so
scope is assembled from threat records, not from a sender query
- Check whether other threats in the window share the sender or domain
- Remediate -
abnormal_messages_list, then
abnormal_remediation_manage per message (see Remediation is
per-message). Alert targeted recipients directly. Sender-domain
blocking is not an Abnormal action — do it at the gateway or in M365.
- Document - Record findings and IOCs
Credential Phishing Investigation Workflow
- Get threat details - Focus on attackVector and embedded URLs
- Analyze URLs:
- Check for brand impersonation (Microsoft, Google, Dropbox)
- Look for redirect chains and URL shorteners
- Identify credential harvesting pages
- Check sender authentication:
- SPF, DKIM, DMARC results
- Domain age and reputation
- Assess user interaction:
- Was the email read (isRead)?
- Was it post-remediated (delivered then removed)?
- Remediate - loop
abnormal_remediation_manage over every message
in the threat. Password resets and domain blocks are outside this
server entirely: run them through cipp-users or the M365 tenant.
Malware Investigation Workflow
- Get attachment details - File name, type, size
- Review AI insights - Check summaryInsights for behavioral indicators
- Assess delivery:
- Was the attachment opened?
- How many users received the same attachment?
- Remediate - loop
abnormal_remediation_manage over every message
in the threat. Hash blocking and endpoint isolation are EDR actions,
not Abnormal ones.
Severity Assessment Matrix
| Factor |
Low |
Medium |
High |
Critical |
| Attack Type |
Spam, Graymail |
Scam, Extortion |
Phishing, BEC |
Supply Chain, compromised internal sender |
| Recipients |
1 user |
2-10 users |
10-50 users |
50+ or executives |
| User Interaction |
Not read |
Read, no click |
Link clicked |
Credentials entered |
| Sender Profile |
Known spam |
Unknown external |
Impersonation |
Compromised internal |
| Financial Impact |
None |
Low value request |
Wire/ACH request |
Active fraud |
Remediation is per-message, not per-threat
Remediation does not live in this domain. The only mutating tool on the
server is abnormal_remediation_manage, and it requires both
threatId and messageId:
| Argument |
Required |
Notes |
threatId |
yes |
UUID of the containing threat |
messageId |
yes |
one specific message inside that threat |
action |
yes |
remediate | unremediate | status |
There is no "remediate this campaign" call. To act on a threat you must:
abnormal_threats_get — confirm the threat is what you think it is.
abnormal_messages_list — enumerate the messages inside it.
abnormal_remediation_manage — once per message, in a loop.
Why the loop is the hazard
The shape of the risk is not "one big blast radius decision". It is an
N-call loop that can stop halfway.
- Partial failure leaves a campaign half-remediated. Rate limiting
(60 req/min) or a single 4xx mid-loop means some recipients had the
message pulled and others still have it in the inbox. Nothing in the
API reports "the campaign is done" — only per-message results. Track
which
messageIds succeeded; do not infer completion from the first
few.
- The message list is a point-in-time snapshot. A live campaign can
land in more mailboxes while you are looping. Re-run
abnormal_messages_list after the loop rather than trusting the
original enumeration.
action — not the tool name — decides the blast radius.
status is a plain GET. remediate and unremediate are POSTs that
move real mail. One tool name spans a safe read and a destructive
write, so any allowlist keyed on tool name grants all three. An agent
permitted to check status is, mechanically, permitted to
unremediate.
unremediate is not an undo. It delivers a message Abnormal
classified as an attack back into a user's inbox. Treat it as a
delivery decision requiring the same approval as the original
remediation, not as a correction.
Verify with action: "status" per message after the loop.
Error Handling
Common API Errors
| Code |
Message |
Resolution |
| 400 |
Invalid filter parameter |
Check filter syntax and valid field names |
| 401 |
Unauthorized |
Check API token validity |
| 403 |
Insufficient permissions |
Token needs threat detection scope |
| 404 |
Threat not found |
Verify threat ID |
| 429 |
Rate limited |
Wait and retry with exponential backoff |
Best Practices
- Prioritize by attack type - BEC and supply chain threats first
- Check user interaction - Prioritize threats that were read or clicked
- Review AI insights - summaryInsights explains why Abnormal flagged the email
- Correlate account compromise elsewhere - A phishing campaign may lead to account compromise, but nothing on this server detects it; pivot to
cipp-users
- Monitor remediation status - Check
action: "status" per message; there is no campaign-level status
- Track post-remediation - Emails remediated after delivery need immediate attention
- Never release confirmed threats -
unremediate delivers a known attack; escalate to management instead
Related Skills
1---2name: abnormal-security-threats3description: Abnormal Security threat detection: threat types (BEC, phishing, malware, socially-engineered attacks, spam, graymail, credential theft), attack vectors, severity assessment, remediation actions, and investigation workflows.4---56# Abnormal Security Threat Detection & Analysis78## Overview910Abnormal Security uses behavioral AI to detect email threats that bypass traditional secure email gateways (SEGs). Unlike signature or rule-based detection, Abnormal profiles normal communication patterns and detects deviations indicative of attacks. This skill covers threat types, attack vectors, severity assessment, remediation, and investigation workflows.1112## Anti-triggers1314- **An email a user reported to the abuse mailbox** — those arrive as15 cases carrying their own AI judgment and action set; use16 `Abnormal Security Cases`.17- **A mailbox behaving strangely rather than an email arriving** —18 impossible travel, new inbox rules, and lateral sending are account19 compromise, and this server exposes no account-takeover surface at all.20 Investigate identity in the M365 tenant instead; use `cipp-users`.21- **Header, SPF/DKIM/DMARC, or attachment forensics on one message** —22 use `Abnormal Security Messages`.23- **Releasing something from a quarantine queue** — Abnormal has no24 gateway queue. It inspects mail post-delivery through the M365 API and25 pulls it back out of inboxes. Anything sitting in a hold queue belongs26 to the gateway holding it: `SpamTitan Quarantine`,27 `Mimecast Message Tracking`, or `Proofpoint Quarantine`.28- **A threat the gateway already stopped** — mail blocked before29 delivery never reaches the mailbox, so Abnormal never sees it. Search30 the gateway's own logs.31- **The same mail flagged by Check Point Harmony Email** — Avanan is32 the other API-based, post-delivery platform on this stack and33 produces its own threat records; use `avanan-threats`.3435## Threat Types3637| Type | Description | Severity Range |38|------|-------------|----------------|39| **BEC (Business Email Compromise)** | Impersonation of executives or trusted contacts to request financial actions | High - Critical |40| **Credential Phishing** | Emails designed to harvest credentials via fake login pages | Medium - Critical |41| **Malware** | Emails containing malicious attachments or links to malware downloads | High - Critical |42| **Extortion** | Threatening emails demanding payment (sextortion, DDoS threats) | Medium - High |43| **Social Engineering** | Manipulation attacks using urgency, authority, or trust | Medium - Critical |44| **Spam** | Unsolicited bulk email | Low |45| **Graymail** | Marketing, newsletters, and promotional content | Low |46| **Scam** | Advance-fee fraud, fake invoices, lottery scams | Medium - High |47| **Supply Chain Compromise** | Attacks from compromised vendor or partner email accounts | Critical |4849### Detection Approach5051| Engine | Description | What It Detects |52|--------|-------------|-----------------|53| **Behavioral AI** | Models normal communication patterns per user/org | BEC, social engineering, impersonation |54| **Content Analysis** | NLP analysis of email body and intent | Urgency, financial requests, credential harvesting |55| **Sender Profiling** | Reputation and authentication of sender | Spoofing, domain impersonation, first-time senders |56| **URL Analysis** | Real-time scanning of embedded links | Credential phishing pages, malware delivery |57| **Attachment Analysis** | File inspection and sandboxing | Malware, ransomware payloads |58| **VendorBase** | Vendor risk intelligence network | Supply chain compromise, compromised vendor accounts |5960## Threat Field Reference6162### Core Fields6364| Field | Type | Description |65|-------|------|-------------|66| `threatId` | string | Unique threat identifier (UUID) |67| `abxMessageId` | long | Abnormal internal message ID |68| `abxPortalUrl` | string | Direct link to threat in Abnormal portal |69| `attackType` | string | BEC, PHISHING, MALWARE, EXTORTION, SPAM, etc. |70| `attackStrategy` | string | Specific attack strategy (e.g., "Invoice/Payment Fraud") |71| `sentTime` | datetime | When the email was sent |72| `receivedTime` | datetime | When the email was received |73| `attackVector` | string | How the attack was delivered (Link, Attachment, Text) |74| `summaryInsights` | string[] | AI-generated summary of why this is a threat |7576### Sender Fields7778| Field | Type | Description |79|-------|------|-------------|80| `senderAddress` | string | Sender email address |81| `senderName` | string | Sender display name |82| `fromAddress` | string | From header address |83| `fromName` | string | From header display name |84| `replyToEmails` | string[] | Reply-to addresses |85| `returnPath` | string | Return-path/envelope sender |86| `senderIpAddress` | string | Originating IP address |87| `senderDomain` | string | Sender domain |88| `impersonatedParty` | string | Who is being impersonated (if applicable) |8990### Recipient Fields9192| Field | Type | Description |93|-------|------|-------------|94| `recipientAddress` | string | Primary recipient |95| `toAddresses` | string[] | All To: addresses |96| `ccAddresses` | string[] | All CC: addresses |9798### Remediation Fields99100| Field | Type | Description |101|-------|------|-------------|102| `remediationStatus` | string | Auto-Remediated, Not Remediated, Post-Remediated |103| `remediationTimestamp` | datetime | When remediation action was taken |104| `postRemediated` | boolean | Whether email was remediated after delivery |105| `isRead` | boolean | Whether the recipient read the email |106107## MCP Tools108109Two tools cover the threat domain. There is no threat-level action tool —110nothing here changes a threat's state, and `abnormal_threats_get` is a111read.112113| Tool | Description | Parameters |114|------|-------------|------------|115| `abnormal_threats_list` | List detected threats. Returns threat IDs plus summary only — no message bodies, no headers. | `pageSize` (default 100, max 100), `pageNumber` (1-indexed), `filter` (OData string) |116| `abnormal_threats_get` | Get one threat by ID, including its related message IDs. | `threatId` (required) |117118There is no date-range parameter. Narrow by time through the OData119`filter` string: `receivedTime gt 2026-03-20T00:00:00Z`.120121### ID vocabulary122123`threatId` is a **UUID string**. The neighbouring `caseId` used by124`abnormal_cases_get` is a **number**. The two identifiers read alike in125prose ("pull case 12345", "pull the case for that threat") and are not126interchangeable — passing a threat UUID to `abnormal_cases_get` is a type127error, not a lookup miss.128129### Tool Usage Examples130131**List recent threats:**132```json133{134 "tool": "abnormal_threats_list",135 "parameters": {136 "filter": "receivedTime gt 2026-03-20T00:00:00Z",137 "pageSize": 25138 }139}140```141142**Get threat details:**143```json144{145 "tool": "abnormal_threats_get",146 "parameters": {147 "threatId": "184def76-3c28-4e1b-9ef0-a5abc123def4"148 }149}150```151152## Threat Investigation Workflows153154### BEC Investigation Workflow1551561. **Review threat details** - Check attackType, attackStrategy, summaryInsights1572. **Analyze impersonation:**158 - Who is being impersonated (impersonatedParty)159 - Display name vs actual email address mismatch160 - Reply-to vs from address mismatch161 - First-time sender or unusual communication pattern1623. **Check financial indicators:**163 - Wire transfer, ACH, or gift card requests164 - Invoice or payment redirection165 - Urgency language ("urgent", "today", "confidential")1664. **Assess scope:**167 - Re-run `abnormal_threats_list` over the window and correlate on168 sender in the results — there is no tenant-wide message search, so169 scope is assembled from threat records, not from a sender query170 - Check whether other threats in the window share the sender or domain1715. **Remediate** - `abnormal_messages_list`, then172 `abnormal_remediation_manage` per message (see *Remediation is173 per-message*). Alert targeted recipients directly. Sender-domain174 blocking is not an Abnormal action — do it at the gateway or in M365.1756. **Document** - Record findings and IOCs176177### Credential Phishing Investigation Workflow1781791. **Get threat details** - Focus on attackVector and embedded URLs1802. **Analyze URLs:**181 - Check for brand impersonation (Microsoft, Google, Dropbox)182 - Look for redirect chains and URL shorteners183 - Identify credential harvesting pages1843. **Check sender authentication:**185 - SPF, DKIM, DMARC results186 - Domain age and reputation1874. **Assess user interaction:**188 - Was the email read (isRead)?189 - Was it post-remediated (delivered then removed)?1905. **Remediate** - loop `abnormal_remediation_manage` over every message191 in the threat. Password resets and domain blocks are outside this192 server entirely: run them through `cipp-users` or the M365 tenant.193194### Malware Investigation Workflow1951961. **Get attachment details** - File name, type, size1972. **Review AI insights** - Check summaryInsights for behavioral indicators1983. **Assess delivery:**199 - Was the attachment opened?200 - How many users received the same attachment?2014. **Remediate** - loop `abnormal_remediation_manage` over every message202 in the threat. Hash blocking and endpoint isolation are EDR actions,203 not Abnormal ones.204205## Severity Assessment Matrix206207| Factor | Low | Medium | High | Critical |208|--------|-----|--------|------|----------|209| Attack Type | Spam, Graymail | Scam, Extortion | Phishing, BEC | Supply Chain, compromised internal sender |210| Recipients | 1 user | 2-10 users | 10-50 users | 50+ or executives |211| User Interaction | Not read | Read, no click | Link clicked | Credentials entered |212| Sender Profile | Known spam | Unknown external | Impersonation | Compromised internal |213| Financial Impact | None | Low value request | Wire/ACH request | Active fraud |214215## Remediation is per-message, not per-threat216217Remediation does not live in this domain. The only mutating tool on the218server is `abnormal_remediation_manage`, and it requires **both**219`threatId` and `messageId`:220221| Argument | Required | Notes |222|----------|----------|-------|223| `threatId` | yes | UUID of the containing threat |224| `messageId` | yes | one specific message inside that threat |225| `action` | yes | `remediate` \| `unremediate` \| `status` |226227There is no "remediate this campaign" call. To act on a threat you must:2282291. `abnormal_threats_get` — confirm the threat is what you think it is.2302. `abnormal_messages_list` — enumerate the messages inside it.2313. `abnormal_remediation_manage` — **once per message**, in a loop.232233### Why the loop is the hazard234235The shape of the risk is not "one big blast radius decision". It is an236N-call loop that can stop halfway.237238- **Partial failure leaves a campaign half-remediated.** Rate limiting239 (60 req/min) or a single 4xx mid-loop means some recipients had the240 message pulled and others still have it in the inbox. Nothing in the241 API reports "the campaign is done" — only per-message results. Track242 which `messageId`s succeeded; do not infer completion from the first243 few.244- **The message list is a point-in-time snapshot.** A live campaign can245 land in more mailboxes while you are looping. Re-run246 `abnormal_messages_list` after the loop rather than trusting the247 original enumeration.248- **`action` — not the tool name — decides the blast radius.**249 `status` is a plain GET. `remediate` and `unremediate` are POSTs that250 move real mail. One tool name spans a safe read and a destructive251 write, so any allowlist keyed on tool name grants all three. An agent252 permitted to check `status` is, mechanically, permitted to253 `unremediate`.254- **`unremediate` is not an undo.** It delivers a message Abnormal255 classified as an attack back into a user's inbox. Treat it as a256 delivery decision requiring the same approval as the original257 remediation, not as a correction.258259Verify with `action: "status"` per message after the loop.260261## Error Handling262263### Common API Errors264265| Code | Message | Resolution |266|------|---------|------------|267| 400 | Invalid filter parameter | Check filter syntax and valid field names |268| 401 | Unauthorized | Check API token validity |269| 403 | Insufficient permissions | Token needs threat detection scope |270| 404 | Threat not found | Verify threat ID |271| 429 | Rate limited | Wait and retry with exponential backoff |272273## Best Practices2742751. **Prioritize by attack type** - BEC and supply chain threats first2762. **Check user interaction** - Prioritize threats that were read or clicked2773. **Review AI insights** - summaryInsights explains why Abnormal flagged the email2784. **Correlate account compromise elsewhere** - A phishing campaign may lead to account compromise, but nothing on this server detects it; pivot to `cipp-users`2795. **Monitor remediation status** - Check `action: "status"` per message; there is no campaign-level status2806. **Track post-remediation** - Emails remediated after delivery need immediate attention2817. **Never release confirmed threats** - `unremediate` delivers a known attack; escalate to management instead282283## Related Skills284285- [Abnormal Cases](../cases/SKILL.md) - Abuse mailbox case management286- [Abnormal Messages](../messages/SKILL.md) - Message analysis287- [Abnormal API Patterns](../api-patterns/SKILL.md) - API authentication and usage