Link: Multistage landing - Abused Adobe Acrobat hosted PDF
Detects an inbound message containing an Adobe Acrobat link that leads to a single page PDF document with suspicious indicators, including minimal text, brand logos, document viewer language, and the message is not a reply.
Sublime rule (View on GitHub)
1name: "Link: Multistage landing - Abused Adobe Acrobat hosted PDF"
2description: "Detects an inbound message containing an Adobe Acrobat link that leads to a single page PDF document with suspicious indicators, including minimal text, brand logos, document viewer language, and the message is not a reply."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 and any(body.links,
8 .href_url.domain.domain == "acrobat.adobe.com"
9 and strings.istarts_with(.href_url.path, '/id/urn:')
10 )
11 and length(distinct(filter(body.links,
12 .href_url.domain.domain == "acrobat.adobe.com"
13 and strings.istarts_with(.href_url.path, '/id/urn:')
14 ),
15 .href_url.url
16 )
17 ) == 1
18 and any(filter(body.links,
19 .href_url.domain.domain == "acrobat.adobe.com"
20 and strings.istarts_with(.href_url.path, '/id/urn:')
21 ),
22 any(ml.link_analysis(., mode="aggressive").additional_responses,
23 (
24 any(file.explode(.file),
25 any(.scan.exiftool.fields,
26 // password protected pdf
27 .key == "Warning"
28 and strings.icontains(.value, "password protected")
29 )
30 )
31 // a low amount of links
32 or (
33 any(file.explode(.file), 1 <= length(.scan.url.urls) <= 2)
34 // a single page
35 and any(file.explode(.file),
36 .scan.exiftool.page_count == 1
37 // occurs when there are exif errors
38 or .scan.exiftool.page_count is null
39 )
40 // susipicious indicators
41 and (
42 // logo detection of brands for file sharing companies
43 any(ml.logo_detect(.file).brands,
44 .name in ("DocuSign", "Adobe")
45 or strings.istarts_with(.name, 'Microsoft')
46 )
47 // look at the OCR of the document as well
48 or (
49 length(beta.ocr(.file).text) < 750
50 and (
51 regex.icontains(beta.ocr(.file).text, 'e-sign(?:ature)?')
52 or strings.icontains(beta.ocr(.file).text,
53 'shared a document',
54 'review and sign',
55 'PDF viewer',
56 "display this type of document",
57 'please wait...',
58 'New PDF Document',
59 'view document',
60 'open the secure review session'
61 )
62 )
63 )
64 )
65 )
66 )
67 )
68 )
69 and length(headers.references) == 0
70 and headers.in_reply_to is null
71attack_types:
72 - "Credential Phishing"
73tactics_and_techniques:
74 - "Impersonation: Brand"
75 - "Social engineering"
76detection_methods:
77 - "Computer Vision"
78 - "Optical Character Recognition"
79 - "URL analysis"
80 - "Header analysis"
81 - "Sender analysis"
82id: "609081ef-ca1a-577f-a886-a590e39655eb"