Detection rules › Sublime MQL

Callback phishing via Google Group abuse

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

A fraudulent invoice/receipt found in the body of the message, delivered via a Google Group mailing list.

Threat classification

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

CategoryValues
Attack typesCallback Phishing
Tactics and techniquesFree email provider, Impersonation: Brand, Social engineering

Event coverage

Rule body MQL

type.inbound
and length(attachments) < 5
and sender.email.domain.domain == "googlegroups.com"
and (
  any(attachments,
      (.file_type in $file_types_images or .file_type == "pdf")
      and (
        any(file.explode(.),
            // exclude images taken with mobile cameras and screenshots from android
            not any(.scan.exiftool.fields,
                    (
                      .key == "Model"
                      or (
                        .key == "Software"
                        and strings.starts_with(.value, "Android")
                      )
                    )
                    // exclude images taken with mobile cameras and screenshots from Apple
                    and (
                      .key == "DeviceManufacturer"
                      and .value == "Apple Computer Inc."
                    )
            )
            and any(ml.nlu_classifier(.scan.ocr.raw).intents,
                    .name == "callback_scam" and .confidence == "high"
            )
        )
      )
  )
  or any(ml.nlu_classifier(body.current_thread.text).intents,
         .name in ("callback_scam") and .confidence == "high"
  )
)

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

Detection logic

Scope: inbound message.

A fraudulent invoice/receipt found in the body of the message, delivered via a Google Group mailing list.

  1. inbound message
  2. length(attachments) < 5
  3. sender.email.domain.domain is 'googlegroups.com'
  4. any of:
    • any of attachments where all hold:
      • any of:
        • .file_type in $file_types_images
        • .file_type is 'pdf'
      • any of file.explode(.) where all hold:
        • not:
          • any of .scan.exiftool.fields where all hold:
            • any of:
              • .key is 'Model'
              • all of:
                • .key is 'Software'
                • .value starts with 'Android'
            • all of:
              • .key is 'DeviceManufacturer'
              • .value is 'Apple Computer Inc.'
        • any of ml.nlu_classifier(.scan.ocr.raw).intents where all hold:
          • .name is 'callback_scam'
          • .confidence is 'high'
    • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
      • .name in ('callback_scam')
      • .confidence is 'high'
  5. any of:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • not:
        • headers.auth_summary.dmarc.pass
    • sender.email.domain.root_domain not in $high_trust_sender_root_domains

Inspects: attachments[].file_type, body.current_thread.text, headers.auth_summary.dmarc.pass, sender.email.domain.domain, sender.email.domain.root_domain, type.inbound. Sensors: file.explode, ml.nlu_classifier, strings.starts_with. Reference lists: $file_types_images, $high_trust_sender_root_domains.

Indicators matched (11)

FieldMatchValue
sender.email.domain.domainequalsgooglegroups.com
attachments[].file_typeequalspdf
file.explode(attachments[])[].scan.exiftool.fields[].keyequalsModel
file.explode(attachments[])[].scan.exiftool.fields[].keyequalsSoftware
strings.starts_withprefixAndroid
file.explode(attachments[])[].scan.exiftool.fields[].keyequalsDeviceManufacturer
file.explode(attachments[])[].scan.exiftool.fields[].valueequalsApple Computer Inc.
ml.nlu_classifier(file.explode(attachments[])[].scan.ocr.raw).intents[].nameequalscallback_scam
ml.nlu_classifier(file.explode(attachments[])[].scan.ocr.raw).intents[].confidenceequalshigh
ml.nlu_classifier(body.current_thread.text).intents[].namemembercallback_scam
ml.nlu_classifier(body.current_thread.text).intents[].confidenceequalshigh