Defendiendo nuestro Linux ///////////////////////// Nuevamente nos encontramos en nuestra seccion "Los versos de Zomba", esta vez voy a explicar como defender nuestro Linux de ataques externos. Este texto esta dirigido a la gente que recien se instala su Linux, y se conecta a Internet y dice, "Todo muy lindo, pero estoy realmente seguro?" Bueno, para esa gente esta dirigida este texto, nunca se esta "Realmente seguro", pero podemos ayudar a que por lo menos dificultarle el trabajo a los demas. //////////////////////////////////////////////////////////////////////// Contenidos 1. Instalacion 2. Booteado 3. Archivos SUID y Sistema de Archivos 4. Quotas (Restrinciones a usuarios) 5. Logs 6. Acceso Remoto 7. Archivos Varios //////////////////////////////////////////////////////////////////////// 1. Instalacion Este paso es importante, consiste en ver bien lo que se esta instalando y ante la menor duda o desconfianza sobre algun paquete a instalar, lo mejor es no instalarlo o preguntar a alguien. Tambien es bueno preguntarse "Realmente, voy a utilizar este paquete?". Por ejemplo, si nosotros vamos a utilizar Linux como usuario comun, no vale la pena instalar el Apache Web Server, ya que no vamos a montar ninguna Server de Paginas Web en nuestra maquina. Despues, por ejemplo, si nosotros vamos a utilizar linux solamente para montar un server de Web y nada mas, no vale la pena, por ejemplo instalar el X-Windows o los componentes IPX ya que no utilizaremos ninguna Lan. //////////////////////////////////////////////////////////////////////// 2. Booteado Bueno, nos llevo su tiempo pero ya tenemos todo instalando, ahora a bootear la maquina. Si hiciste todo bien, no habra probelemas en el booteado pero si hay alguna incompatiblidad u otra cosa, lo mejor es intentar arreglarlo antes de seguir adelante. En linux (SlackWare y Red Hat) existe un directorio llamado "/etc/rc.d" que tiene los archivos que le dicen al sistema que corren cuando se bootea. Como se imaginan, este archivo es muy importante ya que cualquiera puede escribir estos archivos e instalar un backdoor, o cualquier proceso que nada inofensivo para el sistema. ############################################################################## # A diferencia de los Windows, la idea de Linux es "Tocar y Editar", con esto# # me refiero a que cualquier error que veamos hay que, por nuestra cuenta, # # editarlo y probar hasta que arreglemos ese error. Muchas veces se pueden # # perder todas las cosas, y tenes que reintalar el sistema. Asi que no temas,# # esto es Linux! # ############################################################################## Sigamos... (en SlackWare) [root@zomba rc.d]# ls -l total 40 lrwxrwxrwx 1 root root 4 Jun 5 01:31 rc.0 -> rc.6* -rwxr-xr-x 1 root root 396 Oct 2 1995 rc.4* -rwxr-xr-x 1 root root 2273 Oct 17 1996 rc.6* -rwxr-xr-x 1 root root 1244 May 21 1997 rc.K* -rwxr-xr-x 1 root root 3439 Sep 25 1997 rc.M* -rwxr-xr-x 1 root root 5054 Jun 16 1997 rc.S* -rw-r--r-- 1 root root 1336 Jul 9 1997 rc.cdrom -rwxr-xr-x 1 root root 52 Jun 12 12:24 rc.httpd* -rwxr-xr-x 1 root root 2071 Jul 29 14:19 rc.inet1* -rwxr-xr-x 1 root root 2846 Jul 2 20:41 rc.inet2* -rwxr-xr-x 1 root root 735 Jun 30 22:10 rc.local* -rwxr-xr-x 1 root root 5251 Jun 5 09:23 rc.modules* -rwxr-xr-x 1 root root 9059 Aug 23 1997 rc.serial* (en Red Hat) [root@zomba rc.d]# ls -l total 18 drwxr-xr-x 2 root root 1024 Feb 6 17:16 init.d -rwxr-xr-x 1 root root 1593 Jun 7 1998 rc -rwxr-xr-x 1 root root 695 Feb 21 19:54 rc.local -rwxr-xr-x 1 root root 6793 Jun 7 1998 rc.sysinit drwxr-xr-x 2 root root 1024 Feb 6 17:16 rc0.d drwxr-xr-x 2 root root 1024 Feb 6 17:16 rc1.d drwxr-xr-x 2 root root 1024 Feb 6 17:16 rc2.d drwxr-xr-x 2 root root 1024 Feb 6 17:22 rc3.d drwxr-xr-x 2 root root 1024 Feb 6 17:22 rc4.d drwxr-xr-x 2 root root 1024 Feb 6 17:22 rc5.d drwxr-xr-x 2 root root 1024 Feb 6 17:16 rc6.d Bueno, estos son algunos tipicos directorios '/etc/rc.d' pueden llegar a variar en distribuciones y disntintos paquetes que se tengan instalados. Cada uno de los archivos rc.* hace algo especifico. Alguno de ellos, los describe el mismo nombre, como 'rc.httpd' (arranca el servidor HTTPD de Web), el 'rc.cdrom' abre carga los drivers del CD-ROM si tenes soporte compilado en tu kernel. El archivo 'rc.local' es otra parte fundamental del directorio 'rc.d', tiene todos los archivos o programas que se ejecutan en tiempo de booteo. Proba editarlos, pero sin tocar nada para aprender mas de ellos. ///////////////////////////////////////////////////////////////// 3. Archivos SUID y el Sistema de Archivos. Antes de que cualquier usuario se conecte a tu sistema, tenes que buscar y cambiar los permisos de los archivos con permiso SUID. El comando para encontrar todos los archivos con este atributo son varios: find / -perm 4000 >> suid.txt find / -perm 4700 >> suid.txt find / -perm 4777 >> suid.txt find / -perm 4770 >> suid.txt find / -perm 4755 >> suid.txt find / -perm 4750 >> suid.txt find / -perm 4751 >> suid.txt find / -perm 4500 >> suid.txt find / -perm 4555 >> suid.txt find / -perm 4550 >> suid.txt find / -perm 4551 >> suid.txt Ahora, lo unico que tenes que hacer es mirar el archivo suid.txt y vas a encontrar todos paths a los archivos SUID que hay en tu sistema. Despues de localizar todos los archivos SUID, tenes que decidir cuales archivos necesitas y cuales queres que los usuarios tengan acceso. En mi sistema puse la mayoria con chmod 700 (Permiso solo para el root) pero algunos usuarios prefieron poner directamente Chmod 000, pero esto ultimo no es recomendable ya que hay archivos con SUID como mount que luego para montar cualquier cosa, hay que cambiarle los atributos, etc. Yo deje muy pocos archivos, estos son algunos de los que podes dejar: passwd #Cambia los password de un archivo ping #Creo no necesita explicacion, espero... traceroute #Tracea un paquete utilizando el campo del protocolo IP 'time to #live' su #Permite que un usuario se convierta en otro temporalmente Pero recuerden que depende de cada administrador elegir que archivos dejar. /////////////////////////////////////////////////////////////////////// 4. Quotas Los Quotas controlan la cantidad de espacio que es permitido usar en tu sistema y el numero total de archivos que son permitidos usar tambien. Estos permiten salvar a un sistema de ser llenado de basura y por lo tanto colgarse. Cualquier usuario malicioso puede en un sistema que no tiene los quotas configurado llenarte el Disco de Basura o utilizar todos los recursos del CPU y las memorias. Para instalar las quotas en tu sistema, simplemente elegilo cuando instalas tu sistema. Te va instalar todo el set de quotas, incluyendo todos los programas que necesitas para hacerlo funcionar. Tenes que compilar tu kernel para que soporte quotas, sino no te va a funcionar. Ante todo, fijate si ya las tenes instaladas las quotas, probando ejecutar comandos como 'man quota' o 'quota usuario'. Si no tenes respuestas, proba agregando esto a el archivo '/etc/rc.local' # Soporte de Quotas y chequeo de archivos if [ -x /usr/sbin/quotacheck ] then echo "Chequeando quotas. Esto puedo llevar algun tiempo." /usr/sbin/quotacheck -avug echo " Listo." fi # Turning ON quotas if [ -x /usr/sbin/quotaon ] then echo "Encendiendo el soporte para quotas" /usr/sbin/quotaon -avug fi # Fin Cuando rebooteas, el 'quotacheck' chequea que tu sistema de archivos y se asegura de que no haya excesos, luego el 'quotaon' dara inicio a el soporte para quotas a tu sistema. Ahora podes poner 'quota usuario' o 'quota grupo' en este caso mi usuario es 'blind': [root@zomba /]# quota blind Disk quotas for user blind (uid 501): none Esto significa que no hay quota predeterminado para el usuario sebas. Por lo tanto tenemos que hacer esto: [root@zomba /]# edquota blind Esto va a abir un archivo temporal con un editor, como esta especificado en el archivo .profile, y te va a dar el poder de cambiar el quota del usuario Aqui hay un ejemplo del quota: [root@zomba /]# edquota blind Quotas for user blind: /dev/hda2: blocks in use: 279, limits (soft = 10000, hard = 15000) inodes in use: 35, limits (soft = 1300, hard = 1500) Aqui podemos ver que el quota del blind en el hda2 es de 10 Megas de Soft y 15 Megas de Hard. Cuando llega al limite, lo unico que va a poder hacer es borrar archivos ya que no le deja grabar mas nada. Lo mismo pasa con los archivos o 'inodes', podemos restringir la cantidad de ellos. Si ponemos en Soft y Hard 0 tanto en inodes como en block (espacio a utilizar) le daremos espacio ilimitado (Mala idea) Si queres conseguir mas informacion sobre manejo de quotas, hace pone: 'man quota' ------------------------------------------------------------------------ 5. Logs Una de las partes mas importantes para ser un buen administrador es ver regularmente los logs de sistema, pero si no sabes donde estan o que uso tiene no te va a servir. Esta es una seccion MUY importante y recomiendo leerla con atencion. La unica forma de probar que un sistema fue atacado es mediante los logs. Donde estan los logs y donde como se guarda la informacion en ellos? En un sistema linux, los logs estan ubicados en los directorios '/var/adm' (SlackWare) o '/var/log' (Red Hat) no es muy dificil de ubicarlas. Por default solo hay dos logs 'syslog' y 'messages' (Esto depende de la version, ya que muchas versiones modernas traen preconfigurados logueadores). Los logs estan hechos por dos daemons, 'klogd' y 'syslogd'. El 'klogd' intercepta y loguea los mensajes del Kernel, mientras que 'syslogd' loguea todos los mensajes del systema. Hay algunos daemons del sistema que se ejecutan automaticamente en alguno de los 'rc.*' cuando booteamos el sistema. Para configurar lo que logueas, tenes que editar el archivo llamado '/etc/syslog.conf' este es un ejemplo: Otro ejemplo mas claro es mi /etc/syslog.conf # Loguear todo (salvo mails) sobre los niveles de informacion. # No loguear logs privados de autenticacion del mensajes! *.info;mail.none;authpriv.none /var/log/messages # Aqui ven como graba todos los logs de *.info a /var/log/messages, pero # se puede notar que hace un .none a mail. y a authpriv, eso logs los # especificaremos en archivos separados. # Loguear autenticacion de mensajes en /var/log/secure authpriv.* /var/log/secure # Loguear todos los mensajes de mail en /var/log/maillog mail.* /var/log/maillog # Grabar errores en mails y news en el archivo: /var/log/spooler uucp,news.crit /var/log/spooler #Fin Para mas informacion sobre el tema, simplemente hacer un 'man syslog.conf' Bueno, pero todavia nos quedan los '/var/log/wtmp' y '/var/log/utmp', mas las historias del las shells (shell histories). Porque en algunos sistemas, el 'cron' archiva los logs de tu sistema, normalmente no podes hacerles un 'chattr' u otra cosa, como lo podes hacer con otros archivos. 'chattr' cambia los atributos de los archivos en un sistema de archivos EXT2 (El sistema de archivo que utiliza Linux). Con este archivo vos podes hacer que un archivo no pueda ser borrado ni editado, salvo que esta con append, pero eso es otro tema por el cual recomienda hacer un 'man chattr'. Bueno, pero vamos a darle el lado util a este archivito magico, este puede hacer que el 'wtmp' y el 'utmp' en modo append, es decir que no pueda ser borrada ni editada por ningun usuario, esto no sirve ya que un usuario malicioso podria haber editado el 'wtmp', el 'utmp'o la historia del shell (Normalmente, este ultimo archivo pertenece al mismo usuario, por lo tanto puede modificarlo y hacer lo que le plazca) y parecer que nunca estuvo conectado. Simplemente hay que hace un 'chattr +a utmp' o wtmp o la historia del shell, vale aclarar que la historia del shell guarda en un archivo todos los comandos que ejecuta y ejecuto un usuario, por eso se hace tan importante este archivo. Este seria un ejemplo de un historia de shell: gcc smurf.c -o smurf #compila un Denial Of service smurf smurf gcc octpuss.c -o octop #compila otro Denial of Service octop ping ping -s 2000 rm smurf* #borra los archivo para hacer rm otc* #un Denial Of Service rm .bash_history #aqui, intenta el usuario borrar su historia. rm .bash_hirtory #el bash_history pertenece a la shell bash vi .bash_history #Aqui intenta editar exit logout #Desconeccion --Fin-- Este usuario estaba usando ataques Denial Of Service contra un sistema, o el nuestro. Este usuario es la pesadilla de cualquier usuario de Linux. Si a este usario no se le hubiese puesto un 'chattr +a' en el archivo .bash_history nunca nos hubiesemos enterado de lo que estaba haciendo. Este es el comando que le aparece a un usuario cuando intenta borrar su .bash_history [root@zomba test]# rm .bash_history rm: remove `.bash_history'? y rm: .bash_history: Operation not permitted Aca hay un script que hizo Bronc Buster para que cada vez que hacemos un adduser (agregamos un usario), le haga un chattr +a a la historia. Para usarlo tiene que editar el script del 'adduser' y agregarle estos comandos al final: # chattr +a users shell histories if [ -d $HME ]; then chmod 711 $HME cd $HME /bin/touch .bash_history /bin/chown $LOGIN:users .bash_history /usr/bin/chattr +a .bash_history /bin/touch .ksh_history /bin/chown $LOGIN:users .ksh_history /usr/bin/chattr +a .ksh_history /bin/touch .sh_history /bin/chown $LOGIN:users .sh_history /usr/bin/chattr +a .sh_history fi --Fin-- Tenes que ternerlos siempre vigilados a los logs en tu maquina. Son tus ojos y tus oidos en tu Linux. ------------------------------------------------------------------------ 6. Acceso remoto Los accesos remotos, quizas son una de las partes de la seguridad mas dificil de cuidar, por esto siempre hay que estar cuidandose todo el tiempo. Ante todo, lo mejor que se puede hacer es ponerte un password bien fuerte, combinando letras, numeros, mayusculas y minusculas y quizas algun otro caracter, quizas no sirva de nada ante un ataque con algun Xploit, pero podes hacerle la vida imposible a cualquiera que te robe el /etc/passwd o algun ataque Brute Force Hay algunos archivos que te dan un fuerte control de quien se conecta, algunas quizas no existan en tu sistema y tengas que crearlo, pero es extra;o si estas actualizado. Aqui estan algunos de los archivos importantes: /etc/suauth /etc/hosts.deny /etc/hosts.allow /etc/securetty Primero el 'suauth', es el archivo que controla que usuarios tiene permitido usar el comando 'su' (Este comand sirve para convertite en otro usuario permanentemente, inlcusive hasta el root). El 'suauth' tiene este formato: TO:FROM:ACTION El campo 'TO' dice en que usuario se quiere convertir, en este caso, seria el root. El campo 'FROM' controla que usuarios o grupo puede convertirse en el TO (root), digamos que solo los usuarios "blind" y "pepe" pueden convertirse en root. Finalmente el campo 'ACTION' controla que hacer en cada caso, hay tres acciones disponibles, el 'OWNPASS', el 'DENY' y el 'NOPASS', en este caso como queremos que se convierta en root los usuarios "blind" y "pepe", vamos a ponerle OWNPASS Aqui hay un ejemplo del suauth # Solo 2 usuarios se pueden convertir root. # Nota: cuando ejecutamos el comando su, en este caso # no te convertis automaticamente, tenes que poner el password del root root:blind,pepe:OWNPASS # # Nadie mas puede, excepto los miembros del grupo # "amigos", pueden convertirse en root # root:ALL EXCEPT GROUP amigos:DENY # # Por ejemplo, el usuario 'gadorcha' y 'garompa' son la misma persona # y para no tener que andar cambiando de pasword cada vez que # quieren cambiar de un usuario a otro, se pone esto: # gadorcha:garompa:NOPASS garompa:gadorcha:NOPASS # /////////////////////////////////////////////////////// // Nota: Tengan mucho cuidado con este archivo, // // recomiendo que le hagan un chmod 700, asi solo el // // el root, tiene acceso a este archivo, y una vez // // por semana, darle un vistazo. // // Un usuario malicioso podria editarlo y poner: // // root:malicioso:NOPASS #tiene accesso al root // // #el password // /////////////////////////////////////////////////////// El 'host.deny' y el 'host.allow' son archivos que trabajan mano a mano, uno con el otro, usado en las ultimas version de Linux. Estos archivos funcionan en conjunto con los TCP Wrapper. El TCP Wrapper es un programa creado por el Holandes Wietse Venema que monitorea los pedidos entrantes de telnet, finger, ftp, rsh, rlogin, tftp, talk, compsat y otros. Trabaja de una forma muy inteligente, cuando un pedido de uso de algun archivo, este programa enga~a al daemon inetd y en vez de ejecutar algun otro daemon como ftp o telnet, lo que hace es primero ejecuta el tcpd que loguea el pedido, la ip de la persona que lo hace, etc. Una vez finalizado esto recien entra al Daemon Ftp o Telnet. Esto lo hace en milesimas de segundo y no hay forma de la persona se entere cuando se ejecuta el tcpd que se esta ejecutando. Para ver esto, vamos a ver una linea del Daemon inetd donde se aloja el tcpd. Este archivo se llama inetd.conf y es necesario tenerlo vigilado porque es el archivo que abre y cierra los puertos de la maquina. telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Aqui vemos la linea, del inet.conf que abre el puerto telnet. Podes observar que luego de 'nowait root', ejecuta el comando /usr/bin/tpcd y luego de este, ejecuta el daemon de Telnet in.telnetd Cuando se ejecuta el comando 'tcpd', primero lo que hace es loguear el pedido luego la ip del usuario que hace el pedido, continua verificando los archivos host.allow y hosts.deny (Estos archivos puede restringir el acceso a usuarios dependiendo de su direccion IP o host) y luego, una vez hecho esto recien ejecuta el Daemon correspondiente. Los archivos 'hosts.allow' y 'hosts.deny' se encuentran en el directorio /etc y tienen este formato: Connection:IP address. Ejemplo: [root@zomba /]# cat /etc/hosts.deny # # hosts.deny Este archivodescribe el nombre de los host que *NO* tienen # permitidos usar cualquiera de nuestros servicios. # ALL: 130.42.113.8 ALL: 200.42.56.57 En este caso, estamos bloqueando cualquier coneccion, sea Telnet, FTP o cualquier servicio que ofrezcamos. En este archivo podes poner cuantos numeros IP quieras bloquear. Tambien esta la posibilidad de poner un 'ALL:ALL' con esto lo que hacemos es bloquear toooodas las IPs, salvo que nosotros en el fichero 'host.allow' hayamos puestos algunas IPs que queramos. Supongamos que nosotros proveemos servicios de FTP, y tenemos dos usuarios, uno es 'cmenem' y el otro es 'cbala', estos usuarios siempre se conectan con IPs fijas, la Ip de cmenem es: 200.42.125.87 y la de cbala: 200.3.15.147 Nosotros queremos negarle el acceso a cualquier persona que no posea algunas de esas IPs, lo que hacemos es en el hosts.deny ponemos: [root@zomba /]# echo 'ALL:ALL' >> /etc/hosts.deny En esta linea, agregamos al archivo host.deny el all:all, para que ningun usuario pueda acceder al sistema. Ahora agregamos esto al hosts.allow [root@zomba /]# echo 'ALL: 200.42.125.87' >> /etc/hosts.allow [root@zomba /]# echo 'ALL: 200.3.15.147' >> /etc/hosts.allow Aqui le damos acceso solamente a estas dos IPs. Es decir, bloqueamos el acceso a todos, y dejamos solamente el de estas IPs, de esta forma podemos comprobar como se interrelacionan los dos archivos 'hosts.allow' y 'hosts.deny' Finalmente, nos queda el ultimo archivo. El archvio '/etc/securetty' simplemente controla desde donde puede loguearse el 'root'. Como default, deja al 'root' loguearse desde cualquier tty. [root@zomba /]# cat /etc/securetty tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 ------------------------------------------------------------------------ 7. Archivos Varios Bueno, en esta seccion voy a poner algunos archivos que no cabian en ninguna otra categoria. /etc/inetd.conf /etc/services /etc/nologin /etc/issue.net and /etc/issue Primero, empezamos con el 'inetd.conf', ya hemos hablando antes un poco de este archvio, es nada menos que el archivo de configuracion del Daemon 'inetd.conf'. Este archivo escucha algunas conecciones en algunos puertos, y decide que servicio evocar, como le fue dicho en el archivo 'inetd.conf'. Como veran este archivo es super importante porque es el que abre y cierra la mayoria de los puertos de tu maquina, Como default tiene todos los puertos abiertos, o una gran mayoria (Parece que el que hizo este archivo, vivia en una utopia donde todos eran buenos y nadie le interesaba entrar a los sistemas de los demas). Para cerrar todos los puertos, lo unico que se necesita hacer, es editar el archivo inetd.conf y agregarle el caracter # antes de cada linea. Este caracter sirve para "Comentar" la linea, es decir, que solo la persona que edita el archivo la pueda ver, y cuando se ejecuta ese linea no aparece. Esto la vamos a tener que utilizar mucho, asi que cuando alguien dice "Comenta" tal archivo, ya sabes a que se refiere. Aqui hay un ejemplo del inetd.conf de mi maquina: # # inetd.conf Este archivo describe que servicios estan disponibles # por el server TCP/IP INETD. Para re-configurarlo, editar # este archivo y mandarle al proceso INETD una se;al SIGHUP # Para mandar esta se;al ejecutar el comando: # 'killall -HUP inetd' # # Version: @(#)/etc/inetd.conf 3.10 05/27/93 # # Authors: Original taken from BSD UNIX 4.3/TAHOE. # Fred N. van Kempen, # # Modified for Debian Linux by Ian A. Murdock # # Modified for RHS Linux by Marc Ewing # # Traducido al espa;ol por Zomba (zombaq@ciudad.com.ar) # # Sintaxis: # # # El echo, discard, daytime, y chargen se usan primariamente para pruebas. # #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 # # Estos son servicios estandards. # ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd #gopher stream tcp nowait root /usr/sbin/tcpd gn # NO descomentar el smtp salvo que *realmente* sepas lo que estas haciendo. # smtp esta manejado por el daemon de sendmail, que luego explicare, y # que se halla en el /etc/rc.d/init.d/sendmail # run from here, it is started at boot time from /etc/rc.d/rc#.d. #smtp stream tcp nowait root /usr/bin/smtpd smtpd #nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd # # # Shell, login, exec y talk son protocolos BSD. # #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 #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd # # POP3 e IMAP son servicios de mensajes entrantes # #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 imapd # # Servicio de UUCP de Internet. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico \ -l # # El servicio Tftp se proove primariamente para el booting. La mayoria de los # sitios, usan este daemon solo en maquinas actuando como servidores Boot. # Nuevamente, no lo descomentes, salvo que realmente lo necesites. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # El finger, systat y netstat da informacion que puede ser importante # para algun hacker. Es mejor comentarlo, o podemos usar otra tecnica que # luego les voy a ense;ar. # # cfinger es el finger GNU. # #finger stream tcp nowait nobody /bin/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat \ -f inet # # El servicio Time, es usado para sincronizacion de relojes. # #time stream tcp nowait nobody /usr/sbin/tcpd in.timed #time dgram udp wait nobody /usr/sbin/tcpd in.timed # # Autentificacion # ##auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -\e -o # # End of inetd.conf Para un usuario comun, extremandamente paranoico, recomiendo comentar todo el archivo, esto no dejara ningun puerto abierto. Si no se quiere ofrecer ningun servicio con tu Linux, cerrar todo es una recomendacion interesante. Hay un peque;o truquito para divertirte en vez de cerrar algun puerto. Yo personalemente lo utilizo en el puerto Finger. Ya que es el primer puerto, que si esta abierto, un intruso entra para averiguar infomacion sobre el sistema. Ante todo, primero hacer un archivo llamado finger.txt en el directorio /etc que tenga un mensaje como este: --Principio de /etc/finger.txt-- --------------------------------- | Que haces en este Puerto????? | | Sabes que no se le permite el | | acceso a extra;os y te metiste| | igual. | | FUERA DE ACA! YA!! | --------------------------------- --Fin-- (En vez de poner este mensaje, podes poner un dibujo en ascii o lo que vos quieras) El truco consiste en poner en el inetd.conf en la parte donde dice finger esto: finger stream tcp nowait nobody /bin/cat cat /etc/finger.txt Notece que reemplazamos el '/bin/sbin/tcpd in.fingerd' por: '/bin/cat cat /etc/finger.txt'. Lo que hace, es cada vez que un intruso se conecta a ese puerto haciendo un telnet (telnet miip 79) se va a ejecutar el comando cat, que va a mostrar el mensaje, y luego el usuario va a ser desconectado del sistema. El archivo '/etc/services' tiene una lista de todos los puertos en tu sistema que tiene conectado un servicio con el. Lo que tienes que hacer es cerrar todos estos puertos, porque hay algunos backdoors y exploits que corren en algunos puertos que nadie sabe que existen o que se utilizan. Si miras esta lista vas a ver un monton de puertos listados. Podes comentar todo los archivos y dejar los que hayas dejado en el 'inetd.conf' En tu /etc/services te van a aparece muchos puertos, aqui te pongo solo algunos. #netstat 15/tcp ftp 21/tcp #ssh 22/tcp #Secure SHell telnet 23/tcp #smtp 25/tcp mail #time 37/tcp timserver #time 37/udp timserver #whois 43/tcp nicname finger 79/tcp #www 80/tcp http # WorldWideWeb HTTP #www 80/udp # HyperText Transfer Protocol #auth 113/tcp tap ident authentication #talk 517/udp #ntalk 518/udp Por ejemplo, si vos tenes en el inetd.conf habilitado el finger, tenes que hablitarlo en el /etc/services (Cuando digo, habilitarlo, me refiero a no comentarlo). Con estos dos archivos, vimos que como cerrar la mayoria de los puertos, pero hay puertos como el SendMail (smtp puerto 25), que no se pueden cerrar con estos archivos. Para cerrar el sendmail, tenemos que editar el archivo: '/etc/rc.d/init.d/sendmail' y lo que tenes que hacer es comentar todo el archivo como hemos visto anteriormente. El proximo archivo es el '/etc/nologin'. Este archivo es muy bueno, ante una emergencia, por ejemplo si te estas dando cuenta que hay un ataque de un hacker en el mismo momento, lo que haces es ejecutar 'nologin' y automaticamente se desloguean todos los usuarios en el sistema. Lo que hace este archivo, es mover el archivo 'motd' y los usuarios que no son root, se les prohibira conectarse al sistema. De esta forma desconectamos a todos los usuarios que estan en ese momento conectados y los que se quieran conectar. Se sabe que los hackers para reunir informacion de un sistema, primero hacen un escaneo de puertos para saber cuales estan abiertos y cuales no. Luego de eso, hacen un telnet a la mayoria de los puertos para saber que sistemas tienen. Los archivos '/etc/issue.net' y '/etc/issue' son importantes para dificultar a los intrusos la tarea de averiguar que sistema usamos. Cuando uno hace un telnet, le aparece el siguiente mensaje: Welcome to Linux 2.1.3 zomba login:_ Simplemente, editando los archivos '/etc/issue.net' y '/etc/issue' y poniendo en cambio cualquier cosa que queramos, cada vez que alguien se conecte, le va a aparecer lo que nosotros pusimos en ese archivo. || _/_/_/_/ || || _/ || || _/ || || _/_/_/_/ || Bienvenido a la nueva version del Zomba Linux 6.8 Kernel 6.6.6 Showdown login:_ En las versiones del Red Hat 5.1 y 5.2 (no se si en otras versiones para lo mismo), tiene un peque;o truco muy facil de sacar, que cada vez que reiniciamos la maquina nos cambia el issue y nos pone el mismo login de siempre. Para deshabilitar esta opcion molesta, editemos simplemente el archivo: /etc/rc.d/rc.local Este es un ejemplo, lo unico que hacemos es comentar el final: #!/bin/sh # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. if [ -f /etc/redhat-release ]; then R=$(cat /etc/redhat-release) else R="release 3.0.3" fi arch=$(uname -m) a="a" case "_$arch" in _a*) a="an";; _i*) a="an";; esac # Comentar todo a partir de aqui: #This will overwrite /etc/issue at every boot. So, make any changes you #want to make to /etc/issue here or you will lose them when you reboot. echo "" > /etc/issue echo "Red Hat Linux $R" >> /etc/issue echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue Bueno, esto es todo por ahora... Quiero darle una recomendacion personal. Una vez por semana, recomiendo echarle un vistazo a archivos importantes como /etc/passwd o /etc/groups y ver si no hay nada raro. Ya que sin darte cuenta, cualquier usuario pudo haber agregado una cuenta en algun descuido tuyo Tambien ir al /bin y mirar las fechas de los archivos haber si alguna difiere de las demas. Puede ser que hayan subido algun Backdoor u otra cosa. Tambien, pueden ir al directorio /etc/init.d/ y editar algunos archivos de alli, en buscar de algun archivo extra;o, ya algunos backdoor para que funcionen despues de reiniciar la maquina, se les agrega un condigo en alguno de esos archivos. Tambien, es interesante, hacer un port scanner de todos tus puertos cuando estas conectados a internet, por las dudas encuentres algun puerto extra;o como 30132 utilizado por algunos backdoors. Mirar, como minimo una vez por semana los logs que se encuentran en /var/log o /var/adm y las historias de shell de cada usuario para ver si anduvo en algo raro. Finalmente, quiero agradecer a todos los amigazos de #zeraw y #hack.ar A todos mis compa;eros de S.I.D.E. y a Bronc Buster (bronc@shocking.com), que aunque no lo conozca, lei un texto que tiene mucha influencia en este sobre seguridad y me parecio muy bueno. Quizas, dentro de unos dias, saque otra version de este texto, espero actualizarlo seguido. Saludos || _/_/_/_/ || || _/ || || _/ || || _/_/_/_/ || Zomba zombaq@ciudad.com.ar // S.I.D.E. TEAM \\ Este archivo esta optimizado para Emacs.