Skip to content

Local Sensor

Local Sensor

Componente de recolección de telemetría del host donde corre TraceWall. Es la fuente primaria de visibilidad local.

Qué recopila (campos reales)

CategoríaCamposFrecuenciaPermisos
Hosthostname, os, os_version, uptime_seconds, boot_time60 sUsuario estándar
CPUtotal_percent, per_cpu_percent[], freq_current, freq_min, freq_max, load_avg_1/5/1510 sUsuario estándar
Memoriatotal, available, used, free, percent, swap_total, swap_used, swap_percent10 sUsuario estándar
Discopartitions[]: device, mountpoint, fstype, total, used, free, percent30 sUsuario estándar
Interfacesname, type (ethernet/wifi/loopback/tunnel), ipv4[], ipv6[], mac, mtu, speed, duplex, flags (up/broadcast/running), stats (rx/tx bytes/packets/errs/drops)30 sUsuario estándar
ARPip, mac, interface, type (dynamic/static)60 sUsuario estándar
Rutasdestination, netmask, gateway, interface, metric, protocol (kernel/static/dhcp)60 sUsuario estándar
Procesospid, ppid, name, exe, cmdline[], username, cpu_percent, memory_percent, memory_rss, create_time, status, num_threads, open_files, connections[]30 sUsuario estándar (algunos campos req. Admin)
Serviciosname, display_name, status (running/stopped/paused), start_type (auto/manual/disabled), binary_path, pid60 sUsuario estándar
Puertosprotocol (tcp/udp), local_ip, local_port, remote_ip, remote_port, state (listen/established/time_wait), pid, process_name30 sUsuario estándar / Admin (raw sockets)
DNSservers[] (configurados), cache[] (recientes), resolution_latency_ms60 sUsuario estándar

Arquitectura del sensor

┌─────────────────────────────────────────────────────────────┐
│ MAIN PROCESS (Electron) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Sensor Manager (Node.js) │ │
│ │ - Programa timers por módulo │ │
│ │ - Lanza collectors (child_process.fork) │ │
│ │ - Recibe stdout JSON lines │ │
│ │ - Valida schema → Normaliza → Enriquece → SQLite │ │
│ │ - Emite eventos IPC a Renderer (UI updates) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Collector │ │ Collector │ │ Collector │
│ Network │ │ System │ │ Process │
│ (interfaces,│ │ (cpu, mem, │ │ (processes, │
│ ARP, routes)│ │ disk, svc)│ │ ports) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────┼───────────────┘
┌─────────────────┐
│ SQLite (WAL) │
│ tracewall.db │
└─────────────────┘

Collectors (procesos hijos)

CollectorPlataformaMétodo principalDependencias
NetworkWin/LinGetAdaptersAddresses / getifaddrs + ioctl SIOCGARP + GetIpForwardTable / netlinkNpcap (Win) para stats detalladas
SystemWin/LinGetSystemTimes + GlobalMemoryStatusEx / sysinfo + /proc/stat + /proc/meminfoNinguna
ProcessWin/LinEnumProcesses + OpenProcess / /proc/[pid]/stat + /proc/[pid]/cmdlineAdmin/root para cmdline completo de otros usuarios
PortsWin/LinGetExtendedTcpTable / ss -tulpn o netstat parseNpcap (Win) para owner PID en LISTEN; CAP_NET_ADMIN (Lin)

Normalización y enriquecimiento

  1. Validación → JSON Schema por tipo; inválidos → audit_log + drop
  2. Claves de fusióninterface: name+mac, process: pid+create_time, port: proto+local_ip+local_port
  3. Enriquecimiento:
    • OUI lookup (MAC → vendor) — base local IEEE OUI
    • Reverse DNS (cache 1h, async)
    • Geolocalización RFC1918 (privado) / IP pública (si Exposure)
    • Etiqueta subred/gateway (desde rutas)
  4. Persistenciaassets, interfaces, processes, ports, routes, arp, dns tables

Almacenamiento (SQLite — tablas sensor)

-- Interfaces de red
CREATE TABLE interfaces (
id TEXT PRIMARY KEY, -- iface_name@host
name TEXT, type TEXT, mac TEXT,
ipv4 TEXT, ipv6 TEXT, mtu INTEGER,
speed_mbps INTEGER, duplex TEXT,
flags TEXT, rx_bytes BIGINT, tx_bytes BIGINT,
rx_packets BIGINT, tx_packets BIGINT,
rx_errors BIGINT, tx_errors BIGINT,
rx_drops BIGINT, tx_drops BIGINT,
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- ARP
CREATE TABLE arp_entries (
id TEXT PRIMARY KEY, -- ip@iface
ip TEXT, mac TEXT, iface TEXT,
type TEXT, -- dynamic/static
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- Rutas
CREATE TABLE routes (
id TEXT PRIMARY KEY, -- dst/mask@gw@iface
destination TEXT, netmask TEXT, gateway TEXT,
interface TEXT, metric INTEGER, protocol TEXT,
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- Procesos (snapshot periódico)
CREATE TABLE processes (
id TEXT PRIMARY KEY, -- pid@create_time@host
pid INTEGER, ppid INTEGER, name TEXT, exe TEXT,
cmdline TEXT, username TEXT,
cpu_percent REAL, mem_percent REAL, mem_rss BIGINT,
create_time INTEGER, status TEXT, num_threads INTEGER,
open_files INTEGER, connections TEXT, -- JSON
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- Servicios
CREATE TABLE services (
id TEXT PRIMARY KEY, -- name@host
name TEXT, display_name TEXT,
status TEXT, start_type TEXT,
binary_path TEXT, pid INTEGER,
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- Puertos
CREATE TABLE ports (
id TEXT PRIMARY KEY, -- proto@local_ip@local_port@pid
protocol TEXT, local_ip TEXT, local_port INTEGER,
remote_ip TEXT, remote_port INTEGER,
state TEXT, pid INTEGER, process_name TEXT,
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);
-- DNS
CREATE TABLE dns_config (
id TEXT PRIMARY KEY, -- host
servers TEXT, -- JSON array
cache TEXT, -- JSON array
resolution_latency_ms REAL,
last_seen INTEGER, source TEXT DEFAULT 'sensor'
);

Configuración (Settings → Sensor)

ParámetroRangoDefectoImpacto
Telemetría localOn/OffOnNo desactivar salvo diagnóstico
Intervalo polling interfaces/ARP/rutas10–300 s30 sMenor = más fresco, más CPU/DB
Intervalo polling procesos/servicios10–300 s30 sMenor = más procesos visibles
Intervalo polling puertos10–300 s30 sRequiere Npcap/CAP_NET_RAW
Incluir procesos de sistemaOn/OffOffOn = más ruido, más completo
Resolver hostnames (reverse DNS)On/OffOffOn = latencia en LAN grande; cache 1h
Captura paquetes (Exposure)On/OffOnRequiere Npcap (Win) / CAP_NET_RAW (Lin)

Métricas de salud del sensor

MétricaSaludableDegradadoCrítico
Latencia ciclo completo< 2 s2–5 s> 5 s
Tasa éxito módulos100%95–99%< 95%
Interfaces UP detectadas= físicas reales-1≤ 1 (solo loopback)
Gateway en rutasNo
Procesos muestreados> 5010–50< 10
Puertos LISTEN detectados> 51–50
Errores consecutivos01–3≥ 4

Permisos requeridos

PlataformaOperaciónPermiso mínimoElevación para completo
WindowsInterfaces, ARP, RutasUsuario estándarAdmin para contadores perf / cmdline otros usuarios
WindowsPuertos (owner PID)Usuario estándarNpcap + Admin para GetExtendedTcpTable completo
WindowsProcesos (cmdline, open_files)Usuario estándarAdmin para procesos SYSTEM/otros usuarios
LinuxInterfaces, ARP, RutasUsuario estándar
LinuxProcesos (cmdline, fd)Usuario estándarCAP_SYS_PTRACE o root para /proc/[pid]/cmdline ajenos
LinuxPuertos (owner PID)Usuario estándarCAP_NET_ADMIN para ss -tulpn completo

Errores comunes y diagnóstico

Error / LogCausaVerificaciónFix
ENOENT: no such file /proc/net/arpContenedor sin /procls /proc/net/arpNo soportado en contenedor
Npcap not installed (Win)Falta driversc query npcapInstalar Npcap modo WinPcap API-compat
Access denied en OpenProcessSin Adminwhoami /groupsEjecutar como Admin o aceptar datos limitados
CAP_NET_RAW missing (Lin)Sin capabilitygetcap /opt/tracewall/tracewallsudo setcap cap_net_raw+eip /opt/tracewall/tracewall
Interface stats all zeroContadores deshabilitados (Win)lodctr /qlodctr /e:PerfLib
DNS resolution timeoutSin conectividad a DNSnslookup google.comVerificar DNS config / firewall
Sensor health: DEGRADEDMódulo fallandoLogs sensor.logReiniciar app; revisar módulo específico

Limitaciones

LímiteDetalle
Sin agente remotoSolo host local; otros hosts vía integraciones
No captura paquetes completaSolo stats interfaces; Exposure usa raw sockets puntuales
Procesos efímerosIntervalos 30s → pierden procesos < 1s
ContenedoresVe interfaces veth*, docker0; no aisla por namespace
IPv6 temporalPrivacy extensions → MAC no correlacionable estable
Windows containers / WSL2No soportado; sensor ve host Windows, no Linux interno

Páginas relacionadas