Brand impersonation: Microsoft Teams invitation

Detects messages impersonating a Microsoft Teams invites by matching known invite text patterns while containing join links that do not resolve to Microsoft domains. Additional verification includes checking for absent phone dial-in options and missing standard Teams help text or HTML meeting components.

Sublime rule (View on GitHub)

 1name: "Brand impersonation: Microsoft Teams invitation"
 2description: "Detects messages impersonating a Microsoft Teams invites by matching known invite text patterns while containing join links that do not resolve to Microsoft domains. Additional verification includes checking for absent phone dial-in options and missing standard Teams help text or HTML meeting components."
 3type: "rule"
 4severity: "high"
 5source: |
 6  type.inbound
 7  and (
 8    (
 9      strings.icontains(body.current_thread.text, 'Microsoft Teams')
10      and strings.icontains(body.current_thread.text, 'join the meeting now')
11      and strings.contains(body.current_thread.text, 'Meeting ID:')
12      and strings.contains(body.current_thread.text, 'Passcode:')
13    )
14    or (
15      strings.icontains(body.current_thread.text, "teams")
16      and 2 of (
17        strings.icontains(body.current_thread.text, "internal"),
18        strings.icontains(body.current_thread.text, "message"),
19        strings.icontains(body.current_thread.text, "meeting")
20      )
21    )
22  )
23  // not a reply
24  and length(headers.references) == 0
25  and headers.in_reply_to is null
26  // few links
27  and length(body.links) < 10
28  
29  // no unsubscribe links
30  // common in newsletters which link to a webinar style event
31  and not any(body.links, strings.icontains(.display_text, "unsub"))
32  
33  // one of the links contains is a CTA that doesn't link to MS
34  and any(body.links,
35          (
36            .display_text =~ "join the meeting now"
37            or strings.icontains(.display_text, "play recording")
38          )
39          and .href_url.domain.root_domain not in (
40            "microsoft.com",
41            "microsoft.us"
42          )
43          // rewriters often abstract the link
44          and .href_url.domain.root_domain not in $bulk_mailer_url_root_domains
45  )
46  // missing the dial by phone element
47  and not strings.icontains(body.current_thread.text, 'Dial in by phone')
48  
49  // any of these suspicious elements from the body
50  and (
51    // malicious samples leveraged recipient domain branding here
52    not strings.icontains(body.current_thread.text, 'Microsoft Teams Need help?')
53    // malicious samples contained unique html elements not present in legit ones
54    or strings.icontains(body.html.raw, '<div class="meeting-title">')
55    or strings.icontains(body.html.raw, '<div class="meeting-time">')
56    or strings.icontains(body.html.raw, '<div class="meeting-location">')
57    or strings.icontains(body.html.raw, '<span class="conflict-badge">')
58    or strings.icontains(body.html.raw, 'class="join-button"')
59  )
60  
61  // negate highly trusted sender domains unless they fail DMARC authentication
62  and (
63    (
64      sender.email.domain.root_domain in $high_trust_sender_root_domains
65      and not headers.auth_summary.dmarc.pass
66    )
67    or sender.email.domain.root_domain not in $high_trust_sender_root_domains
68  )  
69
70attack_types:
71  - "Credential Phishing"
72tactics_and_techniques:
73  - "Impersonation: Brand"
74  - "Social engineering"
75detection_methods:
76  - "Content analysis"
77  - "Header analysis"
78  - "HTML analysis"
79  - "URL analysis"
80id: "46410ad8-3465-505f-a78e-f77704910a91"
to-top