T1608.005 Microsoft Sentinel · KQL

Detect Link Target in Microsoft Sentinel

Adversaries stage resources at link targets that are later delivered to victims via phishing campaigns (T1566.002, T1598.003) or malicious links (T1204.001). Link targets typically include cloned login pages for credential harvesting, malware download pages, or redirect chains through URL shorteners and trusted PaaS platforms. Because this activity occurs on adversary-controlled infrastructure before the victim is targeted, direct detection is impossible from within the victim environment. Detection must focus on downstream indicators: email security telemetry revealing delivered URLs pointing to suspicious infrastructure, endpoint browser telemetry showing user connections to phishing link targets, DNS queries to homoglyph or typosquatted domains, and proxy logs capturing connections to known link-staging platforms such as IPFS gateways, URL shorteners, and cloud PaaS providers abused for redirecting victims.

MITRE ATT&CK

Tactic
Resource Development
Technique
T1608 Stage Capabilities
Sub-technique
T1608.005 Link Target
Canonical reference
https://attack.mitre.org/techniques/T1608/005/

KQL Detection Query

Microsoft Sentinel (KQL)
kusto
let UrlShortenerDomains = dynamic([
    "bit.ly", "tinyurl.com", "ow.ly", "is.gd", "buff.ly", "adf.ly",
    "cutt.ly", "rb.gy", "shorturl.at", "t.ly", "tiny.cc", "rebrand.ly"
]);
let SuspiciousPaaSDomains = dynamic([
    "appspot.com", "azurewebsites.net", "web.app", "firebaseapp.com",
    "netlify.app", "vercel.app", "pages.dev", "glitch.me", "replit.app",
    "workers.dev", "run.app"
]);
let IpfsGatewayDomains = dynamic([
    "ipfs.io", "cloudflare-ipfs.com", "gateway.pinata.cloud",
    "dweb.link", "cf-ipfs.com", "nftstorage.link"
]);
let CredentialHarvestKeywords = dynamic([
    "login", "signin", "sign-in", "auth", "verify", "secure",
    "account", "password", "credential", "confirm", "validate",
    "update", "webmail", "portal"
]);
// Branch 1: Delivered email containing suspicious link targets via Microsoft Defender for Office 365
EmailUrlInfo
| where TimeGenerated > ago(24h)
| extend ParsedHost = tostring(parse_url(Url).Host)
| extend ParsedPath = tostring(parse_url(Url)["Path"])
| where ParsedHost has_any (UrlShortenerDomains)
    or ParsedHost has_any (SuspiciousPaaSDomains)
    or ParsedHost has_any (IpfsGatewayDomains)
    or ParsedPath has "/ipfs/"
    or Url has "ipfs://"
| join kind=leftouter (
    EmailEvents
    | where TimeGenerated > ago(24h)
    | where DeliveryAction in ("Delivered", "DeliveredToJunk")
    | project NetworkMessageId, SenderFromAddress, SenderMailFromDomain,
              RecipientEmailAddress, Subject, DeliveryAction, ThreatNames,
              EmailDirection, LatestDeliveryLocation
) on NetworkMessageId
| where isnotempty(SenderFromAddress)
| extend LinkCategory = case(
    ParsedHost has_any (IpfsGatewayDomains) or ParsedPath has "/ipfs/" or Url has "ipfs://", "IPFS_Gateway",
    ParsedHost has_any (UrlShortenerDomains), "URLShortener",
    ParsedHost has_any (SuspiciousPaaSDomains), "SuspiciousPaaS",
    "Other"
)
| extend CredentialHarvestIndicator = Url has_any (CredentialHarvestKeywords)
| extend SuspicionScore = toint(CredentialHarvestIndicator)
    + iif(LinkCategory == "IPFS_Gateway", 2, 0)
    + iif(LinkCategory == "URLShortener", 1, 0)
    + iif(LinkCategory == "SuspiciousPaaS", 1, 0)
| project TimeGenerated, SenderFromAddress, SenderMailFromDomain,
         RecipientEmailAddress, Subject, Url, ParsedHost,
         LinkCategory, CredentialHarvestIndicator, SuspicionScore,
         DeliveryAction, ThreatNames, LatestDeliveryLocation
| sort by SuspicionScore desc, TimeGenerated desc
high severity medium confidence

Detects adversary-staged phishing link targets by analyzing delivered email URLs via Microsoft Defender for Office 365 (EmailUrlInfo + EmailEvents tables). Identifies URLs pointing to known link-staging infrastructure: IPFS gateways (decentralized hosting resistant to takedown), URL shorteners masking true destinations, and PaaS platforms (Azure App Service, GCP App Engine, Netlify, Vercel, Cloudflare Workers) commonly abused to host credential harvesting pages. A suspicion score aggregates multiple risk factors. Requires Microsoft Defender for Office 365 Plan 1 or Plan 2 with Advanced Hunting enabled.

Data Sources

Email: Email MessageNetwork Traffic: Network Connection CreationMicrosoft Defender for Office 365 — EmailUrlInfoMicrosoft Defender for Office 365 — EmailEvents

Required Tables

EmailUrlInfoEmailEvents

False Positives & Tuning

  • Legitimate marketing emails using URL shorteners (bit.ly, ow.ly) for campaign tracking — common in newsletters and vendor communications
  • Internal developer tools and previews legitimately hosted on Netlify, Vercel, or Azure App Services — especially from known SaaS vendors or IT teams
  • Security awareness training platforms (KnowBe4, Proofpoint Security Awareness) that intentionally send simulated phishing links through URL shorteners
  • IPFS-hosted decentralized applications (dApps), NFT metadata, or legitimate Web3 projects linked in business communications
  • SaaS vendor onboarding emails with redirect links through PaaS infrastructure as part of legitimate SSO flows
Download portable Sigma rule (.yml)

Other platforms for T1608.005


Testing Methodology

Validate this detection against 4 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Clone Legitimate Login Page for Credential Harvesting Infrastructure

    Expected signal: Linux process audit log (auditd) showing wget execution with --mirror flag and target URL. DNS query for your-test-domain.example.com in DNS server logs. HTTP GET requests in proxy logs originating from the test host. Sysmon EventCode=1 equivalent on Linux (if Sysmon for Linux deployed) showing wget process with full command line arguments.

  2. Test 2Stage Phishing Link Target on IPFS via Pinata

    Expected signal: Process creation log showing curl execution with api.pinata.cloud as destination. DNS query for api.pinata.cloud. Outbound HTTPS connection in network logs. The returned JSON will contain the IPFS CID (IpfsHash field) which serves as the permanent link target address accessible via https://gateway.pinata.cloud/ipfs/<CID>. When the CID link is later visited, gateway connection logs will show /ipfs/<CID> path pattern.

  3. Test 3Register URL Shortener Redirect to Phishing Page

    Expected signal: Process creation showing curl with api-ssl.bitly.com destination. DNS query for api-ssl.bitly.com. HTTPS POST request in proxy/network logs. The returned JSON contains the 'link' field with the bit.ly short URL. When this URL is subsequently sent in a test phishing email and clicked, email security tools (Defender for Office 365) will record the bit.ly URL in EmailUrlInfo, triggering the main KQL detection with LinkCategory='URLShortener'.

  4. Test 4Deploy Phishing Link Target on Azure App Service (PaaS Infrastructure)

    Expected signal: Azure Activity Log entries showing App Service creation and deployment (ResourceProvider: Microsoft.Web). If a user navigates to the *.azurewebsites.net URL, DeviceNetworkEvents shows browser connection with RemoteUrl containing 'azurewebsites.net'. Azure Monitor logs capture all access to the App Service including source IPs, user agents, and request paths.

Unlock Pro Content

Get the full detection package for T1608.005 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections