Vistas de página en total

Mostrando entradas con la etiqueta USB Rubber Ducky. Mostrar todas las entradas
Mostrando entradas con la etiqueta USB Rubber Ducky. Mostrar todas las entradas

martes, 16 de febrero de 2016

Port Knocking con PowerShell

Después de varios días investigando con el USB Rubber Ducky para preparar una ponencia en el VI Congreso ACCID, sobre los peligros de los dispositivos USB si no se dispone de un control de éstos,  y como nos gusta tanto compartir con vosotros nuestras experiencias, os dejo este artículo sobre cómo hacer Port-Knocking con PowerShell para, por ejemplo, poder ejecutarlo desde nuestro querido Pato (USB Rubber Ducky).

A estas alturas creo que todos conocéis ya de sobra a nuestro amigo Pato, oficialmente conocido como USB Rubber Ducky y del que nuestro compañero Goldrak ya nos ha hablado. Si aún no habéis leído sus dos primeros artículos de esta serie, os aconsejo que lo hagáis:
A estas alturas creo que todos conocéis ya de sobra a nuestro amigo Pato, oficialmente conocido como USB Rubber Ducky y del que nuestro compañero Goldrak ya nos ha hablado. Si aún no habéis leído sus dos primeros artículos de esta serie, os aconsejo que lo hagáis:
¿Por qué Port Knocking?

La idea original era que el Pato ejecutara una instrucción PowerShell para descargar desde un servidor Web el payload que previamente habríamos preparado con Metasploit, para que la víctima (mejor dicho, nuestro Pato) lo descargara y ejecutara para obtener una sesión Meterpreter.

Así lo hice, monté mi servidor Web con Apache, generé con msfpayload un payload de tipo windows/meterpreter/reverse_tcp con los parámetros correspondientes y subí el fichero al servidor Web, listo para su descarga.

Problema: si dejo el servidor Web funcionando continuamente a la espera de algún ataque con el Pato, corro el riesgo de que el servidor y el recurso sean indexados por buscadores, crawlers y otras arañas. Lo ideal sería que fuera el propio Pato el que levantara el servicio Web, descargara el payload, y bajara el servicio. De esa forma dejar el servidor lo más “invisible” posible.

Se me ocurrió hacerlo con Port-Knocking, así que instalé knockd en mi servidor, donde tengo montado el servidor Web y subido el payload. El siguiente paso era configurar el knockd para que al “tocar” los puertos TCP 7000, 8000 y 9000 en un tiempo máximo de 10 segundos, levante el servicio Web, espere 30 segundos y lo vuelva a bajar. ¿Sencillo verdad?

Este es el archivo de configuración de knock.conf:

    [options]

    logfile = /var/log/knockd.log

    sequence    = 7000,8000,9000

    seq_timeout = 10

    command     = service apache2 start ; sleep 30 ; service apache2 stop

    tcpflags    = syn

En la opción command, escribo los comandos que quiero que se ejecuten en caso de que haya un Port-Knocking correcto: Iniciar Apache, esperar 30 (tiempo para la descarga del payload) y parar Apache.

Seguía teniendo un problema, y es que necesitaba un cliente de Port-Knocking. Hay varios clientes para Windows, pero necesitaría su descarga.  Otra opción sería con telnet o netcat, pero en las últimas versiones de Windows no están instaladas por defecto.

¡Houston! Aquí es donde me acordé de mi amigo Pablo González y de su charla en Qurtuba CON sobre PowerShell. ¿Por qué no intentar hacer Port-Knocking con PowerShell? Así que me puse manos a la obra y a investigar, de paso me vendría bien para adentrarme en este mundo de PowerShell, ya que yo soy más de “pingüinos”.

Pronto me empecé a llevar gratas sorpresas y di con clases y métodos tales como:

    powershell (New-Object System.Net.Sockets.TcpClient).Connect(‘ip-address,’port’)

Que permite establecer como Cliente TCP una conexión al servidor y puerto que indiquemos. Así que probé a realizar la “llamada a puertos” con esta instrucción, repitiendo por cada puerto (7000, 8000, y 9000)

El knockd estaba esperando en un tramo máximo de 10 segundos, knocking a los puertos TCP 7000, 8000 y 9000, pero al ejecutarlos con PowerShell no lograba pasar todos los stages del Port-Knocking. Pensé que podía ser por el tipo de conexión, al no indicar nada, el cliente TCP intentaría llevar a cabo el Three-Way Handshake completo, lo que me podría causar problemas. Lo ideal sería poder indicar tipo de flag en los paquetes que envía el cliente, para que sólo envíe de tipo SYN, pero no encontré la forma.

Sin embargo, sí me encontré con otro método de la clase anterior, llamado BeginConnect que realiza una conexión asíncrona, y que por el tipo de conexión sí que me cuadraba más para poder llevar a cabo el Port-Knocking de forma exitosa.

    powershell (New-Object System.Net.Sockets.TcpClient).BeginConnect(‘ip-address’,’port’,$null,$null)

Con la dirección IP y los puertos correspondientes, ejecutándolos en un tramo máximo de 10 segundos, conseguí el Ábrete Sésamo del knockd. ¡Bingo!
,
Bastaría con cambiar el puerto por 8000 y 9000, siempre y cuando se ejecuten dentro de esos 10 segundos.

    [2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 1
    [2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 2
    [2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 3
    [2015-05-28 08:17] 8x.1x.16x.4x: prueba: OPEN SESAME

Ya tan sólo me quedaría modificar el script del Pato, añadiendo las líneas correspondientes del Port-Knocking con PowerShell. La última línea del script del Pato sería la descarga y ejecución del payload.
Bastaría con cambiar el puerto por 8000 y 9000, siempre y cuando se ejecuten dentro de esos 10 segundos.
[2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 1
[2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 2
[2015-05-28 08:17] 8x.1x.16x.4x: prueba: Stage 3
[2015-05-28 08:17] 8x.1x.16x.4x: prueba: OPEN SESAME
Ya tan sólo me quedaría modificar el script del Pato, añadiendo las líneas correspondientes del Port-Knocking con PowerShell. La última línea del script del Pato sería la descarga y ejecución del payload.
En próximos artículos veremos cómo llevar a cabo estos pasos.
- See more at: http://hacking-etico.com/2015/05/28/port-knocking-con-powershell/#more-4425

Cuando el pato teclea Cuack Cuack – Parte 2

Seguimos con la trilogía de pato. Ya vimos en la parte 1 qué era el pato (USB Rubber Ducky) y cómo protegernos, en este caso vamos a ver algunos ejemplos del pato en diferentes sistemas operativos, por lo que va a comenzar a hacer Cuack
Lo primero que necesitamos para poderlo usar es aprender su lenguaje de programación el cual veréis que es muy sencillo. Aquí realizaremos el Hola Mundo en Windows, Mac, Linux y Android. Lo que vamos a hacer es abrir un editor de texto y escribir la conocida frase con la que empezamos a programar todo el mundo. Primero veremos el código y cómo afecta, luego veremos las herramientas para compilarlo.

Comenzamos con nuestro amigo Windows de Bill Puertas.
?
1
2
3
4
5
6
7
8
   
DELAY 3000
GUI r
DELAY 200
STRING notepad
ENTER
DELAY 200
STRING Hola mundo!!!
ENTER
Comenzamos introduciendo el comando DELAY -dicho comando mide el tiempo en milisegundos- que nos hará esperar 3 segundos para que le dé tiempo a Windows a reconocer el “teclado”. A continuación, con GUI r lanzamos el ejecutar, GUI emula la tecla de Windows, Super-Key o Command según el sistema operativo, al combinarlo con la tecla r y se nos abrirá la ventana de ejecutar de Windows.
Volvemos a esperar 200 milisegundos para dar tiempo a Windows a abrirnos la pantalla y tecleamos, con el comandos STRING, notepad. Después presionamos ENTER.
n
Una vez dominado Windows seguimos con la versión para Mac OS X de Jobs que veréis que es muy similar.

   
DELAY 3000
GUI SPACE
STRING TextEdit
ENTER
DELAY 2000
GUI n
DELAY 750
STRING Hola Mundo!!
ENTER

Como observamos en el segundo caso, los comandos son similares a Windows la diferencia es que en lugar de usar GUI r usamos GUI SPACE que nos abre el lanzador de aplicaciones.

Abrimos el TextEdit, en el caso de MAC, tenemos que decirle que queremos uno nuevo fichero de texto antes de ponernos a escribir en él, por lo que ejecutamos GUI n.
Ahora ya solo nos queda escribir el hola mundo con STRING Hola Mundo!! 😀 como ya hicimos en Windows. - See more at: http://hacking-etico.com/2015/05/16/cuando-el-pato-teclea-cuack-cuack-parte-2/#sthash.ho96N1g1.dpuf
Ahora ya solo nos queda escribir el hola mundo con STRING Hola Mundo!! 😀 como ya hicimos en Windows.
Seguimos con el tercer caso. En este momento vamos con GNU/Linux del tito Richard y Linus en su versión Ubuntu + Gnome3.
   
DELAY 3000
ALT F2
DELAY 500
STRING gedit
DELAY 500
ENTER
DELAY 750
STRING Hola Mundo!!

Como podéis ver, aquí difiere un poco el código, ya que no usamos GUI sino ALT F2 porque es como se abre el lanzador de aplicaciones en Gnome3, pero el resto es igual que en los anteriores sistemas.
 Ahora introducimos una vez más el editor de texto con el comando STRING gedit y lo ejecutamos.
Ya tenemos listo nuestro gedit para escribir nuestra famosa frase Hola Mundo. 
Vamos con nuestro cuarto y ultimo caso ¿Sueñan los androides con ovejas eléctricas?

Pues si no lo hacen nosotros vamos a hacer que lo hagan 😉

Vamos a usar inkpad en Android, dado que lo tenia instalado en mi móvil de pruebas y así no busco otro editor de texto simple.

   
DELAY 3100
ESCAPE
ESCAPE
ESCAPE
ESCAPE
ESCAPE
ESCAPE
CTRL z
DELAY 1200
STRING inkpad
DELAY 1000
DOWN
DOWN
DOWN
DOWN
ENTER
DELAY 2000
ENTER
DELAY 200
STRING Hola mundo!
Como observamos en este último caso usamos algunos comandos más. El primero es ESCAPE que nos sirve para volver hacia detrás y salir si tenemos alguna aplicación ejecutándose en ese momento.

Una vez en el escritorio usamos CTRL z que nos permitirá usar el buscador de Android donde tecleamos el nombre del programa inkpad, le damos un segundo para que busque y bajamos cuatro posiciones con DOWN hasta la aplicación y presionamos ENTER.
.
Esperamos 2 segundos para que se abra la aplicación y pulsamos ENTER de nuevo y ya escribimos nuestra frase Hola mundo!
FIN
 
Esperamos 2 segundos para que se abra la aplicación y pulsamos ENTER de nuevo y ya escribimos nuestra frase Hola mundo! - See more at: http://hacking-etico.com/2015/05/16/cuando-el-pato-teclea-cuack-cuack-parte-2/#sthash.ho96N1g1.dpuf
Esperamos 200 milisegundos y tecleamos Hola Mundo!! que aparecerá escrito gracias al comando STRING - See more at: http://hacking-etico.com/2015/05/16/cuando-el-pato-teclea-cuack-cuack-parte-2/#sthash.ho96N1g1.dpuf