El enfoque por defecto de grabación de sesión es tomar una captura de pantalla cada pocos segundos. El resultado es un índice lleno de fotogramas que se parecen entre sí — el usuario lee la página, el usuario lee la página, el usuario todavía lee la página — con eventos realmente importantes intercalados en algún punto entre dos instantáneas que llegan demasiado tarde y solo muestran el resultado.
La captura periódica también pierde la respuesta a la pregunta más importante para cualquier auditoría o investigación: ¿qué hizo el usuario? Una instantánea tomada 1,5 segundos después de un clic no muestra en qué se hizo clic. Una instantánea tomada 3 segundos después de un envío de formulario no muestra qué se escribió. En el registro de auditoría hay eventos sin contexto; en las capturas de pantalla hay contexto sin eventos. Vincularlos es trabajo manual que escala mal con el número de sesiones.
ZeroLeak usa un enfoque diferente. Las capturas de pantalla se activan en los propios eventos, no en un temporizador. Las navegaciones capturan dos capturas de pantalla — la página antes del clic y después de que la nueva página cargue — de modo que la causa y el efecto se conservan como un par. La posición del ratón se dibuja en cada captura, de modo que se vea en qué se hizo clic. Las entradas de teclado se almacenan en búfer en palabras legibles. Por debajo se graba video continuo, de modo que los huecos entre los eventos capturados todavía se puedan reproducir si hace falta.
Para cada sesión funcionan en paralelo tres subsistemas de grabación: capturas de pantalla activadas por eventos en los momentos críticos, video FFmpeg continuo a la tasa de fotogramas configurada, y un registro de eventos estructurado con entrada de teclado en búfer por palabras y actividad completa del portapapeles. Cada uno se puede activar y desactivar por servicio protegido; por defecto los tres funcionan juntos, de modo que la reconstrucción siempre sea posible.
Las capturas se activan por las acciones reales del usuario — clics, navegaciones de página, envíos de teclas, envíos de formulario, operaciones del portapapeles. No hay sondeo basado en tiempo que llene el disco con fotogramas vacíos. Cada captura de pantalla captura un momento importante; el índice es corto e informativo, no largo y ruidoso.
En cada captura de pantalla capturada la posición del ratón está marcada con un indicador visible — un punto rojo en las coordenadas exactas del clic o del hover. Ve en qué hizo clic el usuario, no la página que resultó del clic. Reconstrucción de la intención en un solo fotograma, no un rompecabezas de múltiples fotogramas.
Cuando el usuario navega se capturan dos capturas de pantalla — una de la página antes del clic, otra de la página de destino después de que el nuevo contenido cargue por completo. La causa y el efecto se conservan como un par. El revisor ve 'el usuario hizo clic en el enlace X, la siguiente página que cargó fue Y' como dos fotogramas contiguos.
Los eventos de tecla individuales se acumulan en un búfer que se descarga en espacio, enter, tab o una pausa corta. El resultado se lee como el texto que el usuario escribió, no como un volcado de eventos tecla a tecla. Los retrocesos se conservan como marcas [BS], de modo que las correcciones sean visibles. Las teclas repetidas (mantenidas pulsadas) se filtran. Las operaciones del portapapeles se registran por separado junto con su contenido real.
Cada mecanismo de captura se puede configurar de forma independiente por servicio protegido y funciona sin impacto en el rendimiento de la sesión del usuario. Los tres flujos (capturas de pantalla, video, registro de eventos) están alineados con marcas de tiempo, de modo que el revisor pueda pasar entre ellos sin problemas.
Las capturas de pantalla se activan en clics del usuario, navegaciones (con par de antes y después), envíos de formulario, envíos de teclas (Enter), operaciones del portapapeles (copiar, cortar, pegar), capturas activadas manualmente desde la consola del operador y varios otros tipos de eventos importantes. La lista exacta de eventos se puede configurar por servicio protegido.
En una navegación, la captura de pantalla de destino se captura solo después de que la nueva página termine de cargar — esperando a que la red se vacíe más un breve retardo de render adicional. La captura de pantalla capturada muestra la página tal como el usuario realmente la verá, no un estado intermedio a medio cargar.
Bajo las capturas de pantalla activadas por eventos, la sesión se graba de forma continua en video usando x11grab de FFmpeg. La tasa de fotogramas se puede configurar (por defecto 10 fps para archivos compactos; tasas más altas disponibles para captura de alto detalle). El video se divide en segmentos para un streaming y replay seguros; los segmentos llevan marca de tiempo para alinearse con los flujos de capturas de pantalla y de registro de eventos.
Los eventos de tecla se acumulan en un búfer que se descarga en los límites de palabra (espacio, enter, tab) o después de una pausa breve vacía. La cadena descargada se lee como texto — 'hola mundo [BS][BS][BS][BS][BS]adiós mundo' — conservando la intención y las correcciones del usuario sin el ruido de cada evento keydown individual.
Las operaciones de copiar, cortar y pegar se registran por separado de las entradas de teclado, incluyendo el contenido real del portapapeles correspondiente. Un revisor ve exactamente qué se copió y qué se pegó, no solo que ocurrió un evento del portapapeles.
Las capturas de pantalla se numeran de forma secuencial (0001, 0002, ...) y se almacenan junto con la marca de tiempo y los metadatos del evento. La consola del operador las lista junto con el evento que las activó, de modo que el revisor pueda saltar directamente al momento que le interesa — por ejemplo, todas las capturas activadas por el portapapeles en una sesión o el par de navegación en torno a una URL concreta.
Más allá de las capturas de pantalla y el video, un registro de eventos estructurado captura el historial de interacción del usuario con todo el contexto. Cada evento tiene un tipo, una marca de tiempo, una referencia a una captura de pantalla asociada (cuando aplica) y su payload correspondiente. Eso es lo que hace el registro no solo hojeable visualmente, sino buscable y analíticamente útil.
Cada evento de clic registra las coordenadas x/y y el elemento del DOM bajo el cursor (etiqueta, clase, ID, contenido de texto cuando está disponible). El revisor puede buscar en la grabación de sesión los clics en un botón o enlace concreto, sin tener que hojear las capturas de pantalla buscando uno.
Los cambios de posición de scroll se registran con throttle para evitar el spam de registros. Resolución suficiente para reconstruir dónde miró el usuario en páginas largas, pero sin producir miles de eventos de scroll innecesarios por minuto.
Cada navegación — cargas de página completas, cambios de pushState de aplicaciones de página única, cambios programáticos de ubicación — se registra con la URL de origen, la URL de destino, el activador (clic en enlace, manual, programático) y el tiempo de finalización. Las navegaciones SPA que el registro tradicional pierde se atrapan en la capa de sondeo de URL de ZeroLeak.
Cuando el usuario envía un formulario, el registro de eventos captura la URL de acción del formulario, su método y los nombres de los campos. Los valores reales de los campos se capturan a través del registro de entrada de teclado (de modo que se conserve el historial de escritura), no se repiten en el evento de formulario.
La sesión monitorea la actividad del usuario en la capa de entrada. Las transiciones entre los estados activo e inactivo se registran con marcas de tiempo, de modo que los revisores puedan ver los periodos de atención y la inactividad — útil para la revisión de cumplimiento y las preguntas de auditoría basadas en tiempo.
Al final de la sesión se registran metadatos de resumen: duración total, distribución inactivo-activo, total de eventos de cada tipo, capturas de pantalla generadas, referencias a archivos de video y motivo de terminación (timeout, terminación manual, error). Si se configura un webhook de coordinador, este resumen también se dispara hacia él.
Reguladores que preguntan qué hicieron usuarios concretos en sesiones concretas — revisión HIPAA del acceso a registros de pacientes, cumplimiento de la mesa de inversión financiera, auditorías de tratamiento de datos gubernamentales. La captura activada por eventos produce un rastro por sesión corto e informativo que los revisores pueden recorrer rápidamente.
Cuando se sospecha de una fuga o una violación de política, el investigador debe saber qué hizo exactamente el usuario — no solo cuándo. Las capturas de pantalla secuenciales con el ratón marcado, las entradas de teclado en búfer por palabras y el contenido completo del portapapeles hacen la sesión reproducible en detalle sin ver horas de video.
Usuarios externos a los que se da permiso solo de visualización en su entorno. La grabación completa por sesión — junto con la marca de agua visible que identifica al usuario — proporciona rendición de cuentas de todo lo que vieron y cada acción que hicieron durante la ventana de acceso.
Tras un evento inesperado en una consola SCADA u operativa, la grabación muestra qué vio exactamente el operador en los momentos previos y en qué controles hizo clic. El par de antes y después de la navegación acelera mucho el diagnóstico de errores en cadena.
Abriremos una sesión, haremos clic en algunos enlaces, rellenaremos algunos formularios, copiaremos algo de contenido y mostraremos el índice de capturas de pantalla resultante, el registro de teclado y los segmentos de video — y cómo un revisor reconstruye la sesión a partir de ellos.