Asegurando un poco tu Redhat 6.2
Por DeX
 

 

Introducción

   A lo largo del tiempo, me he encontrado con todo tipos de sistemas operativos en servidores mexicanos, Linux, SunOS, Windows, MacOS, HP-UX, SCO Unixware/Openserver, FreeBSD, OpenBSD, NetBSD, IRIX, y hasta OpenVMS, siendo Linux Redhat el mas usado aparte de Windows.

   En este articulo tratare de ayudarles un poco a asegurar su Linux Redhat 6.2. No estoy tratando de enseñarles como hacer su sistema seguro, libre de intrusos y gente que pueda entrar sin permisos, solo trato de dar una poca ayuda para que por lo menos este un poco seguro. ningún sistema es completamente seguro..., creo que hay que reconocer eso.

Podrías poner firewalls y hacer shells falsas, cerrar todo tipo de acceso etc, pero yo creo que Redhat no es un sistema para alguien que quiere realmente poner seguridad en su maquina, en este caso puedes instalarte NetBSD, u OpenBSD.

Lista de bugs Remotos Conocidos

   Hay muchos bugs remotos conocidos en Linux Redhat 6.2, como el famoso wu-ftpd 2.6.0(1) bug, o el bug en el Named 8.2.2. Estos bugs pueden hacer que el atacante se apodere de tu computadora de una manera rápida y sencilla. En esta parte diré que corre o hace cada bug y un link al nuevo package (i386) para Linux Redhat 6.2.

1. Wu-FTPD 2.6.0(1):
Efecto: Ejecuta una shell con privilegios de root. o puede ejecutar una shell con privilegios del user por el que se acceso, según el bug usado.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/wu-ftpd-2.6.0-14.6x.i386.rpm

2. imapd IMAP4rev1 v12.264:
Efecto: Ejecuta una shell con privilegios del user con el que se acceso al servicio.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/imap-2000-2.6.i386.rpm

3. Named 8.2.2:
Efecto: Ejecuta una shell con privilegios de root.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/bind-8.2.3-0.6.x.i386.rpm

4. innd 2.2.2:
Efecto: Crea una suid shell en cualquier lugar del sistema.
Parche: ftp://ftp.rpmfind.net/linux/redhat/7.1/en/os/i386/RedHat/RPMS//inn-2.3.1-2.i386.rpm

5. gdb 2.0beta2-23:
Efecto: Ejecuta una shell con privilegios de root.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/gdm-2.0beta2-26.i386.rpm

6. rpc.statd:
Efecto: Ejecuta una shell con privilegios de root.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/nfs-utils-0.3.1-0.6.x.1.i386.rpm

7. piranha:
Efecto: tiene un bug en el user y password default del piranha.
Parche: ftp://updates.redhat.com/6.2/en/os/i386/piranha-0.4.14-1.i386.rpm

Bugs locales conocidos:

   Hay muchos bugs locales conocidos en Redhat 6.2, son demasiados como para listarlos en el orden de los remotos, todos los parches los puedes encontrar en ftp://updates.redhat.com/6.2/en/os/i386/ Es muy altamente recomendado que parches estos bugs locales, ya que si en tu servidor das shells a los users pueden conseguir root en un dos por tres.


Servicios en el Inetd

   Los servicios son programas de ejecución remota a través de un cliente/servidor, como lo son en este caso talk, telnet, ftp, rlogin, gopher, tftp, etc..., Redhat 6.2 instala muchos de estos servicios por default en la instalación. Ahora cerraremos los servicios que en realidad
no te sirvan.

   Edita el archivo /etc/inetd.conf (como root) con el editor que quieras, pico, vi, emacs, o el que sea, veras las primeras líneas como esto:

#
# inetd.conf This file describes the services that will be available
# through the INETD TCP/IP super server. To re-configure
# the running INETD process, edit this file, then send the
# INETD process a SIGHUP signal.
#
# Version: @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors: Original taken from BSD UNIX 4.3/TAHOE.
# Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
# Modified for Debian Linux by Ian A. Murdock <imurdock@shell.portal.com>
#
# Modified for RHS Linux by Marc Ewing <marc@redhat.com>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'


Bla bla bla bla, el punto esta mas abajo, veras líneas como estas:

#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#time stream tcp nowait root internal
#time dgram udp wait root internal

   Ok, hasta aquí todo bien, estos servicios están cerrados porque tienen un "#" al principio de la línea, que los señala como comentarios.
Ahora vemos algo como esto:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd

   Ok, que vemos aquí?, el servicio rsh, ftp y rlogin están abiertos, y aquí, si tienes telnet abierto, de que te sirve telnet el rlogin abierto?, ponle un signo de "#" al principio de la línea y continuemos...

talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd
ntalk dgram udp wait nobody.tty /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp wait nobody.tty /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
imap stream tcp nowait root /usr/sbin/tcpd imap

   Todos estos son servicios que solo dejaras abiertos si los necesitas, por ejemplo, tu tienes un servidor de webhosting de usuarios Ok, el pop3d y el imapd están abiertos, de seguro los necesitas.., pero sino ya sabes que hacer... asi te iras hasta acabar con el archivo y ver que servicios te sirven y cuales no, poniéndoles el "#".

   Ahora, después de haber editado el /etc/inetd.conf, darás el comando "killall -HUP inetd", y esto para resetearlo....Ahora, solo es cuestión de hacerte un portscan para ver si todo quedo en orden.

Otros Daemons

   Si usas tu maquina para accesar remotamente a ella, te recomiendo que cierres el rlogind y el telnet, ya que pasan toda la información sin encriptar, y usa ssh, ssh es un servicio de acceso remoto encriptadamente. A continuación el link de donde te puedes bajar este programa:

SSH:
ftp://ftp.ssh.com/pub/ssh/ssh-2.4.0.tar.gz

   Realmente a mi no me gusta el Wu-FTPD, ya que esta lleno de bugs, por mas que no sean públicos, pero a todas las versiones se les encuentran bugs muy serios. por eso te recomiendo que te bajes el ProFTPD o el NcFTPD. A continuación los links de estos:

ProFTPD:
ftp://ftp.proftpd.org/distrib/proftpd-1.2.2rc2.tar.gz
<-- Source.
ftp://ftp.proftpd.org/distrib/packages/RPMS/i686/proftpd-1.2.2rc2-1.i686.rpm
<-- RPM.

NcFTPD:
ftp://ftp.ncftp.com/ncftpd/2.6.3/ncftpd-2.6.3-linux-x86-export.tar.gz
<-- Source.

También puedes bajarte el GNU pop3d en lugar de el clásico pop3 del Redhat.

Otros Detalles

Ok, aquí daré pequeños detalles de configuración e instalación.

Sendmail: hay dos comandos de verificación de usuarios ("VRFY", "EXPN"), y exponer que usuarios existen en tu maquina puede ser muy peligroso, ya que pueden hacer bruteforce del password del usuario y penetrar tu sistema. el truco luce como esto:


sh-2.04# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 Servidor.Panchito.com ESMTP Sendmail 8.11.0/8.11.0; Sat, 5 May 2001
vrfy enano_bodoke <-- vrfy + user.
550 5.1.1 enano_bodoke... User unknown <-- No existió esta vez.
vrfy carlitos
250 2.1.5 Carlitos <carlitos@Servidor.Panchito.com> <-- El user Carlitos existe.

   No crees que esta mal?, ahora se que el usuario "Carlitos" existe, podría usar ingeniería social con el, o el típico método de atinarle al password. Añade esta línea al /etc/sendmail.cf (en cualquier parte) para bloquear estos dos comandos:
Opnoexpn,novrfy Resetea el Sendmail, ya sea /etc/rc.d/init.d/sendmail restart o kill -HUP sendmail. Listo, ahora luce como esto:

sh-2.04# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 Servidor.Panchito.com ESMTP Sendmail 8.11.0/8.11.0; Sat, 5 May 2001
04:48:20 -0500
vrfy carlitos
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)

Ok, ahora si, ya no dice si existe o no, bien :).

   Ahora, para que queremos hacer esto..., si tenemos el finger abierto?, también recomiendo cerrar el finger, por la misma razón de que da mucha información acerca de los usuarios en el sistema.


SPFX:

Existe un modulo que yo uso mucho que cambia algunas cosas en el sistema, para que algunos exploits locales no funcionen, sirve para el kernel 2.2, perfecto para un Redhat que corre 2.2.14. Este modulo es llamado

Este modulo lo puedes encontrar en:
http://packetstorm.securify.com/linux/security/spfx.c <-- lee el código
para instrucciones.

SHELLS:

   Otro error muy conocido en los administradores es darle shell a cualquier usuario que exista en el sistema. Supongamos que yo cree un usuario que se llama "soporte" para que me contacten los clientes que necesiten soporte, claro todo bien, me contactan perfectamente, pero que pasa si una persona por algún método consigue el password de soporte?, podría entrar por un acceso remoto(SSH en este caso) y conseguir tomar el control de todo el sistema.

   Si yo me hubiera tomado la molestia de editar el /etc/passwd y cambiarle la shell ("/bin/bash" por default en Redhat 6.2), por /dev/null, nada de esto hubiera pasado, al menos que hubiera explotado el Imapd o el Pop3d por algún bug conocido (ya hablamos de eso en el primer tema).
Así esta la línea de soporte:

soporte:x:69:69:Usuario de Soporte:/home/soporte:/bin/bash

   Ok, aquí vemos que el usuario soporte tiene shell (/bin/bash) si no la necesita, cámbiasela por /dev/null. Puedes usar la shell /bin/false si el usuario usa también el FTP, si solo usa el POP3 y el Imapd, usa /dev/null o quítasela simplemente...

También a los usuarios defaults del sistema, quítales la shell que no necesiten, como el tipico postgresql en Redhat 6.2, quítale la shell, déjale en blanco hasta los dos puntos.

TCP WRAPPERS:

   En los tcp wrappers, se ponen los ips o hosts de acceso a tus servicios, puedes denegar todos los accesos menos de .panchito.com por ejemplo.

   Muy recomendable también, si piensas hacer esto entonces te recomiendo que pongas en el /etc/hosts.deny la siguiente línea:

ALL : ALL

   Así deniegas acceso a cualquier usuario que no este alojado en el /etc/hosts.deny. Ok ahora quieres que todos los de .panchito.com puedan accesar a pop3 y a ftp?, en este caso seria esta línea en el /etc/hosts.allow:

ipop3d: .panchito.com: ALLOW <-- Lo agregamos al acceso pop3.
in.ftpd: .panchito.com: ALLOW <-- Ahora al ftp.

   Quieres denegar a todo .prodigy.net.mx para que no pueda accesar al telnetd y al ftpd?, también puedes poner esta línea en /etc/hosts.allow:

in.ftpd: .prodigy.net.mx: DENY
in.telnetd: .prodigy.net.mx: DENY

   Existe también in.fingerd(finger), in.talkd(talkd), etc.. si usas proftpd en lugar de wu-ftpd en todo caso seria in.proftpd, no in.ftpd. todos los puedes encontrar en el directorio /usr/sbin. Hay una buena guía sobre wrappers en la pagina de Ezkracho Team.

A continuación el link de esta guía:

http://www.ezkracho.com.ar/pub/seguridad/tcp_wrapper_logs.zip
<-- Guía de generación de LOGS con el tcp-wrapper.


Despedida

   Bueno, aquí acaba el articulo, espero que te haya servido de algo, en este articulo no intento hacerte un súper Linux Redhat Admin, porque esto no es todo lo que necesitas para mantener tu sistema seguro, podrías poner firewalls, shells falsas, comandos no existentes, cambiar configuraciones, bajar loggers, etc..., ningún sistema es seguro, pero puedes asegurarlo lo mas que puedas.

Hay miles de trucos mas, pero estos son los esenciales supongo yo.

Trata de mantenerte al día de los nuevos bugs, un lugar donde se publican es el sitio http://www.securityfocus.com.

Si esta un poco revoltoso, perdóname, es mi primer articulo :) Nos vemos.

Índice
Fallas Básicas NT4 y Win2000


 
Comentarios a : dex@raza-mexicana.org