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

2 comentarios :

Anónimo dijo...

No te lo tomes como una crítica destructiva, que no lo es.

El instalar software seguro sólo depende de la confiabilidad de la fuente. En la confiabilidad de la fuente entra también si el software es estable, de pruebas o de desarrollo.

Y se podrían matizar muchas cosas, no es lo mismo software estable que software seguro.

Se te ha olvidado decir que muchas veces las firmas de los repositorios cambian, y no se actualizan las nuevas. A pesar de que synaptic y apt, en distribuciones deb, y otras herramientas equivalentes, como zypper, urpmi, yum, etc. en otras districiones avisan del error, y aún así mucha gente sigue instalando cosas. Creo que se te ha olvidado comentar eso.

Por otro lado en los script no es lo mismo usar el script de nvidia, firefox, googleearth, etc. que el script de Perico de los Palotes que ha parchaeado el driver de tu wifi para que hagas [mode ironic] "auditoría" [/mode ironic] de redes.

El instalar desde las fuentes de un programador confiable, en muchas, muchas ocasiones se puede generar un paquete con aplicaciones tipo checkinstall, y así nos olvidamos de tener qué saber qué archivos y dónde se instalan y cómo se mantienen.

Gracias por la serie de artículos.

fosco_ dijo...

@Anónimo: estoy de acuerdo con lo que dices, el problema es que estos artículos me están quedando demasiado largos y omito algunas explicaciones para hacerlos un poco más amenos.

Por ejemplo:
"no es lo mismo software estable que software seguro"
Cierto, aunque un software que hace que se cuelgue parte o todo el sistema además de inestable en mi opinión es inseguro, aunque habría mucho que decir sobre el concepto de seguridad.

"no es lo mismo usar el script de nvidia, firefox, googleearth, etc. que el script de Perico de los Palotes"
Totalmente de acuerdo, por eso en el artículo hago hincapié en que lo más importante en estos casos es confirmar la fiabilidad de la fuente.

En general estos artículos son "guías" para todos aquellos usuarios con conocimientos medios que empiezan a interesarse por la seguridad, es imposible hacer un tratado exhaustivo sobre seguridad en un blog como este (y además no tengo los conocimientos necesarios), solo pretendo ayudar a estos usuarios a encontrar su propio camino.

Un saludo y gracias por tus opiniones