03 aprile 2021

Installare e usare Volatility3 su Ubuntu

Introduzione

In questo articolo vedremo come installare ed usare volatility3 su Ubuntu 20.04. Il problema maggiore è rappresentato dalla configuraizione del profilo del Kernel. Gli step saranno i seguenti:

  • Scaricare volatility3 e dwarf2json da github
  • Installare go e compilare dwarf2json
  • Installare i repository per il pacchetto dei simoboli del kernel
  • Scaricare il pacchetto dei simoli del kernel e lime via apt
  • Creare il profilo per volatility con dwarf2json
  • Fare il dump della ram con lime

Scaricare e installare tutto il necessario

Adesso scarichiamo Volatility3 e dwarf2json da github:

$ mkdir ~/forensics ; cd ~/forensics
$ git clone https://github.com/volatilityfoundation/volatility3
$ git clone https://github.com/volatilityfoundation/dwarf2json

installiamo go necessario per compilare dwarf2json

$ sudo snap install go --classic
$ cd dwarf2json && go build

Installiamo il pacchetto per i simboli di debug del kernel

Per prima cosa creiamo il file source list che contiene gli url dove andare a pescare i pacchetti di debug:

$ echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" | \
sudo tee -a /etc/apt/sources.list.d/ddebs.list

Ora installiamo le chiavi per la verifica delle firme dei pacchetti e poi aggiorniamo il db dei repo

$ sudo apt install ubuntu-dbgsym-keyring
$ sudo apt update

Quindi installiamo il pacchetto coi simboli e poi installiamo lime

$ sudo apt install "linux-image-`uname -r`-dbgsym"
$ sudo apt install lime-forensics-dkms


Creiamo il profilo per volatility3

A questo punto dobbiamo usare dwarf2json per creare il file del profilo da spostare

$ cd dwarf2json
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-`uname -r` --system-map /boot/System.map-`uname -r` | xz -c >> linux.json.xz

Ora spostiamo il json.xz sotto la cartella dei simboli di volatility3.

$ mv linux.json.xz ~/forensics/volatility3/volatility3/symbols/linux/linux-image-`uname -r`.json.xz

Usiamo Lime per fare il dump della ram

A questo punto il più è fatto. Ci basta caricare il modulo lime per il kernel e quindi effettuare il dump su file della ram.

$ sudo modprobe lime path=/home/kernel format=lime digest=sha256

Usiamo volatility3

Ok, abbiamo finito, ora possiamo usare volatility per estrarre la lista dei processi presente al momento del dump

# ./vol.py -f /home/kernel linux.check_syscall.Check_syscall
Table Address Table Name Index Handler Address Handler Symbol
0xffff984013a0 64bit 0 0xffff976ca7b0 __x64_sys_read
0xffff984013a0 64bit 1 0xffff976ca8d0 __x64_sys_write
0xffff984013a0 64bit 2 0xffff976c6480 __x64_sys_open
..........................
0xffff984023e0 32bit 405 0xffff97532c10 __ia32_sys_clock_adjtime
0xffff984023e0 32bit 406 0xffff97530f60 __ia32_sys_clock_getres
0xffff984023e0 32bit 407 0xffff97530d70 __ia32_sys_clock_nanosleep
0xffff984023e0 32bit 408 0xffff97530bd0 __ia32_sys_timer_gettime


Proviamo AVML by microsoft per il dump della ram.

In alternativa a lime possiamo usare avml di Microsoft. Si tratta di un tools opensource prodotto da microsoft.

$ sudo apt-get install musl-dev musl-tools musl
$ snap install rustup --classic
$ cd ~/forensics
$ git clone https://github.com/microsoft/avml.git
$ cd avml
$ curl https://sh.rustup.rs -sSf | sh -s -- -y
$ rustup target add x86_64-unknown-linux-musl
$ cargo build --release --target x86_64-unknown-linux-musl
$ cd target/x86_64-unknown-linux-musl/release
$ sudo ./avml ~/forensics/ram_dump.avml