Facedancer board lets your Python programs pretend to be USB hardware

This is the prototype board for [Travis Goodspeed's] new USB development tool called the Facedancer. He took on the design with USB security exploits in mind, but we think it’s got a lot of potential for plain old development as well.

Kudos on the [Frank Herbert] reference when naming the project. Like the characters from the Dune mythology that can perfectly mimic any person they touch, this device let’s you mimic whatever you can imagine. One the USB ports connects to the victim (or host) the other connects to a development machine. Python can then be used to send USB commands in real time. Think of this as doing the same thing the Bus Pirate does for SPI and i2c, except that it’s doing it on the USB protocol itself. This way you can feel your way through all of the road-bumps of developing a new device (or testing an exploit) without the need to continually compile and flash your hardware.

Comments

  1. SDC says:

    It wasn’t named after the song by The Who?

  2. Willrandship says:

    wait, I’m confused. How is it pretending to be hardware when it is hardware?

    I expected some terminal screenshots, not a circuit board :P I can think of several reasons to want python-based software-emulated USB. One is actually to add a fake HID so my sister can finally have a middle-click button on her laptop :P

    • ColinB says:

      Basically one PC, the “victim” or “host” is presented with this Freedancer board — the Freedancer emulates ANY other USB device for the “host”. The other PC is used to support Python scripting for the high-level control of the Freedancer.

  3. Erik Johansson says:

    Well you should be able to do this without hardware, or is there some limitation in libusb interaction with kernels?

    • fuzzyfuzzyfungus says:

      Given that the designer of the device is doing security/exploit work, I imagine that being able to poke the entire USB system(including the specific chipset and chipset driver) and being able to test any USB host device, regardless of OS cooperation, would be necessary features only available with a hardware device.

    • Pun says:

      Also, you can’t just assume that the hardware on the ‘victim’ end is a linux box, or anything you have full software-level control over. It could be a smartphone or a game console, for example.

  4. J1D says:

    I’ve been thinking on it for years, but for a very limited purpose: providing network storage to a device that only accepts USB storage (a cheap set top box, for instance).
    Thanks to Travis.

  5. Xatru says:

    I’ve been build one a few days ago. Since that I did some experiments on different targets. Windows, Linux, FreeBSD and many other operating systems can be targeted. It’s quite easy if you familar with Python. If you need help to build one up, let me know on my Blog.

  6. srock says:

    Anyone tried plugging both USB ports on the board into the same machine and using VirtualBox to control the device while using the host OS as the ‘victim’?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 96,534 other followers