OWASP Meeting 2008 – Spanish Chapter

El pasado viernes asistí a las jornadas OWASP 2008 en Barcelona. Aproveché para visitar de nuevo una ciudad encantadora en buena compañía, y disfrutar algo del clima cálido que en Alemania ocasionalmente se extraña.

Seguía desde hacía algún tiempo la actividad de este capítulo, por su relevancia internacional y sus contribuciones al mundo de la seguridad. Publican frecuentemente papers y documentos que abordan temáticas relacionadas principalmente con el ámbito de la seguridad y de la programación segura. En este enlace puedes descargar gratuitamente sus publicaciones, o adquirirlas físicamente a un precio muy competitivo.

La experiencia fue francamente muy enriquecedora. Todas las presentaciones tuvieron un nivel muy alto, y verdaderamente todos los asistentes eran personas dedicadas a este mundo: asesores de empresa, consultores independientes, ingenieros de seguridad…

Especialmente me llamó la atención la tercera charla, “Ataques a las políticas de seguridad por contexto”. Una pareja de expertos demostró como inferir información privada de una red o sistema utilizando información exclusivamente pública. En concreto, mencionaron un concepto que encontré muy útil: los ataques de diccionario adaptativos. Resumiendo un poco: está comprobado que la mayoría de las palabras del inglés empiezan por t, y en este subconjunto por th, etc. Cómo habréis sospechado, almacenar esta información en un árbol y realizar el ataque probando las combinaciones en el contexto del idioma, supone un ahorro de tiempo inimaginable, sobre todo cuando estamos hablando de diccionarios de 700 MB…

Si os dedicáis activamente a la programación web, os recomiendo no dejar de visitar el enlace

Ataque del frío

En la universidad aprendemos que la memoria RAM es una memoria no persistente, y que almacena datos hasta que el ordenador es reiniciado (hasta que el módulo de memoria deja de recibir una corriente eléctrica). Esto es así, pero ¿hasta que punto?

Un equipo de Princeton ha conseguido acceder a la memoria RAM del ordenador, una vez que el equipo ha sido apagado. Los datos permanecen en memoria residual desde algunos segundos hasta el minuto. A nivel físico, congelando la memoria con algún spray anticongelante o incluso con nitrógeno líquido, podemos añadir varios 0’s a este orden de tiempo.

En la siguiente imágen tenemos un ejemplo de un fichero recuperado a los 5, 30, 60 y 300 segundos.

Los investigadores de Princeton afirman haber obtenido desde la RAM de un ordenador apagado las claves utilizadas para cifrar un disco,independientemente de la aplicación y el SO: Bitlocker (Vista), TrueCrypt (Windows, Linux y Mac), FileVault (Mac) y dm-crypt (Linux) sucumben por igual.

Aquí está el video proof-of-concept

Navegación anónima

Muchas veces hemos navegado por Internet con nuestro navegador favorito y sabemos que vamos dejando nuestro rastro allá por donde vamos, o bién queremos opinar en algún foro como una persona distinta, o bién queremos votar más de una vez en alguna votación, mandar un correo electrónico y que no se sepa el origen, etc etc etc. En el otro lado de la balanza, realizar un ataque sobre un objetivo o dejar una dirección IP falsa en un registro es otro de los propósitos

Pues bién, la solución a todos estos problemas son los proxys abiertos, los cuales son proxys mal configurados por administradores o usuarios particulares que los tienen para compartir una conexión a Internet y por tanto cualquiera puede usar ese mismo proxy desde fuera de la red donde se encuentra.

Configurando la conexión en nuestro navegador web para que pase a través de un proxy abierto, se elimina la ip que poseemos y se sustituye por la ip del proxy (en algunos casos se pasa como cabecera de la petición a la página con lo que no se elimina del todo), pudiendo asi interactuar con la web que hayamos visitado sin que sepa realmente quienes somos (normalmente no se sabe quienes somos, y menos si tenemos ip dinámica, pero con esto se dobla el anonimato en la navegación).

Se puede acceder a ftp, http, https desde un proxy (siempre que este configurado para permitirlo) y conectarnos a otros puertos si usamos la tecnología SOCKS v4 o v5 (igualmente debe estar configurado para permitirlo), con lo que prácticamente se
puede hacer de todo en internet a través de un proxy. Es más, si estas en tu empresa y te capan todos los puertos menos el puerto 80 para salir a Internet, con un proxy podrás acceder al resto de puertos sin mayor peoblema.

Hay muchas listas de proxys abiertos por Internet, en Wikipedia tenemos más información al respecto

Port Knocking

Quizá esta información sea novedosa para muchos vosotros. A pesar de no tratarse de un tema novedoso, ya que hay literatura al respecto desde el 2003, quizás sea un concepto desconocido, al menos para la comunidad de habla hispana en internet.

Es sabido que la seguridad electrónica nunca puede basarse en una sola medida o nivel de seguridad. Así, hablaremos de sistemas con doble, triple o con niveles más altos de seguridad, según exista una combinación de medidas que ayuden a asegurar y hacer impenetrable un sistema (por ejemplo: a la hora de asegurar un router que provee acceso inalámbrico, un filtro a nivel de MAC + una encriptación WPA a 256 + una elección de direcciones IP no estándares + servidor DHCP deshabilitado constituiría un cuádruple nivel de seguridad).

¿Qué es “Port Knocking”?

Todos hemos jugado de pequeños con nuestros amigos a tener algún código común que debíamos compartir para poder identificarnos entre nosotros. Pues básicamente, se trata del mismo sistema aplicado a la seguridad.

Computacionalmente, este concepto consistiría en enviar paquetes a ciertos puertos, siguiendo una secuencia determinada con el fin de realizar un propósito concreto. Al llegar al último puerto, siempre y cuando hayamos realizado el barrido de puertos de una manera específica y no aleatoria, este podría responder de una determinada manera (generalmente abriéndonos un servicio esencial para la máquina, como una identificación por SSH, o un servicio de tranferencia de ficheros). De esta manera, cualquier atacante que realizase un barrido aleatorio sobre el ordenador destino, sería incapaz de ver el puerto deseado, recibiendo del firewall una simple respuesta DROP..

Tomemos como ejemplo un demonio sshd escuchando en el puerto 22/TCP. Elegimos como secuencia de barrido la sucesión 43, 6540 y 82. El puerto 22 se abrirá si, y solo si, un usuario inicializa conexiones TCP hacia los puertos 43, 6540 y 82 en ese orden exacto. En caso contrario el usuario recibirá como respuesta un RST/ACK cuando intenta comenzar una
conexión hacia el puerto 22.

Si la secuencia correcta de inicializaciones ha sido efectuada, el puerto 22 se abrirá durante un lapso de tiempo determinado y únicamente para la IP que completó la secuencia previa. Una vez el puerto 22 se
halle abierto, se pueden llevar a cabo medidas adicionales de autenticación.

A pesar de la buena idea que a priori puede parecer, muchos son los que defienden que “Port Knocking” no es una capa de
seguridad sino una medida de ofuscación (“security by obscurity”). Como en todos los campos, la verdad (o lo más cercano a la verdad) suele encontrarse en el centro geométrico de todas las afirmaciones.

La autentificación clásica se basa en tres premisas: que sabes, que eres y que tienes. Este mecanismo estaría claramente encuadrado en el primer apartado. Sabemos como acceder a un servicio. Lógicamente, en el momento en el que un atacante conociese esta medida y pudiese escuchar el tráfico en cualquiera de los dos lados, esta medida de seguridad individualmente sería tan débil como una contraseña enviada en texto plano. Como se comentó inicialmente, esta medida no podría (debería) ser utilizada de manera individual, sino en combinación con algún otro nivel de defensa que proporcionase seguridad adicional en caso de que la medida fuese comprometida, para alcanzar un nivel de robustez aceptable.

Algunas consideraciones

* Un ataque de fuerza bruta podría ser ejecutado con la intención de descubrir la secuencia de puertos correcta. No obstante, el ataque sería fácilmente detectable, y con los movimientos correctos por parte del administrador de sistemas, esta medida tendría probabilidades de éxito casi nulas. Para una secuencia de 3 puertos, suponiendo el rango de ataque entre los puertos 1-65535, implicaría un escaneo del orden de 655353 tentativas, con una media situada en la mitad de este valor, con lo que serían necesarios unos 140 billones de paquetes para conseguir la apertura del puerto deseado. Obviamente, incrementar la longitud de la secuencia incrementaría exponencialmente la dificultad del objetivo.

* Si un supuesto atacante se hace con la secuencia de puerto, no se interpone nada entre el y el servicio ocultado. Por lo tanto, algún tipo de medida al respecto sería interesante (algún hash con información adicional, como temporal, estado físico de la memoria, etc), o alguna otra medida que evitase los ataques por replay. No obstante, esta medida sería dificil de implementar en sistemas con múltiples clientes.

* Un ataque sencillo sería un DoS. Debido al lapso que existe entre cada inicialización de cada conexión, un atacante puede enviar paquetes malintenciandos para interrumpir la secuencia que trate de construir el usuario legítimo. No sería técnicamente difícil forjar paquetes con la dirección IP de un usuario legítimo y enviar un continuo flujo a la máquina objetivo, lo que la impediría en la práctica de poder ofrecer el servicio.

* Un Port Knocking podría ser confundido con un escaneo de puertos para un IDS, lo que podría añadir complejidad de configuración al mismo y generar ruido en sus logs.

Conclusión

Un sistema protegido por Port Knocking añade un excelente método de protección al mismo. A la mayoría de posibles intrusos, les parecerá que no se ofrece ningún servicio tras el firewall, y dada su relativa poca extensión, la mayoría desconocerán igualmente esta posibilidad. No obstante, como ya se ha dicho numerosas veces, conviene no utilizarlo como última línea de defensa, sino en combinación con diferentes niveles de protección.