Abnormal Security Threats

SkillSecurity

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.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Abnormal Security Threats skill

What this skill tells your AI

The instructions your AI receives, as published by wyre-ai/msp-claude-plugins in msp-claude-plugins/abnormal/abnormal-security/skills/threats/SKILL.md and read by ahel’s review.

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

TypeDescriptionSeverity Range
BEC (Business Email Compromise)Impersonation of executives or trusted contacts to request financial actionsHigh - Critical
Credential PhishingEmails designed to harvest credentials via fake login pagesMedium - Critical
MalwareEmails containing malicious attachments or links to malware downloadsHigh - Critical
ExtortionThreatening emails demanding payment (sextortion, DDoS threats)Medium - High
Social EngineeringManipulation attacks using urgency, authority, or trustMedium - Critical
SpamUnsolicited bulk emailLow
GraymailMarketing, newsletters, and promotional contentLow
ScamAdvance-fee fraud, fake invoices, lottery scamsMedium - High
Supply Chain CompromiseAttacks from compromised vendor or partner email accountsCritical

Detection Approach

EngineDescriptionWhat It Detects
Behavioral AIModels normal communication patterns per user/orgBEC, social engineering, impersonation
Content AnalysisNLP analysis of email body and intentUrgency, financial requests, credential harvesting
Sender ProfilingReputation and authentication of senderSpoofing, domain impersonation, first-time senders
URL AnalysisReal-time scanning of embedded linksCredential phishing pages, malware delivery
Attachment AnalysisFile inspection and sandboxingMalware, ransomware payloads
VendorBaseVendor risk intelligence networkSupply chain compromise, compromised vendor accounts

Threat Field Reference

Core Fields

FieldTypeDescription
threatIdstringUnique threat identifier (UUID)
abxMessageIdlongAbnormal internal message ID
abxPortalUrlstringDirect link to threat in Abnormal portal
attackTypestringBEC, PHISHING, MALWARE, EXTORTION, SPAM, etc.
attackStrategystringSpecific attack strategy (e.g., "Invoice/Payment Fraud")
sentTimedatetimeWhen the email was sent
receivedTimedatetimeWhen the email was received
attackVectorstringHow the attack was delivered (Link, Attachment, Text)
summaryInsightsstring[]AI-generated summary of why this is a threat

Sender Fields

FieldTypeDescription
senderAddressstringSender email address
senderNamestringSender display name
fromAddressstringFrom header address
fromNamestringFrom header display name
replyToEmailsstring[]Reply-to addresses
returnPathstringReturn-path/envelope sender
senderIpAddressstringOriginating IP address
senderDomainstringSender domain
impersonatedPartystringWho is being impersonated (if applicable)

Recipient Fields

FieldTypeDescription
recipientAddressstringPrimary recipient
toAddressesstring[]All To: addresses
ccAddressesstring[]All CC: addresses

Remediation Fields

FieldTypeDescription
remediationStatusstringAuto-Remediated, Not Remediated, Post-Remediated
remediationTimestampdatetimeWhen remediation action was taken
postRemediatedbooleanWhether email was remediated after delivery
isReadbooleanWhether 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.

ToolDescriptionParameters
abnormal_threats_listList 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_getGet 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

  1. Review threat details - Check attackType, attackStrategy, summaryInsights
  2. 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
  3. Check financial indicators:
    • Wire transfer, ACH, or gift card requests
    • Invoice or payment redirection
    • Urgency language ("urgent", "today", "confidential")
  4. 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
  5. 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.
  6. Document - Record findings and IOCs

Credential Phishing Investigation Workflow

  1. Get threat details - Focus on attackVector and embedded URLs
  2. Analyze URLs:
    • Check for brand impersonation (Microsoft, Google, Dropbox)
    • Look for redirect chains and URL shorteners
    • Identify credential harvesting pages
  3. Check sender authentication:
    • SPF, DKIM, DMARC results
    • Domain age and reputation
  4. Assess user interaction:
    • Was the email read (isRead)?
    • Was it post-remediated (delivered then removed)?
  5. 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

  1. Get attachment details - File name, type, size
  2. Review AI insights - Check summaryInsights for behavioral indicators
  3. Assess delivery:
    • Was the attachment opened?
    • How many users received the same attachment?
  4. 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

FactorLowMediumHighCritical
Attack TypeSpam, GraymailScam, ExtortionPhishing, BECSupply Chain, compromised internal sender
Recipients1 user2-10 users10-50 users50+ or executives
User InteractionNot readRead, no clickLink clickedCredentials entered
Sender ProfileKnown spamUnknown externalImpersonationCompromised internal
Financial ImpactNoneLow value requestWire/ACH requestActive 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:

ArgumentRequiredNotes
threatIdyesUUID of the containing threat
messageIdyesone specific message inside that threat
actionyesremediate | unremediate | status

There is no "remediate this campaign" call. To act on a threat you must:

  1. abnormal_threats_get — confirm the threat is what you think it is.
  2. abnormal_messages_list — enumerate the messages inside it.
  3. abnormal_remediation_manageonce 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

CodeMessageResolution
400Invalid filter parameterCheck filter syntax and valid field names
401UnauthorizedCheck API token validity
403Insufficient permissionsToken needs threat detection scope
404Threat not foundVerify threat ID
429Rate limitedWait and retry with exponential backoff

Best Practices

  1. Prioritize by attack type - BEC and supply chain threats first
  2. Check user interaction - Prioritize threats that were read or clicked
  3. Review AI insights - summaryInsights explains why Abnormal flagged the email
  4. Correlate account compromise elsewhere - A phishing campaign may lead to account compromise, but nothing on this server detects it; pivot to cipp-users
  5. Monitor remediation status - Check action: "status" per message; there is no campaign-level status
  6. Track post-remediation - Emails remediated after delivery need immediate attention
  7. Never release confirmed threats - unremediate delivers a known attack; escalate to management instead

Related Skills

Signals

GitHub stars
45
Forks
24
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
abnormal-security-threats
Source
github.com/wyre-ai/msp-claude-plugins