Español | English
rss facebook linkedin Twitter

Los cementerios están llenos de buenas intenciones

Esta semana hemos tenido un buen ejemplo de cómo en seguridad a veces una combinación de buenas intenciones y casualidad o despiste puede llevarnos a tener un incidente de seguridad.

Ejemplo de buena intención 1: SNMPv1 y v2 no ofrecen seguridad suficiente, migremos a SNMPv3.

SNMPv3 se define de forma bienintencionada para mejorar varios aspectos de seguridad de los que carecían sus predecesores. Una buena medida para mejorar la seguridad de nuestra red podría ser utilizar siempre SNMPv3.

Ejemplo de buena intención 2: Eliminemos las funciones inseguras del código.

Supongamos que un desarrollador, bien por propia iniciativa o bien por consejo de un analista bienintencionado decide eliminar las funciones inseguras de su código C, para evitar los molestos warnings de seguridad.

Pongamos por ejemplo que hace uso de la función "strcmp() "o una similar para comparar 2 contraseñas en una proceso de autenticación. La "contraseñaA" que es la que recibe del cliente y la "contraseñaB" que es la clave actual:

"comparacion=strcmp(contraseñaA, contraseñaB);if(comparacion==0)Padentro();"

Si la "contraseñaA" es igual a la "contraseñaB", permitimos el acceso.

Como todo el mundo bienintencionado sabe "strcmp()" es insegura porque no comprueba el limite de las cadenas comparadas. Así que es necesario reemplazarla por su alternativa segura "strncmp()" que si compara las cadenas hasta un limite. El código quedaría:

"comparacion=strncmp(contraseñaA,contraseñaB, len(contraseñaA));
if(comparacion==0) Padentro();"

Pero qué pasa si la longitud de "contraseñaA" es 1. Sólo se compararía el primer carácter de la contraseña. Y si sólo se compara un carácter, no tendría más que unas pocas combinaciones de acceso posibles, que en el caso alfanumérico no serían más de 64 posibilidades. Estaríamos ante una vulnerabilidad importante.

Este tipo de vulnerabilidades que podríamos llamar de “comparación de pocos caracteres” (few-chars-comparison) no tiene una categoría propia, pero ya se han documentado situaciones similares, como por ejemplo en Avaya Argent Office o en MySQL.

INCISO – VULNERABILIDAD 10: Vulnerabilidades 10 son aquellas perfectas, hermosas, las que cualquier auditor desearía encontrar.El 10 no es arbitrario, viene del criterio de clasificación de vulnerabilidades CVSS (Common Vulnerability Scoring System) que nos permite clasificar de forma objetiva el riesgo de cada vulnerabilidad en función de una serie de factores: rango de acceso (local o remoto), complejidad del ataque, necesidad de autenticación, impacto, etc.

Si os interesa este tema ya hablaré más profundamente en otro post.

A lo que íbamos, esta semana tenemos una vulnerabilidad 10 que combinada con unas buenas intenciones como las del ejemplo 1, podría llevar a muchos administradores de red a una situación delicada.Resulta que la autenticación en SNMPv3 se realiza utilizando un hash HMAC que es calculado combinando una función criptográfica y una clave secreta. Pero, ¿qué pasaría si para comparar el HMAC que envía un cliente SNMPv3 que intenta conectar y el HMAC correcto se utiliza una función "memcmp()", de forma similar a la que hemos visto en el ejemplo 2? Pues que tendríamos un serio problema:

SNMPv3 Authentication Bypass Vulnerability

Y que pasaría si por "casualidad" el mayor fabricante de equipos de networking, también hiciese algo parecido en su código:

CISCO SNMP Version 3 Authentication Vulnerabilities

Pues sí, tenemos una vulnerabilidad 10: Remota, fácil de aprovechar y que permite evitar totalmente el mecanismo de autenticación. Hoy estoy orgulloso de ser auditor.







Así que, cuando alguien con buena intención os diga que toméis alguna medida adicional de seguridad. Tomarla, pero tener en cuenta que cualquier cambio puede generar una cadena de casualidades o despistes que provoquen un efecto contrario al deseado. Ya sabéis, las buenas intenciones nos pueden llevar a la tumba...

Ramón Pinuaga
Departamento de Auditoría

3 comentarios:

derrenbrown dijo...

Porfavor hablar de firewalls y porque no , de configuraciones y conexiones entrantes y salientes.El usuario final como soy yo os lo agradeceria .

JA dijo...

Una "Pequeña Idea".:

Como de factible puede ser interponer entre la red interna y el router principal un PC con NetBSD u OpenBSD con seguridad alta.?

Puede creo, que en algunos casos ser una solución complementaria barata y nada dificil de implantar.

Se que se hace sobre todo con distros Linux, pero estos sistemas BSD pienso son bastante seguros.

Salutes.

BSD 4 ever dijo...

La opcion que yo uso es pfsense, basada en pf+FreeBSD. El rendimiento es superior que OpenBSD+pf, sobre todo si la maquina donde lo vas a instalar tiene mas de un nucleo / procesador.

Sobre que los sistemas BSD son mas seguros, te doy toda la razon, ya que estan diseñados como un unico sistema y no como una sucesion de pegotes.


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login