
Avast Shell interattiva JavaScript
NOTA: Il 03/11/2020 Avast ha annunciato di aver deciso di disabilitare globalmente questo interprete!
Il processo principale di Avast Antivirus si chiama AvastSvc.exe, che viene eseguito come SYSTEM.

Questo servizio carica il motore antivirus di basso livello e analizza i dati non attendibili ricevuti da fonti come il minifilter del filesystem o il traffico di rete intercettato.
Nonostante sia altamente privilegiato e processi input non attendibili per progettazione, non è isolato in sandbox e ha una copertura di mitigazione scarsa. Qualsiasi vulnerabilità in questo processo è critica e facilmente accessibile ad attaccanti remoti.
Quindi.. forse non è fantastico che includa un interprete JavaScript personalizzato....???? 🙃

Questo repository contiene una shell interattiva che permette di testare l'interprete su Linux per la ricerca di vulnerabilità.
Ecco come provarlo, prima installa le dipendenze.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
Ora puoi clonare questo repository.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Se tutto sembra a posto, compila e avscript dovrebbe essere pronto.
$ make
Per ragioni di prestazioni, Avast non interpreta ogni file JavaScript che
incontra, ma usa un'euristica per determinare se è necessario. Ho scoperto che
aggiungere il file javascript.txt incluso in questo repository è sufficiente per
attivare sempre l'euristica.
Ad esempio, se hai trovato una vulnerabilità e vuoi riprodurla su Windows, dovresti prima fare questo:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Ora verifica che faccia ancora quello che ti aspetti, ad es.
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Poi verifica che il crash si sia riprodotto su Windows.
Il servizio Avast è un processo protetto, il che significa che eseguirne il debug da spazio utente è complicato. Se hai kd configurato, puoi semplicemente annullare questo e poi il debug nello spazio utente funziona bene.
Una soluzione rapida e semplice che funziona su 32-bit è fare questo (nota che PatchGuard non lo permette su x64, ma puoi fare qualcosa di simile con comandi di breakpoint).

C'è anche un'impostazione sotto "Risoluzione dei problemi" chiamata "Abilita autodifesa"
che dovrebbe essere disabilitata. Credo che questa impostazione disabiliti l'hooking di OpenProcess()
nell'SSDT, dove normalmente mettono in blacklist il proprio processo.
Potrebbe essere necessario disabilitare temporaneamente "scudi" nell'interfaccia di Avast mentre ti colleghi in modo che le operazioni del filesystem non si blocchino mentre il servizio è sospeso.
Avast non pubblica simboli per il suo motore, ma il debug con IDA o gdb è ancora possibile. Ci sono alcune note sul debug di codice Windows da Linux in la documentazione di loadlibrary.
Se vuoi usare IDA, raccomando di usare il backend gdbserver.
Semplicemente usa qualcosa del genere, potresti aver bisogno di installare il pacchetto gdbserver prima:
$ gdbserver 0.0.0.0:23946 ./avscript
Funziona sorprendentemente bene, anche i breakpoint pseudocode funzionano.

Se trovi una vulnerabilità, è probabile che sia critica e sfruttabile per worm.
🔥 Per favore segnalala urgentemente. 🔥