We need access to Linux tools to be able to analyser firmware and work with hardware. Some of these tools are already in Kali Linux, but many are absent or out-of-date. Because of this, I prefer using Ubuntu. Ideally, we would be using the latest version (20.04), but binwalk is not supported yet.
To VM or not VM
I generally prefer working inside a virtual machine. Being able to quickly reinstall the OS and take snapshots are huge advantages.
However, you’ll need to accept some issues. USB passthrough is not perfect. You’ll get very used to power cycling USB devices to get them to work correctly. I still can’t get full USB3.0 speed on a passthrough port, hence things like the Saleae Logic get used with my host OS.
Main machine or not?
When you are working with hardware, there is always the chance that you damage your machine. This could range from breaking one USB port to wiping out the entire machine. This said, for work on low-voltage devices, I have not had anything worse than a broken USB port.
If you are careless or your main machine is extremely high value, consider using a secondary machine.
USB isolators are available, but they are not affordable for USB3.0.
If we need genuine isolation (e.g. working on mains equipment), a Raspberry Pi and a network connection are a an effective way of keeping safe. Do not work on mains equipment without suitable training.
VM Software
I personally use VMWare Workstation. It mostly works, though you do need to pay.
I have had mixed experiences with VirtualBox, often finding USB performance abysmal. Ensure you install the VirtualBox Extension Pack to get USB 3.0 support.
I have not used Parallels on OSX enough to say much.
VM Settings
I would suggest:
- 4-8GB of RAM
- 40-80GB of disk space – this might seem excessive, but toolchains and firmware unpacking quickly eat it
- Enable USB 3.0 or 3.1 in the settings – both VMWare and VirtualBox simply fail to work with USB 3.0 devices otherwise
- Allow a means of Internet access, most likely NAT – this is for software updates
Getting up and running
You will likely get prompted to upgrade to 20.04 LTS. Decline this.
First, update and upgrade the system.
sudo apt update && sudo apt upgrade
Next, we want to install some tools that help us build software for the machine we are working on.
sudo apt install git build-essential cmake autogen m4
Ubuntu does not come with Python 2.7, and some tools still rely on it:
sudo apt install python
Followed by some common libraries that are used for building tools like flashrom and stlink.
sudo apt install libpci-dev libusb-dev libusb-1.0-0-dev libftdi-dev linux-headers-generic
Some tools that are best install from apt rather than built.
sudo apt install net-tools nmap wireshark hexdiff wget curl hydra minicom meld
And if you want to work with ARM targets:
sudo apt install gcc-arm-none-eabi gdb-multiarch
With these, you should have the packages required to get a lot of software built and a lot of tasks carried out.