
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, /etc/rc.conf에 sshd_enable="YES" 추가, /etc/rc.d/sshd start
VM 안에서 빌드하세요. freebsd 빌드 시스템은 non-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
gdb에서 사용할 수 있도록 /usr/obj/usr/src/sys/CONFIG/kernel.debug를 VM 밖으로 복사하세요.
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