Na początek skonfigurujmy środowisko eksploatacji oparte na QEMU, ukierunkowane na uproszczone jądro (5.14.17) i prosty moduł jądra, który został celowo uczyniony podatnym na ataki, aby zademonstrować proces omijania wielu mechanizmów wykonawczych jądra GNU/Linux i łagodzenia zagrożeń w czasie kompilacji. Eksploatacja jądra może być nieco irytująca w porównaniu do eksploatacji binarnej w środowisku użytkownika, ponieważ debugowanie jest nieco uciążliwe, a każda nieudana próba eksploatacji spowoduje panikę jądra i będzie wymagała ponownego uruchomienia całego systemu. Użyjemy QEMU do emulacji systemu operacyjnego, a także do ułatwienia pisania i debugowania eksploitów. Złożoność każdego laboratorium będzie przechodzić od prostej, bezpośredniej eksploatacji do zaawansowanych kroków obejścia łagodzenia, ilustrując postępy poczynione przez programistów systemu operacyjnego w celu uczynienia eksploatacji jądra coraz trudniejszą, ale nie niemożliwą. Najpierw zainstaluj QEMU, uruchamiając następujące polecenia w powłoce roota:
Następnie w folderze ~/GHHv6/ch12 znajdziesz plik skryptu powłoki, który uruchamia cel eksploatacji QEMU skonfigurowany przy użyciu opcji łagodzenia odpowiadających każdemu laboratorium:
- run1.sh Niestandardowe jądro Linux z wyłączonym Stack Canaries i podatnym modułem jądra bez włączonych zabezpieczeń przed eksploatacją, nadające się do wykorzystania prostej techniki ret2usr. Poprowadzi nas to przez podstawy eksploatacji eskalacji uprawnień, co pomoże nam zrozumieć rozumowanie stojące za każdą ochroną przed eksploatacją i poprawą bezpieczeństwa jądra na przestrzeni lat.
- run2.sh W tym laboratorium uruchamiany jest ten sam moduł jądra, ale jądro zostało skompilowane ponownie, aby umożliwić ochronę przed eksploatacją Stack Canaries.
- run3.sh Ochrona przed eksploatacją Stack Canaries, SMEP i KPTI
- run4.sh Ochrona przed eksploatacją Stack Canaries, SMEP, KPTI i SMAP
- run5.sh Ochrona przed eksploatacją Stack Canaries, SMEP, KPTI, SMAP i KASLR
UWAGA: Te skrypty zakładają, że sklonowałeś repozytorium GitHub do /home/kali/GHHv6. Jeśli sklonowałeś je do innego katalogu, będziesz musiał ręcznie zaktualizować każdy z plików .sh. Aby uprościć proces udostępniania plików między gościem a hostem, niestandardowe jądro jest kompilowane przy użyciu protokołu Plan 9 Filesystem Protocol z obsługą modułu transportowego VIRTIO. QEMU automatycznie zamontuje udostępniony folder w katalogu domowym użytkownika. W tym udostępnionym folderze możesz również znaleźć ukończone exploity dla każdego laboratorium przedstawionego w tym rozdziale. Oto kilka innych ważnych plików, które są dostarczane:
- ~/GHHv6/ch12/stackprotector-disabled/bzImage To jest skompresowany obraz jądra z wyłączonym STACKPROTECTOR (StackCanaries) dla pierwszego laboratorium.
- ~/GHHv6/ch12/bzImage Skompresowany obraz jądra z włączonym STACKPROTECTOR (StackCanaries).
- vmlinux To nieskompresowany bzImage, który pomaga uprościć proces debugowania, ponieważ dostarcza symbole debugowania. Jeśli musisz go wyodrębnić, najłatwiejszym sposobem jest pobranie skryptu extract-vmlinux1 znajdującego się w katalogu skryptów drzewa jądra.
• initramfs.cpio To jest główny system plików