Attachment: Callback Phishing solicitation via image file

A fraudulent invoice/receipt found in an image attachment. Callback Phishing is an attempt by an attacker to solicit the victim (recipient) to call a phone number. The resulting interaction could lead to a multitude of attacks ranging from Financial theft, Remote Access Trojan (RAT) Installation or Ransomware Deployment.

Sublime rule (View on GitHub)

  1name: "Attachment: Callback Phishing solicitation via image file"
  2description: |
  3  A fraudulent invoice/receipt found in an image attachment.
  4  Callback Phishing is an attempt by an attacker to solicit the victim (recipient) to call a phone number. 
  5  The resulting interaction could lead to a multitude of attacks ranging from Financial theft, Remote Access Trojan (RAT) Installation or Ransomware Deployment.  
  6type: "rule"
  7authors:
  8  - twitter: "vector_sec"
  9severity: "high"
 10source: |
 11  type.inbound
 12  and (
 13    not profile.by_sender().solicited
 14    or (
 15      profile.by_sender().any_messages_malicious_or_spam
 16      and not profile.by_sender().any_false_positives
 17    )
 18  )
 19  and not profile.by_sender_email().prevalence == "common"
 20  and (
 21    sender.email.domain.root_domain in $free_email_providers
 22    or sender.email.domain.root_domain in ("onmicrosoft.com")
 23    or (
 24      (
 25        length(recipients.to) == 0
 26        or all(recipients.to, .display_name == "Undisclosed recipients")
 27      )
 28      and length(recipients.cc) == 0
 29      and length(recipients.bcc) == 0
 30    )
 31  )
 32  and any(attachments,
 33          // exclude images taken with mobile cameras and screenshots from android
 34          .file_type in $file_types_images
 35          and (
 36            any(file.explode(.),
 37                not any(.scan.exiftool.fields,
 38                        .key == "Model"
 39                        or (
 40                          .key == "Software"
 41                          and strings.starts_with(.value, "Android")
 42                        )
 43                )
 44                // exclude images taken with mobile cameras and screenshots from Apple
 45                and not any(.scan.exiftool.fields,
 46                            .key == "DeviceManufacturer"
 47                            and .value == "Apple Computer Inc."
 48                )
 49                and not any(.scan.exiftool.fields,
 50                            .key == "UserComment" and .value == "Screenshot"
 51                )
 52                // 4 of the following strings are found        
 53                and 4 of (
 54                  // this section is synced with attachment_callback_phish_with_pdf.yml and body_callback_phishing_no_attachment.yml
 55                  strings.icontains(.scan.ocr.raw, "purchase"),
 56                  strings.icontains(.scan.ocr.raw, "payment"),
 57                  strings.icontains(.scan.ocr.raw, "transaction"),
 58                  strings.icontains(.scan.ocr.raw, "subscription"),
 59                  strings.icontains(.scan.ocr.raw, "antivirus"),
 60                  strings.icontains(.scan.ocr.raw, "order"),
 61                  strings.icontains(.scan.ocr.raw, "support"),
 62                  strings.icontains(.scan.ocr.raw, "help line"),
 63                  strings.icontains(.scan.ocr.raw, "receipt"),
 64                  strings.icontains(.scan.ocr.raw, "invoice"),
 65                  strings.icontains(.scan.ocr.raw, "call"),
 66                  strings.icontains(.scan.ocr.raw, "helpdesk"),
 67                  strings.icontains(.scan.ocr.raw, "cancel"),
 68                  strings.icontains(.scan.ocr.raw, "renew"),
 69                  strings.icontains(.scan.ocr.raw, "refund"),
 70                  regex.icontains(.scan.ocr.raw, "(?:reach|contact) us at"),
 71                  strings.icontains(.scan.ocr.raw, "+1"),
 72                  strings.icontains(.scan.ocr.raw, "amount"),
 73                  strings.icontains(.scan.ocr.raw, "charged"),
 74                  strings.icontains(.scan.ocr.raw, "crypto"),
 75                  strings.icontains(.scan.ocr.raw, "wallet address"),
 76                  regex.icontains(.scan.ocr.raw, '\$\d{3}\.\d{2}\b'),
 77                  regex.icontains(.scan.ocr.raw,
 78                                  '\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}',
 79                                  '\+?([ilo0-9]{1,2})?\s?\(?\d{3}\)?[\s\.\-⋅]{0,5}[ilo0-9]{3}[\s\.\-⋅]{0,5}[ilo0-9]{4}'
 80                  ),
 81                )
 82                // this section is synced with attachment_callback_phish_with_pdf.yml and body_callback_phishing_no_attachment.yml
 83                and regex.icontains(.scan.ocr.raw,
 84                                    '(p.{0,3}a.{0,3}y.{0,3}p.{0,3}a.{0,3}l|ma?c.?fee|n[o0]rt[o0]n|geek.{0,5}squad|ebay|symantec|best buy|lifel[o0]c|secure anywhere|starz|utilities premium|pc security|at&t)'
 85                )
 86            )
 87            // this section is synced with attachment_callback_phish_with_pdf.yml and body_callback_phishing_no_attachment.yml
 88            or any(ml.logo_detect(.).brands,
 89                   .name in (
 90                     "PayPal",
 91                     "Norton",
 92                     "GeekSquad",
 93                     "Ebay",
 94                     "McAfee",
 95                     "AT&T"
 96                   )
 97            )
 98          )
 99  )  
100attack_types:
101  - "Callback Phishing"
102tactics_and_techniques:
103  - "Evasion"
104  - "Free email provider"
105  - "Out of band pivot"
106  - "Social engineering"
107  - "Image as content"
108detection_methods:
109  - "Content analysis"
110  - "Optical Character Recognition"
111  - "Sender analysis"
112  - "URL analysis"
113  - "Computer Vision"
114id: "60acbb36-8ed1-562e-8027-260c2fdf0f04"
to-top