USB Armory

From Embedded Lab Vienna for IoT & Security
Jump to navigation Jump to search


Launched in 2014, USB Armory is a small and portable USB-sized personal computer created by Andrea Barisani [1]. Originally intended to be produced as a secure data store, USB Armory became a versatile device used as a full-scale computer for developing, running different applications, storing information safely, and testing security. With its hardware sufficient as a computer, it can be configured on an installed Linux system that boots and thus powers up when plugged into any computer, for example, so that data not only ends up on an encrypted partition but is automatically re-encrypted when transferred. USB Armory uses many security features that are responsible for encrypting and decrypting data, using different hashing functions and unique keys. With the USB Armory, software, and hardware will be secured. [2] .


There are currently two versions of USB Armory:

  • USB Armory MK I.
  • USB Armory MK II.

USB Armory MK II was developed after some design and security issues in the USB Armory MK I were detected.

USB Armory MK I Hardware

  • NXP i.MX53 ARM® Cortex™-A8 800MHz, 512MB DDR3 RAM
  • USB host powered (<500 mA) device with compact form factor (65 x 19 x 6 mm)
  • ARM® TrustZone®, secure boot + storage + RAM
  • microSD card slot
  • 5-pin breakout header with GPIOs and UART
  • customizable LED, including secure mode detection
  • excellent native support (Android, Debian, Ubuntu, Arch Linux)
  • USB device emulation (CDC Ethernet, mass storage, HID, etc.)
  • Open Hardware & Software [4]

USB Armory MK II Hardware

  • NXP i.MX6UL/i.MX6ULZ ARM® Cortex™-A7 900MHz, 512MB/1GB DDR3 RAM
  • USB host powered (<500 mA) device with compact form factor (65 x 19 x 6 mm)
  • ARM® TrustZone®, secure boot + storage + RAM
  • Secure elements Microchip ATECC608A and NXP A71CH
  • Internal 16GB eMMC + external microSD
  • U-blox ANNA-B112 Bluetooth module
  • Bebug accessory support for UART, GPIO, SPI, I²C, CAN breakout
  • Customizable LEDs, including secure mode detection
  • Supported by vanilla Linux kernels and distros
  • USB device emulation (CDC Ethernet, mass storage, HID, etc.)
  • Open Hardware & Software [5]


  • Native Linux support – creating boot images is easy
  • Precompiled images are available for Debian 9 (Stretch) and Arch Linux, with more on the way
  • USB device emulation (CDC Ethernet, mass storage, HID, etc.) [6]

How to connect

  • HS USB 2.0 On-The-Go (OTG) with device emulation
  • TCP/IP communication via CDC Ethernet emulation
  • flash drive functionality via mass storage device emulation
  • serial communication over USB or physical UART
  • stand-alone mode with dedicated host adapter [7]

Scopes Of Application

  • Hardware Security Module (HSM)
  • File storage with advanced features such as automatic encryption, virus scanning, host authentication, and data self-destruct using Interlock.
  • OpenSSH client and agent for untrusted hosts (kiosk).
  • Router for end-to-end VPN tunneling, Tor.
  • Password manager with an integrated web server using Armory Pass.
  • Electronic wallet (e.g. pocket Bitcoin wallet) using Electrum Bitcoin wallet.
  • Authentication token.
  • Portable penetration testing platform.
  • USB Firewall.
  • Low level USB security testing [8].

Getting Started

Boot Mechanisms

For USB Armory to work in a certain operating system, either the microSD card is inserted. [9]:

USB Armory has a valid Pre-Image file for each operating system on its own page. Optionally, booting can be done either manually or by downloading the appropriate file and flashing the microSD card (before it is inserted into the USB Armory) with balenaEtcher software.


You can find the following Pre-Image files at this link:

Available images [10]

flash the microSD

You can download the following software here: After downloading Balena, insert the MicroSD in the computer and flash the downloaded pre-image.

Flash OS images to SD cards & USB drives, safely and easily [11]

Insert the microSD

After flashing the microSD insert the microSD into USB Armory and after plugging it in, the USB Armory will start to blink twice every second.

Host communication

Since the booted microSD card is ready in the operating system, Host communication can be started [12]. On Linux devices or VM with Linux:

# look up the name of the USB virtual Ethernet interface which was created by the USB Armory
# bring the USB virtual Ethernet interface up
/sbin/ip link set usb0 up
# set the host IP address
/sbin/ip addr add dev usb0
# enable masquerading for outgoing connections towards wireless interface
/sbin/iptables -t nat -A POSTROUTING -s -o wlan0 -j MASQUERADE
# enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
#connect to USB Armory via ssh - password: USB armory
ssh usbarmory@

Armory Pass

Armory Pass is a password manager for USB Armory, that function as a web-based password manager. It works by simulating a button click on the website and after "clicking the button" the password will be written in the password field.[13]. To configure it:

On The USB Armory:

1. Clone Armory Pass from:

2. Download Python2 since Armory Pass works only with Python2:

  .) sudo apt install paython2

3. Install PIP:

  .) curl --output get-
  .) sudo python2

4. Install Cherrypy:

  .) pip install cherrypy

5. Install Websocket: Ws4py

  .) git clone
  .) python2 install
  .) pip install ws4py
  .) easy_install ws4py

6. Edit the file "Background.js" by changing the IP address to

7. Change the Permissions for the files "Background.js" and "manifest.js".

8. Add the websites and your Passwords to "Password_store.js".

9. Run "" and "secret.js" file will be created.

  .) python2


1. Clone Armory Pass from:

2. Download Google Chrome since Armory pass works only with chrome extension:

  .) wget
  .) sudo apt install ./google-chrome-stable_current_amd64.deb
  .) sudo apt install google-chrome-stable

3. Create "secret.js" and copy the contents from the "secret.js" on the USB Armory and paste it into the locale "secret.js".

4. Edit the permissions locally as on the USB Armory.

5. Edit "Background.js" and add the IP address

6. Add Armory Pass Extension to Chrome and open the page you want to write your password on. 7. Simulate clicking the button:

  .) python2


  • Ledger: develops hardware to secure crypto assets by ensuring the end user’s private keys are safe from theft.
  • TREZOR: is an open-source bitcoin wallet.
  • Nitrokey: This USB device offers an open source and open hardware design that is developed for email encryption, storing encrypted data, encrypting hard disk and files, managing keys and certificates, and server administration with SSH.
  • Wookey: This project is fully open source and open hardware is working on prototyping a secure and trusted USB storage device with data encryption and secure firmware update with secure boot[14].

Hardware Used

USB armory + Enclosure


  1. Andrea Barisani. Forging the USB armory,,2014.
  2. NXP Community, Introducing USB armory, an Open Source Hardware Freescale i.MX53 Dongle ,, 2014
  4. Inverse Path, Hardware,
  5. Inverse Path, Hardware,
  6. Andrea Barisani, MK II Introduction,
  7. Inverse Path, How to Connect,
  8. Inverse Path, Applications,
  9. Getting started,
  10. Andrea Barisani, Available images,
  11. balenaEtcher,
  12. Andrea Barisani, Setup & Connection Sharing: Linux ,
  13. Armory Pass
  14. Jeremy Lefaure. Wookey: Usb devices strike back.