Protección de información en dispositivos (Parte 3)

 

Los smartphone son dispositivos ampliamente utilizados en la actualidad, por la gran cantidad de opciones funcionales que ofrecen, así como por la comodidad en su uso. Y es que dichos dispositivos, se han convertido en lo más parecido posible a un ordenador personal de pequeñas dimensiones, y la mayoría de gente lo lleva en su bolsillo en todo momento.

A pesar de que a primera vista esto pueda parecer un gran avance, si lo vemos desde el punto de vista de la privacidad y de la seguridad de la información almacenada o tratada por dichos dispositivos, esto puede tener su parte negativa. Y es a pesar de que el nivel de sensibilidad y privacidad de la información personal tratada por los smartphones es muy parecida a la que podríamos tener en la información de un ordenador personal, poca gente ha tomado conciencia de que se deben aplicar unas correctas medidas de protección sobre estos elementos, siendo la mayoría de estos vulnerables a virus y todo tipo de malware en general.

Así pues, y siguiendo la serie sobre la protección de la información en dispositivos, en la que hemos visto previamente como eliminar la información sensible contenida tanto en ordenadores personales (ver primera parte de este artículo) como en teléfonos inteligentes (ver segunda parte de este artículo), en esta entrada nos centraremos en las medidas de protección recomendadas a aplicar sobre los dispositivos smartphone en su uso diario, para evitar posibles compromisos de seguridad en los mismos.

Para hacerlo, trataremos las medidas a aplicar en los sistemas operativos más comúnmente utilizados por los usuarios en los smartphone: Android y iOS.

En futuras entregas de este artículo, nos ocuparemos de Windows Phone y Blackberry OS, los otros sistemas operativos con una fuerte presencia en el panorama actual.

Android

Protección de acceso al dispositivo
La primera medida de protección a implementar es la protección de accesos manuales al dispositivo, para evitar los accesos lógicos en el caso de que una persona no autorizada pudiera tener acceso físico al mismo. Para ello, Android permite asegurar el teléfono con un PIN numérico de 4 a 17 dígitos, con una contraseña, o bien con un patrón visual como el mostrado en la siguiente imagen, una de las medidas preferidas por los usuarios por su comodidad y facilidad de uso.


Para cada uno de estos casos, es importante que la complejidad del método empleado sea la adecuada, configurando por ejemplo un PIN de un mínimo de 10 números, un patrón complejo, o una contraseña segura (ver pautas de creación de una contraseña segura).

Los sistemas operativos Android más avanzados, permiten además la validación de acceso al dispositivo a través del reconocimiento de la cara del usuario, opción muy divertida, pero poco segura, ya que con una simple foto del usuario se puede lograr la autenticación. Por ello, esta opción no es recomendada.

Los últimos modelos de smartphone y Android, permiten también el acceso a través de un lector de huellas dactilares, opción altamente recomendable, por la seguridad que ofrecen los rasgos biométricos de este estilo en las autenticaciones de usuarios.

Además de configurar alguno de estos métodos de validación de acceso, es muy importante también limitar las funciones a realizar con nuestro dispositivo desde la pantalla de bloqueo, antes de realizar la validación de acceso al dispositivo. Es recomendable limitar dichas funciones a la visualización de las llamadas perdidas, y como mucho, a la previsualización de los mensajes de texto, y evitar siempre el acceso al menú de configuraciones del dispositivo sin la validación previa del usuario.

Cifrado de datos
En los dispositivos Android, se debe habilitar manualmente la opción de cifrado de datos, ya que en algunas versiones del software, ésta no viene habilitada por defecto.

Para su activación, se deben seguir los siguientes pasos:
  1. Acceder al menú “Ajustes”.
  2. Seleccionar el submenú “Seguridad”.
    Submenú Seguridad Android
  3. Activar la opción “Encriptar teléfono”.
Encriptar Teléfono Android
Con dicha opción, se cifraran todos los datos personales almacenados en el dispositivo, a través de un algoritmo AES a 128 bits con CBC (Cipher-block chaining).

Rastreo y eliminación de datos
El Administrador de Dispositivo de Android (Android Device Manager) permite el control del dispositivo en caso de robo o pérdida. Es recomendable activar dicha función desde el menú de configuraciones de Google, en la opción Administración de Dispositivos Android.

Una vez habilitada dicha opción, desde el portal web de Google asociado al servicio, se podrá rastrear el dispositivo (siempre que éste se encuentre conectado a redes móviles o WiFi públicas), y aplicar ciertas opciones de configuración sobre el mismo, como cambiar el código de acceso al dispositivo, o eliminar todos los datos contenidos en él.

Cifrado de las comunicaciones
Otra recomendación de seguridad para este tipo de dispositivos es cifrar las comunicaciones sensibles, como pueden ser conexiones a cuentas bancarias, realización de pagos,…, sobre todo si estas se realizan a través de redes públicas, como puede ser por ejemplo las redes WiFi libres.
Para ello, en estos casos es recomendable el uso de una VPN (Virtual Provate Network). Esto nos conectará a través de una red privada virtual, que protegerá nuestras comunicaciones de posibles intrusos, con la implementación de un canal cifrado.

Antes de configurar la red VPN en el dispositivo, será necesario obtener los datos de administración de la misma, como mínimo la siguiente información:
  • Tipo de VPN (IPsec, L2TP, etc).
  • Nombre de usuario.
  • Contraseña de acceso.
  • Clave precompartida.
  • Identificador/grupo de usuario.
  • Dirección IP/DNS de la red.
Dicha información deberá ser facilitada por el administrador de la red VPN a utilizar.
Una vez se dispone de estos datos, se deberá configurar en el dispositivo Android dicha red, a través de los siguientes pasos:
  1. Acceder al menú “Ajustes”.
  2. Seleccionar la opción “Más ajustes”.
  3. Seleccionar la opción VPN, y pulsar sobre la cruz para añadir una nueva red VPN.
  4. Configurar los datos de la red a utilizar.
  5. A continuación, y si los datos introducidos son correctos, se nos solicitará la introducción del usuario y contraseña de acceso a la red.
  6. A continuación, y si todo el proceso se ha realizado satisfactoriamente, se mostrará por pantalla al usuario un aviso indicando que la VPN se está usando de manera correcta.

A partir de este momento y mientras se utilice dicha red VPN, se podrán utilizar redes públicas, ya que nuestras comunicaciones se realizarán bajo canales cifrados.

Actualizaciones automáticas
Es importante también que el dispositivo tenga instaladas las últimas actualizaciones de seguridad oficiales disponibles, provenientes de la Google Play. Para ello, se recomienda habilitar las actualizaciones automáticas, de manera que el dispositivo detecte e instale dichos parches sin la intervención manual del usuario.
Para habilitar dicha opción automatizada, se deben seguir los siguientes pasos:
  1. Abrir la aplicación “Play Store”.
  2. En el menú de la aplicación, seleccionar la opción “Ajustes”.
  3. Seleccionar la opción “Actualizar automáticamente”.
  4. Habilitar la opción “Actualizar las aplicaciones automáticamente”.
Antivirus
Al igual que los ordenadores personales, los smartphone son dispositivos con alto riesgo de afectación por parte de virus, troyanos, y todo tipo de malware en general. De hecho, y como se puede ver en varias fuentes, el número de estos dispositivos afectados por malware crece exponencialmente cada año.

Por lo tanto, es necesario el uso de antivirus actualizados en dichos dispositivos. Se pueden encontrar varios tipos de este software en el Google Play, aunque una vez instalado, hay que tener en cuenta que se requiere una correcta configuración del mismo. Para ello, se deberá establecer un periodo adecuado de actualización de las firmas, además de la periodicidad con la que se realizarán los escaneos on-demand en el dispositivo. Es recomendable además, configurar el software antivirus para realizar escaneos en tiempo real en todas las conexiones de entrada de datos en el dispositivo.

Bluetooth
Es importante que tengamos las comunicaciones Blueetooth  deshabilitadas por defecto, y solo se habiliten cuando sea necesario su uso, ya que no deja de ser un canal de entrada más para posibles ataques al dispositivo.

Para su deshabilitación, podemos seguir los siguientes pasos:
  1. Acceder al menú “Ajustes”.
  2. Seleccionar la opción “Inalámbricos y Redes”.
  3. Asegurar que la opción “Bluetooth” se encuentra deshabilitada.
Control de aplicaciones instaladas
Por último pero no menos importante, es necesario que se instalen en el dispositivo solo el número mínimo de aplicaciones necesarias, y siempre desde fuentes confiables, como puede ser el propio Google Play. Además, es necesario que se proporcione a las aplicaciones instaladas el número mínimo de derechos posible, ya que muchas aplicaciones piden permisos del usuario para acceder a todo tipo de datos confidenciales, como pueden ser el listado de contactos telefónico, ubicaciones, etc, sin que dichos accesos sean necesarios para el uso de la aplicación.

Con esta medida evitaremos tanto la instalación de aplicaciones no deseadas en el dispositivo, como el acceso de las aplicaciones a información confidencial y sensible contenida en el mismo.

iOS

Protección de acceso al dispositivo
Las opciones de protección de acceso a los dispositivos que funcionan en iOS, son de características similares a las vistas para Android.

En este caso y por defecto, se puede configurar un código de validación formado por un PIN de 4 dígitos, así como una contraseña más compleja, que tenga en cuenta números, minúsculas, mayúsculas, espacios y caracteres especiales. Además, el iPhone 5S dispone de un lector de huellas dactilares, que permite la opción de configurar un código de validación a través de la validación de dicha característica biométrica.

Como en el caso de Android, se deben limitar las funcionalidades a las que el teléfono permitirá el acceso ante de su desbloqueo, en especial el acceso a menús de configuración del propio dispositivo. Si no se configura dicha medida adicional, será muy fácil para un atacante acceder al dispositivo, a pesar de que existan validaciones previas al desbloqueo del mismo.

Cifrado de datos
El cifrado de datos proporcionado por el sistema operativo iOS funciona a través de un módulo de hardware dedicado, con un algoritmo AES a 256 bits.

Dicho cifrado es habilitado por defecto, con lo que no es necesaria ninguna acción adicional por parte del usuario para su uso.

Rastreo y eliminación de datos
Para poder realizar un rastreo del teléfono en caso de pérdida o robo, es posible utilizar la función “Find My iPhone” de iOS. Para su activación, es necesario crear una cuenta en iCloud, y posteriormente, acceder a la sección de configuraciones, desde donde se podrá habilitar dicha función.
 
Cuando se desee rastrear el dispositivo, y siempre que éste se encuentre conectado a una red móvil o WiFi pública, se deberá acceder al portal de iCloud, y una vez realizado el loggin de la cuenta del usuario, se podrá localizar el teléfono en un mapa.

Además, se podrá eliminar la memoria completa del dispositivo, eliminando así los datos confidenciales o privados a las que un posible atacante pueda obtener acceso.

Cifrado de las comunicaciones
Para configurar una red privada virtual (VPN) en el dispositivo, en primer lugar se deben obtener los datos de administración de dicha red, como en el caso de Android. Para hacerlo, en el caso de que no se sea el propietario de la red, se deberá hablar con su administrador.

Una vez obtenidos los datos de administración necesarios, se deberán seguir los siguientes pasos para la configuración y uso de la red VPN en el teléfono:
  1. Acceder al menú “Ajustes”.
  2. Acceder al submenú “General”, y posteriormente seleccionar la opción “VPN”.
  3. Seleccionar la opción “Añadir configuración”.
  4. Introducir los datos de configuración de la red VPN.
  5. En el menú de “Ajustes”, habilitar el uso de la red VPN.
Actualizaciones automáticas
Para habilitar las actualizaciones automáticas en el dispositivo, se deben seguir los siguientes pasos:
  1. Acceder al menú “Ajustes”.
  2. Acceder a la opción “iTunes Store y App Store”.
  3. Habilitar la opción “Actualizaciones”.
Antivirus
Al igual que en los dispositivos Android, se recomienda la instalación y uso de un software antivirus, actualizado con las últimas firmas disponibles. Además, se deberá configurar adecuadamente, para la realización de escaneos on-demand y real-time en el teléfono. Haciendo esto, reduciremos en gran medida la posibilidad de que nuestro dispositivo smartphone sea afectado por malware.

Bluetooth
Otra recomendación importante es la deshabilitar las conexiones Bluetooth del dispositivo por defecto, de manera que solo se habilite dicha opción cuando sea necesario su uso.
Para deshabilitar dichas conexiones, se deben seguir los siguientes pasos:
  1. Acceder al menú “Ajustes”.
  2. Acceder al submenú “Bluetooth”.
  3. Deshabilitar el servicio.
     
Control de aplicaciones instaladas
Es necesario instalar en el dispositivo solo aquellas aplicaciones que sean imprescindibles para el usuario, ya que cada aplicación nueva instalada es un nuevo foco de posibles vulnerabilidades de seguridad. En el caso de requerir la instalación de alguna aplicación, se debe obtener de fuentes confiables, como puede ser la Apple store online. Además, como en el caso de Android, es necesario que se proporcione a las aplicaciones instaladas el número mínimo de derechos posibles para el desarrollo de su función, restringiendo así los posibles accesos de dicha aplicación a la información sensible almacenada en el dispositivo.

 Referencias
Android:
iOS:

Autor: Guillem Fàbregas - CISA, CISM, PCIP, ISO 27001 L.A.
Departamento de Consultoría.

Ventanas rotas (“Broken Windows”): El experimento social aplicado a la seguridad de la información


El mejor aliado de un usuario malicioso es un administrador pernicioso
Fuente: www.theguardian.com
Para empezar con la introducción del concepto detrás de la hipótesis de las “ventanas rotas” realizaremos dos ejercicios mentales para el lector. Imagine las siguientes situaciones y responda a las siguientes preguntas:

Situación A: Usted va caminando por una calle en un sector acomodado, en el que las vías se encuentran en buen estado y todo está limpio y ordenado. Sin embargo, hay un papel tirado en el suelo que muy probablemente se le ha caído a alguien. Usted:
  1. Recoge el papel y lo tira en la papelera más cercana
  2. Sigue su camino, evitando el papel
Situación B: Usted transita esta vez por un vecindario desorganizado, lleno de grafitis, coches desvalijados, edificios viejos con las ventanas rotas y con paredes sucias. Hay papeles y basura por doquier y a los demás peatones no les interesa tirar más basura.  En  su camino usted se encuentra con un papel tirado en el suelo. Usted:
  1. Recoge el papel y lo tira en la papelera más cercana
  2. Sigue su camino, evitando el papel
En un pequeño experimento realizado por el autor de este artículo con 10 personas a las que se les hicieron las anteriores preguntas y se les pidió responder lo más sinceramente posible, los resultados demostraron que en la situación A) el 90% de los encuestados recogerían el papel, mientras que en la situación B) solamente el 10% lo haría. Pero, ¿qué es lo que hace que una misma acción cívica varíe cuando se cambia el escenario? Algunas de las respuestas del por qué la acción de recoger el papel se realizaría en la situación A (vecindario limpio y organizado) fueron:
  • Todos procuran mantener limpio el lugar, así que no seré la excepción (obligaciones civiles)
  • Si no lo hago, los demás peatones seguramente me lo recriminarán (presión social)
  • Si no lo hago, seguramente me sentiré mal (sentimiento de culpabilidad basado en principios morales y éticos)
  • Me gusta estar en este lugar, por lo que intentó mantenerlo lo mejor posible (responsabilidad social y sentido de pertenencia)
Mientras que en la situación B fueron:
  • Porque parece que allí a nadie le importa (tolerancia y anonimato)
  • Porque el impacto de recoger un papel no afectará para nada el desorden ya generado (conformismo)
  • Porque se supone que quien debería recogerlos no ha hecho su trabajo (desinterés)
  • Porque no soy yo quien deba recoger el papel  (irresponsabilidad)
  • No me gusta este lugar, así que me da igual lo que suceda e intentaré no volver a pasar por allí (indiferencia)
Este mismo interrogante fue lo que hizo que en marzo de 1982 James Q. Wilson y George Kelling publicaran el artículo “Broken Windows - The police and neighborhood safety” (“Ventanas rotas – La policía y la seguridad del vecindario”) . En este artículo – orientado principalmente hacia un análisis de la seguridad comunitaria y la policía – citaron el trabajo de Philip Zimbardo, un psicólogo de la Universidad de Stanford quien en 1969 realizó una serie de experimentos de comportamiento social que involucraban un automóvil abandonado en dos sitios diferentes: una calle en el Bronx (New York) y otra calle en Palo Alto (California). En el primer ejercicio, el automóvil estaba en malas condiciones y fue rápidamente vandalizado y  destruido, mientras que en el segundo ejercicio el mismo automóvil fue abandonado en buen estado y se conservó intacto por más de una semana.

Las conclusiones establecieron un concepto muy interesante dentro del comportamiento social: Las acciones incivilizadas tienden a convertirse en víricas, recurrentes y – poco a poco - toleradas. Se pueden encontrar muchos más ejemplos de este enunciado al observar la conducta de un grupo de personas en una manifestación inicialmente pacífica. Con un único comportamiento vandálico o violento que rompa el statu quo, muchos de los manifestantes optarán por seguir la misma línea (imaginar un saqueo, por ejemplo) y regresar al orden inicial costará muchísimo trabajo. Es justo ahí cuando entra la policía (fuerza de control) para aplicar acciones represivas.  El coste de las tareas reactivas siempre sobrepasará al de las tareas preventivas.

Fuente: http://www.throughthenevermovie.com/
Con base en estos resultados, se plantearon una serie de alternativas para conservar el orden:
  • Pedagogía y sensibilización
  • Controles basados en psicología positiva (premiación en vez de represión)
  • Fortalecimiento de los mecanismos de control
  • “Tolerancia cero” frente a comportamientos incívicos, así sean menores
  • Vigilancia continua (tanto de los civiles como del personal de la Fuerza Pública)
  • Mantenimiento constante del entorno
En términos prácticos, este acercamiento fue aplicado por varios Jefes de Policía en Estados Unidos y Alcaldes (como Rudolph Giuliani en Nueva York) con resultados importantes y se ha convertido en una práctica común en la definición de estrategias de seguridad urbana.

El concepto de “ventanas rotas” y su aplicación en seguridad de la información

En el sistema social descrito por Wilson y Kelling se observan tres elementos base de los cuales dos son activos (civiles y policía) y uno es pasivo (bien material). En función de la interacción entre los dos elementos activos se desprende la conservación del elemento pasivo. Este concepto puede emplearse claramente en diferentes áreas del conocimiento, incluyendo el de la seguridad de la información. Si extrapolamos dicho concepto a este área, podríamos catalogar los elementos base de la siguiente manera: activos (usuarios y encargados del área de seguridad) y pasivo (sistema informático e información). El objetivo es la protección de la confidencialidad, la integridad y la disponibilidad del elemento pasivo, conservando este equilibrio de tal manera que los potenciales riesgos sean tolerables y asumibles por la organización. Una “ventana rota” en este escenario se presentará cuando se empiece a deteriorar la seguridad aplicada y no se implementen acciones correctivas en el corto plazo.

Uno de los principales problemas de seguridad de cualquier plataforma informática radica en las demoras en el mantenimiento que se le debe aplicar de forma regular a los controles implementados y la designación de responsables. Partiendo de la premisa de “la seguridad es un elemento que se degrada con el tiempo”, la Dirección de la organización debe definir una estrategia a mediano y largo plazo que incluya una serie de actividades para mantener y mejorar continuamente los niveles de seguridad del entorno, teniendo claro que cualquier error puede ser la puerta de entrada a un incidente de seguridad y que el tiempo siempre corre a favor del atacante. Algunos ejemplos de “ventanas rotas” en un sistema informático son los tiempos de demora en la implementación de actualizaciones y componentes de seguridad (updates/upgrades de sistemas operativos, aplicaciones, patrones de firmas y motores de escaneo de antivirus e IDS/IPS), problemas con la renovación periódica de contraseñas, existencia de cuentas de usuario asociadas a empleados que ya no están en la empresa, almacenamiento de datos sensibles aun cuando ya no se requieren, ausencia de auditorías y revisiones, etc. que claramente son causados por errores en la gestión continua de los controles.

 

¿Hay “ventanas rotas” en su sistema informático?

Lamentablemente, las amenazas y las vulnerabilidades asociadas a un sistema de información van cambiando día tras día y los ataques son más difíciles de identificar y contener por lo que es necesario actuar de forma inmediata. Si en su organización se presenta alguno de los siguientes elementos  (o todos),  es probable que tenga una “ventana rota” que pueda dar paso a la degradación en los niveles de seguridad:
  • Burocracia para la implementación de mejoras de seguridad en la empresa
  • “Aislamiento” del usuario como componente activo de la seguridad empresarial
  • “Zonas grises” en la responsabilidad frente a incidentes de seguridad
  • Conformismo con los controles de seguridad desplegados inicialmente
  • Ausencia de monitorización y revisiones de los controles
  • Falta de soporte administrativo  
Estos problemas inciden psicológicamente en el usuario del entorno, agravando la sensación de inseguridad y desinterés y dando pie al incremento en la frecuencia de incidentes, tal como se demostró en el experimento de Zimbardo.

El arreglo de las “ventanas rotas” informáticas y la prevención de la degradación de la seguridad

Con el fin de arreglar la “ventana rota” cuanto antes, a continuación se enumeran una serie de pautas que pueden ser establecidas dentro de un programa de mantenimiento y mejora de un entorno informático previamente establecido y que tenga desplegados controles que le inicialmente hayan permitido a la empresa gestionar su riesgo.
  • Definición de los umbrales bajo los cuales se alineará la estrategia, empleando mejores prácticas o estándares reconocidos por la industria.
  • Establecimiento de roles y responsabilidades en seguridad de la información, incluyendo a los propios usuarios del sistema, la Dirección y a proveedores/socios de negocio externos.
  • Formación y concienciación regular, focalizada a grupos de empleados con base en sus responsabilidades.
  • Monitorización periódica de los controles de seguridad desplegados y de sus alertas.
  • Tareas de notificación y respuesta ante excepciones (incidentes de seguridad), contando al usuario como un elemento activo en este proceso.
  • Creación de métricas de desempeño de los controles de seguridad (eficiencia/eficacia), que permitirá la definición de tareas preventivas y correctivas.
  • Lecciones aprendidas y mejora continua, incorporando las mejores prácticas de la industria, nuevos desarrollos y tendencias en seguridad.
Un sistema informático con estas características minimiza la inseguridad y el estado mental asociado, otorga confianza al usuario y lo integra dentro de la estrategia global como un elemento más de control, estimula el sentimiento de pertenencia y permite la actuación como un “todo” en vez de “islas” independientes. Estas acciones dotan al propio sistema de métodos de autodefensa, mejorando los tiempos de respuesta y manteniendo los niveles de seguridad en umbrales tolerables para la organización.

Para cualquier estrategia de seguridad de la información, recordar siempre la premisa de las “ventanas rotas”: Si una ventana de un edificio está rota y se deja sin reparar, el resto de las ventanas serán rotas pronto. Una ventana sin reparar es señal de que a nadie le preocupa, por lo que la influencia psicológica en los individuos tenderá al descuido y se agudizará la degeneración del entorno.  Entre más pronto se corrijan los daños menores más fácil será su gestión y menores sus costes asociados, lo cual redunda en una invitación a la prevención y a la proactividad.


Autor: David Eduardo Acosta - CISSP, CISA, CISM, CRISC, PCI QSA, CCNA Security, OPST, CHFI Trainer, BS25999 L.A. 
Departamento de Consultoría.

Mitigación de vulnerabilidades en binarios

Últimamente se están publicando nuevas vulnerabilidades críticas casi a diario, muchas de ellas son explotadas como 0-day masivamente in-the-wild. Ya no basta con tener el sistema actualizado y un buen antivirus, los cibercriminales usan cada vez métodos más sofisticados. La demanda de vulnerabilidades sin parchear (0-days) en aplicaciones muy distribuidas se abre paso en el mercado negro, donde un fallo de este tipo se vende al mejor postor.

Por ello es cada vez más importante una correcta configuración de los sistemas, contar con una adecuada política de seguridad y disponer de medidas de detección/mitigación de vulnerabilidades.

Con el paso de los años y la evolución de exploits, los distintos sistemas operativos han tratado de dificultar la explotación de bugs que puedan conducir a la ejecución de código arbitrario, por ejemplo añadiendo comprobaciones en tiempo de ejecución, restringiendo la ejecución en determinadas zonas de memoria o asignando dicha memoria de forma aleatoria.

Algunas de estas protecciones han sido adaptadas por igual en los sistemas operativos más usados (Windows, Linux, OSX, Android, etc.), aunque su aplicación está más extendida en unos que en otros. Otras medidas de seguridad son específicas o implementadas de diferente manera dependiendo del sistema o de las características del formato de ejecutable (PE en Windows, ELF en Linux, Mach-O en OSX, etc.).

Las protecciones principales son comunes, aunque llamadas de distinta manera según el sistema operativo:

  • Aleatorización de direcciones de memoria: Address Space Layout Randomization (ASLR), las direcciones de memoria (stack y heap) en cada ejecución cambian, lo que dificulta calcular la situación exacta del código malicioso en memoria (shellcode).
  • Zonas de memoria no ejecutables: Not eXecutable (NX) en Unix y derivados, Data Execution Prevention (DEP) en Windows. Marca determinadas zonas de memoria como no ejecutable, normalmente la pila (stack).
  • Detección de sobreescritura de la pila: Stack canary / Stack Smashing Protector / ProPolice. Añade un epílogo a las funciones que para verificar que la pila se encuentre intacta antes de continuar con la ejecución. A grandes rasgos, funciona como un canario en una mina (de ahí su nombre): si el canario muere, hay que detener el trabajo y salir. Lo que hace en la práctica es insertar un valor aleatorio en la pila durante el prólogo de la función y comprobarlo en el epílogo. Si los valores difieren, la pila fue modificada y no es segura, por lo que se detiene la ejecución.
Además de estas medidas, cada sistema dispone de sus propias protecciones y herramientas de seguridad que dificultan aún más la explotación.

En el caso de Windows:
  • Protección contra sobreescritura de SEH: Structured Execution Handling Overwrite Protection (SEHOP), intenta detectar si la tabla de manejadores de excepciones (SEH) ha sido modificada antes de pasarle el control de la ejecución. Muchos de los exploits utilizan este método (reescritura de SEH) para controlar el flujo de ejecución del binario.
  • Control de la tabla de funciones exportadas: Export Address Table Filtering (EAF+). Cuando se intenta leer la tabla de funciones exportadas por las librerías NTDLL.dll, KERNEL32.dll o KERNELBASE.dll, trata de comprobar si el acceso es legítimo. Es una técnica usada por atacantes para tratar de evadir ASLR a partir de una dirección de memoria conocida.
En el caso de la familia Unix, debido a su personalización y modularidad, existen distintos métodos y capas de protección.

Estos métodos se distinguen según sean implementadas las protecciones:
  • Alerta del uso de funciones potencialmente vulnerables: FORTIFY_SOURCE. Es una directiva del compilador, analiza el código en busca de funciones peligrosas: gets(), strcpy(), strcat(), etc. y alerta de su uso. En su configuración más estricta también añade comprobaciones en tiempo de ejecución para evitar la escritura fuera de límites (overflow).
  • Mapeo de direcciones de memoria con byte nulo: ASCII Armor. Mapea la memoria estableciendo un byte nulo (0x00) en la dirección. Esto debería dificultar la explotación de funciones que manejen cadenas de texto, ya que el byte nulo detiene la copia en funciones como strcpy() o strcat() e impide seguir copiando código malicioso.
  • Sección .GOT de solo lectura: RELocation Read-Only (RELRO). Establece la tabla de importaciones como solo lectura. Esta tabla almacena las direcciones de las funciones importadas. Es una técnica habitual, desde el punto de vista de un atacante, intentar sobrescribir alguna de las direcciones originales, para que al llamar a esa función el flujo del programa sea redirigido hacia una dirección arbitraria.
  • Direcciones de memoria relativas: Position Independent Executable (PIE). Las direcciones de memoria utilizadas no son calculadas y escritas por el enlazador al iniciar la aplicación como es habitual, sino que son pre-calculadas a la hora de compilar. Por tanto, el código cargado funcionará independientemente de la zona de memoria en la que se emplace, ya que los saltos y cálculos de direcciones son relativos a la posición actual. Esto permite situar la dirección base del ejecutable de forma aleatoria, algo que no implementa ASLR, que sólo aleatoria el stack y el heap pero deja fuera otras secciones como .text, que en sistemas x86 suele comenzar siempre con 0x0804XXXX. Esta dirección base común puede ser explotada para evadir otras protecciones mediante técnicas ROP (Return Oriented Programming), consistente en reutilizar partes del mismo programa (la dirección no cambia tras cada ejecución), encadenados de tal manera que permiten la ejecución arbitraria de código.
COMO APLICAR LAS DISTINTAS MEDIDAS DE MITIGACIÓN

En Windows, para aplicar estas protecciones al sistema de forma global (sin tener que recompilar), se puede utilizar la herramienta EMET (Enhaced Mitigation Experience Toolkit).

Además, Visual C++ desde la versión 2003 implementa varias de estas medidas por defecto como ProPolice.

En Unix existen distintos parches y módulos para el kernel que mejoran la seguridad y establecen medidas de mitigación de vulnerabilidades.

Los más conocidos son:
  • Grsecurity: Es un complemento de seguridad para el kernel, implementa multitud de medidas de seguridad no sólo de mitigación. El principal componente de mitigación de vulnerabilidades se llama PaX, un parche de seguridad que establece los permisos mínimos para las zonas de memoria, así como NX y ASLR.
  • Selinux: Desarrollado en un principio por la NSA estadounidense, consta de un módulo de seguridad para el kernel de Linux y varias herramientas para el entorno de usuario, enfocado principalmente a establecer fuertes políticas de seguridad y controles de acceso al núcleo.
  • Apparmor: Similar a Selinux. La principal diferencia radica en la forma en la que se controlan las políticas de seguridad. Mientras que en Selinux las protecciones se aplican basadas en inodos del sistema de archivos, en Apparmor se controlan mediante las rutas de acceso en el sistema. Apparmor se considera más sencillo de configurar que Selinux, por lo que está más extendido su uso entre la comunidad Unix.

Además, el compilador GCC actualmente implementa por defecto varias de las medidas anteriores, como el SSP, y otras directivas son opcionales y se indica a la hora de compilar, por ejemplo FORTIFY_SOURCE o RELRO.

CONCLUSIÓN
Aunque todas estas medidas de mitigación añaden una capa adicional (o varias) de seguridad, no se puede confiar la integridad de un sistema exclusivamente en ellas.
Hoy en día tener un sistema sin ningún fallo de seguridad es una utopía, sin embargo se puede contribuir a la reducción del impacto y a hacer cada vez sistemas más seguros.
En general, una vulnerabilidad se puede deber a 3 causas: problemas de configuración, problemas de actualización o 0-days.

La configuración de un sistema son los cimientos en lo que a seguridad se refiere. Por ejemplo, una aplicación desarrollada siguiendo las directrices y buenas prácticas de la industria puede resultar comprometida si se configura de forma incorrecta. Además de las configuraciones recomendadas para la aplicación proporcionadas por el fabricante, podemos contar con guías de bastionado de sistemas y servicios que ayudan a limitar el impacto en caso de encontrarse una vulnerabilidad sin afectar a los clientes legítimos.

Eso es un buen punto de partida, pero hay que acompañarlo de una buena política de actualizaciones y procedimientos para mantener el sistema actualizado sin afectar a su disponibilidad, que también es importante.

Aun siguiendo una correcta política de actualizaciones y disponiendo de un sistema bien configurado, siempre existe la posibilidad de que aparezca un 0-day que ponga a prueba todas estas medidas. Un 0-day se puede deber a varias causas, pero existen medidas para controlar el desarrollo de una aplicación para que ésta sea segura: incorporando prácticas de seguridad en cada etapa del SDLC y realizando un mantenimiento continuo tras su puesta en producción y operación.

Debido a la visión cerrada que tienen los desarrolladores, que frecuentemente trabajan sólo en una parte específica del proyecto, las pruebas realizadas pueden no ser todo lo exhaustivas que deberían ser y algo puede, finalmente, escapar al radar. Lo que ocurre en este campo se puede aplicar a todo lo dicho anteriormente.

Por ello, lo más importante una vez creemos que el sistema es seguro, independientemente de las medidas que se adopten, es evaluar que lo que se ha hecho (o creemos que se ha hecho pero no es así), se ha llevado a cabo de manera correcta.

La mejor manera de validar todos estos aspectos, es a través de evaluaciones periódicas del nivel de seguridad, preferiblemente por un tercero, que aporte una visión global de la infraestructura desde distintos puntos de vista de la seguridad, en definitiva, como lo haría un atacante con la suficiente motivación o recursos.



Autor: Jose Antonio Perez. 
Departamento de Auditoría.