From e07de9d0e81465b2fb24d0c426e75e62a7dafbda Mon Sep 17 00:00:00 2001 From: Adam Olech Date: Mon, 27 Nov 2023 01:57:31 +0100 Subject: [PATCH] Add README --- .github/qemu-startup.png | Bin 0 -> 24458 bytes README.md | 57 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 .github/qemu-startup.png create mode 100644 README.md diff --git a/.github/qemu-startup.png b/.github/qemu-startup.png new file mode 100644 index 0000000000000000000000000000000000000000..0567f6992829b94d61093b6f52ab799efa289d6a GIT binary patch literal 24458 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..351385a --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# unikraft-dropbear + +This is a port of [dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html), a small SSH suite, for [Unikraft](https://github.com/unikraft/unikraft). +Currently the app part and the library part is not separated and they both live in this repository. +For now this port only focuses on running the server part. + +![Startup process in QEMU](./github/qemu-startup.png) + +## Building the image + +In order to build the image, you need a reasonably recent `gcc` compiler, `flex` and `bison` tools, `wget`, `python3` and `unzip`. + +The build process involves selecting a `defconfig`. +Before starting the build process, you need to select a `defconfig`. +This can be done by running `UK_DEFCONFIG=$(pwd)/defconfigs/qemu-x86_64 make defconfig`. +Afterward you can run `make`. + +If you're feeling lazy, there's a CI pipeline that builds the image for each push event. + +## Running the image + +The minimal QEMU invocation for running the image may look as follows: +```sh +qemu-system-x86_64 -kernel build/unikraft-dropbear_qemu-x86_64 -no-shutdown +``` +The `-no-shutdown` parameter is useful for debugging, should the application crash. +Do note that this invocation will not set up networking so it is of little use for anything more than a smoke test. + +An opinionated startup script is provided that can be used to "interrogate" the application using an SSH client on the host operating system. +Before running the script, make sure to set up the virtual network on the host operating system: +1. `sudo tunctl -t tap0 -u \`whoami\`` (this makes it possible to run the VM without elevated privileges) +2. `sudo ip addr add 172.44.0.1/24 dev tap0` +3. `sudo ip link set dev tap0 up` + +Then, run `./dropbear-qemu-x86_64.sh`. +The application will generate the host keys and kick off the server. + +## Limitations + +Currently the only useful feature that works is local port forwarding. +Below is a non-exhaustive list of what **does not** work: +* the server runs in a non-forking mode -- it accepts and serves only one connection at a time. + * at the moment it actually requires a restart as it runs the main function only once. +* PTY allocation always fails as (unsurprisingly) Unikraft does not implement pseudo-terminals. + * therefore, always use the `-N` parameter when connecting using `ssh` so as not to request the PTY. + +As you can see it is definitely not suited for production use. +However, it's a nice experiment that proves that it works. + +## Why? + +Why not? +I've always thought that the way we run bastion hosts was a little bit of an overkill. +You had `n` systems that you had to manage and keep keep them up-to-date. +With the bastion host entering the equation, you now have `n+1` of them. + +If this gets to the stage where it has achieved feature-parity, performance and the security level known from traditional \*nix bastion hosts, I'll happily use it for accessing SSH hosts sitting behind a NAT.