Gestión de vulnerabilidades con pentesting persistente, una visión global (I)

13 de julio de 2015
Las organizaciones se encuentran expuestas a una gran variedad de ataques (cada vez más sofisticados) mientras que la complejidad en sus infraestructuras y sistemas aumenta. Es crítico para la organización identificar estas amenazas y adoptar contramedidas que permitan su prevención y detección oportuna, además de la gestión adecuada de las vulnerabilidades a las que se encuentra expuesto.

No sólo se trata de una ejecución aislada en la detección de vulnerabilidades. Se busca una continuidad en el tiempo. Para ello hay que instaurar un proceso integrado con el resto, de forma que la organización sea capaz de mantener el nivel adecuado de seguridad en sus sistemas y servicios exigido por el entorno en el que se desenvuelve.

Muchas organizaciones realizan revisiones puntuales de seguridad y obtienen como resultado más probable un informe con evidencias que demuestren que ha sido posible acceder a los sistemas de información y se aporte unas recomendaciones sobre cómo mitigar las vulnerabilidades detectadas. Además, casi siempre aparecen vulnerabilidades menores que ayudan a preparar ataques más importantes o fallos de configuración en el entorno que permiten finalmente acceder al sistema.

Estas revisiones puntuales van a seguir encontrando vulnerabilidades debido a que: el tiempo que pasa entre un proceso de pentesting y otro, un sistema informático sufrirá cientos de cambios provocados por actualizaciones del software de los servidores, el software de los clientes, toda la electrónica de red, etc. También habrá actualizaciones y cambios en el código de los sitios web realizadas por los desarrolladores. Además, el sistema informático habrá crecido en tamaño con la de adición de nuevos dispositivos, y se habrá modificado por el reemplazo de otros. ¿ Cuál es la mejor forma de controlar la seguridad de un sistema teniendo en cuenta el entorno actual tan cambiante?

Unido a esto, hay que considerar que una empresa debe hacer frente a ataques maliciosos de individuos que intentan encontrar debilidades para ganar acceso a los sistemas de información. Estos ataques pueden ser llevados a cabo en cualquier momento y los atacantes se ven beneficiados por ese entorno cambiante y auditado "puntualmente". ¿Cómo se pueden preparar los sistemas para hacer frente a estos ataques?

La respuesta a estas dos preguntas es a través de la industrialización de estas revisiones hacia un proceso de detección continuo, asociado a unas herramientas que permitan de forma ágil la gestión de las vulnerabilidades detectadas.

En este proceso industrializado, detectar las amenazas da paso a que esta misión sea realizada por agentes especializados. Así la organización puede centrarse en el proceso de corrección de la vulnerabilidades y gestión del ciclo de vida de las vulnerabilidades: Desde que se detectan hasta que se valida que estas no son explotables. En este sentido, este proceso puede entenderse como dos bloques claramente diferenciados.

Detección de vulnerabilidades

Si analizamos cómo actuaría un atacante externo, este no parte de un número concreto de direcciones IP o nombres de servidores (FQDN), sino que generalmente lo único con lo que cuenta es el nombre de la empresa o dominios asociados, por lo que en primer lugar se lleva a cabo una fase inicial de " Descubrimiento" orientada a obtener la visibilidad sobre todos los activos digitales del objetivo.

Una vez determinado los activos del objetivo, entra en la " Fase de Análisis" en la que trata de determinar las rutas que puede seguir para acceder a los activos, así como las técnicas usadas para poder lograr usar fallos, vulnerabilidades, malas configuraciones, recabar información sobre los objetivos, etc. Por último, se pasa a la " Fase de Explotación" en la que emplea la información de contexto de las fases anteriores para tratar de explotar vulnerabilidades sobre los activos y configuraciones detectadas, incluso combinando varias vulnerabilidades de severidad menor en aras de obtener una vulnerabilidad de mayor severidad.

Para lograr la máxima similitud entre las pruebas de detección y los ataques a los que se verán expuestos los activos de la organización, todas estas fases se han implementado en el Servicio de Pentesting Persistente, empleando para ello la tecnología Faast.

Fase de descubrimiento

Para lograr tal objetivo, en esta fase Faast lleva a cabo un descubrimiento, que partiendo de un nombre de dominio y empleando fuentes OSINT usadas habitualmente por pentesters y atacantes (buscadores, metadatos, consultas a DNS, servicios como Shodan, Robtext o Archive.org entre otros) de forma continua determina el conjunto de activos de una empresa accesibles desde Internet.

Cabe destacar la capacidad de esta fase inicial de descubrimiento, Faast emplea técnicas para determinar los diferentes Virtual Hosts configurados en una dirección IP, de modo que revisaría todas las aplicaciones accesibles desde Internet, algo que en ocasiones se pasa por alto cuando se realiza un análisis basado en direcciones IP o en FQDN. Un atacante va a implementar estas mismas técnicas para buscar puntos de entrada para detectar aplicaciones obsoletas o que escapan al control de la organización. Estas aplicaciones suelen tener un nivel de seguridad menor que el resto de los activos, ya que no se tiene consciencia de su existencia, y por ende tampoco entran dentro de actualizaciones o procedimiento de parcheado.

Fase de Análisis

En la fase de análisis se trata de determinar las rutas que puede seguir para en la siguiente fase atacar a los objetivos. Estas rutas son los servicios generalmente expuestos en Internet. Suelen evaluar SSH, Mysql, certificados SSL, análisis de cabeceras HTTP, análisis de versiones obsoletas de la infraestructura, evaluación de CMSs (Wordpress, Joomla, Drupal), metadatos, configuraciones inseguras, etc.

Cabe destacar la capacidad de Faast de combinar distintas técnicas propias de una atacante simulando de forma real su comportamiento. Ejemplo de esto sería la descargar de los distintos tipos de ficheros jugosos (" juicy files") que previamente han sido detectados en la fase de "Descubrimiento" con el enfoque recursivo. A diferencia de una herramienta de "Análisis de vulnerabilidades" que sólo indicaría la existencia de estos archivos, Faast los descarga para posteriormente analizar el contenido de estos ficheros en busca de información relevante en un proceso de pentesting: rutas a ficheros locales, rutas no indexadas en buscadores, metadatos, información generada por desarrolladores, usuarios, contraseña, ficheros ocultos o perdidos, fugas de datos y de código, etc. En definitiva, Faast realiza un estudio del contenido de los ficheros en busca de información sensible de la empresa.

Durante la ejecución de esta fase si se descubren nuevos activos, reinicia el sistema y las mismas fases se ejecutan de forma recursiva, pero esta vez con pruebas adaptadas a la nueva información obtenida.

Fase de Explotación

La última fase consiste en realizar las pruebas pertinentes de explotación, en base a la información obtenida en la fase de análisis. En esta fase se realiza una explotación controlada de las vulnerabilidades conocidas de los activos y elementos pertenecientes al dominio auditado. Básicamente se pretende simular la acción de un intruso sobre un activo al que se le ha detectado una vulnerabilidad.

Continuidad en el tiempo

Al concluir el escaneo, el sistema pasa nuevamente a la fase de descubrimiento iniciando un nuevo análisis con el objetivo de detectar otras vulnerabilidades y/o fallos de configuración provocados por actualizaciones del software de los servidores, actualizaciones y cambios en el código de las aplicaciones realizadas por los desarrolladores,...

Esquema de análisis con continuidad en el tiempo
Gestión de Vulnerabilidades

Como ya vimos, en la industrialización del proceso no acaba con la detección de los problemas, sino que continúa con la gestión del ciclo de vida de las vulnerabilidades detectadas. Esta gestión debe comenzar tan pronto son detectadas , huyendo del enfoque tradicional basado en la generación de un informe estático a la finalización de las pruebas de seguridad y finaliza cuando una vulnerabilidad se valida que ya no es explotable.

Este seguimiento de estados puede modelarse atendiendo al siguiente flujo de estados, que garantiza la trazabilidad de las acciones realizadas para determinar si una vulnerabilidad se encuentra mitigada.

"Workflow" que garantiza la trazabilidad de la gestión de vulnerabilidades
Dado que el proceso es continuado en el tiempo (en el que se lanzan varios escaneos) se debe analizar las diferencias entre las distintas ejecuciones de los tests. En este diferencial, existirán nuevas vulnerabilidades y otras que han cambiado el de estado de las mismas, de modo que si una vulnerabilidad no ha vuelto a ser detectada podría identificarse como corregida. Por el contrario, vulnerabilidades que se pensaban mitigadas, ante una nueva detección se consideraría que en realidad no está corregida.

Un punto a tener en cuenta en la gestión, es la priorización de los esfuerzos para la mitigación puesto en algunos casos esta tarea puede ser compleja cuando se detectan un número muy elevado de vulnerabilidades, o dicho de otra forma, ¿por dónde debería comenzar a corregir?

* Gestión de vulnerabilidades con pentesting persistente, una visión global (I)


Victor Mundilla
victor.mundilla@11paths.com