Hardened BliKVM

Open-source KVM over IP for the BliKVM v4

Hardened BliKVM is a security-focused IP-KVM firmware for the BliKVM v4 (Allwinner H616). Control a computer's keyboard, mouse and screen from a browser, down to the BIOS, mount ISO images, press its power and reset buttons, from a desktop or a phone. The backend is written in Rust; the web interface is React and TypeScript.

Beta · 0.1.0-beta.10 · GPL-3.0-only · BliKVM v4 (Allwinner H616)
Hardened BliKVM web interface: the remote computer's desktop under the toolbar in a browser

Features

A KVM-over-IP stack that replaces the vendor's KVMD services on the board with sandboxed Rust services and a web interface derived from Hardened NanoKVM.

Remote keyboard and mouse

Absolute and relative mouse, a touch layout for phones with an on-screen keyboard and a row of extra keys. Remote control is taken by the first click, tap or key after a confirmation.

H.264, VP8 and MJPEG video

H.264 encoded by the H616's video engine or by x264, VP8 with libvpx, over WebRTC; or the capture's MJPEG. The encoders work only while someone watches.

QUIC and WebTransport

An optional transport on UDP 443 for the keyboard, the mouse and the H.264 picture, with the bitrate fitted to the narrowest path; a lost session reopens without dropping control.

Sharp upscaling

Where the browser draws with a GPU, a picture shown larger than its size is drawn sharply (deringing and SGSR 1), with a watchdog that turns it off where frames are lost.

Virtual media

Mount an ISO as a CD-ROM or a disk image as USB mass storage, upload images or download them from a URL.

ATX power control

Power and reset buttons of the target computer, short and long press, and Wake-on-LAN.

Windows target agent

An optional agent knows the target's monitors and keyboard layouts, keeps the mouse on the captured monitor, switches layouts, passes clipboard text both ways and locks the session.

Quality monitor

Speed, delay, frames a second, codec and bitrate over the picture, and in its extended level the transport's, the encoder's and the decoder's numbers.

Network and firewall

IPv4, IPv6, DNS, Wi-Fi, TLS, Tailscale, and a firewall with four modes whose changes roll back by themselves unless confirmed.

Signed updates

Signed application slots with health checks and automatic rollback, and signed RAW system updates that keep the board's accounts, keys and settings.

Features off until wanted

Web terminal, scripts, remote ISO download, PicoClaw and RAW updates stay off until switched on; each switch is enforced below the web server.

Phone friendly

The screen as a trackpad, pinch to zoom, the extra keys and the settings on a phone's whole screen.

Screenshots

Anonymized: documentation addresses, made-up names and a drawn stand-in for the target's screen. Every menu and settings page is in docs/screenshots.md.

On a phone

Hardened BliKVM on a phone in portrait
Portrait.
Hardened BliKVM on a phone in landscape
Landscape, the screen as a trackpad.
Phone with the row of extra keys
The row of extra keys: Shift, Ctrl, Alt, Win, Del, Esc, arrows.

Security model

The vendor's KVMD services are masked; each process below runs as its own systemd unit with a sandbox and only the rights it needs.

ProcessRuns asWhat it does
nginxroot, workers as www-dataTLS on TCP 443 in front of the web server, reached through a Unix socket that serves nginx alone
bli-kvm-serverits own user, from the active signed slotlogin, sessions, the API and its policy, the web interface, WebRTC signalling; no device access of its own
board ownerrootthe USB gadget, the ATX lines, network and firewall changes, the feature switches; it takes only fixed, typed requests
video encoders, Janusdynamic usersH.264 and VP8 while someone watches; WebRTC media only
QUIC gatewayits own userQUIC and TLS on UDP 443 while its switch is on; it holds no authority of its own
update supervisorits own userverifies, stages and activates signed slots, checks their health and rolls back

The design notes, the audits and what was shown on the test board are in the repository: docs/design, docs/baselines and docs/security-boundaries.md.

Install on a BliKVM v4

The image needs a microSD card of at least 32 GB. Check the download against SHA256SUMS from the release first.

  1. Write the card. Linux or macOS:
    zstd -dc hardened-blikvm-h616-sd.img.zst | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
    Windows: unpack with zstd -d, then write the .img with balenaEtcher or Rufus.
  2. Insert the card, connect Ethernet and power the board. The first boot creates the board's own SSH host keys, TLS certificate and identifiers; it takes about a minute.
  3. Open https://<board address>/ and create the administrator account in First Setup, on a trusted network. The password you choose also becomes root's password for SSH.

A board that already runs Hardened BliKVM is updated from Settings > Update with the signed application bundle and the signed RAW system update of the release; the release notes say how.

FAQ

Which hardware does it run on?

The BliKVM v4 with the Allwinner H616. Everything was verified on one board.

Is it a PiKVM or NanoKVM alternative?

It is an IP-KVM firmware for the BliKVM v4 hardware, with a web interface derived from Hardened NanoKVM. It is not affiliated with BliKVM, PiKVM or Sipeed.

Which browsers work?

It was tried with Chrome, Edge and Firefox on a desktop and Chrome on Android. QUIC needs WebTransport; where a browser has none, the standard transport (HTTPS, WebSocket, WebRTC) is used.

Is it finished?

It is a beta. Each release lists what was checked and its known limitations; report what you find in the issues.

What licence?

GPL-3.0-only. Third-party components keep their own licences, listed in the repository.