19 jul. 2010

Seguridad en Ubuntu (III) - Software seguro

La semana pasada analizábamos la importancia de un correcto uso del sistema de usuarios y permisos en el artículo Seguridad en Ubuntu (II) - Usuarios y claves, esta semana continuaremos con otro pilar básico de la seguridad: los programas que instalamos.

Si controlamos el origen del software y usamos un método de instalación adecuado minimizaremos la posibilidad de introducir software malintencionado en el sistema, mejoraremos su estabilidad y reduciremos los riesgos en seguridad.

  • Métodos de instalación
En Ubuntu y GNU/Linux en general tenemos una gran variedad en métodos de instalación de software, en la guía oficial Añadir aplicaciones teneis todos estos métodos explicados en detalle, pero voy a hacer un pequeño repaso a los más comunes desde el punto de vista de la seguridad:

  1. Usando el gestor de paquetes:
    Ubuntu usa paquetes de tipo DEB, muy seguros en su elavoración e instalación, estos paquetes se instalan/desinstalan con los gestores de paquetes (apt-get, aptitude, synaptic, adept, gdebi o el Centro de Software entre otros). Este es el método más recomendado para todo tipo de usuarios.

    Centro de Software de Ubuntu (método recomendado)

    Las principales ventajas de este método son:
    - Instalación y mantenimiento del software fácil y unificada
    - El creador del paquete está identificado y es accesible por cualquiera
    - Posibilidad de ver la lista de archivos que contiene el paquete
    - Desinstalación limpia
    - Si un paquete interfiere con otro el propio sistema de paquetes resuelve el conflicto
    - Si un paquete necesita otro para funcionar el propio sistema de paquetes resuelve la dependencia


  2. Desde código fuente:
    Otro método de instalación muy común en GNU/Linux pero no tanto en Ubuntu es compilar directamente el código fuente para conseguir un ejecutable. Se recomienda este método únicamente para aquellos (poquísimos) programas que no están disponibles en el gestor de paquetes.

    Instalación típica desde fuentes

    Este método, aunque en general es bastante seguro tiene importantes desventajas respecto al uso del sistema de paquetes:
    - Cada programa tiene su propio método de instalación
    - Para un usuario no experto es difícil saber qué archivos son instalados y cómo mantenerlos
    - Algunos programas instalados así solo pueden desinstalarse manualmente
    - No gestiona conflictos ni dependencias
    - Requiere la instalación de compiladores, librerías, utilidades...

    Si te ves obligado a instalar software usando este método ten en cuenta: leer atentamente las instrucciones de instalación contenidas en el archivo README o INSTALL, comprueba que el sitio web del que sacaste el programa es fiable y tiene alguna dirección de contacto del autor, recuerda que el gestor de paquetes no podrá desinstalar, actualizar ni gestionar este software de ninguna forma.

  3. Scripts autoinstalables:
    Son archivos que contienen dentro de si mismos las órdenes necesarias para instalarse, este es el formato típico de los drivers de nvidia (*.run) o scripts creados por usuarios con diferentes fines (*.sh) entre otros muchos.

    Ejecución de un script autoinstalable (driver de nVidia)

    Este es sin duda el método más inseguro de instalar software y habrá que evitarlo siempre que sea posible, sus principales desventajas son:
    - Normalmente el origen es poco o nada fiable
    - Es muy fácil introducir código malicioso en estos scripts
    - Para saber exactamente qué está haciendo el script hay que tener conocimientos de programación shell

    Si te ves obligado a instalar software usando este método ten en cuenta: asegurate muy bien de que el origen del script es fiable, desconfía especialmente de los scripts que requieren permisos de administrador, siempre que sea posible edita el script y analiza todo lo que hace antes de ejecutarlo.

  • Origen del software
El sistema de paquetes (método recomendado de instalación) obtiene el software de lo que se denominan repositorios, tienes una amplia guía de gestión de repositorios en Añadir repositorios externo, pero igual que antes vamos a ver cuál es la mejor manera de gestionar estos repositorios desde el punto de vista de la seguridad.

La herramienta básica en Ubuntu para gestionar los repositorios es software-properties-gtk y la tienes disponible en el menú Sistema - Administración - Orígenes del software

Existen varios tipos de repositorios que se gestionan de manera diferente y que software-properties-gtk puede controlar.

  1. Repositorios oficiales de Ubuntu
    Este es el repositorio principal del que las distribuciones Ubuntu obtienen los paquetes, se puede cambiar desde la pestaña Software de Ubuntu, existen cientos de repositorios repartidos por todo el mundo y todos son muy seguros, pero para estar seguro de que están perfectamente actualizados es recomendable usar el servidor principal de Ubuntu o el servidor primario del propio pais.

    Selección de servidor principal

    No será necesario tomar ninguna medida de seguridad especial para usar este tipo de repositorios.


  2. Repositorios personales PPA
    Los repositorios personales o PPA son repositorios para usuarios de Ubuntu alojados en los servidores de Launchpad y contienen versiones más nuevas (o de desarrollo) de ciertos programas. Estos repositorios no están avalados por Canonical pero son creados por usuarios identificados y estan firmados digitalmente por lo que son relativamente seguros.

    La gestión de estos repositorios es muy sencilla y se integran perfectamente en el gestor de paquetes de Ubuntu. El nombre exacto del repositorio y la manera de agregarlo estará detallado en la página web de cada repositorio.

    Lo veremos mejor con un ejemplo, vamos a añadir el reposiorio PPA con la última versión disponible de Wine (la versión 1.2). El nombre del repositorio es ppa:ubuntu-wine/ppa y para añadirlo usaremos los siguientes comandos:

    - Añadir el repositorio a la lista de orígenes del software:
    sudo add-apt-repository ppa:ubuntu-wine/ppa
    - Actualización de la lista de paquetes:
    sudo aptitude update
    - Desinstalar la version anterior de wine (sólo si ya lo tenías instalado):
    sudo aptitude purge wine
    - Instalación del programa (en este caso wine):
    sudo aptitude install wine
    - Comprobar la versión de wine instalada:
    wine --version
    wine-1.2


    Las principales ventajas de este tipo de repositorios son entre otras: disponer de las ultimas versiones de desarrollo de ciertos programas, integración total en el sistema de paquetes y sistema de seguridad basado en firmas digitales.
    Sus desventajas son: añadimos un cierto nivel de inestabilidad al usar programas en desarrollo o no suficientemente probados y añadimos un cierto nivel de inseguridad pues estos repositorios no están comprobados por Canonical.


  3. Repositorios externos
    En ocasiones (cada vez menos) el software que queremos instalar se encuentra empaquetado en repositorios de terceros (ni el principal de Ubuntu ni repositorios PPA), vamos a ver ahora como gestionamos esos repositorios y los aseguramos con una clave digital.

    De nuevo usaremos un ejemplo para ilustrar el proceso, en este caso vamos a añadir el fatástico repositorio de GetDeb que contiene gran cantidad de programas que no están en los repositorios oficiales de Ubuntu o que están pero en versiones anteriores. Las instrucciones de instalación así como todos los paquetes que contiene los encontrareis en su web.

    El nombre exacto del repositorio es deb http://archive.getdeb.net/ubuntu lucid-getdeb apps y para añadirlo usaremos los siguientes comandos:

- Añadir manualmente el repositorio a la lista de repositorios del sistema:
sudo bash -c "echo 'deb http://archive.getdeb.net/ubuntu lucid-getdeb apps' >> /etc/apt/sources.list"
- Importar la clave digital para mayor seguridad:
wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
- Actualizar el sistema:
sudo aptitude update
- Instalar cualquier aplicación de los repositorios de GetDeb, por ejemplo el navegador social Flock:
sudo aptitude install flock

El punto más importante referente a la seguridad de este tipo de repositorios es no añadir nunca repositorios que no disponen de clave de seguridad o que no la hacen pública.

  • Más información
Guía Ubuntu - Añadir aplicaciones
Wikipedia - Repositorio
Launchpad - PPA

  • Artículos relacionados

12 jul. 2010

Seguridad en Ubuntu (II) - Usuarios y claves

Como ya vimos en el post anterior Seguridad en Ubuntu (I) - Introducción uno de los pilares básicos de la solidez de los sistemas GNU/Linux es su potente gestión de usuarios y de permisos.

En este artículo veremos como hacer un correcto uso de esta gestión, aumentando en gran medida la seguridad de nuestro sistema, tanto local como remota.

  • Tipos de cuentas de usuario
Existen varios tipos de cuentas de usuario que dan diferentes niveles de acceso para el uso y administración del sistema. Asegúrate de estar usando siempre la cuenta de usuario adecuada a tus necesidades, una cuenta con más permisos de los necesarios también implica más riesgos de los necesarios.

  1. Usuario con permisos administrativos
    Este es el usuario que se crea durante la instalación del sistema, tiene permiso para usar todas las aplicaciones instaladas, guardar o modificar contenidos en su carpeta personal y puede asumir temporalmente las funciones de administrador mediante la orden sudo.

    Este es el usuario indicado para el trabajo diario y la administración de sistemas de escritorio habituales.

  2. Usuario sin permisos administrativos
    Este es el tipo de usuarios que se crean desde el menú Sistema - Administración - Usuarios y grupos, tiene permiso para usar todas las aplicaciones y guardar o modificar informaciones en su carpeta personal. No podrá ejercer tareas administrativas ni usar el comando sudo.

    Creación de un usuario

    Si necesitas crear más usuarios para que otras personas usen tu sistema es conveniente el uso de este tipo de cuentas. Así pase lo que pase no podrán alterar la configuración del sistema, sólo sus opciones personales.

    En caso de que necesites dar permisos administrativos a estos usuarios puedes hacerlo desde el menú Sistema - Administración - Usuarios y grupos - Ajustes avanzados - Privilegios de usuario - Administrar el sistema

    Ajustes avanzados - Privilegios de usuario

  3. Usuario invitado
    Esta cuenta, presente en Ubuntu y en algunas otras distribuciones permite el acceso al sistema con un usuario sin privilegios, carece de contraseña y permite el uso de la mayoría de aplicaciones, pero no guardar o modificar datos ni por supuesto asumir tareas administrativas. (Podrá guardar datos pero éstos se perderán al cerrar la sesión).

    Este tipo de cuenta es muy útil en ordenadores de acceso público, demostraciones, o cualquier situación en la que quieras que alguien pueda usar el sistema sin alterar nada.

    Para acceder a esta cuenta debes hacerlo desde una sesión de usuario ya iniciada haciendo clic en el applet de control de sesión y selecciona Sesión de invitado. +info

    Acceso al usuario invitado


  4. Usuario root
    Este es el usuario administrativo tradicionalmente usado en todas las distribuciones GNU/Linux, sin embargo en Ubuntu se ha desactivado esta cuenta y en su lugar se usa el comando sudo. +info

    Las ventajas del uso de sudo frente a root son: minimizar la posibilidad de desastres por descuido al estar la cuenta administrativa activa durante menos tiempo, hacer más consciente al usuario de qué acciones entrañan peligro y cuales no o acostumbrarse a usar permisos administrativos sólo cuando son estrictamente necesarios, entre muchas otras razones.

    Algunos usuarios no acostumbrados al modo de trabajar de Ubuntu insisten en la activación de esta cuenta (poniendo en peligro la seguridad del sistema). Si este es tu caso la activación de la cuenta root se hace con la orden:
    sudo passwd root

    Esto asignará una contraseña al usuario root permitiendo su acceso al sistema y el uso del comando su. Una vez acabada la tarea administrativa en cuestión es recomendable volver a desactivar esta cuenta con la orden:
    sudo passwd -l root

  • Contraseñas
La contraseña es la llave que cierra la puerta de la privacidad de cada usuario. Por este motivo vale la pena dedicarle un poco de tiempo a la elección de la contraseña.

Criterios para elegir una contraseña:
  1. Deberá tener una longitud mínima de 6 caracteres
  2. Preferiblemente que contenga combinaciones de mayúsculas, minúsculas, símbolos y números
  3. No deberá contener ningún carácter fácilmente deducible por los datos "visibles" del usuario (es decir evita contraseñas del tipo usuario1)
  4. Preferiblemente usa contraseñas creadas aleatoriamente

Ejemplos de malas combinaciones usuario/contraseña: usuario/usuario1, root/toor, usuario/1234, usuario/aaaaaaaa, usuario/apellido
Ejemplos de buenas contraseñas: ffagh61w, Op9%ssas

Si tu contraseña no cumple estos requisitos puede ser fácilmente "rebentada" por programas de fuerza bruta. Para cambiar la contraseña y asignar una mejor usa el menú Sistema - Administración - Usuarios y grupos - Cambiar contraseña

Cambiar contraseña

Es muy tentador desactivar la contraseña del usuario para hacer más cómodo el acceso, esto sería equivalente a dejar siempre el coche abierto para no tener que abrirlo (y con las llaves puestas!). Intenta evitar las opciones No preguntar de nuevo la contraseña al iniciar sesión (del menú Usuarios y grupos) y Acceder como usuario automáticamente (del menú Pantalla de acceso)

Desactiva el acceso automático al sistema

  • Cambiar permisos y grupos
Todos de los sistemas de ficheros comunes en GNU/Linux soportan un completo sistema de permisos, que asigna a cada archivo/directorio: un propietario, un grupo y permisos de lectura (r) / escritura (w) / ejecución (x) independientes para el propietario, el grupo y el resto de usuarios.

Veamoslo más claro con un ejemplo, el comando ls -l nos mostrará todos estos datos:
ls -l
-rw-r----- 1 dani users 77951 2010-07-06 18:24 screenshot_001.png

En este ejemplo el archivo screenshot_001.png es propiedad del usuario dani, pertenece al grupo users y sus permisos son: lectura y escritura para el propietario (los primeros rw-), lectura para el resto de usuarios del grupo users (r--) y ningún tipo de acceso para el resto de usuarios del sistema (---). +info

En ocasiones podemos encontrarnos que no tenemos permisos para realizar una u otra acción sobre un archivo (por ejemplo no podemos ejecutar un archivo descargado, o el editor nos avisa de que no podemos guardar cambios sobre un archivo de texto). La solución NO es convertirse en root, la solución es establecer correctamente los permisos del archivo.

Para cambiar los permisos de un archivo usaremos el comando chmod (con sudo si el archivo no es de nuestra propiedad). A cada tipo de permiso se le asigna un numero: lectura=4, escritura=2, ejecución=1, estos permisos pueden sumarse y deben informarse para el propietario, grupo y resto de usuarios. Veamos algunos ejemplos:
chmod 777 archivo # asigna permiso lectura(4) + escritura(2) + ejecución(1) para el propietario, grupo y resto de usuarios
chmod 600 # asigna permiso lectura(4) + escritura(2) al propietario, grupo y resto de usuarios no tienen acceso
chmod 755 # todos los permisos para el propietario, lectura y ejecución para el resto

+info

Si estos comandos te parecen muy complicados siempre puedes usar el gestor de archivos para cambiar los permisos haciendo clic con el botón derecho sobre el archivo que quieres cambiar y eligiendo Propiedades - Permisos

Propiedades - Permisos

Otro error común es que el propietario o grupo del archivo no estén bien asignados (esto ocurre por ejemplo si usas algunos programas con root cuando no debes). De nuevo la solución NO es convertirse en root (más bien esto es el origen del problema), la solución es establecer correctamente el propietario y grupo del archivo.

Para esto usa el comando chown (con sudo si el archivo no es de tu propiedad). Su uso es bastante sencillo, con un ejemplo bastará:
sudo chown dani:dani archivo # asigna el propietario dani y el grupo dani al archivo
+info

  • Más información
  • Artículos relacionados

5 jul. 2010

Seguridad en Ubuntu (I) - Introducción

Uno de los temas que más preocupa a los recién llegados a Ubuntu es la seguridad (especialmente si vienen de Windows). Sin embargo la mayoría traen ideas preconcebidas erróneas y mitos más basados en las películas de hackers que en la realidad.

Por ese motivo voy a dedicar una serie de artículos a dar un repaso general a todos los niveles de seguridad de Ubuntu, aclarando dudas, desmitificando bulos y dando información extra para los que quieran profundizar en el tema.

El presente artículo es una guía y un índice de lo que iré publicando en próximos artículos.

  • Falsos mitos sobre seguridad
  1. Ubuntu (y GNU/Linux en general) son sistemas seguros y no debo preocuparme por la seguridad: FALSO
    La seguridad depende del sistema que se use, pero también de las opciones de configuración y del nivel de conocimientos del administrador.
  2. Con un buen firewall estoy 100% seguro: FALSO
    El firewall o cortafuegos es sólo uno de los elementos que determinan la seguridad de un sistema, pero hay muchos más.
  3. Solamente yo uso mi ordenador, no necesito una clave de usuario: FALSO
  4. Es mejor trabajar con root porque así no hay problemas de permisos: FALSO
    La única finalidad del usuario root es administrar el sistema, en ningún caso debe ejercer las funciones de usuario. Además usar root cuando no se debe suele provocar problemas de permisos en las aplicaciones.
  5. Necesito activar la cuenta root en Ubuntu para realizar la tarea "x": FALSO
    En Ubuntu el usuario root nunca debe acceder al sistema. Para eso se usa sudo.
  6. Los virus de Windows pueden afectarme en Ubuntu: FALSO
  7. Ningún virus de Windows (al menos hasta la fecha) afecta a GNU/Linux. Si bien es cierto que se ha informado de ciertos casos de malware ejecutándose a través de wine. +info

  • Usuarios y claves
Las cuentas de usuario aseguran la privacidad de la información, el correcto reparto de privilegios en el sistema y minimizan los efectos en caso de un fallo de la seguridad. Un buen sistema de usuarios claves es la base de una firme seguridad.


Usa siempre claves seguras y no las desactives aunque te sea un poco molesto.
+info

  • Repositorios seguros
Los repositorios son las fuentes de las que distribuciones como Ubuntu obtienen el software, usar repositorios inseguros o no autentificados podría resultar en la entrada de software malicioso en nuestro sistema.


Para evitarlo usa siempre repositorios oficiales o repositorios firmados con clave.
+info

  • El cortafuegos
Entre las muchas funciones de un cortafuegos está la de aumentar la seguridad de nuestras conexiones de red aplicando filtros que analizan la procedencia, destino, puerto y otros datos relacionados con dichas conexiones.


Esta capa de seguridad es especialmente importante para todos aquellos que ofreceis servicios a través de la red local o de internet (servidor de correo, hospedaje de páginas web, escritorio remoto...)
+info

  • SeLinux / AppArmor
Es una capa extra de seguridad, capaz de confinar procesos, aplicaciones y/o usuarios, siguiendo unas políticas de seguridad preestablecidas, impidiendo de esta manera que se excedan en sus funciones o que se use software malintencionado para explotar sus potenciales vulnerabilidades.
+info

  • El antivirus
A diferencia de Windows donde un buen antivirus (y seguramente más de uno) es totalmente necesario, en Ubuntu muy difícilmente vamos a necesitar este nivel de seguridad.


Aún así existen unos pocos casos en que puede ser útil, como por ejemplo: escanear particiones Windows o dispositivos USB, escanear máquinas Windows a través de la red, añadir un filtro antivirus a nuestro servidor de correo interno o evitar la infección de aplicaciones ejecutadas con Wine.
+info

  • Herramientas de análisis del sistema
Existen varias utilidades que nos ayudarán a analizar nuestro sistema, revisar sus puntos débiles, posibles intrusiones y las principales vulnerabilidades.


Escaneadores de puertos, buscadores de rootkits o completas suites de seguridad.
+info

  • Los registros
Todos los eventos que suceden en el sistema quedan registrados en alguna parte, incluidos los referidos a las conexiones externas y a la seguridad.


Saber localizar y analizar esta información nos dará información muy valiosa sobre el estado del sistema y los posibles fallos de seguridad del mismo.

  • Detectar y expulsar intrusos
Aunque es mucho más difícil de lo que algunos piensan, bien por un descuido nuestro o bien por una vulnerabilidad de Ubuntu, podría darse el caso de que un usuario (o un programa) se colasen en nuestro sistema sin permiso.

De cómo actuemos en estos casos dependerá si esta situación se repetirá o no.

  • Más información
https://help.ubuntu.com/8.04/serverguide/C/user-management.html
https://help.ubuntu.com/community/Firewall
https://help.ubuntu.com/community/Repositories/Ubuntu
http://www.osnews.com/story/23463/Linux_Security_-_a_Few_Useful_Tactical_Tips

  • Artículos relacionados
Administración del firewall con gufw
Administración del firewall con firestarter