El análisis de servicios de red es una parte muy importante en cualquier análisis UNIX.
Nuestro objetivo será localizar servicios activos y a la escucha cuya desactivación sea desaconsejable. Definir esta lista de servicios es ya tarea de cada auditoría y cada trabajo en particular, y no siempre será una lista estática: variará según estudiemos una máquina u otra.
Generalmente, y como punto de partida, se asume que los siguientes servicios son cadidatos a la desactivación en un entorno de producción real:
Cuadro de servicios candidatos a la desactivación
amiserv, cachefsd, chargen, daytime, dr_daemon, echo, exec, finger, gssd, kcms_server, klogin, kshell, ktkt_warnd, lp, named, ntalk, ocfserv, portmap, routed, rpc.cmsd, rpc.ttdbserverd, rquotad, rstatd, rusersd, rwalld, rwhod, sadmind, sendmail, shell, snmpd, sprayd,time
Analizaremos una manera elemental de localizar servicios cuya desactivación es desaconsejable. Es un método simple y no es el único. Tampoco es el óptimo, pero es rápido. Es tarea ya de cada auditor forjarse sus propios métodos de análisis de servicios, según sus necesidades, tiempo disponible e importancia del análisis de servicios en las máquinas a auditar.
Nosotros, a título informativo, utilizaremos el método de casación con inetd.conf
Ejemplo práctico
Lo primero que necesitamos es incorporar nuestro listado de servicios de desactivación recomendable a un fichero de texto. Maneras de hacer ésto hay muchas, por ejemplo mediante vi servicios_desactivables.txt, o edición equivalente. Podéis dar el nombre que queráis.
Acto seguido, extraemos a fichero los contenidos de /etc/inetd.conf
cat /etc/inetd.conf >> inetdconf.txt
En nuestro caso, el fichero inetd.conf que tenemos funcionando es el siguiente. Prestad especialmente atención a las líneas del fichero que no tienen una almohadilla, ya que al no estar comentadas, implican servicios activados. Las notamos en negrita:
# To re-read this file after changes, just do a ‘killall -HUP inetd’
#
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
#
# These are standard services.
#
#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 root /usr/sbin/tcpd in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp wait nobody /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 imapd
#
# The Internet UUCP service.
#
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as «boot servers.» Do not uncomment
# this unless you *need* it.
#
#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
#bootps dgram udp wait root /usr/sbin/tcpd bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential «system crackers.» Many sites choose to disable
# some or all of these services to improve security.
#
finger stream tcp nowait root /usr/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
#
# Authentication
#
#auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o
#
# End of inetd.conf
Se trata de ver, de entre la totalidad de servicios listados en servicios_desaconsejables.txt, cuáles están en /etc/inetd.conf. Sólo buascamos aquellos que no estén comentados (#). El script que utilizaremos es sl siguiente:
for i in $(awk ‘{ print $1 $2 }’ servicios_desaconsejables.txt); do
grep $i inetdconf.txt | grep -v «#»
done
Nota: servicios_desaconsejables.txt debe ser un fichero de texto plano, con un servicio en cada línea.
El resultado de la ejecución del script nos dirá qué servicios es desaconsejable tener habilitados en /etc/inetd.conf. Son, para este caso, aquellos marcados en negrita que también estén en nuestra lista servicios_desaconsejables.txt:
~/Sergio$ bash script.sh
daytime stream tcp nowait root internal
echo stream tcp nowait root internal
ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
Como comprobación adicional podemos localizar RPCs:
grep rpc inetdconf.txt | grep -v «#»
Sin resultados en este caso.
Resumen
El objetivo primario del análisis de servicios cuya descativación es desaconsejable se centrará en casar la lista de dichos servicios con los habilitados según /etc/inetd.conf.
Otras comprobaciones importantes a añadir a la que hemos hecho es conocer los servicios que se levantan al iniciar la actividad en el equipo, así como aquellos que estén en el momento del análisis con posibilidad de recibir comunicación.
Dejamos como ejercicio para el lector la generación de scripts para estas dos comprobaciones adicionales :)
Material adicional para estudiar servicios UNIX:
http://www.unix.org.ua/orelly/networking/puis/appg_01.htm
Una lista con servicios prototipo, descripción de los mismos, puertos empleados, protocolos utilizados y lo más importante: manejo en firewall recomendado :)
Como siempre, el listado oficial de servicios, protocolos y puertos es el de IANA:
http://www.iana.org/assignments/port-numbers
Saludos :)
Sólo comentar que la manera de obtener el listado de los servicios o demonios del sistema puede variar fuertemente de un sistema UNIX a otro.
Para los sistemas basados en GNU/Linux
La mayoría de los servicios se encuentran listados dentro del directorio
/etc/init.d
(para servicios estáticos) y el directorio/etc/xinet.d
(servicios dinámicos dependientes de xinetd).Su activación o desactivación depende de la variante de GNU/Linux en cuestión. Para sistemas compatibles con Red Hat (como Fedora Core, Red Hat Enterprise Linux, CentOS o White Box Linux), se puede utilizar el comando
chkconfig
. Para variantes compatibles con Debian (como Ubuntu o Debian), se puede utilizar el comandoupdate-rc.d
.Para los sistemas BSD
La mayoría de los servicios se encuentran bajo
/etc/rc.d
y/usr/local/etc/rc.d
(en el caso de FreeBSD y OpenBSD) o/usr/pkg/etc/rc.d
(en el caso de NetBSD) o listados en/etc/inetd.conf
.La activación o desactivación de servicios en las variantes de BSD que he mencionado anteriormente suele supone editar el fichero
/etc/rc.conf
y definir la variable correspondiente al servicio como YES o NO. Por ejemplo, para desactivar inetd en NetBSD, basta con definirinetd=NO
en el fichero
/etc/rc.conf
. Lo mismo es aplicable para FreeBSD y OpenBSD.Gracias por el aporte, pasaba por tu página… lamantablemente después de haber creado un script que hace casi lo mismo que el que tu propones, creo que solo que resta una pequeña reseña para cada servicio y así entregarle algo de información extra… Gracias…