lunes, 31 de marzo de 2014

¿Qué es la Criptografía Cuántica?

La computación cuántica se va perfilando como la próxima revolución en computación. Es todo un cambio de paradigma en la forma de procesar información, aunque probablemente, los computadores cuánticos del futuro serán de propósito específico y no ordenadores para uso general como los que usamos ahora. Una de estas aplicaciones específicas es la Criptografía Cuántica, que promete crear un canal cifrado teóricamente inexpugnable. Desgraciadamente, la computación cuántica también llega con la promesa de poner en jaque a la actual criptografía de clave pública. Analicemos por qué.

domingo, 16 de marzo de 2014

Servicios online para análisis de Malware

El análisis de un nuevo malware es siempre una tarea que requiere muchos recursos, tanto en tiempo como en conocimiento, lo que al final se traduce en dinero. Además, los buenos analistas de malware son un bien escaso. Las Empresas desarrolladoras de antivirus hacen una inversión muy considerable cuando se enfrenta a nuevos espécimenes de virus, por lo que se está investigando bastante en el campo del análisis automático de programas maliciosos. Está lejos el día en que un programa pueda igualar a un buen profesional, y además, personalmente, me parece una pena dejarle a una máquina el placer de resolver un desafío tan gratificante como es comprender el funcionamiento de un malware a pesar de los obstáculos que pone el programador que lo ha ideado.
En cualquier caso, hay mucho malware nuevo cada día, y algunos son simplemente evoluciones de otros, así que vale la pena centrarse en los verdaderamente interesantes y usar analizadores automáticos para los demás. Existen diferentes alternativas de software, algunas gratuitas, para ayudarnos a destripar virus, y de ellas hablaremos otro día porque hoy quiero hablaros de los servicios de análisis online. Os presentaré algunos y veremos qué tal se comportan utilizando el virus win32.Alina.

jueves, 13 de marzo de 2014

Desarrollo de controladores de dispositivo (device drivers) en Linux

Continúo la serie de artículos sobre programación del kernel Linux con un artículo sobre el desarrollo de controladores de dispositivos o device drivers. El controlador de ejemplo que voy a mostraros se carga en memoria como un módulo del kernel, así que conviene leer los anteriores posts sobre programación de módulos del kernel Linux y cómo usar /proc desde un módulo del kernel Linux. Para compilar el módulo me he basado en el entorno para desarrollo para kernel Linux que publiqué en un anterior artículo.
Voy a comenzar presentando un ejemplo sencillo que seguidamente pasaré a analizar.

lunes, 10 de marzo de 2014

Usar /proc desde un módulo del kernel Linux

Ya he dedicado un artículo a cómo programar un módulo para el kernel. Hoy vamos a dar una vuelta más de tuerca y vamos a ver cómo usar /proc desde un módulo del kernel Linux. Esto nos permitirá tener un medio de comunicación desde nuestros módulos del kernel con el exterior.


viernes, 7 de marzo de 2014

Desarrollo de módulos para el kernel Linux

Una de las primeras cosas que tiene que saber un hacker del kernel es cómo crear un módulo para el kernel Linux. Para continuar leyendo este artículo es conveniente haber leído antes el anterior Entorno para desarrollo del kernel Linux.
Linux es un kernel del tipo monolítico, lo cual quiere decir, grosso modo, que todo el kernel es un gran archivo ejecutable que se carga y toma el control al iniciar el ordenador. El problema de este tipo de kernels es que al compilarlo hay que añadir todos los controladores para el hardware que queremos soportar. Esto es un problema si queremos hacer un kernel genérico que soporte una gran variedad de dispositivos, ya que su tamaño será considerable, e incluso inviable.
Linux soluciona este problema a través de los módulos, por lo que podemos decir que Linux es un kernel modular que carga en memoria aquellos módulos que necesita en cada momento. Las distribuciones genéricas, como por ejemplo, Ubuntu, compilan un núcleo muy pequeño con lo mínimo para poder arrancar y en tiempo de ejecución carga en memoria aquellos módulos necesarios para dar servicio a los dispositivos que tiene nuestro equipo.
Los módulos son, pues, la manera más sencilla y cómoda de añadir código y funcionalidad al espacio del kernel sin tener que andar recompilándolo.
En este artículo vamos a crear un módulo muy simple (de hecho el más simple posible) y lo vamos a cargar en la máquina virtual Qemu que preparamos en el artículo anteriormente citado.


lunes, 3 de marzo de 2014

Entorno para desarrollo y hacking del kernel Linux

Antes de empezar a desarrollar o a hacer hacking del kernel Linux es necesario preparar un entorno que nos permita hacer modificaciones en el núcleo, compilarlo y probarlo de forma que no afecte a nuestra máquina de desarrollo (no queremos que un error de programación impida que nuestra máquina vuelva a arrancar). A mí, personalmente me gusta usar una máquina virtual en Qemu, aunque hay diferentes alternativas, como preparar un entorno chroot. Aquí voy a describir como lo hago yo, que por supuesto no tiene por qué ser la mejor manera. Por último, antes de comenzar, señalar que en mi máquina de desarrollo utilizo Ubuntu, por lo que las siguientes instrucciones son directamente aplicables a este sistema operativo (aunque son fácilmente adaptables a cualquier otra distribución Linux).