Prey: rastrea tu laptop robada (OSX, Linux, Unix)

Navegando por malas aguas me he encontrado con una solución de seguridad muy buena de un desarrollador al que le robaron su laptop, que al no soportar el coraje de lo sucedido realizo este script que nos ayuda de manera muy completa quien fue, como y donde recuperarla.

Dandonos información valiosa como:

Información de red

  • La dirección IP pública y privada de donde esté conectado el PC.
  • El IP del gateway de la red que está usando para salir a Internet.
  • La dirección MAC de la tarjeta o controlador de red por el cual esté conectado a la red.
  • El nombre e ESSID de la red WiFi a la que esté conectado, en caso que lo esté.
  • Un listado de conexiones activas en el momento en que se ejecute el programa.

Información interna del PC

  • Cuánto tiempo lleva encendido el aparato.
  • Número de usuarios logeados.
  • Un listado con los programas en ejecución.
  • Un listado con los archivos modificados en la última hora (o el número de minutos que tú definas).

Información del ladrón

  • En caso que el PC tenga una webcam, una foto del impostor.
  • Un pantallazo del escritorio, para que veas qué está haciendo.
  • El tatuaje indistinguible de nuestro nuevo amigo.

¿Como Funciona?

Cada cierto intervalo de tiempo (default = 10 minutos) el programa se ejecuta y revisa si en la configuración pusiste una URL de checkeo o no. En caso que no lo hayas hecho, o que lo hayas hecho y la URL sí exista, el programa hará el proceso de recolección y envío de datos. Si definiste una URL que no existe, el programa se apagará para volver a ejecutarse en 10 minutos más.

Ejemplo

Para instalarlo:

  • Bajamos el siguiente paquete
  • Abrimos la grandiosa terminal y ejecutamos lo siguiente:

$ wget http://bootlog.org/downloads/prey-0.1.zip

$ unzip prey-0.1.zip

$ cd prey-0.1

$ chmod +x install.sh

$ ./install.sh

  • Seguimos las instrucciones como muestro a continuacion:
    prey

One-Time Pad el cifrado perfecto

Hay quienes creen que no existe un método de cifrado perfecto, o un cifrado que te pueda garantizar seguridad absoluta y se equivocan.

El método de cifrado de One-Time Pad, que fue inventado en 1917 por el Mayor Joseph Mauborgne y Gilbert Vernam de AT&T. Claude Shannon, 25 años después, se encargó de demostrar con la teoría de la información que este cifrado cumple con ser un secreto perfecto, lo que quiere decir que el contenido del mensaje no puede aportar nada de información a un atacante.

Es un método que sin importar el poder computacional que se tenga o si se haya inventado la computadora cuántica o si los extraterrestres de Andrómeda vengan a la tierra con sus métodos computacionales inimaginables, aún asi será seguro.

Preliminares

Necesitamos una llave de la misma longitud que el mensaje, la cual deberá ser de verdad aleatoria y no pseudo aleatoria. Además esta llave se supone que las dos partes la deben conocer (problema de intercambio de llaves) y cuando una parte cifre el mensaje debe destruir esa llave de alguna forma que no pueda recuperarse y luego enviar el mensaje cifrado, luego la otra parte va a descifrarlo y al terminar de hacerlo debe destruir la llave de nuevo.

Es primordial que no se vuelva a usar la misma llave dos veces pues un criptoanalista podría romper el cifrado sabiendo dos mensajes diferentes que se encriptaron con la misma llave.

¿Cómo funciona?

Es algo muy simple de entender, teniendo el texto:

Teniendo la llave:

El texto cifrado sería:

Porque:
A + R mod 26 = S
M + F mod 26 = S
A + T mod 26 = U

Suponiendo que A vale 1 y R vale 17: 1+17 = 18 y 18 / 26 nos daría como residuo 18, entonces el 18 corresponde a la letra S.

Es importante ver que no puede romperse incluso si pudieramos calcular todas las posibilidades y buscar mensajes coherentes, pues al decifrarlo podría decir SIVOY como NOVOY entonces es imposible saber cual es el mensaje cifrado sin saber la llave. Según dicen, los Rusos cifraron algunos mensajes con este método y siguen hasta la fecha sin poderse descifrar, y así seguirán para siempre.

El problema con este método y en general con cualquier método de cifrado simétrico es el intercambio de llaves, pues ¿cómo podrías intercambiar la clave del One Time Pad de una manera segura?

Fin

Si quieren profundizar más en el tema podrían leer en la página 15 del libro Applied Cryptography escrito por Bruce Schneier que explica con un poco más de detalle este algoritmo.

Con este código en javascript podríamos obtenerlo:

var charCodeCero = ("A".charCodeAt(0))-1;
function oneTimePad(mensaje, llave) {
	mensaje = mensaje.toUpperCase();
	llave = llave.toUpperCase();
	var cifrado = "";
        for(var i = 0; i < mensaje.length; i++) {
		cifrado += String.fromCharCode((( mensaje.charCodeAt(i) - charCodeCero +
                                                 llave.charCodeAt(i) - charCodeCero 
                                                 ) % 26) + charCodeCero);
	}
	return cifrado;
}

Los astronautas también van al baño…. y con cuidado.

En el blog de noticias espaciales de Discovery leo una graciosa e interesante cita sobre un astronauta y sobre como un astronauta va al baño; Y es que tareas tan cotidianas para cualquier persona (como lo es ir al sanitario) se vuelven en algo especial o único.

In the space shuttle we have a small room where we have our toilet and there’s a device to collect the urine and then you have another one to dispose of the larger matter. Basically a lot of it works on a vacuum, so we have a hose but it’s a very light vacuum and each person has their own funnel (for) when you have to go ahead and urinate.
When you go ahead to do No. 2, just like you do at home, you sit down, you make sure you have a good seal and that’s important. The last thing we want to have is our commander seeing something floating around the cabin.

La única duda que me queda es, ¿Que pasará con los desechos solidos?..  los liberarán al espacio? y quedaran en órbita? Con los desechos líquidos (orina) se que ya existen sistemas de reciclaje (como el de la ISS, que instalaron hace un par de meses) para obtener agua a partir de ellos.

Despues de todo, nadie dijo que todo seria comodidad para un astronauta.

Via: Free Space

Google Chart API

En estos dias de arduo trabajo es muy reconfortante encontrar utilidades con las que sea posible trabajar de manera comoda y eficaz. Una de las tareas que desarrollamos en los ultimos meses es la generación de graficas dinamicas para un sitio web. Tras varios experimentos con JSChart e investigar con algunas otras tecnologías, dimos con una que se ajustó mas a lo que deseábamos. Esa utilidad (que fue la que nos sorprendió aquí en Amarello) es la API de Google Charts. Esta API, es la mas robusta y completa que encontramos para poder realizar gráficas dinámicas en un sitio web. La maravilla de esta API es su capacidad y su facilidad de manejo.

La idea básica consiste en generar las gráficas(imágenes) mandando los datos de ella por medio de parámetros GET a la API de Google en sus servidores. Esto desde un principio puede parecer una desventaja, pero esto también puede ser una gran ventaja según se vea. Todo se reduce a una etiqueta web de <img> que tiene como “src=” la API. por lo que el hacer una gráfica se reduce a un código HTML tan simple como el siguiente:

 <img src="http://chart.apis.google.com/chart?cht=p3&amp;chd=t:60,40&amp;chs=250x100&amp;chl=Hello|World" />

En el, podemos ver los parametros basicos que toda gráfica debe llevar como lo es el tipo de grafica, los valores, y el tamaño de la gráfica. Todos estos datos produce la siguiente imágen:

(más…)

Como acelerar iPhoto 09 en definitivo

Al tener en nuestra librería una gran cantidad de fotos, hace que nuestro iPhoto se alente de manera considerable y mas aun si estamos en el caso de haber pasado nuestra librería por distintas versiones de iPhoto sin hacer una depuración de la base de datos.

Lamentablemente cuando realizamos una actualización, no se hace esto de manera automática, desconocemos realmente el porque apple no se ha puesto las pilas, ni porque se nos habia comentado de esto.

La siguiente serie de comandos que puede ayudarnos a optimizar la base de datos:

  1. Abrimos la terminal, tecleamos cd espacio y arrastramos la carpeta del iPhoto de tal manera que quede asi:
    cd /Users/usuario/Pictures/iPhoto\ Library
  2. Una vez localizados en el directorio ejecutamos:
    for dbase in *.db; do sqlite3 $dbase “vacuum;”; done
  3. Esperamos a que termine, dependiendo del tamaño de nuestra base de datos, y listo.

El comando vacuum limpia la base de datos principal copiando su contenido a un archivo de base de datos temporal y este vuelve a cargar al final la base de datos original. Esto libera las paginas, sumando los datos de las tablas de manera contigua, logrando depurar la estructura de archivos de nuestra base de datos y mejorando el performance.

Recomiendo de sobre manera que se tomen los tiempos antes / después de:

  • Arranque del iPhoto,
  • Reconocimiento de caras.
  • Velocidad de apertura de events, faces y places.
  • Navegación de fotos
  • Edición de fotos

Ya que es impresionante la diferencia, ¿no me creen?, intentelo.

Desmitificando RSA de 1025 bits

Cuando se habla de RSA, se suele especular o fantasear sobre supuesta tecnología ultrasecreta que pudieran tener las agencias de seguridad de los gobiernos de naciones poderosas como Rusia, China o EEUU. Sobre todo se especula que los módulos de 1024 bits podría ya ser factorizables en tiempos razonables. Por lo que muchos, incluyéndome, se preguntan ¿entonces de cuántos bits debería generar mis llaves si mis temores fueran ciertos?

El NIST, la agencia encargada de definir los estándares tecnológicos para las agencias federales de EEUU, establece que la información con vigencia menor a 2010 debe usar al menos 1024 bits, con vigencia menor a 2030 deberá usar al menos 2048 bits y con vigencia mayor a 2030 deberá usar 3072.

Bruce Scheiner por otro lado en 2002 ratificó una tabla publicada anteriormente por él mismo en donde establece los bits recomendados según seas un individuo, una corporación o el gobierno. Ahí estipula que para 2005 los individuos ya deberían usar llaves de 1280 bits, y el gobierno ya debería estar usando 2048 bits.

Algunos más “inteligentes” que los anteriores, dicen que todos exageran, y recomiendan 1025 bits, razonando superfluamente que eso duplica la complejidad de la factorización. Ese razonamieto surge de pensar que el mejor algoritmo de factorización es por “fuerza bruta” sobre los posibles factores, probando todos los números entre 2^{511} y 2^{512}-1 para factorizar un módulo de 1024 bits, pues sus factores primos son de 512 bits.

La realidad es otra, y desde hace tiempo, desde Fermat de hecho, existen métodos sublineales de factorización de enteros respecto al tamaño del entero y los mismos algoritmos son subexponenciales respecto al número de bits del entero. Por lo que aumentar un bit la llave no es tan drástico como aumentarlo en otros algoritmos como AES, como no es tan drástico multiplicar por dos el tamaño del entero, pues eso no duplicaría el tiempo necesariamente. ¿Pero qué tanto aumenta el tiempo un bit más?

Criba General de Campos Numéricos (GNFS)

GNFS es el mejor algoritmo de factorización de enteros, conocido a la fecha, para enteros de 130 digitos al menos (que son aproximadamente 432 bits). En 2005 el algoritmo se utilizó para romper el récord de factorización RSA para un entero de 640 bits, hazaña que fue llevada acabo por un equipo de investigación alemán. Lo interesante de este algoritmo es su complejidad, y en base a ella voy a realizar algunos cálculos para esclarecer qué tan fuerte es aumentar un bit más a un módulo RSA.

La complejidad del algoritmo está dada por

O\left(\displaystyle e^{\displaystyle \left(c+o(1)\right)ln (n)^{1/3}ln(ln(n))^{2/3} }\right)

donde c es una constante dada por la heurística utilizada en el algoritmo y n es el número a factorizar (no los bits del número). Carl Pomerance, creador del segundo mejor método de factorización, indica que en este caso c = \left( {\frac{64}{9}}\right)^{1/3} . Por otro lado tenemos que o(1) es una función asintótica que tiende a cero, por lo que para los cálculos se va a considerar como cero, pues Pomerance así lo toma.

Teniendo eso, lo que se puede hacer ahora es calcular el tiempo del algoritmo para factorizar un número de 1024 bits y comprarlo respecto al tiempo para factorizar uno de 1025 bits. Por lo que vamos a denotar T_{1024} al tiempo de 1024 bits y T_{1025} al tiempo de 1025 bits.

Sabemos que un número de 1024 bits se aproxima a 2^{1024} y uno de 1025 bits a 2^{1025}, por lo que se van a tomar esas aproximaciones para simplificar la exponenciación. Tenemos entonces que

\displaystyle\dfrac{\displaystyle T_{1025}}{\displaystyle T_{1024}} = \displaystyle\dfrac {k e^{\displaystyle c (ln (2^{1025})^{1/3}ln(ln(2^{1025}))^{2/3}) } } {k e^{\displaystyle c (ln (2^{1024})^{1/3}ln(ln(2^{1024}))^{2/3}) }}

donde k es la constante de la notación asintótica.

Por lo tanto tenemos que

\frac{T_{1025}}{T_{1024}} = 1.0259

Que es muy poco. Pues si el gobierno de algún país contara con los recursos para romper un módulo de 1024 bits en 24 semanas (6 meses), entonces romper uno de 1025 bits les llevaría casi 25 semanas. Esto en el mejor caso, puesto que la complejidad del algoritmo está dada en notación O, así que el algoritmo podría comportarse aún mejor de lo estimado y ser más rápido.

Si hacemos lo mismo y comparamos un módulo de 1024 respecto a uno de 1280, tenemos que \frac{T_{1280}}{T_{1024}} = 447.43. Que es bastante decente, y suponiendo que se pudiera factorizar el módulo de 1024 en una semana, entonces tardarían 8 años y medio en factorizar el de 1280; lo que le da bastante más confiabilidad a ese módulo que a uno de 1025. Aunque un cálculo más correcto sería considerando una ecuación diferencial porque la capacidad de cálculo no va a permanecer 8 años igual, va a ir aumentando.

Pragmáticamente hablando

Seguramente alguno va a desconfiar de este análisis, y necesitará una prueba más terrenal, sin tanta matemática. En ese caso lo invito a bajar un paquete que tenga implementado el algoritmo y factorice un número de unos 450 bits, que se puede hacer en un tiempo bastante decente (unos minutos) y vaya aumentando de bit en bit, para comparar los tiempos. Implementaciones hay varias y se pueden encontrar en la página de la wikipedia sobre GNFS.

There are two kinds of cryptography in this world: cryptography that will stop your kid sister from reading your files, and cryptography that will stop major governments from reading your files.
- Bruce Schneier