María Gloria García Vílchez
Entradas populares
-
La autora de este blog es, María Gloria García Vílchez, estudiante de Magisterio con la especialidad en Primaria, en el centro CES Don Bosco...
-
Primero retó a las cámaras de fotos, luego a los ordenadores y ahora, el teléfono móvil ha lanzado un órdago a la cartera. Pagar un menú del...
-
Sobre todo, matemáticas, pero también ciencia, economía e incluso algo de historia. Khan Academy es una plataforma de enseñanza a través de...
-
Es el signo de la modernidad. Internet forma desde hace tiempo parte de nuestras vidas. Imprescindible, se ha convertido en algo vital como ...
-
Este post es un poco más técnico que los anteriores, pero mucho más divertido. ¿Nunca te ha pasado estar jugando al Quake en red y que alg...
-
Un proyecto, que implica a 17 grandes museos del mundo, ofrece una visita virtual a 385 salas y permite ver online más de mil obras de arte ...
-
La ciudad de Hanover alberga estos días la exposición de tecnología de la informática CeBIT. Allí, Tobii Technologies y Lenovo han sorprendi...
-
Un viejo chiste dice que lo peor que puedes tener instalado en el ordenador después de un virus, es un antivirus. Este tipo de programas se ...
-
Vivir los constantes cambios que se nos plantean día a día en nuestras aulas, implica grandes desafíos. El contexto general en el cual nos v...
-
Un 25 % de los menores tiene abierto el acceso a su perfil en las redes sociales a cualquier persona que desee consultarlo, según indica hoy...
domingo, 29 de mayo de 2011
Europa incumple su propia directiva sobre privacidad
Gran Bretaña, Francia, Eslovenia, Luxemburgo, Letonia y Lituania han remitido notificaciones de implantación parcial de la misma. Finlandia se espera que lo haga pronto, pero no ha dado información oficial a las autoridades europeas. Del resto, Bruselas desconoce oficialmente sus intenciones y ya ha anunciado la apertura de procesos sancionadores. En el Congreso español entró este mes un proyecto de ley de modificación de la normativa vigente para cumplir con la directiva.
Este retraso demuestra la dificultad de aplicación de la misma. La directiva no precisa qué debe entenderse por "consentimiento". Hay muy distinto tipo de cookies y con diferentes niveles de intrusión. Algunas, por ejemplo, albergan la contraseña de entrada a un sitio para no tener que repetirla cada vez que se acuda al mismo. Por otra parte, la industria siempre ha defendido que los navegadores tienen herramientas para bloquear la acción de las cookies y si el internauta no las activa ya está demostrando su consentimiento. Las agencias de protección de datos discrepan de esta postura. Para ellas, el que "la configuración por defecto de tres de los cuatro navegadores más utilizados esté predeterminada para aceptar todas las cookies" no debe entenderse como consentimiento.
Ya solo faltaba que un experto en seguridad italiano asegurara ayer haber descubierto una vulnerabilidad en el navegador Internet Explorer que permitiría a un pirata acceder a la información almacenada en una cookie.
http://www.elpais.com/articulo/Pantallas/Europa/incumple/propia/directiva/privacidad/elpepurtv/20110527elpepirtv_3/Tes
sábado, 28 de mayo de 2011
¿Quién teme al virus feroz?
No es extraño, por tanto, que los nuevos sistemas operativos y plataformas móviles estén intentando evitar que hagan acto de presencia. Apple, por ejemplo, ha usado el argumento de la ausencia de virus en la plataforma durante años para convencer a los usuarios de PC de dar el salto hacia sus Macs. Consultores y empresas de antivirus han advertido de que la plataforma Mac sólo parece más segura porque tiene un menor número de usuarios y que, de alcanzar una masa crítica, seria el objetivo de quienes desarrollan este tipo de programas. Esto se ha escuchado desde mediados de la década pasada y por ahora la profecía sigue sin cumplirse.
En cierto sentido es una reducción simplista. Windows 7 es mucho más seguro que las anteriores versiones de Windows y no lo usa menos gente. La forma en la que está diseñado un sistema operativo tiene mucho que ver en la vulnerabilidad del mismo. Esta semana ha habido cierto revuelo por un programa de malware para Mac que puede considerarse el primer caso medianamente serio para la plataforma. Hay que darle permiso expreso de instalación pero algunos usuarios pueden confundirse ya que el programa se disfraza de “antivirus” y trata de convencer al usuario de que tiene una infección y debe instalar el programa. Detrás de este elemento, sorpresa, hay una empresa de “seguridad” rusa.
La respuesta de Apple no ha sido la de recomendar un antivirus sino explicar a los usuarios los pasos que pueden dar para eliminar el programa de forma manual y prometer una limpieza automática en la próxima actualización del sistema operativo para quienes no deseen hacerlo. Que yo sepa Apple no tiene nada en contra de los programas de antivirus (se venden en las tiendas de la compañía, de hecho) pero puestos a elegir prefiere que no se usen.
En el caso de iOS, el sistema para iPhone e iPad, Apple tiene un control más firme sobre los programas que se venden en la tienda de aplicaciones, y sí que omite la presencia de antivirus. En el resto de las plataformas móviles no hay una prohibición expresa (cada uno es libre de desarrollar y vender un antivirus, si quiere) pero es un asunto que generalmente se deja en manos de terceras compañías y al que no se le presta gran atención. Los sistemas operativos móviles modernos, como iOS o Android se han creado con mecanismos de seguridad con los que es posible borrar de forma remota aplicaciones que sean maliciosas –Google lo ha usado hace poco- y el entorno es mucho más cerrado y fácil de controlar que un ordenador. Por supuesto las empresas de antivirus han intentado entrar en este mercado pero por ahora es un negocio muy pequeño y que no se está expandiendo como esperaban.
Conforme evolucionan los sistemas operativos en este mundo móvil el acercamiento de los desarrolladores hacia el problema de la seguridad está cambiando. Google prepara la salida al mercado de sus nuevos ordenadores Chromebook a mediados de junio y una de las ventajas del nuevo sistema operativo es que tiene un enfoque radicalmente diferente de la seguridad. Al igual que ocurre con el teléfono el sistema está centralizado y se actualiza de forma automática. No existe la posibilidad de instalar aplicaciones -al menos de momento, Google podría permitir algunas en el futuro- y eso incluye tanto a virus como a antivirus. El gigante de la red ha comentado en varias ocasiones que este tipo de enfoque es mucho mejor y más seguro. Hay quien cree que esto es el final de las empresas de antivirus pero también quienes dudan. En la seguridad, después de todo, hay un componente de ilusión. Nada es 100% seguro. Nunca.
http://www.elmundo.es/blogs/elmundo/el-gadgetoblog/2011/05/28/quien-teme-al-virus-feroz.html
viernes, 29 de abril de 2011
'Teddy' Bautista: 'Internet salvará la cultura'
El presidente de la Sociedad General de Autores y Editores (SGAE), Eduardo Bautista, ha afirmado que "lo que va a salvar Internet es la cultura", durante su intervención en un coloquio en Madrid de la Fundación Euroamérica.
En opinión de Bautista, los nuevos fenómenos tecnológicos adquieren mayor valor gracias a las creaciones artísticas, tanto materiales como intangibles. "Su valor es de tal magnitud que no se pueden plantear nuevos modelos de negocio sin tener en cuenta este factor", ha dicho.
miércoles, 27 de abril de 2011
Un seguro a prueba de 'tweets'
David Bisbal (1.323.200 seguidores); Alejandro Sanz (2.054.328 seguidores); Sergio Ramos (607.477 seguidores). Son tres ejemplos de personajes populares que se han visto en apuros por escribir 'tweets' comprometidos y poco afortunados. Para evitar daños en su imagen, Kiln Group estudia sacar su nueva línea de seguros contra 'tweets' polémicos.
Kiln Group, una aseguradora dependiente de la firma Lloyds, quiere proteger a las compañías de los perjuicios que causa el mal uso de las redes sociales. Cada vez son más las personas con o sin responsabilidad que rompen la política de comunicación, revelan secretos o dan mala imagen de la marca en tan solo 140 caracteres, sin tener en cuenta que todos sus mensajes en Twitter son completamente públicos.
Las grandes compañías que contraten este nuevo seguro pagarán entre 100.000 y 10 millones de dólares para acceder a la cobertura de su marca, aunque habrá tarifas más baratas para otro tipo de asegurados.
Multas de medio millón de dólares
Un ejemplo claro de este síndrome y sus consecuencias con costes monetarios tuvo lugar en 2009, cuando la cantante Courtney Love fue llevada a juicio por una diseñadora de moda a la que insultó a través de Twitter y de MySpace. Tras la denuncia, el juez condenó a Love a pagarle en torno a medio millón de dólares por ofenderle delante de más de 40.000 seguidores.
En España, David Bisbal entró en el centro de la polémica por escribir en su cuenta de Twitter un mensaje irónico sobre la situación del turismo en Egipto mientras que el país sacaba adelante una revolución política que acabó con la dictadura en el gobierno. No hubo sanción económica ni causa judicial, pero la imagen del cantante salió perjudicada.
Twitter es un medio de comunicación, y como cualquier otro, la gente puede provocar daños de imagen en la marca y en la reputación 'online' que acaben en enfrentamientos judiciales. Es el mismo mecanismo que se sigue con cualquier blog, radio o periódico.
Espacios no tan privados
Al tratarse de una red social, en la que el usuario adquiere cierta cercanía con sus seguidores y escoge libremente a quien seguir y tiene la opción de bloquear quien le sigue, la sensación de seguridad, de privacidad y de intimidad es mayor que en otros espacios. Sin embargo, la mayoría de los usuarios tienen sus canales abiertos y son públicos, por lo que cualquier insulto o declaración que se realice puede tener consecuencias negativas. Son muchos los casos de trabajadores que han insultado a sus jefes en Twitter o Facebook y que después han sido despedidos o encausados.
Según City News Toronto, este seguro contra 'tweets' polémicos tardará unos cinco años en estar disponible para particulares. Es decir, que los personajes públicos como artistas y deportistas van a seguir siendo responsables de sus comentarios a través de la red de microblogging. Pero no así las marcas, promotores o discográficas que les representan.
lunes, 18 de abril de 2011
El 25% de los niños abre su perfil en las redes sociales
viernes, 1 de abril de 2011
Inyección de código para Dummies
Este post es un poco más técnico que los anteriores, pero mucho más divertido. ¿Nunca te ha pasado estar jugando al Quake en red y que algunos jugadores siempre te machaquen sin remedio de forma inmisericorde? Probablemente sea porque saben exactamente dónde estás y cuándo doblarás la esquina con tu ridícula escopeta. Estos jugadores inyectan sus propios parches al juego para, por ejemplo, hacer las paredes transparentes y recibir alertas cuando otro jugador les acecha por la retaguardia.
En este post voy a darte una orientación sobre cómo hacer ingeniería inversa de aplicaciones de terceros escritas originalmente en C/C++, de las que sólo tienes en tu poder el ejecutable. Voy a introducirte a las herramientas básicas para indagar en el binario y averiguar su flujo de ejecución, y luego vamos a escribir juntos un simple pache en ansi C para interponer algunas funciones estándar en cualquier aplicación.
Este post tiene fines didácticos, pero espero que al final se te hayan ocurrido aplicaciones mucho más interesantes.
¿Que necesitamos para empezar?
Necesitamos un ordenador con una distribución de Linux y tener instalado el compilador GCC. Pero no te preocupes...
Prometo escribir otro post lo antes posible sobre el mismo tema pero en entornos Mac. Si estás interesado sobre este tema en entorno Windows, te sugiero que te dirijas aquí.
¿Que aplicación vamos a interceptar?
En linux existe una aplicación de consola muy curiosa, llamada fortune, que imprime por pantalla una cita famosa al azar. Vamos a indagar y reemplazar tres funciones de este programita para saber la memoria que reserva y los ficheros que abre. Si no tienes fortune en tu distro, instálalo. Pero tampoco te apures mucho, el parche que vamos a desarrollar es genérico y funcionará en cualquier ejecutable desarrollado en C/C++.
arturo@firecracker $ fortune
Así como los ojos de los murciélagos se ofuscan a la luz del día, de la misma manera a la inteligencia de nuestra alma la ofuscan las cosas evidentes.
-- Aristóteles. (384-322 A.C.) Filósofo griego.
Herramientas útiles
Las siguientes herramientas son muy útiles para hacer ingeniería inversa de un ejecutable. No vamos a utilizarlas todas para nuestro ejemplo pero me gustaría presentártelas para que puedas juguetear con ellas de ahora en adelante. Si tomas el hábito de inspeccionar aplicaciones como quien se fija en chicas por la calle, aprenderás mucho y tu curiosidad crecerá cada vez más.
- strace es una utilidad de línea de comandos que permite monitorizar las llamadas al sistema que realiza un determinado proceso y que encontrarás disponible en cualquier distribución de Linux. Lo normal es arrancarlo junto al programa que queremos inspeccionar. Por ejemplo, para tracear fortune, lo ejecutaríamos de la siguiente manera:
arturo@firecracker$ strace /usr/games/fortune- strings es una utilidad muy práctica que examina un fichero en busca de cadenas de texto, algo que es mucho más practico de lo que parece. Muy a menudo, cadenas 'secretas', nombres de funciones, constantes o literales importantes se revelarán a sí mismos como un exhibicionista delante de una colegiala. Inspeccionamos fortune de la siguiente manera:
arturo@firecracker$ strings /usr/games/fortune
- nm es una utilidad que imprime por pantalla todos los símbolos encontrados en un binario. Esto incluye nombres de funciones, compartidas o integradas, y en algunos casos las constantes de la aplicación. En este caso, fortune no tiene simbolos, pero otras muchas aplicaciones sí y es muy practico conocer esta herramienta.
- gdb el debuggeador de proyectos de GNU está muy equipado para la ingeniería inversa. Puedes lanzar una aplicación desde GDB y poner puntos de ruptura o incluso examinar estructuras de datos en tiempo de ejecución, pero no es la herramienta más fácil de usar de todas las que tenemos disponibles.
¿Que vamos a hacer?
Si has ejecutado la traza y strings para fortune, habrás visto que hace múltiples llamadas que podemos interceptar, entre ellas las siguientes:
- malloc reserva memoria operativa.
- free libera memoria operativa.
- open abre un fichero.
Pues bien, vamos a programar un módulo en C y a lanzar este mismo proceso con nuestro parche adherido, de forma que podamos imprimir por pantalla qué direcciones de memoria utiliza o liberay con qué ficheros trabaja a lo largo de su ejecución. Para ello, vamos a utilizar una librería de enlazado dinámico de memoria, conocida como dlsym.
¿Qué es dlsym y qué vamos a hacer con él?
El código fuente de un programa debe compilarse para generar un ejecutable y el proceso de compilación lo que hace es asignar a cada una de tus constantes y funciones -entre otras cosas- una dirección de memoria única con la que luego trabaja dentro de un espacio de ejecución delimitado. En un ejecutable, tus constantes y funciones dejan de llamarse como tal y pasan a llamarse símbolos: asociaciones de direcciones de memoria que podemos averiguar y tratar con dlsym.
Con dlsym podemos saber la dirección de memoria de un determinado símbolo, por ejemplo la función malloc(), y también podemos modificar esa dirección de memoria para que llame a nuestra propia versión de la función malloc(), que además, si queremos, puede llamar a la función malloc() original porque hemos almacenado su dirección de memoria previamente. A este proceso se le denomina interposición de funciones, y es lo que vamos a hacer a continuación.
Dicho de forma más coloquial, vamos a secuestrar la llamada de una función original del ejecutable y a espíar que parámetros recibe antes de que se ejecute. Nuestra función hará de puente entre la llamada original y la función que debería procesar esa llamada, reservándonos nosotros el derecho de conocer información que como usuarios no deberíamos saber y a tomar decisiones en función de esa información para alterar la ejecución del programa, normalmente hacia derroteros que harían al arquitecto original tirarse de los pelos.
¿Que aplicaciones tiene esto?
Tiene muchísimas utilidades además de la benévola depuración. Tantas como te puedas imaginar si te mojas un poco. Por ejemplo, si la aplicación destino fuese de mensajería, a lo mejor podríamos espíar los mensajes que están intercambiando dos personas, evitar que cierta persona reciba mensajes o incluso envíar mensajes fraudulentos haciéndonos pasar por alguien sin que ningún inocente usuario sospechase nada (en concreto, interceptar mensajes de texto suele ser muy sencillo porque es costumbre común utilizar la librería de cadenas de C para tratarlas).
Si estuviéramos jugando a un videojuego en red como Quake o Counter Strike, podríamos inyectar un parche que nos permitiese ver a través de las paredes y destrozar a nuestros oponentes. O que lanzase una alarma sonora cuando alguien se nos acerque por la espalda e incluso, para los más imaginativos, podríamos manipular qué mensajes envía nuestro cliente al servidor del juego.
Evidentemente, hay aplicaciones mucho más lucrativas e interesantes, como por ejemplo programar un motor para jugar de forma óptima al póker e inyectárselo a un cliente de juego de póker 'online'. El límite está en la imaginación de cada uno: por regla general, puedes atacar a cualquier aplicación que se ejecute en tu máquina.
Programación e inyección de nuestro parche
1.- Escribimos el código fuente de módulo
A continuación está el código fuente del módulo, es corto y lo único que hace es interponerse entre las funciones malloc(), free() y open(). De forma que abre tu editor de código favorito y escribe o pega el siguiente código. Como verás, para interponer una función tan solo debemos conocer su prototipo. Y recuerda que los programadores que no utilizan Vim van al infierno.
Esta funcionalidad se puede implementar de muchas maneras, pero la más sencilla es la siguiente.
Fichero: pi.c
#define _GNU_SOURCE
#include stdint.h
#include stdio.h
#include stdarg.h
#include dlfcn.h
/**
* Interponemos nuestra funcion open
*
* @param char* filename
* @param int flags
*/
int open(char* filename, int flags)
{
// Cojo la direccion de memoria de la funcion original y le asigno un nombre
static int (*real_open)(char*, int) = NULL;
if (!real_open)
real_open = dlsym(RTLD_NEXT, "open");
// Ejecuto el original, imprimo resultado por pantalla y devuelvo el resultado
int p = real_open(filename, flags);
fprintf(stderr, "Abrimos %s) = %i\n", filename, flags);
return p;
}
/**
* Interponemos nuestra funcion malloc
*
* @param size_t size
*/
void* malloc(size_t size)
{
// Cojo la direccion de memoria de la funcion original y le asigno un nombre
static void* (*real_malloc)(size_t) = NULL;
if (!real_malloc)
real_malloc = dlsym(RTLD_NEXT, "malloc");
// Ejecuto el original, imprimo resultado por pantalla y devuelvo el resultado
void *p = real_malloc(size);
fprintf(stderr, "Reserva de memoria (%d) = %p\n", size, p);
return p;
}
/**
* Interponemos nuestra funcion free
*
* @param size_t size
*/
void* free(void* ptr)
{
// Cojo la direccion de memoria de la funcion original y le asigno un nombre
static void* (*real_free)(void*) = NULL;
if (!real_free)
real_free = dlsym(RTLD_NEXT, "free");
// Ejecuto el original, imprimo resultado por pantalla y devuelvo el resultado
int *p = real_free(ptr);
fprintf(stderr, "Libero memoria (%p)\n", ptr);
return p;
}
2.- Compilamos el modulo
Compilamos el módulo con la siguiente instrucción. Verás que escupe un 'warning' porque reescribimos el nombre de una función estándar, pero eso no nos importa.
arturo@firecracker $ gcc -Wall -O2 -fpic -shared -ldl -o pi.so pi.c
Si todo ha ido bien, la compilación nos ha creado un objeto compartido llamado pi.so que vamos a inyectar a un programa a continuación.
3. Ejecución de una aplicación con nuestro parche
En entornos Linux, la directiva LD_PRELOAD permite lanzar un proceso obligando al sistema operativo a cargar un objeto compartido antes de la ejecución. Esto nos permite adherir nuestro parche a cualquier aplicación que queramos interceptar. Hay que tener cuidado y facilitar la ruta completa del objeto compartido, de lo contrario no funcionará. A continuación ejecuto nuestro ejemplo y de paso echamos un ojo a la salida que produce.
Verás que la salida en realidad es mucho más larga, he seleccionado solo el último segmento de la salida, que tiene todos los elementos que hemos interceptado.
arturo@firecracker $ LD_PRELOAD=/home/arturo/pi.so /usr/games/fortune
Reserva de memoria (39) = 0x8911c70
Libero memoria (0x8911c70)
Reserva de memoria (392) = 0x8911d48
Reserva de memoria (11) = 0x8911ed8
Reserva de memoria (11) = 0x8911ee8
Reserva de memoria (11) = 0x8911ef8
Libero memoria ((nil))
Reserva de memoria (19) = 0x8911f08
Reserva de memoria (19) = 0x8911f20
Reserva de memoria (6) = 0x8911f38
Libero memoria (0x8911f38)
Reserva de memoria (12) = 0x8911f38
Libero memoria (0x8911f38)
Reserva de memoria (2248) = 0x8911f38
Libero memoria (0x8911f38)
Libero memoria (0x8911f20)
Libero memoria (0x8911f08)
Abrimos /usr/share/games/fortunes/familia.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/proverbios.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/varios.fortunes-pre.dat) = 0
Abrimos /usr/share/games/fortunes/famosos.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/vida.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/refranes.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/sabiduria.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/informatica.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/humanos.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/asimov.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/leydemurphy.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/lao-tse.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/ciencia.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/poder.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/nietzsche.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/varios.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/amistad.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/arte.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/deprimente.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/sentimientos.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/pintadas.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/verdad.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/filosofia.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/libertad.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/schopenhauer.fortunes.dat) = 0
Abrimos /usr/share/games/fortunes/refranes.fortunes.dat) = 0
Reserva de memoria (352) = 0x8911f38
Reserva de memoria (52) = 0x8911d10
Reserva de memoria (44) = 0x8911c70
Reserva de memoria (44) = 0x89120a0
Libero memoria (0x8911c70)
Libero memoria (0x89120a0)
Libero memoria (0x8911d10)
Cuando el español canta, o tiene mala leche o poco le falta.
Libero memoria (0x89120d0)
Libero memoria (0x8912808)
Libero memoria (0x890e8f8)
Como verás, la ejecución normal va acompañada de nuestros mensajes de traza que nos indican todo lo que queremos saber:
Qué direcciones de memoria reserva y en qué orden. Qué direcciones de memoria libera y en qué orden. Qué ficheros abre a lo largo de la ejecución del proceso.
Sólo hemos interceptado esas tres funciones, pero podríamos haber interceptado varios cientos con la misma facilidad. Tan sólo necesitamos saber el prototipo o cabecera de la función para poder escribir nuestra propia versión y que la llamada sea transparente. Para más información sobre funciones estándar, te recomiendo que visites la referencia de C++.
Enlaces de interés:
- Inyección de código en la Wikipedia
- Como construí un bot de poker - Muy inspiracional
- Hacks de Counter StrikeReferencia C++ - Todas las funciones compartidas son interceptables facilmente
http://www.elmundo.es/blogs/elmundo/totalsiessoloapretarunboton/2011/04/01/inyeccion-de-codigo-para-dummies.html