Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Seguridad 101 en GNU/Linux

Seguridad 101 en GNU/Linux

Gabriel Covarrubias

March 18, 2017
Tweet

More Decks by Gabriel Covarrubias

Other Decks in Technology

Transcript

  1. Seguridad en Servidores Linux 101 Por: Gabriel Covarrubias @covarrubiasgg Hiram

    Kampokalas @thekreek Gultij: Grupo de Usuarios de GNU/Linux de Tijuana
  2. Exención de Responsabilidad La siguiente presentación es una charla introductoria

    sobre aspectos de seguridad en servidores basados en sistemas UNIX. Los consejos y demostraciones realizadas durante la presentación no garantizan la completa seguridad de sus sistemas y es responsabilidad de quien administra dichos sistemas realizar un análisis de riesgos para implementar las medidas de seguridad adecuadas.
  3. Seguridad Informática La seguridad informática es la disciplina que se

    ocupa de diseñar las normas, procedimientos, métodos y técnicas destinados a conseguir un sistema de información seguro y confiable. 5
  4. Sistema Seguro ▫ Integridad: Se debe garantizar que la información

    no fue manipulada o alterada por personas o procesos no autorizados. ▫ Confidencialidad: Asegurar el acceso a la información únicamente a aquellas personas con la debida autorización. ▫ Disponibilidad: El acceso a la información y los sistemas deben estar disponibles en el momento que se requieran. 6
  5. “ “Si gastas más dinero en café, que en Seguridad

    Informática, vas a ser hackeado. Aún más, mereces ser hackeado.” — Richard Clarke (Ex-coordinador de Seguridad Nacional USA) 7
  6. Consejos 1. Crear un usuario sin privilegios. 2. Utiliza sudo.

    3. Actualiza el sistema. 4. Deshabilita el acceso root por SSH. 5. Cambiar el puerto default de SSH. 6. Crear certificados de acceso SSH. 9
  7. Utiliza Claves “Fuertes” Opción 1) Utiliza un generador de contraseñas.

    http://passwordsgenerator.net Opción 2) Utiliza frases como password. LlegaAlto#SuperaElVertigo$203 11
  8. 12 Utiliza sudo Sudo ( Super User Do) es una

    aplicación que permite ejecutar un programa con los privilegios de seguridad de otro usuario ( root). gultij@Server$ sudo service apache2 stop gultij is not in the sudoers file. This incident will be reported.
  9. 13 Utiliza sudo Para utilizar sudo, debe agregar el usuario

    al archivo sudoers gultij@Server$ visudo #User privilege specification root ALL=(ALL:ALL) ALL gultij ALL=(ALL:ALL) ALL gabriel ALL=(ALL:ALL) ALL
  10. 14 Actualiza el sistema Actualiza seguido y a conciencia #Debian

    gultij@Server$ sudo apt-get update gultij@Server$ sudo apt-get upgrade #Centos gultij@Server$ sudo yum update
  11. Actualiza a Conciencia 1. Utiliza repositorios oficiales. 2. Instala sólo

    paquetes que realmente necesitas. 3. Actualiza paquetes cuando sea necesario. 4. Respalda tus configuraciones. 15
  12. 16 ¿Qué es SSH? SSH (Secure SHell) es el nombre

    del protocolo y del programa que se utiliza para acceder a máquinas de forma remota. (También es uno de los servicios más atacados).
  13. 17 Asegurando SSH gultij@Server# sudo vim /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication

    no Port 666 ó ListenAddress 192.168.0.1:666 Protocol 2 AllowUsers soloyo tuno test ClientAliveInterval 300 ClientAliveCountMax 0
  14. Utiliza SSH Keys SSH Permite diferentes niveles de autenticación, el

    más común es utilizar contraseñas, pero se pueden utilizar otros métodos más seguro como es SSH Key. 18
  15. 20 ¿Cómo genero un SSH Key? gultij@Laptop:~$ ssh-keygen Generating public/private

    rsa key pair. Enter file in which to save the key (/home/gultij/.ssh/id_rsa): Created directory '/home/gultij/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again:
  16. 21 ¿Cómo paso mi Key al server? Opción 1) gultij@Laptop:~$

    cat ~/.ssh/id_rsa.pub | ssh gultij@server_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  17. “ “El único sistema seguro es aquel que está apagado,

    con una capa concreto dentro de un cuarto sellado protegido por guardias armados … aún así tendría mis dudas ”. — Gene Spafford (Experto en Seguridad Informática) 23
  18. Consejos 1. Enlista los servicios necesarios. 2. Activa el firewall

    de acuerdo a tu lista (iptables). 3. Utiliza Fail2ban. 4. Utiliza protocolos seguros. 25
  19. 26 ¿Qué son servicios? Los servicios son procesos o conjuntos

    de procesos que se ejecutan en el servidor. Cada servidor ejecutará distintos proceso de acuerdo a su propósito, por ejemplo, base de datos, aplicación web, telefonía, Email, DNS, etc. etc. etc.
  20. 27 Ejemplo: Servidor LAMP Servicio Publico/Privado Protocolo Puerto ssh publico

    TCP 22 / otro Apache publico TCP 80 / 443 Mysql privado PHP Publico -> Apache email Privado -> ssmtp
  21. 28 ¿Qué es iptables? Netfilter es un framework en el

    kernel de Linux para manipular paquetes basado en diferentes estados. Iptables es parte de esa framework.
  22. 30 ¿Cómo se usa iptables? gultij@Server$ sudo iptables -L Chain

    INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
  23. 31 Tablas de iptables Filter INPUT OUTPUT FORWARD NAT PREROUTING

    POSTROUTING OUTPUT INPUT Mangle PREROUTING POSTROUTING OUTPUT INPUT FORWARD
  24. 32 Políticas de iptables ACCEPT: Acepta todos los paquetes (default).

    DROP: Descarta los paquetes sin realizar ningún otro procedimiento. gultij@Server$ sudo iptables --policy INPUT DROP
  25. Whitelist Se le llama Whitelist a la política que deniega

    todo el tráfico por defecto y acepta sólo paquetes específicos. Se recomienda esta política cuando sea viable. 33
  26. 34 Iptables en servicios gultij@Server$ sudo . . . iptables

    -A INPUT -p icmp -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP
  27. DoS (Denial of Service) Un DoS es un ataque dirigido

    a un servidor o equipo de red, con el propósito de provocar la inaccesibilidad del servicio para usuarios legítimos. 35
  28. Brute Force Los ataques de fuerza bruta y de diccionario

    son ataques con el propósito de descifrar una contraseña a través de intentos recurrentes. 36
  29. 37 ¿iptables “frena” esos ataques? Sí . . . pero

    no lo vamos a cubrir hoy porque es una charla introductoria y necesitamos conocer más a detalle netfilter en sus tablas y cadenas (chains).
  30. 38 Revisemos las reglas nuevamente gultij@Server$ sudo . . .

    iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT* iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP * Esta regla permite un ataque de BruteForce al servicio de ssh
  31. 40 ¿Cómo funciona fail2ban? Fail2ban “monitorea” la actividad de los

    logs que generan los servicios y con base en ese output ejecuta acciones de bloqueo.
  32. 41 Ejemplo log * /var/log/messages OpenSuse Server Mar 16 13:13:08

    phone6 sshd[29676]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.100.50 user=root Mar 16 13:13:10 phone6 sshd[29673]: error: PAM: Authentication failure for root from 192.168.100.50 Mar 16 13:13:11 phone6 cron[29650]: pam_unix(crond:session): session closed for user root Mar 16 13:13:12 phone6 sshd[29705]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.100.50 user=root Mar 16 13:13:14 phone6 sshd[29673]: error: PAM: Authentication failure for root from 192.168.100.50 Mar 16 13:13:15 phone6 sshd[29723]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.100.50 user=root Mar 16 13:13:17 phone6 sshd[29673]: error: PAM: Authentication failure for root from 192.168.100.50 Mar 16 13:13:17 phone6 sshd[29673]: Connection closed by 192.168.100.50 [preauth]
  33. 42 Jails Fail2ban utiliza el concepto de Jails para penalizar

    a un host. [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6
  34. 43 Filters Cada Jail especifica un filtro, los filtros son

    archivos con un definción de expresiones regulares failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via \S+)?\s*$ ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$ ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$ ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$ ^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$ ^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$ ^%(__prefix_line)sUser .+ from <HOST> not allowed because not in any group\s*$ ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$ ^%(__prefix_line)s(?:error: )?Received disconnect from <HOST>: 3: .*: Auth fail(?: \[preauth\])?$ ^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$ ^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$
  35. 45 TLS (Transport Layer Security) TLS es un protocolo criptográfico

    que proporciona comunicaciones cifradas en una red. TLS opera entre la capa de aplicación y la capa de transporte.
  36. 46 HTTPS / Letsencrypt Letsencrypt es una “Certification Authority” (CA)

    gestionada como iniciativa de la Linux Foundation para expedir certificados de forma gratuita, automatizada y extremadamente sencilla en comparación con antiguos procesos.
  37. 47 Entonces TLS es infalible NO! Ya habíamos quedado que

    nada es a prueba de balas, ha habido decenas de ataques registrado contra el protocolo SSL/TLS. • Heartbleed • BEAST • CRIME • Poodle • RC4
  38. 48 ¿Entonces para qué me molesto? Por la misma razón

    que pones seguro a tu auto aunque te puedan romper la ventana para abrirlo. Por un Internet más seguro, usa protocolos seguros.
  39. 52 Protegiendo MySQL gultij@Server$ sudo mysql_secure_installation Change the root password?

    [Y/n] Remove anonymous users? [Y/n] Disallow root login remotely? [Y/n] Remove test database and access to it? [Y/n] Reload privilege tables now? [Y/n] /etc/mysql/my.cnf bind-address = 127.0.0.1 local-infile=0
  40. 53 Protegiendo Apache /etc/apache2/apache2.conf KeepAlive Off #Ocultar version de apache:

    ServerTokens Prod ServerSignature Off #Deshabilitar el listado de directorios: <Directory /> Options -Indexes </Directory>
  41. 54 Protegiendo PHP /etc/php5/apache2/php.ini # Restringir la publicación de la

    versión de PHP expose_php = Off # Deshabilitar la ejecución de código remoto allow_url_fopen=Off allow_url_include=Off
  42. 55 Protegiendo PHP /etc/php5/apache2/php.ini #Se recomienda deshabilitar las siguientes funciones:

    disable_functions =exec,shell_exec,passthru,system,popen,curl_exec,curl_multi_exec,pars e_ini_file,show_source,proc_open,pcntl_exec #Limitar el acceso de PHP a los archivos de un directorio en especifico: open_basedir="/home/user/public_html"
  43. 56 Protegiendo PHP /etc/php5/apache2/php.ini #Establecer limites para PHP #Máximo tamaño

    de archivo enviado upload_max_filesize = 2M # Maximum 2M of file user can upload #Máximo tiempo de ejecución de cada script max_execution_time = 30 # seconds #Máximo tiempo de espera para recibir información max_input_time = 60 # seconds
  44. 57 Protegiendo PHP /etc/apache2/mods-available/mpm_prefork.conf #conf para 2 Gb de ram

    <IfModule mpm_prefork_module> StartServers 4 MinSpareServers 20 MaxSpareServers 40 MaxRequestWorkers 200 MaxConnectionsPerChild 4500 </IfModule>
  45. 58 Protegiendo PHP /etc/apache2/mods-available/mpm_prefork.conf #conf para 512 Mb de ram

    <IfModule mpm_prefork_module> StartServers 1 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 50 MaxConnectionsPerChild 500 </IfModule>
  46. Seguridad Wordpress Wordpress es el CMS más utilizado a nivel

    mundial con casi 20 millones de sitios registrados en 2016. 59
  47. 61 Consejos Wordpress • Actualiza regularmente. • Oculta la versión

    de Wordpress. • Respalda regularmente. • Deshabilita el usuario admin. • No instales temas/plugins obsoletos y/o piratas. • Utiliza plugins de fuentes confiables. • No instales plugins que no necesitas. • Oculta los nombres de usuario. • Protege el directorio de Plugins y wp-admin. • Utiliza prefijo distinto de wp para las tablas. • Wordfence. • All-in-One Security.
  48. 63

  49. Respaldo Frecuente Los respaldos serán tu último recurso en caso

    de que todo lo demás falle. !Manténlos actualizados! 64
  50. 65 Realizando Backups Rsync es un herramienta de sincronización que

    permite minimizar los datos copiados al sólo transferir las porciones que han sufrido cambios. gultij@Server$ rsync /path1/folder1 /path2/folder1
  51. 66 Realizando Backups Rsync permite transferir datos a otro servidor

    a través de una conexión segura por ssh. gultij@Server$ rsync -azP /path1/folder1 user@remote_server:/path2/folder1
  52. “ “Aquí se rompió una taza, y cada quien para

    los tacos . . .” — Gabriel (terminando esta charla) 67
  53. ! Gracias ! Gabriel Covarrubias @covarrubiasgg Hiram Kampokalas @thekreek 69

    /groups/gultij/ @gultij Grupo de Usuarios de GNU Linux de Tijuana