Discussione PDF Parser basato sulle API di VirusTotal

Stato
Discussione chiusa ad ulteriori risposte.

inforge-user001

Utente Jade
28 Marzo 2020
557
61
2,292
732
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
 
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")
 
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.
 
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.
 
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 --- Ra ---
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 :)
 
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
 
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.
 
Bravo, trasforma lo script in un mini-antivirus, è facile
"if malicious
os.remove("infected.pdf")"

Se il file PDF è nella stessa folder dello script non c'è nemmeno bisogno di specificare il Path
 
  • Grazie
Reazioni: inforge-user001
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: inforge-user001
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: inforge-user001
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?
 
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.
 
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.
 
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.
 
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
 
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
 
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
 
Stato
Discussione chiusa ad ulteriori risposte.