Select Page
Binary file injection via USB Rubber Ducky

Binary file injection via USB Rubber Ducky

Is it possible to inject binary files using a USB Rubber Ducky? The device created years ago by Hack5 has the ability to enter a large number of keystrokes into a computer in a short time, but is it possible to enter binary files from the keyboard?

Yes, it is. I tell you how.

 

Introducción

I have posted something about keyboard related security before, but this time it is different. The purpose of this post is to explain how to inject binary files into a Windows 10 system using the “USB Rubber Ducky” keyboard emulator. While there are several alternative projects, the original USB Rubber Ducky from Hack5 was used to simulate the keyboard keys.

In the image above you can see how Angela from Mr. Robot is using the USB Rubber Ducky. She did that because she has physical access to the computer to be breached but only for 15 seconds. This is the main use for which the USB Rubber Ducky was designed. That of injecting thousands of keys in a few seconds or minutes as if someone is typing at super speed.

The goal was to test if, in addition to typing commands or scripts, binary files could also be injected through the USB Rubber Ducky. Googling around, only a few posts were found commenting that it would be feasible to do, but that it would be very difficult. I could not find any post from someone who had really done it.

What was developed then, was a procedure that allows to inject any arbitrary binary file, in this case, into a Windows 10 machine with Powershell enabled, by simply using the Ducky keyboard emulation.

 

DISCLAIMER

All information contained in this publication is for educational purposes only. The author or his collaborators are not responsible for any unlawful action that may be taken on the basis of such information.

 

USB Rubber Ducky

As the vendor states, “The USB Rubber Ducky injects keystrokes at superhuman speeds, violating the inherent trust computers have in humans by posing as a keyboard.

 

 

USB RUbber Ducky
Fig. 1. USB Rubber Ducky

The device looks like a USB flash drive. However, it is in fact a keyboard emulator. This means that it reads the key codes from a micro SD device and sends them to the computer as if it were a human typing. There are a lot of information online of how to use the Ducky and there are lot of published scripts too. In order to use the device you need to follow the next steps:

    1. Download any USB Rubber Ducky injection coder.

    There are several, but in this case the Duck Toolkit was used because it has the language coding that we needed.

  1.  

    1. Create the appropriate script in Rubber Ducky USB language

    The USB Rubber Ducky language is quite simple, and tells the processor what to do sequentially. Here is a simple example of a script:

REM The next three lines execute a command prompt in Windows
GUI r
DELAY 100
STRING cmd
ENTER

In this example, the commands used behave as follows:

REM: is a comment line, nothing will be done
GUI: is the Windows Key that will be holded with the next key. In this example ‘GUI r’ means, WindowsKey+r (it will popup the windows run… prompt)
DELAY: the system will wait for the tens of milliseconds that follows. In this example, ‘DELAY 100’ means delay 1000 milliseconds, that is 1 second.
STRING: means that the string that follows will be typed as is (in this case it will type ‘cmd’)
ENTER: the Enter key will be pressed

There are more commands in this language, nevertheless, for our purpose, we will use only these ones. This injection script can be saved in a text file, for example: “test.inject.txt“.

  1. Encode the script with the encoder

Once the script file is created, it needs to be encoded so that the Ducky understands it. It is very important to take into account the keyboard language that the target Windows has configured. It is also convenient to do some tests since the keymap may not match exactly with the encoding sent by the Ducky. Once the encoding is determined, a command like this is executed:

$ducktools.py -e test.inject.txt -l us test.inject.txt.bin
    1. Remove the micro SD card from the USB Rubber Ducky and plug it to a auxiliary machine. In this case the auxiliary machine was Linux.
    2. Copy the .bin file from the auxiliary machine to the micro SD card
$cp test.inject.txt.bin /media/.../inject.bin
    1. Remove the micro SD from the auxiliary machine and plug it back into the USB Rubber Ducky.
    2. Insert the USB Rubber Ducky in a USB socket of the target machine
    3. The Ducky will start typing…

Binary Powershell files

There are several ways of creating binary files from an integer string in Powershell. After making several tests, the following option was selected:

[io.file]::WriteAllBytes('<binary file>',$bytecode)

 

This command line will create a a file named ‘<binary file>‘ based on the bytecode sequence contained in the $bytecode variable.

Therefore, the $bytecode variable must be previously created and filled with the original binary file bytecode sequence. The variable can be created with this simple Powershell command:

$bytecode = <byte 1>,<byte 2>,<byte 3>,...,<last byte>

The original file bytecode sequence can be extracted in a Linux machine with a command like this:

$od -An -tu1 -w1 -v test.exe > test.exe.txt

Nevertheless, in this case, in order to make things easier, a python script was developed.

 

Creation of an injection file

A small python script named bin2duck was created in order to read the bytecode sequence of the original binary file, and create an USB Rubber Ducky script file. The python script can be downloaded here.
In the following section, the tutorial of the complete process of injecting a binary file to a Windows 10 machine with Powershell enabled via Rubber Ducky USB is described.

 

Tutorial

 

The main goal of this technique is to inject binary files (such as executables) to a Windows 10 machine with Powershell enabled.

For the whole process, in addition to the Ducky, a second machine is also needed. Surely the procedure can be run on a Windows with python, but in this case we used Linux.
The complete inventory is:

 

    • The Windows 10 target machine.
    • The auxiliary Linux machine.
    • The USB Rubber Ducky.

For the example in this tutorial, a legitimate Windows 10 executable extracted from another machine running the same version of Windows was used.

Here are the steps:

  1. Choose the binary file you want to inject, for example: hostname.exe
C:WindowsSystem32hostname.exe

For the first test, it is recommended that the executable file should be one extracted from other machine with the same  Windows version of the target machine.

  1. Copy the binary file to a Linux machine.

Through the network, USB, etc.

  1. On the Linux machine, run the python script (bin2duck) that reads the binary file and creates the script file in the USB Rubber Ducky language:
$bin2duck.py -i hostname.exe -m 2

a text file named ‘inj.hostname.exe‘ will be created. The file will have a format similar to this one:

DELAY 2000
STRING # Reading xxx bytes
ENTER
STRING $start=date
ENTER
STRING # Progress: 0%, 0 bytes
ENTER
STRING $bytecodetemp = $bytecodetemp + 77,90,144,0,....
ENTER
DELAY 200
STRING # Progress: 3%, 512 bytes
ENTER
STRING $bytecodetemp = $bytecodetemp + 128,18,0,0,....
ENTER
.
.
.
STRING # Progress: 100%, xxx bytes
ENTER
STRING $end=date
ENTER
STRING $start
ENTER
STRING $end
ENTER
STRING [byte[]] $bytecode = $bytecodetemp
ENTER
DELAY 200
STRING [io.file]::WriteAllBytes('inj.hostname.exe',$bytecode)
ENTER
  1. Encode the created file and generate USB Rubber Ducky injection file
    $ducktools.py -e inj.hostname.exe -l mx inj.hostname.exe.bin
  2. Insert the USB Rubbar Ducky micro SD in the auxiliary machine
  3. Copy the injection file on the micro SD
    $cp inj.hostname.exe.bin /media/.../inject.bin

Note: The target filename MUST be ‘inject.bin’.

    1. Unmount the micro SD
      $umount /dev/sdX1
    2. Remove the micro SD and insert it into the USB Rubber Ducky
    3. Go to the target machine
    4. Start a Windows command window  (Win+r, Start > Run > cmd.exe, etc.)
    5. With the cursor in the command window, insert the USB Rubber Ducky into the target Windows 10 system. The USB Rubber Ducky will start ‘typing’ as indicated in the inject.bin:

USB RUbber Ducky
Fig. 2. inject.bin execution.

      1. Wait until the process is finished and the file is created, in this case: hostname.exe.
        This process will take several minutes depending on the file size. According to our tests, the speed is between 30 and 60 bytes/second. This means that injecting a 1MB file would take, with this technique, between 5 and 10 hours… But if there is no other way to do it and the equipment is available for more than 5 hours, it is worth it…

Warning: During the process you can NOT touch the mouse or the keyboard, because if you change the focus, the Ducky will continue typing where the focus is and can ruin the variable generation process (besides typing anything in another application). It must be remembered that the device is emulating a typing person.

USB RUbber Ducky
Fig. 3. Target machine binary file creation.

    1. Run the newly created executable file. In this case both were tested: the original hostname command, and the injected file: inj.hostname.exe file.

USB RUbber Ducky
Fig. 4. Target machine binary file execution.

If the file is too large you can compress it (e.g. as a .zip file), send the .zip file as a binary via the USB Rubber Ducky, and then unzip it on the target machine.

 

Summary

Attacks to isolated or air-gapped machines are very limited. The limit is even worse if the machine has USB storage devices and external booting disabled. So, the only way to carry out an attack is by the keyboard port.

A procedure and a script to inject binary files into a Windows 10 machine via the keyboard emulator USB Rubber Ducky were created. Different binary files e.g. .exe and .zip files were successfully injected. Executable injected files were successfully executed.

 

Acknowkedgements

I would like to thank the Platinum Ciber technical team that participated in this initiative. They are: Alejandro Diaschi, Facundo Keller, Santiago Sarchetti and I want to specially mention Maykel Camargo who gave me the idea of using the USB Rubber Ducky to inject “stuff” inside a machine by unconventional means.

 

I hope you enjoy it!

See you next time!

 

 

Post by Carlos Benitez

Carlos Benitez es un reconocido experto en seguridad de la información.

Binary file injection via USB Rubber Ducky

Inyección de binarios vía USB Rubber Ducky

¿Es posible inyectar binarios usando una USB Rubber Ducky? El dispositivo creado hace años por Hack5 tiene la posibilidad de ingresar a un equipo una gran cantidad de teclas en corto tiempo, ¿pero es posible ingresar desde el teclado archivos binarios?

Sí es posible, aquí les cuento cómo.

 

Introducción

Ya alguna vez publiqué algo sobre seguridad relacionada con los teclados, pero esta vez es diferente. El propósito de este post es explicar cómo se pueden inyectar archivos binarios en un Windows 10 utilizando el emulador de teclado “USB Rubber Ducky“. Si bien existen varios proyectos alternativos, para simular las teclas del teclado en este proyecto se utilizó la USB Rubber Ducky original de Hack5. 

En la imagen de arriba se ve cómo Angela de Mr. Robot usa la USB Rubber Ducky porque cuenta con acceso físico al equipo a vulnerar, pero sólo disponiendo de 15 segundos para interactuar. Ese es el principal uso para el que fue diseñada la USB Rubber Ducky. El de inyectar miles de teclas en pocos segundos o minutos como si se tipeara a super velocidad. ¿Y por qué es posible? Normalmente porque es muy poco probable que se deshabilite o blacklistee en los equipos la interfaz de teclado. Y al conectarla Ducky así se presenta ante el sistema, como un teclado.

El objetivo fue probar si además de tipear comandos o scripts, también se podian inyectar binarios a través de la Ducky. Googleando sólo se encontraron  algunos post comentando que sería factible inyectar binarios, pero que sería muy difícil… No pude encontrar ninguna publicación de alguien que lo hubiera hecho.

Lo que se desarrolló entonces, fue un procedimiento que permite inyectar cualquier archivo binario arbitrario, en este caso, en una máquina con Windows 10 simplemente usando la emulación de teclado de la Ducky.

 

DISCLAIMER

Toda la información incluida en esta publicación se hace únicamente con carácter educativo. El autor o sus colaboradores no se hacen responsables por cualquier acción ilícita que se pueda realizar a partir de dicha información.

 

USB Rubber Ducky

Como afirma el vendedor, “La USB Rubber Ducky inyecta teclas a velocidades sobrehumanas, violando la confianza inherente que las computdoras tienen en los humanos al hacerse pasar por un teclado.

USB RUbber Ducky
Fig. 1. USB Rubber Ducky

El dispositivo parece un pendrive USB. Sin embargo, es en realidad un emulador de teclado. Esto significa que lee los códigos de las teclas de una memoria micro SD y los envía al equipo como si fuera un humano escribiendo. Hay mucha información en Internet de cómo usar el Ducky y también hay muchos scripts publicados. Para utilizar el dispositivo se deben que seguir los siguientes pasos:

    1. Descargar cualquier codificador de inyección de USB Rubber Ducky.

    Hay varios, pero para este caso se utilizó el Duck Toolkit porque tiene la codificación del lenguaje que se necesitaba.

    1. Crear el script apropiado en lenguaje USB Rubber Ducky

    El lenguaje USB Rubber Ducky es bastante sencillo, y le indica al procesador lo que debe hacer en forma secuencial. Este es un ejemplo sencillo de un script:

REM Las siguientes tres líneas ejecutan un prompt de comando en Windows
GUI r
DELAY 100
STRING cmd
ENTER

En este ejemplo, los comandos utilizados se comportan de la siguiente manera:

REM: es una línea de comentario, no se hará nada
GUI: es la tecla de Windows que se mantendrá apretada con la siguiente tecla indicada. En este ejemplo ‘GUI r’ significa, WindowsKey+r (hará aparecer el prompt de Windows Run…)
DELAY: el sistema esperará las decenas de milisegundos siguientes. En este ejemplo, ‘DELAY 100’ significa retrasar 1000 milisegundos, es decir, 1 segundo.
STRING: significa que el string que sigue se escribirá tal cual; en este caso escribirá ‘cmd’
ENTER: se pulsará la tecla Enter

Hay más comandos en este lenguaje, sin embargo, para el propósito de este post, sólo se utilizarán los indicados. Este script de inyección se puede salvar en un archivo de texto, por ejemplo: “test.inject.txt

  1. Codificar el script con el codificador

Una vez creado el archivo de script, se necesita codificarlo para que la Ducky lo entienda. Es muy importante tener en cuenta el lenguaje del teclado que tiene configurado el Windows de destino. También conviene hacer pruebas ya que puede ser que el mapa de teclas no coincida exáctamente con la codificación que envía la Ducky. Una vez determinada la codificación, se ejecuta un comando como este:

$ducktools.py -e test.inject.txt -l us test.inject.txt.bin
    1. Quitar la micro SD de la USB Rubber Ducky y conectarla a una máquina auxiliar (en este caso, la máquina auxiliar tenía Linux).
    2. Copiar el archivo .bin de la máquina auxiliar a la micro SD
$cp test.inject.txt.bin /media/.../inject.bin
    1. Retirar la micro SD de la máquina auxiliar y conectarla de nuevo en la USB Rubber Ducky
    2. Insertar la USB Rubber Ducky en el conector USB de la máquina de destino.
    3. La Ducky comenzará a escribir…

Archivos binarios Powershell

Hay varias formas de crear archivos binarios a partir de un string de enteros en powershell. Después de hacer varias pruebas, se decidió utilizar la siguiente opción:

[io.file]::WriteAllBytes('<archivo binario>',$bytecode)

En esta línea, se crea un archivo de nomnre ‘<archivo binario>’ basado en la secuencia de bytecodes contenida en la variable $bytecode.

Por lo tanto, previamente se debe crear y llenar con la secuencia de bytecodes del archivo de origen, la variable de tipo Byte $bytecode. La variable se puede crear simplemente con el siguiente comando de powershell:

$bytecode = <byte 1>,<byte 2>,<byte 3>,...,<último byte>

La secuencia de bytes del archivo original se puede extraer (por ejemplo) en una máquina Linux con el siguiente comando:

$od -An -tu1 -w1 -v test.exe > test.exe.txt

Pero en este caso, para facilitar el proceso, se desarrolló un script en python.

 

Creación del archivo de inyección

Para leer todos los bytes del archivo binario original, y crear el archivo de inyección para la USB Rubber Ducky, se creó un pequeño script en python: bin2duck. El mismo se puede descargar aquí.
En la siguiente sección, se describe el tutorial del proceso completo para inyectar un archivo binario a un Windows 10 con Powershell habilitado a través de la USB Rubber Ducky.

 

Tutorial

El objetivo principal de esta técnica es el de inyectar archivos binarios (como por ejemplo ejecutables) a una máquina con Windows 10.

Para el proceso completo, además de la Ducky, también se necesita una segunda máquina. Seguramente el procedimiento se podrá ejecutar en un Windows con python, pero en este caso se utilizó Linux.
El inventario completo es:

    • La máquina de destino (con Windows 10).
    • Una máquina auxiliar (con Linux).
    • La USB Rubber Ducky.

Para el ejemplo de este tutorial, se utilizó un ejecutable legítimo de Windows 10 extraido desde otra máquina con la misma versión de Windows que la máquina destino.

Estos son los pasos:

  1. Buscar el binario que se quiere inyectar, por ejemplo el ejecutable: hostname.exe
C:\Windows\System32\hostname.exe

Para la primera prueba conviene que el ejecutable sea uno extraído de la misma versión de Windows de la máquina de destino.

  1. Copiar el ejecutable a un equipo Linux

Por red, USB, etc.

  1. En la máquina Linux, ejecutar el script de python que lee el binario y crea el archivo script en el lenguaje de la USB Rubber Ducky:
$bin2duck.py -i hostname.exe -m 2

se creará un archivo de texto llamado ‘inj.hostname.exe‘ con un formato similar a éste:

DELAY 2000
STRING # Reading xxx bytes
ENTER
STRING $start=date
ENTER
STRING # Progress: 0%, 0 bytes
ENTER
STRING $bytecodetemp = $bytecodetemp + 77,90,144,0,....
ENTER
DELAY 200
STRING # Progress: 3%, 512 bytes
ENTER
STRING $bytecodetemp = $bytecodetemp + 128,18,0,0,....
ENTER
.
.
.
STRING # Progress: 100%, xxx bytes
ENTER
STRING $end=date
ENTER
STRING $start
ENTER
STRING $end
ENTER
STRING [byte[]] $bytecode = $bytecodetemp
ENTER
DELAY 200
STRING [io.file]::WriteAllBytes('inj.hostname.exe',$bytecode)
ENTER
  1. Codificar el archivo creado y generar el archivo de inyección USB Rubber Ducky
    $ducktools.py -e inj.hostname.exe -l mx inj.hostname.exe.bin
  2. Insertar la micro SD de la USB Rubber Ducky en la máquina auxiliar
  3. Copiar el archivo de inyección en la micro SD
    $cp inj.hostname.exe.bin /media/.../inject.bin

Nota: El nombre del archivo de destino DEBE ser ‘inject.bin’.

    1. Desmontar la micro SD
      $umount /dev/sdX1
    2. Retirar la micro SD e insertarla en la USB Rubber Ducky
    3. Ir al sistema de destino
    4. Iniciar una ventana de comandos de Windows (Win+r, Inicio > Ejecutar > cmd.exe, etc.)
    5. Con el cursor en la ventana de comandos, insertar la USB Rubber Ducky en el sistema Windows 10 de destino. La USB Rubber Ducky comenzará a ‘tipear’ de acuerdo a lo indicado en el inject.bin:

USB RUbber Ducky
Fig. 2. Ejecución del inject.bin.

      1. Esperar a que el proceso termine y se cree el archivo, en este caso: hostname.exe.
        Este proceso tardará varios minutos dependiendo del tamaño del archivo. Según las pruebas realizadas, la velocidad es de entre 30 y 60 bytes/segundo. Eso significa que inyectar un archivo de 1MB, demoraría, con esta técnica, entre 5 y 10 horas… Pero si no hay otra forma de hacerlo y se dispone del equipo por más de 5 horas, vale la pena…

Nota: Durante el proceso NO se puede tocar ni mouse ni teclado, ya que si se cambia el foco, la Ducky sequirá tipeando donde esté el foco y puede arruinar el proceso de generación de la variable (además de escribir cualquier cosa en otra aplicación). Se debe recordar que el dispositivo está emulando a una persona tipeando.

USB RUbber Ducky
Fig. 3. Creación del binario en la máquina de destino.

    1. Ejecutar el archivo binario recién creado. En este caso se probaron los 2: el comando original hostname, y el archivo inyectado: inj.hostname.exe.

USB RUbber Ducky
Fig. 4. Ejecución del binario de destino.

Si el archivo es demasiado grande se puede comprimir (por ejemplo, como archivo.zip), enviar el archivo.zip como binario a través de la USB Rubber Ducky y luego descomprimirlo en la máquina de destino.

 

Resumen

Los ataques a las máquinas aisladas o air-gapped son muy difíciles de lograr. Estas restricciones son aún mayores si la máquina tiene tanto los dispositivos de almacenamiento USB y de booteo externo desactivados. Por lo tanto, la única forma de llevar adelante un ataque en estos equipos es a través del teclado.

Se creó un procedimiento y un script para inyectar archivos binarios en una máquina Windows 10 a través del emulador de teclado USB Rubber Ducky. Se inyectaron con éxito en dicha máquina diferentes archivos binarios, por ejemplo, archivos .exe y .zip. Los archivos ejecutables inyectados fueron ejecutados con éxito.

Agradecimientos

Me gustaría agradecer al equipo técnico de Platinum Ciber que participó en esta iniciativa. Ellos son: Alejandro Diaschi, Facundo Keller, Santiago Sarchetti y quiero mencionar especialmente a Maykel Camargo quien me dio la idea de usar la USB Rubber Ducky para inyectar “cosas” dentro de una máquina por medios no convencionales.

 

Espero que les sirva.

Hasta la próxima!

 

 

Nota por Carlos Benitez

Carlos Benitez es un reconocido experto en seguridad de la información.

Instalar QRadar CE en Proxmox

Instalar QRadar CE en Proxmox

Esta vez les cuento cómo instalar QRadar CE en Proxmox usando el archivo .ova provisto por IBM. El formato OVA se importa directamente en VMWare o en Virtualbox, pero no en Proxmox, y por eso este tutorial.

Si bien la instalación la hice con QRadar CE versión 7.3.3, estimo que estos pasos funcionan también en las demás versiones. 

 

Condiciones iniciales

Para aquellos que tengan ganas de jugar o experimentar con el SIEM QRadar de IBM, sepan que existe una versión gratuita denominada QRadar CE (Community Edition). Tiene el 90% de las funcionalidades de la versión paga y sólo está limitada a 50 EPS / 5000 FPM.

Este tuto tiene por objetivo expicar cómo instalar QRadar CE versión 7.3.3 sobre el ambiente de virtualización open source Proxmox versión 6.1-7.

Para escribirlo, me basé en un trabajo del año pasado de Tobias Hoffman, en varios documentos de IBM y en esta publicación de docplayer.

Instalar QRadar CE

Si bien es posible crear una máquina virtual en Proxmox e instalar QRadar CE desde cero, esto requiere bastante trabajo ya que QRadar se instala sobre CentOS por lo que hay que instalar CentOS primero, y después correr el setup de QRadar. Por eso, para hacerlo más rápido, vamos a usar la imagen .ova que provee IBM. El formato OVA se importa directamente en VMWare o en Virtualbox, sin embargo no es así en Proxmox.

Los pasos para importar el .ova de QRadar CE y luego instalar la aplicación son los siguientes:

 

1- Crear la VM en Proxmox.

Doy por sobrentendido que quien vaya a seguir de aquí en adelante tiene un Proxmox 6 instalado y funcionando. Entonces empecemos. Una vez logueado en el Proxmox:

  • Hacer clic en el botón Creare VM:

En la solapa General:

  • Seleccionar el Nodo donde se va a crear la VM (en este caso: pve1).
  • Elejir un ID (por ejemplo: 3000)
  • Definir un nombre (por ejemplo: qradarce-733)
  • Hacer clic en Next.

En la solapa OS:

  • Seleeccionar Do not use any media.
  • Para el tipo de sistema operarivo seleccionar Linux.
  • Para el kernel seleccionar 5.x – 2.6
  • Hacer clic en Next.

En la solapa System:

  • Dejar todo por default.
  • Hacer clic en Next.

En la solapa Hard Disk:

  • Dejar todo por default (no importa lo que se seleccione, ya que ese disco lo vamos a borrar luego).
  • Hacer clic en Next.

En la solapa CPU:

  • Seleccionar 2 Sockets y 2 Cores (si se usa la versión free de Proxmox, no es posible seleccionar más de 4 CPUs).
  • Hacer clic en Next.

En la solapa Memory:

  • Seleccionar un mínimo de 16GB de RAM.
  • Hacer clic en Next.

En la solapa Network:

  • Dejar todo por default.
  • Hacer clic en Next.

En la solapa Confirm:

  • Verificar que todo esté correcto.
  • Hacer clic en Finish.

 

 

2- Eliminar el disco que creamos.

  • En el menú de VMs de Proxmox, ubicar la VM que acabamos de crear (por ejemplo: VMID= 3000, Nombre= qradrarce-733) y hacer clic en Hardware.

 

  • Hacer clic en Detach.

 

  • Hacer clic en Yes.

Ahora el disco aparecerá como “Unused Disk“.

  • Seleccionar el disco.
  • Hacer clic en Remove.
  • Hacer clic en Yes.

Ya eliminamos el disco que nos creó Proxmox para poder incorporar el que viene en el .ova de QRadar.

 

3- Incorporar el disco de QRadar CE que viene dentro del archivo .ova en la VM que acabamos de crear.

 

IMPORTANTE: Para poder bajar los archivos de QRadar CE se debe ser un usuario registrado, asi que si no lo son, deben darse de alta.

Si bien se pueden bajar el .ova a sus máquinas y después transferirlo al Proxmox, en mi caso era mucho más ventajoso hacerlo directamente en el Proxmox. La razón es que estamos en Cuarentena, el Proxmox lo tengo a 20 km de casa, y mi ancho de banda de subida es horrible. Así que usé este truco:

Una vez logueados en el sitio de IBM:

 

  • Hacer clic en Download QRadar Community Edition V7.3.3. El sitio los redirige a esta página:

Ahora pueden bajar el .ova a sus máquinas como les dije antes, o bajarlo directamente en el Proxmox. Voy a explicar esta segunda opción:

  • Hacer clic derecho en la pantalla anterior en: Download.
  • En el menú contextual del browse, hacer clic en Copy Link Location o Copy link address (según sea el navegador).
  • Pegar el link en un archivo de texto para no perderlo. El link tendrá la forma:

hxxps://iwm.dhe.ibm.com/sdfrl/1v2/regs2/qrce/Xa.2/X….q/Xc.QRadarCE733GA_v1_0.ova/Xd./Xf.LPr.D1jk/Xg.1…2/Xi.swg-qradarcom/XY.regsrvs/XZ.4…n/QRadarCE733GA_v1_0.ova

  • Conectarse por ssh al Proxmox.

# ssh -l root <ip_del_proxmox>

  • Posicionarse en un directorio que tenga un espacio libre de al menos 4.1GB.

# cd /tmp

  • Bajar el QRadarCE733GA_v1_0.ova con el comando wget y el link que copiaron en el archivo de texto.

# wget -bqc hxxps://iwm.dhe.ibm.com/sdfrl/1v2/regs2/qrce/Xa.2/X….q/Xc.QRadarCE733GA_v1_0.ova/Xd./Xf.LPr.D1jk/Xg.1…2/Xi.swg-qradarcom/XY.regsrvs/XZ.4…n/QRadarCE733GA_v1_0.ova

Una vez que termine la bajada, y dado que el archivo .ova que nos bajamos no es más que un .tar:

# file QRadarCE733GA_v1_0.ova
QRadarCE733GA_v1_0.ova: POSIX tar archive

  • Destarearlo

# tar xfv QRadarCE733GA_v1_0.ova

Se destarean 4 archivos:

-rw-r–r– someone/someone 7381 2020-01-22 08:32 QCE-jan22.ovf
-rw-r–r– someone/someone 277 2020-01-22 08:32 QCE-jan22.mf
-rw-r–r– someone/someone 950009856 2020-01-22 08:32 QCE-jan22-file1.iso
-rw-r–r– someone/someone 3441993728 2020-01-22 08:36 QCE-jan22-disk1.vmdk

El que nos interesa es el disco virtual, es decir el QCE-jan22-disk1.vmdk.

  • Importar el disco en la VM con el siguiente comando en la consola de Proxmox.

# qm importdisk <ID> QCE-jan22-disk1.vmdk <store> -format qcow2

ID: es el VMID que definimos al crear la VM, en este caso: 3000.

store: es el repositorio de almacenamiento de las VMs en el caso de tener más de uno, en nuestro caso PVE-1.

En nuestro ejemplo, el comando quedaría:

# qm importdisk 3000 QCE-jan22-disk1.vmdk PVE-1 -format qcow2

Este comando importa el vmdk, lo convierte en qcow2 y lo asigna a la VM 3000.

  • En la interfase web de Proxmox, seleccionar la VM de QRadar que creamos:

Nos aparece el disco importado como “Unused Disk 0“.

  • Seleccionamos el disco.

  • Hacemos clic en Edit:

IMPORTANTE: El formato del disco que bajamos de IBM es IDE, así que en Bus/Device hay que seleccionar: IDE.

  • Hacemos clic en Add.

 

 

4- Instalar QRadar CE dentro de la VM

La VM ya está lista con el disco importado desde el .ova de IBM, pero QRadar todavía no está instalado. Estos son los pasos para hacerlo:

  • Bootear la VM.
  • Conectarse a la consola de Proxmox de la VM.
  • Cuando lo pida, definir una password para el root de la consola de QRadar.

Hay un mínimo de dos usuarios que necesitamos para que funcione, el root de la consola y el admin de la GUI.

Hay que tener en cuenta que al instalar QRadar, la dirección IP de la consola queda almacenanda por todos lados y cambiar la IP no es fácil. Por eso es importante asegurarse si la dirección IP que tiene la VM antes de instalar es la correcta.

  • Verificar la dirección IP de la VM

# ip a

  • Si la dirección IP no es la correcta, ejecutar el NetworkManager Tex User Interface (horrible, pero es lo que hay…):

# nmtui

  • Configurar los parámetros de red que correspondan.

Una vez definidos los parámetros de red, ya se puede configurar QRadar.

  • Ejecutar /root/setup

# cd

# ./setup

Armarse de paciencia porque tarda mucho. A mi me tardó como 1 hora.

Ojo que si se duermen, hay un momento en el que el setup pide la password de admin. Si no la ponen en un tiempo (que no se cuál es), el instalador sale por timeout y la instalación sigue. De esta forma, la password de admin queda desconfigurada.

Si todo funciona, una vez que el instalador termine, levantarán todos los servicios y se podrá acceder a la consola de QRadar apuntando el browser a:

https://<IP_de_la_VM_de_QRadar_CE>/

Si no lograron configurar la password de admin y ya están en este estado, lo mejor es:

Entrar a la consola por ssh.

# ssh -l root <IP_de_la_VM_de_QRadar_CE>

# /opt/qradar/support/changePasswd.sh

Cambian la contraseña y ya pueden entrar.

Si todo funciona, les recomiendo hacer un snapshot de la VM en este estado, porque si son como yo, seguro instalando cosas la van a romper y volver a este punto cuesta trabajo. Para eso:

Se conectan a la consola de QRadar via ssh y le dan:

# shutdown now

Proxmox permite hacer snapshots de las VMs vivas, pero como en cualquier otro sistema de virtualización, es mucho más limpio hacer un snapshot con la VM apagada.

  • Van a la interfase de Proxmox.
  • Seleccionan la VM
  • Van “Snapshots

  • Y hacen clic en “Take Snapshot“.

Ahora si, QRadarCE ya está listo para jugar, experimentar y romper. Que lo disfruten!!!

Hasta la próxima!

 

 

Nota por Carlos Benitez

Carlos Benitez es un reconocido experto en seguridad de la información.
Jailbreak con Ra1nUSB (que funciona!)

Jailbreak con Ra1nUSB (que funciona!)

Cómo hacer un jailbreak con checkra1n, sin necesidad de una Mac ni de instalar nada en la PC, pero que sí funciona

Los amantes del iPhone y del jailbreak, se enteraron hace 4 meses del descubrimiento de checkm8, una vulnerabilidad de hardware del iPhone desde los modelos 4S (con chip A5) hasta los 8 y X (con el chip A11). Como esta vulnerabilidad está en la SecureROM, es decir en el mismo hardware, no importa qué versión de iOS tenga el iPhone, es posible jailbreakearlo.

Pequeña historia

Desde la publicación de la vulnerabilidad, hubo que esperar a noviembre de 2019 para que apareciera checkra1n, la tool que permite hacer el jailbreak del iPhone. El problema con el checkra1n es que se necesita una Mac para ejecutarlo. Para simplificar la razón de esto, se puede decir que la forma en la que la Mac maneja los dispositivos USB, es la misma que la del iPhone. Entonces, interceptar el manejo de la interfaz USB en modo DFU en el iPhone desde una Mac, no digamos que es trivial, pero sí que es relativamente simple para gente como Luca Todesco (@qwertyoruiopz).

Sin embargo, hacer el mismo manejo de los drivers USB con una PC (sea desde Windows o desde Linux) es muy complejo tal como dice el equipo de checkra1n:

Q: When is Windows support coming?
A: We need to write a kernel driver to support Windows (which is a very complex piece of code!) which will take time. Rest assured however, we are working hard on it.

 

Variantes

Por esta razón, mientras la comunidad espera que checkra1n esté listo para Windows o Linux, se iniciaron varios proyectos para poder correrlo desde una PC emulando a la Mac. Entre ellos están:
Los primeros dos, son (excelentes) formas de crear Mac virtuales dentro de una PC, tanto con Linux como con Windows. Ambos métodos implican la instalación en la PC de una Mac vistualizada. Los probé a ambos y no me funcionó ninguno.

Pruebas

El problema que tuve al probar estas opciones fue el hardware. Como la clave del exploit de checkm8 reside en la forma en que se maneja el stack de USB mientras el iPhone bootea en modo DFU, es muy importante que el hardware que se use pueda tomar ventaja de esto, pero desde una Mac virtualizada dentro de otro sistema operativo! Bastante complejo debido a la virtualización de hardware de una Mac dentro de una PC.

La lista de equipos donde probé estas variantes es:
  1. Desktop Dell Optiplex 3060 con Ubuntu,
  2. All-in-one Lenovo Thinkcentre a70Z con Xubuntu,
  3. Notebook Vaio  con Mint
  4. Notebook Dell Inspiron 15 Serie 7000 con Ubuntu.
En ninguna funcionaron las herramientas. Si bien en todas levantaron las Mac virtuales, ninguna reconoció al iPhone correcta o completamente.

Ra1nUSB

Mi siguiente paso fue probar con Ra1nUSB. Esta versión tiene a ventaja de que se bootea el virtualizador de Mac desde un pendrive, por lo que nos evita tener que instalar nada en la PC. Además, elimina varios elementos intermedios del sistema operativo entre el hardware y la Mac.

Bajé varias versiones de Ra1nUSB, traté de bootear en todas las máquinas anteriores y en ninguna ni siquiera booteó. En todas se quedó trabado en la carga de com.apple.xpc.launchd; es decir, en las X de MAc, que en Mac se llaman xpc. Entonces me di cuenta que el problema de Ra1nUSB no era el exploit en sí mismo sino el Clover.

Clover

Clover es un bootloader GUI de Mac tanto para UEFI como para BIOS. Posee mil opciones preconfiguradas para que reconozca el hardware en el que está y pueda bootear un MacOS. Si bien me funcionaron casi todas las versiones de Clover  que me bajé sobre los sistemas virtualizados, no funcionó ninguna de estas como parte del booteo del pendrive con Ra1nUSB.
Busqué en muchos foros y encontré que esto les pasaba a muchos y casi nadie les respondía nada y los que lo hacían respondían esas tonterías como “conseguite una Mac” o peores, como “para qué querés jailbreakear el iPhone?”.
Finalmente, antes de empezar a buscar quién me podía prestar una Mac, y basado en este blog de reddit, usé una combinación que funcionó perfecta.

Los pasos que hice para que funcionara fueron estos:

1- Bajar el RainUSB desde aquí.

2- Flashear el pendrive con Balena Etcher.

3- Bajar esta versión de Clover.

4- Montar el pendrive. Dentro hay 2 particiones: Ra1nUSB y RA1NUSBBOOT.

5- Entrar en RA1NUSBBOOT y reemplazar el directorio /RA1NUSBBOOT/EFI/CLOVER

por el dierctorio /Clover del Clover.zip que se bajó en 3.

 

El resto de los pasos son los que están en todos los tutoriales, pero se los dejo:

6- Deshabilitar todas estas opciones de la BIOS del equipo:

  • VT-D
  • EL SerialPort
  • SecureBoot
  • Stack Network
  • Fastboot
  • Wake on LAN

7- Bootear el sistema con el pendrive.

8- Una vez que bootea Clover, elegir “Boot macOS Install from Ra1nUSB”. Si bootea correctamente, aparecerá una pantalla com esta:

Si no bootea, puede ser porque el equipo es muy viejo o alguna de las opciones de la BIOS del punto 5 no fue correctamente configurada.

9- Aparece el instalador de MacOS con un indicador de que se está ejecutando Ra1nUSB:

10- Ir al menú superior y seleccionar Utilities y luego Terminal. Aparecerá una terminal de comandos.

11- En la terminal ingresar el comando ra1nusb y dar Enter. Aparecerá la ventana de checkra1n.

12- Conectar el iPhone, y en la ventana de checkra1n aparecerá el modelo del iPhone conectado:

 

13- Dar Start y seguir las instrucciones de la pantalla para bootear el iPhone en modo DFU.

Listo! Una vez que botee, aparecerá el ícono de chechra1n…

 

que permite instalar cydia…

Espero que les sirva.
Hasta la próxima!

 

 

Nota por Carlos Benitez

Carlos Benitez es un reconocido experto en seguridad de la información.
Prototipo portátil WiFi basado en RPi – Parte 8 (final)

Prototipo portátil WiFi basado en RPi – Parte 8 (final)

 

Parte 8

 

Haciéndola funcionar…:

Para hacerla funcionar, se puede elegir cualquier sistema operativo para RPi que soporte el touch screen display. Yo usé Raspbian.

  • Bajé la imagen de Raspbian desde el sitio oficial.
  • Usé Balena Etcher para grabar la imagen en la mirco SIM.
  • Y modifiqué el archivo /boot/config.txt para que tome el display en forma vertical:

core_freq=250
dtparam=audio=on
framebuffer_width=480
framebuffer_height=800
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0

display_rotate=1 90
enable_uart=1

Una vez que está todo conectado, armado y con la microSIM configurada, simplemente se enciende el prototipo presionando el botón.

 

Video 1 – Prototipo funcionando.

Dado que se cuenta con 3 dispositivos WiFi, mediante el teclado se puede conectar el equipo a cualquier red WiFi.

 

Si se desea acceder remotamente, simplemente se debe ejecutar en el prototipo, en una ventana de terminal:

# raspi-config

y una vez adentro, configurar el acceso vía ssh y/o VNC. A partir de ese momento, es posible conectarse a la dirección IP del dispositivo por cualquiera de los dos protocolos.

 

Armamos este dispositivo para desarrollar un producto en particular, por eso las 3 interfaces WiFi. Sin embargo, se pueden probar otras variantes. Lo interesante es que es posible construir un dispositivo portátil basado en una Raspberry Pi, 100% utilizable, reduciendo drásticamente el tamaño de componentes comerciales.

Espero que les sirva. Nos vemos la próxima…

 

Nota por Carlos Benitez y Juan Carlos Ferro

 

Carlos Benitez es un reconocido experto en seguridad de la información.
Prototipo portátil WiFi basado en RPi – Parte 8 (final)

Prototipo portátil WiFi basado en RPi – Parte 7

 

Parte 7

 

Uniendo todas las piezas:

 

Para el montaje del dispositivo dentro de un gabinete, se han diseñado e impreso varias piezas en una impresora 3D. Las partes se pueden descargar desde aquí. En la siguiente foto se muestran todas ellos.

Fig 46 – Partes del gabinete del proyecto.

 

Ahora es el momento de ensamblar todo. El primer paso es poner el botón dentro de la botonera. Más tarde, se debe colocar el botón de manera que pueda quedar en su posición correcta:

Fig 47 – Ubicación del botón.

 

A continuación, necesitamos conectar el display a la motherboard de la RPi mediante el cable plano HDMI y el micro USB que lleva la alimentación y la información del touchscreen como entrada.

Fig 48 – Conección del display a la RPi.

 

Primero se debe colocar la pantalla táctil, para que la superficie de la pantalla quede alineada con la del gabinete:

Fig 49 – Display ubicado en su lugar.

 

Se imprimió una lámina separadora para evitar cortocircuitos entre las partes en contacto dentro del prototipo.

 

Fig 50 – Lámina separadora a ser ubicada.

 

Fig 51 – Lámina separadora instalada.

 

Más tarde, la RPi y la UPS se deben plegar por los cables e insertar los orificios en los pines internos de la caja. Se debe enchufar la batería y colocar el botón en el asiento.

Fig 52 – Todos los componentes en su lugar.

Finalmente, se coloca la tapa trasera y se cierra la el gabinete. El gabinete tiene dos ranuras, una para la tarjeta SD:

Fig 53 – Ranura para insertar la memoria micro SD.

 

y el otro, para el adaptador de la fuente de alimentación.

 

Fig 54 – Orificio para el adaptador de la fuente de alimentación.

 

 

En la siguiente sección, mostramos el prototipo funcionando.

 

< Parte 6: Haciendo más espacioParte 8: Haciéndola funcionar >

 

Nota por Carlos Benitez y Juan Carlos Ferro

 

Carlos Benitez es un reconocido experto en seguridad de la información.