Discussione PDF Parser basato sulle API di VirusTotal

aleff-inforge

Utente Jade
28 Marzo 2020
549
60
1,867
672
Ho deciso di condividere con voi la mia ultima repository contenente uno script in Python che, da linea di comando, ti permette di verificare se un documento PDF risulta malevolo o meno. Questo parser di PDF è basato sulle API di VirusTotal e volevo chiedervi quale funzionalità aggiuntiva potrebbe avere senso implementare.

Repository: https://github.com/aleff-github/PDF-Parser-VirusTotal-Based

Esempio di output nel terminale:
terminal verbose.png

Esempio di output nel file di log:

log file.png




#python #github #virustotal
 

Access Denied

Utente Emerald
17 Gennaio 2022
329
90
221
467
Oppure crei una quarantena, simulando un comportamento più realistico

#Questo cambia l'estensione da pdf a bin, rendendo il malware innoquo
import os
import shutil
my_file = 'malicious.pdf'
base = os.path.splitext(my_file)[0]
os.rename(my_file, base + '.bin')

#crea una folder per spostarci il file automaticamente
os.mkdir(Quarantena)
shutil.move("malicious.bin", "Quarantena/malicious.bin")
 

Access Denied

Utente Emerald
17 Gennaio 2022
329
90
221
467
Comunque io so che virustotal non si limita a restituire solo i risultati delle scansioni, io so che mostra statistiche molto più avanzate in altre sezioni dopo che gli fai analizzare un file. Ti riporta dettagli utili come l'IP Address chiamato dal payload (se presente, se in whitelist o in blacklist) oppure le system calls. Per inserire queste funzioni ausiliari nel tuo tool ti basta anche fargli leakare i link di queste stats su terminal, uno ci clicca e se li va a vedere dettagliatamente sul sito. Non so potresti implementare anche un simple web crawler in py per farglieli leakare , se ne trovano a bizzeffe di sample su Git, è un tool di recon utilissimo sia ad attaccanti che difensori
 
  • Grazie
Reazioni: aleff-inforge

0xGhost

Helper
22 Febbraio 2022
409
37
295
253
Ultima modifica da un moderatore:
Potresti fare anche una flag che vada a prendere tutti i file .pdf partendo dalla home dell'user o da un altra directory specificata dall'utente in tutte le subdir ed esaminarli, esempio:
Python:
import os

all_pdf        = []
home_user    = os.environ["USERPROFILE"]
# Se non sbaglio questa var corrisponde alla
# home dell'utente, i.e C:\users\whoami, su Linux/MacOs usa os.environ["HOME"]

for folder, subfolder, files in os.walk():
    for file in files:
        if file.endswith(".pdf"):
            all_pdf.append(os.path.join(folder, file))

print(all_pdf)
La programmazione non è il mio forte e questo è un codice riciclato di questa estate ahaha, potresti enumerarli tutti poi chiedere all'utente se scansiornali o no.
btw potresti usare argparse per prendere argomenti dalla linea di comando oltre che a sys.
 
  • Mi piace
Reazioni: aleff-inforge

CrazyMonk

Utente Gold
24 Dicembre 2021
567
15
313
232
Mi piace l'idea dello script, hai fatto un ottimo lavoro. Il consiglio che mi sento di dare io, invece, è di migliorare un dettaglio riguardante l'usabilità dello script. Dovresti cercare un modo per evitare che l'utente scriva a mano tutto quel papiro della API Key (ossia il codice che passi con il parametro "-A"). Magari potresti chiedere all'utente di inserirla solo una volta e poi creare la persistenza di quella variabile nella memoria: così ogni volta che l'utente vorrà riutilizzare il tool non dovrà riscriverla.
 

0xGhost

Helper
22 Febbraio 2022
409
37
295
253
Mi piace l'idea dello script, hai fatto un ottimo lavoro. Il consiglio che mi sento di dare io, invece, è di migliorare un dettaglio riguardante l'usabilità dello script. Dovresti cercare un modo per evitare che l'utente scriva a mano tutto quel papiro della API Key (ossia il codice che passi con il parametro "-A"). Magari potresti chiedere all'utente di inserirla solo una volta e poi creare la persistenza di quella variabile nella memoria: così ogni volta che l'utente vorrà riutilizzare il tool non dovrà riscriverla.
Potrebbe creare un file nascosto contenente quella API, e poi leggere il file per prenderla nel caso, oppure ci sono metodi più intelligenti?
 

JunkCoder

Moderatore
5 Giugno 2020
1,222
23
1,065
508
Potresti fare anche una flag che vada a prendere tutti i file .pdf partendo dalla home dell'user o da un altra directory specificata dall'utente in tutte le subdir ed esaminarli, esempio:
Python:
import os

all_pdf        = []
home_user    = os.environ["USERPROFILE"]
# Se non sbaglio questa var corrisponde alla
# home dell'utente, i.e C:\users\whoami, su Linux/MacOs usa os.environ["HOME"]

for folder, subfolder, files in os.walk():
    for file in files:
        if file.endswith(".pdf"):
            all_pdf.append(os.path.join(folder, file))

print(all_pdf)
La programmazione non è il mio forte e questo è un codice riciclato di questa estate ahaha, potresti enumerarli tutti poi chiedere all'utente se scansiornali o no.
btw potresti usare argparse per prendere argomenti dalla linea di comando oltre che a sys.

Lo script è utile per esaminare rapidamente un file sospetto ma non è una grande idea usarlo indiscriminatamente su tutti i tuoi file perché una volta che finiscono su virustotal saranno pubblici. Tra quei pdf potresti avere qualcosa che non vorresti condividere come scansioni di documenti, referti medici ecc.
 

0xGhost

Helper
22 Febbraio 2022
409
37
295
253
Lo script è utile per esaminare rapidamente un file sospetto ma non è una grande idea usarlo indiscriminatamente su tutti i tuoi file perché una volta che finiscono su virustotal saranno pubblici. Tra quei pdf potresti avere qualcosa che non vorresti condividere come scansioni di documenti, referti medici ecc.
Non avevo pensato a questo dettaglio, mea culpa.
 

Access Denied

Utente Emerald
17 Gennaio 2022
329
90
221
467
Lo script è utile per esaminare rapidamente un file sospetto ma non è una grande idea usarlo indiscriminatamente su tutti i tuoi file perché una volta che finiscono su virustotal saranno pubblici. Tra quei pdf potresti avere qualcosa che non vorresti condividere come scansioni di documenti, referti medici ecc.
Ma quindi se carico il mio CV su virustotal mi assumono? No scherzone, fine off-topic
 
  • Mi piace
  • Geniale
Reazioni: 0xbro e CrazyMonk

CrazyMonk

Utente Gold
24 Dicembre 2021
567
15
313
232
Potrebbe creare un file nascosto contenente quella API, e poi leggere il file per prenderla nel caso, oppure ci sono metodi più intelligenti?
Si, potrebbe essere una soluzione. Adesso, sinceramente, non mi vengono in mente altri modi furbi per farlo. Si potrebbe prelevare l'Api da Virus Total dopo avere inserito le credenziali da linea di comando ed averle passate al sito, ma perderebbe di usabilità anche in questo caso e forse sarebbe anche poco sicuro.
 

0xbro

Super Moderatore
24 Febbraio 2017
4,232
166
3,305
1,645
Si, potrebbe essere una soluzione. Adesso, sinceramente, non mi vengono in mente altri modi furbi per farlo. Si potrebbe prelevare l'Api da Virus Total dopo avere inserito le credenziali da linea di comando ed averle passate al sito, ma perderebbe di usabilità anche in questo caso e forse sarebbe anche poco sicuro.
Secondo me il compromesso migliore è quello di andare a leggere un file di configurazione e far inserire in quel file l'API-key, soprattutto perchè inserire un segreto da riga di comando non è mai una buona idea, questo viene salvato nella history e (per quanto la scenario sia poco probabile) potrebbe essere letto da occhi indiscreti. Se crei un file di configurazione e lo proteggi propriamente, sventi a monte il rischio :)
 

CrazyMonk

Utente Gold
24 Dicembre 2021
567
15
313
232
Secondo me il compromesso migliore è quello di andare a leggere un file di configurazione e far inserire in quel file l'API-key, soprattutto perchè inserire un segreto da riga di comando non è mai una buona idea, questo viene salvato nella history e (per quanto la scenario sia poco probabile) potrebbe essere letto da occhi indiscreti. Se crei un file di configurazione e lo proteggi propriamente, sventi a monte il rischio :)
Si questa sarebbe la soluzione di @ghost141 alla fine
 
  • Mi piace
Reazioni: 0xbro e 0xGhost

aleff-inforge

Utente Jade
28 Marzo 2020
549
60
1,867
672
Grazie a tutti per aver risposto, mi avete dato ottimi spunti per proseguire :)

Per quanto riguarda linux posso salvare il file dentro ~/.config, ma per quanto riguarda Windows e MacOS? Esistono cartelle simili? Probabilmente per MacOS è uguale ma non avendone mai avuto uno non ne ho idea.
 

aleff-inforge

Utente Jade
28 Marzo 2020
549
60
1,867
672
Ultima modifica:
Aggiornamento in tempo reale... al momento è pronto solo per linux.
@czonta96 ad occhio immagino che questa cartella (C:/AppData/Local/temp) venga svuotata... esiste qualcosa di persistente? ammesso che questa non lo sia.
1669734912032.png
 

aleff-inforge

Utente Jade
28 Marzo 2020
549
60
1,867
672
Ultima modifica:
Why, Se é perché python é interpretato e su Windows non é installato di default basta che crei l'eseguibile con PyInstaller e lo aggiungi alla repo, o per qualche altro motivo(?)
no no semplicemente per la questione dei percorsi che chiedevo a @czonta96

Update: Aggiornamenti caricati sulla repo
 

JunkCoder

Moderatore
5 Giugno 2020
1,222
23
1,065
508
Per Windows puoi usare la cartella AppData, è l'equivalente di .config. Puoi accedervi tramite env var %APPDATA% oppure tramite percorso completo: C:\Users\NomeUtente\AppData\Roaming, in questa cartella puoi creare file o cartelle e stare tranquillo che non vengano svuotati. Windows non svuota nemmeno temp però altri programmi lo fanno, quindi AppData è più safe.
 

Access Denied

Utente Emerald
17 Gennaio 2022
329
90
221
467
Ultima modifica:
Non serve proteggersi con VirusTotal quando lanci un semplice bruteforce su SMB 445 e ottieni questo risultato ( 10 login riusciti con username Administrator e admin come pass) @ghost141 @JunkCoder @0xbro OMEGALUL
(censurati in bianco gli indirizzi IP presi da Shodan) * Mi correggo, la scansione è andata avanti e ne ha trovati circa 50, tutti con le stesse credenziali. Ma questi sono matti?

Untitled.png