Hace unas semanas nuestro compañero Pablo González (@pablogonzalezpe) publicó un artículo sobre cómo detectar qué dispositivos iOS habían generado confianza en tu equipo, ya sea un Mac o un Windows. Este artículo fue publicado en el blog de Chema Alonsoy recomendamos que le echéis un ojo. Además, Pablo generó un script escrito en Rubycon el que se puede obtener información de los dispositivos conectados, y con los que se generó confianza, como, por ejemplo, el UDID del dispositivo, la dirección MAC de la WiFi y del Bluetooth.
Para los más afines a Metasploit, Pablo generó también un script de Meterpreter con el que, en una post-explotación, se pueda detectar y obtener esta información. En ElevenPaths no paramos de probar cosas, escenarios e innovar. Con la agilidad por bandera seguimos jugando con la tecnología y decidimos crear una herramienta para Windows y Mac, la cual está disponible en su sitio web, la cual se encargue de dos cosas:
Poder ver qué dispositivos iOS se han conectado a la máquina y el usuario ha pulsado en "confiar" en el equipo.
Eliminar el fichero de confianza una vez que se desconecta el dispositivo.
Hoy queremos mostrar el uso de la herramienta y para ello mostramos como al instalar la herramienta se crea en nuestro panel superior del Mac el icono de Device Paired, tal y como se puede ver en la imagen.
Figura 1: Menú contextual de Device Paired
El funcionamiento es muy sencillo. En la imagen siguiente se puede ver como accedemos a un panel dónde nos aparecerán los dispositivos con los que el equipo tiene los "Trusted Files" o ficheros de confianza. El propio nombre de fichero nos indica el UDID, por lo que ya tenemos identificado el dispositivo. Además, se puede visualizar qué datos se puede obtener de ese fichero de confianza. En la parte de la derecha del panel encontramos la opción de "Eliminar", por lo que en cualquier momento se puede eliminar la confianza con un dispositivo antiguo o que estuviera de paso por el equipo.
Figura 2: Panel de administración de Device Paired
Una de las cosas que queríamos meter es usabilidad y comodidad por el usuario, por lo que una vez instalada la herramienta, la próxima vez que conectes y desconectes tu dispositivo iOS obtendrás un mensaje de la herramienta preguntándote si quieres eliminar de forma segura el fichero de confianza que tienes generado.
Figura 3: Mensaje al desconectar tu dispositivo iOS con el que has generado confianza
Para descargar esta herramienta puedes hacerlo desde el sitio web de ElevenPaths. Aprovecha para ojear otras pruebas de concepto y nuestras herramientas de laboratorio. El conocimiento al servicio del gran público.
Uno de los plugins que participaron en el concurso de Latch era Lockifi, un plugin que permitía al usuario habilitar y deshabilitar el acceso WiFi en el router. El objetivo es claro, cuando no vaya a utilizar la WiFirestrinjo el tiempo de exposición y la deshabilitóde forma automática gracias a la autorización con Latch. La idea nos gustó y decidimos migrar este plugin a un sistema OS X. Al principio nuestra idea fue migrar el plugin, por ejemplo a un lenguaje como Ruby, y crear un ítem en el inicio de sesión del usuario para que la aplicación estuviera preguntando automáticamente al iniciar sesión por el estado de Latch.
Tras echarle un poco de tiempo obtuvimos un código en Rubyque realizaba la misma operación que Lockifipara Windowsy preparamos el entorno para que autoarrancara. Aquí tenéis el vídeo de Lockifi para que veáis su propuesta. El código de este plugin está disponible en GitHub: Lockifi.
FIgura 1: Plugin Lockifi para Windows
Paso 0: El código
Como se ha mencionado esto es una migración del plugin Lockifi, escrito por Samuel Rodriguez. Migrar el código a otro lenguaje no era tarea difícil y decidí utilizar Ruby. El objetivo era que se ejcutara de forma sencilla en OS X. La versión deOS Xutilizada en este artículo ha sido El Capitan. Para llevar a cabo la migración se ha utilizado tres archivos más el SDK de Latch para Ruby. Además, debemos disponer de una cuenta de Latch en el área de desarrolladores, lo cual es gratuito. Deberemos crearnos una app dentro del área de desarrolladores. Como se puede ver en la siguiente imagen creamos una app con el nombre Lockifi OS X.
Figura 2: Creación de App Lockifi OS X en el área de desarrolladores
Nos tenemos que fijar en dos valores de la appque se acaba de crear: el Application ID y el secret. Estos valores serán necesarios para que nuestra aplicación Rubypueda comunicarse con Latchy nuestra cuenta de usuario. Pulsando el botón con el icono del lápiz se puede editar y visualizar estos dos parámetros.
Figura 3: VIsualización de Application ID y Secret
Los archivos son los siguientes:
main.rb. Este fichero se encarga de pedirnos un token para parear nuestra appde Latch con nuestra aplicación Ruby. El resultado que devolverá el main.rb es elAccount ID. Este Account ID deberá ser utilizado también por nuestra aplicación Rubypara comunicarse con Latch.
ssh_latches.rb. Este fichero implementa cuatro métodos que podrán ser utilizados para interactuar con Latch. El método statusdevolverá el estado de Latchpasándole el Account ID. El método pairnos facilita el pareo y será utilizado por main.rb. Esta clase se basa en el SDK de Latchpara implementar sus métodos.
ssh.rb. Este fichero implementa la lógica que proponemos para cada X tiempo consultar el estado de Latch y en función de éste habilitar o deshabilitar laWiFiprevia conexión al router.
Paso 1: main.rb
En primer lugar hay que echar un vistazo al código del main.rb. El objetivo es sencillo, un pequeño programa que nos pida un token y haga el paircon la app de Latch. El resultado será el Account ID, si todo va bien.
Figura 5: Código de main.rb
El programa mainnecesita del Application IDy el Secretpara poder llevar a cabo su acción de parear. El método pairestá invocado a través del SDK de Latch. En la imagen se puede ver un pequeño ejemplo de su invocación. Al introducir el token que generamos desde Latch, mainnos devolvería el Account ID que necesitaremos utilizar en ssh.rb.
Figura 6: Obtención del Account ID
Paso 2: Lógica de ssh.rb
El archivossh.rb implementa toda la lógica necesaria para llevar a cabo el control sobre la WiFidel router. La estrategia o algoritmo es sencilla. Mediante la realización de consultas periódicas al estado de nuestro Latchpodremos detectar cuando éste ha cambiado de estado. En el momento que se detecte que se ha cerrado el Latch el fichero ssh.rb lanzará una conexión al routerpor medio del protocolo SSH y "tumbará" la interfaz. El algoritmo quedaría algo como así:
Mientras true Compruebo estado de Latch Si Latch está Abierto Indico que está abierto Levanto la interfaz WiFi del router Si no Indico que se cerrará Apago interfaz WiFi del router Fin Si Fin Mientras
Como se puede ver es un algoritmo realmente sencillo. Haciendo una pequeña prueba antes de crear una aplicación con Automatory configurarla para que arranque al inicio de sesión del usuario. Cuando abrimos el cerrojo de Latch en Lockifi OS Xy visualizamos las peticiones que hacessh.rbobservaremos que nos indica "Open" y la WiFi seguirá operativa.
Figura 7: Lockifi OS X abierto
Para esta prueba hemos mostrado el texto en un terminal bashen OS X. El mensaje es claro, cuando comprueba el estado, cada 20 segundos por ejemplo, y detecta el cerrojo abierto nos indica "Open". Cuando cerramos el cerrojo y la aplicación detecta esto nos indicará "No Open" y llevará a cabo el proceso de deshabilitar la WiFidel routera través de una conexión SSH al dispositivo.
Figura 8: Mensajes que proporciona Lockifi OS X
Antes de pasar al siguiente paso, vamos a hacer hincapié en una zona del código de ssh.rbimportante. Cuando se comprueba el estado de Latchy no se encuentra abierto nos iremos por la rama elsede nuestro algoritmo. Esta parte es realmente la importante, la que deshabilitará a través del routerla posibilidad de conectarnos a nuestra WiFi de casa u oficina.
Observando el código se ve que se crea un objeto SSH cuya configuración para la conexión es la dirección IP del router, el segundo parámetro es el usuario y el tercer parámetro es la contraseña. La conexión por SSH se lanza a través del métodoexec!y ejecuta un ifconfigpara "tumbar" la interfaz WiFi. Hay que tener en cuenta que esto en otros modelos de routerspuede cambiar, pero no la estrategia.
Figura 9: Snippet de código de ssh.rb que deshabilita el WiFi del router
Paso 3: Automatizando la ejecución del programa en OS X
Ahora que tenemos el programa funcional decidimos hacerlo autoejecutable al comienzo de la sesión del usuario. De este modo, cuando nuestro OS X inicie sesión podremos comprobar si queremos que la WiFiesté disponible para otros usuarios o no.
Para llevar a cabo esta tarea utilizamos Automator, el cual viene con OS Xy permite automatizar tareas y flujos de trabajo de manera muy sencilla. El primer paso es arrancar la herramienta, la cual puede ser fácilmente localizada a través de Spotlight. Una vez arrancada debemos elegir, entre sus opciones, "Ejecutar el Script Shell". Esto nos abrirá un recuadro a la derecha dónde podremos escribir un script de shell, por ejemplo para bash.
Figura 10: Creando script de shell para automatizar con Automator
Es importante invocar, dentro del scriptde shell, a Rubycon su path completo. Una vez escrito el scriptse puede probar con el atajo CMD + R. Esto ejecutará el contenido del script. Ahora debemos convertir este scripten una app. Para esto,Automator, proporciona la posibilidad de guardarlo directamente como una aplicación, tal y como puede verse en la siguiente imagen.
Figura 11: Creación de aplicación
Una vez creada la aplicación debemos ir a "Preferencias del sistema" -> "Usuarios" y en este apartado seleccionar "Ítems de Inicio". Aquí podremos añadir, fácilmente, la aplicación generada con Automator, tal y como se puede ver en la imagen.
Figura 12: Adición como Ítem de Inicio
Paso 4: Comprobación final
Ahora, solo falta comprobar que al iniciar sesión se está ejecutando nuestra aplicación correctamente. Para esta prueba dejamos el cerrojo abierto e iniciamos sesión en nuestro OS X. Si tenemos habilitado en nuestra aplicación de Latchque nos avise cuando haya un intento de acceso cuando el Latchesté abierto nos llegará una notificación, como la que se muestra a continuación.
Figura 13: Acceso al servicio Lockifi OS X
Para verificar que nuestra aplicaciónRuby Lockifi OS X está corriendo, lo mejor es abrir un terminal en nuestro OS X y ejecutar, por ejemplo, ps aux | grep ruby. Debemos observar que la instrucción que introdujimos cuando creamos el script de shell con Automatorse encuentra levantada. En este caso se puede ver de forma sencilla y nuestro programa está en ejecución y realizando consultas a Latchpara comprobar si tiene que deshabilitar la WiFio habilitarla.
Figura 14: Comprobación de proceso ssh.rb
En el siguiente artículo realizaremos modificaciones para integrar en casa una Raspberryque levante un punto de acceso WiFi. La Raspberryla conectaremos al routerde casa mediante un cable Ethernet. Nuestro programa no se ejecutará en nuestro equipo, si no que se ejecutará en la Raspberry. Cuando desde la Raspberrynuestro programa detecte que se ha bloqueado el acceso a la WiFi"tirará" la interfaz WiFi. Lógicamente, el routerde casa tendrá que tener deshabilitado la WiFipara que esto tenga sentido. El esquema es sencillo, los usuarios de casa se conectarán al punto de acceso de la Raspberry y está hará forwardingde paquetes hacia el router, el cual nunca tendrá habilitado la interfaz Wireless. Es un esquema con el que cualquier usuario de casa podría desbloquear y bloquear la WiFicon Latch y lo tienes publicado aquí:Bloquear la WiFi con Latch desde Raspberry Pi.
El crecimiento y cuota de mercado de los equipos de Apple es innegable. La gente de Rapid7 ha decidido sacar un instalador oficial de Metasploit para los equipos de Apple. En su wiki de Github la gente de Rapid7 presenta el instalador oficial para OS X con unas breves y sencillas instrucciones. Se puede llevar a cabo una instalación rápida a través de consola o utilizar una instalación con entorno gráfico. Hay que recordar que un entorno de Metasploit tiene una fuerte dependencia de un entorno Ruby y PostreSQL para el almacenamiento de la información.
Hace unos días pude ver la siguiente imagen en Twitter, esto es lo que me alertó de la novedad de los instaladores en OS X. Hay que tener en cuenta que hasta hace poco la instalación de Metasploit se realizaba de manera no oficial como ya vimos. Sin duda es un avance hacia la comodidad y el saber que Rapid7 se encuentra detrás del soporte en OS Xayuda.
Figura 1: Tuit publicando el instalador oficial de Metasploit en OS X
La instalación rápida
La instalación rápida se lleva a cabo a través de la invocación o ejecución de un script proporcionado por Rapid7. Este script puede ser obtenido de la siguiente manera:
Por último, la instalación gráfica puede ser llevada a cabo a través de la descarga y ejecución del paquete metasploitframework-latest.pkg. El historial de estos paquetes se puede encontrar en el dominio que Rapid7 ha preparado para OS X.Con la instalación gráfica todas las dependencias se instalarán y se llevará a cabo una instalación sencilla y limpia. El framework quedará instalado en /opt/metasploit-framework/ y su binario de consola se encontrará en bin/msfconsole dentro del directorio anterior.
Homebrew permite al usuario de OS X instalar gran cantidad de paquetes que Apple no proporciona a sus usuarios. Para poder instalar Metasploit en OS X utilizaremos paquetes que podemos obtener con Homebrew de manera sencilla. Es importante que para llevar a cabo la instalación de Metasploit en OS X no se disponga de MacPorts instalado en el equipo, ya que seguramente se tenga problemas con ellos y las dependencias. La instalación de Metasploit puede resumirse en los siguientes pasos que se muestran a continuación:
Instalación de Command Line Development Tools Xcode 5 en Mavericks
Instalación de Java
Instalación de Homebrew
Instalación de Ruby 2.1
Instalación del escáner Nmap
Instalación de la base de datos de PostgreSQL y su configuración
Instalación de Metasploit Framework
Como se puede ver la lista de acciones a realizar es grande, pero si seguimos esto paso a paso no deberíamos tener problemas para instalar el framework en OS X Mavericks. En primer lugar hay que asegurarse de que se encuentran instaladas las Command Line Developer Tools y para ello se puede abrir un terminal y ejecutar la siguiente instrucción xcode-select –install, instalándose las herramientas automáticamente.
Figura 1: Instalación de las Command Line Developer Tools
Hay que asegurarse de tener la última versión de Java, en este caso Java JDK 8. Esto puede ser descargado desde el sitio web de Oracle. Para asegurarse de que se tiene la versión adecuada se puede ejecutar en un terminal la siguiente instrucción java –version. Además, si se quiere comprobar dónde está instalado se puede utilizar el comando whereis.
Ahora, instalaremos Homebrew pudiéndose descargar desde su sitio web. En este punto, y tras instalar Homebrew hay que asegurarse de que los binarios instalados por éste son los primeros que se encuentran en la variable de entorno $PATH. Por ello se ejecutan las siguientes instrucciones echo PATH=/usr/local/bin:/usr/local/sbin:$PATH >> $HOME/.bash_profile; source $HOME/.bash_profile; brew tap homebrew/versions.
Para instalar Ruby 2.1 utilizaremos Homebrew, y es tan sencillo como ejecutar la siguiente instrucción brew install homebrew/versions/ruby21. Una vez ejecutada la instrucción se comprueba la versión ejecutando la orden ruby –v en la terminal. Existen otras formas de instalar Ruby en OS X, pero quizá está es una de las más sencillas para los usuarios.
Para instalar Nmap también utilizaremos Homebrew. Con este proceso su instalación es trivial y muy rápida. La instrucción que debe ser ejecutada es brew install nmap en la terminal. Nmap puede ser utilizado desde la consola de Metasploit por lo que es importante su correcta instalación y Homebrew simplifica y mucho el proceso.
La instalación del motor de base de datos PostgreSQL y su configuración es un paso también crítico, ya que después será utilizado por la consola de Metasploit. La instalación se llevará a cabo desde Homebrew con la instrucción brew install postgresql –without-ossp-uuid. Una vez instalado se debe configurar. Para ello hay que inicializar el motor de base de datos con la siguiente instrucción initdb /usr/local/var/postgres. Para configurar PostgreSQL se lanzarán varias instrucciones cuyo objetivo es copiar una configuración al entorno de usuario. Las instrucciones son:
Una vez realizado esto debemos crear un usuario para la base de datos llamado msf que utilizaremos con Metasploit. Para realizar esto ejecutamos la instrucción createuser msf –P –h localhost. Además, se debe crear la base de datos con la instrucción createdb –O msf msf –h localhost.
Ahora toca descargarse el framework con Git. Para obtener la copia del repositorio ejecutaremos la instrucción git clone https://github.com/rapid7/metasploit-framework.git. En este punto ya estaríamos cerca de poder arrancar la consola de Metasploit. Creando el directorio /usr/local/share/metasploit-framework y copiando todo lo que se descarga desde Git podemos crear un enlace simbólico para poder utilizar día a día con facilidad Metasploit. Para todos los binarios que empiezan por msf* de la carpeta de Metasploit se hace un enlace simbólico a la ubicación /usr/local/bin y de este modo aparecen en $PATH y son fácilmente invocables. Una instrucción sencilla sería ejecutar lo siguiente for file in $(ls msf*); do ln –s /usr/local/share/metasploit-framework/$file /usr/local/bin/$file; done.
Ahora damos permisos al resto de usuarios de escritura sobre el fichero /etc/profile, por ejemplo con chmod go+w. Por último hay que configurar la base de datos para que se integre con Metasploit y para ello añadimos al fichero /etc/profile la siguiente instrucción sudo echo export MSF_DATABASE_CONFIG=/usr/local/share/metasploit-framework/config/database.yml >> /etc/profile.
Figura 2: Metasploit en OS X
Utilizamos bundle install para instalar las versiones de las gemas soportadas por el framework. Editamos el fichero /usr/local/share/metasploit-framework/config/database.yml con la siguiente información:
Production: adapter: postgresql database: msf username:msf password: host: 127.0.0.1 port: 5432 pool: X (un número que se quiera dar, por ejemplo 75) timeout: 5
Ejecutamos source /etc/profile y source $HOME/.bash_profile para que todo quede actualizado y podremos lanzar msfconsole. No es un proceso rápido y puede resultar costoso, pero disponer del framework de explotación de Metasploit en tu OS X Mavericks merece la pena.