miércoles, 17 de septiembre de 2014

Criptografía con curvas elípticas

Hace tiempo que le doy vueltas a la idea de hacer un post sobre criptografía basada en curvas elípticas, pero hasta ahora me he resistido porque no es un tema fácil de tratar de forma divulgativa sin meterse en berenjenales matemáticos de mucho cuidado.
Aun así, me voy a atrever por dos motivos. Porque me apetece, que para eso es mi blog, y porque personalmente creo que es un campo muy prometedor para la investigación en criptografía.
Voy a tratar de simplificar al máximo y voy a ahorrarte demostraciones matemáticas y formulitas todo lo que pueda, pero avisado quedas de que este es un artículo donde se presupone que el lector tiene cierta competencia matemática.
Sin más preámbulos, vamos al lío.

jueves, 28 de agosto de 2014

Ingeniería inversa de un parche de Microsoft Windows

A estas alturas ya hemos asumido que la seguridad total en Internet es, cuanto menos, un mito. Ningún software está libre de vulnerabilidades, y por mucha auditoría, test de intrusión o pruebas de fuzzing que nos empeñemos en hacer, ninguna metodología puede demostrar sin lugar a dudas que un software es 100% seguro. Ante este panorama, hay dos tendencias mayoritarias a la hora de hacer públicas las vulnerabilidades.
Por un lado, están los que piensan que cuando se descubre un fallo ha de hacerse público de forma inmediata. En este escenario, la publicación de una vulnerabilidad es el pistoletazo de salida para una carrera entre el desarrollador para sacar el parche y los "malos" para lograr explotarla. Esta política es conocida como full disclosure.
Por otro lado, tenemos a los siguen una política responsible disclosure, que abogan por mantener la vulnerabilidad en secreto hasta la salida del parche por parte del desarrollador. Sin entrar en cuestiones filosóficas que no vienen al caso sobre qué política es más adecuada, la segunda, seguida por empresas como Microsoft, han dado lugar a una práctica muy habitual últimamente. Cuando Microsoft publica un parche para un software, inmediatamente hay un montón de analistas que se dedican a hacer ingeniería inversa del parche, ya sea por pura curiosidad o para explotar la vulnerabilidad en aquellos equipos que aún no se hayan actualizado. En cualquier caso, puede ser muy ilustrativo ver cómo es el proceso de reversing de un parche de Windows, así que veamos un ejemplo sencillo.

lunes, 25 de agosto de 2014

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas.
El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.


lunes, 11 de agosto de 2014

Historias de hackers: "A la caza del ciberdelincuente"

No hace mucho os contaba en este blog la historia de un "Hacker" que, por encargo, entraba en el servidor de una empresa y robaba los datos de los clientes. Al final de la historia, el ciberdelincuente acaba entre rejas, y ésta es la historia de cómo fue cazado.

viernes, 8 de agosto de 2014

Identificando malware en procesos svchost.exe maliciosos

Si examinas los procesos que están corriendo en tu Windows con el administrador de tareas verás que hay varios procesos llamados svchost.exe. La función de estos es alojar a otros procesos que realizan diferentes funciones, es decir, actúan como contenedores de otros servicios. Además de esto, también es uno de los lugares favoritos que tiene el malware para alojarse sin tu permiso.
Hay dos formas en las que un malware puede usar estos procesos para esconderse. La primera forma es agregándose a un svchost.exe que ya esté ejecutándose. La otra manera es creando un proceso svchost.exe falso que en realidad está ejecutando el malware. Vamos ver cómo podemos identificar estos svchost.exe falsos (y dejamos para otro día el primer caso en el que los programas maliciosos que se alojan en svchost.exe auténticos).

martes, 22 de julio de 2014

Historias de hackers: "Un servidor desactualizado"

Día 1.

Suena el teléfono a las 3 de la tarde, justo a la hora de comer. Descuelgo y una voz al otro lado me dice que le ha pasado mi contacto un amigo común y que quiere proponerme un “trabajito”.
Como hacker de sombrero negro (hacker malicioso) me gano la vida atacando sistemas para empresas que me contratan por suculentas cantidades, así que rápidamente acepto el trabajo.

miércoles, 30 de abril de 2014

Desbordamiento de enteros (Integer Overflow)

Ya os he hablado en este blog de posibles problemas potenciales que se pueden dar en los programas y que son susceptibles de ser explotados para hacer que dichos programas se comporten de forma diferente a la que deberían. Uno de estos problemas es el del desbordamiento de la pila. Sin embargo, hay otros posibles errores de programación que, aunque menos obvios, son igual de peligrosos. Uno de ellos es el desbordamiento de enteros o integer overflow. Para entender cómo funciona os presento un ejemplo muy sencillo pero didáctico.

sábado, 19 de abril de 2014

Criptografía en Python con PyCrypto

A la hora de cifrar información con Python, tenemos algunas opciones, pero una de las más fiables es la librería criptográfica PyCrypto, que soporta funciones para cifrado por bloques, cifrado por flujo y cálculo de hash. Además incorpora sus propios generadores de números aleatorios. Seguidamente os presento algunas de sus características y también como se usa.


domingo, 6 de abril de 2014

¿Cómo afecta la nueva ley de seguridad privada a la seguridad informática?

El día 5 de Abril de 2014 se publicó en BOE el texto de la nueva Ley 5/2014, de 4 de abril, de Seguridad Privada. A falta de un reglamento que la desarrolle, vamos a analizar algunos puntos que afectan directamente a la Seguridad Informática y a las empresas que prestan dichos servicios.


jueves, 3 de abril de 2014

Ataques y debilidades de RSA

Siempre que se habla de criptografía de clave pública es obligado nombrar RSA como indiscutible rey. Otras cifras muy usadas son ElGamal y las basadas en curvas elípticas, a la que dedicaré un artículo en cuanto saque algo de tiempo. Después de más de 20 años de uso, que sepamos, RSA sigue siendo un criptosistema seguro. En cualquier caso, como ya os conté en otro artículo, si se usan valores pequeños para el módulo, éste es fácilmente factorizable en un tiempo razonable. Sin embargo, éste no es el único problema que puede presentar RSA. En este artículo vamos a hacer un repaso de algunas de las posibles debilidades de este criptosistema y, por lo tanto, posibles vectores de ataque.

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).