
Esempi educativi che portano vulnerabilità del kernel Linux a Rust, con codice ed exploit intenzionalmente vulnerabili per apprendere la sicurezza del kernel e la sicurezza di Rust.
Questo repository di codice sorgente è una raccolta di esempi che accompagnano il post del blog all'indirizzo https://research.nccgroup.com/?p=18577.
NON UTILIZZARE questi esempi per nulla che non sia seguire il post del blog. Contengono intenzionalmente vulnerabilità, e anche le versioni "corrette" potrebbero contenere bug.
Se desideri eseguire gli esempi del post del blog, le seguenti linee guida dovrebbero, si spera, rendere tutto più semplice.
Ottieni il codice sorgente di Rust for Linux. Potresti dover installare alcune dipendenze elencate in [https://github.com/Rust-for-Linux/linux/blob/rust/Documentation/rust/quick-start.rst](the quick start page) .
git clone https://github.com/Rust-for-Linux/linux rust-for-linux
cd rust-for-linux
git checkout bd123471269354fdd504b65b1f1fe5167cb555fc # latest commit at the point of writing
Ottieni virtme. Potresti anche dover installare QEMU e alcune altre dipendenze.
git clone https://github.com/amluto/virtme
Trovo virtme davvero utile per testare rapidamente una modifica nel kernel principale o in un modulo del kernel.
Compila il kernel di base su cui girerà la maggior parte degli esempi:
cd rust-for-linux
mkdir `pwd`.out
cp ../rustproofing-linux/configs/config-base `pwd`.out/.config
KBUILD_OUTPUT=`pwd`.out make -j$(nproc) LLVM=1
E le varianti con opzioni di configurazione leggermente diverse:
mkdir `pwd`.out.ovf
cp `pwd`.out/.config `pwd`.out.ovf
scripts/config --file `pwd`.out.ovf/.config -d CONFIG_RUST_OVERFLOW_CHECKS
KBUILD_OUTPUT=`pwd`.out.ovf make -j$(nproc) LLVM=1
mkdir `pwd`.out.stackinit
cp `pwd`.out/.config `pwd`.out.stackinit
scripts/config --file `pwd`.out.stackinit/.config -e CONFIG_INIT_STACK_ALL_ZERO
KBUILD_OUTPUT=`pwd`.out.stackinit make -j$(nproc) LLVM=1
Usa il seguente comando per avviare il kernel compilato all'interno di QEMU:
../virtme/virtme-run --kdir `pwd`.out --show-command --show-boot-console --mods=auto -a "kasan_multi_shot" --qemu-opts -cpu core2duo -m 1G -smp 2
Modifica l'opzione --kdir quando devi eseguire gli altri due kernel.
I moduli vengono quindi compilati con il seguente comando. Nota che KDIR deve puntare alla directory con il kernel compilato e che dovrai ricompilare per ../rust-for-linux.out.stackinit e ../rust-for-linux.out.ovf quando testi esempi che richiedono kernel compilati in modo diverso.
cd ../rustproofing-linux
make LLVM=1 KDIR=../rust-for-linux.out
I moduli vengono caricati e gli exploit proof-of-concept vengono eseguiti con l'aiuto dello script test.sh. Gli esempi si trovano nel post del blog.