Author Archives: admin

Recuperar la clave de cifrado de un disco duro congelando la memoria RAM

Lo he visto primero en Kriptopolis y luego en Quands.cat, este experimento realizado en la Universidad de Princetown demuestra cómo pueden extraerse las claves de cifrado de un dico duro congelando la memoria DRAM.

Entendemos que, para poder cifrar/descifrar los datos de un disco duro mientras el ordenador está en uso, la clave de cifrado debe estar en la memoria RAM. También damos por supuesto que este tipo de memoria pierde completamente sus datos cuando apagamos el ordenador. No electricidad, no datos. Pues bien, en realidad los datos de la memoria DRAM se mantienen unos segundos, hasta que los condensadores vuelven a su estado oiriginal. Pero a menos temperatura, más se va a alargar este proceso. Estos investigadores han demostrado que congelando la memoria, los datos pueden mantenerse los minutos suficientes como para volcar la información a un disco externo. Luego ya con calma, se puede buscar entre esta información la clave de cifrado del disco duro de la máquina, o cualquier otra cosa que estuviese en memoria en el momento de apagar el ordenador.

En estos experimentos se han recuperado claves de BitLocker (Windows), FileVault (Mac), dm-crypt (Linux, el que uso yo en mi máquina :D ) y TrueCrypt (Windows, Mac y Linux). Se puede ver todo de forma bastante clara en la sección de vídeos e imágenes de la página. Incluso hay un documento PDF explicativo de veintipico páginas.

Estos tipos tan simpáticos, que parecen sacados de un capítulo de It Crowd, son los coautores del experimento. Hay mucha más información en la página web que han creado:

El creador de Tetris contra el software libre

Pues le diré mi opinión sobre el software libre: eso nunca debería haber existido y a día de hoy no debería existir. Y le diré por qué: el software libre destruye mercado. Allí donde con el esfuerzo de grupos de personas se construyen posibilidades de mercado, de riqueza y de prosperidad, llega gente irresponsable y crea desarrollos alternativos que hunden a las empresas. Y eso no es bueno para el desarrollo de la tecnología; el software libre no tiene proyección de mercado, no crea riqueza, sólo es una muestra de rebeldía estéril.

[...]

Se lo diré más claro: el software libre pertenece a un estado mental rebelde, algo adolescente y nihilista que no lleva a ningún sitio. Me sucedió a mí con el Tetris; yo lo creé y como no había posibilidades de hacer nada con el juego, se lo pasé a mis amigos despreocupadamente.

Alexey Leonidovich Pazhitnov, creador del mítico Tetris

Como aclaración final… esta persona ha trabajado para Microsoft de 1991 a 2005. En todo caso, curiosa su opinión :D

Diferencias entre locate, slocate, mlocate y rlocate

Analizamos estos cuatro programas de GNU/Linux que sirven exactamente para lo mismo (buscar archivos en el disco) y que se usan casi de la misma forma.

Ejemplo de uso, buscamos el archivo sshd_config en todo el sistema de ficheros:

$ locate sshd_config

/etc/ssh/sshd_config

/usr/man/man5/sshd_config.5.gz

LOCATE

El comando locate se usa para buscar archivos en el disco duro. A diferencia del comando find, que es increíblemente potente, locate sólo puede hacer búsquedas simples por nombre de archivo. A cambio de sus limitadas posibilidades, locate es rápido, muy rápido. El truco está en que no busca a lo largo del disco duro como hace find, sinó que busca en una base de datos propia. Esta base de datos es actualizada por el programa updatedb.

Cuando ejecutamos updatedb, esta base de datos se actualiza. Si hacemos cualquier cambio en los archivos (crear, borrar, mover, etc) y después buscamos algo con locate, este va a buscar en una base de datos que no se corresponde exactamente al estado actual del disco. Es por esto que la mayoría de distribuciones de GNU/Linux ejecutan updatedb de forma automatizada (usando cron) de forma periódica, pero la búsqueda puede no ser perfecta a no ser que usemos el comando updatedb justo antes de usar el comando locate.

El primer problema que tiene locate es que updatedb tarda bastante en recorrer el disco duro. El segundo, mucho más grave, es que si existe una base de datos de todos los archivos del disco y esta puede ser consultada por los usuarios, estos pueden conocer el contenido de los directorios a los que no tienen acceso.

Los comandos locate, updatedb y find (entre otros) són parte del paquete findutils de GNU.

SLOCATE

Ya hemos visto los problemas de seguridad que nos encontramos al guardar una base de datos de los archivos en disco si esta puede ser libremente consultada. Slocate (o Secure Locate) viene a solucionar este problema. La gracia está en que cuando se ejecuta updatedb, la base de datos no guarda sólo el nombre de los archivos, sinó que añade los permisos (propietario, grupo, etc). De esta forma, slocate sólo muestra al usuario la información adecuada, la de los archivos a los que tiene acceso.

MLOCATE

En slocate vemos que el problema de seguridad está solucionado, ahora vamos a conocer mlocate (o Merging Locate) que además de implementar la misma solución (está basado en slocate), soluciona el grave problema de velocidad del comando updatedb. Lo que hace mlocate cuando ejecutamos updatedb no es crear una base de datos entera de todos nuestros archivos, sinó guardar sólo las diferencias a la base de datos original, por lo que updatedb es mucho más rápido si han habido pocos cambios.

RLOCATE

Aquí vamos a dejar de lado la tradicional idea de ejecuto updatedb, luego busco. Pero también dejamos de lado la simpleza de los programas anteriores. Rlocate consta, además, de un módulo para el kernel y de un daemon, todos bajo el mismo nombre. Estos son necesaros para que la base de datos se actualize sóla y no necesitemos usar updatedb. A medida que vamos creando/eliminando archivos en el sistema, rlocate crea bases de dafos diferenciales en tiempo real. Sólo vamos a usar updatedb para optimizar la base de datos. Parece ser la mejor solución, el único problema es el propio hecho de estar cargando un módulo y un daemon sólo para poder buscar archivos, la mayoría de la gente prefiere la simpleza de usar slocate o mlocate.

Una vez analizados los cuatro, está muy claro que ganan mlocate y rlocate, el uso de uno u otro dependerá de las ganas de complicarse preparando el sistema para que funcione rlocate (que tampoco hay para tanto) o si preferimos la simpleza de instalar y usar. Aunque en realidad lo normal es no molestarse mucho con el tema y usar lo que incluya nuestra distribución, que con toda probabilidad va a ser slocate o mlocate.

itask module para e17: mucho más que una barra de tareas

El proyecto itask-module proporciona distintos módulos para añadir funcionalidades a Enlightenment DR17. De momento consta de tres módulos independientes: Itask (barra de tareas), Itask NG (dock al estilo de Mac OSX con efecto zoom, podéis verlo en la imagen lateral de este artículo) y Winlist NG (lista de ventanas en formato icono), que son los que examino en este artículo. Pero en la sección Experimental Stuff de la página web del proyecto descubrimos Ecomorph, del que ya hablé en este blog hace algunos días.

Itask

Este módulo es el que dá nombre al proyecto y es en realidad el menos interesante. Se trata de una barra de tareas basada en el módulo ibox de e17. Permite minimizar aplicaciones, cambiar a una aplicación situada en otro escritorio, y el resto de cosas típicas que ofrecen las barras de tareas.

Quizás lo más llamativo es el soporte para drag’n'drop entre Itask y el paginador de escritorios, pues permite arrastrar aplicaciones de la barra de tareas al paginador. Me explico con un simple ejemplo: estamos situados en el escritorio 2, Firefox está en el escritorio 1, clicamos dentro de Firefox en la barra de tareas Itask y lo arrastramos hasta el escritorio 3 del paginador de e17 y… ¡funciona! Ahora Firefox está en el escritorio 3.

Itasn NG

Esto es lo más bonito y mejor ;) . Aunque viendo esta imagen lateral ya véis de qué va la cosa. Es un lanzador de aplicaciones al estilo Mac OSX. Me explico, contiene por una parte los iconos de las aplicaciones que más usamos, intentando con esto ser un precioso sustituto al ya de por sí bonito ibar de e17.

Pero además puede añadirse una especie de barra de tareas siguiendo la misma estética de iconos. Si hacemos clic con el botón derecho a una de las aplicaciones iconificadas podemos, entre otras cosas: cerrarla, minimizarla y maximizarla.

Está basado en el ya mítico engage, proyecto que en su dia intentó sustituir a ibar añadiendo soporte para systray entre otras cosas, pero que dejó de desarrollarse y no funciona en las actuales versiones de e17.

Winlist NG

Este módulo es parecido al winlist original pero le añade funcionalidades. Por ejemplo podemos decidir si al hacer clic a una aplicación esta se muestra en su escritorio original o en el que estamos usando en este momento. También añade configuración de teclas para acciones concretas, por poner un ejemplo: si pulsamos la letra ‘w’ nos va a mostrar sólo las aplicaciones que són del mismo tipo que la que tenemos seleccionada, (si estamos en una xterm nos muestra las demás xterms).

Enlightenment Logo

Muchos prueban Enlightenment DR17 sólo porque es bonito y se asustan al usarlo, luego vuelven a su KDE, XFCE o Gnome sin saber en realidad lo que se están perdiendo. Los desarrolladores de e17 están haciendo todo lo posible para que no se parezca en nada a los escritorios tradicionales y realmente lo están consiguiendo. Enlightenment tiene personalidad, pero quizás demasiada. Tiene tanta personalidad y es tan diferente que rompe con algunos de los pilares básicos que sostienen a los escritorios actuales. Para toda esa gente que no se siente cómoda con esto pero le sigue gustando Enlightenment DR17 por algún motivo, tenemos a Itask, Itask NG y Winlist NG, que son módulos completamente no-oficiales pero no por esto dejan de ser una pasada.

Ecomorph: composite en e17 basado en Compiz

Ecomorph proporciona efectos de composite (tipo Compiz Fusion, Kwin, Beryl, etc) a Enlightenment DR17. De hecho está basado en Compiz, pero creo entender que a diferencia de este, Ecomorph sólo proporciona los efectos de composición, por lo que no és un gestor de ventanas en sí mismo. Esto hace que se pueda dotar a e17 de efectos de transparencia real, animaciones de minimizado/maximizado, exposé, cubo 3D y otros tantos.

El proyecto se encuadra dentro de las nuevas funcionalidades del cada vez más conocido Itask Module para Enlightenment DR17, esto me hace pensar que de allí puedan salir otros proyectos interesantes que hagan de E17 una shell de escritorio mejor. Casualmente hace algunas semanas que he vuelto a Enlightenment (otra de mis idas y venidas entre E y KDE) por lo que esta noticia me parece… bbfffff no hay palabras en realidad.

Tengo que ser sincero y avisar que no me ha dado tiempo de probar Ecomorph por mí mismo, aunque estoy deseándolo, de todas formas este es un proyecto muy verde a estas alturas. Si logro que funcione haré alguna review, de mientras podéis descargar el vídeo que ha colgado jeffdameth, su desarrollador. Si preferís visualizar el vídeo usando software privativo, podéis buscar ecomorph en youtube.

Me enteré de la existencia de Ecomorph llegando de rebote a la bitácora de Malpy

[Actualización]
Otra forma de usar efectos de composición en Enlightenment DR17 es usando el módulo bling, que aporta lo mínimo pero es perfectamente funcional. En concreto, usando bling podemos usar sombras reales (las nativas de e17 sólo afectan al fondo de escritorio y no a las aplicaciones), fade in/fade out para las ventanas, y transparencia real en las ventanas, la ventana actual es opaca y el resto semi-transparentes. Yo lo estoy usando ahora mismo y funciona sin problemas.

[Actualización 2]
Acabo de escribir un artículo sobre itask-module, que es el proyecto padre del que surge Ecomorph.

Cómo unir varios documentos PDF, extraer páginas y mucho más

Una amiga me comentaba hace unos días la necesidad de crear un documento en PDF a partir de muchos documentos PDF sueltos, tenía que entregar un trabajo en PDF y lo tenía hecho página por página. Busqué por internet y encontré una solución simple: una utilidad llamada PdfTk que es libre (GPL) y multiplataforma (funciona en GNU/Linux, FreeBSD, Solaris, Mac OS X y Windows), y además nos permite hacer muchas más cosas, aquí la lista:

  • Unir distintos PDFs en uno solo
  • Dividir un PDF para extraer sus páginas
  • Rellenar formularios PDF
  • Extraer los metadatos
  • Extraer los archivos adjuntos de un documento PDF
  • Reparar PDFs corruptos cuando es posible
  • Cifrar/descifrar documentos mediante contraseña
  • Aplicar una marca de agua al fondo del documento
  • etc

Este programa funciona en línea de comandos (hay una GUI que no es oficial y que yo no he probado). Lo que viene a continuación son algunos ejemplos prácticos de las opciones que yo he probado, que són las más básicas, lo demás lo probaré el dia que lo necesite:

Unir distontos documentos PDF en un documento PDF final:

$ pdftk doc1.pdf doc2.pdf doc3.pdf cat output doc-unido.pdf

También podríamos usar comodines (*, ?, [a-z], etc), este es el ejemplo más sencillo:

$ pdftk doc?.pdf cat output doc-unido.pdf

Incluso podemos usar variables, esto es tremendamente útil si lo usamos en scripts o si el comando se vuelve realmente largo. Además nos permite seleccionar páginas concretas de cada documento. En el siguiente ejemplo crearemos un documento combinado que contendrá las 3 primeras páginas de doc1.pdf, las 2 primeras de doc2.pdf y la cuarta de doc3.pdf:

$ pdftk  A=doc1.pdf B=doc2.pdf C=doc3.pdf cat A1-3 B1-2 C4 output doc-combinado.pdf

Podemos usar este sistema para invertir las páginas de un documento, en este caso supondremos que doc1.pdf tiene 5 páginas:

$ pdftk A=doc1.pdf cat A5-1 output doc1-inverso.pdf

Incluso podemos extraer por separado todas las páginas de un PDF. Este comando crea archivos con nombres pg_01.pdf, pg_02.pdf, etc… y otro archivo llamado doc_data.txt con los metadatos del PDF en nuestro directorio actual.

$ pdftk doc1.pdf burst

Si sólo queremos extraer los metadatos del documento, como por ejemplo el programa que se usó para crear el PDF, la fecha de creación, autor, número de páginas, etc podemos usar el parámetro dump_data:

$ pdftk doc1.pdf dump_data output metadatos.txt

Esto sólo es el principio, no olvidéis consultar la página man para más información, podéis ojearla online. Espero que os haya sido de utilidad.

Distribuciones de FreeBSD

A diferencia de GNU/Linux, FreeBSD no es un puzzle que necesite de un distribuidor que lo monte y lo empaquete, creando así cientos de sabores distintos de un mismo sistema (distinto software por defecto, distinto instalador y distinta forma de administrar y actualizar el sistema). FreeBSD es un sistema operativo completo y proporciona no sólo un núcleo sinó el conjunto de funcionalidades que componen el sistema.

De todas formas, pese a existir una distribución central y oficial que llamamos FreeBSD, también hay distribuciones derivadas de él, que aunque normalmente no tan conocidas, están pensadas para situaciones muy concretas y ofrecen una alternativa al FreeBSD original.

La diferencia principal, si es que queremos compararlas con las distribuciones de GNU/Linux, es que FreeBSD de por sí ya tiene un sistema para compilar, instalar, desinstalar, actualizar aplicaciones, el sistema de ports y packages. Por lo que, aunque algunas de las distribuciones de FreeBSD ofrezcan sistemas alternativos de hacer lo mismo, siguen siendo compatibles con el sistema tradicional de administración de este sistema operativo. Comparar una distribución de FreeBSD con el FreeBSD original es más parecido (a efectos prácticos) a comparar Ubuntu con Debian, por poner un ejemplo.

Lo que sigue es una lista de las distribuciones de FreeBSD que he encontrado, puede que se me haya colado algo que no es una distro sinó más bien algo “basado en”. La mayoría de la información la he sacado de Wikipedia, VivaBSD, Distrowatch y de las respectivas páginas web de cada proyecto. Si encuentras errores pon un comentario y lo modifico:

Lista de distribuciones:

  • FreeBSD: Sistema operativo basado en 4.4BSD-Lite para i386, amd64, ia64, pc98, alpha, ppc, sparc64, arm, mips, sun4v y xbox
  • DesktopBSD: Sistema de escritorio y LiveCD/DVD basados en FreeBSD y KDE. Incluye instalador gráfico y las DesktopBSD Tools, un conjunto de herramientas para hacer mas fácil la administración del sistema. Estas herramientas pueden también instalarse en FreeBSD mediante el sistema de ports sin instalar DesktopBSD directamente.
  • PC-BSD: Al igual que DesktopBSD, tiene instalador gráfico y viene configurada con KDE. Su característica principal es el sistema PBI (que significa Pc-Bsd Installer y a la vez Push-Button Installer), un sistema propio de instalación de paquetes que permite instalar los programas sólo bajando el fichero *.pbi y clicando en él, este fichero contiene la aplicación y sus dependencias.
  • FreeSBIE: Es un LiveCD de FreeBSD. Los objetivos de este proyecto son; en primer lugar desarrollar un conjunto de programas para crear CD’s personalizados, en segundo lugar crear distintas versiones (ISOs) pensadas pera usos distintos.
  • RoFreeSBIE: Es un LiveDVD/CD creado con los scripts de FreeSBIE mencionados antes. Incluye el instalador de DesktopBSD, escritorio KDE, soporte para wireless, etc. No hay ningún tipo de modificación en /etc/rc.d ni en ningún fichero de /etc respecto al FreeBSD original.
  • HamFreeSBIE: LiveCD basado en FreeSBIE con herramientas para operadores de radio amateur.
  • TrueBSD: Este es un LiveDVD/CD de propósito general, basado en FreeBSD 7. Este mes van a sacar una versión con KDE4.
  • Frenzy: Este LiveCD de 200MB (con posibilidad de usarse en un pendrive o desde una imagen en el disco duro) incluye herramientas de seguridad y análisis forense.
  • GuLIC BSD: LivCD de FreeBSD realizado por el grupo Gulic (Grupo de Usuarios de Linux de Canarias). El proyecto está abandonado.
  • The Dark Star: Otro LiveCD, este está basado en FreeBSD 6, con los scripts /etc/rc.d de FreeSBIE y creada, como se comenta en las FAQ, a partir del sistema Linux Live Scripts de SLAX.
  • BSDeviant: El proyecto parece que está muerto. Era un LiveCD de 210MB basado en FreeBSD y con Fluxbox como gestor de ventanas.
  • m0n0wall: m0n0wall es un firewall basado en una versión reducida de FreeBSD pensado para sistemas embebidos o PCs compatibles. La imagen puede cargarse en una tarjeta Compact Flash o en un LiveCD. Lleva un servidor web (thttpd) y toda su configuración se realiza mediante web. Los scripts de inicio han sido sustituidos por scripts PHP.
  • pfSense: Basada en m0n0wall, pfSense difiere de ella en algunos aspectos. Usa pf, el Packet Filter del proyecto OpenBSD, e incluye muchas otras características adicionales.
  • FreeNAS: Es un NAS (Network-Attached Storage) basado en m0n0wall. Soporta Samba, FTP, NFS, AFP, RSYNC, protocolos iSCSI, S.M.A.R.T., autenticación local de usuarios, RAID (0,1,5) por software, etc. Todo se configura via web. Ocupa menos de 32MB y está pensada para usarse en una Compact Flash, pendrive, LiveCD o disco duro tradicional.
  • NetBoz: Este proyecto, por lo que se puede leer en su página web, está congelado y muerto. Era un LiveCD usado como firewall.
  • miniBSD: El proyecto miniBSD desarrolla un conjunto de scripts que tienen como objetivo encoger al sistema FreeBSD ya instalado (binarios, librerías, archivos de configuración, etc) en una pequeña imagen de unos 15MB aproximadamente. Esta imagen puede usarse como sistema FreeBSD en un pendrive u otros dispositivos flash, así como para crear routers, firewalls, etc.
  • PicoBSD: Versión de FreeBSD 3 del tamaño de un disquete, arranca sin necesidad de disco duro y se carga en memoria, del mismo modo que lo haría un LiveCD. Existen 3 versiones distintas (todas incluidas en un sólo disquete) pensadas para usos distintos: Dialup, Networking y Router.
  • PenBSD: Imagen para instalar en un pendrive bootable, ocupa unos 20MB y fué obra del proyecto FreeSBIE.
  • ClosedBSD: Es un firewall basado en el kernel de FreeBSD, se ejecuta desde un disquete y tiene un sistema de reglas propio para el firewall con una interfície de configuración en ncurses.
  • Debian GNU/kFreeBSD: Esto no es exactamente una distribución de FreeBSD, es un sistema operativo llevado a cabo por el proyecto Debian, usa el kernel de FreeBSD modificado para funcionar con las librerías de GNU. El resto es un sistema Debian con sus respectivos repositorios, etc. También hay una versión con el kernel de NetBSD. Añadir que aún hay cosas en el sistema que no son plenamente compatibles, por lo que no hay ningún anuncio oficial.
  • Ging: Acrónimo de Ging Is Not Ging, es un LiveCD basado en Debian GNU/kFreeBSD.
  • Gentoo/FreeBSD: El nombre lo dice todo, pero a diferencia de Debian GNU/kFreeBSD, que usa el userland de GNU, el proyecto Gentoo/FreeBSD espera proveer un sistema FreeBSD completo, pero siguiendo los principios de Gentoo. Incluye el sistema init de Gentoo y todas sus herramientas de administración. El proyecto está estancado desde hace un año debido a un problema de incompatibilid de licencias entre BSD y GPL en el paquete libkvm.

Aparte de las distribuciones de FreeBSD, hay otros sistemas operativos basados en él. Algunos son libres y otros son privativos. Por ejemplo: DragonFly BSD es otro BSD libre que partió del código de FreeBSD 4.8, MidnightBSD fué un fork de FreeBSD 6.1 y esperan crear un sistema usable para escritorio, Darwin está basado en FreeBSD y es el núcleo de MAC OSX desde 1999, JunOS es el sistema operativo que usa Juniper Networks, AsyncOS es el de IronPort, IPSO es el de Nokia, etc.

Transferencia encriptada de archivos mediante SCP

SCP (Secure Copy) es un programa que viene con la mayoría de instalaciones de SSH y que nos permite transferir archivos entre 2 máquinas de forma encriptada. Su uso es muy simple, pero hay que tener en cuenta que nuestro host debe tener el cliente SSH instalado y el host remoto debe tener el servidor SSH habilitado.

Copiar un archivo de nuestro ordenador a un ordenador remoto:

$  scp archivo.tgz usuario@host_remoto:/ruta/remota/

Se nos pedirá la contraseña de ‘usurio’ en ‘host_remoto’ y se procederá a la transferencia del archivo hacia ‘/ruta/remota/’ si es que ‘usuario’ tiene permisos de escritura en esa ruta.

Copiar un archivo de un ordenador remoto a nuestro ordenador:

$ scp usuario@host_remoto:/ruta/remota/archivo.tgz /ruta/local/

También se nos pedirá la contraseña de ‘usuario’ en ‘host_remoto’ y se procederá a la transferencia del archivo hacia ‘/ruta/local’ si es que nuestro usuario tiene permisos de escritura en esta ruta.

En cualquiera de los dos casos, si el puerto TCP del servidor SSH no es el 22 (por defecto siempre es el 22) tendremos que especificarlo con el parámetro -p <número_de_puerto>.