Test de Intrusión 1 parte
Elección de objetivos
Hay que buscar donde puede haber una puerta para entrar dentro y hacer...¡ya se verá! Aun es pronto, no nos ponemos objetivos, se va conquistando poco a poco el enemigo. Para ello vamos a analizar los activos de la empresa expuestos a nuestro punto de ejecución. Es decir, desde donde estamos que servicios y/o servidores están en nuestra linea de tiro. Servidores web, servidores de conexiones VPN, el servidor de correo, de ficheros, el dns, etc.... Inventariamos los activos a testear y empezamos la segunda fase.
Recogida de Información
¿Qué nos interesa? TODO. Toda información que se pueda conseguir es útil, siento decir esto pero hasta la información sobre las personas que operan y o trabajan en la empresa directa o indirectamente con los sistemas es útil. Para ello realizamos dos batidas de recogida de información distintas utilizando dos filosofías diferentes. En primer lugar vamos a recoger toda la información que sea pública de la empresa y de los objetivos. Es pública, así que recojámosla y aprendamos todo lo que podamos de ellos. Las herramientas que utilizamos son herramientas de Footprinting o de seguimiento de rastros de huellas.
Footprinting
Las herramientas que vamos a utilizar son sencillas públicas y "legales" es decir, aún no necesitaríamos un documento de Exoneración de Responsabilidades que nos autorice a realizar el test, con lo que si quieres probar puedes hacerlo con quien desees solo por practicar.
Para conocer la información de la empresa empezamos por consultar al servidor DNS para ver que servidores tiene registrados con que servicios. Normalmente vamos a sacar las Direcciones IP de los servidores DNS, de los servidores Web, de los servidores de correo y ... todo lo que se pueda. Para hacer esta parte yo uso el propio Nslookup que viene en el sistema y con sencillos comandos podemos sacar toda esta información.
Nslookup
Cuando entramos en el interfaz de comandos de nslookup estamos realizando consultas directamente contra el servidor de DNS que tenemos configurado en nuestra máquina, así que lo primero es averiguar cual es el servidor de dns de nuestro objetivo y preguntarle a él. Para ello elegimos el tipo de registro que queremos consultar con el comando set type. Para sacar los servidores dns: set type=ns; Para los hosts: set type=a; para los intercambiadores de correo: set type=mx, etc....
Una vez elegido el tipo se realiza la petición de resolución con el dominio que se quiere consultar y nos devuelve las Direcciones IP de los servidores DNS primario y secundario. Así que cuando sepamos cuales son, configuramos a esos servidores como los receptores de nuestras consultas con el comando: Server IP y una vez que estemos allí sacamos toda la información pública que tengamos. Si el DNS está mal configurado nos permitirá dos cosas que nunca se deben permitir, la transferencia de zonas y el listado de todos los registros. Para ello basta conectarse al servidor de dns y desde nslookup realizar una sencilla prueba con el comando ls nombre_de_dominio. Si cuela, nos volcará toda la información de la zona por pantalla. Y preguntando al registro SOA de la Zona DNS podremos saber cual es el correo del responsable del dns y lo más probable webmaster.
De la información que extraigamos de aquí podremos saber cosas como si los servidores están en hosting, housing o los tiene la compañía, si tienen servicios de respaldo externos, si el administrador es cuidadoso y detallista o no. Pensad que el proceso de ataque puede depender de estos pequeños detalles. Imaginemos un servicio web de una empresa que está en hosting, si compramos un domino en el mismo proveedor tendremos acceso al mismo servidor de nuestro objetivo por poco más de 100 pavos al año y atacar a un compañero de hosting ofrece la posibilidad de un nuevo camino digno de explorar.
En este ejemplo , se puede hacer "ls" del dominio y permite ver la lista de todos los servidores que tiene y la IP interna de un servidor muy, muy significativo, que se llama bd (Base de Datos?) con un direccionamiento 192.168.1.1. Curisoso.
Tracea y Posiciona
Una vez que se tienen los
objetivos iniciales marcados con direcciones IPs lo siguiente es
situarlos en la red y geográficamente, puede darnos alguna información
curiosa. Herramientas como tracert o Visualroute nos va a permitir
averiguar cual es la ubicación física y quienes son sus proveedores de
acceso a Internet.
En el apreciamos las redes que le conectan, en este caso con usa, pero
podemos ver quien es su proveedor de servicios de Internet. Supercable
(que daba servicio a Andalucía), luego AUNA, y ahora ONO. Telcos, je.
Whois
Cuando
una empresa registra un dominio en Internet debe rellenar una serie de
datos en el registrador que deben estar en una base de datos de
información que se llama Whois. La información que se registra en esta
base de datos puede protegerse parcialmente hablando con el registrador,
pero por defecto toda ella es pública. Cada registrador ofrece unas
herramientas de acceso a la base de datos whois para que cualquiera
pueda consultarla.
Arañas de Internet
Usa la información que ya han
recogido las arañas y aprende a sacarle partido a las bases de datos
sobre las sitios que tienen nuestros amigos los buscadores. Existe una
base de datos que se llama Google Hacking Database (GHD) que tiene
catalogadas en distintas categorías cadenas de búsqueda para usar en
google para sacar información para hacking de empresas a través de las
bases de datos del buscador google. Hay una sección que me encanta se
llama "Passwords" y la explicación que dan en la propia base de datos
sobre esa categoría es: "FOR THE LOVE OF GOD, GOOGLE FINDS PASSWORDS".
Aprende a rebuscar en google/msn search para seguir los pasos de la
empresa y de los administradores, te sorprendería lo que puede hacer un
administrador de una empresa con sus correos corporativos.
Spidering
Las técnicas de Spidering se utilizan
para poder encontrar toda la información que se nos ofrece gratuitamente
a través de los sitios web de la compañía. Nos ofrece páginas html,
aplicativos, ficheros de imágenes, documentos, javascripts, applets,
etc... Cuando realizamos un pentest hay que sacar toda la información que
se pueda extraer de comentarios, meta información de archivos gráficos o
documentos, etc... Por ejemplo los archivos doc de Microsoft Office no
suelen ser limpiados de la información de sus creadores antes de ser
publicados y generalmente nos van a dar rutas de archivos en máquinas
locales y nombres de cuentas de los usuarios en los dominios. Sólo por
poner un ejemplo. Además, cuando se está realizando una descarga
completa de un sitio se busca también aquello que, aparentemente no está
publico, pero que es predecible, como los directorios típicos /cgi-bin,
/bin, /images, /admin, /privado, etc... y los archivos predecibles, como
archivos de ejemplo, configuración etc... Para ello se utilizan
herramientas que se llaman Scanners de Cgi y que, aunque en origen
rastreaban programas cgi vulnerables, hoy en día se usan como
rastreadores de ficheros en técnicas de spidering.
Ejemplo 1:
Documento office descargado de la Universidad de las Illes Balears con
información del usuario y la ruta del sistema de ficheros de su creador.
Imagen 1: Usuario tsiralb. https://www.uib.es/recerca/osr/AIsolicitud.doc
¿Os suena cierto escándalo en el gobierno británico con
cierto documento sobre las armas de destrucción masiva en Irak que
había sido modificado?
: Comentario en una página web que delata que ha sido desarrollada con Dreamweaver. ¿Hay Dreamweaver para Linux?
Imagen 2: Foto descargada desde Internet con meta información sobre el creador.
Es una foto de
Arturo descargada desde un directorio que hay por aquí en la misma
universidad de antes.[https://www.uib.es/depart/dqu/fotos_arturo/]. Ya
sabemos que día fue la fiesta, la camarita e incluso se puede
averiguar la hora del día a la que se tiró, que como se aprecia era
hora de cena.Herramientas como Teleport Pro te permiten
descargarte todos los ficheros que se ofrecen públicamente en un
sitio Web, scaners de cgi como voideye, whisker, cgi-scan o cualquier
otro permiten cargar una lista de ficheros y directorios a buscar.
Como se puede ver en la imagen, a voideye se le puede configurar el
uso de servidores Proxy anónimos para evitar la detección de quien
está realizando el escaneo.
Fingerprinting
Ya hemos recogido toda la
información que era pública, ahora vamos a recoger aquella que también
está accesible públicamente pero que a priori no se puede ver. Es
decir, vamos a inferir información a partir de pruebas que vamos a ir
realizando a cada uno de los servicios y o servidores. Fácil, ¿no?
Identificación de Sistemas Operativos y/o Firewalls
Para
identificar los sistemas operativos que corren sobre los servidores o
debajo de los servicios que queremos auditar existen diferentes
herramientas. Todas estas herramientas se basan en jugar al ¿Quién es
Quién? ¿Recordáis aquel juego en el que se iba preguntando al contrario
si tenía bigote o sombrero? Pues es la misma idea. Averiguar el sistema
operativo consiste en enviarle distintas petición e ir analizando las
respuestas. Por ejemplo, pensemos en un simple ping. Si enviamos en las
tramas TPC/IP valores 1 en los bits de urgencia, que no van a ser
utilizados por el sistema operativo, y observamos los resultados
obtenidos se puede inferir que sistema es. Un sistema Microsoft devuelve
esos valores siempre a 0, eso es porque cuando construye una trama
TCP/IP de respuesta lo hace desde una nueva trama; sin embargo, un
sistema Linux construye la respuesta a partir de la trama de petición.
Esto hace que si enviamos 1 y recibimos 0 podamos inferir, con un
porcentaje alto de éxito, que el sistema operativo es un Microsoft
Windows. Lógicamente el número de pruebas que se pueden hacer son muchas
y las diferencias pueden existir entre un Microsoft Windows NT 4 Server
y un Microsoft Windows NT 4 Server Service Pack 6. A veces se puede
afinar y saber exactamente la versión del kernel de un sistema Linux y
otras no. Para ello vamos a utilizar distintas herramientas que ya nos
ayudan con un amplio conjunto de diferenciación de sistemas operativos.
Nmap
Es
un scanner de información sobre servidores, y, aunque su principal
utilidad es la de un scanner de puertos tiene opciones de reconocedor de
sistemas operativos. La opción -O (jé,je) También puedes hacer
simplemente clic en el interfaz gráfico, si usas un frontend.(;). El
escaneo de sistemas operativos que realiza nmap no solo se queda en
Windows, Linux, etc.. .sino es capaz de detectar impresoras de red,
centralitas PBX, o teléfonos IP. Para realizar esta detección cuenta con
una enorme base de datos para hacer una detección entre miles, repito
miles, de sistemas operativos (Windows Server NT, Windows NT Workstation
SP4, Windows NT SP6, todos los sabores de Linux, etc...) Además, en las
nuevas versiones realiza pruebas sobre los puertos TCP y UDP
descubiertos y es capaz de sacar conclusiones del tipo Nokia Chekpoint
redirigiendo a IIS 6 sobre un Windows Server 2003.
Hping2 (o hping3)
Esta utilidad [hping]
se puede comparar con un ping pero a nivel TCP/IP, es decir, podemos,
mediante comandos definir la conversación completa con un servidor con
un tipo de paquetes enviados. La utilidad nos permite enviar paquetes
con los flags que queramos activados, modificando todos y cada uno de
los campos de una mensaje TCP/IP: MTU, TOS, Bit de Urgencia, flags de
SYN, etc... Esta herramienta va a permitir averiguar el sistema operativo a
base de realizar pruebas. Por suerte nmap implementa casi todas las
técnicas conocidas para el reconocimiento de sistemas operativos, pero
si alguna no estuviera implementada se puede utilizar hping2 para
implementarla. Además de para reconocer el sistema operativo también
vamos a poder utilizarla para averiguar los algoritmos de generación de
números de secuencia (útiles en escaneos de puertos y técnicas de
IP-Spoofing), la configuración de un firewall, e incluso la transmisión
de ficheros encapsulándolos sobre los paquetes que configuremos.
Los puertos del sistema
El
siguiente paso, que en un escaneo rápido se realiza al mismo tiempo, es
la detección de puertos abiertos en un sistema. A priori que un puerto
esté abierto no es ni malo ni bueno. Un puerto se abre para dar
servicio. El problema es cuando se abre un puerto que conecta con una
aplicación o servicio que no está securizado o que realmente el
administrador ignora que lo tiene abierto en una máquina. Desde el punto
de vista de un test de intrusión hay que ver a que servicios se puede
llegar.
Detectar un puerto TCP abierto debería ser tan fácil como
establecer una conexión con dicho servicio; para ello bastaría con
establecer una conexión con un simple telnet, que, además, nos mostrará
la información por pantalla que el servicio o aplicación al otro lado
del puerto está enviando.
El problema radica en las alarmas que se activen o la información que se
deje en los logs cuando se produce el scaneo, hay que tener en cuenta
que el número de puertos posibles es de 65536 puertos que pueden ser TCP
o UDP.
Lo más probable es que un firewall deje de responder a
una determinada IP cuando se haya producido más de un número de
peticiones de conexión desde una determinad ip, o cuando se han pedido
más de un número por unidad de tiempo, o cuando hay una violación de
protocolo (comando no valido que suele denotar que un servicio está
hablando con un ser humano detrás de un telnet y que ha cometido un
error al teclear o en el comando), etc....
El objetivo de los
métodos de escaneo es averiguar todos los puertos que se encuentran
ofreciendo servicio por TCP/UDP sin levantar alarmas y dejar el menor
rastro posible.
Hay muchos tipos de scaneo, y me encantaría
explicarlos todos aquí, pero no tengo espacio, pero si os los voy a
enumerar para que podáis buscar más información sobre ellos. Al final
la idea consiste en enviar paquetes con una determinada configuración y
escuchar como reacciona el equipo escaneado. Un escaneo no tiene porque
ser perfecto y a veces no salen todos los puertos si está detrás de un
firewall en un único tipo de escaneo. Los más usados son el escaneo de SYN, de FIN, de SYN+ACK, de ACK, el escaneo de NULL, que se realiza con todos los flags apagados y el de XMAS Tree, que recibe ese nombre porque activa todas las banderas como si fueran luces en un arbolito de navidad [Y para UDP e Iddle Scanning].
Scaneo con Nmap
Nmap,
realiza el escaneo de establecimiento de conexiones (como si hiciéramos
un telnet) que se llama TCP connect(), de SYN (o de conexiones medio
abiertas, ya que se envía un paquete SYN a un puerto y se espera la
confirmación por parte del cliente sin nunca cerrar la conexión), de
FIN, de NULL y de XMAS Tree.
Para los puertos UDP implementa un
sistema basado en el envío de mensajes UDP a un puerto de 0 bytes de
tamaño. Si se recibe un mensaje ICMP que dice que es inalcanzable
entonces es que el puerto está cerrado, por el contrario se asume que
está abierto. Este tipo de escaneo, como muchos de los anteriores puede
tener un alto índice de falsos positivos debido a que puede que el
firewall prohíba todo tráfico ICMP de salida o que se haya perdido la
respuesta.