Seguridad Linux

Recomendamos utilizar el sistema de doble verificación en los servicios que utilizamos.

Mantén tu sistema siempre actualizado

Establece contraseñas seguras. Este es un punto básico para mejorar la seguridad informática. En tu ordenador Linux, puedes instalar el módulo llamado pam_cracklib. Para ello, ejecuta en la Terminal el siguiente comando:

sudo apt-get install libpam_cracklib

Una vez que lo tengas, tú mismo podrás escoger el grado de complejidad que tienen que tener las contraseñas en tu equipo; por ejemplo cuántas cifras deben tener, cuántas mayúsculas, cuántas minúsculas, etc.

Hacer copias de seguridad: El comando dd (Dataset Definition) es una herramienta muy sencilla que nos permite hacer copias de discos, particiones, archivos, o dispositivos, incluso se puede utilizar de formas alternativas como por ejemplo limpiar la información que contiene el disco.
En su sintaxis más básica se deben definir el objeto a copiar, el destino donde se va a duplicar la información y la tasa a la cual se realizará esta copia.

Comando dd

  •  Seguridad física del sistema

Configurar el BIOS para deshabilitar el arranque por CD/DVD, dispositivos externos y diskettes. Después, habilitar la contraseña del BIOS y proteger el archivo GRUB con contraseña para restringir el acceso físico al sistema.

  • 2 Disco particionado

Es importante contar con diferentes particiones para conseguir mayor seguridad de los datos en caso de que algún desastre ocurra. Al crear diferentes particiones, los datos pueden ser separados o agrupados según su tipo. Cuando un accidente ocurre, solo los datos de la partición afectada deberán ser remplazados, mientras que los datos en otras particiones no se verán afectados.

Asegúrate de tener las siguientes particiones e instalar todas las aplicaciones de terceros en la partición /opt

/
/boot
/usr
/var
/home
/tmp
/opt

  • 3 Minimizar paquetes para minimizar vulnerabilidades

¿Realmente necesitas todos los servicios instalados? se recomienda evitar instalar paquetes que no se utilizan para evitar las vulnerabilidades de esos paquetes. Esto minimiza el riesgo de que comprometan un servidor.

Identifica y elimina los servicios y programas innecesarios en el servidor para minimizar vulnerabilidades. Utiliza el comando “chkconfig” para identificar los servicios que están corriendo en runlevel3

# /sbin/chkconfig –list |grep ‘3:on’

Una vez identificado el servicio incensario, es posible deshabilitarlo con el siguiente comando

# chkconfig serviceName off

Utiliza el adiestrador de paquetes RPM, yum o apt-get, para listar todos los paquetes instalados en el sistema y remover aquellos que no son necesarios con el siguiente comando:

# yum -y remove package-name

# sudo apt-get remove package-name

  • 4 verifica los puertos de red que escuchan conexiones

Con la ayuda del comando “netstat” es posible listar todos los puertos abiertos y los programas que los utilizan. Es posible utilizar el comando “chkconfig” para deshabilitar todos los servicios de red no deseados en el sistema.

# netstat -tulpn

  • 5 Utiliza Secure Shell (SSH)

Los protocolos Telnet y rlogin utilizan texto plano para el envío de la información, en cambio, Secure Shell es un protocolo seguro ya que utiliza cifrado en todas las comunicaciones entre equipos.

Nunca inicies sesión directamente como root, a menos que sea sumamente necesario. Utiliza el comando “sudo” para ejecutar comandos que requieran permisos administrativos. Sudo está especificado en el archivo /etc/sudoers/ y puede ser editado con el comando “visudo” a través de la interfaz del editor Vi.

También se recomienda cambiar el puerto predeterminado para el protocolo SSH, puerto 22, a un puerto no convencional.

Se recomienda modificar el archivo de configuración “/etc/ssh/sshd_config” con los siguientes parámetros para restringir el acceso a usuarios.

Deshabilitar inicio de sesión de root

PermitRootLogin no

Permitir solo usuarios específicos

AllowUsers username

Utilizar versión 2 del protocolo SSH

Protocol 2

Cambiar puerto para escuchar conexiones entrantes

Port 50221

  • 6 Controlar las tareas programadas

El demonio cron tiene una característica incluída en la cual se puede especificar los usuarios que pueden y no pueden ejecutar tareas programadas. Esto se controla con el uso de los archivos llamados /etc/cron.allow/etc/cron.deny. Para bloquear a un usuario, basta con añadir su nombre de usuario en el archivo cron.deny y para permitir un usuario que ejecute tareas, se añade su nombre en el archivo cron.allowSi se desea deshabilitar a todos los usuarios del uso de tareas, se añade la palabra ALL a una línea del archivo cron.deny.

echo ALL >> /etc/cron.deny

 

  • 7 Deshabilitar puertos USB

Muchas veces pasa que se desea restringir a los usuarios para que no puedan conectar memorias USB en lo equipos, con la finalidad de proteger contra robo la información que almacenan. Para lograr esto, se debe crear el archivo /etc/modprobe.d/no-usb y agregarle la siguiente línea, con la cual no se detectarán dispositivos de almacenamiento por USB.

install usb-storage /bin/true

 

  • 8 Activar SELinux

El módulo SELinux (Security Enhanced Linux o Seguridad Mejorada de Linux, en español) es un mecanismo de seguridad y control de acceso que se incluye en el kernel. Deshabilitar esta característica, significa quitar los mecanismos de seguridad del sistema. Piensa dos veces y de forma cuidadosa antes de quitarlo, incluso si tu equipo está conectado a Internet y provee servicios públicos.

SELinux provee tres modos básico de operación:

  • Enforcing (Restrictivo): Este es el modo habilitado por defecto y que habilita y aplica las políticas de seguridad en el equipo.
  • Permissive (Permisivo): En este modo, SELinux no forzará el uso de políticas en el sistema, solo advertirá y registrará las acciones. Este modo es muy útil para la resolución de problemas relacionados con SELinux.
  • Disabled (Deshabiltado): SELinux está apagado.

Si SELinux está deshabilitado, se puede habilitar con el siguiente comando:

setenforce enforcing

Se puede saber el estado de SELinux desde la línea de comandos escribiendo los siguientes comandos:

sestatus

system-config-selinux

getenforce

 

  • 9 Deshabilitar los escritorios gráficos KDE o GNOME

No existe la necesidad de ejecutar escritorios gráficos basados en X, como KDE o GNOME, dentro de un servidor de producción. Se pueden desinstalar o deshabilitar para aumentar la seguridad y rendimiento del servidor. Para hacerlo, únicamente edita el archivo /etc/inittab y ajusta el nivel de ejecución en 3. Si deseas quitarlo por completo, utiliza el siguiente comando:

yum groupremove “X Window System”

sudo apt-get remove –purge xserver-xorg

 

  • 10 Revisar el tiempo de validez de contraseñas de usuarios

En Linux, las contraseñas de los usuarios son almacenadas de forma cifrada en el archivo /etc/shadow. Para ajustar la fecha de expiración de la contraseña de un usuario, se necesita utilizar el comando chage.

Para saber el tiempo de uso, vigencia o días desde el último cambio de contraseña, se utiliza el comando:

chage -l nombre_de_usuario

Algunas opciones del comando son:

  • -M Para indicar el máximo número de días de vigencia de la contraseña.
  • -m Para indicar el mínimo número de días de vigencia de la contraseña.
  • -W Para indicar cuantos días antes de que la contraseña expire, se mande una advertencia.

 

  • 11 Bloqueo y desbloqueo manual de cuentas

Esta característica es muy útil para evitar borrar cuentas de usuario, ya que sirve para especificar un periodo de tiempo en el cual se bloquearán las cuentas de usuario. Esto se realiza con el comando:

passwd -l nombre_de_usuario

Para desbloquear al usuario se utiliza el comando:

passwd -u nombre_de_usuario

Cabe mencionar que si el usuario root inicia sesión como algún usuario bloqueado, si podrá iniciar sesión.

 

  • 12 Uso de contraseñas seguras

Muchos usuarios utilizan contraseñas débiles que pueden ser descubiertas por medio de un ataque de fuerza bruta. Para evitar el uso de contraseñas débiles, el módulo PAM contiene una funcionalidad llamada pam_cracklib que obliga al usuario a utilizar contraseñas fuertes y seguras. Para habilitarlo basta con añadir al archivo /etc/pam.d/system-auth la siguiente directiva:

/lb/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=1 ucredit=-2 dcredit=-2 ocredit=-1

Las palabras reservadas significan:

  • lcredit = lower-case o minúsculas
  • ucredit = upper-case o mayúsculas
  • dcredit = digitos
  • other = otros

 

  • 13 Activar Iptables (Firewall)

Es áltamente recomendable habilitar el firewall de Linux para evitar accesos no autorizados a nuestro equipo. Se deben aplicar reglas para direcciones IP origen y destino y puerto UDP o TCP para paquetes entrantes, salientes y redirigidos.

 

  • 14 Deshabilitar Ctrl+Alt+Supr en el archivo /etc/inittab

En la mayoría de las distribuciones Linux, el presionar la combinación de teclas ctrl+alt+supr provocará un reinicio del sistema, por lo que no es muy recomendable tener habilitada dicha opción, específicamente en servidores de producción.

Esta acción se define dentro del archivo /etc/inittab en una línea similar a la siguiente:

# ca::ctrlaltdel:/sbin/shutdown -t 3 -r now

 

  • 15 Verficar cuentas sin contraseñas

Cualquier cuenta de usuario con una contraseña vacía significa una puerta abierta para acceso no autorizado desde cualquier parte del mundo. Se debe asegurar que todas las cuentas de usuario cuenten con contraseñas fuertes y seguras. Para revisar si existen cuentas con contraseñas vacías se puede utilizar el siguiente conjunto de comandos:

cat /etc/shadow | awk -F : ‘($2==””) {print $1}’

Este comando obtendrá toda la lista de usuarios en el sistema y mostrará a aquellos que su contraseña sea vacía.

  • 16 Mostrar mensaje de SSH antes de iniciar sesión

Es una buena práctica mostrar y contar con mensajes de seguridad o advertencias antes de realizar una autenticación por medio de SSH. Para mayor información leer el siguiente artículo.

  • 17 Monitoreo de actividades del usuario

Si se tienen muchos usuarios en el sistema, es muy importante recolectar información de la actividad y procesos de cada usuario, para después poder analizar esa información en caso de problemas de rendimiento o seguridad. Existen dos herramientas muy útiles llamadas psacctacct que son utilizadas para monitorear los procesos y la actividad de los usuarios en el sistema. Estas herramientas se ejecutan en segundo plano y continuamente están registrando la actividad de los usuarios y los recursos del sistema que consumen servicios como Apache, MySQL, SSH, FTP, etc.

  • 18 Revisión de bitácoras de forma regular

Reasigna las bitácoras en un servidor dedicado de bitácoras, esto podría evitar que los intrusos puedan modificar las bitácoras locales. Los archivos de bitácoras más comunes se encuentran en la ruta /var/log/y son:

  • messages: Bitácoras del sistema
  • auth.log: Bitácoras de autenticación (Debian, Ubuntu, Linux Mint)
  • kern.log: Bitácoras del kernel
  • cron.log: Bitácoras del demonio crond
  • maillog: Bitácoras del servidor de correo del sistema
  • boot.log: Bitácoras del arranque del sistema
  • mysqld.log: Bitácoras del manejador de bases de datos, MySQL
  • secure: Bitácoras de autenticación (Red Hat, Fedora, CentOS)
  • utmp ó wtmp: Bitácora de inicio de sesión

Si tienes tu máquina Linux en red junto a máquinas Windows/Mac siempre es bueno tener a la mano un buen anti-rootkit y antivirus (por protección de los demás), ya que aunque linux es prácticamente invulnerable a las amenazas de malware comunes, los otros sistemas no:

1) Prevención de Buffer Overflow (Servidores)

Para contrarrestar ataques de desbordamiento de búfer, basta con aplicar los tunings del kernel de los que ya hemos hablado anteriormente por acá… En /etc/sysctl.conf:

VPS pequeño y equipos con memoria limitada (=< 512MB RAM)

# Swappiness & Memory Tunning
vm.swappiness=100
vm.overcommit_memory=2
vm.overcommit_ratio=50
vm.oom_kill_allocating_task=1
vm.dirty_ratio=10
vm.dirty_background_ratio=5

Servidor físico (>= 1GB RAM)

# Swappiness & Memory Tunning
vm.swappiness=60
vm.panic_on_oom=0
vm.oom_kill_allocating_task=1
vm.dirty_ratio=10
vm.dirty_background_ratio=5

2) Antivirus (Instalar y configurar ClamAV)

Tener un antivirus en un equipo GNU/Linux permite (entre otras cosas) analizar archivos/carpetas y dispositivos sospechosos en tu máquina sin poner en peligro otros equipos que puedas tener en una red como computadoras Windows/OS X ya que Linux es, (como ya dije al principio) prácticamente invulnerable al malware común. En un servidor de correo (citando otro ejemplo práctico), el tener un antivirus te permitirá analizar los archivos adjuntos antes de procesarlos. El antivirus más famoso que existe para cualquier distro Linux allá afuera es ClamAV que cuenta con escáneres bajo demanda, interfaz headless, interfaz gráfica e incluso un daemon que se integra perfectamente con servidores de correo.

Instalación

Para instalarlo en Fedora Linux por ejemplo haríamos lo siguiente:

# dnf -y install clamav clamav-update clamtk (GNOME/GTK)
# dnf -y install clamav clamav-update klamav (KDE/QT)
# dnf -y install clamav clamav-update (headless)

Configuración

Después, (independientemente de la distro) lo configuraremos de la siguiente manera:

# nano /etc/freshclam.conf

En el archivo que nos saldrá, comentaremos la línea Example:

Descomentaremos la línea DNSDatabaseInfo:

Nos aseguraremos de que las 2 líneas que referencian DatabaseMirror esténdescomentadas y en la que tiene XY reemplazaremos dicho código por el código oficial de nuestro país, mismo que obtendremos de esta lista (En el caso de México por ejemplo el código correcto es mx):

Finalmente regresamos al principio y descomentamos las líneas DatabaseDirectory yUpdateLogFile:

Guardamos el archivo de configuración y corremos en consola:

# freshclam

Análisis por consola

NOTA: Antes de correr un análisis con ClamAV, es recomendable instalar todas lasactualizaciones disponibles y limpiar tu sistema con programas como bleachbit/sweeper. Recuerda que bleachbit tiene un modo para root y uno para tu usuario normal, así que te tocará correrlo dos veces.

Una vez que la base de datos de virus se actualice, Si estás en un servidor headless (o no quieres usar la GUI), puedes ejecutar:

$ man clamscan

para aprender más sobre cómo usar clamav desde consola. Para hacer un escaneo estándar del sistema completo, se recomienda usar este comando por ejemplo:

#freshclam && echo "Time: $(date)" >> /var/log/clamscan.log && clamscan -r --bell -io / --log=/var/log/clamscan.log --enable-stats

Este comando actualizará la base de datos de virus, luego correrá un análisis que checará todo el sistema por virus/malware de manera recursiva y hará sonar una “campana” cada que detecte algo. Guardará todo en un archivo llamado clamscan.log dentro de /var/logadjuntando la fecha y hora del análisis al mismo. También, enviará las estadísticas de uso al motor de ClamAV y sus desarrolladores para mejorar la eficacia del antivirus. Cabe destacar que pueden reemplazar / por /home por ejemplo si sólo quieren buscar en sus carpetas personales (o cualquier otra ruta según lo amerite el caso).

Análisis vía GUI

NOTA: Antes de correr un análisis con ClamAV, es recomendable instalar todas las actualizaciones disponibles y limpiar tu sistema con programas como bleachbit/sweeper. Recuerda que bleachbit tiene un modo para root y uno para tu usuario normal, así que te tocará correrlo dos veces.

Si instalaste un GUI, abrimos dicha interfaz nuestro menú de aplicaciones y en Configuraciónmarcamos todas las opciones disponibles:

Después abrimos el Asistente de actualización y activamos las actualizaciones automáticas:

Falsos positivos

Antes de hacer nada con los archivos infectados, recuerda que muchos de estos archivos pueden ser falsos positivos, ya que por ejemplo los archivos chainstate de la blockchain debitcoin pueden contener firmas de virus que la gente pone ahí para probar las capacidades de la blockchain para guardar cualquier cosa, pero esto no quiere decir que dichos archivossean malware… En este ejemplo específico estos archivos no son ejecutables y sólo contienen “la descripción” del virus más no el virus en sí. Otro caso interesante son los archivos que contienen malware pero en sí no están infectando nada (como algún keygen que tengas guardado en algún respaldo de Windows o qué se yo); Éstos se pueden tratar como amenazas potenciales o mantener ahí mientras no los ejecutes ni con wine.

Es muy importante entonces que revises uno a uno los archivos infectados (y la amenazaque supuestamente presentan) para asegurarte de si realmente son una amenaza o te encuentras delante de un falso positivo. En este paso tu buscador favorito es la mejor herramienta que podrías tener a la mano.

Tratamiento de amenazas

Para lidiar con los archivos realmente infectados tienes 2 opciones: Eliminarlos o Moverlos a Cuarentena. En caso de que estés usando la GUI ésta debería darte opciones para ambas cosas pero como personalmente a mi no me gustó explicaré el procedimiento vía consola:

Elminarlos es sencillo:

# rm -rf ruta/al/archivo

Para moverlos “a cuarentena” lo ideal es crear un usuario especial para mantener dicha carpeta y después mover los archivos a la misma para aplicarles los siguientes permisos (supongamos que tu usuario se llama antivirus y tu carpeta se llama cuarentena):

# cd /home/antivirus/cuarentena
# find -type d -exec chmod 000 {} \;
# find -type f -exec chmod 000 {} \;

Esto dejará la carpeta y los archivos sellados a lectura/escritura y ejecución, que es lo que queremos cuando sospechamos que algo contiene algún malware.

3) Anti-rootkits

Éstos son los programas chkrootkit y rkhunter. Para instalarlos por ejemplo en Fedora Linux, corremos en una terminal:

# dnf -y install chkrootkit rkhunter

Cada uno de estos se usan como root de la siguiente manera:

# chkrootkit -q
# rkhunter --update && rkhunter --propupd && echo "Time: $(date)" >> /var/log/rkhunter.log && rkhunter --cronjob --rwo --novl -q --summary --logfile /var/log/rkhunter.log

4) Adblock Plus y HTTPS Everywhere

La mayoría del malware actual llega a través del navegador web, esto no es una sorpresa para nadie. La mayoría de navegadores web incluyen protección contra phishing (robo de identidad) y te advierten sobre sitios sospechosos, pero nunca está demás un poco más de seguridad… Instalando estas 2 extensiones (disponibles para Chrome/Firefox y otros) podrás protegerte de bastantes amenazas allá afuera, ABP cuenta con protección anti-malware y DoNotTrack por ejemplo:

Mientras que HTTPS Everywhere se encargará de forzar la utilización de cifrado en tus peticiones a los sitios web que visites, previniendo ataques de phishing/hijacking y similares mediante su programa de SSL Observatory:

5) Firewall

Asegúrate de que el cortafuegos de tu sistema esté activo y bien configurado. Bloquea todos aquellos puertos y servicios que no tengan motivo para estar abiertos. Si usasIPTables, asegúrate de que tienes reglas establecidas tanto para IPv4 como para IPv6.

Extra: Aprende a usar SELinux

Hay distros que vienen por defecto con esta excelente herramienta de seguridad pero mucha gente a veces la desactiva en sus equipos ¡gran error!

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto:
search previous next tag category expand menu location phone mail time cart zoom edit close