Seguridad Hardening en Linux Hardening e

seguridad Hardening en Linux Hardening en Linux Ricardo Lozano Colín [email protected] La seguridad ha sido un te

Views 80 Downloads 4 File size 914KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

seguridad Hardening en Linux

Hardening en Linux Ricardo Lozano Colín

[email protected]

La seguridad ha sido un tema que hasta hace unos años no era muy atendida por los lideres en tecnologías de la información, no porque no fuera importante más bien porque la información no se compartía como se hace en estos momentos, y todo gracias a Internet que ha permitido que lo que se hace hoy en alguna comunidad se conozca mañana alrededor del mundo. El Hardening lo debemos entender como la serie de pasos a seguir para hacer más robusta nuestra instalación de Linux, coloquialmente conocido como Endurecer.

42

A

ntes que nada debemos definir algo que será imprescindible durante el ciclo de vida del servidor Linux -el tipo de servicio que va brindar, en este artículo vamos a explicar paso a paso como aplicar un Hardening básico a un servidor Linux, aplica para cualquier tipo: Servidor WEB, Base de Datos o Aplicaciones. Sabemos que ningún sistema operativo por naturaleza es seguro y eso SI debería preocuparnos antes de conectarlo a la red y más si estará en la DMZ (Zona Desmilitarizada) de nuestra organización, por lo que siempre y reitero - siempre que vayamos a instalar un equipo Linux deberíamos cumplir con un Checklist (una serie de pasos) como el propuesto o uno desarrollado de acuerdo a las necesidades internas del Departamento de Seguridad de cada Organización:

• • •

• • • • • • •

Muchas veces y seguro les parecerá familiar hemos visto ordenadores en lugares que no cumplen con estas condiciones y que aunque parezca extraño ofrecen servicios relevantes, como el proceso de nómina, de contabilidad o planeación, las cosas han ido cambiando y ahora que se ha dado la fusión entre el Negocio y la Tecnología se han establecido las reglas que se deben seguir para que por un lado se cumplan los

Seguridad Física, BIOS, Particionamiento, Software mínimo necesario, IP, Actualizar sistema, SSH,

Linux+ 12/2008

Cuentas de acceso, Servicios del Sistema, Puertos.

Seguridad Física

No demos el primer paso sin definir y tener claro que nuestro ordenador tendrá que ubicarse en un lugar -seguro- adaptado con los estándares mínimos recomendados, un centro de cómputo sería lo ideal, que cuente con: • • • •

Aire acondicionado, Piso falso, Unidad de Energía Ininterrumpida (UPS), Sistema de Control de Acceso etc.

seguridad Hardening en Linux objetivos de la organización con el apoyo de la ello tendría que conocer la contraseña o tener extendida si existe). La extendida nos sirve para tecnología y por otro se crea en la tecnología habilitados los medios para intentar hacer uso albergar más particiones, llamadas lógicas con lo como optimización de procesos de negocios. del mismo. que logramos tener más de 4 particiones en total. Las Particiones lógicas siempre serán albergadas BIOS Particionamiento dentro de una extendida. Particionamiento para Es importante además de actualizar el BIOS Definir un adecuado particionamiento de nuestro servidores en producción se recomienda tener al de nuestro ordenador protegerlo contra mo- disco duro quitara a los administradores muchos menos y separados: dificaciones a su configuración, para ello se dolores de cabeza, si es la primera vez que insrecomienda: talas Linux y con fines prácticos se recomienda • / raíz usar el particionamiento automático, en este caso • /boot • Establecer una contraseña, Linux realiza dicha tarea por nosotros, con todas • /home • Quitar arranque por CD, las implicaciones que ello pueda traer, sin embar- • /usr • Quitar arranque por USB, go si lo que queremos es tener mejor organizada • /var • Quitar arranque por Discket. nuestra información y el acceso a ella se reco- • /tmp mienda hacer un particionamiento personalizado • swap Estas simples medidas nos permitirán asegurar considerando los siguientes puntos. Lo que deque en caso de que alguien tuviera acceso fí- beríamos saber. Un disco duro puede tener hasta Algo que no debemos dejar a un lado y que desico al ordenador no podrá entrar ya que para cuatro particiones principales (incluyendo la pendera mucho el rendimiento de nuestro ordenador es el espacio asignado a nuestra memoria Listado 1. Inventariando y Eliminando Software SWAP, existe aún el mito que la SWAP debe ser el doble de nuestra memoria física -RAM-, ojo [root@host ~]# rpm -qa | more esto solo aplica o aplicaba para ordenadores de cpio-2.6-20 124,256 o incluso para 512 Megas en RAM, en time-1.7-27.2.2 la actualidad con los ordenadores que existen redhat-logos-4.9.99-8.el5.centos esta regla desaparece, por lo que de ninguna libXext-1.0.1-2.1 manera deberemos superar los 2GB en la melibXcursor-1.1.7-1.1 moria SWAP: libXinerama-1.0.1-2.1



cracklib-dicts-2.8.9-3.3 aspell-es-0.50-13.2.2



ftp-0.17-33.fc6 Supongamos que queremos desinstalar FTP : -ejecutamos[user@host ~]# rpm -e ftp-0.17-33.fc6



Listado 2. Configurando una IP Estática



Hasta 512 M en RAM asignar el doble de memoria SWAP. Hasta 1GB en RAM asignar la misma cantidad para la memoria SWAP. Entre 2 y hasta 4 GB de RAM asignar la mitad de memoria SWAP. Con más de 4GB no deberá exceder los 2GB de memoria SWAP.

[user@host ~]$ cd /etc/sysconfig/network-scripts/ [user@host ~]$ vi ifcfg-eth0 (en caso que estemos usando esta interfaz) DEVICE=eth0 BOOTPROTO=none IPADDR=x.x.x.x peerdns=no NETMASK=x.x.x.x GATEWAY=x.x.x.x USERCTL=no HWADDR=xx:xx:xx:xx:xx:xx ONBOOT=yes TYPE=Ethernet (Nota: No olvidar que si nuestro ordenador va a tener acceso a Internet se debe poner la puerta de enlace correcta o jamás podrá comunicarse al exterior) [user@host ~]$ cd /etc/hosts [user@host ~]$ vi hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 x.x.x.x nombre.dominio nombre

Figura 1. Endureciendo Linux

www.lpmagazine.org

43

seguridad Hardening en Linux Además considera que en alguna de estas particiones se guardaran los respaldos, por lo que se le deberá asignar más espacio en DD (Disco Duro), además de una partición para los datos o las aplicaciones (/opt), antes de tomar la decisión es recomendable tener claro para que servirá cada una de ellas. OJO: Seguir las buenas prácticas y recomendaciones te puede salvar de muchas tareas administrativas o de tener ordenadores parchados.

Software Mínimo Necesario

Actualizar Sistema

Antes de cualquier cosa y una vez instalado el ordenador debemos aplicar las últimas actualizaciones del sistema operativo, esto tardará dependiendo del número de los mismas, afortunadamente para los que no les gusta el instalar con un (configure,make,make install) existe la herramienta YUM que permite instalar, desinstalar y actualizar software sin la necesidad de preocuparnos por las dependencias pues en su uso ya vienen implícitas (Listado 3).

red, por naturaleza y definición es seguro... sin embargo podemos ayudarle a tener un mayor control sobre lo que permita durante su uso: •

Cambiar el puerto por default

[user@host ~]$ vi /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.73 2005/ 12/06 22:38:28 reyk Exp $ #Port 22 -cambiarlo por uno que se encuentre libre-

Una parte muy importante en el hardening es SSH • Negar el acceso remoto como root considerar solo instalar el software necesario, Secure Shell es el protocolo que permite accesolo lo que se va utilizar, aquellos que hemos sar ordenadores de manera remota a través de la #PermitRootLogin no instalado linux alguna vez o más bien muchas Listado 3. Parámetros Básicos de YUM veces sabemos que lo recomendable es instalar # Actualizar el sistema solo la -base- y a partir de esto ir instalando lo [user@host ~]$ yum update que vayamos usando. Loading "rhnplugin" plugin Sin embargo si por alguna razón instalamos # rhel-i386-server-5 100% |=========================| 1.4 kB 00:00 algún paquete RPM (Package Manager) y posSetting up Update Process terior a la instalación inicial deseáramos elimi# Resolving Dependencies narlo el proceso a seguir es el presentado en el --> Running transaction check Listado 1. Y así sucesivamente para todo aquel ---> Package initscripts.i386 0:8.45.19.1.EL-1 set to be updated paquete que no deseemos en nuestro sistema. --> Finished Dependency Resolution Pero recalco que el 90% de lo que queremos # Dependencies Resolved instalar ya debe estar definido desde la instala# Package Arch Version Repository Size ción y post instalación solo debería ser el 10% # Updating: de agregar paquetes.

IP

Es recomendable asignar una Dirección IP -fija- a los ordenadores que tienen el rol de -productivosinclusive y como mejor practica se debería asignar un segmento de red exclusivo para los mismos, lo cual nos permitirá un control más preciso y limpio, entendamos como limpio a la actividad de no mezclar ordenadores personales de uso diario con ordenadores que brindan un servicio como puede ser el correo electrónico. Los archivos que debemos cambiar muestra el Listado 2.

initscripts i386 8.45.19.1.EL-1 rhel-i386-server-5 1.6 M # Transaction Summary Install 0 Package(s) Update 1 Package(s) Remove 0 Package(s) # Total download size: 1.6 M # Is this ok [y/N]: y -para instalar la actualización# Búsqueda de paquetes [user@host ~]$ yum search postgres (yum search nombre-del-paquete) Loading "rhnplugin" plugin rhel-i386-server-5 100% |=========================| 1.4 kB 00:00 postgresql-devel.i386 : PostgreSQL development header files and libraries. libdbi-dbd-pgsql.i386 : PostgreSQL plugin for libdbi php-pdo.i386 : A database access abstraction module for PHP applications postgresql-server.i386 : The programs needed to create and run a PostgreSQL server. postgresql.i386 : PostgreSQL client programs and libraries. qt-PostgreSQL.i386 : PostgreSQL drivers for Qt's SQL classes. Etc. Instalar paquetes [user@host ~]$ yum install postgresql.i386 Desinstalar paquetes [user@host ~]$ yum remove postgresql.i386 Paquetes disponibles para instalar [user@host ~]$ yum list available Paquetes instalados en el sistema [user@host ~]$ yum list installed Paquetes instalados en el sistema y que requieren acualizarse

Figura 2. Endureciendo Linux

44

[user@host ~]$ yum list update

Linux+ 12/2008

Club Pro

Listado 4. Cuentas de acceso [user@host ~]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ========================================= NOLOGIN = Nos sirve para decirle al servidor que ese usuario aún cuándo este dentro del archivo de password no tiene permitido hacer “login” al servidor, es decir accesar. BASH = Nos sirve para decirle al servidor que ese usuario determinado puede hacer “login” al servidor y tiene asignado un espacio “home”. Nota: El caso anterior no aplica para los usuario de administración por ejemplo: admin1, admin2, es decir si el usuario no es necesario y no cumple una función dentro del servidor no debería existir -así de sencillo-.

   DESARROLLADORES.ES

www.desarrolladores.es Desarrollo de Portales de Gestión Avanza dos, Extranets, Intranets, Aplicaciones M2M y Aplicaciones GIS. Uso de tecnologías con licencias GNU/GPL. Experiencia en proyectos de Administración Pública. Especializados en plataformas de gestión usando TOMCAT, JSP, JAVA, POSTGRESQL y JASPER REPORTS.

Listado 5. Puertos Una herramienta que nos puede servir bastante para este caso es sin duda NMAP la cual nos sirve para escanear puertos, hacer sniffing y monitorear nuestro sistema. [user@host ~]$ nmap -sT localhost (para puertos TCP) Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-09-30 14:38 CDT Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1672 closed ports PORT STATE SERVICE

EVO Sistemas Libres

22/tcp open ssh

www.evosistemas.com/ Desarrollo de software, aplicaciones basadas en web, integración, mantenimiento, administración y migración de sistemas de software libre, consultoría TIC, sistemas VoIP. [email protected]

25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 443/tcp open https 953/tcp open rndc 3306/tcp open mysql 5432/tcp open postgres [user@host ~]$ nmap -sU localhost (para puertos UDP) Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-09-30 14:41 CDT Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1484 closed ports PORT STATE SERVICE 111/udp open|filtered rpcbind 947/udp open|filtered unknown 950/udp open|filtered unknown Nota: En el caso que detectemos que un puerto -está abierto- que a su vez está asociado a un servicio, debemos cerrarlo y en su caso apagar el servicios. Otras opciones de NMAP: [user@host ~]$ nmap -F (fast scan) [user@host ~]$ nmap -p 1-50 (rango de puertos)

www.lpmagazine.org

Zitralia

[email protected] Zitralia es una compañía española de I+D+i pionera en el desarrollo de sistemas de seguridad avanzada en entornos distribuidos y sistemas de acceso remoto. El objetivo fundamental de la compañía se centra en mitigar el acceso ilegítimo y el robo de datos, mediante tecnologías punteras de protección de la información.

seguridad Hardening en Linux •

Colocar un Banner de Bienvenida/Adve- por lo que casi es un hecho que los servicios que rtencia tengamos activos corresponderán al software instalado, por lo que es importante asegurar que [user@host ~]$ cd /etc/ssh/ dichas herramientas inician y están en el nivel de [user@host ~]$ touch banner arranque correcto del sistema operativo: Nota: El mensaje debe contener un aviso en el que se alerta a los usuarios sobre que el sistema que están accesando es privado y que por tal motivo todo el tiempo que dure la conexión será monitoreada, registrada y en su caso investigada.



veles de servicio determinados originalmente. Ojo: Si apagamos un servicios con el comando /etc/init.d/iptables stop solo será de manera provisional, es decir que en el siguiente reinicio del ordenador nuestro servicios de iptables arrancará en los niveles configurados Activar servicios en los niveles de arran- originalmente. que del sistema operativo

Puertos

Podríamos tratar de entender esta parte como una de las más importantes, ya que entre más 6:off -puertas abiertas- dejemos en nuestro servidor httpd 0:off 1:off 2:off 3:on 4:off 5: será más vulnerable, por ello en esta etapa • Asegurarse que dentro del archivo de con- off 6:off debemos pararnos y explorar detenidamente -si figuración se hizo referencia al banner: ip6tables 0:off 1:off 2:off 3:off 4: nuevamente!- las herramientas que se instalaoff 5:on 6:off ron en el ordenador, de ello depende que solo # no default banner path dejemos abierto lo necesario, por ejemplo si Banner /etc/ssh/banner Ejemplo: Como vemos el servicio de ip6tables instalamos el manejador de base de datos Post[user@host ~]$ vi banner solo está activo en el nivel de arranque 5, pero gres sin lugar a duda debemos dejar abierto el - Mensaje Personalizadonosotros queremos que este en el nivel 2,3,4 y puerto que le corresponde (5432) y así sucesi5, ejecutamos lo siguiente: vamente para cada servicio que viva en nuestro • Reiniciar el servicio de SSH ordenador (Listado 5). [user@host ~]$ chkconfig --list

hidd 0:off 1:off 2:on 3:on 4:on 5:on

[user@host ~]$chkconfig --level 234 [user@host ~]$ /etc/init.d/sshd res-

ip6tables on

tart

con la opción -off- hacemos el proceso conCuentas de Acceso trario, es decir apagamos dicho servicios en En muchas de las organizaciones no hay un solo determinado nivel de arranque del sistema administrador de ordenadores, lo que puede operativo: ocasionar una serie de conflictos al momento de realizar tareas administrativas, para lo cual [user@host ~]$ chkconfig --list se sugiere crear cuentas de acceso por el nú- hidd 0:off 1:off 2:on 3:on 4:on 5:on mero de administradores y darles permisos con 6:off la herramienta SUDO para ejecutar comando httpd 0:off 1:off 2:off 3:on 4:off 5: que solamente root podría, con esto tendremos off 6:off un control más detallado de los comando que ip6tables 0:off 1:off 2:on 3:on 4:on se pueden ejecutar, por ejemplo tal vez uno de 5:on 6:off nuestros administradores solamente debería tener permisos de realizar respaldos, entonces • Activar y Apagar servicios: solo le damos permisos de ejecutar los comandos correspondientes a la creación de respaldos. Otro [user@host ~]$ chkconfig ip6tables off caso y es el que describiremos aquí es cuando ins- [user@host ~]$ chkconfig --list talamos software adicional, se me ocurre Apache, hidd 0:off 1:off 2:on 3:on 4:on 5:on Postgres, SSH etc, dichas instalaciones y la ma- 6:off yoría del software crea usuarios por default que httpd 0:off 1:off 2:off 3:on 4:off 5: muchas veces solo maneja de manera interna lo off 6:off que quiere decir que como primer actividad debe- ip6tables 0:off 1:off 2:off 3:off 4: mos quitarle acceso al servidor a todo usuario que off 5:off 6:off solo trabaje de manera local (Listado 4). Con la opción -on- hacemos el proceso contraServicios del Sistema rio, es decir activamos dicho servicios en los niRecordemos que una de las características de Linux, es que es multitarea, lo que quiere decir que puede ejecutar distintas tareas/procesos a la vez, sin embargo no deberíamos jugar con ello y si es- En la red pecificar que servicios son los que deberían estar • https://www.redhat.com/docs/manua funcionando. Los servicios tienen una relación ls/enterprise/RHEL-4-Manual/en-US/ directa con el Software Mínimo recomendado Security_Guide/

46

Linux+ 12/2008

Conclusiones

Como vemos asegurar un servidor Linux implica considerar muchas variables, sin embargo puede no ser tan tormentoso si llevamos consigo un orden de ideas, si seguimos ciertas buenas prácticas que nos ayuden a cumplir con el cometido asegurar linux, esto es lo mínimo que deberíamos cumplir ya que una vez cumplido esto podríamos y sugerimos aplicar las misma idea a ciertos servicios como apache, base de datos, servidor de aplicaciones etc. Un segundo nivel en este tema sería el manejo de: • • • •

Iptables, Permisos específicos a archivos de datos, Hardening sobre servicios, Hardening sobre el Kernel etc.

Nota

Todos los comandos mostrados en este documento fueron probados en Linux Centos 5.2, lo que quiere decir que funcionan en toda la familia RedHat.

Sobre el autor Ricardo Lozano Colín gusta del Software Libre y de todo lo que refiera a la aplicación de estándares y buenas prácticas en las Tecnologías de la Información (TI), actualmente aparte de Laborar en el Instituto Federal Electoral participa en proyectos para Universidad de Negocios ISEC usando Software Libre.