De-Ice II – Desarrollo práctico (Post largo)

Este post consistirá en la realización de un test de penetración para el entorno De-Ice II que podemos encontrar en la página del proyecto Sec-Track. Para el que no sepa que es esto, le remito al primer post de esta serie (los podéis encontrar en la categoría “prácticos” de este blog) o a la página del propio proyecto Sec-Track, el cual es muy recomendable y tiene cosas muy interesantes. Si no habéis realizado la primera parte (De-ICE I) os recomiendo que empecéis por ella, ya que habrá cosas que veremos en este entorno que se explicaron ampliamente en la primera parte.

Es esta ocasión, el escenario es el siguiente:

Una pequeña empresa te contrata para que realices un Test de Penetración avanzado. El administrador de sistemas de dicha empresa dice haber reconfigurado el sistema para hacerlo muy seguro. Espera que usted intente por todos los medios posibles de vulnerar el sistema, pues está seguro de que es invulnerable. Este sistema es un servidor FTP utilizado para crear y restaurar copias de seguridad de los diferentes sistemas. Dice además que no hay información sensible y que dicho sistemas alguna vez fue utilizado por un cliente para transferencias de información, pero que esta ha sido eliminada.

Por mi parte en este post voy a explicar los pasos que yo seguí para resolver el reto, y haré referencia a las explicaciones de Sec-Track cuando lo considere necesario.

Pues nada, manos a la obra. Lo primero, obviamente, es arrancar nuestra máquina virtual con el Live CD correspondiente al entorno. En caso de tener alguna duda de cómo configurarlo, en el proyecto Sec-Track se explica como configurar el entorno para VMWare y Qemu. Para el resto de plataformas de virtualización es muy similar, yo lo tengo instalado en Parallels sin ningún problema.

El ataque o test de penetración lo vamos a realizar desde el punto de vista externo, es decir, no vamos a tener un puesto en la red interna, ni ningún tipo de privilegio como pudiera tener alguna persona perteneciente a la organización.

Lo primero será realizar un escaneo de nuestra red para saber la IP que posee la máquina en cuestión. Si habéis realizado bien todos los pasos en la configuración, el resultado obtenido tendría que ser similar a este:

~#nmap –sP 192.168.1.1-255
Starting Nmap x.xx ( http://nmap.org ) at yyyy-mm-dd hh:mm CET
Nmap scan report for example.org (192.168.1.1) <- router
Host is up (0.0040s latency).
Nmap scan report for 192.168.1.3 <- nuestro ordenador
Host is up (0.00048s latency).
Nmap scan report for 192.168.1.110 <- De-ICE II
Host is up (0.0022s latency).
Nmap done: 255 IP addresses (X hosts up) scanned in 15.12 seconds

Este paso en un test real, no deberíamos realizarlo ya que tendríamos la IP del objetivo, pero aquí no está demás para comprobar que todo está bien configurado.

Una vez comprobado que la máquina existe y posee una IP válida, vamos a conectar desde nuestro navegador a su página web para ver que nos puede ofrecer.

En esta ocasión, la página web es bastante escueta. Podemos ver un pequeño encabezado, un pequeño texto y varias direcciones de correo. En este caso, si nos fijamos, todas ellas son de administradores. Al igual que en el primer entorno desarrollado, podemos formar combinaciones con los nombres para tratar de encontrar usuarios válidos para pruebas de acceso que realizaremos posteriormente. A parte de esto, poca información más nos va a dar esta página.

El siguiente paso es ver que nos ofrece el entorno objetivo, es decir, que servicios tiene abierto y accesibles desde el exterior. Para ello vamos a realizar un escaneado de puerto:

~#nmap 192.168.1.110
Starting Nmap x.xx ( http://nmap.org ) at yyyy-mm-dd hh:mm CET
Nmap scan report for 192.168.1.110
Host is up (0.012s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
631/tcp open  ipp
Nmap done: 1 IP address (1 host up) scanned in 12.78 seconds
Como podemos ver, la máquina objetivo tiene varios servicios a disposición de los usuarios, y nuestra claro.

También podemos ejecutar la instrucción:

~# nmap -sV -p 21,22,80,631 192.168.1.110

Con ella podemos obtener más información sobre los servicios que están corriendo, como versiones, aplicaciones, etc…

Starting Nmap 5.21 ( http://nmap.org ) at 2010-12-10 10:36 CET
Nmap scan report for 192.168.1.110
Host is up (0.00092s latency).
PORT    STATE SERVICE VERSION
21/tcp  open  ftp     vsftpd 2.0.4
22/tcp  open  ssh?
80/tcp  open  http    Apache httpd 2.2.4 ((Unix) mod_ssl/2.2.4 OpenSSL/0.9.8b DAV/2)
631/tcp open  ipp     CUPS 1.1
Service Info: OS: Unix

El único puerto sobre el que no hemos podido averiguar datos es el 22, pero bueno, esto de momento, no nos tiene que preocupar.

Lo más normal ahora, sería lanzar un escáner de vulnerabilidades como nessus o alguna herramienta similar o de recolección de información, pero yo en muchas ocasiones, antes de entrar en faena y consumir tanto tiempo, prefiero hacer las pruebas más evidentes, y oye, a veces hasta funcionan. En este caso, la prueba tonta, es conectarse al servidor ftp y probar si se puede acceder anónimamente a él:

~# ftp 192.168.1.110
Connected to 192.168.1.110.
220 (vsFTPd 2.0.4)
Name (192.168.1.110:svoboda): anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Pues nada, parece que ha habido suerte y hemos conectado. Si esto hubiera fallado, tendríamos que habernos puesta ya a la faena y utilizar herramientas para comprobar vulnerabilidades, o hacer ataques de fuerza bruta a ver si podemos entrar o similares. Pero, una vez más, se demuestra que el eslabón más débil de la cadena es el ser humano, en este caso, un administrador confiado o despistado, que no ha inhabilitado el acceso anónimo.

El siguiente paso es explorar el árbol de directorios que está nuestra disposición para ver si encontramos algo útil.

Por mi parte, yo he encontrado dos ficheros útiles localizados en el directorio “/etc”. Estos son:

- core

- shadow

El que más llamó mi atención es el fichero shadow, ya que como imagino sabréis es una forma de almacenar los passwords del sistema en *unix. Tras verlo, lo primero que hice fue bajármelo y utilizar la herramienta “John the Ripper” para ver si conseguía sacar parejas de usuario/contraseña válidos. De todo esto se habló, en el desarrollo del primer entorno.

[Esto último, fue un grave fallo mío, y una pérdida de tiempo por mi parte. Tras terminar de pasarle el primer diccionario y no obtener resultados me puse a revisar el fichero que me había bajado y a buscar los usuarios que previamente habíamos conseguido y formado a través de nuestra visita a la página web. Para mi sorpresa, no encontré ninguna de las combinaciones que había formado. Teniendo en cuenta, que el ftp se utiliza para realizar copias de otros sistemas, probablemente el fichero sea de otro sistema y nos de este. Mi fallo, dejarme llevar por lo evidente. Nota mental: No suponer nada nunca.]

Después de este tiempo perdido, y de la lección aprendida, vamos a examinar el otro fichero interesante que hay, el core. Si abrimos este fichero directamente, obviamente, no veremos nada. Pero para eso tenemos la herramienta “strings” en sistemas *unix.

~#strings core

Con esto podremos ver variables locales, información varia del sistema en el momento del fallo y, al final, encontraremos unas líneas con el formato de un fichero de passwords de *unix. Y esta vez si, con los usuarios que estábamos buscando (no volvamos a cometer el mismo error dos veces). Con esto podemos lanzar al amigo “john” y esperar resultados.

Depende de los diccionarios que empleéis, encontraréis más o menos resultados. Yo el primero que obtuve es el de root, pero desafortunadamente, tras varios intentos de conexión “ssh” me di cuenta de que este no posee acceso remoto. Finalmente, dos diccionarios después, conseguí otro usuario y su password y pude conectar. Una vez dentro del sistema, con el comando “su”, ya podemos hacer superusuario con todos los privilegios que esto conlleva.

El siguiente paso, es explorar el sistema a ver si podemos encontrar algo que merezca la pena. Ya sabéis con “ls –la” o como más os guste.

Tras un rato de buscar, encontramos en “/home/root/.save” un interesante fichero llamado “copy.sh” que cifra a través de “openssl” (podéis ver un artículo en este mismo blog sobre ello) algo que se localiza en “ftp/incoming” y que se salva en este directorio con al extensión “.enc”. En el propio directoria ya existe un fichero con esta extensión, pero si lo listamos, veremos que no podemos entender absolutamente nada. Lo que tenemos que hacer, ya que sabemos como se cifra es descifrarlo con “openssl”:

root@slax:/home/root/.save# openssl enc -d -aes-256-cbc -salt -in customer_account.csv.enc -out customer_account.csv -pass file:/etc/ssl/certs/pw

Tras esto podremos visualizar el fichero en texto plano y ver clientes, y tarjetas de crédito.

El último paso, es garantizarnos el fácil acceso para otras ocasiones. Pero como esto es igual que en el entorno anterior, no vamos a entrar aquí.

Una vez llegado hasta aquí, os recomiendo visitar la página correspondiente a la resolución de este entorno en el proyecto Sec-Track:

- Network mapping, port scanning

- Recopilación de información, escaneo de vulnerabilidades

- Acceso al sistema y elevación de privilegios

- Información confidencial y backdoors

En estos cuatro artículos ellos desarrollan, no solo en entorno como he hecho yo, si no que además, intentan introducir dentro de un marco de metodología, algunas herramientas.

Espero que os sirva. Como siempre, animaros a poner dudas o comentarios. Nos vemos.

De-Ice I: Desarrollo práctico (III de III)

Anterior: De-Ice I: Desarrollo práctico (II de III)

Nos conectamos al sistema mediante SSH con la combinación de usuario y contraseña que hemos obtenido. Nuestro siguiente objetivo será la escalada de privilegios.

Para esto, algo muy interesante suele ser consultar estos tres ficheros, si se puede. En este caso si.

-       /etc/passwd -> Usuarios, grupos, …

-       /etc/shadow -> Usuarios y passwords cifrados

-       /etc/sudores -> Grupos y permisos

Aquí podemos observar que el usuario con el que hemos conseguido acceso, pertenece a un grupo “wheel” que tiene permiso para la ejecución de unos pocos comandos como “root”. Entre ellos el comando “cat”, con el que hemos podido leer los ficheros nombrados anteriormente.

A partir de aquí, la idea es escalar privilegios. En la página del proyecto Sec-track (2), explican un método en mi opinión algo complejo, aunque sin duda muy imaginativo he interesante de leer. Pero yo por mi parte me decante por intentar algo más simple. Para ello, ya que tenía en pantalla el contenido del fichero “/etc/shadow”, lo copie a mi ordenador y en él lance la herramienta “John The Ripper”, la cual en poco tiempo me sacó la contraseña de “root”. Con lo cual ya tenemos acceso completo al sistema.

Una de mis motivaciones para utilizar John en mi máquina, y que no me termine de convencer el método de Sec-track, es el tiempo de conexión al sistema remoto y el uso de CPU en el sistema remoto. Estás dos cosas son elementos que puede hacer que nos detecten. Cuanto más tiempo estemos conectados, es más fácil que alguien se de cuenta de que estamos ahí. Y cuanta más CPU o tiempo de CPU usemos igual. Así que yo me decanté por conectarme, sacar el contenido de fichero y crackearlo en mi máquina.

Finalmente, solo nos queda conservar el acceso, es decir, instalar una puerta trasera, para lo cual yo me he decantado, ya que hay un servidor web levantado, por instalar una shell remota al estilo de “c99” o algo similar.

Del mismo modo que antes, me he conectado al sistema, he ido a la ruta del servidor web, en este caso la por defecto, “/var/www/” y allí he copiado el script de PHP con la shell remota.

De nuevo, en el proyecto Sec-Track, porponen hacerlo con Nectcat, pero esto implica tener un proceso desplegado en la máquina que cualquier administrador puede encontrar, así que en este caso, y siempre en mi opinión, es preferible la shell remota mediante el uso del servidor web.

Ya solo nos faltaría eliminar todo nuestro rastro de logs de conexiones y similar, pero vamos, teniendo al usuario “root” a nuestra disposición esto no debería ser muy difícil.

Pues ya esta. Como podéis ver, métodos para hacer estos hay muchos, yo solo me he decantado por uno que dejara los menos rastros posibles en la máquina atacada, siempre en mi opinión (ni mucho menos soy un experto). Estar poco tiempo conectado al host remoto, usar lo menos posible su CPU, y las conexiones de Medusa, inevitables, eliminarlas una vez tengamos acceso como “root”.

Espero que os divirtáis con el entorno. Y si tenéis dudas, ya sabéis, dejad un comentario o poneros en contacto conmigo.

Se que quizás, para gente que no tenga mucha experiencia en esto o que este empezando, habrá cosas que no haya entendido. Estas personas, que no se preocupen ni desanimen. Les animo a buscar aquello que no han entendido por su cuenta, y después, la idea de estos artículos sobre prácticas y entornos, es describir a partir de ellos cosas más especificas. Por ejemplo, aquí se explica THC-Hydra y Medusa, y algo que se explicará en próximos artículos en “John The Ripper”. De esta forma, esperemos avanzar al siguiente entorno con todo bien aprendido.

Un saludo a todos. Nos vemos.

De-Ice I: Desarrollo práctico (II de III)

Anterior: De-Ice I: Desarrollo práctico (I de III)

El siguiente paso es explorar un poco la red, o en este caso el servidor atacado, ya que la red es la nuestra.

Para esto lo primero que se nos ocurre es lanzar un ping para localizar la máquina. Pero al lanzar este no obtenemos respuesta. De lo que deducimos que deben de estar bloqueadas en el servidor las respuestas ICMP.

Lo siguiente que procedemos es a escanear el servidor a ver si comprobamos que hay en él:

nmap -sV -p 7,21,22,23,25,79,80,1433,8080,1521,3306,10000,5900 192.168.1.100

Donde –sV nos ayuda a sacar las versiones de cada servicio levantado, y –p le indica los puerto que queremos consultar. ¿Por qué la especificación de puerto? Especificándolos conseguimos que aunque estén filtrados aparezcan en el escaneo. Al lanzar el escaneo sin especificar puertos, la mayoría de los puertos que tiene servicios pero los tienen filtrados no devolverían resultados. ¿Por qué estos puertos? Bueno, lo normal es coger una lista de puertos que tengamos por ahí y escoger los que pensemos que pueden estar: SSH, Apache, MySQL, smtp, POP3, etc…

Con este escaneo deberéis recibir una respuesta similar a la siguiente:

7/tcp     filtered echo

21/tcp    open     ftp              vsftpd (broken: could not bind listening IPv4 socket)

22/tcp    open     ssh              OpenSSH 4.3 (protocol 1.99)

23/tcp    filtered telnet

25/tcp    open     smtp?

79/tcp    filtered finger

80/tcp    open     http             Apache httpd 2.0.55 ((Unix) PHP/5.1.2)

1433/tcp  filtered ms-sql-s

1521/tcp  filtered oracle

3306/tcp  filtered mysql

5900/tcp  filtered vnc

8080/tcp  filtered http-proxy

10000/tcp filtered snet-sensor-mgmt

Service Info: OS: Unix

Como podemos ver, existen varios servicios levantados y algunos de ellos están filtrados. Uno de los más interesantes, es el de SSH, ya que con los usuarios que hemos generado antes y con una herramienta adecuada como THC-Hydra o Medusa podemos intentar conseguir acceso. Así que esto es lo que vamos a hacer a continuación.

Yo en mi caso he utilizado Medusa, ya que inicialmente probé con THC-Hydra y me dio problemas de conexión, pero aún no he investigado el por qué. De todas formas, esto me sirve para ejemplificar porque razón hay que conocer más de una herramienta de cada tipo.

medusa -h 192.168.1.100 -U user.txt -P pass.txt -O salida.txt -M ssh

Donde –U es el listado de usuarios, -P un diccionario a vuestra elección, -O el fichero de salida con los resultados y –M el módulo de Medusa a utilizar.

Tras finalizar Medusa su trabajo, he conseguido encontrar un resultado correcto para el usuario aadams. Nos os voy a decir la contraseña para motivaros a probar vosotros. De todas formas si necesitáis alguna ayuda, preguntad y os puedo sugerir algún diccionario.

En la página del proyecto Sec-track (1), proponen utilizar una herramienta que se basa en smtp para buscar los usuarios válidos de forma más fácil. Yo no conocía la herramienta y me ha parecido muy curiosa, os recomiendo que le echéis un vistazo.

Bueno, pues hasta aquí ya tenemos acceso al sistema.

Seguimos en De-Ice I: Desarrollo práctico (III de III)

De-Ice I: Desarrollo práctico (I de III)

########################################

De-Ice I: Desarrollo práctico (I de III)

De-Ice I: Desarrollo práctico (II de III)

De-Ice I: Desarrollo práctico (III de III)

########################################

En este post vamos a desarrollar un test de penetración (pentest) de el entorno de pruebas De-Ice I que podéis encontrar en la página del proyecto Sec-track.

El escenario que nos muestra el reto es el de una pequeña empresa y el nivel de este es bajo. De hecho, el entorno está pensado para que la gente se empiece a familiarizar con metodologías y formas de trabajo.

A continuación, yo voy a redactar los pasos seguidos por mi para realizar este test de penetración. Además, en la propia página del proyecto Sec-track ahí un ejemplo de desarrollo de este, así que cuando lo crea necesario iré remitiéndoos  allí para que veáis otras formas de hacerlo o curiosidades que me parecen interesantes.

Antes de empezar, que quede claro que esto es un test de penetración y no una auditoría. Por resumir mucho, pero mucho, las diferencias diremos que el primero solo busca un modo de entrar, mientras que en el segundo se realiza un análisis exhaustivo de todo el sistema. Generalmente, se utiliza el primero, para justificar el desembolso monetario del segundo.

Pues nada vamos a ello. En la página del proyecto Sec-track han dividido el proceso en cuatro categorías que son las siguientes:

-       Recolección de información /Enumeración de usuarios. (1)

-       Escalada de privilegios y revelación de información crítica. (2)

-       Backdoors, manteniendo el acceso. (3)

-       Conclusiones y recomendaciones. (4)

Yo por mi parte, no voy a hacer secciones diferenciadas (solo lo necesario para que el post no quede de un tamaño ilegible), pero si os fijáis podréis ver como más o menos la secuencia de pasos realizados encaja.

Lo primero, y por comodidad, es arrancar el entorno en una máquina virtual. Si tenéis algún problema, os remito a Sec-track donde hay ejemplo de configuraciones en VMWare y Qemu. Y una vez configurado empezaremos.

Para empezar en todos los casos, y más, en un ataque desde el exterior como el que estamos simulando es buscar información. En este caso, no tiene mucho sentido intentar buscar, por ejemplo, DNS, pero si que un vistazo a la página principal de la supuesta empresa no está mal.

En ella podemos ver texto sin importancia, pero también nos fijamos en que hay varios correos y nombres de gente. Aquí podemos hacernos una idea de posibles usuarios de algún sistema de la máquina objetivo. Podemos observar, que los correos, por ejemplo:

Adam Adams – adamsa@herot.net

Se forman con una derivación del nombre y el apellido, lo cual nos puede llevar a pensar que los posibles nombres de usuarios de acceso a la máquina se pueden formar con combinaciones similares al estilo de: aadams, adamsa, adadams adamsad, adam.adams, etc… Si veis correos corporativos a menudo, observaréis que los patrones para formarlos suelen ser así.

De aquí, en principio, poca información más vamos a sacar. Como pensamiento propio, y esto es una apuesta personal que puede salir mal o bien, ya para mis pruebas de los diez correos que hay, he formado usuarios solo con los de los administradores de sistemas, ya que he partido de la hipótesis de que los otros quizás solo tengan dirección de correo y no tiene porque tener usuario en los sistemas. De esta forma mi lista de usuarios queda algo así:

root (siempre lo pongo, nunca se sabe)

admin (por la misma razón que el de arriba)

aadams adamsa adamsad adam.adams

bbanter banterb banterbo bob.banter

ccoffee coffeec coffeech chad.coffee

Esto ya es cosa de vuestra imaginación y vuestra experiencia.

Seguimos en De-Ice I: Desarrollo práctico (II de III)