
Эксперименты по отработке надёжности эксплойта на C++ для уязвимости ядра FreeBSD в PlayStation 5, со сборками ядра в виртуальной машине и настройкой удалённой отладки GDB.
Уязвимость была найдена в начале декабря 2020 года не мной, а гением, который взглянул на fbsd на 15 минут и сразу же её обнаружил 🙇♂️. Эта реализация на C++ появилась в ходе экспериментов по повышению надёжности эксплойта после того, как ядро PS5 добавило некоторые функции рандомизации кучи.
wget http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/VM-IMAGES/11.0-RELEASE/amd64/Latest/FreeBSD-11.0-RELEASE-amd64.vhd.xz
в vm: adduser, добавьте sshd_enable="YES" в /etc/rc.conf, /etc/rc.d/sshd start
собирайте НА ВМ, потому что система сборки freebsd несовместима с системами, отличными от freebsd (они включили совместимость примерно в fbsd 12/13, а нам нужна 11...)
см. https://docs.freebsd.org/en/books/handbook/kernelconfig/ или просто:
cd /usr/src/sys/amd64/conf
cp GENERIC /root/CONFIG
ln -s /root/CONFIG
отредактируйте CONFIG, чтобы удалить options DDB и добавить options GDB
сборка и установка:
cd /src/src
make buildkernel KERNCONF=CONFIG
make installkernel KERNCONF=CONFIG
reboot
скопируйте /usr/obj/usr/src/sys/CONFIG/kernel.debug из vm для использования с gdb.
git clone -b releng/11.0 https://github.com/freebsd/freebsd.git
скачайте последнюю версию с https://ftp.gnu.org/gnu/gdb/ и распакуйте
mkdir build
cd build
../configure --disable-binutils --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --target=x86_64-unknown-freebsd
make -j64
используйте https://github.com/cyrus-and/gdb-dashboard
set substitute-path /usr/src /home/shawn/freebsd
set disassembly-flavor intel
file kernel.debug
target remote /tmp/fbsd11
#!/bin/sh
GDB_PATH=/home/shawn/gdb-10.1/build/gdb
PATH=$GDB_PATH:$PATH
gdb --data-directory=/home/shawn/gdb-10.1/build/gdb/data-directory
в vm:
sysctl debug.kdb.enter=1