
Uno strumento utilizzato per cacciare vulnerabilità nei driver WDM x64
Presentato al CODE BLUE 2023, questo progetto intitolato Enhanced Vulnerability Hunting in WDM Drivers with Symbolic Execution and Taint Analysis introduce IOCTLance, uno strumento che migliora la capacità di rilevare vari tipi di vulnerabilità nei driver Windows Driver Model (WDM). In una valutazione completa che ha coinvolto 104 driver WDM noti vulnerabili e 328 sconosciuti, IOCTLance ha scoperto con successo 117 vulnerabilità precedentemente non identificate in 26 driver distinti. Di conseguenza, sono state segnalate 41 CVE, comprendenti 25 casi di denial of service, 5 casi di controllo degli accessi insufficiente e 11 esempi di elevazione dei privilegi.
docker build .
docker run -it <IOCTLance IMAGE ID> bash
dpkg --add-architecture i386
apt-get update
apt-get install git build-essential python3 python3-pip python3-dev htop vim sudo \
openjdk-8-jdk zlib1g:i386 libtinfo5:i386 libstdc++6:i386 libgcc1:i386 \
libc6:i386 libssl-dev nasm binutils-multiarch qtdeclarative5-dev libpixman-1-dev \
libglib2.0-dev debian-archive-keyring debootstrap libtool libreadline-dev cmake \
libffi-dev libxslt1-dev libxml2-dev
pip install angr==9.2.18 ipython==8.5.0 ipdb==0.13.9
# python3 analysis/ioctlance.py -h
usage: ioctlance.py [-h] [-i IOCTLCODE] [-T TOTAL_TIMEOUT] [-t TIMEOUT] [-l LENGTH] [-b BOUND]
[-g GLOBAL_VAR] [-a ADDRESS] [-e EXCLUDE] [-o] [-r] [-c] [-d]
path
positional arguments:
path percorso della directory (incluse le sottodirectory) o del file verso il/i driver da analizzare
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
-i IOCTLCODE, --ioctlcode IOCTLCODE
analizza il IoControlCode specificato (es. 22201c)
-T TOTAL_TIMEOUT, --total_timeout TOTAL_TIMEOUT
timeout totale per l'intera esecuzione simbolica (default 1200, 0 per illimitato)
-t TIMEOUT, --timeout TIMEOUT
timeout per analizzare ogni IoControlCode (default 40, 0 per illimitato)
-l LENGTH, --length LENGTH
il limite del numero di istruzioni per la tecnica LengthLimiter (default 0, 0 per illimitato)
-b BOUND, --bound BOUND
il limite per la tecnica LoopSeer (default 0, 0 per illimitato)
-g GLOBAL_VAR, --global_var GLOBAL_VAR
quanti byte nella sezione .data rendere simbolici (default 0 hex)
-a ADDRESS, --address ADDRESS
indirizzo del gestore ioctl per avviare direttamente la caccia con stato vuoto (es. 140005c20)
-e EXCLUDE, --exclude EXCLUDE
escludi indirizzi di funzione separati da , (es. 140005c20,140006c20)
-o, --overwrite sovrascrivi x.sys.json se x.sys è già stato analizzato (default False)
-r, --recursion non terminare lo stato se viene rilevata ricorsione (default False)
-c, --complete ottieni lo stato di base completo (default False)
-d, --debug stampa informazioni di debug durante l'analisi (default False)
# python3 evaluation/statistics.py -h
usage: statistics.py [-h] [-w] path
positional arguments:
path percorso della directory o file di destinazione
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
-w, --wdm copia i driver wdm in <path>/wdm