domingo, 1 de diciembre de 2013

Microsoft SQL Server, Apache Web Server, Incorrect ingress/egress packet filtering-Exposición

Introducción

Hoy en día el uso de la web es indispensable, por lo que la importancia de los servidores se vuelve cada vez mayor, de igual manera el uso de las bases de datos son cada vez más relevantes ya que te permiten manejar infinidad de información, razón por la cual dentro de este trabajo están contenidos las características , funcionalidad así como sus vulnerabilidades de un servidor web siendo este Apache Web Server y de Microsoft SQL Server el cual es un gestor de base de datos.
Por otro lado tenemos que debido a que el impacto de la internet es cada vez mayor, el intercambio de información a través de esta red no es del todo segura y en especial cuando se trata de enviar o recibir paquetes de datos que bien podrían contener información sensible de una persona u organización, por eso existen diversas técnicas como bien puede ser el filtrado de paquetes de este tenemos el filtro de entrada y el filtro de salida, utilizados como mecanismo de autenticación entre redes, sin embargo también puede existir un mal funcionamiento de estas técnicas lo que nos lleva a tener vulnerabilidades en el sistema operativo, debido a su impacto también está incluido dentro de este trabajo ya que analizaremos más a detalle sus vulnerabilidades así como posibles soluciones.
El presente trabajo busca mostrar las vulnerabilidades que existen dentro de un ambiente windows(Microsoft SQL Server) y un ambiente Linux(Apache Web Server) para así determinar y considerar todas las posibles fallas que se pudieran tener en la implementación de dichos softwares. Al final del mismo se podrán encontrar una serie de conclusiones que se realizaron al momento de recabar y analizar la información antes mencionada y las respectivas fuentes bibliográficas que se utilizaron como apoyo a lo aquí presentado.
Microsoft SQL Server

SQL Server es una familia de productos y tecnologías que reúnen los requisitos de almacenaje de datos de ambiente OLTP Y OLAP. Es un sistema de administración de base de datos relacional (RDBMS) que: administra el almacenaje de datos para transacciones y análisis, responde a peticiones de aplicaciones Cliente; y utiliza: Transact-SQL, XML (Lenguaje extendido de margen), MDX (Expresiones multidimensionales), SQL-DMO (Objetos de administración distribuida).

Componentes y servicio de SQL Server: librerías de red del servidor, apertura de servicio de datos, motor relacional (analiza, optimiza y ejecuta las sentencias Transact-SQL), motor de almacenamiento (administra los archivos de la base de datos), MSSQL Server (motor de la base de datos), éste componente procesa todas las sentencias Transact-SQL y administra los archivos que abarcan las bases de datos en el servidor.
SQL Server administra base de datos OLTP y OLAP: OLTP (Proceso de transacciones en línea), OLAP (Proceso analítico en línea), esta tecnología organiza y acumula grandes cantidades de datos.

SQL Server administra Bases de Datos y distribuye los recursos disponibles del servidor (tales como memoria, operaciones de disco, etc.) entre las múltiples peticiones.

El Sistema Administrador para Base de Datos Relacionales (RDBMS) es responsable de: mantener las relaciones entre la información y la Base de Datos, asegurarse de que la información es almacenada correctamente, y recuperar toda la información en un punto conocido en caso de que el sistema falle.

Transact – SQL, es usado como lenguaje de programación para SQL Server. Con Transact - SQL se puede tener acceso a la información, realizar búsquedas, actualizar y administrar sistemas de Bases de Datos Relacionales.

Características de Microsoft SQL Server

Algunas de ventajas del uso de SQL Server son: el soporte de transacciones., escalabilidad, estabilidad y seguridad, soporta procedimientos almacenados, incluye un potente entorno gráfico de administración (permite el uso de comandos DDL y DML), permite trabajar en modo cliente-servidor, donde la información y datos se alojan en el servidor y las terminales o clientes de la red sólo acceden a la información y permite administrar información de otros servidores de datos. La desventajas de su uso es: costo de las licencias comparadas con otros competidores. Este sistema incluye una versión reducida, llamada MSDE con el mismo motor de base de datos pero orientado a proyectos más pequeños.
Versiones SQL Server
Microsoft SQL Server 2005 es una plataforma de software de gestión de datos completa e integrada que permite a las organizaciones gestionar la información y ejecutar sus aplicaciones de negocio con total confianza. Con SQL Server 2005 las empresas pueden obtener una visión precisa del estado y la situación de su negocio.
SQL Server 2008 y SQL Server 2008 R2 ofrece capacidades excepcionales que permitirán a su organización ampliar sus operaciones de base de datos con confianza y mejorar la eficiencia de sus profesionales de TI y sus desarrolladores. Le ofrece también un entorno de Business Intelligence muy escalable y bien gestionado, basado en un modelo de autoservicio básico a disposición de los usuarios finales.

Vulnerabilidades Microsoft SQL Server

Microsoft SQL Server, contiene varias vulnerabilidades graves que permiten a atacantes remotos obtener información sensible, alterar el contenido de bases de datos, comprometer servidores SQL, y, en algunas configuraciones, el compromiso del hosts del servidor. En 2002 un gusano de Microsoft SQL Server dio a conocer varias fallas. Este gusano genera un nivel perjudicial de tráfico de la red cuando se escanean para otros servidores vulnerables. Cualquier sistema de Microsoft Windows con Microsoft SQL Server Desktop Engine 2000 Microsoft SQL Server 7.0, Microsoft SQL Server 2000 o instalado, han sido afectados.

Cómo determinar si se es vulnerable:

Si se está ejecutando un sistema sin parches o no se ha actualizado el sistema con el último parche, éste tiene mayor probabilidad de ser vulnerable. Microsoft ha desarrollado el Microsoft Baseline Security Analyzer (MBSA). MBSA busca los parches faltantes y vulnerabilidades en SQL Server 7.0 y 2000. Se debe constatar que algún parche está instalado correctamente.
Es necesario aplicar el Service Pack más reciente para Microsoft SQL Server, aplicar el último parche acumulativo que se ha publicado después del Service Pack más reciente, y aplicar los parches individuales que se publicaron después del lanzamiento del último parche acumulativo.
Ejecutar el servicio MSSQL Server y el Agente SQL Server bajo una cuenta de dominio válida con privilegios mínimos, no como un administrador de dominio o una cuenta en el sistema (en NT) o LocalSystem (en 2000 o XP) .
El filtrado de paquetes se debe realizar en las fronteras de la red para prohibir las conexiones entrantes desde el exterior. Filtrado de entrada en puertos TCP 1433 y 1434, podría evitar que los atacantes ajenos a la red, exploren o infecten servidores SQL de Microsoft vulnerables en la red local, y que no están expresamente autorizado para proporcionar servicios de SQL públicas. Si los puertos TCP 1433 y 1434 están disponibles en los portales de Internet, habilitar y personalizar la salida / filtrado para evitar el uso indebido de este puerto de entrada.
Se han descubierto diversas vulnerabilidades en Microsoft SQL Server 7.0 y 2000 que pueden permitir a un atacante ejecutar código arbitrario en el servidor SQL, en el contexto de la cuenta bajo la que se ejecute el servidor SQL, que habitualmente es la de Administrador. SQL Server proporciona funciones para definir el formato de los mensajes de error basadas en C. Estas funciones están accesibles a todos los usuarios. Pero si se proporciona una entrada maliciosamente creada a estas funciones se puede provocar una condición de error explotable en SQL Server. Para construir este ataque, el atacante deberá tener permisos para ejecutar consultas SQL, bien directamente o bien mediante la inyección de comandos SQL a través de otros fallos.

La función raiserror() es accesible para todos los usuarios, y permite la especificación de un parámetro demasiado largo. Esto produce el desbordamiento de búfer. De forma adicional se pueden emplear especificadores de formato de cadena, lo que permitirá al atacante sobrescribir una dirección arbitraria de memoria, y de esta forma lograr la ejecución del código deseado.
La función formatmessage() también es accesible para todos los usuarios. Mediante la creación de mensajes especialmente modificados, cualquier usuario podrá posteriormente hacer que se ejecute el código contenido en el mensaje.

La instalación de SQL Server deja las contraseñas en el sistema, al realizar la instalación de Microsoft SQL Server 7.0 o 2000 se crea un archivo de texto en el que se incluye la contraseña de administración del servidor de base de datos. Al finalizar la instalación el archivo con la información sensible permanece en el sistema, al acceso de cualquier usuario.

Cuando se realiza la instalación de SQL Server 7.0 (incluido MSDE 1.0), SQL Server 2000, o uno de los Service Pack para SQL Server 7.0 o SQL Server 2000, la información proporcionada para el proceso de instalación es recogida y almacenada en un archivo de configuración llamado setup.iss.

El archivo setup.iss puede ser empleado entonces para automatizar el proceso de instalación en otros sistemas SQL Server. SQL Server 2000 también incluye la posibilidad de grabar una instalación desatendida en el archivo setup.iss. El administrador podrá introducir la contraseña a la rutina de instalación bajo las siguientes condiciones:
Si el servidor SQL Server está configurado en "Mixed Mode", se introducirá la contraseña para la cuenta de administrador (cuenta "sa"). Cuando en "Mixed Mode" o en "Windows Authentication Mode", se puede introducir de forma opcional un nombre de usuario y contraseña con el propósito de iniciar las cuentas del servicio SQL Server.
En cualquier caso, el password se almacenará en el archivo setup.iss.
Antes de SQL Server 7.0 Service Pack 4, las contraseñas eran almacenadas en texto claro. Para SQL Server 7.0 Service Pack 4 y SQL Server 2000 Service Packs 1 y 2, las passwords eran cifradas y almacenadas. De forma adicional, durante el proceso de instalación se crea un archivo de log que también incluirá cualquier password almacenada en setup.iss.
El problema reside en que el archivo permanece en el sistema una vez completado el proceso de instalación. Excepto en SQL Server 2000 setup.iss quedará al alcance de cualquiera que pueda acceder al sistema.

Solución

Microsoft ha publicado parches para evitar estos problemas, que se pueden descargar de su portal específico a SQL Server 7.0 y SQL Server 2000.

Comparación de vulnerabilidades SQL Server
Microsoft, IBM, MySQL y Oracle informan periódicamente las vulnerabilidades de seguridad para NIST National Vulnerability Database. Con base en esta recolección de información, la siguiente es una representación histórica de las vulnerabilidades de seguridad de bases de datos reportados por Microsoft, IBM, MySQL y Oracle en los últimos 8 años (http://download.microsoft.com/download/3/7/2/37204386-5BAA-463E-8888-9140863531D6/SQLServer2008_ComplianceandCertifications.pdf).

Pasos para mejorar la seguridad en SQL Server:


Mantener una buena seguridad de nuestros datos puede ser una tarea muy dura, pero para los dba's no hay nada mejor que ejecutar una prueba de penetración sobre nuestros manejadores de bases de datos y ver que los resultados fueron positivos, es decir que no tenemos vulnerabilidades de seguridad.

Autenticación de Windows

Siempre se recomienda usar la seguridad de Windows en nuestros servidores de bases de datos, ya que este método nos quita del 95% de los problemas de seguridad incluyendo virus. De esta manera, un hacker para poder penetrar a nuestra base de datos primero tendría que autentificarse en el dominio, que es mucho más difícil que autentificarse en SQL Server, otra ventaja es que el password no esta viajando por la red.

Cuenta de Administrador de SQL Server (sa)

Debemos de evitar el uso de la cuenta de SA, aun si somos administradores, es preferible el crear una cuenta para nosotros con permisos restringidos, ya que la mayoría de las veces sólo se entra para realizar alguna modificación de datos o a monitorear el equipo.

Cambiar la cuenta con la que inicia SQL Server

Es preferible siempre cambiar la cuenta con la que SQL Server inicia, LocalSystem por alguna que no sea descriptiva, es decir que no diga SQLAdmin, o algo similar, ya que es una manera fácil de que un hacker identifique que es una cuenta con permisos sobre la Base de datos. Ahora este cambio es preferible hacerlo desde el Administrador de SQL Server, dando botón derecho sobre el nombre del servidor, seleccionando propiedades y la pestaña de seguridad, de esta manera, SQL Server automáticamente le asigna los permisos necesarios a la cuenta que asignemos.

Auditar los intentos fallidos y accesos denegados

La mejor manera de detectar que tenemos un intruso es colocando alarmas en nuestro sistema. Habilitando la opción (Propiedades de SQL Server / Pestaña de seguridad) Failed Login, podemos detectar en el log de errores cuando un usuario trato de firmarse a SQL Server y su acceso fue denegado, y si llegáramos a ver este mensaje muy concurrente o hasta varios en menos de 1 minuto podemos estar seguros de que se trata de algún intruso tratando de acceder a la base de datos. El siguiente paso a esta alarma sería abrir un trace y capturar sólo los intentos fallidos de conexión con el Hostname, esto nos dirá el nombre de la máquina de donde se está intentando acceder a nuestra base de datos.

Mantener actualizados los service packs y hotfixes

Manteniéndonos actualizados con los service packs y hotfixes es una manera de mantenernos protegidos de los hackers más avanzados. La mayoría de las vulnerabilidades son corregidas con estos parches.

Cambiar el puerto de SQL Server y bloquearlo

Una manera de evitar hackers intentando encontrar servidores de SQL Server, es cambiando el puerto de SQL Server, la mayoría de los hackers se fastidian de estar buscando puertos por la red, y para evitar que se esté escaseando puertos de SQL Server, es mejor meterlos a firewall. El puerto lo podemos cambiar en la utilería de red “Server Network Configuration”, seleccionar TCP/IP y seleccionando propiedades. Por default tenemos siempre 1433 para la instancia por default, cambiemos esta por otra. Se debe tomar en cuenta que si se necesita acceder al SQL Server desde fuera de la red, informar al administrador de nuestra red del cambio.

Protegiendo el Sistema Operativo

Debemos recordar que si no está seguro el sistema operativo, entonces nuestra base de datos esta vulnerable a un ataque. Por ello también los DBA’s deben procurar que el sistema operativo cuenta con los service packs necesarios.
Apache Web Server
Apache es una popular y eficiente alternativa, que ofrece servicios web. Este web server es uno de los logros más grandes del software libre y la punta de lanza del mundo de las páginas web.
Un servidor Web es un programa especialmente diseñado para transferir datos de hipertexto, es decir, páginas web con todos sus elementos (textos, widgets, baners, etc). Estos servidores web utilizan el protocolo http.
Los servidores web están alojados en un ordenador que cuenta con conexión a Internet. El web server, se encuentra a la espera de que algún navegador le haga alguna petición, como por ejemplo, acceder a una página web y responde a la petición, enviando código HTML mediante una transferencia de datos en red.
Apache es completamente libre ya que es un software Open Source y con licencia GPL. Una de las ventajas más grandes de Apache, es que es un servidor web multiplataforma, es decir, puede trabajar con diferentes sistemas operativos y mantener su excelente rendimiento. Desde el año 1996, es el servidor web más popular del mundo, debido a su estabilidad y seguridad.

Principales características

Entre las principales características de Apache, se encuentran las siguientes:
  • Soporte de seguridad SSL y TLS.
  • Puede realizar autenticación de datos utilizando SGDB.
  • Puede dar soporte a diferentes lenguajes, como Perl, PHP, Python y tcl.

Usos de Apache

Apache es utilizado principalmente, para realizar servicio a páginas web, ya sean estáticas o dinámicas. Este estupendo servidor se integra a la perfección con otras aplicaciones, creando el famoso paquete XAMP con Perl, Python, MySQL y PHP, junto a cualquier sistema operativo, que por lo general es Linux, Windows o Mac OS.

Protocolo SSL

SSL (Secure Socket Layers) es un proceso que administra la seguridad de las transacciones que se realizan a través de Internet. El estándar SSL fue desarrollado por Netscape, junto con Mastercard, Bank of America, MCI ySilicon Graphics. Se basa en un proceso de cifrado de clave pública que garantiza la seguridad de los datos que se envían a través de Internet. Su principio consiste en el establecimiento de un canal de comunicación seguro (cifrado) entre dos equipos (el cliente y el servidor) después de una fase de autenticación.
A mediados de 2001, la patente SSL ,que hasta ese momento había pertenecido a Netscape, fue adquirida por IETF (Internet Engineering Task Force) y adoptó el nombre de TLS (Transport Layer Security).

VULNERABILIDADES

La función "do_rewritelog()" en (modules/mappers/mod_rewrite.c) no trata correctamente determinadas secuencias de escape cuando escribe en el fichero de log y podría ser aprovechado enviando peticiones HTTP especialmente manipuladas. La explotación con éxito de esta vulnerabilidad podría permitir la ejecución de comandos arbitrarios pero es necesario que el usuario vea el archivo de log en un emulador de terminal. Esto podría permitir a atacantes remotos ejecutar código arbitrario a través de una petición HTTP que contiene una secuencia de escape para un emulador de terminal. La vulnerabilidad está reportada en la versión 2.2.24
El módulo mod_proxy_http en el servidor HTTP Apache 2.4.x antes de 2.4.3 no determina adecuadamente las situaciones que requieren el cierre de un back-end conexión, lo que permite a atacantes remotos obtener información sensible en circunstancias oportunistas mediante la lectura de una respuesta que estaba destinada a un cliente diferente.
En el módulo mod_negotiation en el servidor HTTP Apache 2.4.x antes de 2.4.3, cuando la opción MultiViews está activada, permite a atacantes remotos inyectar secuencias de comandos web o HTML arbitrarias a través de un nombre de archivo creado que no se maneja adecuadamente durante la construcción de una lista de variantes.
HTTP Apache Server para Win 32 en su versión 1.3.24, antes de 2.0.x y 2.0.34-beta puede permitir un ataque remoto para la ejecución de comandos arbitrariamente en el servidor web, esto es: si un atacante remoto envía una petición de un archivo bat o un archivo cdm DOS añadido con el carácter de barra vertical (|), el atacante podría utilizar el intérprete del shell cdm.exe para la ejecución de comandos arbitrarios en el sistema, logrando así obtener total acceso. Esta vulnerabilidad fue reportada el 21 de marzo de 2002, solucionandose con la última versión disponible en ese entonces.
Análisis de desbordamiento de pila para URI IPv6 en Apache 2.0.50. Una primera vulnerabilidad apareció en la función apr_uri_parse () durante el manejo de las direcciones IPv6. El código afectado pasa una longitud negativa argumento de la función memcpy (). En los sistemas BSD esto se puede llevar a distancia ejecución de comandos debido a la naturaleza de la aplicación memcpy (). En Linux este error dará lugar a una condición de denegación de servicio remoto (DoS). Esto genera un  segundo error que es un desbordamiento de búfer local que se produce mientras se expande $ {ENVVAR} en el archivo. Htaccess y el archivo httpd.conf. Ambos archivos por default no son editables por usuarios normales.
En el Apache HTTP Server antes 2.4.2 se pone un nombre de directorio de longitud cero en el ld_library_path, que permite a usuarios locales conseguir privilegios a través de un caballo de Troya DSO en el directorio de trabajo actual, durante la ejecución de apachect.

Ingress and egress packet filtering / Filtrado de paquetes de entrada y salida

Filtrado de paquetes de salida

El filtrado de salida es la práctica de los controles y restricciones al flujo de información de salida de una red a otra. Normalmente se trata de información de una organización privada TCP / IP a la red informática Internet que se controla.
Los paquetes TCP / IP que se envían fuera de la red interna se examinan a través de un enrutador o firewall. Los paquetes que no cumplen con las políticas de seguridad no se les permite salir.
El filtrado de salida ayuda a garantizar que el tráfico no autorizado o malicioso nunca salga de la red interna.

Filtrado de paquetes de entrada

Es una técnica que se utiliza para asegurarse de que  paquetes entrantes son en realidad de las redes que dicen ser.

Problema

Las redes reciben paquetes de otras redes. Normalmente, un paquete contiene la dirección IP del ordenador que lo envió originalmente. Esto permite a los dispositivos de la red que lo reciba, saber de dónde viene, lo que permite una respuesta que se envía de vuelta.
Sin embargo, la dirección IP del remitente puede ser falsa, caracterizando un ataque de suplantación. Esto oculta el origen de los paquetes enviados, por ejemplo, en un ataque de denegación de servicio (ataque a un sistema de computadoras o red que causa que un servicio o recurso sea inaccesible a los usuarios legítimos) o un ataque distribuido de denegación de servicio, el cual se lleva a cabo generando un gran flujo de información desde varios puntos de conexión.
El filtrado de entrada de paquetes es una técnica utilizada por muchos proveedores de servicios de internet para tratar de evitar la falsificación de direcciones de origen del tráfico de Internet, y por lo tanto indirectamente combatir diversos tipos de abuso de la red, por lo que se utiliza el tráfico de Internet para rastrear su origen.

Solución

Una posible solución consiste en puertas de enlace de Internet intermedias (es decir, los servidores que se conectan a redes disparen a lo largo de la trayectoria seguida por cualquier paquete dado) de filtrado o negar cualquier paquete considerado ilegítimo.
Se puede usar cualquier router que implementé el filtrado de entrada para que compruebe el campo IP de origen de los paquetes IP que se reciben, si los paquetes no tienen una dirección IP del rango de direcciones IP de la interfaz está conectada, el paquete se desecha. Esto no puede ser posible si el host final es multitarjeta.

Insuficiente filtrado de los paquetes con direcciones de inicio y destino inadecuadas

La falsificación de direcciones IP es un método comúnmente utilizado por los atacantes para cubrir sus huellas cuando atacan a una víctima. Por ejemplo, el popular ataque "smurf" hace uso de una característica de los enrutadores (routers) para enviar una secuencia de paquetes a miles de máquinas. Cada paquete contiene una dirección IP de origen que es suplantada de una víctima. Las máquinas a las que estos paquetes falsificados son enviados inundan a la máquina víctima generalmente deteniendo sus servicios o bien deteniendo los servicios de una red completa. Utilizar un mecanismo de filtrado sobre el tráfico que entra en la red (ingress filtering) y el que sale (egress filtering) le ayudará a lograr un alto nivel de protección.

Conclusiones


La seguridad que nos ofrecen los programas que a diario usamos es de vital importancia, ya que la confidencialidad, integridad y disponibilidad de nuestra información dependen de ella. Si bien es cierto que todo software está expuesto a ser vulnerable a ataques, tenemos que remarcar la eficiencia que estos tienen para llenar, tapar o parchar estos huecos. El caso de  Apache que es el servidor web más usado y  popular en mundo, además de que es de código abierto, resulta muy interesante, ya que una gran comunidad de programadores y desarrolladores están en constante colaboración por mejorar Apache. Esto es, al detectar cualquier vulnerabilidad dentro de cualquiera de las versiones de su servidor, Apache pública en su sitio web en el apartado de seguridad/vulnerabilidades toda la información referente a dicha vulnerabilidad, lo cual resulta en un problema en manos de toda la comunidad que colabora con el software libre, creando así y de una manera muy rápida un parche. Esta eficiencia es muy importante para los usuarios quienes ponen toda su confianza en dicho software, ya que es una garantía de que su informacion estara bien. Por otro lado tenemos el caso de SQL, quien según la National Vulnerability Database tiene los niveles más bajos en vulnerabilidades, comparado con Oracle, DB2 y MySQL. Este numero tan bajo no es reflejo exacto de la seguridad que nos ofrece este servidor, ya que si bien son pocas las vulnerabilidades que este presenta, se debe mencionar que las puertas traseras que Microsoft deja en SQL version tras version, son el gran paso para concretar ataques de mayor efecto, lo cual resulta en grandes afecciones para los usuarios, que son lo que siempre pierden. En cuanto al incorrecto manejo de entradas y salidas de paquetes, es de gran relevancia mantener eficiente el filtrado de dichos paquetes, con el objetivo de conservar un alto grado de seguridad en la interacción de redes, ya sean sólo redes internas en un organización o con el constante flujo de información hacia redes contextuales, evitando circunstancias de pérdida de información o problemas con ataques distribuidos de denegación de servicios. Tener siempre en consideración las posibles amenazas, riesgos y vulnerabilidades de los diferentes sistemas, nos permitirá contar con las suficientes herramientas para cubrir eficazmente los principios de la seguridad.

No hay comentarios.:

Publicar un comentario