Mostrando entradas con la etiqueta Vulnerabilidad. Mostrar todas las entradas
Mostrando entradas con la etiqueta Vulnerabilidad. Mostrar todas las entradas

miércoles, 25 de marzo de 2015

Proceso de gestión de vulnerabilidades

La gestión de vulnerabilidades debe ser un punto prioritario en el programa de seguridad de cualquier organización. Aunque tener todos los sistemas y aplicaciones parcheados y sin vulnerabilidades conocidas no es garantía de no poder sufrir un incidente, sí que reduce en gran medida la probabilidad de que ocurra.

Sin embargo, no siempre es sencillo implementar un proceso que sea adecuado y eficiente. A continuación os propongo un posible proceso a seguir para la gestión del ciclo de vida completo de las vulnerabilidades y un ejemplo del mismo esperando que os pueda ser de utilidad.

Procedimiento



1. Identificar vulnerabilidades. Las vulnerabilidades pueden ser detectadas a partir de fuentes diversas, las más comunes son las siguientes:
a. Escaneos (de infraestructura y de aplicación).
b. Pentesting.
c. Auditorías o revisiones de seguridad (tanto técnicas como no técnicas).
d. Notificaciones de terceros.

2. Aceptar la vulnerabilidad: El primer paso a realizar una vez identificada una vulnerabilidad es analizarla y realizar las pruebas que sean necesarias para verificar que la vulnerabilidad realmente existe, es decir, que no se trata de un falso positivo y tener claro en qué consiste dicha vulnerabilidad:
a. Identificar su valor CVSS
b. Saber a qué activos de la compañía está afectando
c. Saber si se tiene constancia de que la vulnerabilidad está siendo activamente explotada en la propia compañía o en otras compañías.

3. Clasificar las vulnerabilidades en función del riesgo: Las vulnerabilidades deben ser clasificadas y priorizadas en función del riesgo que supongan para la organización. A continuación propongo un posible método que he desarrollado para realizar esta clasificación y priorización, pero podría utilizarse cualquier otro método alternativo que se considerara conveniente:
a. Puntuación
i. CVSS  > 3 +1 punto.
ii. CVSS  > 6 +2 puntos.
iii. CVSS  > 8 +3 puntos.
iv. CVSS  > 9 +4 puntos.
v. La vulnerabilidad puede ser explotada remotamente -> +4 puntos
vi. La vulnerabilidad afecta a algún servidor o servicio crítico -> +3 puntos
vii. La vulnerabilidad afecta a un gran número de activos (+10 activos) -> +1 punto
viii. La vulnerabilidad está siendo explotada activamente -> + 2 puntos

b. Tiempo objetivo para resolver las vulnerabilidades:
i. Puntuación = >6 Crítica: La vulnerabilidad debe resolverse en menos de 30 días.
ii. Puntuación =>4 Alta: La vulnerabilidad debe resolverse en menos de 60 días.
iii. Puntuación =>2 Media: La vulnerabilidad debe resolverse en menos de 90 días.
iv. Resto: La vulnerabilidad debe resolverse cuando sea posible, y siempre antes de que transcurran 365 días desde que fuera detectada.

4. Establecer controles compensatorios:
i. En el caso de las vulnerabilidades Críticas (puntuación =>6) deberán establecerse controles compensatorios preventivos eficaces para mitigar el riesgo que esta vulnerabilidad supone hasta ser resuelta.
ii. En el caso de las vulnerabilidades con criticidad Alta (puntuación =>4) deberán establecerse controles compensatorios preventivos cuando sea posible, o al menos de detección para mitigar el riesgo que esta vulnerabilidad supone hasta ser resuelta.

5. Asignar un propietario para la vulnerabilidad: Dicho propietario será el responsable de resolver la vulnerabilidad dentro del plazo máximo asignado en función de su criticidad.

6. Análisis de soluciones: El propietario de la vulnerabilidad deberá decidir la estrategia a seguir para solventar la vulnerabilidad, documentando dicha solución adecuadamente. En caso de no hallarse ninguna estrategia eficaz y de coste razonable deberá documentarse el riesgo que supone mantener la vulnerabilidad irresoluta, debiendo ser dicho riesgo aceptado por su propietario de acuerdo con los procesos que la organización mantenga en el ámbito de gestión del riesgo.

7. Probar la solución propuesta: Se deberán hacer todas las pruebas necesarias para garantizar que la solución propuesta no supone un perjuicio para la operativa ni la seguridad del sistema o servicio a proteger o de otros sistemas o servicios relacionados. En caso contrario, deberá volverse al punto 5 y hallar una solución alternativa.

8. Resolver la vulnerabilidad: Una vez se cuenta con una solución probada y eficaz, se deberá proceder a su aplicación para resolver la vulnerabilidad en el activo o activos afectados.

9. Verificar su resolución: Una vez resuelta una vulnerabilidad, debe verificarse que su resolución ha sido eficaz y la vulnerabilidad ha sido realmente eliminada según lo esperado.

10. Lecciones aprendidas: Como último paso del proceso de gestión de vulnerabilidades se deberá documentar cualquier lección aprendida en el proceso de resolución de esta vulnerabilidad con el objetivo de que futuras vulnerabilidades que guarden alguna semejanza con ésta puedan ser resueltas de manera más eficiente.

Ejemplo

Por último, veamos un ejemplo del proceso en funcionamiento. Imaginemos que la compañía ACME ha realizado un escaneo de vulnerabilidades sobre su perímetro y ha encontrado estas tres vulnerabilidades:

[Paso 1. Detectar la vulnerabilidad]
Vuln1: Vulnerabilidad en aplicación de desarrollo propio que da soporte al servicio de generación de nóminas que está considerado crítico en la compañía.
Vuln2: Vulnerabilidad que afecta a determinadas versiones de Apache.
Vuln3: Vulnerabilidad que afecta a dispositivos de red CISCO hasta una determinada versión de IOS.

[Paso 2. Aceptar la vulnerabilidad]
El departamento de seguridad realiza un análisis de las vulnerabilidades y se da cuenta que la Vuln2 es realmente un falso positivo, por lo que las únicas vulnerabilidades aceptadas serán Vuln1 y Vuln3. Para cada una de las vulnerabilidades se documentan sus valores:
Vuln1. CVSS 7.0. Afecta a los servidores: Serv1 y Serv2. No hay constancia de explotación.
Vuln3. CVSS 5.0. Afecta al servidor Serv2. Hay un exploit público disponible para esta vulnerabilidad y además está siendo utilizada por diversos malware para comprometer equipos.

[Paso 3. Clasificar la vulnerabilidad en función de su riesgo]
El siguiente paso consiste en clasificar ambas vulnerabilidades según el riesgo que suponen para la organización. Siguiendo el método
Vuln1= 2 puntos por CVSS, +3 puntos por afectar a un servicio crítico= 5 puntos (Alta).
Vuln3= 1 punto por CVSS, +3 puntos por afectar a un servidor crítico + 2 puntos por estar siendo explotada activamente = 6 puntos (Crítica).
Por lo tanto, la vulnerabilidad 1 deberá ser resuelta en menos de 60 días y la vulnerabilidad 3 en menos de 30 días.

[Paso 4. Controles compensatorios]
 Para la Vuln3, dado que es una vulnerabilidad crítica se establece un control compensatorio preventivo estableciendo una política en el WAF que previene la explotación de dicha vulnerabilidad hasta que sea resuelta.
Para la Vuln1, al ser de criticidad alta se decide establecer un control de detección, activando la firma de la vulnerabilidad en el IDS para detectar cualquier intento de explotación de la misma.

[Paso 5. Asignar un propietario]
La Vuln1 es asignada al departamento de administración IT para su resolución, mientras que la Vuln3 es asignada al departamento de arquitectura IT para su resolución.

[Paso 6. Análisis de soluciones]
Tras analizar las soluciones se llega a la conclusión que la vuln1 puede ser resuelta mediante un cambio en el código de la aplicación, mientras que para la vuln3 no se encuentra una solución de coste razonable a corto plazo, puesto que su resolución requiere cambios en la arquitectura de red que no pueden abordarse con el presupuesto disponible en 2015. Por lo tanto, se realiza un análisis del riesgo que supone no resolver esta vulnerabilidad y mantener el control compensatorio hasta marzo de 2016 que es la fecha en la que se estima podrá resolverse la vulnerabilidad. Este análisis de riesgos se presenta al director financiero quien es el propietario del proceso de negocio afectado y por lo tanto propietario del riesgo a aceptar. El director financiero decide (de manera informada y quedando documentado) que el riesgo es aceptable y por lo tanto queda aprobado.

[Paso 7. Probar la solución propuesta]
Se realizan las pruebas necesarias para verificar que la solución propuesta resuelve la vuln1 y no afecta negativamente al sistema. En nuestro ejemplo, las pruebas que se realizan son:
Realizar una auditoría de seguridad sobre el nuevo código para garantizar que no incluye nuevas vulnerabilidades.
Realizar pruebas unitarias y pruebas de regresión sobre la nueva versión de la aplicación antes de su puesta en producción.
Realizar una auditoría de seguridad de la aplicación en preproducción para garantizar que no incluye nuevas vulnerabilidades y que la vulnerabilidad vuln3 ha sido efectivamente resuelta.

[Paso 8. Resolver la vulnerabilidad]
Pasamos a producción la nueva versión de código o el parche que solventa la vuln1.

[Paso 9. Verificar la resolución]
Repetimos la auditoría de seguridad o el escaneo de vulnerabilidad para verificar que efectivamente, la vulnerabilidad ya no está presente en nuestra aplicación.

[Paso 10. Lecciones aprendidas]
Analizamos la causa raíz de la vuln1 para extraer las lecciones aprendidas. En nuestro ejemplo, vamos a suponer que la causa raíz de la vulnerabilidad era una falta de verificación de los parámetros de entrada en una función de la aplicación. Por lo tanto, las lecciones aprendidas son:
Es necesario realizar auditorías de seguridad del código y de la aplicación en ejecución antes de su puesta en producción para hallar este tipo de vulnerabilidades.
Los desarrolladores deben recibir formación específica en técnicas de desarrollo seguro.
Guardamos la función utilizada para el filtro de parámetros de entrada para que pueda ser reutilizada en futuras vulnerabilidades similares.

Y con esto daríamos el ciclo finalizado para las tres vulnerabilidades identificadas en nuestro ejemplo.

Espero que la entrada os haya gustado y os resulte de utilidad!

domingo, 7 de septiembre de 2014

Segundo factor de autenticación en Linkedin


A mediados de agosto, al dejar mi trabajo en Caja de Ingenieros y por lo tanto abandonar mi número de teléfono móvil, me encontré con que el número al que enviaba mi segundo factor de autenticación había desaparecido. Sin embargo, pensé que no pasaba nada, puesto que en cuanto tuviera disponible mi número suizo no tendría más que actualizar el número de teléfono en linkedin, gmail y los otros servicios online que tienen el doble factor de autenticación.

Sin embargo, coincidiendo con la misma fecha, actualicé mi versión de ubuntu de la 12.04 a la 14.04 sin pensar para nada en el tema del doble factor. Y, efectivamente, me quedé sin acceso a mis servicios online, ya que los servicios web no reconocían mi PC como un equipo autorizado, y aunque me mandaran el código de acceso a mi teléfono móvil yo ya no era capaz de recibirlo.

Con Gmail, no fue un problema, puesto que permite tener configurado un segundo número de teléfono móvil en el que recibir el código, así que pude acceder y cambiar la configuración del acceso con segundo factor. También te dan la opción de tener impresos códigos de emergencias de un sólo, por lo que las alternativas de cara a recuperar el acceso son mayores.

Sin embargo, linkedin no permite configurar un teléfono alternativo, por lo que no tenía ningún medio de acceder a mi cuenta. Tras enviar un mail a su dirección de soporte preguntándoles cómo podía conseguir recuperar mi acceso, me solicitaron que les enviara por mail una imagen de mi DNI o mi pasaporte. Una vez enviado, deshabilitaron el segundo factor inmediatamente, por lo que pude recuperar mi cuenta sin problema.

A raíz del incidente, me planteé si se podría aprovechar este procedimiento que tiene linkedin para permitir que los usuarios que sean tan torpes como yo y que pierdan tanto su móvil como los equipos autorizados a acceder a la cuenta, para conseguir acceso a una cuenta sin necesidad de disponer del segundo factor de autenticación. Y en efecto, se podría llegar a acceder, ya que el procedimiento es vulnerable (no se trata de una vulnerabilidad técnica en este caso, sino procedimental). Así pues, el segundo factor de autenticación en Linkedin puede ser saltado bajo determinadas circunstancias. Veamos como:

Todo lo que necesita el atacante es conocer el nombre de usuario y contraseña de la víctima y hacer uso de Gimp, photoshop u otra herramienta de edición digital para enviar un DNI falsificado al equipo de soporte de Linkedin. Al fin y al cabo, lo único que se tiene que modificar es la foto, que podría obtener directamente del perfil público de la víctima o de cualquier red social, la fecha de nacimiento y el nombre y apellidos. El número, la dirección y otros datos del carné se pueden dejar incorrectos puesto que no son conocidos por Linkedin y por tanto no pueden cotejarlos. Es posible que el personal de linkedin también compruebe que el mail desde el que el usuario está solicitando la resolución del problema coincida con el que tiene informado el usuario, por lo que el atacante deberá falsear la dirección de remitente al enviar el mail.

Aunque el ataque tiene un alcance muy limitado y puede ser fácilmente detectado por la víctima al recibir mails inesperados del soporte de Linkedin, si el atacante ha conseguido comprometer también el correo de la víctima, por ejemplo porque use la misma contraseña y no lo tenga protegido con doble factor, el ataque podría perpetrarse de una forma mucho más limpia y efectiva.

En cualquier caso, siempre se deberían seguir las siguientes recomendaciones de seguridad en el uso de las cuentas on line:

  • Protege siempre tu móvil con código o contraseña. De lo contrario, si alguien te lo roba o lo pierdes, tendrán acceso directo a tu correo electrónico y a tus perfiles digitales.
  • Intenta no reutilizar la misma contraseña en diversos servicios online para evitar que el compromiso de una credencial resulte en el compromiso de todos tus servicios online.
  • Siempre que sea posible, evita que el acceso a Linkedin u otros servicios online se haga desde el mismo móvil en el que recibes el segundo factor de autenticación. En caso de que el terminal esté infectado por un malware, es posible que el atacante sea capaz de obtener tanto las credenciales de acceso como el código de segundo factor.
  • No almacenes en tu correo imágenes de tu pasaporte, DNI, etc... Como ves, pueden ser utilizadas para conseguir acceso a tus servicios online sin disponer del segundo factor de autenticación.

¿Aún no me sigues en twitter? @omarbenjumea