Forensic tool release: archlinux-userland-fs-cmp (reproducible pre-compiled binary available)

kpcyrd kpcyrd at archlinux.org
Wed Jan 31 20:50:25 UTC 2024


hello,

I released a tool recently that I'd like to share with this list:

https://github.com/kpcyrd/archlinux-userland-fs-cmp

It's supposed to be used from a rescue image (any Linux) with an Arch 
install mounted to e.g. /mnt. It does the following:

- Open /mnt/var/lib/pacman and extract the list of (allegedly) installed 
packages.
- Instead of trusting the `mtree` files from the mounted file system, 
the %NAME% and %VERSION% values from the `desc` files are used to start 
a download stream from archive.archlinux.org.
- From the download stream it's decompressing and inspecting the content 
on-the-fly, since the .MTREE file is near the beginning of the package 
we can abort the remaining package download after the mtree has been 
received (saving a lot of time and traffic).
- All files in /mnt that are part of a package are hashed and compared 
with the sha256 hashes in the MTREE files downloaded from the archive.
- Finally, it's printing a report of all files that either mismatched or 
are not a part of any package. This can be redirected to a file using 
the -o flag.

At no point is any file from the mounted filesystem eval'd or otherwise 
executed. Parsers are written in a memory safe language.

Although it's integrating with pacman, the integration with 
archive.archlinux.org makes this Arch Linux specific, files from AUR, 
Manjaro or SteamOS packages are all going to be flagged for manual 
inspection.

The authenticity of the .MTREE files is assumed through the https 
connection they are downloaded from (which is supposed to be sufficient 
for the use-case it's built for).

The release page on github has a pre-compiled, statically linked binary 
that can trivially be reproduced from source code. The dependency tree 
is documented in Cargo.lock, the build environment is documented in 
repro-env.lock. The binary has been tested to be working correctly on a 
Debian bookworm installer busybox rescue shell.

There's a gif in the README showing how the tool looks like in action.

---

I also printed reproducible builds stickers with a new and unique design 
that I'm planning to hand out at FOSDEM (along with some 37c3 
leftovers), if you have read this far, feel free to ask me about 
stickers if you see me there. The print cost geht auf mein Nacken.

cheers,
kpcyrd


More information about the rb-general mailing list