Newsgroup: it.comp.sicurezza.varie
Titolo: Allegato con estensione jpg.vbs !

Qualche bountempone mi ha inviato un messaggio e-mail con allegato un file
con estensione jpg.vbs, sperando che, in un momento di disattenzione, io
potessi cliccare ed attivare il programmino scritto in VBScript.
Per opportuna cultura generale vi allego la parte di codice leggibile che ho
estratto da tale allegato:
Function CNN5A95E(HKDV8745,L088IPG2)
For QP6TRNU0 = 1 To Len(HKDV8745)
    E73J8TQ7 = Mid(HKDV8745, QP6TRNU0, 1)
    If E73J8TQ7 = Chr(2) Then
        E73J8TQ7 = Chr(34 + L088IPG2)
    ElseIf E73J8TQ7 = Chr(3) Then
        E73J8TQ7 = Chr(10 + L088IPG2)
    ElseIf E73J8TQ7 = Chr(4) Then
        E73J8TQ7 = Chr(13 + L088IPG2)
    Else
        E73J8TQ7 = Chr(Asc(E73J8TQ7) + L088IPG2)
    End If
    CNN5A95E = CNN5A95E & E73J8TQ7
Next
End Function
prima di questa parte leggibile vi era una parte non leggibile:
Execute
CNN5A95E("/^j{6^j{ o6Zqkwzlq(Kzmi|ml(J (^qz}{
... omissis ...
 /^j{ o(:(Jm|i6(J (cSe  ",-8)
che è il richiamo alla funzione di cui sopra con passaggio di due parametri,
uno è l'insieme dei caratteri non leggibili, l'altro è il valore
numerico -8.
Pare che il compito della funzione sia quello di trasferire, all'indirizzo
della funzione, tutto il codice del virus ( o pseudo tale) mentre il secondo
parametro, -8, serve a dare un offuscamento del codice con una semplice
cifratura.
è probabile che sia un virus ?
che ne pensate ?
Grazie in anticipo.

 immagino. 
Non credo si tratti di un eseguibile (inteso come .EXE binario) e non è 
necessario che venga salvato in un file.
L'istruzione Execute permette di eseguire del codice preso da una 
stringa (mi pare che ci sia una funzionalità simile in parecchi 
linguaggi script, anche python, ad esempio).
Probabilmente il codice qui sopra si limita ad estrarre dell'altro 
codice VBScript e a lanciarlo con la Execute. Avevo visto uno script 
simile qualche mese fa (era roba made in Colombia, non ricordo il 
nome), ma credo che sia un trucco abbastanza comune.
Per sapere cosa fa lo script è sufficiente sostituire a 'Execute' una 
MsgBox (oppure salvare il codice di ritorno della chiamata a CNN5A95E 
in una stringa e salvarla poi in un file di testo).
Probabilmente lo script si "ricripta" utilizzando una chiave e nomi 
funzione diversi in modo da non garantire una "firma" facilmente 
individuabile, anche perchè i comandi in chiaro sono tutte parole di 
uso comune in inglese.
Tra l'altro un mio collega ha avuto proprio in questi giorni problemi 
con un antivirus (mi stò informando su quale sia) che cancella parti di 
codice VBScript da dei file XML (con estensioni diverse) che aveva 
spedito in attachment a un nostro cliente. 
Questa potrebbe essere una soluzione :)
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 e' abbastanza sicuro di riconoscere questo stile.
Scusa se mi dilungo (rischiando pure di cadere nell off-topic), ma c'è 
qualcosa che non mi quadra...
Il codice postato, si limita a richiamare Execute sul codice di ritorno 
della funzione e deve quindi eseguire codice VBScript (a meno che non 
ci sia qualche bug nel runtime di VBScript che lo porta a eseguire come  
codice macchina parte della stringa passata come parametro a Execute) e 
per l'esecuzione dell'allegato sfrutta il trucco banale della doppia 
estensione. 
Quello che poi andrà a fare quel codice lo si può sapere solo  vedendo 
gli "omissis" di Antonino.
Da quello che capisco delle due funzioni di "decodifica" (quella di 
Antonino e quella che hai postato tu), il metodo è un po' diverso.
Nel tuo caso si tratta praticamente di una "decodifica" di valori 
esadecimali e può quindi essere utilizzata per estrarre tutti i 
caratteri da 0 a 255 dalla stringa "crittografata" (si presta quindi a 
scrivere un exe).
La funzione postata da Antonino, invece, non converte i caratteri ASCII 
0,1,5,6 e 7 (se richiami Chr con un valore negativo o maggiore di 255 
il runtime di VBScript da errore), visto che la "chiave" (secondo 
parametro della funzione di "codifica") sommata al codice ASCII vale, 
in questo caso, -8. 
Nel caso di un exe è quasi impossibile che non contenga nessuno 0x00, a 
meno che non ci siano nè stringhe costanti in chiaro (nel caso di 
programmi in C ci dovrebbe essere lo \0 finale, nel caso di programmi 
in deplhi viene memorizzata la lunghezza, credo a 16 bit, e quindi è 
probabile che la parte alta sia a 0, nel caso di VB le stringhe sono 
addirittura in unicode), nè costanti o risorse con almeno un byte a 0, 
nè istruzioni con codice macchina con un byte a 0.
Se così fosse, non capisco quale mente malata possa imporre vincoli 
così pesanti all'exe, quando bastava modificare leggermente il codice 
VBScript.


 della funzione e deve quindi eseguire codice VBScript (a meno
. . ed infatti è così
l'esecuzione della funzione CNN5A95E ritorna del codice VBScript (che per
ragioni di opportunità non pubblico) che esegue delle operazioni sia di
scrittura su FOS che di lettura/scrittura sul registro di sistema.
Ciao.