Home Homebrew Il team fail0verflow scende nuovamente in campo con la scoperta e il...

Il team fail0verflow scende nuovamente in campo con la scoperta e il debug di un exploit in FreeBSD

163
0

Il team fail0verflow presenta un vecchio bug nel sistema FreeBSD scoperto nel 2020 da un genio dell’informatica di cui non si conosce il nome, trovandolo in soli 15 minuti.

In seguito a questa scoperta, è stato sviluppato un codice in C++ per migliorare l’affidabilità degli exploit, poiché il kernel della PlayStation 5 aveva introdotto funzioni di randomizzazione della memoria.

Per lavorare sul bug, è necessario configurare una macchina virtuale (VM) con FreeBSD 11.0. L’immagine della VM può essere scaricata da un archivio online, e SSH deve essere abilitato sulla VM aggiungendo un utente e modificando il file di configurazione per avviare il servizio SSH.

Per ricostruire il kernel con il supporto per il debug, è necessario lavorare direttamente sulla VM, poiché la versione 11.0 di FreeBSD non è compatibile con sistemi non-FreeBSD.

Il kernel viene ricostruito rimuovendo l’opzione DDB e aggiungendo l’opzione GDB nella configurazione. Dopo aver compilato e installato il kernel, la macchina viene riavviata e il file di debug del kernel viene estratto per essere utilizzato con GDB.

Il passo successivo è impostare GDB per eseguire il debug del kernel. Il codice sorgente del kernel FreeBSD viene clonato e GDB viene ricompilato con supporto per FreeBSD.

Una volta completata questa operazione, si può avviare il debug del kernel collegandosi alla macchina virtuale, utilizzando le opzioni personalizzate per GDB per rendere il processo di debugging più efficiente e gestibile.

Di seguito tutti i passaggi descritti all’interno della repository:

  • Configurazione della macchina virtuale (VM):
    • Ottenere l’immagine della VM:
      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
    • Abilitare SSH: Nella VM, aggiungere un utente con il comando adduser, poi aggiungere sshd_enable="YES" al file /etc/rc.conf e avviare SSH con il comando /etc/rc.d/sshd start.
  • Ricostruzione del kernel con debug:
    • Compilare sulla VM, poiché il sistema di build di FreeBSD non è compatibile con sistemi non-FreeBSD (la compatibilità è stata aggiunta con le versioni FreeBSD 12/13, ma qui serve la versione 11).
    • Consultare la guida ufficiale oppure procedere come segue:
      • Spostarsi nella directory del kernel:
        cd /usr/src/sys/amd64/conf
      • Copiare la configurazione GENERIC:
        cp GENERIC /root/CONFIG
      • Creare un collegamento simbolico:
        ln -s /root/CONFIG
      • Modificare il file CONFIG per rimuovere l’opzione DDB e aggiungere l’opzione GDB.
  • Compilazione e installazione:
    • Compilare il kernel con:
      cd /src/src make buildkernel KERNCONF=CONFIG
    • Installare il kernel:
      make installkernel KERNCONF=CONFIG
    • Riavviare la VM.
    • Copiare il file di debug kernel.debug da /usr/obj/usr/src/sys/CONFIG/ fuori dalla VM per utilizzarlo con GDB.
  • Configurazione di GDB:
    • Ottenere il codice sorgente del kernel per la navigazione e per GDB:
      git clone -b releng/11.0 https://github.com/freebsd/freebsd.git
    • Compilare GDB con supporto FreeBSD:
      • Scaricare l’ultima versione di GDB da:
        https://ftp.gnu.org/gnu/gdb/
        e decomprimere l’archivio.
      • Creare una directory di build e accedere:
        mkdir build && cd build
      • Configurare GDB:
        ../configure --disable-binutils --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof --target=x86_64-unknown-freebsd
      • Compilare GDB:
        make -j64
  • Miglioramento di GDB:
    • Utilizzare gdb-dashboard per migliorare l’esperienza di debug.
  • File .gdbinit per il kernel FreeBSD:
    • Configurare il file .gdbinit per il kernel:
      • Impostare il percorso sostitutivo:
        set substitute-path /usr/src /home/shawn/freebsd
      • Impostare lo stile di disassemblaggio:
        set disassembly-flavor intel
      • Specificare il file di debug del kernel:
        file kernel.debug
      • Collegare GDB alla VM:
        target remote /tmp/fbsd11
  • Interop con WSL:
  • Script per avviare GDB:
    • Creare uno script shell per avviare GDB in modo flessibile:
#!/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

Avvio di GDB:

  • Nella VM, eseguire il comando per avviare il debug del kernel:
    sysctl debug.kdb.enter=1

Download: Source code ps5-umtxdbg

Fonte: twitter.com

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.