Detection rules › Sublime MQL

Callback phishing via calendar invite

Severity
medium
Type
rule
Source
github.com/sublime-security/sublime-rules

Detects calendar invites containing callback phishing language in the DESCRIPTION of the invite.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesSocial engineering, Evasion, ICS Phishing

Event coverage

Rule body MQL

type.inbound
and length(attachments) > 0
and all(attachments, .content_type in ("text/calendar", "application/ics"))
and any(attachments,
        // extract the calendar invite description and use NLU against it
        any(file.explode(.),
            any(.scan.ics.calendars,
                any(.components,
                    (
                      any(ml.nlu_classifier(.description).intents,
                          .name == "callback_scam"
                      )
                      or any(ml.nlu_classifier(strings.parse_html(.description).display_text
                             ).intents,
                             .name == "callback_scam"
                      )
                      or (
                        any(ml.nlu_classifier(.description).topics,
                            .name == "Request to View Invoice"
                            and .confidence == "high"
                        )
                        // emoji regex
                        and regex.contains(.description,
                                           '[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{FE00}-\x{FE0F}\x{200D}\x{20E3}\x{E0020}-\x{E007F}]'
                        )
                      )
                    )
                )
            )
        )
)
and (
  not profile.by_sender_email().solicited
  and not profile.by_sender_email().any_messages_benign
)

// negate highly trusted sender domains unless they fail DMARC authentication
and (
  (
    sender.email.domain.root_domain in $high_trust_sender_root_domains
    and not coalesce(headers.auth_summary.dmarc.pass, false)
  )
  or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)

Detection logic

Scope: inbound message.

Detects calendar invites containing callback phishing language in the DESCRIPTION of the invite.

  1. inbound message
  2. length(attachments) > 0
  3. all of attachments where:
    • .content_type in ('text/calendar', 'application/ics')
  4. any of attachments where:
    • any of file.explode(.) where:
      • any of .scan.ics.calendars where:
        • any of .components where any holds:
          • any of ml.nlu_classifier(.description).intents where:
            • .name is 'callback_scam'
          • any of ml.nlu_classifier(strings.parse_html(.description).display_text).intents where:
            • .name is 'callback_scam'
          • all of:
            • any of ml.nlu_classifier(.description).topics where all hold:
              • .name is 'Request to View Invoice'
              • .confidence is 'high'
            • .description matches '[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}\\x{1F680}-\\x{1F6FF}\\x{1F900}-\\x{1F9FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{FE00}-\\x{FE0F}\\x{200D}\\x{20E3}\\x{E0020}-\\x{E007F}]'
  5. all of:
    • not:
      • profile.by_sender_email().solicited
    • not:
      • profile.by_sender_email().any_messages_benign
  6. any of:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • not:
        • coalesce(headers.auth_summary.dmarc.pass)
    • sender.email.domain.root_domain not in $high_trust_sender_root_domains

Inspects: attachments[].content_type, headers.auth_summary.dmarc.pass, sender.email.domain.root_domain, type.inbound. Sensors: file.explode, ml.nlu_classifier, profile.by_sender_email, regex.contains, strings.parse_html. Reference lists: $high_trust_sender_root_domains.

Indicators matched (7)

FieldMatchValue
attachments[].content_typemembertext/calendar
attachments[].content_typememberapplication/ics
ml.nlu_classifier(file.explode(attachments[])[].scan.ics.calendars[].components[].description).intents[].nameequalscallback_scam
ml.nlu_classifier(strings.parse_html(file.explode(attachments[])[].scan.ics.calendars[].components[].description).display_text).intents[].nameequalscallback_scam
ml.nlu_classifier(file.explode(attachments[])[].scan.ics.calendars[].components[].description).topics[].nameequalsRequest to View Invoice
ml.nlu_classifier(file.explode(attachments[])[].scan.ics.calendars[].components[].description).topics[].confidenceequalshigh
regex.containsregex[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{FE00}-\x{FE0F}\x{200D}\x{20E3}\x{E0020}-\x{E007F}]