Detection rules › Sublime MQL
Brand impersonation: Adobe Sign with suspicious indicators
Detects messages impersonating Adobe Sign that contain Adobe branding elements but are not sent from legitimate Adobe domains and lack proper Adobe Sign authentication headers.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing |
| Tactics and techniques | Impersonation: Brand, Social engineering |
Event coverage
Rule body MQL
type.inbound
and (
(
length(filter(attachments, .file_type == "pdf")) == 0
and (
regex.icontains(body.html.raw,
'alt="Adobe(?: Acrobat)? Sign"',
"adobe-sign-logo.{0,20}.png",
'alt="Powered by Adobe Acrobat Sign"'
)
or any(html.xpath(body.html, "//img/@src").nodes,
strings.parse_url(.raw).domain.root_domain == "adobesign.com"
and (
strings.istarts_with(strings.parse_url(.raw).path,
"/cobrand_logo/"
)
or strings.icontains(strings.parse_url(.raw).path,
"checkmarkCircle"
)
)
)
)
)
or (
any(attachments,
.file_type == "pdf"
and any(file.explode(.),
any(.scan.url.urls,
regex.icontains(.url,
'(?:ad0be.{0,5}s[1i]gn|ad[0o]be.{0,5}s1gn)'
)
)
)
)
)
)
and not (
// inspect the "oldest" thread, negate where that thread is the original Adobe Sign email (based on link domains)
(
length(body.previous_threads[length(body.previous_threads) - 1].links) > 0
and all(body.previous_threads[length(body.previous_threads) - 1].links,
.href_url.domain.root_domain in (
"aka.ms",
"adobe.com",
"adobesign.com",
"echosign.com",
"adobesignsandbox.com",
"mimecastprotect.com",
"mimecast.com"
)
or .href_url.domain.root_domain in $org_domains
or .href_url.domain.root_domain == sender.email.domain.root_domain
or any(recipients.to,
.email.domain.root_domain == ..href_url.domain.root_domain
)
)
)
// legit review button
or any(body.links,
.display_text in (
"Review and sign",
"the document",
"Open agreement",
"VIEW DOCUMENTS",
"Click here to review and sign"
)
and (
.href_url.domain.root_domain in (
"adobe.com",
"adobesign.com",
"echosign.com",
"adobesignsandbox.com",
)
// Mimecast link logic
or (
.href_url.domain.root_domain in (
"mimecastprotect.com",
"mimecast.com"
)
and any(.href_url.query_params_decoded['domain'],
strings.parse_domain(.).root_domain in (
"adobe.com",
"adobesign.com",
"echosign.com",
"adobesignsandbox.com",
)
)
)
)
)
// accidental recipient
or any(recipients.to, .email.email == "adobesign@adobesign.com")
// known Adobe Sign messaage ID formats
or (
(length(headers.references) > 1 or length(body.previous_threads) != 0)
and regex.imatch(headers.references[0],
'[0-9]{9,10}\.[0-9]{4,6}\.[0-9]{13}@event-consumer-prod-[a-z]-[a-z0-9]{7,10}-[a-z0-9]{5}',
'[0-9]{8,10}\.[0-9]{5,7}\.[0-9]{13}@(webapp|job)-prod-.*$',
'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}-APO-PRODHIPAA@apo-p-h'
)
)
// negate Adobe Sign messages from custom domains
or any(headers.hops,
any(.fields, .name in ("Adobesigneventid", "Agreementid"))
)
)
and not (
sender.email.domain.root_domain in (
"adobe.com",
"adobesign.com",
"adobesignsandbox.com",
"echosign.com",
// ticketing software that embeds emails
"helpscout.net"
)
and headers.auth_summary.dmarc.pass
)
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.
Detects messages impersonating Adobe Sign that contain Adobe branding elements but are not sent from legitimate Adobe domains and lack proper Adobe Sign authentication headers.
- inbound message
any of:
all of:
- length(filter(attachments, .file_type == 'pdf')) is 0
any of:
body.html.raw matches any of 3 patterns
alt="Adobe(?: Acrobat)? Sign"adobe-sign-logo.{0,20}.pngalt="Powered by Adobe Acrobat Sign"
any of
html.xpath(body.html, '//img/@src').nodeswhere all hold:- strings.parse_url(.raw).domain.root_domain is 'adobesign.com'
any of:
- strings.parse_url(.raw).path starts with '/cobrand_logo/'
- strings.parse_url(.raw).path contains 'checkmarkCircle'
any of
attachmentswhere all hold:- .file_type is 'pdf'
any of
file.explode(.)where:any of
.scan.url.urlswhere:- .url matches '(?:ad0be.{0,5}s[1i]gn|ad[0o]be.{0,5}s1gn)'
none of:
all of:
- length(body.previous_threads[].links) > 0
all of
body.previous_threads[].linkswhere any holds:- .href_url.domain.root_domain in ('aka.ms', 'adobe.com', 'adobesign.com', 'echosign.com', 'adobesignsandbox.com', 'mimecastprotect.com', 'mimecast.com')
- .href_url.domain.root_domain in $org_domains
- .href_url.domain.root_domain is sender.email.domain.root_domain
any of
recipients.towhere:- .email.domain.root_domain is .href_url.domain.root_domain
any of
body.linkswhere all hold:- .display_text in ('Review and sign', 'the document', 'Open agreement', 'VIEW DOCUMENTS', 'Click here to review and sign')
any of:
- .href_url.domain.root_domain in ('adobe.com', 'adobesign.com', 'echosign.com', 'adobesignsandbox.com')
all of:
- .href_url.domain.root_domain in ('mimecastprotect.com', 'mimecast.com')
any of
.href_url.query_params_decoded['domain']where:- strings.parse_domain(.).root_domain in ('adobe.com', 'adobesign.com', 'echosign.com', 'adobesignsandbox.com')
any of
recipients.towhere:- .email.email is 'adobesign@adobesign.com'
all of:
any of:
- length(headers.references) > 1
- length(body.previous_threads) is not 0
headers.references[0] matches any of 3 patterns
[0-9]{9,10}\.[0-9]{4,6}\.[0-9]{13}@event-consumer-prod-[a-z]-[a-z0-9]{7,10}-[a-z0-9]{5}[0-9]{8,10}\.[0-9]{5,7}\.[0-9]{13}@(webapp|job)-prod-.*$[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}-APO-PRODHIPAA@apo-p-h
any of
headers.hopswhere:any of
.fieldswhere:- .name in ('Adobesigneventid', 'Agreementid')
not:
all of:
- sender.email.domain.root_domain in ('adobe.com', 'adobesign.com', 'adobesignsandbox.com', 'echosign.com', 'helpscout.net')
- headers.auth_summary.dmarc.pass
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.html, body.html.raw, body.links, body.links[].display_text, body.links[].href_url.domain.root_domain, body.links[].href_url.query_params_decoded['domain'], body.previous_threads, body.previous_threads[].links, body.previous_threads[].links[].href_url.domain.root_domain, headers.auth_summary.dmarc.pass, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.references, headers.references[0], recipients.to, recipients.to[].email.domain.root_domain, recipients.to[].email.email, sender.email.domain.root_domain, type.inbound. Sensors: file.explode, html.xpath, regex.icontains, regex.imatch, strings.icontains, strings.istarts_with, strings.parse_domain, strings.parse_url. Reference lists: $high_trust_sender_root_domains, $org_domains.
Indicators matched (36)
| Field | Match | Value |
|---|---|---|
attachments[].file_type | equals | pdf |
regex.icontains | regex | alt="Adobe(?: Acrobat)? Sign" |
regex.icontains | regex | adobe-sign-logo.{0,20}.png |
regex.icontains | regex | alt="Powered by Adobe Acrobat Sign" |
strings.istarts_with | prefix | /cobrand_logo/ |
strings.icontains | substring | checkmarkCircle |
regex.icontains | regex | (?:ad0be.{0,5}s[1i]gn|ad[0o]be.{0,5}s1gn) |
body.previous_threads[].links[].href_url.domain.root_domain | member | aka.ms |
body.previous_threads[].links[].href_url.domain.root_domain | member | adobe.com |
body.previous_threads[].links[].href_url.domain.root_domain | member | adobesign.com |
body.previous_threads[].links[].href_url.domain.root_domain | member | echosign.com |
body.previous_threads[].links[].href_url.domain.root_domain | member | adobesignsandbox.com |
24 more
body.previous_threads[].links[].href_url.domain.root_domain | member | mimecastprotect.com |
body.previous_threads[].links[].href_url.domain.root_domain | member | mimecast.com |
body.links[].display_text | member | Review and sign |
body.links[].display_text | member | the document |
body.links[].display_text | member | Open agreement |
body.links[].display_text | member | VIEW DOCUMENTS |
body.links[].display_text | member | Click here to review and sign |
body.links[].href_url.domain.root_domain | member | adobe.com |
body.links[].href_url.domain.root_domain | member | adobesign.com |
body.links[].href_url.domain.root_domain | member | echosign.com |
body.links[].href_url.domain.root_domain | member | adobesignsandbox.com |
body.links[].href_url.domain.root_domain | member | mimecastprotect.com |
body.links[].href_url.domain.root_domain | member | mimecast.com |
recipients.to[].email.email | equals | adobesign@adobesign.com |
regex.imatch | regex | [0-9]{9,10}\.[0-9]{4,6}\.[0-9]{13}@event-consumer-prod-[a-z]-[a-z0-9]{7,10}-[a-z0-9]{5} |
regex.imatch | regex | [0-9]{8,10}\.[0-9]{5,7}\.[0-9]{13}@(webapp|job)-prod-.*$ |
regex.imatch | regex | [a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}-APO-PRODHIPAA@apo-p-h |
headers.hops[].fields[].name | member | Adobesigneventid |
headers.hops[].fields[].name | member | Agreementid |
sender.email.domain.root_domain | member | adobe.com |
sender.email.domain.root_domain | member | adobesign.com |
sender.email.domain.root_domain | member | adobesignsandbox.com |
sender.email.domain.root_domain | member | echosign.com |
sender.email.domain.root_domain | member | helpscout.net |