El escaneo de puertos es una técnica usada para auditar maquinas en las que necesitamos saber que servicios se estan sirviendo y de que modo. Con algunas de las herramientas que presentamos como nmap, conseguiremos no solo saber que servicios estan disponibles en las maquinas de nuestra red si no tambien orientación sobre su el sistema operativo que corre en ellas.
Nmap es una herramienta para el escaneo de puertos probablemente de las mejores que existen siendo software libre. su autor, Fyodor, ha utilizado varias técnicas para realizar el escaneo de estos puertos ( que son posibles canales de comunicación en potencia ) tanto para TCP como para UDP.
Algunas de estas técnicas:
Ej:
nmap -sT localhost
Ej:
nmap -sS localhost( como root por usar socket raw )
Ej:
nmap -sF localhost( unicamente funciona con sistemas UNIX )
Ej:
nmap -sU localhost( como root por usar socket raw )
Para realizar estos escaneos, nmap comprueba todos los puertos de una maquina con estas técnicas. Esto puede llevar un tiempo considerable, de modo que nmap contempla la posibilidad de escanear unicamente puertos determinados y para eso da la oportunida de escanear los puertos en el fichero:
/etc/services
Un ejemplo de esta opción sería :
nmap -F localhost
que realiza un "Fast Scan".
Tambien permite definir un rango de puertos a escanear, del siguiente modo:
nmap -p 20-30, 1000-1024
Por defecto toma los puertos 1-1024, los denominados "puertos privilegiados".
Otra opcion interesante de cara a guardar los resultados es la que nos permite guardar los resultados de cara a su examinación posterior, por ejemplo:
nmap -F localhost -o localhost.dat
Dejando en el fichero localhost.dat , el resultado del escaneo a la máquina localhost.
Para finalizar con nmap, comentar la posibilidad del escaneo de grupos de máquinas de cara a auditar una red completa, por ejemplo del modo siguiente:
nmap -F 192.168.1.*
Con esta orden escanearemos una clase C completa.
El peligro de la intercepción de comunicaciones en una red es notoria. Se habló en la conferencia "Seguridad Básica en un sistema Linux" de los problemas que podían surgir en cuanto a interfaces de red en modo "promíscuo" y aunque una solución valida es la detección por una serie de métodos y heurísticas, una buena solución es realizar nuestras comunicaciones encriptadas, para ello podemos realizar el experimento de lanzar un sniffer en una maquina y ver los resultados de las comunicaciones sin encriptar y encriptadas ( por ejemplo con ssh y scp, en lugar de telnet y ftp ).
En esta seccion de logs de red, vamos a examinar dos utilidades de log que vienen incorporadas en Debian y que realizan un muy buen uso de sus cualidades, iplogger e ippl.
Iplogger es la primera aproximación al logeo de conexiones de red, esta utilidad arranca dos demonios icmplogd, tcplogd que logean ambos los paquetes ICMP y TCP
Esta utilidad es muy sencilla, pero también provee menos datos que la que comentaremos seguidamente, ippl. Un ejemplo de fichero de configuración que reside en:
/etc/iplogger.conf
será por ejemplo:
# Configuration file for iplogger daemons # # This file is read by the init script (/etc/init.d/iplogger). # Uncomment this line if you don't want to use syslog log-in-file # Which daemons do we run? start-icmplogger start-tcplogger # Uncomment this line if you do not want to log ICMP destination unreachable # packets with icmplogd #no-icmp-unreachable # Uncomment this line if you want to perform ident checking enable-ident-checking # Uncomment this line if you want an instance of tcplogd run for each incoming # TCP connection # CAUTION! It is not recommended to use this feature since this can deny # service. #do-fork
Podemos comentar algunas de las opciones como "log-in-file" que hace que los resultados del log vayan al fichero:
/var/log/iplogger.logen lugar de syslog, también que daemos arranchar "start-icmplogger...", o si no permitimos realizar forks a los daemos previniendo posibles ataques de denegación de servicio fruto de muchas peticiones.
Ippl es una utilidad más versatil que permite registrar todo tipo de conexiones TCP, UDP e ICMP, también permite filtrar logs, en tanto en cuanto puede no registrar tipos de paquetes determinados.
El fichero de configuración se encuentra en:
/etc/ippl.conf
y podemos ver un ejemplo de configuración:
# IP protocols logger - Configuration file # See ippl.conf(5) # User used # --------- # Specify the user (declared in /etc/passwd) used to run the # logging threads. runas nobody # Resolve hostnames? # ------------------ # Uncomment the line below to disable DNS lookups #noresolve all # Use ident? # ---------- # Uncomment the line below to enable IDENT lookups ident # Log end of TCP connections ? # ---------------------------- # Uncomment the line below to enable logging of closing TCP connections # See the BUGS file. logclosing # Expiration of DNS data # ---------------------- #expire 3600 # Log in a file # ------------- # Uncomment this line if you want to log messages into a /var/log/ippl.log # See ippl.conf(5) for the syntax. log-in all /var/log/ippl/all.log log-in udp /var/log/ippl/udp.log # Protocols logged # ---------------- run icmp tcp # Uncomment the line below to log UDP traffic. # See ippl.conf(5) for recommandations. run udp # Logging format # ---------------- # If you want to see the destination address, the ports, etc # Or if you want to log the minimal information. # See ippl.conf(5) for details. logformat detailed all # Filtering of packets logged # --------------------------- # Do not log answers to echo requests #ignore icmp type echo_reply # Log telnet connections using ident and name resolution log options ident,resolve tcp port telnet # Do not log UDP from localhost #ignore udp from localhost # Do not log DNS queries #ignore udp port domain #ignore udp srcport domain # End of configuration # Copyright (C) 1998-1999 Hugo Haas - Etienne Bernard
Son muy interesantes algunas de las opciones que presenta esta utilidad. Podemos ver por ejemplo la opción
runas nobodyque nos indica como que usuario corre ippl. También es interesante la opción
log-inque indica que logear ( all, udp, tcp) y en que fichero. La opción
runnos indica que protocolos van a ser logeados ( tcp, udp o icmp ).
Otra opción interesante es
ignoreque permite no logear ciertos tipos de paquetes en este caso se utiliza para ignorar echo_replies o consultas a DNS.
Es importante poder ver la situación de nuestra red en tiempo real para poder detectar fallos que puedan surgir en un determinado momento. Para ello comentaremos tres herramientas: iptraf, netstat y tcpdump.
Iptraf es una utilidad que en modo texto, presenta bastante bien el estado de una red con una gran variedad de opciones. Presentamos algunas de sus opciones mas interesantes.
Estas son las características basicas y más usadas de iptraf. Iptraf permite definir filtros mas avanzados categorizando por protocolos y multitud de opciones, sin embargo estas tres opciones son las más usuales.
Netstat es una utilidad que esta presente en bastantes unix, por tanto una utilidad más general que iptraf aunque algo más austera. La importancia de esta utilidad es la mencionada, de estar portada a practicamente todos los unix del mercado.
Comentamos algunas opciones interesantes de la utilidad netstat
Con la ejecución del comando
netstatconseguimos que en pantalla aparezcan tanto las conexiones de red existentes en el sistema en ese momento, como los sockets abiertos en ese momento por el operativo o por sus aplicaciones.
Con la ejecución de
netstat -inos presentará las estadísticas de los interfaces de red que existen activos en el equipo en el momento.
Con la ejecución de
netstat -lnos muestra todas las aplicaciones que esta "escuchando" en el sistema en este momento, tanto de red como del propio sistema.
Es importante comentar llegados a este momento, que podemos limitar las salidas al tipo de protocolo de los sockets con parámetros como -t, -u etc. por ejemplo:
netstat -l -t.
Netstat es un comando bastante versatil que permitirá ver desde estadísticas de red avanzadas a tablas de routas. En de hacer notar tambien que estas lineas de ejecución son para sistemas operativos Linux y que en otros unix pueden cambiar los parámetros.
La utilidad tcpdump es una de las utilidades que más detalles nos va a aportar de cara a saber que paquetes circulan por nuestra red, permitiendonos llegar a ver las cabeceras de los propios paquetes de red que circulan por ellas. Es por tanto una de las más complicadas que comentaremos en este taller.