
PlayStation 5のFreeBSDカーネルの脆弱性を対象としたC++エクスプロイトの信頼性実験。VMでのカーネルビルドとGDBリモートデバッグ環境のセットアップを含む。
このバグは2020年12月上旬に発見された。発見者は私ではなく、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 を実行する。
VM上でビルドすること。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
https://github.com/weltling/convey https://github.com/jstarks/npiperelay
#!/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