Entradas de la categoría ‘Underground’
SSHv1 CRC32, el exploit de ‘Matrix Reloaded’

Trinity en 'The Matrix Reloaded'
Todos hemos comprobado profusamente cómo se utilizan elementos de la cultura informática en las películas con una suerte bastante desacertada. Incluso cintas que se suponen pertenecientes al género computacional están cargadas de errores informáticos.
Desde ‘Juegos de guerra‘, e incluso bastante antes, los ordenadores han pasado a formar parte de la línea argumental de muchos telefilmes. Y digo desde ‘Juegos de guerra’ porque quizás fuera la primera película dedicada exclusivamente al mundo informático desde la perspectiva del hacking puro, en la que se mostraba una primitiva y rudimentaria Internet.
Esta película, genialmente interpretada por Matthew Broderick, derrochaba imaginación, sin embargo no se le puede achacar un excesivo uso fantasioso de la informática, quizás porque en la época tampoco era posible crear efectos tridimensionales grandiosos y recurrieron a mostrar la austera pantalla negra de la consola y el adolescente introduciendo los comandos a mano. También es cierto que en algunos momentos a los guionistas se les fue la pinza un poco y se generan situaciones digitales bastante inverosímiles (sobre todo para la época); pero es una gran película.
La película ‘La red‘, que tiene como protagonista a Sandra Bullock, es otro de esos títulos de culto en el mundo de hacking, aunque en ella se aprecia más la ignorancia informática de los guionistas y la despreocupación total del director y del productor por fabricar un producto serio más allá de una absurda trama. Direcciones IP que no existen, extraños efectos de interferencias en páginas web que llevan a sitios oficiales, chats imposibles y demás parafernalia son fácilmente reconocibles en ‘La red’. Además, por supuesto, de uno de los principales axiomas del panorama de las películas de tema informático, que dice aquello de que la velocidad de borrado del contenido de un disquete es inversamente proporcional a la tensión emocional de la escena.
Pero existe una película todavía peor, mucho peor. Es la película ‘Hackers (piratas informáticos)‘. El colmo del despropósito informático, está cargada de interfaces gráficas deslumbrantes, de pantallas de login descomunales (muy típico) y de efectos e instrumentos digitales que se escapan, ya no del mundo de la informática, sino del mundo de la lógica aplastante. Esta película, con una jovencísima Angelina Jolie en el papel de Kate Libby (aka Acid Burn), tiene de la cultura cyberpunk sólo la estética y poco más.

Angelina Jolie en 'Hackers (piratas informáticos)'
‘Operación Swordfish‘, con John Travolta, es uno de los ejemplos de película en la que la informática sirve únicamente como telón de fondo para el argumento, porque prácticamente nada de lo que dicen tiene sentido. Para muestra un botón. En la siguiente escena (en inglés), archifamosa por lo absurda, Stanley Jobson (Hugh Jackman) tiene que reventar la clave de acceso al Departamento de Defensa de los EEUU en 60 segundos mientras un esbirro del malo le apunta con una pistola a la cabeza y una rubia de traca le practica una felación. Vamos, lo nunca visto.
Es impresionante verle teclear vaya usted a saber qué en el portátil mientras aparecen en pantalla listados larguísimos de términos informáticos sin conexión aparente alguna.
Series televisivas como ‘CSI‘ han metido la gamba también más de una vez. Memorable la imagen siguiente en la que aparece una dirección IP que ríete tú del protocolo IPv6. ¿De dónde se han sacado números tan altos? Por el amor de Dios, ¿qué longitud en bits tienen esas direcciones? ¿Acaso los CSI tienen una red paralela a Internet en la que hay más máquinas conectadas que seres vivos en la galaxia? Y no ha sido la única vez que les pasa.

Error de IP en 'CSI'
En fin, multitud de películas en las que se cometen continuamente errores con el tema informático y que, parece ser, se seguirán cometiendo. Podríamos hablar de la dirección de correo errónea (Max@Job 3:14) en ‘Misión imposible‘, del iPod que lee cientos de códigos en pocos segundos, para escanearlos con un cabezal acoplado en plan MacGyver, en ‘Firewall‘, de obtener una contraseña gracias a la imagen de una cámara de seguridad en ‘Conspiración en la Red‘ o de los cientos de errores típicos que se cometen en todas las películas: programas que amplían una matrícula fotografiada desde tomar por culo hasta que se visualiza perfectamente, monitores con un brillo tal que reflejan su imagen perfectamente en la cara del usuario, listados en pantalla con el soniquete de fondo de una impresora matricial, velocidades de transferencia de datos inverosímiles, etcétera.
Sin embargo, y para nuestro regocijo, existen películas en las que el asunto informático se ha tratado correctamente. Títulos como ‘El ultimátum de Bourne‘, ‘La jungla 4.0‘, ‘El asalto final (Hackers 2: Operación Takedown)‘ o ‘The Matrix Reloaded‘ son buenos ejemplos de películas en los que las escenas con ordenadores son totalmente creíbles, porque aparecen sistemas operativos que existen, software real y comandos reales que, además, se introducen de forma acertada y eficaz para el fin que se desea llevar a cabo.
Y es precisamente en ‘The Matrix Reloaded’ donde los hermanos Wachowski llevaron, a mi entender, el tema hacking hasta su punto más riguroso en la escena en la que Trinity (Carrie-Anne Moss) intenta reventar el acceso al ordenador de la central eléctrica. La foto siguiente muestra a qué escena me refiero.
En la imagen se puede apreciar perfectamente la pantalla de la consola que Trinity ha manejado una vez realizada toda la secuencia hasta introducir la contraseña. Es un shell no estándar de una consola Unix adaptado al tono verde que tiñe todas las películas de la saga ‘The Matrix’.
Trinity utiliza para reventar la contraseña, en principio, el programa Nmap (en su versión 2.54BETA25, una versión real), que es un software de código abierto que se utiliza en el mundo del hacking y de la seguridad informática para escanear o rastrear puertos en una máquina remota con el objeto de encontrar agujeros de seguridad. Nmap ofrece la posibilidad de encontrar todos los puertos abiertos de una máquina objetivo y poder comprobar así si dicha máquina es vulnerable a un ataque sobre ese puerto.
La línea de comando que emplea ella es la siguiente:
nmap -v -sS -0 10.2.2.2El parámetro -v le indica a Nmap que aumente el nivel de mensajes detallados; -sS prepara a la aplicación para un análisis de puertos TCP mediante la técnica SYN; y -O especifica que debe ser activada la detección del sistema operativo que está escuchando en ese puerto.
Un escaneo SYN puede realizarse rápidamente, sondeando miles de puertos por segundo en una red rápida en la que no existan cortafuegos. El sondeo SYN es relativamente sigiloso y poco molesto, ya que no llega a completar las conexiones TCP. A esta técnica se la conoce habitualmente como sondeo medio abierto, porque no se llega a abrir una conexión TCP completa. Se envía un paquete SYN, como si se fuera a abrir una conexión real, y después se espera una respuesta. Si se recibe un paquete SYN/ACK esto indica que el puerto está a la escucha (abierto), mientras que si se recibe un RST (reset) indica que no hay nada escuchando en el puerto. Si no se recibe ninguna respuesta (o si se recibe un error de tipo ICMP no alcanzable) después de realizar algunas retransmisiones, entonces el puerto se marca como filtrado.
Por último, Trinity pasa a Nmap como parámetro final la dirección IP del ataque (10.2.2.2), que es una dirección perfectamente válida de un adaptador de red en un servidor.
Lo siguiente que podemos observar en la imagen son los resultados que ha arrojado Nmap. En este caso sólo ha descubierto un puerto abierto que, casualmente, es el puerto TCP 22, el puerto de SSH (Secure SHell). SSH es el nombre de un protocolo, y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos y, además, implementa la seguridad que otros protocolos de sus mismas características (como Telnet) no tienen.
Al darse cuenta de que el puerto 22 está abierto en la máquina remota, Trinity, que es una hacker experimentada porque le habrán enchufado en Matrix un programa de esos directo a la mente para aprender a hackear, no se le ocurre otra cosa que utilizar un exploit para reventar la seguridad del equipo y hacerse con su dominio. El exploit utilizado es el SSHv1 CRC32, que existe en la realidad y fue creado por el analista de seguridad Michael Zalewski en el año 2001.
Un exploit es una pieza de software, un fragmento de datos o una secuencia de comandos con el fin de automatizar el aprovechamiento de un error, fallo o vulnerabilidad, a fin de causar un comportamiento no deseado o imprevisto en los programas informáticos, hardware o componentes electrónicos (por lo general computarizados).
A este ataque en concreto contra un servidor SSH se le conoce como SSHNuke. El agujero de seguridad SSHv1 CRC32 es un fallo de desbordamiento de memoria muy real. O quizás mejor lo fue, porque esperemos que los administradores de sistemas no tengan todavía por ahí un servidor SSH con software tan viejo como para contener este error (alguno seguro que hay). Explotado correctamente permite a un atacante remoto modificar su contraseña de root (cuenta de usuario en sistemas Unix que posee todos los derechos) y acceder al sistema vulnerable.
Vemos, por fin, que Trinity ejecuta el exploit, mediante la siguiente instrucción, contra la IP anterior y con el parámetro pertinente para cambiar la contraseña del administrador del sistema:
sshnuke 10.2.2.2 -rootpw="Z10N0101"Atención especial al detalle de la contraseña nueva (Z10N0101). Si os dais cuenta está formada por dos partes: Z10N y 0101. Z10N es la forma de escribir Zion (la última ciudad humana real fuera de Matrix) en “leet”, que es un tipo de escritura con caracteres alfanuméricos usado por algunas comunidades y usuarios de diferentes medios de Internet, sobre todo los hackers (aunque en “leet” auténtico, la Z debería haber sido sustituida por un 2, dando lugar a 210N). Y el número 101 es una cifra que aparece mucho en toda la saga de ‘The Matrix’.
Una vez que Trinity cambia la contraseña a su antojo, lo que hace es acceder, vía SSH, a la máquina remota con privilegios de root (introduciendo su contraseña recién restaurada).
En fin, muchos directores de películas deberían mirarse en el reflejo de ‘The Matrix’ para, a la hora de introducir temas informáticos en sus obras, recurrir a expertos en la materia y conseguir así un producto digno. Ya sé que, en el fondo, todo esto es de putos friquis como nosotros, y que a la gente que va al cine le gusta ver espectaculares efectos tridimensionales en la pantalla de un ordenador, pero, si no se inventan una forma nueva para conducir un coche, ¿por qué hacerlo para manejar un ordenador?
Seguro que esos directores se gastan más dinero en contratar a expertos pilotos para que el manejo de una jodida avioneta quede realista y luego no invierten un mísero euro en la materia informática. Un error, porque sus películas serán la risión en los foros especializados de Internet, y sus personas de ellos rebajadas a directores de pacotilla. He dicho.
Ingeniería social

Al acecho...
La gente es más inocente que un balón de playa. De buenos que somos rayamos en lo ridículo, bordeamos la frontera con los tontos de baba. Nos gusta ayudar o, mejor dicho, quedar bien ante los demás. Si alguien que no conocemos nos pide algo por teléfono de buenas maneras y con voz sensual, le damos hasta la talla de ropa interior. Si un desconocido nos aborda por la calle y nos pide que le socorramos y le dejemos el móvil para llamar, le marcamos nosotros al pobre, que está muy nervioso. Bienvenidos al maravilloso mundo de la ingeniería social.
Una de las técnicas de hacking más antiguas (y eficaces) es la ingeniería social. Es la “ciencia” que permite obtener información confidencial mediante la manipulación psicológico social de los individuos usuarios legítimos. Se trata de técnicas muy antiguas que, probablemente, llegaron al mundo binario nacidas en otros contextos, porque a la gente se la ha engañado toda la vida. El principio que sustenta la ingeniería social referida a la computación es que en cualquier sistema informático el usuario es el eslabón más débil.
El gran Kevin Mitnick, uno de los hackers más famosos de los años ochenta y noventa en EEUU y ahora reconvertido en consultor de seguridad, fue el más alto representante en lo que a ingeniería social se refiere. Según sus propias tesis, este tipo de ataque para averiguar claves de acceso, contraseñas y datos sensibles de usuarios está fundamentado en cuatro pilares básicos que son:
- Todos queremos ayudar.
- El primer movimiento es siempre de confianza hacia el otro.
- No nos gusta decir que no.
- A todos nos gusta que nos alaben.
Bien es cierto que hoy día los usuarios estamos más alerta ante engañifas tales, porque vivimos mejor informados y vemos por la tele continuamente noticias de timos a través de Internet o del teléfono. Pero en la época de Mitnick, si a un empleado de una gran empresa le llamaba un hacker social haciéndose pasar por un superior (al que ni siquiera conocía) o por un compañero en apuros, el hombre soltaba por su boca contraseñas y la vida si era necesario.
Esto no quiere decir que a estas alturas de la existencia no siga habiendo gente que caiga en bulos y enredos. Y me viene a la memoria un mail, encadenado de esos, que recibí hace poco. En él se relataba una historia que venía a decir (y hablo de memoria) que una chica apurada solicitaba el móvil de otra persona en un restaurante para llamar a su marido, que debía pasar a recogerla y no había aparecido. El hombre le ofrece su móvil y la mujer, tras retirarse un poco, realiza una llamada. Pocos minutos después vuelve a pedir el teléfono porque su marido sigue sin aparecer, telefonea de nuevo y devuelve el aparato a su dueño; desaparece. Posteriormente el dueño del móvil recibe una llamada de su madre llorando y preguntado a ver si está bien. El hombre no comprende nada hasta que la madre le explica que una mujer la llamó diciéndole que su hijo estaba secuestrado y requiriendo un rescate inmediato. Además le dijo que aquello no era ninguna broma, y que como prueba estaba telefoneando desde el móvil de su hijo. Posteriormente la volvió a llamar para confirmar la recepción del rescate.
Dudo mucho que la historia sea cierta, pero podría haber sido totalmente verídica. La cantidad de correos electrónicos que llegan a nuestros buzones solicitando nuestras contraseñas de servicios de mensajería o nuestros datos bancarios es ingente, y estamos curados de espanto. Pero, aún así, se siguen produciendo timos a plena luz del día.
La ingeniería social no siempre es esencialmente delictiva, un ejemplo podría ser el de un vendedor que investiga las costumbres y aficiones de un cliente para establecer una relación de confianza o empatía y poder vender con mayor facilidad sus productos o servicios. Google, sin ir más lejos, nos espía continuamente para, según ellos, mejorar la experiencia del usuario. Pero, ¿quién no se ha encontrado un correo en su cuenta de, por decir algo, una empresa que fabrica cajas registradoras dos días después de haber realizado un búsqueda sobre ese mismo asunto? Aquí hay algo que no huele muy bien.
Los gobiernos utilizan continuamente diversidad de técnicas sociales para desviar la atención de temas inconvenientes, críticos, de escándalo, de corrupción, etcétera. Las denominadas “cortinas de humo” son técnicas de ingeniería social. Todo el mundo es capaz de mentir por algo que de verdad le importe, y cualquiera de nosotros es susceptible de caer en una trampa.
Lo más importante es dejarse llevar por la intuición y por el sentido común. Cualquiera debería saber que nuestros datos personales más confidenciales son absolutamente privados, y nadie puede solicitárnoslos por teléfono o por correo electrónico. Y que por mucho que te alaben y te den coba desde el otro lado de la línea, los altos cargos de tu empresa nunca te pedirían a ti directamente una contraseña. Además, créeme, el presidente de tu compañía no tiene una voz sensual, te lo aseguro.
Hacking urbano

Máquina expendedora
Al margen de lo que es el mundo del hacking informático, se viene desarrollando hace ya mucho tiempo una especie de variante más lúdica (y no por ello menos ilegal) que se refiere a la explotación de trucos que poseen determinados aparatos electrónicos. Y cuando me refiero a estos aparatos no pretendo hablar de videoconsolas o maquinitas similares, sino de elementos más callejeros como pueden ser una máquina de Coca-Cola, un ascensor o un surtidor de gasolina.
¿Se puede hackear un ascensor? Pozí. ¿Y con qué fin? Poyaloverás.
Todo tramánculo que disponga de circuitos electrónicos es fácilmente hackeable, y no porque se puedan explotar bugs o fallos en la programación del mismo, que también, sino porque las técnicas que se utilizan muchas veces se refieren a trucos o accesos directos que utilizan los fabricantes para testear o comprobar la máquina o para recibir determinada información de la misma. Por ejemplo, las máquinas de vending, que podemos encontrar hoy día casi en cualquier esquina (refrescos, sándwiches, café, chucherías varias, etcétera), tienen una serie de “comandos ocultos” que sólo conocen los empleados que las manejan y que permiten visualizar en sus diminutas pantallas de leds información tal como el número de unidades vendidas, los errores generados o el dinero recaudado. Estas técnicas se van poco a poco difundiendo y al final los diseñadores tienen que cambiar la máquina y hacerla menos accesible al gran público.
Pero como el movimiento se demuestra andando, vamos a ver algunos ejemplos prácticos en formato videotubo que ponen de manifiesto lo tonta que es la supuestamente alta tecnología y lo listo que puede llegar a ser el ser humano. También es posible que alguno de los siguientes vídeos sean montajes, pero se ha intentado seleccionar los más representativos y los que más credibilidad pueden proporcionar.
DISCLAIMER: Algunas de las siguientes situaciones que visualizaremos representan acciones claramente delictivas. Hombre, robar una Pepsi de un máquina puede hacer un montonazo de gracia, pero es robar y punto pelota. teknoPLOF! no se hace responsable de los comentarios ni de las actuaciones aparecidas en los vídeos, sólo hace de mero intermediario entre la información que está ahí y sus lectores.
EJEMPLO 1. El ascensor. El truco consiste en llegar de un piso a otro sin que el aparato pare en ninguna otra altura intermedia aunque alguien haya pulsado el botón desde fuera. Se realiza pulsando (y manteniendo) el botón de cerrado de puertas y el piso en cuestión. Existen otras variantes como la de pulsar el botón de cerrado de puertas y el piso al que vas durante unos segundos y luego soltar. En el ascensor de mi casa no hay botón de cerrado de puertas, sólo de apertura, pero vive Dios que me haría tanta falta como el comer, que parece que todo Dios sale de casa cuando yo le doy al botón de llamada.
EJEMPLO 2. La máquina de refrescos. Este me encanta porque actúa sobre las nuevas máquinas de refrescos que están empezándose a ver cada vez más, esas que tiene una especie de montacargas interno que sube a por la lata (o botella) y la trae hasta el agujero de salida. Consiste en (como apreciarás en el vídeo) introducir la mano para evitar que el refresco salga de la máquina. Después de un par de intentos la máquina detecta algún fallo al no poder expender la botella y te devuelve el dinero. La segunda vez dejas caer las dos botellas. Conclusión: dos Coca-Colas al precio de una.
EJEMPLO 3. Las monedas de una máquina de Coca-Cola. Esto ya es un robo prácticamente a mano armada. Dudo mucho que funcione o siga funcionando, pero todavía quedan máquinas de estas (un poco antiguas) por muchos rincones. El truco se basa en la pulsación de un código de botones (4 – 3 – 2 – 1 – 1 – 2 – 3 – 1 - 1) para terminar pulsando el retorno de moneda (manteniéndolo). Nótese cómo al principio se pulsa el mismo botón de retorno de moneda para comprobar que no hay dinero introducido.
EJEMPLO 4. El surtidor de gasolina. Este truco parece servir para obtener gasolina gratis en un surtidor de esos que tienen que activarte remotamente para poder repostar. Se basa en una combinación de bombeos cortos y largos (3 cortos – 2 largos – 1 corto – 2 largos – 3 cortos) con el gatillo de la manguera. ¡Y a echar!
EJEMPLO 5. La máquina de chicles. Sí, sí, la de toda la vida de meter la moneda y girar la manivela. Ahora también se lleva mucho este sistema en otro tipo de máquinas que expenden bolas para niños con un regalito mierdoso en su interior que no vale lo que cuesta y que hace que el niño acabe jugando más con la bola del envoltorio que con el contenido. El hack consiste en utilizar una moneda de inferior tamaño (y valor, por supuesto) para, forrándola con papel, engañar a la máquina haciendo que piense que el tamaño y grosor son los correctos. Todo un éxito de un cerebro adolescente. Si es que no tendrán otra cosa en que pensar, jesusmariayjosé.
EJEMPLO 6. La máquina de chucherías. ¡Patatas gratis! Un truco parecido al ya comentado de la máquina de refrescos. Básicamente consiste en engañar a la máquina expendedora, haciendo que crea que no ha caído el snack en cuestión, al cerrar el portón inferior en el momento preciso para, posteriormente, presionar el botón de retorno de moneda y obtener el dinero y las golosinas por la cara; sin desembolsar un mísero euro, vaya.
En fin, en el tubo podréis encontrar multitud de ejemplos más de cómo hackear prácticamente todo, desde semáforos a cerraduras de coche, pasando por todo tipo de máquinas y maquinitas electrónicas. Esto sólo ha sido un somero ejemplo de algunas técnicas más o menos elaboradas que nunca hay que poner en práctica por ser claramente delictivas. Digo, ¿no?
Y si la electrónica falla, siempre quedan las técnicas de baja tecnología como la que utiliza el elemento subversivo del siguiente vídeo. Eso sí, hay que tener el brazo largo y muy delgado.
Lo más importante es ir siempre con mucho cuidado, y no vayáis a enseñarle estos vídeos a vuestra hija o sobrinita, no le vaya a pasar esto:
Angelitos… Lo que no se les ocurra.
Inyecciones SQL (¡a que te pincho!)

Inyección SQL
El hacking ya no es lo que era en los noventa. Antes, la seguridad era mínima y los administradores de sistemas eran los mismos chupatintas que lo mismo te configuraban un proxy que te atendían en la ventanilla. Los sistemas operativos tenían más agujeros que un queso de esos con agujeros y, para más inri, las actualizaciones brillaban por su ausencia
Casi nadie tenía Internet, y los cuatro frikis que compramos un módem por aquello de chatear, nos las vimos y nos las deseamos para configurarlo y conectarlo a la Red, cortando la línea de teléfono a tus padres durante tardes interminables y escurriendo el bulto cuando llegaba la factura de Telefónica. Eso sí, la sensación de satisfacción que se te quedaba en el cuerpo cuando conseguías desenmarañar aquel entramado de siglas era indescriptible.
Nos cobraban 5.000 pesetas mensuales por la conexión, teléfono a parte, y existía algo que se llamaba Infovía y que muchos de los que lean esto ni sabrán lo que fue. Pululaban todavía las BBS, el chat se hacía desde un cliente de IRC y las páginas web daban verdadera pena.
Aparecieron los e-zines (fanzines digitales) y corrían de mail en mail como antaño sus hermanos mayores de papel de mano en mano. Descubrí SET antes de que fuera SET, cuando se llamaba Saqueadores a secas. Descubrí también 7a69, Raza Mexicana, Raregazz y otros de los que no recuerdo el nombre. Había uno muy divertido que no tenía como tema principal el hacking ni la informática (y que tampoco me acuerdo cómo se llamaba) que enseñaba desde cómo fabricar una bomba a las mejores maneras para asesinar a un gato. Aquella época era así; el destape digital.
Y entones fue cuando me empecé a aficionar al hacking, al cracking, al phreaking y al virii, que eran los cuatro pilares básicos que todo buen conocedor del underground informático debía manejar, o al menos alguno de ellos pero en plan gurú, si no eras directamente un lammer o un puto newbie.
La filosofía de los hackers de aquella época se ha perdido. El objetivo claro que se perseguía entonces era la superación personal y el ansia por adquirir los conocimientos que permitieran dominar aquella nueva tecnología que tanto futuro parecía tener. Hoy los buenos hackers son putas al servicio de gobiernos o de empresas de seguridad. Alguno de los de antes quedará por ahí, seguro, pero el espíritu ya no es el mismo, se ha desinflado.
El hacking, además, se ha vuelto complicado y peligroso. Hoy los administradores de sistemas han pasado de la ESO (algunos), los sistemas operativos son muchísimo más seguros y los usuarios están mucho más concienciados del concepto de seguridad (más o menos). Los bugs o agujeros de seguridad se resuelven y parchean en horas, y cualquier software se actualiza de manera automática prácticamente a diario.
Sin embargo, de vez en cuando, siguen apareciendo técnicas novedosas que producen un revolvimiento de tripas en el underground informático y una sudoración fría en los lobbys económicos y políticos del sistema. Algo así como un resurgir del lodo, descuellando por unos instantes. Por supuesto, al descubridor de tal o cual vulnerabilidad se le eleva a los altares del movimiento subterráneo y se le santifica a lo Kevin Mitnick.
En los últimos años a mí se me han puesto los pelos de punta en tres de ocasiones: una con la aparición del ataque NetBIOS, otra con la aparición del XSS y otra con la aparición de las inyecciones SQL. Y a estas últimas nos vamos a referir en continuación. ¿Por qué? Por nada en especial.
Para los neófitos: SQL es un lenguaje estructurado que se utiliza para realizar consultas contra bases de datos, ya sean consultas de actualización, de selección o de eliminación.
Las bases de datos cada vez son más importantes en nuestra vida. Todo está ordenado y clasificado en determinado campo de determinado registro de determinada tabla de determinada base de datos. Y, claro, en Internet, que es un espejo casi en tiempo real del mundo no digital, las bases de datos crecen como champiñones a diestro y siniestro. Cualquier página web que visitemos dispondrá de un foro, de una agenda de eventos, de un registro de usuarios, de un catálogo de productos, etcétera. Pues bien, todo eso, y mucho más, necesita de una base de datos para poder funcionar.
Una inyección SQL no es otra cosa que un ataque, debido a una vulnerabilidad corregible, a la base de datos de una aplicación en el nivel de validación. Para que me entienda todo el mundo, el nivel de validación se refiere a esos cuadraditos de texto donde yo escribo mi nombre de usuario y mi contraseña cuando accedo a una web en la que estoy registrado. En esos mismos cuadraditos dispongo yo de la posibilidad de escribir código SQL que la base de datos que haya detrás se trague e interprete y provocar un auténtico desastre.
Vamos a ver un ejemplo práctico. Imaginemos la típica página de validación, donde me piden mi nombre y mi contraseña, para entrar a comprar a una tienda virtual en la que estoy registrado. Cuando yo escribo el nombre, la contraseña y pulso el botón de aceptar, el software comprueba que los datos sean correctos. Para ello realiza un consulta a la base de datos en SQL que puede ser algo como lo siguiente:
"SELECT * FROM TablaUsuarios WHERE Nombre = '" + NombreUsuario + "' AND Contrasena = '" + ContrasenaUsuario + "';"
Esto selecciona (SELECT) todos (*) los registros de (FROM) la tabla TablaUsuarios donde (WHERE) el campo Nombre sea igual (=) a la variable NombreUsuario (su valor se asigna de lo que nosotros hallamos escrito) y (AND) el campo Contrasena sea igual a la variable ContrasenaUsuario. Si yo escribo “Jonathan” y “Tambor1900″ respectivamente en el campo de texto para nombre y contraseña, el resultado de la cadena anterior sería el siguiente:
"SELECT * FROM TablaUsuarios WHERE Nombre = 'Jonathan' AND Contrasena = 'Tambor1900';"
Ahora viene la magia. En el campo de texto para el nombre, en lugar de un nombre, voy a escribir esto: ' OR '1'='1
Y en el campo para la contraseña lo mismo, mismito. La cadena SQL que se envía a la base de datos quedaría así:
"SELECT * FROM TablaUsuarios WHERE Nombre = '' OR '1'='1' AND Contrasena = '' OR '1'='1';"
Es decir, selecciona todos los registros de la tabla TablaUsuarios donde el campo Nombre sea igual a nada o 1 sea igual a 1 y el campo Contrasena sea igual a nada o 1 igual a 1. ¡Abracadabra! Es posible que no exista un nombre o una contraseña vacía, pero siempre 1 va a ser igual a 1, por lo tanto, hasta la cocina del sitio web como si fuéramos un usuario correctamente registrado.
Vamos a hacer más pupita. Vamos a escribir en el campo del nombre lo mismo que antes y en el de la contraseña lo que esto: '; DROP TABLE TablaUsuarios
Con lo que la cadena final queda así:
"SELECT * FROM TablaUsuarios WHERE Nombre = '' OR '1'='1' AND Contrasena = ''; DROP TABLE TablaUsuarios;"
Las sentencias SQL siempre terminan en punto y coma (;) y pueden separarse entre sí por el mismo signo de puntuación. En el anterior ejemplo, comprobaría correctamente que 1 es igual a 1, como hemos comentado antes, para, después, cargarse sin miramientos la tabla TablaUsuarios (DROP TABLE TablaUsuarios).
Evidentemente el daño puede ser mayor que borrar una tabla (suponemos que el administrador tiene copias de seguridad), ya que podemos hacernos con todos los datos sensibles y privados de los usuarios del sitio, hacer compras en su nombre, acceder a sus cuentas bancarias y mil miles de cosas más.
Muchos habrán pensado ya a estas alturas que para inyectar este tipo de códigos SQL es necesario conocer el nombre de las variables (NombreUsuario y ContrasenaUsuario) y el nombre de la tabla (TablaUsuario) que el programador ha utilizado. Y efectivamente así es. Pero para conseguir estos datos podemos recurrir a la técnica de hacer “cascar” la consulta y que produzca un error. Por ejemplo, si en el nombre de usuario escribimos dos comillas simples ('') y en la contraseña cualquier cosa, la cadena SQL resultante sería la siguiente:
"SELECT * FROM TablaUsuarios WHERE Nombre = ''' AND Contrasena = 'Tambor1900';"
Aquí hay más comillas de las que el intérprete SQL de la base de datos puede reconocer, y esto devolvería un error de acceso a la base de datos. Dependiendo de qué servidor web aloje esta página y cómo esté configurado, es más que posible que dicho error aparezca en pantalla (en formato HTML) especificando concretamente dónde y por qué se ha producido, y describiéndonos a las mil maravillas la cadena de conexión y todas sus variables, nombres de campos y tablas. Un placer. Gracias mil.
Una vez expuesta la vulnerabilidad y cómo explotarla, es de caballeros explicar también cómo corregir este defecto. He de decir que muchísimas páginas web en Internet no tienen este tema solucionado; allá ellos. Sólo es necesario visitar sitios web y probar (a base de comillas aquí, comillas allí) hasta que encontremos uno vulnerable. Ya digo que los hay por doquier.
Existen varios métodos para solucionar este problema, pero el más sencillo y eficaz es el que consiste en evitar la introducción de comillas simples en las cajas de texto sustituyéndolas por espacios, por ejemplo. He aquí una forma de hacerlo en VBScript en una página ASP:
CadenaSQL = "SELECT * FROM TablaUsuarios WHERE Nombre = '" & Replace(NombreUsuario, "'", " ") & "' AND Contrasena='" & Replace(ContrasenaUsuario, "'", " ") & "'"
O en JavaScript en una página PHP:
CadenaSQL = SELECT * FROM TablaUsuarios WHERE Nombre = '" & NombreUsuario.replace( "'", " "); & "' AND Contrasena='" & ContrasenaUsuario.replace("'", " "); & "'"
Otro factor importante en cuanto a la seguridad es limitar al máximo los permisos del usuario que ejecuta estas sentencias para evitar posibles problemas. Por ejemplo utilizando un usuario distinto para las sentencias SELECT, DELETE o UPDATE y asegurándonos de que cada ejecución de una sentencia ejecute una sentencia del tipo permitido.
Una solución definitiva sería trabajar con procedimientos almacenados. El modo en el que se pasan los parámetros a los procedimientos almacenados evita que la inyección SQL pueda ser usada. También deberíamos validar los datos que introduce el usuario teniendo en cuenta, por ejemplo, la longitud de los campos y el tipo de datos aceptados. Si programamos en ASP.NET, además, utilizaremos siempre que sea posible las clases de System.Web.Security.FormsAuthentication para que los usuarios entren en nuestras aplicaciones web.
Es tan jugoso explotar una vulnerabilidad como conseguir eliminarla. Los hackers del pasado son los expertos en seguridad del presente. Pero, por favor, no se me vendan a las multinacionales, que no queda muy underground que digamos.











