shell.exec
con rm -rf /, una API de pagos con una cantidad de transferencia excesiva,
una herramienta de base de datos apuntando a la réplica de producción. Este
es el abuso de herramientas de agentes, y es uno de los riesgos más
consecuentes en los sistemas agénticos porque las llamadas a herramienta
tienen efectos secundarios en el mundo real que a menudo son irreversibles.
El Agent Firewall tiene tres defensas en capas. Puedes desplegarlas
independientemente o en combinación.
1. Lista de permitidos: deniega todo lo que no permitiste explícitamente
El control más fuerte es una lista de permitidos. En lugar de intentar enumerar cada herramienta peligrosa, enumeras las herramientas que este agente legítimamente necesita — y niegas todo lo demás. Esta es la línea base zero-trust. Una política condefault_verdict: deny y reglas allow explícitas para
cada herramienta aprobada logra esto. Ejemplo: un agente que solo debería
leer de un CRM:
shell.exec, db.delete, payment.transfer — ya sea
emitida intencionalmente o desencadenada por una instrucción inyectada —
alcanza el catch-all * y devuelve un error HTTP 400 firewall_blocked. El
agente ve un error de herramienta estructurado y no puede reintentar (el
bloqueo está marcado skip-retry), así que no puede hacer un bucle alrededor
de la denegación.
Establece el
default_verdict de tu política a deny para la aplicación
completa de lista de permitidos. Con el veredicto audit por defecto, las
llamadas no coincidentes están permitidas y registradas pero no bloqueadas —
útil durante el despliegue pero no un control de seguridad por sí mismo.| Patrón | Qué cubre |
|---|---|
crm.* | Todas las herramientas en el espacio de nombres crm |
*.read | Cualquier herramienta de verbo de lectura en todos los servidores |
db.query | Exactamente esta herramienta |
* | Todo (usa esto para tu deny catch-all) |
allow específicas en números de
prioridad bajos y el deny catch-all en uno alto.
2. Validación de argumentos: permite la herramienta, bloquea la invocación peligrosa
Una lista de permitidos sobre nombres de herramientas es gruesa — bloqueashell.exec por completo. A veces quieres permitir una herramienta pero
restringir cómo puede llamarse. Las cláusulas de argumentos te permiten
coincidir en campos específicos dentro de los argumentos de la llamada a
herramienta, usando JSONPath y un conjunto de operadores.
Ejemplo: permite shell.exec pero bloquea rm -rf
shell.exec se llama y el argumento
$.command coincide con el regex de comando destructivo. Una llamada normal a
shell.exec con un comando seguro cae a la siguiente regla (o el veredicto
por defecto). Pon esta regla en un número de prioridad menor que cualquier
regla general allow shell.exec para que se dispare primero.
El conjunto completo de operadores de argumentos:
| Operador | Úsalo cuando |
|---|---|
eq | Coincidencia exacta en un valor escalar (cadena o número) |
contains | Coincidencia de subcadena — p. ej. $.query contains DROP TABLE |
regex | Coincidencia de patrón RE2 — seguro en la ruta caliente, sin retroceso |
in | El valor debe estar en un array dado — p. ej. permite solo entornos específicos |
cidr_match | Dirección IP en un bloque CIDR — útil para verificaciones de destino de egress |
gt / lt | Comparación numérica — p. ej. $.amount gt 10000 para topes de pago |
args_match son AND. Si un path no existe
en los argumentos de la llamada, la cláusula evalúa false y la regla no se
dispara — la llamada cae a la siguiente regla o al valor por defecto.
Ejemplo de guardia de pago — niega cualquier llamada a herramienta de pago
con una cantidad que supere un umbral:
3. Humano en el ciclo: retiene llamadas de alto riesgo para aprobación
Para herramientas que son genuinamente necesarias pero de alto riesgo — desencadenar un despliegue, aprobar un reembolso, enviar un email masivo — puedes requerir la firma de un humano antes de que proceda la llamada. El veredictopending_approval retiene la llamada y devuelve una respuesta
firewall_approval_pending al agente:
pending_approval es compatible con cláusulas de argumentos — puedes retener
solo las invocaciones que coincidan con un umbral y dejar pasar las rutinarias:
4. Cómo se ve una llamada bloqueada
Una llamada denegada en la superficie inbound (herramienta anunciada en la solicitud) devuelve HTTP 400 con el código de errorfirewall_blocked.
La respuesta incluye metadata estructurada — la etiqueta de la regla
coincidente, el código de razón y los factores de riesgo — y está marcada
skip-retry para que un bucle no pueda martillar la misma llamada denegada.
Una llamada bloqueada en la superficie response (el modelo ya emitió
tool_calls) devuelve un error de herramienta visible para el modelo,
dándole una oportunidad de reaccionar — elegir una herramienta diferente,
preguntar al usuario o detenerse — en vez de fallar.
5. Ordenamiento gana-la-primera-coincidencia
El ordenamiento por prioridad importa. El motor recorre las reglas en orden ascendente de prioridad y se detiene en la primera coincidencia. Un patrón común:| Prioridad | Regla | Veredicto |
|---|---|---|
| 5 | shell.exec + regex destructivo | deny |
| 10 | shell.* (general) | allow |
| 20 | crm.* | allow |
| 9999 | * (catch-all) | deny |
shell.exec
con un comando destructivo se niega aunque haya un allow general para
shell.*. Sin el deny de baja prioridad, la regla allow shell.* ganaría
primero.
6. Despliega de forma segura con el modo shadow
Antes de cambiar una nueva política a modo de aplicación, activa el modo shadow. La política evalúa cada llamada a herramienta y registra el veredicto exactamente como lo haría en producción, pero cada veredicto aplicante (deny, pending_approval, sanitize) se degrada a audit —
nada se bloquea. La razón en el log de eventos tiene el prefijo [shadow] would deny para que puedas medir el impacto en las vistas de Events y
Runs.
Una vez que hayas confirmado que la política se dispara en lo que esperas —
y nada que no pretendías — desactiva el modo shadow. La siguiente llamada se
aplica.
El nivel de autonomía
tight aplica el preset block_destructive_shell
automáticamente. Si necesitas una postura rápida sin escribir reglas, aplica
tight desde la consola y envía una política de denegación para llamadas de
shell destructivo en un paso. Luego puedes añadir tus propias reglas de lista
de permitidos encima. Ver Niveles de autonomía.7. Amenazas relacionadas
El abuso de herramientas de agentes raramente llega de forma aislada. Una llamada a herramienta no autorizada es a menudo la consecuencia de otro vector de ataque:- Inyección de prompts — un atacante incrusta instrucciones en el contenido recuperado que dirigen al agente hacia herramientas que no debería llamar.
- Agencia excesiva — el agente recibió más acceso a herramientas de lo que requiere su tarea, haciendo cualquier inyección o mala configuración inmediatamente peligrosa.
- El modelo de amenazas — cómo el abuso de herramientas encaja en la superficie de ataque completa para los sistemas agénticos.
Referencia de reglas del firewall
El lenguaje completo de coincidencia — globs de herramienta, cláusulas de
argumentos, todos los operadores, veredictos y la API.
Vista general del firewall
Políticas, superficies, niveles de autonomía, aprobación HITL y
observabilidad.
