Mostrando las entradas con la etiqueta HugoGonzalez. Mostrar todas las entradas
Mostrando las entradas con la etiqueta HugoGonzalez. Mostrar todas las entradas

28 octubre 2011

Laboratorio de Análisis de Malware

Por: M.C. Hugo González

Durante el verano de la ciencia 2011, se trabajó en desarrollar un sistema automatizado para análisis de comportamiento de malware, el trabajo fue desarrollado en conjunto con el alumno del Instituto Tecnológico Superior de San Juan del Rio, Leonardo Valdés Arteaga.

Este tipo de análisis consiste en ejecutar una pieza de malware en un ambiente controlado, registrando todos los cambios generados en el sistema. Estos cambios incluyen la creación de archivos, modificación del registro de windows, solicitudes a internet, entre otros.

Para preparar el ambiente de ejecución controlado se utilizo Cuckoo Sandbox[1] un sistema de código fuente abierto, que consta de una maquina virtual con un sistema operativo Windows, donde se ejecuta el código malicioso o malware, y un conjunto de aplicaciones escritas en python para facilitar la creación de la lista de malware a ejecutar, y almacenar la información en una base de datos. Así como un sistema para generar reportes de la actividad de dicho malware.

Primero se instaló Linux Ubuntu en los dos equipos de trabajo.

El segundo paso consistió en la instalación y puesta a punto de este sistema, donde se detectó la falta de algunos detalles en la documentación. Una vez que estuvo listo, este sistema,  y documentados los detalles de configuración se analizaron varias muestras de malware.

Los resultados del sandbox son bastante extensos y muy técnicos, no son fáciles de leer, así que luego se desarrolló un sistema para interpretar estos archivos y simplificar el resultado final en una escala de 5 de que tan peligroso o sospechoso puede resultar un archivo enviado.

Se implementaron dos servicios en el sistema, uno que monitorean un directorio específico y al encontrar un archivo lo pone en la lista para ser ejecutado por el sandbox. El otro que monitorea los resultados del sandbox para procesarlos y obtener un resultado simplificado.

Se finalizó el proceso con el desarrollo de un portal web para que los usuarios puedan mandar sus archivos sospechosos y obtener un resultado de 1 a 5 de que tan sospechoso o peligroso es su archivo.

El sistema todavía esta en pruebas y se espera que esté operando dentro de la Universidad Politécnica de San Luis Potosí en un corto tiempo.

Este sistema es de gran ayuda también para los administradores al tener documentados todos los cambios que produce un malware en el sistema, y saber si es posible recuperarlo o si es mejor volver a instalar el sistema operativo.

Si requieren más información, una demostración del sistema o documentación pueden contactarme para solicitarla.

[1] http://www.cuckoobox.org/

07 abril 2011

¿Son seguros los PDF's?

Por: MC Hugo Gonzalez

En esta ocasión trataré un tema en el que tengo un proyecto para el Verano de la Ciencia y que me ha resultado bastante atractivo. Se trata de un vector de ataque para comprometer equipos de cómputo y son los archivos PDF.

Algunas veces se cree que solo los archivos ejecutables pueden ser peligrosos, luego vinieron los virus de macro, como el "I love you" o el "Melissa", en estos últimos casos los programas incluyen código malicioso directamente, que ejecuta acciones específicas sobre el sistema aprovechandose del mismo motor del programa para verlos.

En otros casos, archivos que se consideran no peligrosos, pueden contener piezas de contenido malicioso que se aprovechen no del motor de la aplicación, sino de errores de programación de la misma aplicación para ejecutar código arbitrario en el sistema. Algunos de estos casos incluyen videos, páginas web, documentos de oficina ( Hojas de Cálculo, Presentaciones), imágenes, animaciones y un largo etc. De manera general una vez que "explotan" la vulnerabilidad en el sistema que los reproduce o interpreta, descargan un archivo de internet, desarman el antivirus, crean nuevos usuarios, se conectan a casa o realizan alguna otra actividad que permite al atacante controlar el sistema "explotado", en caso extremo eliminan y destruyen todo el sistema, aunque eso pasa lo menos por los mayores beneficios económicos que se obtienen a controlar miles de equipos conectados a Internet.

El caso de los PDF maliciosos se encuentra entre los dos anteriores, hay ocasiones que aprovechan fallas de programación para "explotar" algún lector en particular, como adobe o foxit, pero también se dá el caso de que se aprovechan de las capacidades de reproducir javascript de la especificación de PDF y confunden e instan a los reproductores a realizar diversas acciones maliciosas para comprometer el equipo, como ejemplo a descargar y ejecutar algún archivo de la web, a crear nuevos objetos en el sistema, o a generar un archivo que afecte a otro programa en el sistema.

Actualmente es difícil detectar los archivos PDF's maliciosos, ya que no todos son reconocidos por los antivirus, ya que generan codigo "mutante" que cambia de archivo en archivo y que aunque realiza la misma función, no se parece.

Para el análisis de los PDF's así como de malware, una metodología sugiere proceder realizando primero un análisis estático y luego en análisis dinámico del archivo, esto tiene que ver con los costos computacionales más altos del análisis dinámico.

Análisis dinámico:
1a. fase. Se ejecuta (se abre) el archivo PDF en un sistema "limpio" o recién instalado, se espera cierto tiempo y se analizan los cambios que se generaron, por ejemplo si se crearon nuevos archivos, servicios o si se descargaron archivos de Internet.
2a. fase. Se se generaron algunos de estos cambios, en una maquina "limpia" y con la ayuda de un depurador o "debugger" se ejecuta otra vez el PDF, siguiendo paso a paso para analizar con detalle las acciones que ejecuta y detectar el comportamiento malicioso.

Análisis estático:
1a. fase. Lo pasas por un antivirus para saber si lo detecta como malicioso.
2a. fase. Se analiza el contenido del archivo, la especificación de PDF nos habla de objetos que forman el archivo, que están contenidos en un documento de texto plano (puedes usar tu editor de textos favorito para ver el contenido del PDF). Estos objetos pueden estar codificados con diferentes métodos, si son textos, imágenes, código Javascript, etc. Entonces lo primero que habría que hacer es decodificarlos para poder seguir con el análisis, y buscar el flujo de información para interpretar el PDF.

Aparentemente es más complejo el análisis dinámico, pero este es más fácil de automatizar y es más rápido para realizarlo en un equpo de cómputo que el análisis dinámico. Además que se puede realizar con menos recursos de RAM y Disco Duro.

Actualmente estoy trabajando en un pre-analizador, que de manera automática asigne una calificación de que tan sospechoso es un archivo PDF para ser malicioso. Este se basa en lo siguiente:

1. Si incluye urls activas dentro del archivo.
2. Si tiene javascript ofuscado.
3. Si tiene javascript plano y funciones sospechosas.
4. Si tiene imagenes TIFF, y estas inclueyn urls dentro.
5. Si contiene un shellcode .

Algunas de estas tareas pueden resultar triviales, y otras no tanto, pero al lograr automatizarlas podremos identificar cuales de los PDF's merecen ser investigados con más detalle con análisis estático, y luego cuales deben ser pasados al análisis dinámico.

Hasta la proxima, y espero tener alumnos para completen este trabajo durante el verano.

25 febrero 2011

Editorial, Numero4

Hola a tod@ nuestros lectores, comenzando un año más, un nuevo semestre y tal vez nuevos proyectos o nuevas etapas de nuestra vida, les damos la bienvenida a una nueva entrega de "El Apunte del Byte", boletín de divulgación de la Academia de Tecnologías de la Información y Telemática de la Universidad Politécnica de San Luis Potosí.

En este número contamos con una nueva colaboradora, la Mtra. Liliana Gámez, a la cual damos la bienvenida y esperamos sus contribuciones regulares.

Es importante mencinoar que este año celebramos el aniversario número 10 de la fundación de nuestra casa de estudios, e invitamos a todos los integrantes de la comunidad a unirse a los festejos que tendremos durante el transcurso del año, en el ámbito académico, cultural y deportivo.

Y en el contenido de este número contamos con:

Análisis Forense a un Correo Electrónico

por MC Hugo Gonzalez

¿Alguna vez han querido saber de donde les llega un correo? No precisamente quién se los manda, que esa es otra historia, pero al menos saber donde se originó ese pedazo de información. A continuación voy a presentar un breve caso donde me llegó un correo, de supuestamente una alumna, pero el tema era ... ejem... relacionado con paginas de contenido para adultos e intercambios se... ejem, bueno para descartar un posible amor platónico realicé una breve investigación para estar cuasi-seguro que era un correo falso, descubrir que fue generado en Argentina y nada que ver con mi alumna; solo que su cuenta posiblemente está comprometida, pero esa, esa es otra historia.

El 23 de febrero por la mañana recibo un correo de "Elizabeth" donde mi invita a unirme al "FB del sexo", y me da una liga donde registrarme. De entrada me parece un correo de esos que se envían masivamente para distribuir y propagar malware. Aunque una rápida visita con navegador "lynx", que es solo texto y muy básico para sondear la situación me muestra que en efecto es un sistema de registro para amigos "sexosos" ...

El correo de origina de "amiga_29@hotmail.com" y me llega a mi bandeja de gmail, bingo, Hotmail como proveedor de cuentas de correo incluye un encabezado en sus correos que incluye la ip donde se origina el correo, no importa si lo utilizan por web o por otro medio. Para verlo, solo tenemos que buscar en nuestro cliente de correo para que nos muestre todos los encabezados, en el caso de gmail, en el combo desplegable en la parte superior del correo, podemos buscar mostrar original.

En la parte superior vienen todas las transacciones entre los distintos servidores de correo, pero por lo pronto nos interesan los siguientes encabezados.


X-Originating-IP: [190.188.63.182]
X-Originating-Email: [amiga_29@hotmail.com]


Que son los que nos indican de que cuenta de correo se generó, y que IP originó el correo. aunque estos número tal vez no te digan nada, puedes utilizar algunas herramientas del sistema para buscar más información, por ejemplo usar nslookup y la dirección ip.


nslookup 190.188.63.182


de entre las respuestas, esta es la nos interesa, que nombre está asociado a esa máquina, y por el puro nombre podemos suponer que es un servicio de Banda Ancha, ofrecido por prima.net.ar y que está en Argentina.


Non-authoritative answer:
182.63.188.190.in-addr.arpa name = 182-63-188-190.cab.prima.net.ar.


para corroborar esta intuición, o en caso de que nslookup no regresa información, podemos utilizar whois, esta herramienta viene por defecto en casi todos los linux, o pueden buscar un servicio en línea para consultarla.
El resultado es un poco extenso, pero con eso pueden verificar que el rango de direcciones donde ese encuntra esta en particular está asignada a Argentina.

También podemos intentar geoposicionarla, es decir buscar en un mapa donde está registrada la dirección, es decir que latitud y longitud tiene, aunque es probable que esta no sea completamente correcta, al menos nos puede dar una idea de por donde está. [ Como comentario, alguna vez en algun sito les ha aparecido, te conectas de GDL, MEX, o SLP ] Para esto existen diferentes demos de servicios en línea que te dan los coordenadas, o incluso te muestran el mapa. Ya con las coordenadas vas a tu software de mapas preferido y puedes ver un aproximado de la localización.




Entonces, este correo se origino en Argentina, incluso si ponemos atención en otro encabezado :

Received: from [192.168.1.1] ([190.188.63.182]) by BLU0-SMTP133.blu0.hotmail.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675);

Podemos saber que está utilizando una red local, y que está usando un cliente de correo de MS, tal vez el sistema está comprometido. Para asegurar esto sería necesario realizar un análisis forense de dicho equipo.

Otro uso que podriamos dar es intentar localizar el paradero de alguien que me mando un mensaje, un conocido, amigo etc. puedo buscar el encabezado:

Received: from [192.168.1.146] ([201.152.165.XXX])

lo geoposiciono, y luego utilizo los mapas para ver su casa ...

Para otros fines diferentes al análisis forense, esto asusta, ¿o no?

Afortunadamente o desafortunadamente, depende desde donde lo veamos, hay servicios como gmail que si utilizas la interface web no generan tu dirección ip por políticas de privacidad, pero ante una petición judicial SI proporciona esta información. Claro que si utilizas un cliente de correo para enviar tus mensajes, gmail también añade el encabezado desde que IP se recibió.

Concluyendo, es factible tener una idea de donde se originan los correos electrónicos, algunos servicios solo dan esta información ante una petición judicial, pero si los dán. Así que eviten hacer "cosas", ya que se puede rastrear, y si esas "cosas" se las hacen a ustedes también se puede rastrear.

Para asesoría o consultoria no duden en contactarme ...

03 noviembre 2010

Editorial

Bienvenidos a este nuevo número de El Apunte del Byte, medio de difusión sobre temas de actualidad analizados desde la perspectiva de nuestros profesores que integran la academia de tecnologías de información y telemática de la Universidad Politécnica de San Luis Potosí. Hemos tenido mucha actividad reciente, congresos, presentaciones y visitas. Pronto celebraremos el Congreso Mexicano de Interacción Humano-Computadora en las instalaciones de esta Universidad. Así que reconocemos el esfuerzo de nuestros colaboradores y enviamos felicitaciones y nuestros mejores deseos para todos ellos.

También damos la bienvenida a Victor Fernández que esperamos se integre como colaborador regular, y que en esta oportunidad nos habla de Java, Google y Servicios en la nube.

También invitamos a nuestros lectores a mandar comentarios, sugerencias y aportaciones a esta publicación.

Esperamos que disfruten este nueva entrega !!

En este número:
Para Javeros ... GAE para Java. Por MC Victor Fernandez

La seguridad en Internet es responsabilidad de todos. Por MC Rafael LLamas

Las Ciencias son como juegos muy interesantes. Parte II. Por Dr Francisco Ordaz

Divulgación científica y tecnológica en la UPSLP. Por Dr Jorge Simón

Los juegos que te ayudan a incrementar tus habilidades. Por MC Hugo González

Los juegos que te ayudan a incrementar tus habilidades

por: MC Hugo González


Hola a todos los lectores, en esta ocasión no trataré temas tan técnicos como en las anteriores, sino que quiero tocar un tema que en lo personal me interesa y que considero que a más de uno le llamará también la atención.

Me voy a referir a los “retos” o “concursos” que abundan en Internet, y que sirven para medir tus habilidades, para incrementarlas y sobre todo para pasar un buen rato, con especial énfasis en los retos de seguridad informática.

Si eres de esas personas que te gusta resolver rompecabezas, de los que incitan a terminar las cosas con fraces como “A poco no puedes?” y te gusta aprender haciendo, estos retos son especiales para tí. A través de un concurso de programación, o un reto forense, puedes medir tu habilidad, incrementarla y aprender mucho mas, sobre todo porque el reto tiene una lógica y tiene pistas sobre las cuales trabajar. Durante la última semana de octubre asistí al BugCon 2010, un evento relacionado con seguridad informática, y ahí tenían 2 retos interesantes. Uno llamado Break the captcha, organizado por Bonsai, donde tienes 10 captchas ( para verificar si eres humano o un bot de software), y el objetivo es programar algo para resolver 5000 veces las captchas. Fué un reto muy interesante, donde por falta de tiempo, no terminamos de romper las 10, pero si logramos romper 5 de ellas, y con eso fue suficiente para ganarlo, y tuvimos algunos libros y alfajores argentinos.

Este reto aparte de llevarnos a entender como funcionan los captchas o como pueden ser implementados, también ayudó a refinar cuestiones de programación, manejo de sesiones desde el cliente, manejo de encabezados y otras cosas, y a mi compañero de equipo (que va en 3er sem) a programar en python y a utilizar algunas herramientas para analizar los encabezados de las paginas web.

Durante este evento también hubo otro “juego” llamado certificación Mendozaaa, [http://mendozaaaa.com] de los que fueron creo que nadie entregó resultados, espero la siguiente oportunidad si participar en ella :) Básicamente es una maquina virtual que no funciona y que hay que reparar y exponer ante un “jurado” el proceso de recuperación.

En estas conferencias hablé de algunos retos forenses, y de como podría ser una aproximación para resolverlos, incluyendo conocimientos básicos y herramientas utilizadas.
Utilicé como base el puzzle #6 de http://forensicscontest.com/ el cual logré resolver de una manera no muy compleja, pero las fechas en entrega ya se habían terminado. En este sitio se trata de casos donde debes realizar análisis forense a una captura de tráfico para poder responder algunas preguntas, y estas mismas preguntas te dan pistas y te van guiando. Debes tener conocimiento en redes, especialmente en TCP/IP.
Otro punto interesante es que te preguntan algunas cosas que no se pueden obtener de manera automática con herramientas, así que debes hacer uso de todas tus habilidades para resolverlo. Los retos anteriores están disponibles y también valen la pena para resolverlos. Luego podrías comparar tus resultados con los publicados.

Otra fuente de retos interesantes son los proporcionados por The Honeynet Project, este año ya se han publicado 6, e incluso el último tienen hasta finales de noviembre para enviar sus resultados. Estos retos van desde fácil hasta complejo y también te ayudan a desarrollar tus habilidades y a saber más. [ http://honeynet.org/challenges ].

No puedo dejar de mencionar el famoso concurso de programación de Google, que año con año pone a prueba a gran cantidad de programadores de todo el mundo para ver al final quien puede resolver todos sus problemas y acertijos. Para este concurso, se necesita más que solo programación, también es necesario tener conocimientos y habilidades matemáticas y físicas. Pueden ver los problemas y utilizar el sistema para enviar sus soluciones y practicar para preparase para el del siguiente año en http://code.google.com/codejam

También hay otro para inteligencia artificial, aunque no está organizado directamente por google, es uno de los principales patrocinadores, este año se trata de programar un bot para que conquiste el universo en un juego llamado Planet Wars / Galcon. Este lo pueden visitar en http://ai-contest.com/

Así como estos hay muchos otros retos y concursos que se puede resolver a través de Internet, y aparte de proporcionarte un buen rato, te ayudan a aprender más sobre seguridad, programación, redes etc.

Espero que lo hayan disfrutado y si les interesa pongan comentarios para profundizar más en alguno de ellos.

01 octubre 2010

Introducción a JSON, por Hugo González


Ampliando la entrega anterior, ahora escribiré JSON (JavasCript Object Notation). Este es un formato ligero de intercambio de datos. Es muy simple de leer por los humanos y muy simple de generar e interpretar para las máquinas.

JSON es un formato de texto independiente del lenguaje en que se use, pero utiliza convenciones que son ampliamente conocidos por los programdores de C, C#, Java, JavaScript, Perl, Python y muchos otros, y esto hace que sea un lenguaje ideal para el intercambio de datos.

JSON está constituido por 2 estructuras:
  1. Una colección de pares nombre / valor. Conocido en algunos lenguajes como objeto, registro, estructura, diccionario o arreglo asociativo.
  2. Una lista ordenada de valores. Esto se implementa con arreglos, vectores o listas.

Estas estructuras on universales, y virtualmente todos los lenguajes de programación las soportan.

Actualmente existen MUCHAS librerias para distintos lenguajes de programación que soportan JSON, logrando que sea mucho más fácil utilizarlo en el intercambio de información.

El siguiente ejemplo muestra como se expresaria en JSON un objeto menu, que contiene un identificador y otros objetos relacionados al el:


{"menu":
{
"id": "archivo",
"value": "Archivo",
"popup": {
"menuitem":
[
{"value": "Nuevo", "onclick": "CreateNewDoc()"},
{"value": "Abrir", "onclick": "OpenDoc()"},
{"value": "Cerrar", "onclick": "CloseDoc()"}
]
}
}
}


Estos datos podrían utilizarse para identificar como ha de funcionar un menu en una aplicación, o bien, representar el comportamiento de un componente.

JSON se utiliza ampliamente en bases de datos NOsql, como couchdb o mongodb, y en API's web como la de bit.ly. Se utiliza en aplicaciones cliente/servidor o en base de datos distribuidas, de una forma ligera permite el intercambio de datos entre diferentes lenguajes e incluso plataformas.

Para concluir un ejemplo de uso en bit.ly:

Bit.ly es un servicio de "acortamiento" de urls, y lo puedes utilizar en la web, o desde alguna aplicación usando su API pública, más información en: http://code.google.com/p/bitly-api/

Esta API es un servicio web REStfull (será el tema de la siguiente entrega), que se puede mandar llamar con una petición web, y el resultado lo entrega en formato json.

Petición para acortar:
http://api.bit.ly/v3/shorten?login=upslpdemo&apiKey=R_b9fe9e8d65397fc3754931ac5dee2c83&longUrl=http%3A%2F%2Fwww.upslp.edu.mx%2F&format=json

la respuesta en json:

{ "status_code": 200, "status_txt": "OK", "data": { "long_url": "http:\/\/www.upslp.edu.mx\/", "url": "http:\/\/bit.ly\/am1pQi", "hash": "am1pQi", "global_hash": "dxGiih", "new_hash": 1 } }

Esta nos dice que fue exitosa la petición, y nos regresa el url acortado http://bit.ly/am1pQi


Esta petición se puede realizar desde el navegador directamente, una aplicación de escritorio o desde un sitio web utilizando AJAX por ejemplo; y luego interpretar los resultados del "campo" url.

Nota: el usuario y la apiKey son válidas y fueron creadas exclusivamente para esta entrega, luego de algunas semanas posiblemente se desactiven.


Sigan estudiando y hasta la próxima.

02 abril 2010

Breve introducción a CouchDB, por Hugo González

CouchDB es un motor de base de datos basado en documentos, esto es que no utiliza la forma tradicional de las bases de datos relacionales que son las tablas. CouchDB sigue la filosofía de la vida real, es decir que toda la información relacionada se almacena en el mismo documento. Por ejemplo la información de una persona por lo general la almacenamos en la misma hoja de libreta, y no almacenamos sus datos separados en diferentes hojas. Cada documento se almacena en su propia estructura, y no es necesario que la información almacenada tenga la misma estructura. Esto rompe completamente con el paradigma de la BD relacionales, donde necesitas la misma estructura para almacenar la información.

Your browser may not support display of this image.

Para lograr su filosofía CouchDB utiliza JSON (del que hablaré en otra entrega) para poder manejar los documentos y objetos almacenados y transformarlos para ser accesibles en cualquier otro lenguaje.

Entre otras ventajas CouchDB es una base de datos distribuida y tolerante a fallos, libre de esquemas, con replicas incrementales, consultable (query-able) e indexable, además utiliza tecnología web y un Api RESTful, permitiendo administrar la base de datos y la información con un cliente web.

El lema de CouchDB es: relax,está desarrollada en el lenguaje earlang .

Cabe aclarar que CouchDB no es una base orientada a objetos, no es una base de datos relacional ni un remplazo para ellas. Pero en un futuro cercano estoy seguro que será muy usada, sobre todo en el web.

Lo mejor de todo es que software libre!!!