40-70
separate security and IT tools the average enterprise runs, each holding a partial and often conflicting view of the asset landscape
4+
different identifiers the same physical or virtual machine typically carries across tools (IP address, hostname, serial number, cloud instance ID), none of which is guaranteed unique or stable on its own
0 cost
to start: every source a starter CAASM build needs (CMDB, cloud console APIs, EDR console, vulnerability scanner) is a system most security teams already pay for and already have read access to

SponsoredHorizon3.ai

Proactive Security for the AI Era

NodeZero continuously and autonomously pentests infrastructure, identity, cloud, and now web applications, chaining weaknesses across every domain the way real attackers do. Every finding ships with replayable proof showing exploitable business impact, not theoretical risk.

See NodeZero WebApp in action

Ask three different teams how many servers the organization has and you will typically get three different answers, one from IT operations counting CMDB records, one from the security team counting EDR agent installs, and one from cloud operations counting running instances across accounts. None of them is wrong. Each is counting a different, partial slice of the same asset landscape, because each tool only sees what it was designed to see. Cyber Asset Attack Surface Management (CAASM) is the discipline of correlating those partial views into one inventory that can actually answer a security question, not by buying a new discovery tool, but by connecting to the tools you already run and reconciling what they each already know. This guide is a build-it-yourself implementation path: what data sources you need, how to normalize and deduplicate what they report, what correlation keys actually hold up, a starter set of queries worth building first, how to validate that the resulting inventory is trustworthy, where the approach breaks down, and the point at which a dedicated platform like Axonius or JupiterOne stops being a nice-to-have and starts being the cheaper option.

The problem: what breaks without a unified inventory

Every one of these failure patterns traces back to the same root cause, asset data locked in separate systems that never talk to each other. Shadow IT is not just externally-facing rogue infrastructure; internally, it is the developer-provisioned cloud database or the marketing team's SaaS-connected VM that never got entered into the CMDB because nobody owned that step. Missing EDR coverage is invisible by default, because an EDR console can only tell you about the endpoints it is already installed on; it has no way to report on the endpoints it isn't on, and neither does anything else unless you cross-reference against a separate source that has a full endpoint count. Orphaned cloud assets accumulate quietly, a resource is spun up for a project, the project ends, the resource keeps running because deprovisioning was never anyone's job and no tag identifies who to ask. Stale CMDB data compounds all of it: a CMDB populated once during a migration and never reconciled against what is actually running becomes a historical record, not an inventory, and every downstream process (vulnerability prioritization, patch scoping, incident response) that assumes it is current inherits that staleness.

The common thread is that no single source is wrong on its own terms. The CMDB accurately reflects what was manually entered. The EDR console accurately reflects where the agent is installed. The vulnerability scanner accurately reflects what it was able to scan. The failure only appears at the seams, in the gap between what one system reports and what another system assumes is also true. That is a correlation problem, and it does not get solved by any single source trying harder. It gets solved by treating the seams as the object you are building, which is what CAASM does.

Prerequisites: the access and data you need before you start

Before writing any correlation logic, confirm you can get read access to the following, and know which fields each one exposes:

A configuration management database or IT asset management system (ServiceNow, Device42, or equivalent) with API or database read access to its asset table, including whatever ownership and business-criticality fields it tracks. A cloud provider's native asset APIs for every account and region in use (AWS Config or the EC2/RDS/S3 describe APIs, Azure Resource Graph, GCP Cloud Asset Inventory), scoped to a read-only IAM role rather than a broader account role. Your EDR platform's management console API (CrowdStrike, SentinelOne, Microsoft Defender, or equivalent), which reports installed-agent hosts, their last check-in time, and often hardware identifiers like serial number or hardware UUID. Your vulnerability scanner's API (Tenable, Qualys, Rapid7, or equivalent) for scanned-host records, which is often the most complete network-level view of anything with an open port, whether or not it has an agent. Your identity provider (Okta, Azure AD/Entra ID, or equivalent) for user-to-device and user-to-account relationships, which matters for ownership attribution more than for the asset record itself.

You do not need all five before you start; three (CMDB, one cloud provider, one EDR or vulnerability scanner) is enough to prove the correlation logic works and produce a usable first inventory. Also confirm, before you build anything, who owns each of those source systems and whether they will tolerate a scheduled service account querying their API on a recurring basis. This is an organizational prerequisite as much as a technical one; a correlation build that nobody outside the security team knows is running tends to get its access revoked the first time someone rotates credentials without telling you.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Step 1: Select your sources and build the connectors

Start with the sources that cover the broadest slice of your environment for the least integration effort, and add narrower sources once the core correlation logic is proven. For most organizations that means building connectors in roughly this order.

Subscribe to unlock Remediation & Mitigation steps

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Step 2: Normalize before you try to correlate anything

Every source reports the same facts in a different shape, and correlation logic that runs against raw, un-normalized data will silently fail to match records that are actually the same asset. Before writing any deduplication logic, transform every source's records into one common schema with consistent field names and consistent value formats: a single hostname field (lowercase, domain suffix stripped consistently or not at all, pick one and apply it everywhere), a single IP address field in a consistent notation, a single OS field that maps vendor-specific strings ('Win10', 'Windows 10 Pro', 'Windows 10 Enterprise x64') to one canonical value, and consistent timestamp formats so 'last seen' comparisons across sources are actually comparable.

This step is unglamorous and it is where most first attempts at a DIY CAASM build lose the most time, because it is tempting to skip straight to matching logic. Skipping it means your matching logic has to carry normalization edge cases inside every comparison, which makes it slower to write, slower to run, and much harder to debug when two records that should have matched didn't. A simple normalization pass, run once per source before correlation, pays for itself the first time you have to figure out why a match failed.

Step 3: Define your correlation keys and deduplication logic

Once records are normalized, matching them into single asset profiles is a tiered problem. Use strong identifiers first, and only fall back to weaker ones with a corroborating signal.

Subscribe to unlock Remediation & Mitigation steps

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Step 4: Build a starter query set that proves the inventory is worth having

The value of a correlated inventory is entirely in the questions it can answer that no single source could answer alone. Prioritize building these queries first, since each one demonstrates the correlation working and each maps directly to a gap identified in the problem statement above.

Subscribe to unlock Remediation & Mitigation steps

Free subscribers unlock full IOC lists, Sigma detection rules, remediation steps, and every daily briefing.

Validation: confirming coverage is actually complete

A correlated inventory that looks complete and is not gives you false confidence, which is worse than the fragmented state you started from, because it stops raising questions. Validate coverage with reconciliation, not with the pipeline's own reported success rate.

Pick one source you trust as ground truth for a specific asset class, cloud billing records for cloud resource count (billing sees everything that costs money, regardless of whether it was tagged or discovered elsewhere), or your EDR vendor's own licensed-seat count for endpoints. Compare that ground-truth count against what your correlated inventory reports for the same class. A material gap in either direction, your inventory undercounting or overcounting relative to the trusted source, means either a connector is missing records or your deduplication logic is merging distinct assets incorrectly.

Second, run a manual spot check on a random sample, not a convenience sample, of 20 to 30 assets each month. Pick them randomly from the correlated inventory, then verify each one directly against its live source system: does the cloud resource still exist in the console, does the endpoint still check in to EDR, is the CMDB owner field still accurate. A pipeline that passes its own internal consistency checks can still be systematically wrong in a way that only shows up when you check against the live system directly, which is why the spot check has to bypass the pipeline's own reporting entirely.

Failure cases: where this approach breaks

Four gaps show up consistently in DIY CAASM builds, and none of them are solved by adding more sources; they require deliberate handling in the correlation logic itself.

Ephemeral cloud assets are the hardest case. A container or serverless function can exist for seconds to minutes, well inside the polling interval of most scheduled connectors. By the time your hourly cloud API pull runs, the asset is gone, and it never enters the inventory at all. Closing this gap requires event-driven ingestion (subscribing to cloud provider change events rather than polling on a schedule) rather than a faster poll, which is a meaningfully larger engineering lift and is often the point where a DIY build starts to strain.

BYOD and unmanaged personal devices rarely appear in a CMDB or carry an EDR agent, which means they have no entry point into most correlation logic built around those two sources. If BYOD is in scope for your inventory, your identity provider's device enrollment records (MDM-enrolled personal devices, conditional access device records) become the primary source for this asset class, not a secondary enrichment source.

Assets that exist in exactly one source with nothing to corroborate against are a genuine ambiguity, not a bug in your logic. Some of them are real single-source assets. Others are correlation failures where a normalization gap prevented a match that should have happened. Both need a human to look at them; neither should be resolved automatically by a rule that guesses.

False-dedup collisions happen when correlation logic is tuned too aggressively on weak keys, most often hostname or IP address, and merges two genuinely distinct assets into one profile. This is worse than a missed match, because it actively hides one of the two assets from every downstream query. It shows up as an asset with contradictory attributes (two different OS versions, two different last-seen timestamps that don't make sense together) and is the main reason Step 3's tiered approach exists: tightening the confidence threshold on weak-key matches is the fix, not loosening it.

Security tradeoffs: access scope, freshness versus cost, and the build-versus-buy decision

A CAASM build, whether DIY or a dedicated platform, concentrates read access across nearly every sensitive system in the environment, CMDB, cloud accounts, EDR, vulnerability scanner, identity provider, into one place. That concentration is itself a security decision, not a side effect. The correlation datastore and the service accounts feeding it need access controls, audit logging, and credential rotation on par with what you would apply to a SIEM or a secrets vault, because compromising the correlation layer gives an attacker a single, consolidated map of the environment that would otherwise take reconnaissance across five separate systems to assemble. Scope every connector's credentials to read-only and to the narrowest object types the queries actually need; a connector that requests broader access than the query set uses is unnecessary exposure with no corresponding benefit.

Data freshness is a direct cost tradeoff, not a free dial to turn up. Polling every source hourly instead of daily catches ephemeral assets and rapid change faster, but multiplies API call volume, and most CMDB, EDR, and vulnerability scanner APIs enforce rate limits that a naive high-frequency poller will hit. Match polling frequency to how fast each specific source actually changes rather than applying one global interval; a CMDB updated by manual data entry does not need hourly polling, an auto-scaling cloud account does.

The build-versus-buy decision comes down to where your correlation problem's complexity actually sits. The DIY path in this guide covers a team correlating three to six sources with daily-to-hourly freshness needs and an engineering team able to own a scheduled ETL pipeline as ongoing infrastructure. A dedicated platform like Axonius or JupiterOne earns its cost once you cross into managing correlation logic across eight or more sources, need near-real-time visibility into ephemeral and ContainerOps-scale environments that requires event-driven rather than polling architecture, or need the inventory's query interface exposed to non-engineering stakeholders (compliance, IT operations, audit) who cannot write SQL against a raw datastore and need a maintained UI instead. If your organization is also building out a continuous threat exposure management program, a platform's built-in workflow integrations (auto-generating remediation tickets, feeding prioritization scoring) can shortcut work your CTEM operating model would otherwise require you to hand-build on top of a DIY correlation layer. Neither path is categorically correct; the DIY approach is the right starting point for most teams because it proves the value of correlation with tools and access you already have, and the decision to platform-ize should be driven by where your specific gaps (source count, freshness, or stakeholder access) actually are, not by a fixed team-size or asset-count threshold.

The bottom line

CAASM is not a product you either have or don't, it is a correlation capability you can start building today with the CMDB, cloud console, EDR, and vulnerability scanner access your team already has. The work that actually matters is unglamorous: normalize every source into one schema, use tiered correlation keys that treat hostname and IP address as unreliable, build the starter query set (internet-facing hosts with no EDR agent, cloud resources with no owner, assets seen by only one source) that proves the correlation is worth maintaining, and validate coverage against ground truth rather than trusting the pipeline's own reported success. The DIY path scales further than most teams expect before a dedicated platform earns its cost, and the signal that it is time to buy one is specific: source count past eight or ten, a genuine need for event-driven freshness on ephemeral assets, or stakeholders outside engineering who need to query the inventory themselves. Until you hit one of those, the fastest path to a correlated inventory is the access you already have and a connector you can build this week.

Frequently asked questions

What is CAASM and how is it different from EASM?

CAASM (Cyber Asset Attack Surface Management) correlates asset data your organization already has, from CMDB, cloud APIs, EDR agents, vulnerability scanners, and identity providers, into one queryable inventory of assets you already know about but currently see through five or six disconnected tools. EASM (External Attack Surface Management) works the opposite direction: it scans the internet from an attacker's vantage point to discover internet-facing assets you may not know exist at all, including shadow IT and forgotten infrastructure with no internal record. CAASM answers 'what do we have and is it covered,' EASM answers 'what does an attacker see that we don't know about.' Our [EASM guide](/blog/external-attack-surface-management-easm) covers that outside-in discovery process in detail; the two are complementary, not substitutes for each other.

Do I need to buy a CAASM platform like Axonius or JupiterOne to do this?

No, not to start. A team with API access to its CMDB, cloud provider, EDR console, and vulnerability scanner can build a working correlation layer with a scheduled ETL job, a normalized data store, and a handful of SQL or Python queries. This guide's numbered procedure covers exactly that build. A dedicated platform earns its cost later, typically once you are maintaining correlation logic across more than eight to ten sources, need near-real-time updates on ephemeral cloud assets, or need the query interface exposed to non-engineering stakeholders like compliance and IT operations who cannot write their own queries against a raw data store.

What are the correlation keys used to deduplicate assets across sources?

The strongest correlation keys are ones that are globally unique and hard to spoof: cloud resource IDs (an AWS instance ID or Azure resource ID), MAC addresses, and hardware serial numbers or BIOS UUIDs reported by EDR and CMDB tools. Weaker but still useful keys are hostname and IP address, both of which are reused over time (DHCP lease churn, container restarts, VM re-provisioning) and require a secondary signal, such as a timestamp window or a shared cloud tag, before you trust a match on them alone. A dedup engine that matches only on IP address or hostname will produce false merges as soon as an address gets reassigned.

How do I know my asset inventory actually has complete coverage?

Run a two-way reconciliation, not a one-way count. Pick a source you trust for a specific asset class (cloud billing for cloud resources, your EDR console's own deployment count for endpoints) and check that every asset it reports appears in your correlated inventory, and separately that every asset in your inventory still exists in at least one live source. A raw count matching between two tools does not prove coverage; two tools can each be missing a different 10% and still agree on a total. Spot-check a random sample of 20 to 30 assets by hand each month against the live source system rather than trusting the automated pipeline's own success metrics.

What kinds of assets does this approach typically miss?

Ephemeral cloud resources (containers, serverless functions, and auto-scaled instances that can live for minutes) are the hardest gap, because most connectors poll on a schedule measured in hours and the asset is gone before the next sync. BYOD and unmanaged personal devices are a second common gap, since they rarely enroll in the CMDB or EDR agent that most correlation logic depends on as an entry point. A third gap is assets that exist in exactly one source with no corroborating signal elsewhere, which a correlation engine cannot confirm or deny and has to surface as a manual review item rather than silently drop or silently trust.

What access does a CAASM build require, and is that a security risk on its own?

Read-only API access across your CMDB, cloud accounts, EDR console, vulnerability scanner, and identity provider, which in aggregate is a broad view into nearly every sensitive system in the environment even without write permissions. That concentration is a real tradeoff: the correlation layer itself becomes a high-value target, and it needs the same access controls, logging, and credential rotation discipline you would apply to a SIEM or a secrets vault, not the lighter treatment an internal reporting tool might get. Scope each connector's credentials to read-only and to the specific object types you need, and treat the datastore holding the merged inventory as sensitive infrastructure in its own right.

Sources & references

  1. Praetorian, Cyber Asset Attack Surface Management (CAASM)
  2. CyberProof, Cyber Asset Attack Surface Management: Principles, Architecture, and Practice
  3. CIS Controls v8, Control 1: Inventory and Control of Enterprise Assets
  4. NIST SP 800-53 Rev. 5, CM-8: System Component Inventory

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, daily, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.

Giveaway: InfoSec World 2026 All Access Pass ($3,895 value)

Details →
Daily Briefing

Subscribe to enter the giveaway

Every subscriber is automatically entered. You also get daily threat intel every morning: zero-days, ransomware, and nation-state campaigns. Free. No spam.

Already subscribed? You're already entered.

Giveaway

Win a $3,895 InfoSec World 2026 pass.