Cuando un atacante decide probar su suerte contra nuestro sistema, lo primero que requiere es recopilar cuanta información le sea posible acerca de éste. Todo puede serle útil - Sistema operativo, versión, servicios que ofrecemos, versión de los programas que tenemos... Cualquiera de estos datos puede ser suficiente para que su ataque sea exitoso. Basta con que el atacante vea, por ejemplo, que tenemos una versión vieja de un programa, aunque no tenga éste ninguna vulnerabilidad importante, para que se dé cuenta que no somos administradores muy cuidadosos y probablemente tengamos otros servicios descuidados.
La manera más común en que un atacante va a intentar obtener información acerca de nosotros es el barrido de puertos: Intentar conectarse a cada uno de los puertos que tiene abiertos nuestro servidor, anotando qué es lo que tiene activo y analizando dicha información. Una de las herramientas más comunes para realizar barridos de puertos es el nmap, como lo muestra la siguiente sesión ejemplo.
[gwolf@hostname gwolf]$ nmap 192.168.1.2 -O Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) Interesting ports on ejemplo.dominio.com (192.168.1.3): Port State Protocol Service 21 open tcp ftp 22 open tcp ssh 23 filtered tcp telnet 25 open tcp smtp 80 open tcp http 110 open tcp pop-3 113 open tcp auth 135 filtered tcp loc-srv 139 filtered tcp netbios-ssn TCP Sequence Prediction: Class=random positive increments Difficulty=5286692 (Good luck!) Remote operating system guess: Linux 2.1.122 - 2.2.14 Nmap run completed -- 1 IP address (1 host up) scanned in 25 seconds [gwolf@hostname gwolf]$
Tras haber hecho esta prueba, el atacante puede intentar entrar a cada uno de los puertos abiertos, revisando si encuentra alguna versión vieja o vulnerable:
[gwolf@hostname gwolf]$ telnet 192.168.1.3 21 Trying 192.168.1.3... Connected to 192.168.1.3. Escape character is '^]'. 220 ejemplo.midominio.com FTP server (Version wu-2.4.2-academ[BETA-18](1) Mon Jan 18 19:19:31 EST 1999) ready. quit quit 221 Goodbye. Connection closed by foreign host. [gwolf@hostname gwolf]$ telnet 192.168.1.3 22 Trying 192.168.1.3... Connected to 192.168.1.3. Escape character is '^]'. SSH-1.5-1.2.23 Protocol mismatch. Connection closed by foreign host. [gwolf@hostname gwolf]$ telnet 192.168.1.3 25 Trying 192.168.1.3... Connected to 192.168.1.3. Escape character is '^]'. 220 ejemplo.midominio.com ESMTP Sendmail 8.8.7/8.8.7; Tue, 26 Sep 2000 17:13:04 -0500 quit quit 221 ejemplo.midominio.com closing connection Connection closed by foreign host. [gwolf@hostname gwolf]$
Con esto, en menos de un minuto, el atacante puede ya haber inferido lo siguiente:
Detectar un barrido de puertos es muy fácil: Muchas conexiones casi simultáneas a una gran cantidad de puertos originadas en la misma dirección. Si bien los programas barredores se han vuelto muy sofisticados y cada vez es más difícil detectarlos por diferentes estrategias que emplean (nmap sabe hacer desde una sencilla conexión TCP hasta un barrido silencioso con SYN, FIN, Xmas, Null, UDP, paquetes fragmentados, barridos paralelos de diferentes tipos), el principio básico es el mismo. Hay un excelente programa dedicado precisamente a encontrar éste patrón y tomar la acción que le indique el administrador del sistema: Portsentry, de Psionic.