diff --git a/detection-rules/PR2166_link_credential_phishing_voicemail_language.yml b/detection-rules/PR2166_link_credential_phishing_voicemail_language.yml new file mode 100644 index 00000000000..fdaa66e769f --- /dev/null +++ b/detection-rules/PR2166_link_credential_phishing_voicemail_language.yml @@ -0,0 +1,19 @@ +name: "PR#2166 - Fake voicemail notification (untrusted sender)" +description: | + This rule detects a common credential phishing vector enticing the user to engage with links under the premise that they have a voicemail to retrieve. + The rule looks for voicemail verbiage in the display name, body, subject or a combination of those elements with emojis or a medium to high credential theft NLU Intent from first-time + unsolicited sender. +type: "rule" +severity: "medium" +source: "type.inbound\n// contains links or attachments\nand (0 < length(body.links) <= 15 or 0 < length(attachments) <= 3)\n// the subject or display_name need some keywords which are voicemail related\nand (\n any([subject.subject, sender.display_name],\n regex.icontains(.,\n // split phrases that occur within 3 words between or only punctuation between them\n '(?:v[nm](\\b|[[:punct:]])?|\\bvoice(?:mail|message)?|audio|incoming|missed(?:\\sa\\s)?|left( a)?|wireless)(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}(?:mail|message|msg|recording|received|notif|support|ca[li1][li1]\\d*\\b|ca[il1][il1](?:er)?|log|transcript(?:ion)?\\b)',\n // split phrases that start with \"caller\" that occur within 3 words between or only punctation \n 'ca[li1][li1](?:er)?(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}(?:v[nm](\\b|[[:punct:]])?|\\bvoice(?:mail|message)?|audio|missed(?:\\sa\\s)?|left( a)?)',\n // strong phrases\n '(?:open mp3|audio note|\\.wav|left a vm|[^\\s]+voip[^\\s]*|unanswered.*ca[li1][li1]|incoming.vm|left msg|wireless ca[li1][li1]er|VM Service|voice message|missed.ca[li1][li1](?:e[rd])?|ca[li1][li1].(?:support|service)(?: for| log)?|missed.{0,10} VM|new voicemail from|new.v.m.from.\\+?\\d+|new voicemail?(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}transcript(s|ion)?|message received)',\n // starts in the format of `(4)` and contains some voicemail keywords\n '^\\(\\d\\)\\s(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}(?:message|voip|voice|unread|call)',\n 'ca[li1][li1](?:er)?(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}(?:playback|transcript)',\n\n // obfuscated phone number with at least one digit in the area code and at least one obfuscated number in the last group\n // 555-555-555X, 555-555-XXXX, 555-5XX-XXXX\n '\\b1?\\(?(\\d{3}|\\d{2}[\\*X]|\\d[\\*X]{2})\\)?[^a-z0-9]{0,2}(\\d{2,3}|\\d{2}[\\*X]|\\d[\\*X]{2}|[\\*X]{2,3})[^a-z0-9]{0,4}(\\d{3}[\\*X]|\\d{2}[\\*X]{2}|\\d[\\*X]{3}|[\\*X]{3,4})[^0-9]',\n // obfuscated phone number with at least one digit in the prefix\n // XXX-555-5555, XXX-5XX-XXXX\n '\\b1?\\(?(\\d{2}[\\*X]|\\d[\\*X]{2}|[\\*X]{2,3})\\)?[^a-z0-9]{0,2}(\\d{2,3}|\\d{2}[\\*X]|\\d[\\*X]{2})[^a-z0-9]{0,4}(\\d{4}|\\d{3}[\\*X]|\\d{2}[\\*X]{2}|\\d[\\*X]{3}|[\\*X]{3,4})\\b',\n )\n )\n // body.current_thread.text inspection should be very specific to avoid FP\n or regex.icontains(\n strings.replace_confusables(body.current_thread.text),\n //body.current_thread.text,\n 'you (?:have |received )*(?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}\\bvoice\\s?(?:mail|audio|message)',\n 'sent (?:from|by) (?:your )?voice (?:mail )?system',\n 'new (?:voice(?:mail)?|audio) (?:message|notification|record)',\n 'voicemail (is )?attached',\n 'an? (?:new )?encrypted voicemail',\n 'a (?:new )?pending message',\n 'Your? have (?: an?)?incoming voiceRec',\n \"you(?:\\'ve| have) a (?:new )?missed ca[li1][li1]\",\n 'New Voicemail Received',\n 'left you a (?:\\w+(\\s\\w+)?|[[:punct:]]+|\\s+){0,3}(?:voice(?:mail)?|audio)(?: message)?',\n 'New missed ca[li1][li1] record',\n 'voicemail transcript(?:ion)?',\n 'Listen to VoiceMail'\n )\n // phishing template observed https://platform.sublime.security/messages/341eed2be003036cdd3eeee575202df8a7472b6567d0dfa0f99c3b3fb42a8e7f\n or strings.icontains(body.html.raw, '