Skip to main content

Host Discovery

This page describes exactly what the Infracast Agent discovers on each host and how that data is reported and used.

Discovery Cycle

Every scan cycle (default: 5 minutes), the agent runs all enabled collectors in parallel:

graph LR
A[Scan Trigger] --> B[Processes]
A --> C[Ports]
A --> D[Software]
A --> E[Firewall]
A --> F[Connections]
A --> G[Users]
A --> H[File Integrity]
B & C & D & E & F & G & H --> I[Compile Report]
I --> J[POST /api/v1/agents/{id}/report]

Package Manager Discovery

The agent queries every supported package manager and consolidates results into a unified software inventory.

Linux Package Managers

Package ManagerDiscovery MethodExample
apt / dpkgdpkg-query -W -f='${Package} ${Version}'openssl 3.0.2-0ubuntu1.9
yum / dnf / rpmrpm -qa --queryformat '%{NAME} %{VERSION}-%{RELEASE}'httpd 2.4.57-5.el9
pip / pip3pip list --format=jsonrequests 2.28.2
npm (global)npm list -g --json --depth=0pm2 5.3.0
gemgem list --no-versions + gem inforails 7.1.2
cargocargo install --listripgrep 14.0.3
goGOPATH binary scanning + go version -mgolang.org/x/crypto v0.17.0

Windows

SourceDiscovery Method
Installed ProgramsRegistry: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
32-bit ProgramsRegistry: HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Per-user ProgramsRegistry: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Windows FeaturesGet-WindowsFeature (Server) / Get-WindowsOptionalFeature

macOS

SourceDiscovery Method
Homebrewbrew list --versions
Applications/Applications/*.appInfo.plist
pip / npm / gemSame as Linux

Reported Fields per Package

{
"name": "openssl",
"version": "3.0.2",
"source": "apt",
"installed_at": "2024-01-15T10:00:00Z",
"cves": ["CVE-2023-5678"]
}

Running Processes and Services

What's Collected

{
"pid": 1234,
"name": "nginx",
"user": "www-data",
"cmdline": "/usr/sbin/nginx -g daemon off;",
"cpu_percent": 0.5,
"memory_mb": 12,
"status": "running",
"parent_pid": 1,
"start_time": "2026-04-01T00:00:00Z"
}

Linux Process Collection

  • Source: /proc/{pid}/status, /proc/{pid}/cmdline, /proc/{pid}/stat
  • Runs as: root (required for full cmdline access of other users' processes)
  • Captures: all processes visible in /proc

Windows Process Collection

  • Source: WMI Win32_Process class
  • Runs as: SYSTEM or Administrator
  • Captures: all processes, service names, executable paths

Systemd Services (Linux)

On systems with systemd, the agent also collects service state:

{
"name": "nginx.service",
"status": "active",
"enabled": true,
"description": "A high performance web server"
}

Network Configuration

Listening Ports

Identifies all ports with active listeners — key for attack surface mapping:

{
"port": 443,
"protocol": "tcp",
"address": "0.0.0.0",
"pid": 1234,
"process": "nginx"
}
AddressMeaning
0.0.0.0Listening on all interfaces (internet-facing risk)
127.0.0.1Localhost only (lower risk)
10.0.0.5Specific interface
::IPv6 all interfaces

Collection method:

  • Linux: /proc/net/tcp, /proc/net/tcp6, /proc/net/udp + inode-to-pid mapping
  • Windows: GetExtendedTcpTable, GetExtendedUdpTable

Active Connections

{
"local_address": "10.0.0.5:443",
"remote_address": "203.0.113.42:52341",
"state": "ESTABLISHED",
"pid": 1234,
"process": "nginx"
}

Connection states: ESTABLISHED, TIME_WAIT, CLOSE_WAIT, LISTEN, SYN_SENT

Network Interfaces

{
"name": "eth0",
"mac": "02:ab:cd:ef:12:34",
"ipv4": ["10.0.0.5/24"],
"ipv6": ["fe80::1/64"],
"mtu": 9001,
"state": "up"
}

Firewall Rules

Linux (iptables)

The agent dumps all iptables chains and rules:

{
"chain": "INPUT",
"action": "ACCEPT",
"protocol": "tcp",
"source": "0.0.0.0/0",
"destination": "0.0.0.0/0",
"dport": "22",
"comment": "SSH access"
}

Also supports nftables on systems that have migrated.

Windows Firewall

{
"name": "Allow HTTPS Inbound",
"direction": "Inbound",
"action": "Allow",
"protocol": "TCP",
"local_port": "443",
"enabled": true,
"profile": "Domain,Private,Public"
}

User Accounts and Sudo Access

Local Users

{
"username": "deploy",
"uid": 1001,
"gid": 1001,
"home": "/home/deploy",
"shell": "/bin/bash",
"last_login": "2026-04-15T10:30:00Z",
"password_status": "set"
}

The agent reads /etc/passwd on Linux and Get-LocalUser on Windows. Passwords are never collected — only metadata.

Sudo Access (Linux)

{
"user": "deploy",
"sudo_rules": ["ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx"]
}

Collected by parsing /etc/sudoers and /etc/sudoers.d/*. This feeds directly into STIG and CIS compliance checks.

File Integrity Monitoring

When enabled, the agent computes SHA-256 checksums of configured files:

{
"path": "/etc/ssh/sshd_config",
"sha256": "a1b2c3d4...",
"size_bytes": 3226,
"modified_at": "2026-03-01T08:00:00Z",
"permissions": "0644",
"owner": "root",
"group": "root"
}

Change detection: When a file's checksum changes between scans, Infracast creates a finding tagged config-drift. The finding includes the previous and new hash for audit trail purposes.

Report Submission

After each scan, the agent submits a complete report to the server:

POST /api/v1/agents/{agentID}/report

The server:

  1. Updates the host's asset graph node with the latest data
  2. Correlates software packages against the CVE/NVD database
  3. Creates or resolves findings for newly discovered or remediated issues
  4. Updates SBOM for the host
  5. Triggers compliance re-evaluation if applicable

Reports are compressed (gzip) before transmission. A typical Linux server report with ~200 packages is approximately 50 KB compressed.

Asset Graph Integration

Agent data enriches existing nodes in the asset graph. For example, an EC2 instance discovered by the AWS plugin gains additional properties from the agent:

aws:us-east-1:ec2.instance:i-0abc123
├── Properties (from AWS plugin)
│ ├── instance_type: t3.medium
│ ├── vpc_id: vpc-abc
│ └── security_groups: [...]
└── Agent Data (from Infracast Agent)
├── software: [nginx 1.24.0, openssl 3.0.2, ...]
├── listening_ports: [80, 443]
├── running_services: [nginx, sshd, ...]
└── cves: [CVE-2023-XXXX (HIGH)]

This combined view gives you the complete picture of each host — cloud metadata plus real runtime state.