30 abril 2013

Extensión de Chrome para análisis online de malware con UrlQuery


La gente de AlienVault Labs ha creado una extensión para el navegador Chrome que facilita la tarea de análisis online de malware en URLs mediante uno de los servicios más importantes que existen hoy en día: UrlQuery.

Este servicio es uno de los muchos que sirven, por ejemplo, como fuente de información sobre la reputación de páginas web dentro de VirusTotal (si, además de binarios, también permite el análisis de URLs):

Página principal de UrlQuery

UrlQuery como fuente de información para el análisis de URLs de VirusTotal

Volviendo a la extensión, su funcionamiento es muy simple. La extensión permite una pequeña configuración para indicar (emulando a la página original) el User Agent con el que realizar las peticiones, indicar una URL de referencia (Referrer), especificar versiones tanto de complementos de Adobe y Java que cargar como plugins y así ver como reaccionaría la página frente a este escenario:

Opciones para la extensión UrlQuery de Chrome
Hasta ahora, cada vez que quisiésemos analizar una URL para comprobar si es maliciosa o no, tendríamos que copiar y pegar dicho enlace y realizar la búsqueda dentro del servicio UrlQuery.net desde su buscador principal. Pues bien, gracias a la extensión de AlienVault Labs, con un simple clic con el botón derecho del ratón, tendremos una nueva opción en el menú contextual para realizar la petición directamente sobre UrlQuery. 

Acceso a funcionalidad dentro del menú contextual de Google Chrome

Procesamiento de la petición de análisis de una determinada URL mediante UrlQuery

Una vez finalizado el procesamiento y análisis de este enlace, nos mostrará el informe / report con los resultados correspondientes, incluyendo información sobre alertas en esa IP, otras URLs con la IP que hubiesen sido anteriormente analizadas, resumen de todos los recursos Javascript utilizados y transacciones HTML necesarias para la carga completa. Con esto se podría determinar si la página analizada hubiese sido comprometida y en ella, se hubiera incluído algún código malicioso que ejecutase determinadas acciones:

Informe con los resultados del análisis mediante UrlQuery
La gran ventaja de esta extensión es que a partir de ahora, cada vez que veamos un enlace en twitter (si consultamos nuestro timeline desde el navegador) o mails sospechosos, conviene siempre, y a golpe de un clic, realizar antes de acceder un análisis de este tipo para saber si nos enfrentamos a contenido malicioso que incluso permitiría comprometer nuestro equipo, sobretodo a raíz de la última moda de infección mediante animaciones Flash y applets Java incrustados en páginas aparentemente legítimas.

Podéis descargar esta extensión de Chrome para análisis mediante UrlQuery, desarrollada por AlienVault Labs, en la siguiente dirección: 



Leer más...

29 abril 2013

Servicios VPN que se toman en serio la privacidad

Los proveedores de VPNs 'anónimas' siempre han generado mucha controversia, de entrada lo moral / inmoral que resulta ofrecer privacidad ilimitada. Unos piensan que 'siempre tiene que haber un límite por si se abusa de ellos' y otras personas opinan que todo el mundo tiene derecho a tener privacidad y que, aunque existan abusos, eso no justifica que el ser humano deba ser privado de ese derecho.

Moral aparte, encontrar un proveedor VPN que ofrezca verdaderas garantías puede no ser tan fácil, por eso me parece de especial relevancia el estudio que periódicamente publica Torrentfreak sobre el estado del arte en servicios VPN.

Hace ya un tiempo que se publicó el estudio del 2013 donde aparecen catalogados varios proveedores y sus políticas de retención de datos / acceso de logs por elementos externos.

Aquí el listado de proveedores (click en el logo para ir a su web):

  

   

                


   


   



Los detalles sobre las políticas de privacidad de cada proveedor y su jurisprudencia, las podéis encontrar en el post original
Leer más...

28 abril 2013

Enlaces de la SECmana - 172

Leer más...

26 abril 2013

Jornadas de Seguridad de la Información #X1RedMasSegura


Muchos de nosotros, acostumbrados a hablar en entornos técnicos, nos echamos las manos a la cabeza cuando vemos, en nuestra vida diaria, determinadas actitudes por parte de personas no acostumbradas a la tecnología. Conectarse a redes inalámbricas en lugares no controlados, introducir credenciales bancarias o contraseñas desde ordenadores públicos, creerse a pies juntillas que te caerá un rayo si no reenvías a un correo electrónico a 20 contactos en menos de 5 minutos, etc,... son cosas que a los que vivimos con la tecnología diariamente nos parece de sentido común. Sin embargo, Internet y la nuevas tecnologías esconden un mundo de novedades y sorpresas (a veces muy desagradables) para aquellos que están más desprotegidos, generalmente personas mayores y niños.

Con el fin de ayudar a la concienciación de estos colectivos, se han organizado unas jornadas gratuitas, en las que habrá talleres y charlas en las que se enseñarán a nivel muy básico, buenas prácticas de seguridad personal a la hora de utilizar Internet: Cómo crear una contraseña compleja, por qué ayuda la utilización de HTTPS, cómo tener buenos hábitos en redes sociales, etc,...

Dichas jornadas tendrán lugar del 13 al 18 de Mayo en Madrid. Los tres primeros días se llevarán a cabo los talleres y, el 17 y 18 de Mayo, están planificadas las charlas. 

Creo que es importante destacar el carácter altruísta del evento y es de agradecer que la organización cuente con el apoyo, de importantes patrocinadores y colaboradores, haciendo del mismo un evento gratuito, con la única finalidad de concienciar y lograr una red más segura, al menos para los asistentes.

Desde Security By Default, aportaremos nuestro granito de arena, y hemos sido invitados a formar parte del plantel de ponentes. En este caso, he aceptado el testigo y daré una charla sobre las amenazas que nos llegan mediante técnicas de Spam y Phishing. Como siempre, será un honor estar entre colegas y conocidos del sector, como Juan Garrido, Juan Antonio Calles, Pablo GonzálezChema Alonso, Josep Albors, entre otros...

Se ha habilitado una web en la que podréis estar al día de todos los detalles del evento: www.x1redmassegura.com. El hashtag será #x1redmassegura.

Leer más...

25 abril 2013

Gracias.

Ha pasado ya cerca de medio año desde que Hacker Épico se publicase y aun recibimos buenos comentarios. Cuando me comprometí con Informática64 a publicar el libro jamás imaginé que sería tan gratificante.

Llevo tiempo queriendo escribir esta entrada tan solo para agradeceros vuestras críticas y vuestros tweets. Todos ellos han hecho que merezca la pena publicarlo.

Los primeros días pensé que la experiencia de haberlo escrito junto a Rodrigo y los buenos momentos trabajando juntos serían nuestro premio. Pero eso solo ha sido el principio. Sentir como y cuanto os ha gustado, ha sido  la auténtica recompensa.

De las decenas de mensajes recibidos he recopilado algunos que nos han hecho especial ilusión y que me gustaría compartir con vosotros.

Uno de ellos es este comentario de una estudiante de la UIB que describe a un lector de nuestra novela. Gracias a el hemos podido ver a través de sus ojos, ajenos a la seguridad, como alguien devora el libro.

La traducción libre sería:

"Al chico pelirrojo que estaba en el metro de las 12 leyendo el libro "Hacker Épico" apoyado en la puerta. No has levantado la mirada del libro ni para subir las escaleras, por suerte, porque me habrías encontrado mirándote con cara de estúpida y la baba cayéndose.." 


Otro de ellos es un tweet de Andreu, en el que se plantea que Hacker Épico deba ser leído por sus propios alumnos de Derecho Penal Informático.



Toni de la Fuente, en una de las primeras críticas del libro no puso en la misma frase que Neal Stephenson, motivo más que suficiente para que alucinásemos. 



En otro tweet, Nacho Sorribas nos da las gracias al ver la expresión de la cara de un joven padawan cuando regala un ejemplar firmado .


Y por último, en la lista de correo de la RootedCon vi un mail de uno de sus integrantes que había escogido como alias "Ángel Ríos", protagonista de la novela. Pensé que sería una casualidad, así que me atreví a preguntarle y me confirmó que efectivamente no era su nombre real y era un homenaje al libro.



Esto tan solo son algunos ejemplos que nos han calado, pero como decía inicialmente, cada uno de los mensajes y cada felicitación es un orgullo para nosotros. ¿Se puede pedir más?

Este mes hemos llegado a vender la "primera edición virtual". Me explico. Informática64 siempre publica sus libros con tiradas de 1.000 unidades, pero tras leer Hacker Épico decidieron hacer una primera edición de  2.000 ejemplares. Bien, en estos meses, ya se han vendido la mitad. Aunque parezca algo tonto, tanto para Rodri como para mí, es motivo de celebración. 

A este pequeño hito se une el hecho de que anoche durante los X Premios SIC, organizados por la Revista SIC, nos concediesen una de sus distinciones. Ya habíamos visto la genial crítica que publicaron en su último número, pero jamás llegamos a pensar que tanto la editorial, como nosotros, fuéramos a ser premiados con este símbolo tan significativo dentro del mundo de la seguridad.


No puedo decir mucho más. Solo insistir. Gracias por difundir, gracias por opinar, gracias por estar ahí. y sobre todo, gracias por leernos.


Leer más...

24 abril 2013

WHF Windows Hooking Framework II

Primera entrega de esta serie de posts:

WHF Windows Hooking Framework I

--------

En esta segunda entrega me voy a centrar en los hooks utilizando las callback disponibles en el API de programación de drivers y en el API hook.

A modo de recordatorio:

Driver Hook. Los drivers permiten instalar callbacks que se ejecutarán cuando ocurran ciertos eventos en el sistema operativo, como puede ser el inicio o el fin de un proceso, de un thread o el mapeo de ficheros binarios a memoria entre muchos otros.

API hook. Son hooks que interceptan las llamadas a funciones que realizan los programas. Ejemplos clásicos pueden ser interceptar llamadas a funciones del sistema de ficheros como son OpenFile, WriteFile o ReadFile, llamadas relacionadas con el registro de Windows como RegOpenKeyEx, RegEnumValue o RegCloseKey y funciones para comunicarse en red como connect, send o recv.

Cuando se utiliza este tipo de hooks, se consigue modificar el comportamiento de un programa realizando alguna de las siguientes acciones:
  1. Filtrado de llamadas: Según las condiciones que establezcamos se llamará o no a la función
  2. Modificación de los parámetros de entrada de la función, alterando así el resultado de la función
  3. Modificación del valor de retorno de la función, si es que devuelve algún valor, 
Una forma rápida de ver a que funciones utiliza un programa es mediante el Dependecy Walker (depends.exe). Se puede lanzar desde ProcessExplorer pinchando con el boton derecho del ratón sobre cualquier proceso que se este ejecutando en ese instante en el sistema. En la imagen inferior se muestra Dependecy Walker mostrando las DLL que utiliza MSPAINT y las funciones que utiliza de Kernel32.dll



Los hooks de API pueden llevarse a cabo en user-space (mediante la inyección de una dll) o en kernel-space (mediante un driver). La principal diferencia es que mediante el hook en user-space afecta a un proceso y en kernel-space afecta a todos los procesos en ejecución.

Para enterder mejor a que me refiero con user-space y kernel-space es necesario saber que los procesadores suelen implementan un modelo de seguridad basado en anillos. Los procesadores Intel implementan 4 niveles de ejecución, desde el ring3 al ring0. El ring3 es el menos permisivo, permitiendo ejecutar un conjunto de instrucciones mas reducido. El ring2 es un poco más permisivo y así hasta el nivel 0 que es el nivel más permisivo y donde se tiene acceso a todas las instrucciones del procesador. Microsoft por motivos de compatibilidad con otras arquitecturas sólo utiliza dos niveles, el ring3 para ejecutan los procesos de usuario (user-space) y el ring0 donde ejecuta el kernel del sistema operativo y los drivers (kernel-space).  


Ejemplo 4, Monitorizando, suspendiendo y matando procesos.

En este ejemplo vamos a utilizar un callback que se llamara cuando se crean o destruyen procesos. En la figura inferior se puede observar cómo se define el callback en la función DriverEntry.



Se tienen varias opciones para registrar, suspender o matar los procesos que hayamos indicado en la configuración.

En este ejemplo, supongamos que sólo se quiere permitir navegar con el Internet Explorer a los usuarios, la configuración que creamos registra los inicios del Internet Explorer, suspende los Firefox y mata los Chrome, pero sólo los mataremos de Lunes a Viernes desde el 7 de Marzo de 2013 y entre las 9:00 de la mañana hasta las 18:00. De esta forma cuando sea fin de semana o estemos fuera del horario laboral el usuario puede utilizar el Chrome.


En este caso muestro sólo la configuración de Chrome. Para configurar iexplore habría que seleccionar la opción register dentro de Process y para firefox se selecciona suspend


Si tenéis Process Explorer ponedlo en primer plano, ya que veréis mucho mas claramente el comportamiento de este hook. Lanzamos hooklauncher y arrancamos Internet Explorer, Firefox y Chrome. En el primer caso (IE) podréis utilizarlo sin ningun problema. Al lanzar Firefox observareis que se crea un proceso, pero Process Explorer lo marca en gris por que se ha suspendido. Al lanzar Chrome si estáis dentro del schedule configurado, matará el proceso Chrome, marcandolo en rojo, como se puede ver en la imagen inferior.


Además en C:\WHF\TestingPath\ProcWatcher\<dia mes año>.txt deja un log de las actuaciones que ha relizado. En la imagen inferior se muestra el log después de la ejecución realizada en mi máquina.


Ejemplo 5, API hook user space.

Como ya indiqué, este tipo de hook nos permite modificar el comportamiento de un programa al interceptar las llamadas a una o varias funciones.

En espacio de usuario, a día de hoy, sólo tengo implementado el hook mediante de modificación de la IAT, Import Adress Table. Esta estructura es una tabla existente en el formato de los ficheros PE, ejecutables de Windows. Esta estructura se completa en tiempo de carga en memoria del programa, con las direcciones de memoria de las funciones utilizadas por el programa. Por medio de una inyección de DLL en el espacio de memoria del proceso victima se sobrescriben las direcciones de memoria de las funciones a interceptar con las direcciones de memoria de nuestras funciones. Nuestra función ha de tener los mismos parámetros de entrada y retornar el mismo tipo de datos que la función hookeada

En el ejemplo la DLL testIAT.dll, en el fichero dllmain.cpp se ha decidido modificar el comportamiento de SetWindowTextA. Esta función tiene dos parámetros de entrada, el Handle de la ventana donde se va a actuar y el texto que se va a establecer para la misma y retorna un BOOL.

La función por la que la vamos a sustituir es la que se muestra a continuación. En ella se recupera la dirección de la función reemplazada en OldFn y si se cumplen los valores del schedule, si es que se establece alguno, se modifica el texto a mostrar por Hook3d PabloWinSSSSS. Si no se cumple el schedule se llamará a la función sin modificar ningún parámetro.


Además de la función hay que completar una estructura en la que se indica el nombre de la DLL donde esta definida la función a hookear, el nombre de la función a hookear y la función que hemos definido  para reemplazarla, tal y como se puede ver en la siguiente imagen.


Para este ejemplo utilizaré una app a modo de ejemplo App2 cuyo funcionamiento normal es mostrar el PID y el path de ella misma. La configuración que se debe establecer es la que se muestra a continuación.


Para realizar la inyección de DLL vamos a establecer un hook sobre en ratón  pero esta vez utilizaremos la DLL testIAT.dll y la funcion HookMouse.



Una vez lanzado el hooklauncher, el ejecutable App2.exe cambia su comportamiento y el mensaje mostrado ya no es el PID o el path del ejecutable. Cuando paremos el hooklauncher la aplicación vuelve a su comportamiento original.



Ejemplo 6, API hook kernel space.

La principal diferencia con respecto al ejemplo anterior es que este hook se ejecuta a nivel de kernel, lo que significa que en lugar de afectar únicamente al proceso donde inyectamos la DLL, al modificar el comportamiento de una funcion afectamos a todos procesos del sistema.

Este tipo de hook es muy atractivo por afectar a todo el sistema, pero tiene sus contrapartidas. La primera es que si no se es cuidadoso al programar se acabará generando el clásico pantallazo azul de Windows y la segunda es que la forma de programar es diferente a la que suelen estar acostumbradas las personas que no hayan programado drivers.

Para realizar este hook se utiliza un driver, que localiza la SSDT, le quita la protección contra escritura, modifica el contenido de la misma y vuelve a establecer la protección frente a escrituras. La SSDT, System Service Dispatch Table es una tabla del kernel de Windows donde se guardan las direcciones de memoria donde se resuelven las funciones en espacio de kernel.

En este ejemplo lo que vamos a hacer es ocultar los procesos que indiquemos. Como se puede ver en la imagen inferior he seleccionado prácticamente todos los procesos del sistema.


Mediante el boton Global Edit, asigamos a todas las reglas la misma funcionalidad. Seleccionamos Global API Hook y en el combo ProcHider.


El driver reemplazar la dirección de la funcion ZwQuerySystemInformation contenida en la SSDT con la dirección de la función NewZwQuerySystemInformation definida dentro del mismo driver. La función NewZwQuerySystemInformation manipula los resultados obtenidos en la ejecución de la función ZwQuerySystemInformation consiguiendo que se oculten los procesos seleccionados como se puede ver en la imagen inferior con el antes y el después de la ejecución del hooklauncher


ToDo

En este proyecto queda mucho por hacer, entre las tareas pendientes destacan las siguientes:

Servidor de configuración y servicio hooklauncher: No utilizar el registro de Windows como repositorio de la configuración de un usuario y en su lugar utilizar BBDD, o Active Directory. y convertir el hooklauncher en un servicio que se arranque junto con el SO

Implementar otras técnicas de API hooks, en user-space, actualmente sólo se realizan hooks en la IAT y en kernel-space sólo se actúa sobre la SSDT

Estudiar las posibilidades que puedan aportar los Minifilters en este proyecto.

Antes de terminar me gustaría agredecer a SbD y a Yago en particular por picarme para escribir este artículo, a Borja Garnelo, Paco Sáa, Jose Ramon Palanco y a Javi GDT. Sus comentarios me animan a la hora de continuar con el proyecto.

-------------------------------------------------------------

Artículo cortesía de Pablo San Emeterio @psaneme




Leer más...