payload

package
v0.24.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 24, 2026 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package payload defines the v1 ingest envelope (mirrors api/ingest.v1.schema.json). Facts live only under components.*; per-port firewall posture is listeners[].firewall_rule.

Index

Constants

View Source
const (
	FirewallRuleFiltered   = "filtered"
	FirewallRuleUnfiltered = "unfiltered"
	FirewallRuleBlocked    = "blocked"
	FirewallRuleUnknown    = "unknown"
)

Variables

This section is empty.

Functions

func AgentUtcRFC3339

func AgentUtcRFC3339(t time.Time) string

Types

type ApacheHttpdPosture added in v0.5.0

type ApacheHttpdPosture struct {
	Detected     bool    `json:"detected"`
	BinPath      string  `json:"bin_path"`
	Version      *string `json:"version"`
	ServiceState *string `json:"service_state"`

	ListenBindings             []ApacheListenBinding `json:"listen_bindings"`
	ListenBindingDiscrepancies []string              `json:"listen_binding_discrepancies"`

	SSLModuleLoaded     *bool   `json:"ssl_module_loaded"`
	SSLProtocol         *string `json:"ssl_protocol"`
	SSLCipherSuite      *string `json:"ssl_cipher_suite"`
	HstsHeader          *string `json:"hsts_header"`
	HTTPToHTTPSRedirect *bool   `json:"http_to_https_redirect"`

	RiskyModulesLoaded       []string `json:"risky_modules_loaded"`
	ProtectiveModulesMissing []string `json:"protective_modules_missing"`

	ServerTokens               *string  `json:"server_tokens"`
	ServerSignature            *string  `json:"server_signature"`
	TraceEnabled               *bool    `json:"trace_enabled"`
	SensitivePathsUnrestricted []string `json:"sensitive_paths_unrestricted"`

	IndexesEnabledPaths             []string `json:"indexes_enabled_paths"`
	FollowSymlinksUnrestrictedPaths []string `json:"follow_symlinks_unrestricted_paths"`
	AllowOverrideAllPaths           []string `json:"allow_override_all_paths"`

	MissingSecurityHeaders []string `json:"missing_security_headers"`

	RunUser              *string `json:"run_user"`
	DocrootWorldWritable *bool   `json:"docroot_world_writable"`
	IsContainerized      *bool   `json:"is_containerized"`

	OpenForwardProxy *bool `json:"open_forward_proxy"`

	CollectorWarnings []string `json:"collector_warnings"`

	VhostsSummary *ApacheVhostsSummary `json:"vhosts_summary"`
	Error         string               `json:"error,omitempty"`
}

ApacheHttpdPosture is allowlisted httpd/apache2 security posture (no secrets, no full raw config dump).

type ApacheListenBinding added in v0.5.0

type ApacheListenBinding struct {
	Bind string `json:"bind"`
	Port int    `json:"port"`
}

ApacheListenBinding is one Listen / VirtualHost binding from -S output.

type ApacheVhostsSummary added in v0.5.0

type ApacheVhostsSummary struct {
	VhostCount  int      `json:"vhost_count"`
	ServerNames []string `json:"server_names,omitempty"`
}

ApacheVhostsSummary is vhost count plus capped server names from apache/httpd -S.

type AtBatchPosture added in v0.3.3

type AtBatchPosture struct {
	AtdUnitActive     *bool  `json:"atd_unit_active,omitempty"`
	AtAllowPresent    bool   `json:"at_allow_present,omitempty"`
	AtDenyPresent     bool   `json:"at_deny_present,omitempty"`
	AtAllowModeOctal  string `json:"at_allow_mode_octal,omitempty"`
	AtDenyModeOctal   string `json:"at_deny_mode_octal,omitempty"`
	SpoolPathUsed     string `json:"spool_path_used,omitempty"`
	SpoolDirModeOctal string `json:"spool_dir_mode_octal,omitempty"`
	Error             string `json:"error,omitempty"`
}

AtBatchPosture summarizes atd and at.allow / at.deny / spool exposure hints.

type AuditCheck

type AuditCheck struct {
	ID          string `json:"id"`
	Status      string `json:"status"`
	Description string `json:"description"`
}

type AuditRulesFileHash added in v0.3.3

type AuditRulesFileHash struct {
	Path   string `json:"path"`
	Sha256 string `json:"sha256"`
}

AuditRulesFileHash is a path plus digest of an on-disk rules fragment (bounded read).

type AuditSection

type AuditSection struct {
	ID     string       `json:"id"`
	Title  string       `json:"title"`
	Checks []AuditCheck `json:"checks"`
}

type AuditdPosture added in v0.3.3

type AuditdPosture struct {
	UnitActive                *bool                `json:"unit_active,omitempty"`
	RuleLineCount             *int                 `json:"rule_line_count,omitempty"`
	RulesDropInFiles          []AuditRulesFileHash `json:"rules_drop_in_files,omitempty"`
	AuditctlUnavailableReason string               `json:"auditctl_unavailable_reason,omitempty"`
	Error                     string               `json:"error,omitempty"`
}

AuditdPosture summarizes auditd activation and rule inventory (no full rule bodies).

type Components added in v0.2.0

type Components struct {
	CoreSystemAndKernel                 CoreSystemAndKernelComponent                 `json:"core_system_and_kernel"`
	IdentityAccessAndAuthentication     IdentityAccessAndAuthenticationComponent     `json:"identity_access_and_authentication"`
	FileSystemAndStorage                FileSystemAndStorageComponent                `json:"file_system_and_storage"`
	NetworkAndHostFirewall              NetworkAndHostFirewallComponent              `json:"network_and_host_firewall"`
	SoftwarePackagesAndApplications     SoftwarePackagesAndApplicationsComponent     `json:"software_packages_and_applications"`
	ContainerAndCloudNativeLinux        ContainerAndCloudNativeLinuxComponent        `json:"container_and_cloud_native_linux"`
	LoggingAndSystemAuditing            LoggingAndSystemAuditingComponent            `json:"logging_and_system_auditing"`
	Cryptography                        CryptographyComponent                        `json:"cryptography"`
	SecurityFrameworksAndMalwareDefense SecurityFrameworksAndMalwareDefenseComponent `json:"security_frameworks_and_malware_defense"`
	Other                               OtherComponent                               `json:"other"`
}

Components groups inventory by competitor-audited sections (RBAC boundary).

type ContainerAndCloudNativeLinuxComponent added in v0.2.0

type ContainerAndCloudNativeLinuxComponent struct {
	HostRuntimes       *ContainerNativeHostRuntimes `json:"host_runtimes,omitempty"`
	ContainerWorkloads *ContainerWorkloads          `json:"container_workloads,omitempty"`
}

type ContainerNativeHostRuntimes added in v0.2.0

type ContainerNativeHostRuntimes struct {
	Docker  *DockerHostFingerprint  `json:"docker,omitempty"`
	Kubelet *KubeletNodeFingerprint `json:"kubelet,omitempty"`
	Error   string                  `json:"error,omitempty"`
}

ContainerNativeHostRuntimes is §6 host_runtimes: Docker daemon and kubelet hints only (no language runtime items).

type ContainerWorkloads added in v0.22.0

type ContainerWorkloads struct {
	// DockerContainers is the list of running Docker containers, capped.
	DockerContainers []DockerContainerWorkload `json:"docker_containers"`
	// DockerContainersTruncated is true when the host had more running
	// containers than the collector's cap.
	DockerContainersTruncated bool `json:"docker_containers_truncated"`
	// KubeletPods is the list of pods observed on this node via the
	// kubelet read-only port or crictl, capped. Empty when neither signal
	// is available.
	KubeletPods []KubeletPodWorkload `json:"kubelet_pods"`
	// KubeletPodsTruncated is true when the node had more pods than the cap.
	KubeletPodsTruncated bool `json:"kubelet_pods_truncated"`
	// CollectorWarnings surfaces transient issues (CLI missing, parse errors).
	CollectorWarnings []string `json:"collector_warnings,omitempty"`
}

ContainerWorkloads is a bounded inventory of running Docker containers and Kubernetes pods on the host. Distinct from DockerPosture (security posture) and ContainerNativeHostRuntimes (daemon/kubelet fingerprints): this block surfaces what workloads are actually running so the report can talk about them as business assets (like apps in #134).

type CoreSystemAndKernelComponent added in v0.2.0

type CoreSystemAndKernelComponent struct {
	OS              OSInfo                  `json:"os"`
	HostTime        *HostTime               `json:"host_time,omitempty"`
	HostProcess     *HostProcess            `json:"host_process,omitempty"`
	Grub            *GrubSnapshot           `json:"grub,omitempty"`
	FirmwareBoot    *FirmwareBoot           `json:"firmware_boot,omitempty"`
	SystemdHealth   *SystemdHealth          `json:"systemd_health,omitempty"`
	SysctlLive      *SysctlLiveBlock        `json:"sysctl_live,omitempty"`
	SysctlOverlay   *SysctlOverlayBlock     `json:"sysctl_overlay,omitempty"`
	KernelModules   *KernelModulesBlock     `json:"kernel_modules,omitempty"`
	SelinuxApparmor *SelinuxApparmorBlock   `json:"selinux_apparmor,omitempty"`
	HighRiskProcess *HighRiskProcessSurface `json:"high_risk_process,omitempty"`
}

type CronTimersInventory added in v0.2.0

type CronTimersInventory struct {
	SystemCrontabLineCount    int      `json:"system_crontab_line_count"`
	SystemCrontabSample       []string `json:"system_crontab_sample,omitempty"`
	CronDropinFileNamesSample []string `json:"cron_dropin_file_names_sample,omitempty"`
	UserCrontabsPresentCount  int      `json:"user_crontabs_present_count"`
	UserCrontabUsersSample    []string `json:"user_crontab_users_sample,omitempty"`
	UserCrontabLinesSample    []string `json:"user_crontab_lines_sample,omitempty"`
	CronVarSpoolModeOctal     string   `json:"cron_var_spool_mode_octal,omitempty"`
	SystemdTimersCount        int      `json:"systemd_timers_count"`
	SystemdTimerUnitsSample   []string `json:"systemd_timer_units_sample,omitempty"`
	Error                     string   `json:"error,omitempty"`
}

CronTimersInventory summarizes cron files, user crontabs, and systemd timers.

type CryptStorageHint added in v0.2.0

type CryptStorageHint struct {
	CrypttabReadable          bool     `json:"crypttab_readable"`
	CrypttabEntryCount        int      `json:"crypttab_entry_count"`
	CrypttabMapperNamesSample []string `json:"crypttab_mapper_names_sample,omitempty"`
	LsblkCryptVolumeCount     int      `json:"lsblk_crypt_volume_count"`
	LsblkCryptNamesSample     []string `json:"lsblk_crypt_names_sample,omitempty"`
	Error                     string   `json:"error,omitempty"`
}

CryptStorageHint summarizes crypttab and lsblk crypt volumes (no keys).

type CryptographyComponent added in v0.2.0

type CryptographyComponent struct {
	LocalTlsCertInventory *LocalTlsCertInventory `json:"local_tls_cert_inventory,omitempty"`
}

CryptographyComponent holds TLS/cert inventory; clock baseline lives under core_system_and_kernel.host_time.

type CupsExposureFingerprint added in v0.2.0

type CupsExposureFingerprint struct {
	UnitActiveState         string   `json:"unit_active_state,omitempty"`
	ListenLinesSample       []string `json:"listen_lines_sample,omitempty"`
	WebInterfaceLinesSample []string `json:"web_interface_lines_sample,omitempty"`
	Error                   string   `json:"error,omitempty"`
}

CupsExposureFingerprint is CUPS unit state and bounded config lines.

type DockerContainerRisk added in v0.5.0

type DockerContainerRisk struct {
	Name                   string   `json:"name"`
	ID                     string   `json:"id"`
	Privileged             *bool    `json:"privileged,omitempty"`
	PidModeHost            *bool    `json:"pid_mode_host,omitempty"`
	NetworkModeHost        *bool    `json:"network_mode_host,omitempty"`
	CapabilitiesAdded      []string `json:"capabilities_added,omitempty"`
	CapabilitiesNotDropped *bool    `json:"capabilities_not_dropped,omitempty"`
	RunsAsRoot             *bool    `json:"runs_as_root,omitempty"`
	WritableRootfs         *bool    `json:"writable_rootfs,omitempty"`
	SensitiveMounts        []string `json:"sensitive_mounts,omitempty"`
	NoSecurityProfile      *bool    `json:"no_security_profile,omitempty"`
	NoResourceLimits       *bool    `json:"no_resource_limits,omitempty"`
}

DockerContainerRisk is one running container with at least one security flag (omit clean containers from the list).

type DockerContainerWorkload added in v0.22.0

type DockerContainerWorkload struct {
	Name              string `json:"name"`
	ContainerID       string `json:"container_id"`
	Image             string `json:"image"`
	ImageTag          string `json:"image_tag,omitempty"`
	ImageDigest       string `json:"image_digest,omitempty"`
	ImageTagLatest    bool   `json:"image_tag_is_latest"`
	ImageDigestPinned bool   `json:"image_digest_pinned"`
	State             string `json:"state"`
	StartedAt         string `json:"started_at,omitempty"`
	RestartCount      int    `json:"restart_count"`
	User              string `json:"user,omitempty"`
	EntrypointHint    string `json:"entrypoint_hint,omitempty"`
	WorkloadHint      string `json:"workload_hint,omitempty"`
	NetworkMode       string `json:"network_mode,omitempty"`
	// WorkloadLabels carries only allow-listed compose/kubernetes/OCI labels
	// that identify the workload to the operator. Never arbitrary user labels.
	WorkloadLabels map[string]string `json:"workload_labels,omitempty"`

	// SecretEnvCount is the count of environment variables whose NAME matches
	// a secret-like pattern (PASSWORD/SECRET/TOKEN/API_KEY). Values and
	// full key names are NEVER shipped; this is a risk signal only.
	SecretEnvCount   int  `json:"secret_env_count"`
	HasSecretEnvRisk bool `json:"has_secret_env_risk"`

	// IpcModeHost is true when `--ipc=host` was used (cross-container attack
	// surface via /dev/shm).
	IpcModeHost bool `json:"ipc_mode_host"`
	// UtsModeHost is true when `--uts=host` (shares hostname namespace, can
	// confuse logging / audit).
	UtsModeHost bool `json:"uts_mode_host"`
	// NoNewPrivileges is true when “no-new-privileges“ is present in the
	// container's SecurityOpt list. Default false when the flag is absent —
	// processes inside can escalate via setuid binaries.
	NoNewPrivileges bool `json:"no_new_privileges"`
	// DevicesExposed are host device paths bind-mounted into the container
	// (e.g. `/dev/sda`, `/dev/kvm`). Capped for bounded output.
	DevicesExposed []string `json:"devices_exposed,omitempty"`
	// TmpfsMounts are target paths backed by tmpfs. A writable tmpfs can
	// bypass a read-only rootfs at the target path.
	TmpfsMounts []string `json:"tmpfs_mounts,omitempty"`
	// LogDriverNone is true when this container's log driver is “none“.
	// Daemon default may be overridden per container; if none, no forensics.
	LogDriverNone bool `json:"log_driver_none"`

	// ImageCreatedAt is the RFC3339 timestamp the image was built. Populated
	// from “docker image inspect“ (or the HTTP equivalent) once per unique
	// image id, then repeated on every container that runs that image.
	ImageCreatedAt string `json:"image_created_at,omitempty"`
	// ImageAgeDays is the integer number of days between ImageCreatedAt and
	// the agent scan. -1 when unknown.
	ImageAgeDays int `json:"image_age_days,omitempty"`
	// ImageRegistry is the parsed registry hostname of the image reference
	// (“docker.io“ for bare / library images, else the explicit host).
	ImageRegistry string `json:"image_registry,omitempty"`
	// ImageIsPublicRegistry is true when the image pulls from one of the
	// well-known public registries (Docker Hub, ghcr.io, quay.io). Signals
	// supply-chain context, not an automatic risk.
	ImageIsPublicRegistry bool `json:"image_is_public_registry"`

	// UptimeDays is the integer number of days since StartedAt. -1 when
	// unknown. Long-running containers drift from their image.
	UptimeDays int `json:"uptime_days,omitempty"`
	// SuspectedManualCommit is true when the image reference looks like a
	// bare digest with no repository/tag — a signal the image was built via
	// “docker commit“ rather than a reproducible build pipeline.
	SuspectedManualCommit bool `json:"suspected_manual_commit"`
	// SuspectedDistroless is true when the image ref or a known OCI label
	// hints at a distroless / scratch base. Positive signal — smaller
	// attack surface.
	SuspectedDistroless bool `json:"suspected_distroless"`
}

DockerContainerWorkload describes one running Docker container, workload-first. No env vars, no command-line flags (may carry secrets) — only image identity, runtime state, whitelisted labels, and workload-risk flags.

type DockerHostFingerprint added in v0.2.0

type DockerHostFingerprint struct {
	DockerCliPath         string `json:"docker_cli_path,omitempty"`
	DaemonJSONPath        string `json:"daemon_json_path,omitempty"`
	LiveRestore           *bool  `json:"live_restore,omitempty"`
	Icc                   *bool  `json:"icc,omitempty"`
	UserlandProxy         *bool  `json:"userland_proxy,omitempty"`
	TlsInDaemonJSON       *bool  `json:"tls_in_daemon_json,omitempty"`
	TlsVerifyInDaemonJSON *bool  `json:"tls_verify_in_daemon_json,omitempty"`
	ContainerCount        *int   `json:"container_count,omitempty"`
	RootlessHint          string `json:"rootless_hint,omitempty"`
	DockerSockPath        string `json:"docker_sock_path,omitempty"`
	DockerSockModeOctal   string `json:"docker_sock_mode_octal,omitempty"`
	DockerSockOwnerUID    *int   `json:"docker_sock_owner_uid,omitempty"`
	DockerSockGroupGID    *int   `json:"docker_sock_group_gid,omitempty"`
	Error                 string `json:"error,omitempty"`
}

DockerHostFingerprint is non-secret Docker daemon posture (CIS-style hints).

type DockerOverlayNetworkEncryption added in v0.5.0

type DockerOverlayNetworkEncryption struct {
	NetworkName string `json:"network_name"`
	Encrypted   bool   `json:"encrypted"`
}

DockerOverlayNetworkEncryption records overlay driver encryption hint for a user-defined network.

type DockerPosture added in v0.5.0

type DockerPosture struct {
	Detected bool `json:"detected"`

	DockerCliPath  *string `json:"docker_cli_path,omitempty"`
	Version        *string `json:"version,omitempty"`
	APIVersion     *string `json:"api_version,omitempty"`
	StorageDriver  *string `json:"storage_driver,omitempty"`
	ContainerCount *int    `json:"container_count,omitempty"`
	DockerRootDir  *string `json:"docker_root_dir,omitempty"`

	RootlessMode        *bool   `json:"rootless_mode,omitempty"`
	DockerSockPath      *string `json:"docker_sock_path,omitempty"`
	DockerSockModeOctal *string `json:"docker_sock_mode_octal,omitempty"`
	DockerSockOwnerUID  *int    `json:"docker_sock_owner_uid,omitempty"`
	DockerSockGroupGID  *int    `json:"docker_sock_group_gid,omitempty"`

	DockerSockMountedInContainers []string `json:"docker_sock_mounted_in_containers,omitempty"`

	TCPAPIExposed    *bool   `json:"tcp_api_exposed,omitempty"`
	TCPAPIAddress    *string `json:"tcp_api_address,omitempty"`
	TCPAPITLSEnabled *bool   `json:"tcp_api_tls_enabled,omitempty"`

	UsernsRemap     *string `json:"userns_remap,omitempty"`
	NoNewPrivileges *bool   `json:"no_new_privileges,omitempty"`
	IccEnabled      *bool   `json:"icc_enabled,omitempty"`
	LiveRestore     *bool   `json:"live_restore,omitempty"`
	LogDriver       *string `json:"log_driver,omitempty"`
	SeccompProfile  *string `json:"seccomp_profile,omitempty"`
	DefaultUlimits  *string `json:"default_ulimits,omitempty"`

	ContainerRisks []DockerContainerRisk `json:"container_risks,omitempty"`

	ImagesRunningAsLatest    []string `json:"images_running_as_latest,omitempty"`
	ImagesWithoutHealthcheck []string `json:"images_without_healthcheck,omitempty"`

	PublishedPorts          []DockerPublishedPort            `json:"published_ports,omitempty"`
	CustomNetworksEncrypted []DockerOverlayNetworkEncryption `json:"custom_networks_encrypted,omitempty"`

	DockerGroupMembers    []string `json:"docker_group_members,omitempty"`
	DockerDataPermissions *string  `json:"docker_data_permissions,omitempty"`
	KernelVersion         *string  `json:"kernel_version,omitempty"`
	IsSwarmActive         *bool    `json:"is_swarm_active,omitempty"`

	CollectorWarnings []string `json:"collector_warnings,omitempty"`
	Error             string   `json:"error,omitempty"`
}

DockerPosture is Docker engine security posture from read-only docker CLI and filesystem checks.

type DockerPublishedPort added in v0.5.0

type DockerPublishedPort struct {
	Container         string `json:"container"`
	ContainerID       string `json:"container_id"`
	HostIP            string `json:"host_ip"`
	HostPort          string `json:"host_port"`
	ContainerPort     string `json:"container_port"`
	Protocol          string `json:"protocol"`
	BindAllInterfaces bool   `json:"bind_all_interfaces"`
}

DockerPublishedPort is one published port binding from a running container.

type DuplicateIDEntry added in v0.2.0

type DuplicateIDEntry struct {
	ID    int      `json:"id"`
	Names []string `json:"names"`
}

DuplicateIDEntry lists a numeric ID shared by more than one account (names capped for audit).

type DuplicateUidGid added in v0.2.0

type DuplicateUidGid struct {
	DuplicateUidCount int                `json:"duplicate_uid_count"`
	DuplicateGidCount int                `json:"duplicate_gid_count"`
	DuplicateUids     []DuplicateIDEntry `json:"duplicate_uids,omitempty"`
	DuplicateGids     []DuplicateIDEntry `json:"duplicate_gids,omitempty"`
	Error             string             `json:"error,omitempty"`
}

DuplicateUidGid reports passwd/group collisions (bounded names per ID).

type Fail2banPosture added in v0.5.0

type Fail2banPosture struct {
	Present              bool     `json:"present"`
	UnitActiveState      string   `json:"unit_active_state,omitempty"`
	UnitFileState        string   `json:"unit_file_state,omitempty"`
	Fail2banClientPath   string   `json:"fail2ban_client_path,omitempty"`
	VersionSummary       string   `json:"version_summary,omitempty"`
	ConfigPathsRead      []string `json:"config_paths_read,omitempty"`
	EnabledJails         []string `json:"enabled_jails,omitempty"`
	JailSectionCountHint *int     `json:"jail_section_count_hint,omitempty"`
	DefaultBantime       string   `json:"default_bantime,omitempty"`
	DefaultFindtime      string   `json:"default_findtime,omitempty"`
	DefaultMaxRetry      string   `json:"default_maxretry,omitempty"`
	Error                string   `json:"error,omitempty"`
}

Fail2banPosture reports fail2ban presence and bounded jail config hints (file-based only).

type FileIntegrityTooling added in v0.2.0

type FileIntegrityTooling struct {
	AideSuspected      bool     `json:"aide_suspected"`
	TripwireSuspected  bool     `json:"tripwire_suspected"`
	EvidencePaths      []string `json:"evidence_paths,omitempty"`
	SystemdUnitsSample []string `json:"systemd_units_sample,omitempty"`
	LatestDbUtcHint    string   `json:"latest_db_utc_hint,omitempty"`
	Error              string   `json:"error,omitempty"`
}

FileIntegrityTooling detects AIDE/Tripwire-style tooling without uploading databases.

type FileSystemAndStorageComponent added in v0.2.0

type FileSystemAndStorageComponent struct {
	HostDisk              *HostDisk              `json:"host_disk,omitempty"`
	HostPath              *HostPath              `json:"host_path,omitempty"`
	HostSuid              *HostSuid              `json:"host_suid,omitempty"`
	MountOptionsAudit     *MountOptionsAudit     `json:"mount_options_audit,omitempty"`
	PathPermissionsAudit  *PathPermissionsAudit  `json:"path_permissions_audit,omitempty"`
	UsbStoragePosture     *UsbStoragePosture     `json:"usb_storage_posture,omitempty"`
	FileIntegrityTooling  *FileIntegrityTooling  `json:"file_integrity_tooling,omitempty"`
	CryptStorageHint      *CryptStorageHint      `json:"crypt_storage_hint,omitempty"`
	NfsExportsFingerprint *NfsExportsFingerprint `json:"nfs_exports_fingerprint,omitempty"`
}

type FilesystemEntry

type FilesystemEntry struct {
	Mount         string `json:"mount"`
	Fstype        string `json:"fstype"`
	UsedPct       int    `json:"used_pct"`
	AvailGB       int    `json:"avail_gb"`
	InodesUsedPct *int   `json:"inodes_used_pct,omitempty"`
}

type Firewall

type Firewall struct {
	Family                  string   `json:"firewall_family"`
	Active                  bool     `json:"active"`
	DefaultPolicyIn         string   `json:"default_policy_in,omitempty"`
	DefaultPolicyOut        string   `json:"default_policy_out,omitempty"`
	RuleCount               *int     `json:"rule_count,omitempty"`
	HasEstablishedRelated   *bool    `json:"has_established_related,omitempty"`
	FirewalldDefaultZone    string   `json:"firewalld_default_zone,omitempty"`
	FirewalldZoneTarget     string   `json:"firewalld_zone_target,omitempty"`
	UfwStatusVerboseSample  []string `json:"ufw_status_verbose_sample,omitempty"`
	BackendRulesetSha256Hex string   `json:"backend_ruleset_sha256,omitempty"`
	BackendRulesetExcerpt   string   `json:"backend_ruleset_excerpt,omitempty"`
	Error                   string   `json:"error,omitempty"`
}

type FirmwareBoot added in v0.2.0

type FirmwareBoot struct {
	BootMode           string `json:"boot_mode"`
	EfiSysfsPresent    bool   `json:"efi_sysfs_present"`
	EfibootmgrExitZero bool   `json:"efibootmgr_exit_zero,omitempty"`
	Error              string `json:"error,omitempty"`
}

FirmwareBoot hints UEFI vs BIOS without requiring root.

type GrubSnapshot added in v0.2.0

type GrubSnapshot struct {
	DefaultGrubPath          string `json:"default_grub_path,omitempty"`
	GrubCmdlineLinux         string `json:"grub_cmdline_linux,omitempty"`
	GrubTimeout              string `json:"grub_timeout,omitempty"`
	PasswordReferencePresent *bool  `json:"password_reference_present,omitempty"`
	GrubCfgReadablePath      string `json:"grub_cfg_readable_path,omitempty"`
	Error                    string `json:"error,omitempty"`
}

GrubSnapshot is parsed /etc/default/grub (and optional readable grub.cfg path); no secret values.

type HighRiskProcessEntry added in v0.2.0

type HighRiskProcessEntry struct {
	Pid           int32  `json:"pid"`
	User          string `json:"user"`
	ExePath       string `json:"exe_path,omitempty"`
	BinaryDeleted bool   `json:"binary_deleted"`
	CmdlineEmpty  bool   `json:"cmdline_empty"`
	ListenerPorts []int  `json:"listener_ports,omitempty"`
	Reason        string `json:"reason,omitempty"`
}

HighRiskProcessEntry is one bounded process row.

type HighRiskProcessSurface added in v0.2.0

type HighRiskProcessSurface struct {
	Items []HighRiskProcessEntry `json:"items"`
	Error string                 `json:"error,omitempty"`
}

HighRiskProcessSurface samples listeners and root-owned processes with exe/cmdline hints.

type HostBackup

type HostBackup struct {
	BackupStatus    string   `json:"backup_status"`
	LatestBackupUTC string   `json:"latest_backup_utc"`
	ToolsDetected   []string `json:"tools_detected,omitempty"`
	HasPeriodicCron *bool    `json:"has_periodic_cron,omitempty"`
	Error           string   `json:"error,omitempty"`
}

type HostDisk

type HostDisk struct {
	Filesystems []FilesystemEntry `json:"filesystems,omitempty"`
	Error       string            `json:"error,omitempty"`
}

type HostNetwork

type HostNetwork struct {
	DefaultRouteVia         string         `json:"default_route_via,omitempty"`
	HasPublicIPv4           *bool          `json:"has_public_ipv4,omitempty"`
	HasPublicIPv6           *bool          `json:"has_public_ipv6,omitempty"`
	PublicIPCandidates      []string       `json:"public_ip_candidates,omitempty"` // redacted: IPv4 a.b.x.x / IPv6 h:h:x:x:x:x:x:x
	ProbeTargets            []string       `json:"probe_targets,omitempty"`        // real public IPs for API-side WAN probing
	Interfaces              []NetworkIface `json:"interfaces,omitempty"`
	ResolvConfNameservers   []string       `json:"resolv_conf_nameservers,omitempty"`
	ResolvConfSearchDomains []string       `json:"resolv_conf_search_domains,omitempty"`
	ResolvConfSampleLines   []string       `json:"resolv_conf_sample_lines,omitempty"`
	SystemdResolvedStub     *bool          `json:"systemd_resolved_stub,omitempty"`
	Error                   string         `json:"error,omitempty"`
}

type HostPath

type HostPath struct {
	Entries []PathEntry `json:"entries"`
	Error   string      `json:"error,omitempty"`
}

type HostProcess

type HostProcess struct {
	Top     []ProcessTopEntry `json:"top"`
	Signals *ProcessSignals   `json:"signals,omitempty"`
	Error   string            `json:"error,omitempty"`
}

type HostRuntimes

type HostRuntimes struct {
	Items   []RuntimeEntry          `json:"items"`
	Docker  *DockerHostFingerprint  `json:"docker,omitempty"`
	Kubelet *KubeletNodeFingerprint `json:"kubelet,omitempty"`
	Error   string                  `json:"error,omitempty"`
}

type HostSSH

type HostSSH struct {
	PermitRootLogin            string   `json:"permit_root_login,omitempty"`
	PasswordAuthentication     string   `json:"password_authentication,omitempty"`
	ChallengeResponseAuth      string   `json:"challenge_response_auth,omitempty"`
	KexAlgorithmsSample        []string `json:"kex_algorithms_sample,omitempty"`
	CiphersSample              []string `json:"ciphers_sample,omitempty"`
	ListenAddresses            []string `json:"listen_addresses,omitempty"`
	MaxAuthTries               *int     `json:"max_auth_tries,omitempty"`
	ClientAliveIntervalSeconds *int     `json:"client_alive_interval_seconds,omitempty"`
	ClientAliveCountMax        *int     `json:"client_alive_count_max,omitempty"`
	AllowUsersPresent          *bool    `json:"allow_users_present,omitempty"`
	DenyUsersPresent           *bool    `json:"deny_users_present,omitempty"`
	Subsystem                  string   `json:"subsystem,omitempty"`
	UsePAM                     string   `json:"use_pam,omitempty"`
	X11Forwarding              string   `json:"x11_forwarding,omitempty"`
	Error                      string   `json:"error,omitempty"`
}

type HostSuid

type HostSuid struct {
	Items []SuidItem `json:"items"`
	Error string     `json:"error,omitempty"`
}

type HostTime

type HostTime struct {
	UtcNow              string   `json:"utc_now"`
	RtcInSync           *bool    `json:"rtc_in_sync,omitempty"`
	NtpActive           *bool    `json:"ntp_active,omitempty"`
	TimesyncDaemon      string   `json:"timesync_daemon,omitempty"`
	OffsetMs            *float64 `json:"offset_ms,omitempty"`
	SkewVsServerSeconds *int     `json:"skew_vs_server_seconds,omitempty"`
}

type HostUsersSummary

type HostUsersSummary struct {
	NHuman          int          `json:"n_human,omitempty"`
	NSystem         int          `json:"n_system,omitempty"`
	NWithLoginShell int          `json:"n_with_login_shell,omitempty"`
	NUidZero        int          `json:"n_uid_zero,omitempty"`
	Sample          []UserSample `json:"sample,omitempty"`
	Error           string       `json:"error,omitempty"`
}

type IdentityAccessAndAuthenticationComponent added in v0.2.0

type IdentityAccessAndAuthenticationComponent struct {
	HostUsersSummary          *HostUsersSummary          `json:"host_users_summary,omitempty"`
	HostSSH                   *HostSSH                   `json:"host_ssh,omitempty"`
	ShadowAccountSummary      *ShadowAccountSummary      `json:"shadow_account_summary,omitempty"`
	DuplicateUidGid           *DuplicateUidGid           `json:"duplicate_uid_gid,omitempty"`
	PasswordPolicyFingerprint *PasswordPolicyFingerprint `json:"password_policy_fingerprint,omitempty"`
	SudoersAudit              *SudoersAudit              `json:"sudoers_audit,omitempty"`
}

type IfaceAddress

type IfaceAddress struct {
	IP    string `json:"ip"`
	Scope string `json:"scope"`
}

type JournaldPosture added in v0.3.3

type JournaldPosture struct {
	UnitActive                 *bool    `json:"unit_active,omitempty"`
	ConfigPathsRead            []string `json:"config_paths_read,omitempty"`
	Storage                    string   `json:"storage,omitempty"`
	ForwardToSyslog            *bool    `json:"forward_to_syslog,omitempty"`
	ForwardToWall              *bool    `json:"forward_to_wall,omitempty"`
	ForwardToConsole           *bool    `json:"forward_to_console,omitempty"`
	Compress                   *bool    `json:"compress,omitempty"`
	Seal                       *bool    `json:"seal,omitempty"`
	SystemMaxUse               string   `json:"system_max_use,omitempty"`
	RuntimeMaxUse              string   `json:"runtime_max_use,omitempty"`
	MaxRetentionSec            string   `json:"max_retention_sec,omitempty"`
	JournalctlDiskUsageSummary string   `json:"journalctl_disk_usage_summary,omitempty"`
	Error                      string   `json:"error,omitempty"`
}

JournaldPosture summarizes systemd-journald config hints (no journal contents).

type KernelModulesBlock added in v0.2.0

type KernelModulesBlock struct {
	Names           []string `json:"names"`
	DenylistMatches []string `json:"denylist_matches,omitempty"`
	Error           string   `json:"error,omitempty"`
}

KernelModulesBlock lists loaded modules (capped) with optional denylist hits.

type KubeletContainerWorkload added in v0.22.0

type KubeletContainerWorkload struct {
	Name              string `json:"name"`
	Image             string `json:"image"`
	ImageTag          string `json:"image_tag,omitempty"`
	ImageDigest       string `json:"image_digest,omitempty"`
	ImageTagLatest    bool   `json:"image_tag_is_latest"`
	ImageDigestPinned bool   `json:"image_digest_pinned"`
	RestartCount      int    `json:"restart_count"`
	State             string `json:"state,omitempty"`
}

KubeletContainerWorkload is a single container inside a pod.

type KubeletNodeFingerprint added in v0.2.0

type KubeletNodeFingerprint struct {
	KubeletBinaryPath     string   `json:"kubelet_binary_path,omitempty"`
	ConfigSourcePaths     []string `json:"config_source_paths,omitempty"`
	ReadOnlyPort          *int     `json:"read_only_port,omitempty"`
	ProtectKernelDefaults *bool    `json:"protect_kernel_defaults,omitempty"`
	AnonymousAuthEnabled  *bool    `json:"anonymous_auth_enabled,omitempty"`
	DropInExecSampleLines []string `json:"drop_in_exec_sample_lines,omitempty"`
	Error                 string   `json:"error,omitempty"`
}

KubeletNodeFingerprint captures bounded kubelet config hints when the node runs Kubernetes.

type KubeletPodWorkload added in v0.22.0

type KubeletPodWorkload struct {
	Name       string                     `json:"name"`
	Namespace  string                     `json:"namespace"`
	Phase      string                     `json:"phase,omitempty"`
	CreatedAt  string                     `json:"created_at,omitempty"`
	Containers []KubeletContainerWorkload `json:"containers"`
}

KubeletPodWorkload describes one pod observed via kubelet / crictl on this node.

type LargeVarLogFileEntry added in v0.3.3

type LargeVarLogFileEntry struct {
	RelPath   string `json:"rel_path"`
	SizeBytes int64  `json:"size_bytes"`
}

LargeVarLogFileEntry is a file under /var/log at or above the agent size threshold with no matching logrotate stanza path (heuristic).

type LegacyInsecureServices added in v0.2.0

type LegacyInsecureServices struct {
	TelnetSuspected          bool     `json:"telnet_suspected"`
	RshSuspected             bool     `json:"rsh_suspected"`
	RloginSuspected          bool     `json:"rlogin_suspected"`
	RexecSuspected           bool     `json:"rexec_suspected"`
	VsftpdSuspected          bool     `json:"vsftpd_suspected"`
	ProftpdSuspected         bool     `json:"proftpd_suspected"`
	InetdConfPresent         bool     `json:"inetd_conf_present"`
	InetdConfNonCommentLines int      `json:"inetd_conf_non_comment_lines"`
	SystemdUnitNamesSample   []string `json:"systemd_unit_names_sample,omitempty"`
	Error                    string   `json:"error,omitempty"`
}

LegacyInsecureServices reports presence-only hints for legacy network services.

type Listener

type Listener struct {
	Port               int    `json:"port"`
	Bind               string `json:"bind"`
	Process            string `json:"process"`
	ListenPid          int32  `json:"listen_pid,omitempty"`
	SystemdUnit        string `json:"systemd_unit,omitempty"`
	SystemdUnitMissing bool   `json:"systemd_unit_missing,omitempty"`
	BindScope          string `json:"bind_scope,omitempty"`
	ExposureRisk       string `json:"exposure_risk,omitempty"`
	FirewallRule       string `json:"firewall_rule,omitempty"`
	LanFirewallRule    string `json:"lan_firewall_rule,omitempty"`
	WanFirewallRule    string `json:"wan_firewall_rule,omitempty"`
	WanProbeOpen       *bool  `json:"wan_probe_open,omitempty"`
}

type LocalTlsCertFileEntry added in v0.4.0

type LocalTlsCertFileEntry struct {
	Path                string `json:"path"`
	NotAfter            string `json:"not_after"`
	ExpiresWithin30Days *bool  `json:"expires_within_30_days,omitempty"`
	UsesSha1Signature   *bool  `json:"uses_sha1_signature,omitempty"`
}

LocalTlsCertFileEntry describes one certificate (first PEM block per file, typically the leaf).

type LocalTlsCertInventory added in v0.4.0

type LocalTlsCertInventory struct {
	Items                  []LocalTlsCertFileEntry `json:"items,omitempty"`
	Sha1SignatureCertCount int                     `json:"sha1_signature_cert_count,omitempty"`
	FilesScanned           int                     `json:"files_scanned,omitempty"`
	Error                  string                  `json:"error,omitempty"`
}

LocalTlsCertInventory is a bounded scan of PEM leaf material from known paths (NotAfter and signature algorithm hints only).

type LoggingAndSystemAuditingComponent added in v0.2.0

type LoggingAndSystemAuditingComponent struct {
	AuditSections     []AuditSection            `json:"audit_sections,omitempty"`
	SyslogForwarding  *SyslogForwardingPosture  `json:"syslog_forwarding,omitempty"`
	Journald          *JournaldPosture          `json:"journald,omitempty"`
	Auditd            *AuditdPosture            `json:"auditd,omitempty"`
	LogrotateDisk     *LogrotateDiskPosture     `json:"logrotate_disk,omitempty"`
	AtBatch           *AtBatchPosture           `json:"at_batch,omitempty"`
	ProcessAccounting *ProcessAccountingPosture `json:"process_accounting,omitempty"`
}

type LogrotateDiskPosture added in v0.3.3

type LogrotateDiskPosture struct {
	MainConfPresent                     bool                   `json:"main_conf_present,omitempty"`
	MainConfIncludeLinesSample          []string               `json:"main_conf_include_lines_sample,omitempty"`
	VarLogStanzaHint                    bool                   `json:"var_log_stanza_hint,omitempty"`
	VarLogUsagePath                     string                 `json:"var_log_usage_path,omitempty"`
	VarLogMountUsedPct                  *int                   `json:"var_log_mount_used_pct,omitempty"`
	LogPartitionUsageHigh               *bool                  `json:"log_partition_usage_high,omitempty"`
	LargeVarLogFiles                    []LargeVarLogFileEntry `json:"large_var_log_files,omitempty"`
	LargeVarLogWithoutRotationHintCount *int                   `json:"large_var_log_without_rotation_hint_count,omitempty"`
	Error                               string                 `json:"error,omitempty"`
}

LogrotateDiskPosture summarizes logrotate configuration and /var/log mount usage (gopsutil disk.Usage).

type MacDeepPosture added in v0.5.0

type MacDeepPosture struct {
	SelinuxPsZLineSampleCap         *int     `json:"selinux_ps_z_line_sample_cap,omitempty"`
	SelinuxPsZUnconfinedLikeCount   *int     `json:"selinux_ps_z_unconfined_like_count,omitempty"`
	SelinuxSemanagePermissiveSample []string `json:"selinux_semanage_permissive_sample,omitempty"`
	SelinuxSemanageUnavailable      string   `json:"selinux_semanage_unavailable,omitempty"`
	ApparmorProfilesEnforceCount    *int     `json:"apparmor_profiles_enforce_count,omitempty"`
	ApparmorProfilesComplainCount   *int     `json:"apparmor_profiles_complain_count,omitempty"`
	ApparmorStatusUnavailable       string   `json:"apparmor_status_unavailable,omitempty"`
	Error                           string   `json:"error,omitempty"`
}

MacDeepPosture extends §1 MAC summary when SELinux is enforcing and AppArmor tools exist.

type MalwareScannerEntry added in v0.5.0

type MalwareScannerEntry struct {
	ID              string `json:"id"`
	Detected        bool   `json:"detected"`
	VersionSummary  string `json:"version_summary,omitempty"`
	LastUpdateHint  string `json:"last_update_hint,omitempty"`
	UnitActiveState string `json:"unit_active_state,omitempty"`
	UnitFile        string `json:"unit_file,omitempty"`
}

MalwareScannerEntry is one detected scanner or commercial agent unit (no scan execution).

type MalwareScannersPosture added in v0.5.0

type MalwareScannersPosture struct {
	Scanners []MalwareScannerEntry `json:"scanners,omitempty"`
	Error    string                `json:"error,omitempty"`
}

MalwareScannersPosture reports scanner presence, version strings, and coarse freshness hints only.

type MountOptionsAudit added in v0.2.0

type MountOptionsAudit struct {
	Paths []MountPathSignals `json:"paths,omitempty"`
	Error string             `json:"error,omitempty"`
}

MountOptionsAudit compares fstab and live mount options for standard hardening paths.

type MountPathSignals added in v0.2.0

type MountPathSignals struct {
	Mountpoint       string `json:"mountpoint"`
	InFstab          bool   `json:"in_fstab"`
	FstabOptions     string `json:"fstab_options,omitempty"`
	LiveMountOptions string `json:"live_mount_options,omitempty"`
	Nodev            bool   `json:"nodev"`
	Nosuid           bool   `json:"nosuid"`
	Noexec           bool   `json:"noexec"`
}

MountPathSignals reports nodev/nosuid/noexec from live mounts (preferred) or fstab.

type MtaFingerprint added in v0.2.0

type MtaFingerprint struct {
	DetectedMta                              string   `json:"detected_mta,omitempty"`
	PostfixInetInterfaces                    string   `json:"postfix_inet_interfaces,omitempty"`
	PostfixMynetworksStyle                   string   `json:"postfix_mynetworks_style,omitempty"`
	PostfixSmtpdRecipientRestrictionsPresent *bool    `json:"postfix_smtpd_recipient_restrictions_present,omitempty"`
	EximConfigPath                           string   `json:"exim_config_path,omitempty"`
	EximRelayDomainsHintSample               []string `json:"exim_relay_domains_hint_sample,omitempty"`
	SendmailCfPathPresent                    *bool    `json:"sendmail_cf_path_present,omitempty"`
	SendmailLinesSample                      []string `json:"sendmail_lines_sample,omitempty"`
	Error                                    string   `json:"error,omitempty"`
}

MtaFingerprint is MTA presence and bounded relay/bind hints (no queue contents).

type MysqlPosture added in v0.5.0

type MysqlPosture struct {
	Detected     bool    `json:"detected"`
	Engine       string  `json:"engine"`
	Version      *string `json:"version"`
	BinPath      string  `json:"bin_path"`
	ServiceState *string `json:"service_state"`

	BindAddress        *string `json:"bind_address"`
	Port               *int    `json:"port"`
	SkipNetworking     *bool   `json:"skip_networking"`
	SocketPath         *string `json:"socket_path"`
	RuntimeListenCheck *string `json:"runtime_listen_check"`

	DefaultAuthPlugin    *string `json:"default_auth_plugin"`
	AuthSocketOrUnix     *bool   `json:"auth_socket_or_unix"`
	SecureAuth           *string `json:"secure_auth"`
	PasswordPolicyPlugin *bool   `json:"password_policy_plugin"`

	SslCa                  *string `json:"ssl_ca"`
	SslCert                *string `json:"ssl_cert"`
	SslKey                 *string `json:"ssl_key"`
	TlsConfigured          *bool   `json:"tls_configured"`
	RequireSecureTransport *string `json:"require_secure_transport"`
	TlsVersion             *string `json:"tls_version"`

	LocalInfile     *string `json:"local_infile"`
	SecureFilePriv  *string `json:"secure_file_priv"`
	SymbolicLinks   *string `json:"symbolic_links"`
	LogRaw          *string `json:"log_raw"`
	GeneralLog      *string `json:"general_log"`
	SkipGrantTables *bool   `json:"skip_grant_tables"`

	RunUser               *string `json:"run_user"`
	Datadir               *string `json:"datadir"`
	DatadirPermissions    *string `json:"datadir_permissions"`
	ConfigFilePermissions *string `json:"config_file_permissions"`
	MyCnfPasswordsExposed *bool   `json:"my_cnf_passwords_exposed"`
	ErrorLogPermissions   *string `json:"error_log_permissions"`
	IsContainerized       *bool   `json:"is_containerized"`

	InnodbEncryptTables    *string `json:"innodb_encrypt_tables"`
	DefaultTableEncryption *string `json:"default_table_encryption"`
	KeyringPlugin          *bool   `json:"keyring_plugin"`

	CollectorWarnings       []string `json:"collector_warnings"`
	LimitedWithoutSQLAccess []string `json:"limited_without_sql_access"`
	Error                   string   `json:"error,omitempty"`
}

MysqlPosture is MySQL/MariaDB security posture from binary, bounded cnf parse (includes !include/!includedir), proc, and ss (no SQL).

type NetworkAndHostFirewallComponent added in v0.2.0

type NetworkAndHostFirewallComponent struct {
	Listeners              []Listener              `json:"listeners"`
	HostNetwork            *HostNetwork            `json:"host_network,omitempty"`
	Firewall               *Firewall               `json:"firewall,omitempty"`
	TcpWrappersFingerprint *TcpWrappersFingerprint `json:"tcp_wrappers_fingerprint,omitempty"`
	LegacyInsecureServices *LegacyInsecureServices `json:"legacy_insecure_services,omitempty"`
}

type NetworkIface

type NetworkIface struct {
	Name           string         `json:"name"`
	Type           string         `json:"type"`
	IsDockerBridge *bool          `json:"is_docker_bridge,omitempty"`
	Ipv6Enabled    *bool          `json:"ipv6_enabled,omitempty"`
	Promiscuous    *bool          `json:"promiscuous,omitempty"`
	Addresses      []IfaceAddress `json:"addresses,omitempty"`
}

type NfsExportEntry added in v0.2.0

type NfsExportEntry struct {
	Index                      int    `json:"index"`
	PathHash                   string `json:"path_hash"`
	CombinedOptionsFingerprint string `json:"combined_options_fingerprint"`
	HasNoRootSquash            bool   `json:"has_no_root_squash"`
	HasRootSquash              bool   `json:"has_root_squash"`
	SecModeHint                string `json:"sec_mode_hint,omitempty"`
}

NfsExportEntry is one export line fingerprint (path hashed).

type NfsExportsFingerprint added in v0.2.0

type NfsExportsFingerprint struct {
	ExportsReadable bool             `json:"exports_readable"`
	Entries         []NfsExportEntry `json:"entries,omitempty"`
	Error           string           `json:"error,omitempty"`
}

NfsExportsFingerprint summarizes /etc/exports with hashed paths (no raw export paths).

type NginxListenBinding added in v0.5.0

type NginxListenBinding struct {
	Bind string `json:"bind"`
	Port int    `json:"port"`
	SSL  bool   `json:"ssl,omitempty"`
}

NginxListenBinding is one listen directive (address, port, TLS-related listen flag).

type NginxPosture added in v0.5.0

type NginxPosture struct {
	Detected     bool    `json:"detected"`
	BinPath      string  `json:"bin_path,omitempty"`
	Version      *string `json:"version,omitempty"`
	ServiceState *string `json:"service_state,omitempty"` // running | stopped | not_installed

	SiteMapSummary *NginxSiteMapSummary `json:"site_map_summary,omitempty"`
	ListenBindings []NginxListenBinding `json:"listen_bindings,omitempty"`
	// ListenBindingDiscrepancies compares config listens to same-scan TCP listeners (nginx/openresty process) when available.
	ListenBindingDiscrepancies []string `json:"listen_binding_discrepancies,omitempty"`

	// ModulesSample is security-relevant nginx -V flags (broad); RiskyModulesCompiled is the high-risk subset only.
	ModulesSample             []string `json:"modules_sample,omitempty"`
	RiskyModulesCompiled      []string `json:"risky_modules_compiled,omitempty"`
	TlsLegacyProtocolsPresent *bool    `json:"tls_legacy_protocols_present,omitempty"`

	SslConfigured            *bool   `json:"ssl_configured,omitempty"`
	SslProtocols             *string `json:"ssl_protocols,omitempty"`
	SslCiphers               *string `json:"ssl_ciphers,omitempty"`
	SslCiphersWeakPatterns   *bool   `json:"ssl_ciphers_weak_patterns,omitempty"`
	SslPreferServerCiphers   *string `json:"ssl_prefer_server_ciphers,omitempty"`
	HstsHeader               *string `json:"hsts_header,omitempty"`
	HttpToHttpsRedirect      *bool   `json:"http_to_https_redirect,omitempty"`
	SslStapling              *bool   `json:"ssl_stapling,omitempty"`
	SslSessionTicketsSummary *string `json:"ssl_session_tickets_summary,omitempty"`

	ServerTokens *string `json:"server_tokens,omitempty"`

	StubStatusUnrestricted *bool `json:"stub_status_unrestricted,omitempty"`
	ServerHeaderHidden     *bool `json:"server_header_hidden,omitempty"`
	ErrorPageCustom        *bool `json:"error_page_custom,omitempty"`

	MissingSecurityHeaders         []string `json:"missing_security_headers,omitempty"`
	LocationsDroppingParentHeaders []string `json:"locations_dropping_parent_headers,omitempty"`

	AutoindexEnabledPaths      []string `json:"autoindex_enabled_paths,omitempty"`
	SensitivePathsUnrestricted []string `json:"sensitive_paths_unrestricted,omitempty"`
	LimitReqConfigured         *bool    `json:"limit_req_configured,omitempty"`
	ClientMaxBodySize          *string  `json:"client_max_body_size,omitempty"`

	ProxyPassOrUpstreamSeen *bool `json:"proxy_pass_or_upstream_seen,omitempty"`
	ProxyHeadersForwarded   *bool `json:"proxy_headers_forwarded,omitempty"`
	ProxyHostHeader         *bool `json:"proxy_host_header,omitempty"`
	UpstreamPlaintext       *bool `json:"upstream_plaintext,omitempty"`
	ProxyInterceptErrors    *bool `json:"proxy_intercept_errors,omitempty"`

	RunUser               *string `json:"run_user,omitempty"`
	RunUserWorkersNonRoot *bool   `json:"run_user_workers_non_root,omitempty"`
	ConfigFilePermissions *string `json:"config_file_permissions,omitempty"`
	DocrootWorldWritable  *bool   `json:"docroot_world_writable,omitempty"`
	IsContainerized       *bool   `json:"is_containerized,omitempty"`

	CollectorWarnings []string `json:"collector_warnings,omitempty"`
	Error             string   `json:"error,omitempty"`
}

NginxPosture is allowlisted nginx security posture from -v/-V/-T (no raw secrets).

type NginxSiteMapSummary added in v0.5.0

type NginxSiteMapSummary struct {
	ServerBlockCount int      `json:"server_block_count"`
	ServerNames      []string `json:"server_names,omitempty"`
}

NginxSiteMapSummary counts server blocks and caps server_name tokens from parsed -T output.

type OSInfo

type OSInfo struct {
	Pretty          string `json:"pretty"`
	Kernel          string `json:"kernel"`
	KernelArch      string `json:"kernel_arch,omitempty"`
	DistroID        string `json:"distro_id,omitempty"`
	DistroName      string `json:"distro_name,omitempty"`
	DistroVersionID string `json:"distro_version_id,omitempty"`
	// True when agent detects Ubuntu Pro ESM or Debian ELTS-style apt; API uses this for ESM/ELTS posture.
	DistroPaidExtendedSecurityActive *bool  `json:"distro_paid_extended_security_active,omitempty"`
	OSReleaseID                      string `json:"os_release_id,omitempty"`
	OSReleaseVersionID               string `json:"os_release_version_id,omitempty"`
	OSReleaseVersion                 string `json:"os_release_version,omitempty"`
	OSReleaseName                    string `json:"os_release_name,omitempty"`
	Platform                         string `json:"platform,omitempty"`
	PlatformFamily                   string `json:"platform_family,omitempty"`
	PlatformVersion                  string `json:"platform_version,omitempty"`
}

type OtherComponent added in v0.2.0

type OtherComponent struct{}

OtherComponent is reserved; send {} until extensions are defined.

type PackagesUpdates

type PackagesUpdates struct {
	Manager                    string   `json:"manager,omitempty"`
	LastPackageIndexRefreshUTC string   `json:"last_package_index_refresh_utc,omitempty"`
	InstalledPackageCount      int      `json:"installed_package_count"`
	PendingUpdatesCount        int      `json:"pending_updates_count"`
	SecurityUpdatesCount       int      `json:"security_updates_count"`
	SecurityUpdatesSample      []string `json:"security_updates_sample,omitempty"`
	Error                      string   `json:"error,omitempty"`
}

type PasswordPolicyFingerprint added in v0.2.0

type PasswordPolicyFingerprint struct {
	PwqualityKeys             []PwqualityKV `json:"pwquality_keys,omitempty"`
	PamPasswordRequisiteLines []string      `json:"pam_password_requisite_lines,omitempty"`
	Error                     string        `json:"error,omitempty"`
}

PasswordPolicyFingerprint reads pwquality.conf and PAM password stack lines (no secrets).

type PathEntry

type PathEntry struct {
	Path          string `json:"path"`
	Exists        bool   `json:"exists"`
	WorldWritable bool   `json:"world_writable"`
}

type PathPermissionsAudit added in v0.2.0

type PathPermissionsAudit struct {
	TmpStickyBitPresent     *bool      `json:"tmp_sticky_bit_present,omitempty"`
	WorldWritableDirsSample []string   `json:"world_writable_dirs_sample,omitempty"`
	SgidItemsSample         []SgidItem `json:"sgid_items_sample,omitempty"`
	UnownedFilesSample      []string   `json:"unowned_files_sample,omitempty"`
	Error                   string     `json:"error,omitempty"`
}

PathPermissionsAudit extends path posture: sticky /tmp, WW dirs, SGID, unowned samples.

type PostfixPosture added in v0.5.0

type PostfixPosture struct {
	Detected     bool    `json:"detected"`
	BinPath      string  `json:"bin_path"`
	Version      *string `json:"version"`
	ServiceState *string `json:"service_state"`

	ListenAddresses *string `json:"listen_addresses"`
	ListenProtocols *string `json:"listen_protocols"`

	Mynetworks                 *string `json:"mynetworks"`
	SmtpdRelayRestrictions     *string `json:"smtpd_relay_restrictions"`
	RelayDomains               *string `json:"relay_domains"`
	SmtpdRecipientRestrictions *string `json:"smtpd_recipient_restrictions"`

	SmtpdTlsSecurityLevel    *string `json:"smtpd_tls_security_level"`
	SmtpTlsSecurityLevel     *string `json:"smtp_tls_security_level"`
	SmtpdTlsProtocols        *string `json:"smtpd_tls_protocols"`
	SmtpdTlsMandatoryCiphers *string `json:"smtpd_tls_mandatory_ciphers"`
	TlsPreemptCipherlist     *bool   `json:"tls_preempt_cipherlist"`

	SmtpdSaslAuthEnable      *bool   `json:"smtpd_sasl_auth_enable"`
	SmtpdSaslSecurityOptions *string `json:"smtpd_sasl_security_options"`
	SmtpdTlsAuthOnly         *bool   `json:"smtpd_tls_auth_only"`
	SubmissionPortEnabled    *bool   `json:"submission_port_enabled"`

	SmtpdSenderRestrictions *string `json:"smtpd_sender_restrictions"`
	SmtpdHeloRequired       *bool   `json:"smtpd_helo_required"`
	SmtpdHeloRestrictions   *string `json:"smtpd_helo_restrictions"`
	SmtpdSenderLoginMaps    *string `json:"smtpd_sender_login_maps"`

	SmtpdBanner         *string `json:"smtpd_banner"`
	ShowqServiceExposed *bool   `json:"showq_service_exposed"`

	SmtpdClientConnectionRateLimit *string `json:"smtpd_client_connection_rate_limit"`
	SmtpdClientMessageRateLimit    *string `json:"smtpd_client_message_rate_limit"`
	SmtpdErrorSleepTime            *string `json:"smtpd_error_sleep_time"`
	SmtpdHardErrorLimit            *string `json:"smtpd_hard_error_limit"`
	MessageSizeLimit               *string `json:"message_size_limit"`

	RunUser            *string `json:"run_user"`
	ChrootRatioSummary *string `json:"chroot_ratio_summary"`
	IsContainerized    *bool   `json:"is_containerized"`

	CollectorWarnings []string `json:"collector_warnings"`
	Error             string   `json:"error,omitempty"`
}

PostfixPosture is allowlisted postconf + bounded master.cf security posture (no postconf -n dump, no queue or mail content).

type PostgresPosture added in v0.5.0

type PostgresPosture struct {
	Detected     bool    `json:"detected"`
	Version      *string `json:"version,omitempty"`
	BinPath      string  `json:"bin_path,omitempty"`
	ServiceState *string `json:"service_state,omitempty"`

	ListenAddresses           *string  `json:"listen_addresses,omitempty"`
	Port                      *int     `json:"port,omitempty"`
	ListenImpliesAllAddresses *bool    `json:"listen_implies_all_addresses,omitempty"`
	PortListenerDiscrepancies []string `json:"port_listener_discrepancies,omitempty"`
	ConfigFilePath            *string  `json:"config_file_path,omitempty"`
	PgHbaFilePath             *string  `json:"pg_hba_file_path,omitempty"`

	TrustRules             []string `json:"trust_rules,omitempty"`
	PasswordCleartextRules []string `json:"password_cleartext_rules,omitempty"`
	Md5RulesCount          *int     `json:"md5_rules_count,omitempty"`
	ScramSha256RulesCount  *int     `json:"scram_sha_256_rules_count,omitempty"`
	WideOpenRules          []string `json:"wide_open_rules,omitempty"`
	HostnosslRulesCount    *int     `json:"hostnossl_rules_count,omitempty"`
	HostRuleCount          *int     `json:"host_rule_count,omitempty"`
	HostsslRuleCount       *int     `json:"hostssl_rule_count,omitempty"`
	LocalRuleCount         *int     `json:"local_rule_count,omitempty"`
	RejectMethodCount      *int     `json:"reject_method_count,omitempty"`
	PeerOrIdentMethodCount *int     `json:"peer_or_ident_method_count,omitempty"`
	RuleOrderRisk          *bool    `json:"rule_order_risk,omitempty"`
	HbaLinesScanned        *int     `json:"hba_lines_scanned,omitempty"`

	Ssl                       *string `json:"ssl,omitempty"`
	SslCertFile               *string `json:"ssl_cert_file,omitempty"`
	SslKeyFile                *string `json:"ssl_key_file,omitempty"`
	SslMinProtocolVersion     *string `json:"ssl_min_protocol_version,omitempty"`
	SslCiphers                *string `json:"ssl_ciphers,omitempty"`
	SslCiphersWeakPatterns    *bool   `json:"ssl_ciphers_weak_patterns,omitempty"`
	SslKeyPermissions         *string `json:"ssl_key_permissions,omitempty"`
	SslMinProtocolWeakOrUnset *bool   `json:"ssl_min_protocol_weak_or_unset,omitempty"`

	LogConnections            *string `json:"log_connections,omitempty"`
	LogDisconnections         *string `json:"log_disconnections,omitempty"`
	LogStatement              *string `json:"log_statement,omitempty"`
	PasswordEncryption        *string `json:"password_encryption,omitempty"`
	SharedPreloadLibraries    *string `json:"shared_preload_libraries,omitempty"`
	PreloadAuditTrailPresent  *bool   `json:"preload_audit_trail_present,omitempty"`
	PasswordEncryptionWeakMd5 *bool   `json:"password_encryption_weak_md5,omitempty"`

	MaxConnections                  *int    `json:"max_connections,omitempty"`
	SuperuserReservedConnections    *int    `json:"superuser_reserved_connections,omitempty"`
	TcpKeepalivesIdle               *string `json:"tcp_keepalives_idle,omitempty"`
	StatementTimeout                *string `json:"statement_timeout,omitempty"`
	IdleInTransactionSessionTimeout *string `json:"idle_in_transaction_session_timeout,omitempty"`

	RunUser               *string `json:"run_user,omitempty"`
	DataDirectory         *string `json:"data_directory,omitempty"`
	DatadirPermissions    *string `json:"datadir_permissions,omitempty"`
	PgHbaPermissions      *string `json:"pg_hba_permissions,omitempty"`
	ConfigFilePermissions *string `json:"config_file_permissions,omitempty"`
	IsContainerized       *bool   `json:"is_containerized,omitempty"`

	CollectorWarnings       []string `json:"collector_warnings,omitempty"`
	LimitedWithoutSQLAccess []string `json:"limited_without_sql_access,omitempty"`
	Error                   string   `json:"error,omitempty"`
}

PostgresPosture is PostgreSQL security posture without SQL (merged postgresql.conf, pg_hba rules, process/fs checks).

type ProcessAccountingPosture added in v0.3.3

type ProcessAccountingPosture struct {
	SadcOnPath             bool   `json:"sadc_on_path,omitempty"`
	SysstatCronHint        bool   `json:"sysstat_cron_hint,omitempty"`
	LdSoPreloadFilePresent bool   `json:"ld_so_preload_file_present,omitempty"`
	LdSoPreloadPath        string `json:"ld_so_preload_path,omitempty"`
	Error                  string `json:"error,omitempty"`
}

ProcessAccountingPosture summarizes sysstat/sadc scheduling and ld.so.preload presence (stat only; no preload content).

type ProcessSignals

type ProcessSignals struct {
	InterpreterPython  int `json:"interpreter_python,omitempty"`
	InterpreterNode    int `json:"interpreter_node,omitempty"`
	InterpreterJava    int `json:"interpreter_java,omitempty"`
	UnknownHashWorkers int `json:"unknown_hash_workers,omitempty"`
}

type ProcessTopEntry

type ProcessTopEntry struct {
	Pid    int32   `json:"pid"`
	Name   string  `json:"name"`
	User   string  `json:"user"`
	CpuPct float64 `json:"cpu_pct"`
	RssMb  float64 `json:"rss_mb"`
}

type PwqualityKV added in v0.2.0

type PwqualityKV struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

PwqualityKV is one non-secret pwquality.conf assignment.

type RedisExposureFingerprint added in v0.2.0

type RedisExposureFingerprint struct {
	UnitActiveState    string `json:"unit_active_state,omitempty"`
	ConfigPathUsed     string `json:"config_path_used,omitempty"`
	Bind               string `json:"bind,omitempty"`
	Port               *int   `json:"port,omitempty"`
	ProtectedMode      string `json:"protected_mode,omitempty"`
	RequirepassPresent *bool  `json:"requirepass_present,omitempty"`
	Error              string `json:"error,omitempty"`
}

RedisExposureFingerprint is non-secret redis.conf exposure hints plus unit state.

type RuntimeEntry

type RuntimeEntry struct {
	Kind       string `json:"kind"`
	Version    string `json:"version"`
	BinaryPath string `json:"binary_path"`
	ManagedBy  string `json:"managed_by"`
}

type SecurityFrameworksAndMalwareDefenseComponent added in v0.2.0

type SecurityFrameworksAndMalwareDefenseComponent struct {
	MacDeepPosture         *MacDeepPosture         `json:"mac_deep_posture,omitempty"`
	MalwareScannersPosture *MalwareScannersPosture `json:"malware_scanners_posture,omitempty"`
	Fail2banPosture        *Fail2banPosture        `json:"fail2ban_posture,omitempty"`
}

SecurityFrameworksAndMalwareDefenseComponent holds MAC deep posture, malware-scanner hints, and fail2ban inventory.

type SelinuxApparmorBlock added in v0.2.0

type SelinuxApparmorBlock struct {
	SelinuxMode     string `json:"selinux_mode,omitempty"`
	ApparmorSummary string `json:"apparmor_summary,omitempty"`
	Error           string `json:"error,omitempty"`
}

SelinuxApparmorBlock reports MAC posture (no policy dump).

type ServiceEntry

type ServiceEntry struct {
	Name          string `json:"name"`
	Manager       string `json:"manager"`
	Enabled       *bool  `json:"enabled,omitempty"`
	ActiveState   string `json:"active_state,omitempty"`
	UnitFileState string `json:"unit_file_state,omitempty"`
}

type ServicesBlock

type ServicesBlock struct {
	Items []ServiceEntry `json:"items"`
	Error string         `json:"error,omitempty"`
}

type SgidItem added in v0.2.0

type SgidItem struct {
	Path  string `json:"path"`
	Owner string `json:"owner"`
	Mode  string `json:"mode"`
}

SgidItem is a bounded setgid file entry (same shape idea as SuidItem).

type ShadowAccountSummary added in v0.2.0

type ShadowAccountSummary struct {
	ShadowReadable                   bool   `json:"shadow_readable"`
	AccountsLockedCount              int    `json:"accounts_locked_count"`
	AccountsNoLoginPasswordCount     int    `json:"accounts_no_login_password_count"`
	AccountsPasswordExpiredHintCount int    `json:"accounts_password_expired_hint_count"`
	AccountsNeverLoggedInHintCount   int    `json:"accounts_never_logged_in_hint_count"`
	Error                            string `json:"error,omitempty"`
}

ShadowAccountSummary is non-secret metadata from /etc/shadow (no hash material).

type SoftwarePackagesAndApplicationsComponent added in v0.2.0

type SoftwarePackagesAndApplicationsComponent struct {
	Services                 ServicesBlock             `json:"services"`
	PackagesUpdates          *PackagesUpdates          `json:"packages_updates,omitempty"`
	HostBackup               *HostBackup               `json:"host_backup,omitempty"`
	HostRuntimes             *HostRuntimes             `json:"host_runtimes,omitempty"`
	WebDbServersFingerprint  *WebDbServersFingerprint  `json:"web_db_servers_fingerprint,omitempty"`
	RedisExposureFingerprint *RedisExposureFingerprint `json:"redis_exposure_fingerprint,omitempty"`
	CronTimersInventory      *CronTimersInventory      `json:"cron_timers_inventory,omitempty"`
	CupsExposureFingerprint  *CupsExposureFingerprint  `json:"cups_exposure_fingerprint,omitempty"`
	MtaFingerprint           *MtaFingerprint           `json:"mta_fingerprint,omitempty"`
	ApacheHttpdPosture       *ApacheHttpdPosture       `json:"apache_httpd_posture,omitempty"`
	NginxPosture             *NginxPosture             `json:"nginx_posture,omitempty"`
	PostfixPosture           *PostfixPosture           `json:"postfix_posture,omitempty"`
	MysqlPosture             *MysqlPosture             `json:"mysql_posture,omitempty"`
	PostgresPosture          *PostgresPosture          `json:"postgres_posture,omitempty"`
	DockerPosture            *DockerPosture            `json:"docker_posture,omitempty"`
}

type SudoersAudit added in v0.2.0

type SudoersAudit struct {
	FilesScanned                     []string `json:"files_scanned,omitempty"`
	NopasswdMentionCount             int      `json:"nopasswd_mention_count"`
	AllAllPatternCount               int      `json:"all_all_pattern_count"`
	WildcardRiskLineCount            int      `json:"wildcard_risk_line_count"`
	IncludedirCount                  int      `json:"includedir_count"`
	DefaultsRequirettyPresent        bool     `json:"defaults_requiretty_present"`
	DefaultsUsePtyPresent            bool     `json:"defaults_use_pty_present"`
	DefaultsVisiblepwInvertedPresent bool     `json:"defaults_visiblepw_inverted_present"`
	Error                            string   `json:"error,omitempty"`
}

SudoersAudit is structural sudoers signal without transmitting full rule bodies. When Error is set, MarshalJSON emits only "error" (no zero-valued counters or flags).

func (SudoersAudit) MarshalJSON added in v0.2.0

func (s SudoersAudit) MarshalJSON() ([]byte, error)

type SuidItem

type SuidItem struct {
	Path  string `json:"path"`
	Owner string `json:"owner"`
	Mode  string `json:"mode"`
}

type SysctlDriftEntry added in v0.2.0

type SysctlDriftEntry struct {
	Key       string `json:"key"`
	FileValue string `json:"file_value,omitempty"`
	LiveValue string `json:"live_value,omitempty"`
}

SysctlDriftEntry compares file-based sysctl vs live kernel.

type SysctlKV added in v0.2.0

type SysctlKV struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

SysctlKV is one sysctl key (dotted) and live string from /proc/sys.

type SysctlLiveBlock added in v0.2.0

type SysctlLiveBlock struct {
	Items []SysctlKV `json:"items"`
	Error string     `json:"error,omitempty"`
}

SysctlLiveBlock is a bounded CIS/STIG-style allowlist read from /proc/sys.

type SysctlOverlayBlock added in v0.2.0

type SysctlOverlayBlock struct {
	ParsedFiles []string           `json:"parsed_files,omitempty"`
	Drift       []SysctlDriftEntry `json:"drift,omitempty"`
	Error       string             `json:"error,omitempty"`
}

SysctlOverlayBlock parses sysctl.conf / sysctl.d and detects drift vs live.

type SyslogDaemonEntry added in v0.3.3

type SyslogDaemonEntry struct {
	Implementation            string   `json:"implementation"`
	UnitName                  string   `json:"unit_name,omitempty"`
	UnitActive                *bool    `json:"unit_active,omitempty"`
	ConfigPathsRead           []string `json:"config_paths_read,omitempty"`
	RemoteLogHosts            []string `json:"remote_log_hosts,omitempty"`
	ForwardingRuleSampleLines []string `json:"forwarding_rule_sample_lines,omitempty"`
}

SyslogDaemonEntry is one syslog implementation detected on the host.

type SyslogForwardingPosture added in v0.3.3

type SyslogForwardingPosture struct {
	Daemons []SyslogDaemonEntry `json:"daemons,omitempty"`
	Error   string              `json:"error,omitempty"`
}

SyslogForwardingPosture summarizes syslog daemons and remote forwarding hints (hostnames only).

type SystemdHealth added in v0.2.0

type SystemdHealth struct {
	SystemdPresent   bool   `json:"systemd_present"`
	DefaultTarget    string `json:"default_target,omitempty"`
	IsSystemRunning  string `json:"is_system_running,omitempty"`
	FailedUnitsCount *int   `json:"failed_units_count,omitempty"`
	LegacyRunlevel   string `json:"legacy_runlevel,omitempty"`
	Error            string `json:"error,omitempty"`
}

SystemdHealth is get-default / is-system-running / failed units (bounded).

type TcpWrappersFingerprint added in v0.2.0

type TcpWrappersFingerprint struct {
	HostsAllowPresent     bool     `json:"hosts_allow_present"`
	HostsDenyPresent      bool     `json:"hosts_deny_present"`
	HostsAllowLineCount   int      `json:"hosts_allow_line_count"`
	HostsDenyLineCount    int      `json:"hosts_deny_line_count"`
	HostsAllowSampleLines []string `json:"hosts_allow_sample_lines,omitempty"`
	HostsDenySampleLines  []string `json:"hosts_deny_sample_lines,omitempty"`
	Error                 string   `json:"error,omitempty"`
}

TcpWrappersFingerprint summarizes hosts.allow / hosts.deny without deep semantics.

type UsbStoragePosture added in v0.2.0

type UsbStoragePosture struct {
	UsbStorageLoaded               bool     `json:"usb_storage_loaded"`
	BlacklistUsbStorageLinePresent bool     `json:"blacklist_usb_storage_line_present"`
	ModprobeFragmentLinesSample    []string `json:"modprobe_fragment_lines_sample,omitempty"`
	Error                          string   `json:"error,omitempty"`
}

UsbStoragePosture reports usb_storage module and modprobe blacklist hints.

type UserSample

type UserSample struct {
	UID   int    `json:"uid"`
	GID   int    `json:"gid"`
	Shell string `json:"shell"`
}

UserSample is intentionally free of login names and home paths (PII); uid/gid/shell only.

type V1

type V1 struct {
	SchemaVersion int        `json:"schema_version"`
	MachineUUID   string     `json:"machine_uuid"`
	ScanSeq       int        `json:"scan_seq"`
	Hostname      string     `json:"hostname,omitempty"`
	Fqdn          string     `json:"fqdn,omitempty"`
	AgentVersion  string     `json:"agent_version,omitempty"`
	Components    Components `json:"components"`
}

V1 is the only supported ingest shape for schema_version == 1.

AgentVersion is the binary's semantic version (set at link time via -ldflags). The API persists it on the Scan row so the backend can gate behavior on agent age — issue #137 backward-compatibility hook for schema quirks that appear between releases.

type WebDbServersFingerprint added in v0.2.0

type WebDbServersFingerprint struct {
	NginxServerTokens         string `json:"nginx_server_tokens,omitempty"`
	NginxConfigPathUsed       string `json:"nginx_config_path_used,omitempty"`
	ApacheServerTokens        string `json:"apache_server_tokens,omitempty"`
	ApacheServerSignature     string `json:"apache_server_signature,omitempty"`
	ApacheConfigPathUsed      string `json:"apache_config_path_used,omitempty"`
	MysqlBindAddress          string `json:"mysql_bind_address,omitempty"`
	MysqlConfigPathUsed       string `json:"mysql_config_path_used,omitempty"`
	PostgresqlListenAddresses string `json:"postgresql_listen_addresses,omitempty"`
	PostgresqlSsl             string `json:"postgresql_ssl,omitempty"`
	PostgresqlConfigPathUsed  string `json:"postgresql_config_path_used,omitempty"`
	Error                     string `json:"error,omitempty"`
}

WebDbServersFingerprint captures bounded web/DB server config hints (no secrets).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL