That's awesome you're trying to learn offensive security.
Hyper-V on Windows (including Windows 11/Pro on ARM) does not offer true, “plug-the-USB-stick-directly-into-the-guest” passthrough for Linux VMs. In other words, you cannot simply attach a USB device into a Kali Linux guest the way you might on VMware or VirtualBox. Instead, you have to work around Hyper-V’s limitations. Here are the most common approaches:
- Expose the USB drive as a VHD(X) and attach it to the VM
If your goal is simply to read/write files on a USB storage device (pendrive, external HDD, SSD, etc.), you can convert the physical USB disk into a VHD(X) that the Linux VM can mount natively:
On the Windows host, plug in the USB device and note its Disk # (e.g. Disk 2) via Disk Management (diskmgmt.msc
).
Run disk2vhd
(Sysinternals) or Win32DiskImager
/dd
(if you have a Linux live environment) to capture that entire physical USB volume into a VHD(X) file.
Example with Sysinternals Disk2vhd:
powershell
Copy
# Download Disk2vhd from Microsoft and run as Administrator
disk2vhd.exe \\.\PhysicalDrive2 C:\VMdisks\usbdrive.vhdx
In Hyper-V Manager, go to your Kali VM → Settings → “SCSI Controller” (or “IDE Controller”) → “Hard Drive” → “Add” → Browse → select the newly created usbdrive.vhdx
.
Boot (or reboot) Kali. The USB contents now appear as a normal block device (/dev/sdb
or similar). You can mount /dev/sdb1 /mnt/usb
(or use Gnome/KDE file-manager) to see the files.
This workaround gives you a point-in-time snapshot of the USB. If you need to write back to the real USB stick, you’d have to repeat the process (or copy files out of the VM back to some shared location and then copy them manually to the USB on the host).
- Share the USB volume via a network share (SMB/SFTP)
If you only need to transfer files between host ↔ guest, you can:
Mount the USB drive on the host (it shows up as E:\
or F:\
in File Explorer).
Create a small SMB share pointing at that USB folder (e.g. share E:\
as \\HOSTNAME\UsbShare
).
In Windows Explorer, right-click the USB drive → Properties → Sharing → Advanced Sharing → check “Share this folder.”
Inside Kali Linux, mount that share via CIFS:
bash
Copy
sudo apt update && sudo apt install cifs-utils
# (use your actual host’s name or IP, and provide valid Windows credentials)
sudo mkdir /mnt/usbshare
sudo mount -t cifs //HOSTNAME/UsbShare /mnt/usbshare \
-o vers=3.0,username=YourWindowsUser,password=YourWindowsPassword
Now /mnt/usbshare/
in Kali points at your USB contents on the host. You can read/write files back and forth without ever trying to do a raw USB passthrough.
When you’re done, sudo umount /mnt/usbshare
.
- Use USB-over-IP (usbip) or a third-party USB-over-network tool
If you must present the USB device at a raw/PCI/“device” level (for example, a Wi-Fi adapter that you need to put into monitor mode or certain USB-based hack tools), then consider USB-over-IP:
On the Linux side (Kali VM): Kali has a usbip
client built in ― you can install the usbip
package:
bash
Copy
sudo apt update && sudo apt install usbip
On the Windows ARM host: Microsoft does not ship a native ARM64 usbipd
service out of the box for Windows 11/ARM. You can try one of two paths:
Compile or use a community‐built USBIP Windows driver for ARM64. Some GitHub projects (e.g. “usbip-windows” repo) provide scripts to build an ARM64 USBIP driver, but it can be tricky and not fully stable on ARM-based Surface Pro.
**Use a third-party USB-over-Ethernet solution** (e.g., VirtualHere, USB Network Gate, FlexiHub). These tools install a Windows service on your host that “shares” the USB device over the network. The Kali VM then runs a corresponding client that attaches to a “virtual USB port” over TCP/IP. In practice:
Install the server component on Windows. Plug the USB device in; the service will show “Device X” as sharable.
Install the client component inside Kali (Debian/Ubuntu packages are usually provided).
Use the client GUI/CLI to attach the remote USB device; it then appears inside Kali as if it were plugged in directly. VirtualHere is one of the most commonly cited tools for Hyper-V VMs. They have an ARM64 Windows server program you can install, and a Linux client package you can add to Kali.
Note: USBIP or third-party tools often come with licensing or performance caveats; they can work, but sometimes they’re not 100% stable for advanced USB functionality (e.g., certain Wi-Fi adapters in monitor mode).
- RDP/Enhanced Session (only for Windows Guests)
Just as a point of reference: Hyper-V’s “Enhanced Session Mode” (which lets you redirect USB drives, USB printers, smart cards, etc.) is available only for Windows guests—not Linux. So you cannot RDP into a Kali VM and “redirect local USB” that way. That option only works if the guest OS is Windows and the Hyper-V Integration Services/Enhanced Session components are installed in the VM.
- Use an alternative hypervisor or a separate device
Because you’re on a Surface Pro 11 ARM, your hypervisor choices are limited (Hyper-V is basically the only built-in one). If USB passthrough is absolutely critical (for example, a wireless-Pineapple-style adapter or a HackRF SDR, etc.), you might:
Install Kali Linux natively on a USB-boot or SD-card rather than in a VM. Then you get real USB ports from day one.
Use another (x64) laptop or desktop for your Kali VM so that VirtualBox, VMware Workstation, or even Hyper-V on x64 can handle USB passthrough more gracefully.
Use a USB-Ethernet gadget (e.g., a USB-to-Ethernet “network-enabled dongle”). Plug it into the host and share it via bridged networking. Kali sees it as a network device instead of a USB device. For Wi-Fi hardware you need, you could buy a USB Wi-Fi that also supports “AP mode over network” or a USB Ethernet adapter, depending on your lab requirements.
TL;DR
Hyper-V on Windows ARM does not support direct USB re-mapping into a Linux guest.
If all you need is file access:
Mount the USB on Windows → share it via SMB → mount that SMB share inside Kali.
Or use `disk2vhd` to turn the USB into a VHD(X) and attach that VHD to the VM.
If you need low-level USB hardware (Wi-Fi, SDR, specialized dongle):
Try a USB-over-IP solution (e.g. VirtualHere or USBIP if you can get an ARM64 Windows driver).
Fallback: move to x64 hardware or do a native Kali install on USB/SD so you can plug in natively.
Pick the approach that fits your lab exercise. In most “labs” where you just need to copy payloads or test USB-stick exploits, mounting the USB on the host and then simply sharing it via SMB (or converting it to a VHD) is by far the easiest way. If you truly need raw USB device controls, you’ll need USB-over-network or different hardware.