openconnect + vpn-slice o cómo seguir navegando directamente por Internet al conectar la VPN de empresa (split tunneling)

Normalmente, los administradores de seguridad perimetral de una empresa configurarán sus concentradores VPN para forzar una ruta predeterminada a los usuarios, de tal manera que todo el tráfico se enrute a través de la conexión vpn. Esto se traduce en que los usuarios deberán salir también a Internet a través de la infraestructura y filtrado corporativos.

Sin embargo, aunque el administrador de VPN de turno puede enviar rutas al cliente, éstas pueden ser ignoradas y establecer un enrutamiento de modo que solo la red A.B.C.D/E requerida se enrute a través de la VPN. El resto del tráfico seguirá utilizando las rutas y la conexión a Internet saliente que se tenían antes de conectar a la VPN.

Esto se denomina enrutamiento VPN de túnel dividido (split-tunneling) y en esta entrada veremos cómo hacerlo mediante:
- openconnect: un cliente VPN de código abierto concebido para ser una alternativa al cliente propietario Cisco Anyconnect y compatible con su servidor
- vpn-slice: un script en bash que reemplaza al que te viene por defecto con openconnect y que facilita añadir y eliminar rutas para realizar el split tunnel

Instalación OpenConnect

$ sudo apt-get install openconnect lib32ncurses5 lib32tinfo5 lib32z1 libc6-i386 libpkcs11-helper1 openvpn vpnc-scripts

El binario openconnect no podrá crear el túnel tun0 sin que se le otorgue alguna capacidad o capability root para administrar redes; consulta las capabilities de Linux (man 7 capabilities) para obtener más detalle.

sudo setcap cap_net_admin+ep /usr/bin/openconnect

Para comprobar que la capacidad se ha añadido correctamente:

getcap -rv /usr/sbin/openconnect
/usr/sbin/openconnect = cap_net_admin+ep

Instalación vpn-slice

Como os comentaba vpn-slice es un reemplazo para OpenConnect o VPNC que facilita la creación de un split túnel:

- Solo enruta el tráfico de hosts o subredes específicos a través de la VPN
- Busca automáticamente nombres de hosts utilizando los servidores DNS de la VPN, y agrega entradas para ellos en /etc/hosts (que limpia después de la desconexión de VPN), sin embargo, no altera /etc/resolv.conf.

Necesitaremos Python 3.3+, dig, iproute2 e iptables:

apt-get install -y python3-pip
pip3 install https://github.com/dlenski/vpn-slice/archive/master.zip

Estableciendo una conexión VPN

Al establecer una conexión VPN contra la red corporativa debemos enrutar la subred requerida a través del túnel. El comando tipo sería:
sudo openconnect <corporate-vpn-endpoint> \
     -m 1290 \
     -u <your-vpn-user> \
     --servercert sha256:<0446a7EXAMPLE8901278394> \
     -s 'vpn-slice <10.10.0.0/14>'

- La primera vez que te conectas, openconnect mostrará el shasum del servercert, en las conexiones siguientes se puede usar ese shasum como el valor para --servercert
- Hay que reemplazar <10.10.0.0/14> con la subred que desea enrutar sobre el vpn corporativo.

Estas son las rutas antes de establecer la vpn:
default via 10.1.1.1 dev wlp4s0 proto static metric 600
10.1.1.0/24 dev wlp4s0 proto kernel scope link src 10.1.1.50 metric 600
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

Estas son las rutas después de conectarse a la vpn. vpn-slice solo creará rutas para la subred VPN y los servidores DNS de la VPN. Como veis, la ruta predeterminada que no ha cambiado después de conectarse la VPN.
default via 10.1.1.1 dev wlp4s0 proto static metric 600
10.1.1.0/24 dev wlp4s0 proto kernel scope link src 10.1.1.50 metric 600
10.10.0.0/14 dev tun0 scope link
10.10.0.0/14 dev tun0 scope link metric 6
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
180.10.34.165 dev tun0 scope link
180.10.34.165 dev tun0 scope link metric 6

Fuentes:
- Split tunneling with openconnect
- vpnc-script replacement for easy and secure split-tunnel VPN setup

Hershell, una shell reversa escrita en Go

Hershell de Ronan Kervella es una sencilla shell reversa TCP escrita en Go que utiliza TLS para proteger las comunicaciones y certificate pinning para evitar la interceptación de tráfico.

Se presenta como una interesante alternativa a los payloads de meterpreter que muchas veces son detectados por los AV y, al estar escrito en Go, puede compilarse para la arquitectura deseada. Soporta Windows, Linux, Mac OS, FreeBSD y derivados.

Construyendo el payload

Para simplificar las cosas, se puede usar el archivo Makefile proporcionado pudiendo establecer las siguientes variables de entorno:

- GOOS: el sistema operativo objetivo
- GOARCH: la arquitectura de destino
- LHOST: la IP o nombre de dominio del atacante
- LPORT: el puerto de escucha

Para las variables GOOS y GOARCH, puedes obtener los valores permitidos aquí.

Sin embargo, algunos objetivos auxiliares ya están disponibles en el archivo Makefile:

- depends: genera el certificado del servidor (requerido para la shell reversa)
- windows32: crea un ejecutable de Windows de 32 bits (PE 32 bits)
- windows64: crea un ejecutable de Windows de 64 bits (PE 64 bits)
- linux32: crea un ejecutable de 32 bits de Linux (ELF 32 bits)
- linux64: crea un ejecutable Linux de 64 bits (ELF 64 bits)
- macos: construye un ejecutable Mac OS de 64 bits (Mach-O)

Para esos objetivos, solo se necesita establecer las variables de entorno LHOST y LPORT.

Usando la shell

Una vez ejecutado, se obtendrá una shell remota. Esta shell interactiva personalizada permitirá ejecutar comandos del sistema a través de cmd.exe en Windows o /bin/sh en máquinas UNIX.

También se soportan los siguientes comandos especiales:

- run_shell: te deja una shell del sistema (permitiéndote, por ejemplo, cambiar directorios)
- Inject : inyecta un shellcode (codificado en base64) en la misma memoria de proceso y lo ejecuta (Windows solo por el momento)
- meterpreter IP:PORT: se conecta a un multi/handler para obtener un segundo stage de metasploit (reverse tcp meterpreter), y ejecuta el shellcode en la memoria (Windows solo en este momento)
- exit: salir

Solución al reto 22 clasificatorio para el CTF de #hc0n2018 (h-c0n prequals)

Como os decía cuando presentamos este reto 22, era realmente un clasificatorio para el CTF de la h-c0n que dará comienzo el próximo día 20 de enero a las 0:00 horas.

Cuando decidimos organizar una CON teníamos claro que no podía faltar el CTF y cuando iHackLabs, una empresa que se dedica a eso, nos propuso organizarlo y usar su plataforma pronto supimos que nos íbamos a algo realmente interesante y pro.

Pero evidentemente el acceso a la plataforma es limitado y para la h-c0n ese ha dimensionado una concurrencia de 45 usuarios, así que también íbamos a tener la oportunidad de realizar un par de pruebas para establecer ese corte y clasificar a los más hábiles y rápidos.

Y cómo últimamente andábamos muy enganchados a explotar máquinas, me pareció una buena idea preparar una propia para esta ocasión. Y la verdad lo tuve muy fácil, porque Héctor (riesc0) y Dani (adon90), dos compis de trabajo recién certificados con el OSCP, aceptaron a prepararla. Yo sólo la probé e hice un sencillo binario para generar las flags, y bueno, una pequeña imagen con esteganografía como paso previo a su descarga. Así que todo el mérito a estos dos cracks.

Evidentemente, tuvimos algunas limitaciones al tratarse de una máquina offline y también algunos fallos de primerizos como cierta inestabilidad con el servicio knockd y, sobretodo, no haberla preparado para VirtualBox (el interfaz de red). Pero dejamos Grub sin contraseña y muchos fueron capaces incluso de adaptarla a su entorno de forma autónoma.

Al final el resultado ha sido muy bueno y han podido clasificarse 44 valientes que han resuelto el prequal de varias (y algunas increíbles) maneras, muchos enviándonos solucionarios o writeup realmente completos y que merecen ser publicados. Pero como deferencia y tras comentarlo con riesc0, uno de los autores de la máquina, pegamos su writeup original.

Así que no me enrollo más y os dejo el susodicho solucionario, no sin antes daros las gracias a todos los que habéis intentado resolver el reto independientemente del resultado y deseando mucha suerte a todos los clasificados para el CTF que comenzará el día 20:

# 1.0 ESTEGANOGRAFÍA

Lo primero que tenemos es una imagen, la cual ya nos dicen que contiene algo oculto. Cuando se trata de algún reto de esteganografía siempre suelo usar Stegsolver para ver si hay algún mensaje oculto en alguno de los canales rgba de la imágen.


Vemos que está la palabra “rockyou.txt” oculta en la imagen, por lo que deducimos que para sacar el contenido adjunto de la foto hay que usar fuerza bruta con el diccionario rockyou.txt.

Cómo recibir una alerta en Telegram cada vez que se conecte un dispositivo USB a nuestro equipo (USB Canary)

Casi desde que empecé a trabajar en informática, los recuerdos más jocosos que guardo, incluso con añoranza, son los ataques David Hasselhoff, ya sabéis, aquellos que consisten en cambiar el fondo de pantalla del equipo de un descuidado compañero que dejó sin bloquear su sesión.

Cierto es que pocas veces los fondos evocaban la figura del actor de Mitch Buchannon y con el paso de los años las imágenes aumentaban su índole pertubadora… pero nada comparable a cuando empecé a trabajar en equipos de hackers éticos...

En un grupo acostumbrado a la seguridad ofensiva, llamarle Red Team, Tiger Team o como gustéis,  ya casi da igual que olvides bloquear el ordenador, ahora cualquier ausencia incluso breve, que permita el acceso físico, puede suponer una oportunidad para alguien conecte un Rubber Ducky o cualquier otro dispositivo y no sólo de un tono más “rosa” a tu escritorio: troyanizar el equipo, cambiar la password, modificar tu muro de Facebook, … los caminos del troll son incontables.

Para evitar ésto, y en un tono más serio protegerte también contra atacantes que no sean de tu propio equipo, lo más lógico será controlar el acceso a todos los puertos de tu ordenador que permitan conectar periféricos.

Si partimos de que no nos van a desarmar el hardware destornillador en mano y el lector de CDROM (hablaremos de éste último véctor más adelante), hoy en día los principales interfaces de entrada son los puertos USB por lo que es capital controlarlos.

A propósito de ésto, no hace mucho vi un proyecto en GitHub bastante interesante llamado USB Canary que permite en Linux y mediante pyudev monitorizar los dispositivos USB del equipo, mientras está bloqueado o continuamente. Además se puede configurar para enviar un SMS a través de la API Twilio, o notificar a un canal Slack mediante el bot correspondiente.

La herramienta está escrita en Python y es bastante sencillo añadir una tercera opción para las notificaciones, así que en seguida pensé en añadir la opción de Telegram. No sé vosotros pero yo la uso continuamente, por lo que me pareció una buena idea recibir un mensaje de un bot de Telegram cada vez que se conecte un dispositivo USB en mi portátil y de forma totalmente gratuita. De esta manera estaremos bajo aviso si alguien conecta algo a nuestro equipo en nuestra ausencia...

Lo primero que necesitaremos será precisamente crear un bot en Telegram y para ello llamaremos a papá @BotFather y le “diremos” que queremos crear un nuevo bot (opción /newbot):

SpookFlare: generador de loaders de Meterpreter para bypassear las contramedidas en el endpoint y en la red

SpookFlare es un generador de loaders para los stages de Meterpreter Reverse HTTP y HTTPS que añade una perspectiva diferente para eludir las medidas de seguridad del lado del cliente (endpoints) y la detección del lado de la red. Provee un cifrado personalizado con ofuscación de cadenas y compilación en tiempo de ejecución para eludir las contramedidas de los sistemas atacados, al menos hasta que "aprendan" la técnica y el comportamiento de los payloads de SpookFlare.

- Ofuscación
- Compilación de código en tiempo de ejecución
- Cifrado de código fuente
- Soporta parcheado de stages de Meterpreter

Proyecto: https://github.com/hlldz/SpookFlare
Detalle técnico: https://artofpwn.com/spookflare.html

[VulnHub write-up] The Wall by Zaiuss (2 de 2)

Ya estoy en la casa de Waters. Aparte de su diario (es una parodia), encuentro una foto suya echándose un pitillo y su biografía, pero nada más interesante. Voy a echar un ojo por los alrededores.

Mirando el /etc/passwd veo que hay un usuario por cada miembro del grupo:

    SydBarrett:*:1000:1000:Syd Barrett:/home/SydBarrett:/sbin/nologin
    NickMason:*:1001:1001:Nick Mason:/home/NickMason:/bin/ksh
    RogerWaters:*:1002:1002:Roger Waters:/home/RogerWaters:/bin/ksh
    RichardWright:*:1003:1003:Richard Wright:/home/RichardWright:/bin/ksh
    DavidGilmour:*:1004:1004:David Gilmour:/home/DavidGilmour:/bin/ksh


No puedo entrar en las casas de los otros usuarios, pero esto no me impide buscar alguna llave debajo de la alfombra. Con find -user tengo más que suficiente.


Woow, dos binarios “setuideados” (maldita palabra fea), de los cuales solo puedo ejecutar brick, el otro tan solo lo podrá ejecutar DavidGulmour o RichardWrigth (y root obviamente). La siguiente prueba es fácil:


Mason has been the drummer on every Pink Floyd album (but not on every song; some feature session drummers, drum machines, or no drumming at all).

NICK MASON
Al acertar la pregunta salto de usuario y ahora soy Nick Manson, (pero sin un ferrari). En su home tengo más o menos lo mismo que en los demás, una foto y su biografía. ¿Una foto suya? A ver ese bigote…

[VulnHub write-up] The Wall by Zaiuss (1 de 2)

Buenos días mis queridos pacientes. Desde Hackplayers me han informado sobre un creciente numero de drogodependientes que a diario van a buscar su dosis a HTB y como soy un doctor preocupado y responsable con mis pacientes… ¡os traigo buena medicina!

He seleccionado una mercancía especial para empezar este 2018 bien dopados: The Wall, de el gran Xerubus. https://www.vulnhub.com/entry/the-wall-1,130/  , está dedicada a Pink Floyd y al igual que discos como Animals, o The Dark Side of the Moon, me parece una jodida obra maestra.

*Si estas leyendo esto y no te gusta escuchar Pink Floyd, un consejo: escúchalos.

Lo más normal seria empezar con un escaneo de nmap, pero en este caso voy a empezar poniendo música 8)

“Another brick in the wall” - https://www.youtube.com/watch?v=5IpYOF4Hi6Q

Ahora sí, localizo la dirección de la máquina y busco algún servicio expuesto:


Ups, ¿nada? Parece que no, con ningún “combo” de nmap… pero la máquina está ahí. Quizás wireshark tenga algo que decir:

 
Anda, mira! Si parece que quiere decirme algo por el puerto 1337. Pongo un netcat a la escucha a ver que pasa…. estoy nervioso.


Buaaaaah! Yo con estas tonterías me emociono, joder. Y fíjate, parece que quieren saludarme.


- Welcome to the machine. https://www.youtube.com/watch?v=lt-udg9zQSE

Ha sido emocionante, ¿pero y ahora que pasa? No tengo muy claro si ha pasado algo o no,  así que voy a seguir dándole al nmap.


Si hombre!, eso antes no estaba ahí. Un http que se acaba de abrir ahora mismo. Pues venga, además voy a entrar como las personas normales.

Detección de micrófonos ocultos con Salamandra

Poco a poco vamos a ir paladeando y digiriendo todas las charlas de la Chaos Communication Congress que tuvo lugar recientemente en Leipzig (34C3) y empezamos con la presentación de Veronica Valeros y Sebastián García: Spy vs. Spy: A modern study of microphone bugs operation and detection.

Inspirados en el artista y activista chino Ai Weiwei que descubrió micrófonos ocultos en su casa tras regresar de un viaje de más de dos meses por Alemania y el Reino Unido, enfocaron su investigación principalmente en dispositivos transmisores de radio FM y crearon una herramienta llamada Salamandra capaz de detectar micrófonos espía.
Con sólo un dispositivo SDR (Software Define Radio) como éste (sólo 8€), esta herramienta escrita en python es capaz de encontrar micrófonos basándose en la fuerza de la señal enviada por el micrófono y la cantidad de ruido y frecuencias superpuestas. En función del ruido generado, puede calcular qué tan cerca o lejos está del micrófono.

Instalación

Salamandra necesita tener instalado previamente el software rtl_power:

- MacOS: sudo port install rtl-sdr
- Linux (basados en Debian): apt-get install rtl-sdr
- Windows: Ver http://www.rtl-sdr.com/getting-the-rtl-sdr-to-work-on-windows-10/

Si rtl_power se ha instalado correctamente, deberíamos ser capaces de ejecutar este comando en la consola:

rtl_test

y al menos debe aparecer un dispositivo detectado.

Uso

Uso básico para detectar micrófonos

./salamandra.py

Este comando usará un umbral predeterminado de 10.8, una frecuencia mínima de 100Mhz, una frecuencia máxima de 400Mhz y sonido. Se pueden cambiar los valores predeterminados con parámetros.

Reto 22: #h-c0n2018 prequals

El reto 22 es especial y distinto a los demás nuestros porque realmente se trata de una ronda clasificatoria para acceder al CTF de la h-c0n de 2018 que ha creado Ihacklabs.

Hasta el 14 de enero a las 0:00 horas tendréis disponible la imagen que se muestra abajo, que contiene oculto un enlace para la descarga de una máquina de laboratorio vulnerable que hay que comprometer, primero obteniendo una shell para la ejecución remota de comandos y segundo escalando privilegios hasta conseguir root y poder obtener la flag.

Ojo que la máquina sólo funciona en VMWare. En VirtualBox no reconoce correctamente el interfaz de red.

Esta flag debe remitirse a la dirección de correo electrónico hackplayerscon@gmail.com para su validación. Posteriormente se solicitará un pequeño writeup o solucionario que muestre esquemáticamente los pasos seguidos para conseguirlo.

Los primeros 45 que lo consigan obtendrán un código para acceder al CTF de iHackLabs. Y atentos porque los 5 primeros además conseguirán una entrada gratuita a la conferencia h-c0n. Si ya habían abonado la entrada con anterioridad, se les devolverá el dinero íntegramente por Paypal.

Así que ánimo y al lío:


Gracias a Dani (adon90) y Héctor (riesc0) por la máquina. Al final nos pilló un pelín el toro pero lo sorteamos ;) 

Cualquier duda podéis comentarla directamente en este post o a través de nuestras RRSS pero eso sí... sin spoilers... ;)

Meltdown y Spectre: vulnerabilidades críticas en CPUs

Se han confirmado dos fallos críticos de diseño en la inmensa mayoría de los procesadores integrados del mundo que dejarían vulnerables áreas protegidas de la memoria del núcleo o Kernel del sistema operativo.

Estas vulnerabilidades se han catalogado con los siguientes nombres y CVEs:
- Meltdown: CVE-2017-5754
- Spectre: CVE-2017-5753 y CVE-2017-5715 

Descripción

Una característica de la arquitectura integrada en las CPUs para mejorar el rendimiento del sistema conocida como Ejecución Especulativa (Speculative Execution) es la raíz del problema, ya que es vulnerable a distintos ataques de tipo canal lateral (side-channel attack). 

Explotando estos fallos de seguridad descubiertos se podría ejecutar código malicioso de forma no privilegiada y leer zonas de memoria reservada del Kernel del sistema eludiendo el mecanismo de protección KASLR (Kernel Address Space Layout Randomization) implementado en diversos sistemas operativos para colocar partes del núcleo en sitios aleatorios de memoria y así evitar accesos no autorizados.

"Explotación de la Ejecución Especulativa vía Javascript" es probablemente una de las frases terroríficas que se ha leído ultimamente, porque implica hacer un Dump de memoria del Kernel desde JAVASCRIPT.

Poder leer memoria del Kernel implica la posibilidad de leer la memoria de todo el sistema en la mayoría de Sistema Operativos de 64 bits, en otras palabras, memoria de espacios de direcciones de otros procesos que podría contener información sensible como contraseñas, claves criptográficas, etc. 
Casi todas las implementaciones de CPU de Intel, y otras de AMD y ARM son vulnerables, y por tanto todos los sistemas operativos y dispositivos que hacen uso de estos microprocesadores se ven afectados igualmente.

Buscando Bitcoins en GitHub con Google BigQuery

La gente se deja continuamente cosas confidenciales en Github: claves privadas ssh, documentos de identificación escaneados, contraseñas. etc. Pero, ¿podríamos llegar a encontrar claves privadas de bitcoin y hacernos ricos?

La gente de LiveOverflow ha dejado un video acojonante impresionante, en el que muestran como a través de Google BigQuery se puede lanzar una consulta SQL con un regexp capaz de encontrar millones de claves privadas de monederos de Bitcoin...

Recordar que habéis de empezar el año con buenos propósitos, ver el vídeo pero no seais malos...


La query para buscar BTC en GitHub a través de Google BigQuery

GitHub BigQuery Dataset: https://cloud.google.com/bigquery/public-data/github