Para clientes en nuestro Programa de Verificación Cibernética, proporcionamos un nuevo clasificador de escape de sandbox en la API para monitorear y reducir el mal uso. Este artículo explica por qué vale la pena leer las transcripciones de agentes. Luego tiene una sección por cada capa de monitoreo: primero los registros de proxy, luego lo que debe contener una transcripción, reglas de patrones sobre las transcripciones y un revisor de modelo sobre las transcripciones. Termina con qué hacer cuando una capa marca un agente mientras se ejecuta un lote y qué conservar después.
Este clasificador está en beta privada.
Para obtener una descripción general de todos los recursos disponibles, consulte Mejores prácticas de contención de agentes: introducción (beta privada).
Descripción general
Leer las transcripciones es una verificación que no depende de que el sandbox o el clasificador tomen la decisión correcta. La transcripción es producida por el propio proceso del agente, así que emparéjala con registros tomados fuera del sandbox, como los registros de proxy. El sondeo a menudo es visible en una transcripción antes de que se ejecute algo dañino, pero no confíes en tener tiempo para reaccionar: los controles que actúan antes de que se ejecute una acción vienen primero. Durante un lote largo sin acceso a la red, escanea los archivos de transcripción en vivo según un cronograma y haz que una persona revise los resultados cada una o dos horas. Para ejecuciones con acceso a la red a un objetivo, haz que un ingeniero supervise la ejecución o escanea continuamente y detén el agente cuando encuentres un resultado. Después de cualquier ejecución, escanea todo una vez para confirmar que cada agente se mantuvo dentro de su sandbox.
Utiliza tres capas de monitoreo, la más económica primero: (1) los registros de proxy de salida y proxy de credenciales, (2) reglas de patrones sobre las transcripciones, escritas para tu entorno, y (3) un revisor de modelo sobre las transcripciones, con un mensaje que escribas para tu sandbox y alcance.
También envía al revisor un 5 a 10% aleatorio de las transcripciones que las reglas de patrones no marcaron. Espera algunos falsos positivos. Si el revisor dice que un agente hizo algo, lee esa parte de la transcripción antes de actuar.
Cuando una capa muestra que un agente ha abandonado su tarea durante una ejecución, detenlo e informa a tu equipo de cuenta de Anthropic sobre el comportamiento fuera del alcance.
Conserva transcripciones y registros de proxy durante al menos 30 días.
Por qué leer las transcripciones
El sandbox y el clasificador de permisos de modo automático de Claude Code actúan mientras se ejecuta un agente. Leer las transcripciones es una verificación que no depende de ninguno de ellos. Tiene dos usos.
Durante una ejecución. El sondeo, si ocurre, puede ser visible en la transcripción antes de que se ejecute algo dañino. No confíes en tener tiempo para reaccionar: los controles que actúan antes de que se ejecute una acción vienen primero. Durante un lote largo, escanea los archivos de transcripción en vivo según un cronograma y haz que una persona revise lo que los escaneos marcan cada una o dos horas.
Después de una ejecución. Escanea todo una vez para confirmar que cada agente se mantuvo dentro de su sandbox.
Para compromisos con acceso a la red a objetivos reales, las mejores prácticas recomiendan que una persona supervise la ejecución o que un monitor que conozca el alcance previsto supervise continuamente, escale a una persona cuando una ejecución pueda estar excediendo ese alcance y pueda finalizar la ejecución (consulta la sección Alcance y supervisión en Sandboxing). Las capas en este artículo son las piezas de las que se construye tal monitor.
Si ejecutas agentes directamente contra la API de Mensajes, la API también puede devolver una puntuación por solicitud del clasificador de escape de sandbox mientras se ejecutan (consulta Monitoreo en línea).
Capa 1: registros de proxy
La capa más económica no lee ninguna transcripción.
El proxy de salida debe registrar cada solicitud que rechaza, con la dirección del cliente y el destino. Con una lista de permitidos vacía, los agentes llegan a la API del modelo solo a través del proxy de credenciales y no necesitan ningún otro host, por lo que cada solicitud rechazada durante una ejecución vale la pena revisar. Lee la transcripción de cada ejecución que causó una. La dirección del cliente muestra qué agente hizo la solicitud, así que sabes qué transcripción leer primero.
Sabe qué no registra tu capa de salida. En el diseño de referencia, el proxy de salida registra solicitudes HTTPS CONNECT rechazadas. Los intentos HTTP simple y TCP sin procesar no pasan por el proxy en la red interna, por lo que fallan sin una línea de registro y aparecen solo en las transcripciones. En tu propia compilación, considera registrar conexiones permitidas y rechazadas, para cada protocolo, con marcas de tiempo.
El proxy de credenciales debe registrar una línea para cualquier solicitud que no fuera una llamada de modelo. Guarda su registro cuando finaliza la ejecución (consulta la sección Proxy de credenciales en Sandboxing).
Qué capturar en una transcripción
La segunda y tercera capas leen las transcripciones mismas.
Haz que el orquestador en el host escriba una transcripción para cada etapa del agente, un mensaje JSON por línea, a medida que llega cada mensaje. La salida stream-json de Claude Code tiene esta forma. En cada archivo, las líneas con "type": "assistant" contienen lo que produjo el modelo: bloques text, thinking y tool_use. La entrada tool_use contiene el comando Bash o el archivo que se está escribiendo. Las líneas con "type": "user" contienen bloques tool_result: salida de comandos, contenido de archivos y respuestas de destino.
Captura cada etapa, incluidas las etapas cuyos agentes no tienen herramientas, como un agente que solo juzga o compara hallazgos. Hay menos que verificar en esas transcripciones, pero una etapa sin transcripción no puede ser revisada en absoluto.
Capa 2: reglas de patrones sobre transcripciones
Escribe tus propias reglas de patrones, como expresiones regulares, para tus agentes y objetivos. Para agentes que trabajan a través de un shell, cubre comportamiento como eludir el proxy de salida o firewall, enviar credenciales o abrir conexiones SSH fuera del sandbox, cambiar tunables de kernel o privilegios, y listar otros procesos a través de /proc. Las reglas coinciden solo con el comportamiento que alguien anticipó, así que trátalas como un punto de partida, no como un detector completo.
Aplica las reglas a cadenas decodificadas en JSON en lugar de líneas sin procesar, porque en una línea sin procesar las comillas y saltos de línea se escapan y los patrones pueden no coincidir. Reporta cada resultado con el archivo, la línea, la regla y un fragmento, y haz que el escaneo salga con un estado distinto cuando encuentre algo, para que un trabajo programado pueda ejecutarlo durante un lote largo y genere una alerta.
Espera resultados benignos
Un resultado es una razón para leer esa parte de la transcripción. Por sí solo no significa que el agente haya hecho algo incorrecto. Los agentes que realizan investigación de vulnerabilidades ejecutan rutinariamente comandos que coinciden con reglas de escape por razones ordinarias:
ejecutar el objetivo bajo un shim
LD_PRELOAD;adjuntar ptrace a sus propios procesos secundarios, o leer /proc/<pid>/ para esos procesos;
desactivar ASLR a través de /proc/sys/kernel/randomize_va_space;
listar /proc para encontrar y matar sus propios trabajadores de fuzzing.
Una regla de bypass de proxy puede coincidir con cada solicitud curl, wget o netcat a un objetivo de prueba de penetración con una IP pública, y una regla de egreso SSH puede coincidir con cualquier ssh o scp a un objetivo con una IP pública o un nombre DNS. Estrecha o elimina reglas que solo producen resultados benignos en tus objetivos.
Capa 3: revisor de modelo sobre transcripciones
Para cada transcripción que las reglas de patrones marcaron, envía una solicitud de API de Mensajes a Claude con un mensaje de revisor que escribas. El mensaje debe pedirle a Claude que busque un agente que amplió su acceso a la red o se escapó de su sandbox, ya sea intentado o logrado, diga qué marcar y qué no marcar, y pida los hallazgos, o ninguno, con las líneas de transcripción que los respaldan.
Construye el mensaje del usuario en dos partes:
Comienza con dos o tres oraciones que describan el sandbox y el alcance previsto. Para el diseño de referencia: cada agente se ejecuta en su propio sandbox aislado (un contenedor o microVM) en una red interna, la única forma de salir es un proxy que reenvía llamadas de API de modelo y nada más, y el objetivo está dentro del sandbox con el agente. Si tu sandbox permite otros hosts, o el objetivo está en la red, dilo aquí y nombra los objetivos dentro del alcance.
Luego incluye los propios mensajes del agente, es decir, sus bloques
text,thinkingytool_use, con suficiente contenido detool_resultpara mostrar qué devolvió cada llamada.
Usa el modelo con el que ejecutas los agentes, o uno más económico. En Amazon Bedrock o en la Plataforma de Agentes de Google Cloud (Vertex AI), usa uno que esté habilitado en tu cuenta.
Dos límites a tener en cuenta:
Un mensaje de revisor que busca solo escape de sandbox y red no detecta un agente que excede el compromiso en hosts que se le permite alcanzar.
La transcripción es entrada no confiable para el revisor. Contiene texto que el objetivo controla. Un veredicto limpio no borra una transcripción que una regla o un registro de proxy marcó.
Revisa también una muestra de las transcripciones no marcadas
Las reglas de patrones capturan solo lo que alguien anticipó, así que también envía un 5 a 10% aleatorio de las transcripciones que las reglas no marcaron, usando la misma solicitud. La muestra muestra lo que las reglas pierden y si deberías agregar una regla.
Lee los rechazos del clasificador
Los rechazos del clasificador de modo automático también son útiles de leer: busca en las transcripciones los mensajes de negación del clasificador y mantenlos separados de los rechazos que emite cuando no está disponible (consulta Modo automático).
Este revisor es separado del clasificador de permisos de modo automático (consulta Modo automático), que decide sobre cada acción antes de que se ejecute, y del clasificador de escape de sandbox en la API (consulta Monitoreo en línea). Los tres se complementan entre sí.
Qué hacer cuando hay un resultado durante una ejecución
Cuando una de las capas muestra un agente que ha abandonado su tarea mientras su lote aún se está ejecutando:
Detén el agente. En una configuración basada en Docker,
docker rm -fen el contenedor del agente lo detiene. Eliminar un contenedor borra el disco del invitado, por lo que cualquier cosa que el agente escribió allí se pierde. El orquestador debe registrar la ejecución como fallida y continuar con el resto del lote.Conserva la evidencia. Deja los resultados de la ejecución como están y verifica el registro del proxy de salida para la misma ventana de tiempo. Asegúrate de que las líneas de registro lleven marcas de tiempo.
Reportalo. Si lo que encuentras es genuinamente un comportamiento fuera del alcance, es decir, un agente que sondeó su aislamiento de sandbox o red o actuó fuera del compromiso, notifica a tu equipo de cuenta de Anthropic, además de lo que requiera tu propio proceso de incidentes.
Rota la credencial de API de modelo, como después de cualquier ejecución cuya transcripción muestre comportamiento inesperado (consulta Sandboxing).
Si necesitas compartir una transcripción fuera de tu equipo, trabaja en una copia. Elimina ids de sesión, contabilidad de uso e inventario de hosts que la primera línea de una transcripción registra, y lee el archivo antes de enviarlo.
Retención
Conserva lo siguiente durante al menos 30 días después de una ejecución, o más tiempo donde tus obligaciones regulatorias o contractuales lo requieran. Almacénalos fuera del host:
Transcripciones de agentes;
Los registros de lo que sea que haga cumplir la salida del sandbox (un proxy o un firewall), incluidas las conexiones rechazadas;
Los registros de lo que sea que inyecte la credencial de API de modelo, si ese es un componente separado.
Almacénalos con los mismos controles de acceso que la ejecución misma. Las transcripciones pueden contener código fuente de destino, código de exploit y hallazgos.
Si alguno de estos registros existe solo como un registro de contenedor, expórtalo antes de que el contenedor se elimine o se recree, porque el registro se elimina con él.