Introduction
Shadow IT is not always a rogue employee using an unsanctioned SaaS tool.
In external security, shadow IT assets are often more basic: a forgotten staging app, a vendor CNAME nobody owns, a preview deployment, an old marketing microsite, a public cloud bucket, a support portal, an exposed admin panel, or a subdomain created during a project that ended months ago.
Attackers do not need your internal inventory to find these assets. They use certificate transparency logs, DNS data, passive DNS, internet-wide service indexes, archived URLs, cloud naming patterns, and simple HTTP fingerprinting.
To detect shadow IT assets before attackers do, defenders need the same outside-in visibility, but with ownership review, safe scoping, remediation workflow, and continuous monitoring.
What shadow IT assets look like from the outside
A shadow IT asset is any asset that is reachable, discoverable, or attributable to your organization but missing from your approved inventory or ownership model.
The key word is not always “unauthorized.” Some shadow assets were authorized at the time. They became shadow IT because ownership, documentation, or lifecycle management disappeared.
From an attacker's view, the difference between production and forgotten infrastructure does not matter. If it resolves, responds, leaks information, or points to a claimable third-party resource, it becomes part of the attack surface.
-
Forgotten subdomains — Examples include old-api.example.com, staging.example.com, beta.example.com, docs-v1.example.com, status-old.example.com, and campaign microsites that are no longer tracked.
-
Vendor-managed systems — Support portals, help centers, documentation tools, status pages, analytics systems, community platforms, and marketing platforms often sit behind CNAME records.
-
Preview and review apps — CI/CD platforms, serverless platforms, and hosting providers can create temporary internet-facing URLs quickly. Some later receive custom domains or DNS records that outlive the project.
-
Unmanaged cloud resources — Public storage, exposed cloud endpoints, unmanaged load balancers, forgotten virtual machines, old Firebase-style projects, and test environments can remain reachable after the original owner moves on.
-
Exposed services — Database ports, cache services, admin interfaces, debug panels, dashboards, VPN portals, Jenkins, Grafana, Kibana, Airflow, and management endpoints are high-priority review targets when internet-facing.
-
Stale DNS records — A DNS record can keep pointing to a retired app, deleted vendor resource, old CDN endpoint, abandoned cloud service, or host nobody owns.
What you need before you start
Shadow IT detection should start with a clear authorized scope. Do not scan or probe third-party domains that your organization does not own or have permission to assess.
The goal is to discover assets, validate ownership, and reduce exposure. It is not to run aggressive testing against unknown systems.
Start with passive sources, then move to light-touch validation for assets you own.
-
Approved seed domains — List root domains and important brand domains your organization owns. ```text example.com example.io exampleapp.com example-support.com ```
-
Known cloud and vendor context — Collect known cloud providers, CDNs, support tools, documentation platforms, status-page providers, hosting platforms, and marketing systems. This helps separate expected vendor assets from unknown ones.
-
Ownership data — Prepare a simple owner map: domain owner, DNS owner, infrastructure owner, application owner, security contact, and vendor owner.
-
Safe tooling — Use passive data sources first: CT logs, DNS, passive DNS, WHOIS context, cloud account inventory, vendor admin panels, and existing logs. Use active checks only on owned or explicitly approved assets.
-
Passive DNS caveat — Use your approved passive DNS provider or EASM platform to compare historical names against current DNS. Treat passive DNS as evidence for ownership review, not proof that a host is currently live.
-
Baseline storage — Keep results in a file, spreadsheet, ticketing system, CMDB, or EASM platform so later scans can show what changed instead of rediscovering the same assets.
Step 1 — build an approved domain baseline
Start with the domains your organization knows it owns. This becomes the seed list for discovery.
Do not assume your public website domain is the only relevant root. Companies often have product domains, acquisition domains, help-center domains, regional domains, campaign domains, and old brand domains.
-
Create a seed-domain file — ```bash cat > seed-domains.txt <<'EOF' example.com example.io exampleapp.com example-support.com EOF ``` Expected output: ```text seed-domains.txt contains approved root domains for discovery. ```
-
Add owner context — ```csv domain,owner,reason,status example.com,platform,primary production domain,active example.io,engineering,developer tooling domain,active exampleapp.com,marketing,legacy product campaign,review example-support.com,support,help center domain,active ``` This owner context makes later findings actionable.
-
Review domain registration and DNS authority — Confirm who controls registrar access, DNS hosting, certificate issuance, and vendor DNS changes. Shadow IT often appears when DNS can be modified without ownership review.
Step 2 — detect shadow IT assets with certificate transparency
Certificate Transparency logs are one of the fastest ways to discover subdomains that were never added to an internal inventory.
When a public TLS certificate includes a DNS name in its Subject Alternative Name field, that name can become discoverable through CT search tools.
Use CT data as a discovery source, not proof of vulnerability. A name in CT may be old, retired, wildcard-derived, duplicated, or no longer resolving.
-
Pull CT names for each seed domain — ```bash while read -r domain; do curl -s "https://crt.sh/?q=%25.$domain&output=json" \ | jq -r '.[].name_value' 2>/dev/null \ | sed 's/\*\.//g' done < seed-domains.txt | sort -u > ct-subdomains.txt ``` Expected output: ```text api.example.com admin-old.example.com docs.example.com grafana-staging.example.com status.example-support.com ```
-
Flag risky names for review — ```bash grep -Ei 'admin|stage|staging|dev|test|grafana|kibana|jenkins|vpn|debug|backup|legacy|origin|internal' ct-subdomains.txt ``` Expected output: ```text admin-old.example.com grafana-staging.example.com vpn-legacy.example.com ``` Treat this as a review queue, not proof of exposure.
-
What to do next — Assign an owner, confirm whether the hostname should exist, check whether it still resolves, and decide whether it should remain public.
Step 3 — resolve discovered hosts and find live assets
A discovered hostname is not always live. DNS resolution separates historical names from currently reachable assets.
Start with DNS resolution before HTTP checks. This avoids wasting time on stale certificate names that no longer point anywhere.
-
Resolve A records — ```bash while read -r host; do ip=$(dig +short "$host" A | head -n 1) if [ -n "$ip" ]; then echo "$host,$ip" fi done < ct-subdomains.txt | sort -u > live-a-records.csv ``` Expected output: ```csv api.example.com,203.0.113.20 grafana-staging.example.com,203.0.113.45 vpn-legacy.example.com,203.0.113.70 ```
-
Resolve CNAME records — ```bash while read -r host; do cname=$(dig +short "$host" CNAME) if [ -n "$cname" ]; then echo "$host,$cname" fi done < ct-subdomains.txt | sort -u > cname-records.csv ``` Expected output: ```csv docs.example.com,example-docs.vendor.example.net. status.example-support.com,statuspage.example.net. old-help.example.com,old-help.herokudns.com. ```
-
Review stale or unknown CNAMEs — A CNAME pointing to a deleted vendor resource, retired hosting platform, unknown SaaS provider, or ownerless app should be reviewed. It may be a takeover candidate, but provider behavior and ownership must be validated before assigning high confidence.
Step 4 — fingerprint web assets safely
After DNS resolution, collect light HTTP evidence from owned assets. The goal is not exploitation; it is identification and ownership review.
Look for status codes, redirects, server headers, certificate validation failures, missing HTTPS, missing HSTS, default pages, login panels, exposed dashboards, and vendor-branded responses.
First run without ignoring TLS validation. Use `-k` only as a fallback for identification, and record that TLS validation failed.
-
Collect HTTP headers with TLS validation first — ```bash cut -d, -f1 live-a-records.csv | while read -r host; do echo "### $host" curl -I --max-time 5 "https://$host" || curl -k -I --max-time 5 "https://$host" echo done > http-fingerprints.txt ``` Expected output: ```text ### grafana-staging.example.com HTTP/2 200 server: nginx content-type: text/html ### vpn-legacy.example.com HTTP/1.1 302 Found location: /login server: Apache ```
-
Flag likely admin or dashboard assets — ```bash grep -Ei 'grafana|kibana|jenkins|airflow|admin|dashboard|login|phpmyadmin|prometheus' http-fingerprints.txt ``` Expected output: ```text ### grafana-staging.example.com location: /login ```
-
What to do next — Confirm whether the asset is expected, whether it has an owner, whether access is restricted, and whether it should remain internet-facing. Do not attempt login, brute force, exploitation, or bypass testing unless it is part of an approved assessment.
Step 5 — check for exposed services on owned IPs
Shadow IT is not limited to websites. Unknown hosts can expose databases, caches, admin ports, VPN services, remote access ports, or development tools.
Only scan IPs you own or are explicitly authorized to assess. Keep scans conservative and focused on identification.
Use a conservative timing profile and avoid broad port sweeps unless the IP range and test window are approved.
-
Create an approved IP list — ```bash cut -d, -f2 live-a-records.csv | sort -u > approved-ips.txt ``` Expected output: ```text 203.0.113.20 203.0.113.45 203.0.113.70 ```
-
Run a limited service check — ```bash nmap -Pn -sV --version-light -T2 -iL approved-ips.txt \ -p 80,443,8080,8443,22,3389,5432,3306,6379,27017 \ -oN owned-service-check.txt ``` Expected output: ```text 203.0.113.45 443/tcp open https nginx 203.0.113.70 8443/tcp open https Apache 203.0.113.70 6379/tcp open redis ```
-
Prioritize high-risk exposures — Internet-facing database, cache, admin, remote access, and management ports should be reviewed quickly. A reachable service is not automatically exploitable, but it is rarely acceptable without explicit ownership and controls.
Step 6 — validate ownership and classify findings
Discovery without ownership creates noise. The difference between useful shadow IT detection and a messy asset dump is classification.
Every discovered asset should end in one of four states: owned and expected, owned but risky, unknown and needs validation, or not owned and out of scope.
Do not inflate uncertain evidence into confirmed vulnerabilities. A stale-looking CNAME, login panel, or service banner often needs human validation.
-
Use a simple classification table — ```csv asset,evidence,owner,status,next_action grafana-staging.example.com,CT + HTTPS login,unknown,needs_validation,find owner and restrict access old-help.example.com,CNAME to old vendor,unknown,needs_validation,confirm vendor ownership api.example.com,CT + HTTPS,platform,owned_expected,keep monitored 203.0.113.70:6379,nmap service banner,platform,owned_risky,restrict network access ```
-
Recommended statuses — ```text owned_expected Asset is known, owned, and should remain public. owned_risky Asset is owned but needs remediation. needs_validation Evidence is plausible but not confirmed. out_of_scope Asset is not owned or not authorized for testing. retire Asset should be removed after owner approval. ```
-
What to do next — Assign owners, create remediation tickets, remove stale DNS, restrict public access, update asset inventory, and add important assets to monitoring.
Step 7 — create a reviewed shadow IT baseline
A baseline is not just a list of discovered assets. It is a reviewed state that separates expected assets, risky owned assets, unknown candidates, retired assets, and out-of-scope items.
This baseline becomes the comparison point for future monitoring.
Without a reviewed baseline, every scan repeats the same unresolved findings and makes new shadow IT harder to spot.
-
Create a baseline file — ```bash cp ct-subdomains.txt baseline-ct-subdomains.txt cp live-a-records.csv baseline-live-a-records.csv cp cname-records.csv baseline-cname-records.csv cp owned-service-check.txt baseline-owned-service-check.txt ``` Expected output: ```text Baseline files created for later comparison. ```
-
Record accepted and risky assets — ```csv asset,status,owner,next_review api.example.com,owned_expected,platform,2026-06-15 grafana-staging.example.com,owned_risky,engineering,2026-05-20 old-help.example.com,needs_validation,support,2026-05-18 ```
-
What to do next — Review the baseline with DNS, platform, cloud, application, support, and marketing owners. Remove retired assets and add critical systems to monitoring.
Common mistakes when detecting shadow IT assets
Most shadow IT programs fail because they stop at discovery.
Finding assets is only the first step. The hard part is ownership, validation, remediation, and monitoring.
-
Treating every discovered asset as confirmed risk — CT names, CNAMEs, banners, and service fingerprints are evidence. They still need validation before being labeled as confirmed vulnerabilities.
-
Scanning outside approved scope — Do not actively probe third-party domains, vendors, customer environments, or lookalike domains without permission. Keep active checks limited to owned or explicitly approved assets.
-
Ignoring stale DNS — A DNS record can outlive the app it once pointed to. Stale CNAMEs and old vendor records are common sources of avoidable exposure.
-
Skipping ownership review — A finding without an owner becomes a report item, not a fix. Every important asset should map to a person, team, or vendor contact.
-
Relying only on cloud inventory — Cloud inventory is important, but it may miss vendor-managed subdomains, marketing sites, acquired domains, external SaaS portals, and assets created outside the main cloud account.
-
Running one scan and stopping — Shadow IT is created by drift. A one-time inventory becomes stale as soon as teams change DNS, deploy apps, add vendors, or create new certificates.
How to automate and monitor shadow IT detection continuously
One-time discovery is useful, but shadow IT appears through change: new vendors, new certificates, new deployments, new DNS records, cloud experiments, and ownership changes.
The fix is to compare new results against a reviewed baseline and alert only on meaningful changes.
Good automation should create reviewable evidence, not noisy alerts that teams ignore.
-
Compare CT baselines — ```bash # After running CT discovery again: comm -13 baseline-ct-subdomains.txt ct-subdomains.txt > new-shadow-candidates.txt ``` Expected output: ```text new-admin.example.com vendor-test.example.com staging-api.example.io ```
-
Sample alert output — ```json { "asset": "new-admin.example.com", "source": "certificate_transparency", "status": "needs_validation", "reason": "New certificate-backed hostname contains admin keyword", "next_action": "Assign owner and verify whether public access is expected" } ```
-
Track new DNS records — Monitor for new subdomains, new CNAMEs, new MX records, new TXT records, and ownership changes. Vendor onboarding often appears first in DNS.
-
Track new exposed services — Alert when a new port appears on an owned IP, especially database, cache, admin, remote access, and management ports.
-
Track ownership gaps — An asset with no owner should not remain in the inventory indefinitely. Unknown owner is a workflow failure, not just a documentation issue.
-
Use verified-domain monitoring — Continuous monitoring should be scoped to verified domains and approved assets. This keeps detection useful, safe, and tied to systems your organization controls.
Where ExternalSight fits
ExternalSight helps teams scan internet-facing domains and monitor verified domains for external exposure changes.
For shadow IT detection, ExternalSight combines domain-focused discovery with checks across certificate transparency, DNS, subdomains, passive DNS, TLS, HTTP headers, subdomain takeover candidates, exposed services, cloud exposure signals, admin panels, credentials, secrets, and related external evidence.
It also supports issue classification, remediation planning, historical comparison, alerts, PDF export, JSON export on supported plans, and scan coverage reporting when scanners or external sources are unavailable.
ExternalSight should not be treated as a guarantee of complete asset discovery or as a replacement for internal asset inventory, cloud-native security tooling, vulnerability management, SIEM, SOC, WAF, or penetration testing. It is useful because it turns outside-in evidence into a reviewable workflow for owned domains.
Shadow IT detection checklist
Use this checklist to decide whether your process is ready for continuous shadow IT detection.
-
Scope — Do you have an approved list of domains, IP ranges, brands, and cloud accounts?
-
Discovery — Are you using CT logs, DNS, passive DNS, known cloud inventory, vendor records, and public web evidence?
-
Resolution — Do you separate historical names from currently resolving hosts?
-
Service visibility — Can you identify new web apps, admin panels, exposed services, and high-risk ports on owned assets?
-
Ownership — Does every important asset have an owner, status, and next action?
-
Validation — Do you separate confirmed findings from candidates that need review?
-
Remediation — Can teams remove stale DNS, restrict exposed services, retire old apps, and update access controls?
-
Monitoring — Do you compare new results against a reviewed baseline and alert on meaningful changes?
-
Coverage — Can you see when a source, scanner, API, or integration did not run successfully?
Key takeaways
- Shadow IT assets are often normal systems that lost ownership: staging apps, vendor CNAMEs, preview deployments, support portals, old domains, exposed services, and forgotten cloud resources.
- Attackers use public evidence such as CT logs, DNS, passive DNS, archived URLs, service banners, and internet-wide indexes to find assets missing from your inventory.
- Defenders should start with passive discovery, then run light-touch validation only on owned or approved assets.
- The most important step is ownership. A discovered asset without an owner cannot be fixed, retired, or accepted responsibly.
- Do not treat every signal as a confirmed vulnerability. Use a needs-validation state for plausible but unconfirmed evidence.
- Continuous monitoring is necessary because shadow IT is created by drift: new vendors, DNS changes, cloud experiments, deployments, and certificate issuance.
- ExternalSight can help combine external discovery, verified-domain monitoring, issue classification, remediation planning, historical comparison, alerts, exports, and coverage-aware reporting.
Frequently asked questions
- What are shadow IT assets?
- Shadow IT assets are systems, services, domains, subdomains, cloud resources, vendor portals, or applications that are connected to the organization but missing from approved inventory or ownership tracking. They may be unauthorized, forgotten, unmanaged, or simply undocumented.
- How do attackers find shadow IT assets?
- Attackers use public sources such as certificate transparency logs, DNS, passive DNS, WHOIS context, archived URLs, internet-wide service indexes, cloud naming patterns, and basic HTTP fingerprinting to find assets your team may not have inventoried.
- How can I detect shadow IT assets safely?
- Start with approved domains and passive sources. Use CT logs, DNS, passive DNS, and known cloud or vendor inventory first. Only run active checks against assets you own or are explicitly authorized to assess.
- What is the difference between shadow IT and attack surface drift?
- Shadow IT refers to unknown or unmanaged assets. Attack surface drift is the broader process of external exposure changing over time. Shadow IT is one common result of attack surface drift.
- What should I do after finding a shadow IT asset?
- Validate ownership, classify the asset, assign a responsible team, decide whether it should remain public, remove stale DNS if needed, restrict access, retire unused systems, and add important assets to monitoring.
- Can ExternalSight detect all shadow IT assets?
- No tool can guarantee complete shadow IT discovery. ExternalSight helps by scanning internet-facing domains, monitoring verified domains, combining external discovery sources, classifying findings, planning remediation, tracking history, and reporting scan coverage when sources or scanners are unavailable.
Find your unknown external assets
ExternalSight helps teams scan internet-facing domains and monitor verified domains for external exposure changes. It combines certificate transparency discovery, DNS and TLS checks, subdomain discovery, passive DNS, takeover candidate detection, exposed service checks, cloud exposure signals, issue classification, remediation planning, historical comparison, alerts, PDF export, JSON export on supported plans, and coverage-aware reporting when scanners or external sources are unavailable.