Mostrando entradas con la etiqueta encripcion. Mostrar todas las entradas
Mostrando entradas con la etiqueta encripcion. Mostrar todas las entradas
Encriptar directorios con eCryptfs
Cuando uno transporta información sensible en medios removibles, o bien necesita resguardar los datos contenidos en su máquina, debe recurrir a algún sistema de encripción. Hasta hace un tiempo utilizaba TrueCrypt para realizar esta tarea, el cual es excelente, pero me interesé por probar algo más estándar y libre. Así fue como llegué a eCryptfs, un sistema que permite encriptar fácilmente directorios, que es lo que estaba necesitando. Además eCryptfs es POSIX-compliant, libre y se encuentra integrado en el kernel de Linux desde hace tiempo.

En este post les mostraré los pasos necesarios para instalar y utilizar eCryptfs. Mi configuración inicial se basó en el artículo How To Encrypt Directories/Partitions With eCryptfs On Debian Squeeze.

En debian y derivados existe un paquete de utilidades para utilizar ecryptfs, el cual se instala ejecutando:
  # apt-get install ecryptfs-utils
Otras distribuciones tienen paquetes similares, sólo hay que buscar el equivalente.

Encryptar un directorio es tan simple como montarlo utilizando el tipo ecryptfs:
  # mount -t ecryptfs /data/crypt /data/crypt

Cada vez que se monte el directorio, ecrypfs consultará cuáles parámetros utilizar:
1- Tipo de clave:
  1) passphrase
  2) tspi
  eCryptfs permite utilizar tanto passphrase como TSPI (TCG Service Provider Interface).
2- Algoritmo para cifrar:
  1) aes: blocksize = 16; min keysize = 16; max keysize = 32
  2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
  3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
  4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
  5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
  6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
3- Tamaño en bytes de la clave a utilizar:
  1) 16
  2) 32
  3) 24
4- Decidir si se permitirá utilizar archivos sin encriptar dentro del directorio (plaintext passthrough). En la gran mayoría de los casos se elige que no, a menos que exista alguna razón muy específica para no hacerlo.
5- Decidir si encriptar los nombre de archivos (filename encryption). Si no se desea que se pueda saber ni siquiera el nombre de los archivos contenidos en el directorio, debe seleccionarse sí en esta opción.
6- En el último paso se genera un "Filename Encryption Key (FNEK) Signature", el cual para un uso default (y avanzado también?) no es necesario cambiar.

Cuando se monta el directorio por primera vez, el sistema indicará que no encuentra el signature en la máquina y preguntará si desean almacenarlo. Si no se desea que cada vez que se monte el directorio el sistema pregunte esto, elegir que se almacene el signature.

Una vez montado el directorio, los archivos se acceden de la misma manera que cualquier otro archivo del filesystem. Si se desmonta, los archivos se ven con nombres codificados y no se pueden acceder.


eCryptfs también provee la posibilidad de automontar directorios o particiones editando fstab. Para hacerlo debe colocarse la passphrase en un archivo, el cual se utiliza como parámetro en las opciones de montaje. Algo interesante es que de esta forma se puede copiar el archivo con la clave en un pen drive, con lo cual se podrá acceder a los archivos utilizando el pen-drive. La forma de hacerlo está muy bien explicada en el HowTo de referencia.

Algo a destacar es que este tipo de encripción no protege completamente los datos. Como se observa en la imagen de arriba, si bien los nombres de los archivos no se ven, si se distingue entre directorios y archivos, y los atributos no cambian (fecha de creación, owner, etc). El simple hecho de contar con esta información puede ser suficiente en algunos casos.
Cómo descifrar un hash MD5 online
Aloe Vera
Este fin de semana me encontré con la necesidad de descifrar un password hasheado con md5. Para ello estuve a punto de utilizar el viejo y querido John the Ripper, pero un segundo antes se me ocurrió buscar alguna herramienta online que haga el trabajo por mí. Motivado por la vagancia, pero también para hacerlo más rápidamente (aprovechando la nube o rainbow tables), encontré buscando en Google este muy buen artículo: How to crack MD5 passwords online, el cual contiene una lista de servicios para reconstruir texto digerido mediante md5.
La mayoría de estos sitios utilizan rainbow tables (grandes tablas de hashes precomputados) con el objetivo de intercambiar tiempo de ejecución por memoria. De esta forma el resultado logrado es muy rápido (si es exitoso). Aunque también algunos utilizan diccionarios.

A continuación dejo la lista de servicios que realizan esta tarea. Les recomiendo que lean el artículo original, ya que el autor incluye una valuación de los mismos (calculada como la cantidad de hashes encontrados de un conjunto de 10):
www.tmto.org
md5.noisette.ch
md5decryption.com
www.c0llision.net
www.netmd5crack.com
www.md5decrypter.com
md5hashcracker.appspot.com
www.hashhack.com
isc.sans.edu
www.md5crack.com
passcracking.com
authsecu.com
md5.rednoize.com
md5.web-max.ca
www.cmd5.com
md5.thekaine.de
www.shell-storm.org
www.md5this.com
www.hashchecker.com
hashcrack.com
md5pass.com
md5pass.info

Cabe destacar que algunos de estos sitios incluyen una herramienta para generar hashes md5. No es recomendable utilizarlas para calcular hashes de nuestras contraseñas, ya que no sabemos si guardan los hashes que calculamos en sus bases de datos, lo cual las vuelve 100% crackeables ;)

Para lograr mi objetivo, tomé el primer servicio de la lista y obtuve el texto hasheado (admin1234) en 3.55 segundos. Lo que más me molestó fue que había probado sin éxito varias contraseñas, entre las que se encontraban 'admin', '1234' y 'admin123' pero no 'admin1234'!



Para finalizar, dejo un excelente artículo que explica cómo utilizar Google como password cracker (a esta altura creo que a Google le descubren más propiedades que al Aloe Vera). La justificación de esta técnica es que a veces los programadores incluyen hashes md5 en la URL (para ver la explicación detallada les recomiendo lean el artículo), lo que transforma a las bases de datos de Google en rainbow tables.


No me deja de sorprender la cantidad de tareas útiles que se pueden realizar utilizando Google, la mayoría de las cuales con propósitos o fines no pensados en un simple buscador. Es aquí donde uno toma conocimiento del verdadero poder y valor de la información.

Espero que les sirva!
Configurando una red inalámbrica hogareña
Luego de un período con grandes cambios a nivel personal, vuelvo a tener tiempo (y ganas) de escribir un artículo. En este caso para contar mis experiencias configurando mi red inalámbrica hogareña.

Para comenzar el desarrollo de la red hace falta conseguir lo más importante, que es el router inalámbrico. La marca/modelo a comprar depende del área a cubrir y el dinero que dispongamos. En mi caso opté por un router TP-LINK TL-WR340G ya que sólo me interesa cubrir mi departamento y es una opción super económica.

La configuración de este router es extremadamente sencilla: conectamos el cable de red de nuestro ISP al router; conectamos nuestra PC/Notebook (utilizando una IP fija 192.168.0.0/24) a una boca ethernet del router; y finalmente ingresamos por Web al router ingresando 192.168.1.1 en nuestro navegador.

La interfaz Web es muy intuitiva y haciendo unos pocos clics ya tenemos la red inalámbrica funcionando con DHCP. Lo más importante son dos cuestiones. La primera: dependiendo del servicio de Internet contratado, será necesario configurar PPPoE (Point-to-Point Protocol over Ethernet) para conectarse al ISP (con un nombre de usuario y contraseña otorgados por el proveedor). La segunda: habilitar la seguridad Wireless en el router (autenticación y encripción). A pesar de que WEP es mejor que nada, es un protocolo que posee varias debilidades, por lo tanto es altamente recomendable utilizar WPA/WPA2. Basta con seleccionar WPA-PSK (PSK: Pre-Shard Key, autenticación mediante clave compartida) en el router y utilizar una clave fuerte (formada por letras mayúsculas, minúsculas, números, símbolos y lo suficientemente larga).

Luego de configurar el router (la parte sencilla) la tarea de configurar los clientes no fue tan trivial.

El primer cliente fue una Notebook con Windows XP instalado de base con su placa de red inalámbrica funcionando correctamente. Para conectarlo a nuestra red simplemente hacemos clic derecho sobre el ícono del adaptador de red inalámbrico en la barra de tareas, luego clic en "Ver redes inalámbricas disponibles", luego seleccionamos nuestra red, clic en "Conectar" e introducimos la contraseña dos veces. Hasta acá muy fácil y bonito.

El siguiente cliente fue una Notebook con Ubuntu 9.04. Esta versión de Ubuntu ya incorpora los drivers para la placa de red Realtek RTL8187B y funciona correctamente. Pero los problemas comenzaron al tratar de conectarse a una red protegida con WPA. Ya sea utilizando el administrador de redes "network-manager" o "Wicd", la conexión se pierde luego de un corto lapso de tiempo. El error se repite una y otra vez. Luego de investigar un tiempo en Internet supe que se trata de un problema de autenticación (bastante común entre los usuarios de esta distro) entre gnome-keyring/Dbus/Network Manager. Para solucionarlo le otorgué permisos para utilizar adaptadores inalámbricos al usuario en cuestión desde el menú "System > Administration > Users and Groups". Luego de esto, utilizando Wicd, la red comenzó a funcionar "más o menos bien" aunque tarda mucho tiempo en detectar y conectarse a la red y sufre alguna desconexión esporádica.
La solución a implementar para que la red funcione perfectamente en este sistema operativo es la misma que describo más adelante para Slackware.

El próximo cliente fue una PC con Windows XP. Como no tenía un adaptador de red inalámbrico decidí comprar uno USB (la solución más económica y práctica para mis necesidades). Luego de conectar el dispositivo cometí el error de instalar los controladores directamente desde el disco compacto que incluía en la caja. Este instalador agregó un horrible manejador de redes inalámbricas en la barra de tareas que reemplazó al manejador de redes inalámbricas de Windows. Luego de la clásica reiniciada, el manejador no detectó ninguna red y no me permitió utilizar el de Windows. Por lo tanto tuve que desinstalar los controladores, reiniciar y comenzar de nuevo, esta vez utilizando el "Asistente para agregar hardware" en lugar del instalador del CD. Cuando se abre el asistente insertamos el CD y presionamos en "Siguiente". Luego de que Windows detecta los drivers que se encuentran en el CD, seleccionamos el driver de acuerdo a nuestra versión de Windows y continuamos con la instalación.
Una vez instalado el hardware utilizamos (previa reiniciada) el manejador de redes inalámbricas de Windows que se encuentra en la barra de tareas y nos conectamos perfectamente a nuestra red (esta vez sin utilizar el horrible manejador de redes incorporado en el CD del fabricante) como para el caso del primer cliente.

Luego de renegar con Windows y Ubuntu me puse el overol para aprender cómo funcionan las cosas de la mano de Slackware. La versión 13.1 instalada en la PC incorpora los drivers para el adaptador USB (utiliza el mismo chip Realtek RTL8187B de la notebook) por lo tanto la red inalámbrica funciona perfectamente.
Ya que vamos a conectarnos a una red inalámbrica con seguridad WPA, no basta con utilizar iwconfig para configurar el adaptador, es necesario utilizar wpa_supplicant. WPA Supplicant es el componente del protocolo IEEE 802.1X/WPA utilizado en las estaciones cliente. Implementa la negociación de claves con un autenticador WPA (en este caso nuestro router). Funciona como un demonio que se ejecuta en background y actúa como un componente back-end que controla la conexión wireless. En Slackware 13.1 viene incluido en la instalación base y en las distribuciones basadas en Debian lo provee el paquete wpasupplicant.
wpa_supplicant toma la configuración de las redes inalámbricas con seguridad WPA desde el archivo /etc/wpa_supplicant.conf. Para agregar una red en este archivo se utiliza el comando wpa_passphrase con el SSID de la red como parámetro:

$ wpa_passphrase myssid


Este comando lee la clave compartida de la red WPA (la misma que ingresamos en el router) por la entrada estándar y genera la clave encriptada para almacenar en el archivo /etc/wpa_supplicant.conf (para no tener que escribir la contraseña cada vez que nos conectamos a la red). Copiamos la salida de wpa_passphrase y la pegamos al final del archivo /etc/wpa_supplicant.conf.
Luego de estos pasos podemos conectarnos a la red inalámbrica:

# iwconfig wlan0 essid "myssid"
# ifup wlan0
# wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf
# dhcpcd wlan0


El cliente WPA Supplicant es bastante vervoso e imprime por salida estándar todos los pasos durante la autenticación con el AP. Luego podemos verificar que la red haya tomado una dirección IP desde el AP utilizando el comando ifconfig.

Parece una tarea tediosa, pero el aprendizaje es invaluable y la red funciona excelentemente.

Aunque si no desean escribir estos 4 comandos cada vez que se conecten a la red, en Slackware pueden agregar un script en /etc/rc.d que lo haga automáticamente o en las distribuciones basadas en Debian pueden editar el archivo /etc/network/interfaces:

auto wlan0
iface wlan0 inet dhcp
up wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -Bw
down killall wpa_supplicant


La opción -B pone el demonio wpa_upplicant en background y la opción -w le indica que no haga anda hasta que la interfase esté levantada.

Luego de esta tarea tengo mi red inalámbrica funcionando en perfectas condiciones. A aquellos usuarios de Linux espero que les sirva la info y a los de Windows, bueno... nadie es ferpecto.

Saludos!


P.S.: Perdón por las screenshots!


Referencias:

  • http://hostap.epitest.fi/wpa_supplicant/
  • http://www.enterprisenetworkingplanet.com/netsecur/article.php/3594946/Linux-on-Your-WLAN-Configure-WPA.htm
Encriptar y Desencriptar con GPG por linea de comandos
Si bien existen GUIs como kgpg para realizar el trabajo de encripción y desencripción de archivos, muchas veces es más rápido realizarlo utilizando la línea de comandos. También es útil conocer el comando en caso de necesitar un script en bash o algún otro lenguaje.

Hoy me vi forzado a leer el manual de GPG para poder realizar este trabajo (siempre utilizaba kgpg...), y como me resultó muy interesante, quería compartirlo con ustedes.

Para el que no tenga idea de qué trata GPG (Gnu Privacy Guard), les comento que es la alternativa libre a PGP (Pretty Good Privacy). Tanto PGP como GPG son herramientas que proveen encripción simétrica, asimétrica y firma digital. La idea de este post no es explicar GPG ni criptografía, así que si les interesa, pueden arrancar leyendo las respectivas entradas en wiki.

Vayamos al grano. Supongamos que ya tengo incorporadas las claves públicas de las personas a las que deseo enviar archivos encriptados y que ya generé mi propio par de claves (pública y privada). Si todavía no generaron su par de claves, pueden hacerlo con el comando interactivo:
$ gpg --gen-key
Si todavía no importaron la clave pública del destinatario, pueden hacerlo utilizando:
$ gpg --import pepito.asc
Ya con las claves necesarias, veamos el comando para encriptar un archivo:
$ gpg -sev -r pepito -o prueba.gpg archivo.txt
-s indica que firmaremos el archivo, -e indica que se debe encriptar, -v para que la salida sea verbosa, con -r indicamos el receptor (puede ser alguno de los nombres, o el e-mail), y -o indica cómo se llamará el archivo de salida. A continuación de las opciones, colocamos el archivo de entrada (el que deseamos encriptar), en mi caso llamado archivo.txt
Una vez ejecutado el comando, gpg nos pedirá la passphrase de la clave privada para poder firmar el archivo de salida. No es necesario firmar el archivo cuando encriptamos, pero lo agregué para que el ejemplo quede más completo.

Si deseamos utilizar la passphrase en el mismo comando, para evitar que el comando sea interactivo y así utilizarlo en un script en bash (o lo que sea), podemos utilizar el parámetro --passphrase-fd 0, donde 0 indica que lea la passphrase de la standar input:
$ echo "passphrase" | gpg -sev -r pepito -o prueba.gpg --passphrase-fd 0 archivo.txt
donde con echo "passphrase" pasamos la passphrase que protege la clave privada.

Muy bien, ya sabemos encriptar. Veamos ahora qué comando ejecutar para realizar la desencripción de un archivo. Esto es tan simple como ejecutar:
$ gpg -o salida.txt input.gpg
al ejecutar el comando, gpg nos pedirá nuevamente la passphrase de la clave privada para poder desencriptar. Si bien no es necesario, agregué la opción -o para indicar cómo llamar al archivo de salida.

Si deseamos utilizar la passphrase en el mismo comando y no tener que colocarla de forma interactiva, nuevamente podemos usar el parámetro --passphrase-fd 0 y un echo:
echo "passphrase" | gpg --passphrase-fd 0 -o salida.txt input.gpg

Como ven, para nada difícil el manejo de GPG por línea de comandos. El problema siempre es acordarse los parámetros, algo que con la GUI es mucho más simple.
Espero que les sea de utilidad y puedan utilizarlo de aquí en adelante.


Referencia
- Linux / Unix Command: gpg