lunes, 22 de septiembre de 2008

El pescador y el granjero son ingenieros: Phishing & Pharming

El pescador (Phishing)

El pescador preparó la carnada. Definitivamente la página Web de Bancotorro® que había puesto en aquél servidor lucía perfecta: nadie notaría la diferencia con la original del banco. Por cierto, ¡qué fácil resultó apropiarse del servidor Web!, gracias a ese administrador que hizo el favor involuntario de dejar instaladas las extensiones de FrontPage. La página tiene todo para que parezca la original excepto, claro, el nombre de dominio de la dirección del sitio pero, ¿quién se fija en los nombres de dominio? Además se sacó un diez con ese certificado falso de SSL: así el sitio hasta parece seguro, con el https, el candadito amarillo y todo, pero con una firma digital falsa (a casi nadie le importa, eso es lo bonito de este engaño). El certificado no le costó ni un centavo y el emisor le dio la oportunidad de llenar en línea la solicitud y recibir el certificado a nombre de Bancotorro® directamente en su correo (bueno, ni siquiera es su correo, sino uno falso), para prueba por 60 días, tiempo más que suficiente para una buena pesca.

El pescador se dispuso a lanzar el anzuelo. Esa lista de direcciones de correo que consiguió de un conocido spammer era oro molido: cientos y cientos de direcciones de correo de fanáticos de las cadenas y los powerpoints motivacionales, registrantes incautos de servicios gratuítos que nunca funcionaron, y algunas (muchas) víctimas inocentes cuyo único error fue ser un contacto de mensajería instantánea de alguien que un día sintióse perdedor y quiso ver quién lo había borrado-del-messenger para así terminar de aniquilar su autoestima. "¡Qué bueno que todavía hay almas generosas -pensaba el pescador, mientras sonreía sarcásticamente- que creen que alguien va a donar un centavo para ayudar a los niños enfermos por cada mail que envíen... como si fuera posible saber que lo enviaron!".

El pescador agitó la caña de pescar con maestría y lanzó el anzuelo: en un instante un mensaje de correo, supuestamente del banco, solicitando hacer clic en un hipervínculo para actualizar los datos y evitar la suspensión de la cuenta, fue enviado a cientos de buzones de e-mail. "Si no fuera por los filtros bayesianos -pensó el pescador- la pesca sería mucho mejor". No obstante su trabajo rindió fruto: en pocos minutos el falso sitio Web de Bancotorro®, la carnada, logró capturar algunas decenas de nombres de usuario, contraseñas y claves dinámicas, mientras los redirigía a la página real, para evitar sospechas (de bancotorro.com a bancorroto.com, ¿alguien nota la diferencia? Ah, favor de no dar clic en esos hipervínculos, por favor). De ahí sólo es cuestión de minutos para completar la fechoría, pues la clave dinámica es vigente muy poco tiempo, y si alguien se da cuenta del engaño podría retrasarlo un poco (lo bueno para él es que Bancotorro® no le vuelve a pedir la clave dinámica para las transacciones). La cárcel no lo asusta, pues el servidor-víctima resultó estar en un país de aquéllos en los que la legislación para cibercrímenes no existe (lo que pasó es que, como los legisladores de aquél país no entendían nadita de seguridad informática, prefirieron seguir chateando y subiendo fotos a sus féisbucs, en lugar de aprobar la ley contra cibercrímenes); y para cerrar el ciclo de impunidad, el mensaje-carnada de correo lo estaba enviando ni más ni menos que desde un servidor SMTP que se encontró, desnudito el pobre y con relay habilitado, en la DMZ de una conocida empresa que brinda servicios ni más ni menos que de seguridad informática. Qué irónico.

Fue una buena pesca, no se podía quejar: en pocos minutos logró hacerse de dinero fácil, transfiriendo de una cuenta a otra, vaciando la del ingenuo, llenando la suya propia. Mientras lo hacía, recordó cuando furtivamente instalaba keyloggers en las computadoras de los ciber-cafés, de los hoteles y, por supuesto, de la Universidad donde estudiaba (el laboratorio de cómputo era un paraíso: la anarquía total), y con ellos podía recibir cómodamente en un buzón de correo todo lo que la gente tecleaba. Volvió a sonreir: "de las cosas que se entera uno".

Sin embargo le preocupaba una cosa. Cada vez eran menos los que mordían el anzuelo, con eso de las campañas de los bancos y uno que otro blogger que escribía consejos sobre seguridad informática. La gente ya no es como antes, ahora ponen más atención en darse cuenta a dónde los envía un hipervínculo. Pero eso no le quita el sueño, pues desde que conoció al granjero, alguien con sus mismas inclinaciones delictivas, pero con una técnica que era el complemento perfecto para sus operaciones, cobró nuevos ánimos. Su nuevo socio era su salvación.

El granjero (Pharming)

El granjero disfrutaba de una tranquilidad envidiable. Su trabajo consistía en conseguir que, cuando alguien quisiera entrar, por ejemplo, al sitio de Bancotorro®, fuera redirigido hacia el sitio falso que el pescador había preparado para obtener las credenciales del usuario. Aunque su trabajo suena sencillo, en realidad tiene su complejidad: primero debe encontrar servidores DNS que puedan ser fácilmente engañados (envenenados) e integrados a su granja, de tal manera que cuando alguien pregunte por el sitio de Bancotorro®, el DNS envenenado lo reenvíe hacia el sitio falso. De no haber sido por Kaminsky podría haber perfeccionado la técnica aún más, pero por fortuna para él aún hay muchos que no han instalado parches a sus clientes y servidores DNS.

El granjero hace todo esto con regularidad, pero hay algo que le gusta más todavía: saltarse las trancas y modificar el archivo de hosts de una PC. De esta manera no hay necesidad de usar DNS, pues la misma computadora engañada dirige hacia el sitio falso, con una simple línea agregada al archivo de hosts, y sin tener que cambiar la dirección en la barra de dirección del navegador, haciéndole creer al navegante que está entrando en el sitio correcto. Esto lo disfruta más porque requiere ingenio engañar a un usuario de Internet y convencerlo de ejecutar un programa en su computadora aunque, pensándolo bien, no requiere tanto ingenio: puede aprovecharse del sentimentalismo, y enviarle al inapercibido navegante una tarjeta de felicitación... pero, ¿y si no es su cumpleaños?, ¡no importa! la curiosidad lo hará abrirla de cualquier manera. No necesita más, pues habiendo incrustado el código letal en esa supuesta tarjetita de felicitación habrá logrado su objetivo. "¡Qué bueno que aún hay usuarios que trabajan usando la cuenta de administrador!" -murmuró.

¡Qué par! Juntos, el pescador y el granjero, son imparables. Bueno, tal vez no tanto. Quizá algún día ya no puedan usar las mismas técnicas, o quizá algún día el administrador de seguridad de Bancotorro® se dé cuenta de que la clave dinámica o token debe ser dinámica no sólo para el ingreso, sino también para cada transacción, y se les cierre esa mina, pero por lo pronto están ahorrando y guardando su dinero debajo del colchón (es que no confían en los bancos, y menos en Bancotorro®). Ah, y por cierto, están felices porque ya no son sólamente un pescador y un granjero... ahora les dicen ingenieros... ingenieros sociales.

:wq!

lunes, 15 de septiembre de 2008

Java para todos

La semana pasada estuve en el Instituto Tecnológico Superior de Poza Rica, en Veracruz, por una invitación que me hicieron para participar como jurado en la competencia local de programación de ACM. El lenguaje de programación que usaron para el concurso fue Java y, sobra decirlo, yo estaba como Glassfish en el agua. La competencia fue muy interesante, y me tocó revisar los programas que hicieron los muchachos, estudiantes de Ingeniería en Sistemas Computacionales. La jornada la terminé dándoles una serie de recomendaciones para mejorar su nivel de programación y resolución de problemas; espero sinceramente que hagan un buen papel en la siguiente competencia. Gracias al ITSPR por la invitación.

Una de las grandes cualidades del lenguaje de programación Java es su simplicidad. Una vez entendidos los conceptos de Orientación a Objetos, prácticamente es posible desarrollar cualquier programa, y para cualquier plataforma. Aunque esta simplicidad ha sido duramente criticada por muchos, en mi opinión Java sigue siendo un lenguaje de programación muy poderoso. Hay que admitir que un error muy grande en algunas Universidades es haber quitado de sus planes de estudio las materias relacionadas con análisis de algoritmos y estructuras de datos (con su correspondiente terapia sobre aritmética de apuntadores, claro) que, tradicionalmente se han enseñando en lenguaje C, y reemplazado completamente por materias relacionadas con el lenguaje Java. Yo he sido instructor certificado de Sun Microsystems, Inc., dando cursos de certificación en Java Programming desde el 2000, y mi opinión es que, aunque es importante aprender la sintaxis de los lenguajes de programación, no deben descuidarse los fundamentos. Incluso en la actualidad muy pocos saben hacer los tradicionales diagramas de flujo, mucho menos los diagramas en UML. Por eso insisto en la importancia de la formación de verdaderos programadores que sepan resolver problemas, no sólo tecleadores de código.

Pero Java sigue siendo una excelente opción tanto para el que comienza a programar como para el experimentado que necesita desarrollar aplicaciones robustas, escalables, multiplataforma y con una curva logarítimica de aprendizaje más suave (en razón de tiempo/esfuerzo). Para los que quieren comenzar con Java (no importa la edad), les recomiendo visitar la sección de Young Developers y Tutorials en java.sun.com, donde encontrarán herramientas y otros recursos para comenzar a programar en Java. No se desanimen si leyeron o escucharon a alguien decir que sólo los verdaderos programadores programan en C... no es cierto, en realidad los verdaderos programadores programan en código máquina... ;-)

Y para aquellos interesados en ganarse un dinero extra y mejorar su reputación como programadores, les animo a entrar a concursos y competencias como la JavaCup, que es un concurso que consiste en un torneo de fútbol virtual, basado en eliminatorias, donde cada equipo es una clase Java que implementa la estrategia del mismo, apoyándose en un framework creado para tal efecto. Para participar sólo tienes que implementar tu equipo (una clase Java). Toda competencia es buena: es una alternativa para adquirir buena experiencia, y posiblemente algún premio, y si no ganas, acéptalo con humildad y no hagas escándalo: toma la experiencia e inscríbete al siguiente concurso.

En fin, Java es para todos y está en todas partes: Java está en infinidad de computadoras de dispositivos electrónicos y vehículos (incluyendo el Mars Rover de la NASA, en Marte); gran cantidad de aplicaciones en Internet son interactivas gracias a Java, las transacciones comerciales y muchos servicios de administración de identidades son seguros gracias a tecnologías como JavaCard,y la tecnología multimedios se ha visto enormemente beneficiada por las cualidades gráficas de Java, sin olvidar a los juegos para múltiples jugadores simultáneos en teléfonos celulares... la tecnología Java está en todas partes, Java es para todos.

System.exit(0);

:wq!