12 jun 2010

Mejorar la seguridad y privacidad en Firefox

A la hora de hacer uso de internet nuestra principal herramienta es el navegador y como toda herramienta a la hora de mantener nuestra seguridad es esencial una buena configuración y puesta a punto. Si le dedicamos unos pocos minutos a nuestro navegador podemos aumentar nuestra seguridad y privacidad a la hora de navegar, aunque ninguna de estas acciones pueden substituir al sentido común cuando nos encontramos con algún posible peligro. Por ello vamos a ver una serie de consejos y extensiones que nos ayudarán en nuestro objetivo de mejorar la seguridad y privacidad en Firefox:

  • Mantener el navegador actualizado: es necesario actualizar el navegador cuando surjan nuevas actualizaciones de seguridad.
  • Usar constraseña maestra: aunque la opción de guardar nuestras contraseñas es una de las opciones más cómodas a la hora de navegar, también constituye un gran problema de seguridad si nos dejamos la sesión abierta de forma que algún sujeto malintencionado pueda acceder a nuestro equipo. Para evitar un acceso completo a todas las contraseñas guardadas en Firefox es muy aconsejable activar la contraseña maestra en Editar > Preferencias > Seguridad. Al activar esta opción cada vez que accedamos a las contraseñas almacenadas se nos pedirá esta clave para poder acceder a ellas.
    También es recomendable marcar el resto de opciones de seguridad : advertir al instalar complementos, bloquear sitios atacantes y bloquear sitios falsificados.
  • Mantener los plugins actualizados: es imprescindible actualizar cuando sea necesario los plugins de Firefox pues algunos, como el plugin de Flash, son verdaderos dolores de cabeza en cuanto a la aparición de fallos de seguridad. Podemos comprobar el estado de nuestros plugins en la página Plugin Check de Mozilla, accediendo desde el enlace o bien Herramientas > Complementos > Plugins > Buscar Actualizaciones.
  • NoScript: NoScritp bloquea JavaScript, Java y otros plugins en los sitios que no hallamos agregado a la lista blanca de la extensión y también nos protege contra ataques XSS. Aunque resulte un poco pesado de usar al principio, esta extensión supone una gran mejora en nuestra seguridad, el esfuerzo merece la pena.

  • BetterPrivacy: BetterPrivacy elimina las cookies que utiliza flash, una especie de super-cookies que no expiran, sin límite de tamaño y que no son borradas con el resto de cookies por el navegador.
  • FFHardener: esta aplicación fortifica la configuración de Firefox en tres aspectos:
    1. Fuerza el uso de algoritmos criptográficos más fuertes.
    2. Deshabilita capacidades de JavaScritp potencialmente peligrosas.
    3. Elimina el historial y el caché web.
    Aquí está la página del proyecto y tenéis más información en la muy recomendable página de Security By Default.
  • Locationbar: Locationbar destaca la parte del dominio en las url en la barra de direcciones, facilitando así la identificación de ataques por spoofing o suplantación.

  • Ghostery: Ghostery nos informa de los sitios que se dedican a registrar nuestra navegación en internet, permitiéndonos bloquearlos. Si lo usamos junto a Noscript debemos tener en cuenta que es muy posible que se solapen pues una de estas extensiones podría bloquear el contenido permitido en la otra.

  • [Actualización 18-06-10] Https-everywhere: Https-everywhere es un proyecto conjunto de la Electronic Frontier Foundation y de The Tor Project, la extensión nos redirige a los servicios HTTPS de las páginas web con este servicio disponible. Evitando de esta forma la posible intercepción de nuestros datos. También es posible crear nuestras propias reglas como se explica en la página del proyecto.

9 jun 2010

Como arreglar un conector RJ45 roto

Vía Hackaday encontré este ingenioso hack para reparar un conector RJ45 (conector para cable ethernet) al que se le ha roto la pestaña, usando una presilla y un cúter.

Este truco es una gran avance para poder reparar el típico cable de red que no hace más que soltarse del ordenador sin tener que recurrir a cortar y volver a crimpar. He de confesar que este manual me habría salvado el día en más de una ocasión.

Aquí tenéis el enlace al manual creado por laxap, un digno sucesor de MacGyver.

6 jun 2010

Instalar Burg en Ubuntu 10.04

Burg es un nuevo gestor de arranque basado en Grub. Sus principales ventajas son su aspecto gráfico, muy mejorado con respecto a grub2 y un sistema de menús y temas muy potente, siendo más sencillo de configurar que grub2. Personalmente encuentro la configuración de grub2 bastante caótica en cuanto a fondos y aspecto, por lo que burg me parece un gran avance en este sentido.



Para instalar burg en Ubuntu 10.04 debemos seguir los siguientes pasos:

  1. Agegar el repositorio de burg a nuestra lista de repositorios:
    sudo add-apt-repository ppa:bean123ch/burg
  2. Actualizar la lista de repositorios:
    sudo apt-get update
  3. Instalar el paquete burg:
    sudo apt-get install burg
  4. Configurar el paquete: nos aparecerá una serie de pantallas para establecer la configuración de burg.
    • La primera nos pregunta por las opciones predefinidas para los kernel, por defecto no contiene nada.
    • La segunda pantalla nos pregunta por los parámetros para lanzar los kernels. Por defecto es quiet splash aunque si tienes un portátil, como es mi caso, puede ser necesario agregar la opción acpi_osi=Linux para que funcionen las teclas de función.
    • La cuarta pantalla nos pregunta donde se instalará el gestor de arranque, por defecto en el MBR del primer disco /dev/sda.
  5. Actualizar burg:
    sudo update-burg

Para cambiar la configuración de burg editamos el fichero /etc/default/burg. Las opciones más interesantes son GRUB_GFXMODE que nos permite establecer la resolución en el formato ANCHOxALTOxBITS_COLOR, pudiendo establecer varias separadas para que en el caso que fallará una poder cargar la siguiente, por ejemplo GRUB_GFXMODE=1024x600x32,1024x600x24,800x600x32,800x600x24. [Actualización: en las últimas versiones si establecemos el valor de GRUB_GFXMODE a SAVED se almacenará la última resolución establecida desde el menú con la tecla r, gracias a Jose Maria por la información]. Durante el arranque presionando 'c' en el menú de burg y ejecutando el comando vbeinfo podemos ver las resoluciones que soporta nuestro ordenador en modo VBE. Otra opción interesante es GRUB_DISABLE_LINUX_RECOVERY="true" que nos permite ocultar el modo recuperación para los kernels. Podemos controlar el acceso de diferentes usuarios al menú de arranque con los comandos burg-adduser y la opción GRUB_USERS del fichero de configuración, como podemos ver en el wiki del proyecto.

Mi archivo de configuración es este:

# If you change this file, run 'update-burg' afterwards to update
# /boot/burg/burg.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
# In the boot menu, use hotkey 'r' to popup a resolution selection menu.
GRUB_GFXMODE=saved

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

# Use the previous selected theme, you can also specify a theme to be used
# In the boot menu, use hotkey 't' to popup a theme selection menu
GRUB_THEME=saved

# Use the previous folding option, its value can be 'yes', 'no' or 'saved'
# In the boot menu, use hotkey 'F7' to show the full list, 'f' to toggle
# between folding modes.
GRUB_FOLD=saved

# Add user with burg-adduser, then use GRUB_USERS to config authentication.
# The following example means user1 can boot Ubuntu, no password is needed to
# boot Windows, user1 amd user2 can boot other OS. Superusers can boot any OS
# and use hotkeys like `c' to enter console mode.
#GRUB_USERS="*=user1,user2:ubuntu=user1:windows="

Una vez configurado burg y actualizado con el comando update-burg podemos ver el resultado ejecutando burg-emu que simula el resultado final. Pulsando la tecla T podemos cambiar el tema usado en burg, aquí la lista de temas del proyecto con capturas de pantalla. Para salir del menú podemos pulsar C y teclear 'exit'.

Chuleta de teclas rápidas para burg:

  • e - edita el comando actual
  • t - lista de temas disponibles
  • c - abre una ventana de terminal (desde la termnial podemos teclear help para ver todos los comandos)
  • r - cambia la resolución
  • F5 - mapeado a ctrl-x, finaliza la edición y guarda el resultado
  • F8 - cambia entre modo text y modo gráfico
  • F9 - apagado
  • F10 - reinicio
  • ESC - sale de la ventana emergente

Para instalar nuevos temas tan solo tenemos que copiar la carpeta del nuevo tema a la carpeta /boot/burg/themes/ y actualizar burg con update-burg. En esta página hay algunos bastante buenos aunque en italiano; pero una de las ventajas del software libre es que los podemos modificar o traducir a nuestro gusto. [Actualización: más temas para burg aquí, gracias a Ingalex por el apunte.]

Si por algún motivo no nos convence burg y queremos volver a grub debemos desinstalar burg con sudo apt-get remove burg y después reinstalar grub con sudo grub-install /dev/sda (ejemplo para instalarlo en el MBR del primer disco) y actualizar grub con sudo update-grub.

Más documentación sobre burg.


Actualización 10/07/10: con la instalación del nuevo kernel 2.6.32-22 me he encontrado que al instalarse este, el menú de burg no se actualizaba automáticamente añadiendo el kernel. Para solucionar este pequeño problema y no tener que ejecutar update-burg manualmente después de cada actualización hay que modificar el fichero /etc/kernel-img.conf sustituyendo update-grub por update-burg quedando de esta forma el fichero:

do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = update-burg
postrm_hook = update-burg

Buscando información en la página del proyecto he encontrado que el bug ya ha sido reportado por lo que seguramente en las próximas versiones ya se modificará el fihero kernel-img.conf con la instalación de Burg.

5 jun 2010

Seguridad en SSH (3)

Ahora ya hemos configurado nuestro servidor SSH y estamos bastante seguros que un ataque por fuerza bruta no tendría éxito contra él. ¿Entonces ya no podemos hacer más que esperar y resistir a las hordas de malévolos atacantes que intentan acceder a nuestro equipo? Obviamente la respuesta es no y veremos como configurar nuestro sistema para tener una mejor defensa ante los atacantes que campan por la red.

Para aumentar nuestro nivel de seguridad vamos usar DenyHosts, un script escrito en Python que se encarga de revisar nuestro log buscando atacantes y añade estos al fichero /etc/hosts.deny. Este fichero no es más que una lista negra con la dirección de las máquinas a las que se ha bloqueado el acceso al sistema. Con lo que una vez identificados los atacantes, y añadidos a la lista negra, evitamos que estos puedan intentar conectarse de nuevo a nuestro sistema.



Para instalar denyhosts basta con ejecutar desde la consola sudo apt-get install denyhosts pues el programa ya se encuentra en los repositorios de Ubuntu. Una vez instalado pasamos a configurarlo editando el fichero /etc/denyhosts.conf. Veamos como siempre las opciones más interesantes:

  • SECURE_LOG = /var/log/auth.log : ruta del fichero de log donde se almacena la información del servidor SSH. Como vimos en otro artículo esta ruta en Ubuntu por defecto es /var/log/auth.
  • HOSTS_DENY = /etc/hosts.deny: ruta del fichero hosts.deny.
  • PURGE_DENY =: periodo de tiempo tras el cual se eliminarán las IPs baneadas del fichero hosts.deny. Si no establecemos ningún valor esta limpieza no se producirá nunca. Si queremos establecer un periodo especificaremos un numero seguido de una letra para indicar el tipo ('m' minutos,'h' horas,'d' días,'w' semanas e 'y' años), por ejemplo cinco días 5d.
  • PURGE_THRESHOLD = 0: número de veces que una IP puede ser eliminada de la lista negra, si se supera el número establecido esta no sera eliminada aunque se cumpla el periodo de PURGE_DENY. El valor 0 desactiva esta opción.
  • BLOCK_SERVICE = sshd: servicio bloqueados al atacante. En el fichero hosts.deny es posible bloquear solo ciertos servicios a las máquinas baneadas por lo que si usamos la opción sshd se bloqueara solo el acceso al servidor SSH. Para bloquear todos los servicios usaremos la opción ALL.
  • DENY_THRESHOLD_INVALID = 5 : número de intentos fallidos para nombres de usuario no válidos (usuarios que no existen en nuestra máquina) tras lo cual se baneará la IP.
  • DENY_THRESHOLD_VALID = 510: número de intentos fallidos para nombres de usuario válidos (usuarios que existen en nuestra máquina excepto el usuario root) tras lo cual se baneará la IP.
  • DENY_THRESHOLD_RESTRICTED = 1 : número de intentos fallidos para nombres de usuario restringidos (usuarios definidos en el fichero WORK_DIR/restricted-usernames) tras lo cual se baneará la IP.
  • WORK_DIR = /var/lib/denyhosts: ruta donde se guardan los fichero del programa.
  • SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES: indica si se informará de la actividad sospechosa de las máquinas en el fichero hosts.allow (del resto siempre se informa). El fichero hosts.allow es una lista blanca con las máquinas que tienen el acceso permitido a nuestra máquina.
  • ADMIN_EMAIL = root@localhost
    SMTP_HOST = localhost
    SMTP_PORT = 25
    : si queremos que el programa nos envíe los informes a nuestra cuenta de correo debemos configurar estas opciones con nuestra dirección y un servidor SMTP válido.
  • PLUGIN_DENY=/usr/bin/true: apunta a un programa que será ejecutado cada vez que se bloquee el acceso a una máquina, pasándole como argumento la IP de esta. Esta opción puede resultar interesante para jugar con Iptables y un par de scripts, por ejemplo podríamos redirigir los atacantes a un honeypot.
  • DAEMON_LOG = /var/log/denyhosts: ubicación del fichero de log donde se guardará la información de Denyhosts.
  • SYNC_SERVER = http://xmlrpc.denyhosts.net:9911: podemos permitir que Denyhosts sincronice sus datos con los del servidor de la aplicación, consiguiendo así una lista mucho más completa.
  • SYNC_UPLOAD = yes: permite que nuestra máquina envíe los hosts baneados al servidor de Denyhosts.
  • AGE_RESET_VALID=5d: establece el periodo de tiempo tras el cual se reiniciará el contador de intentos para los usuarios validos. El resto de opciones AGE_RESET_* son similares para los otros tipos de usuarios.

Una vez configurado Denyhosts procederemos a reiniciar el servicio para aplicar los cambios realizados con la orden sudo /etc/init.d/denyhosts restart

Una de las opciones más interesantes de Denyhosts para jugar con ella es la opción PLUGIN_DENY. Usando esta opción y un script resulta muy fácil redirigir a nuestros atacantes a otro puerto o a otra máquina con un honeypot. Un sencillo script como este sería suficiente para ello:


#!/bin/bash
iptables -t nat -A PREROUTING -s $1 -p tcp --dport 22 -j REDIRECT --to-port 60000

Si queremos que los atacantes no noten nuestro pequeño truco es necesario que la claves privada y pública en el honeypot sean la misma que en nuestro servidor SSH. En caso contrario el cliente SSH detectará que el servidor SSH ha cambiado y alertaría al usuario de un posible ataque de MITM (man in the middle).