App-ID y Policy Optimization
Resumen
App-ID es la tecnología que identifica qué aplicación viaja en el tráfico (Facebook, Microsoft Teams, SSH, DNS, BitTorrent), sin importar el puerto que use. Un firewall tradicional permite “el puerto 443”; Palo Alto permite “la aplicación ssl” o “la aplicación ms-teams”, y por eso puede bloquear una función específica (como el chat de Facebook) y dejar pasar el resto. Para identificarla usa firmas, análisis de protocolo (decoders), heurísticas y análisis de comportamiento, y va refinando su conclusión a medida que ve más paquetes de la session.
En la práctica, App-ID cambia cómo escribes las reglas: pasas de reglas por puerto a reglas por aplicación. Esta nota cubre cómo usar aplicaciones en las reglas, qué son las dependencias, cómo agrupar aplicaciones con grupos y filtros, cómo ordenar reglas para evitar el shadowing y cómo usar Policy Optimizer para reemplazar reglas amplias por reglas basadas en las aplicaciones que realmente se usan.
Requisitos previos
- Reglas de Security Policy funcionando (ver Security Policy Fundamentals)
- Contenido de Applications and Threats instalado y actualizado (ver Updates y Upgrades)
- Logging activado en las reglas, para que Policy Optimizer vea las aplicaciones usadas
- Para aplicaciones cifradas (ssl): decryption configurado si necesitas ver más allá de
ssl(ver Decryption Forward Proxy) - Saber qué aplicaciones quieres permitir o bloquear
Cómo identifica App-ID
| Método | Qué hace |
|---|---|
| Application signatures | Patrones conocidos en el tráfico |
| Protocol decoders | Entienden el protocolo (HTTP, SSH, DNS) y verifican que se cumpla |
| Heuristics | Detectan comportamiento cuando no hay firma clara |
| Behavior analysis | Evalúa cómo se comporta el flujo |
| Protocol analysis | Examina la conversación del protocolo |
| Decryption | Con SSL/SSH decryption, App-ID ve el contenido real |
Estados de la identificación. Mientras identifica, el tráfico puede aparecer como:
| Estado | Significado |
|---|---|
incomplete | El handshake TCP no se completó, o se completó pero no llegaron datos |
insufficient-data | Hubo datos, pero no los suficientes para identificar |
unknown-tcp / unknown-udp | No se pudo identificar; puede ser una aplicación propia, cifrada o desconocida |
not-applicable | El firewall descartó el tráfico antes de llegar a App-ID |
Granularidad y cambios durante la session. App-ID empieza con una coincidencia amplia y se refina: primero ssl, después facebook-base, después facebook-chat. Después del handshake TCP, los primeros paquetes con datos son los que le permiten decidir. La aplicación puede cambiar a mitad de la session, y la regla que se aplica puede cambiar con ella.
graph LR A["Handshake TCP"] --> B["incomplete /<br/>insufficient-data"] B --> C["ssl"] C --> D["facebook-base"] D --> E["facebook-chat"] E --> F["Regla de Security Policy<br/>que coincide con la aplicación final"]
Propiedades de una aplicación
Objects > Applications > busca la aplicación (hay miles) para ver sus propiedades:
| Campo | Qué indica |
|---|---|
| Standard Ports | Los puertos habituales (por ejemplo tcp/80,443) |
| Depends on | Otras aplicaciones que debes permitir explícitamente para que ésta funcione |
| Implicitly Uses | Otras aplicaciones que se permiten solas al permitir ésta |
| Deny Action | Qué hace un Deny con esta aplicación (drop-reset envía un reset; otras descartan en silencio) |
| Category / Subcategory | Clasificación (por ejemplo saas / office-programs) |
| Risk | Nivel de 1 a 5 |
| Characteristics | Evasive, Excessive Bandwidth Use, Used by Malware, Capable of File Transfer, Has Known Vulnerabilities, Tunnels Other Applications, Prone to Misuse, Widely Used, SaaS |
| Timeouts | TCP Timeout, TCP Half Closed, TCP Time Wait |
Ejemplo, ms-teams-posting: Depends on ms-teams; Standard Ports tcp/80,443; Deny Action drop-reset. Para permitirlo, hay que permitir también ms-teams (y lo que éste a su vez necesite).
Configuración (Ejemplo, Lab PCNSA y Lab Network Security Engineering)
1. Usar aplicaciones en una regla
- Policies > Security > Add > General: Name.
- Source: Source Zone
inside, Source AddressUser Subnets. Destination: Destination Zoneoutside. - Application > Add: elige las aplicaciones (o grupos y filtros).
- Service/URL Category:
application-default. - Actions: Action
AllowoDeny. - OK y Commit.
set rulebase security rules Allow-Web from inside to outside source User_Subnets destination any application [ web-browsing ssl ] service application-default action allow
Si una aplicación necesita sus dependencias, agrégalas también o usa un grupo.
2. Application Group
- Objects > Application Groups > Add > Name (ej.
Collab-Allowed). - Applications > Add: las aplicaciones permitidas y sus dependencias (Depends on).
- OK. Úsalo en la regla en lugar de la lista.
3. Application Filter (se actualiza solo)
- Objects > Application Filters > Add > Name (ej.
Risk 5 apps). - Elige criterios: Category, Subcategory, Technology, Risk (ej.
5), Characteristic. - Opcional: marca Apply to New App-IDs Only, para que el filtro solo incluya App-IDs que llegaron en actualizaciones recientes de contenido.
- OK. Úsalo en Application de una regla: cada App-ID nuevo que cumpla el criterio entra automáticamente.
4. Bloquear una función específica y permitir el resto
Ejemplo: permitir Facebook pero no su chat.
- Regla arriba: Name
No FB-CHAT, Applicationfacebook-chat, ActionDeny. - Regla debajo: Name
Most of FB, Applicationsfacebook-base,ssl,dtls,mqtt-base,rtcp,stun(las dependencias), ActionAllow. - Commit.
El orden importa
La regla de bloqueo debe estar arriba de la de permiso. Si la de permiso está arriba y coincide con el mismo tráfico, la de bloqueo nunca se evalúa (rule shadowing).
5. Tags y agrupación de reglas
- Objects > Tags > Add > Name (ej.
in2out), Color. - Policies > Security > (regla) > Tags: selecciona el tag. En Group Rules By Tag puedes elegir el tag para agrupar.
- Para ver la tabla agrupada: marca View Rulebase as Groups (barra inferior de Policies > Security).
6. Policy Optimizer
Convierte reglas amplias (por puerto o any) en reglas por aplicación usando lo que realmente se vio en el tráfico.
- Policies > Security > Policy Optimizer (panel izquierdo).
- Rules Without App Controls (en versiones anteriores, No App Specified): reglas con
anyen aplicación. Selecciona una regla > Compare o Add to This Rule / Create Cloned Rule para reemplazaranypor las aplicaciones vistas. - Unused Apps: reglas que permiten aplicaciones que nunca se usaron; quítalas.
- Rule Usage: reglas sin tráfico en un período; candidatas a borrar.
- En Policies > Security, la columna Apps Seen muestra cuántas aplicaciones coincidieron con cada regla.
- Commit.
Para que funcione, la regla debe haber recibido tráfico con logging activo.
7. Aplicaciones personalizadas y Application Override (complemento)
- Custom Application: Objects > Applications > Add. Defines Name, Category, Subcategory, Technology y, en Advanced, puertos o firmas. Útil para una aplicación propia que App-ID no reconoce.
- Application Override: Policies > Application Override > Add. Define origen, destino, protocolo y puerto, y asigna una aplicación fija. El tráfico se clasifica por esa regla sin pasar por App-ID ni Content-ID. Úsalo solo cuando no hay alternativa.
Verificación
| Comando o lugar | Qué debes ver | Si no lo ves |
|---|---|---|
| Monitor > Logs > Traffic, columna Application | La aplicación identificada de cada sesión | Si ves unknown-tcp, mira “Errores comunes” |
test security-policy-match from inside to outside source 10.10.0.105 destination 157.240.1.35 protocol 6 destination-port 443 application facebook-chat | La regla que bloquea el chat (la de arriba) | Si coincide la de permiso, el orden está mal |
show session all filter application facebook-chat | Sesiones con esa aplicación | Si no hay, la aplicación no se identificó como tal |
show session id <n> | application final de la session y la regla | Si la aplicación cambió durante la session, revisa si coincide otra regla |
| Resultado del commit > pestaña Rule Shadow | Reglas que quedaron tapadas por otra | Si está vacía, no hay shadowing detectado |
| Policies > Security > Policy Optimizer | Reglas sin aplicación, aplicaciones sin usar, reglas sin tráfico | Si está vacío, no hay logs ni tráfico suficientes |
| ACC > Network Activity | Aplicaciones con más tráfico | Útil para decidir qué permitir |
Errores comunes
Permití la aplicación y no funciona
- Causa: falta una dependencia (
Depends on), por ejemplossloweb-browsing, o la aplicación usa un puerto distinto al estándar y el servicio esapplication-default. - Revisa: Monitor > Logs > Traffic: mira qué aplicación aparece en los bloqueos, y Objects > Applications > Depends on.
- Solución: agrega las dependencias o un servicio con el puerto real.
Después de un update de contenido algo se bloquea
- Causa: un App-ID nuevo reclasificó tráfico que antes se veía como otra aplicación (por ejemplo
ssl), y no está permitido. - Solución: permite el App-ID nuevo o crea una regla temporal, y usa Disable new apps in content update con un Threshold (ver Updates y Upgrades).
La aplicación aparece como unknown-tcp o unknown-udp
- Causa: tráfico cifrado sin decryption, aplicación propia, protocolo no estándar o un puerto con otra aplicación.
- Revisa: si el tráfico es TLS y no se descifra, App-ID verá solo
ssl. - Solución: crea una Custom Application o, si es tráfico confiable y necesario, un Application Override. Para TLS, activa decryption.
Aparece como incomplete o insufficient-data
- Causa: el handshake no se completó, o la sesión se cerró antes de enviar datos suficientes (típico de escaneos, firewalls intermedios o aplicaciones que no responden).
- Revisa: el log de tráfico (Session End Reason) y si el servidor responde.
- Solución: corrige la conectividad. Si es una aplicación legítima con poco tráfico, es normal.
El Deny se aplica a mitad de la session
- Causa: App-ID refinó la aplicación (de
sslafacebook-chat) y entonces coincide la regla de bloqueo; el cliente recibe un reset. - Solución: es el comportamiento esperado. Verifica que las reglas de permiso incluyan las aplicaciones base necesarias.
Una regla de bloqueo no funciona
- Causa: una regla de permiso arriba coincide primero (shadowing).
- Revisa: la pestaña Rule Shadow del commit y el orden.
- Solución: mueve el bloqueo arriba.
Un Application Filter incluye aplicaciones inesperadas
- Causa: los criterios son muy amplios, o el filtro es dinámico y se agregaron App-IDs nuevos.
- Solución: revisa el recuento de aplicaciones en el filtro y ajusta los criterios.
Policy Optimizer no muestra nada
- Causa: la regla no tiene logging o aún no hay tráfico suficiente.
- Solución: activa Log at Session End y espera a tener tráfico.
La aplicación QUIC evita la inspección
- Causa: QUIC (HTTP/3) usa UDP 443 y no se puede descifrar con SSL Forward Proxy.
- Solución: bloquea la aplicación
quicpara que los navegadores usen TLS sobre TCP, que sí se puede inspeccionar.