Infezione file eseguibili

Stato
Discussione chiusa ad ulteriori risposte.

Brolyssj4

Utente Silver
25 Novembre 2007
6
1
0
59
Mi sono sempre chiesto come facciano numerosi virus informatici a infettare i file eseguibili, e mi piacerebbe discuterne in questo topic visto che non ho mai visto una discussione del genere su questo forum.
Secondo me scrivono in delle aree di memoria libere di un determinato file eseguibile, ma a quel punto verrebbe spontaneo chiedersi: come notano se le aree sono libere?Come prendono gli indirizzi di memoria e soprattutto:una volta scritto in queste aree di memoria, come le si esegue?
Mi piacerebbe sapere le vostre opinioni su questo argomento, premetto che è una semplice discussione generale sull'argomento, non mi interessa il codice, ma solo sapere come funziona la tecnica usata da questi virus.
 
Emh...non vorrei dire boiate...ma da quello che ho letto tempo fa non è quello che fa un Buffer Overflow? CHiedo scusa in anticipo se ho detto una caxxata...
 
ShuraBozz ha detto:
fai bene a chiedere scusa

Si immaginavo...ma potresti spiegarmi meglio perchè per favore? :) Fino ad ora, mi sono interessato più di programmazione che di hacking/reversing quindi vorrei delucidazioni^^
 
[ot]ShuraBozz, la finisci con questi post inutili?[/ot]
Discussione interessante, comunque. Mi aggrego alla domanda.
 
[ot]ShuraBozz, la finisci con questi post inutili?[/ot]
putroppo onguno posta quello che meglio riesce :lol:

tornando alla domanda di Brolyssj, del tutto lecita e posta in modo civile (che ultimamente è un lusso):

un topic approfondito potrebbe diventare abbastanza lungo, prima di tutto occorre classificare i virus per tipologia
worm, trojan, virus, macro ecc
questa classificazione è solitamente fatta in base alle azioni che fanno:
un worms di solito sono virus non dannosi ma che si riproducono
un trojan è il tipico virus non si duplicano ma fanno danni
virus come i trojan ma con la variante di rendersi il piu' possibile invisibile
macro solitamente virus creati con linguaggi di script
ecc... ecc...
ovviamente ci sono tutte le combinazioni del caso: nessuno vieta che esista un virus che oltre ad avere caratteristiche trojan si moltiplichi.

ok premesso questo parliamo di alcuni modi di infezione:
un virus puo' essere un unico file, pertanto non aver infettato nessun file ma essere proprio il file stesso il virus (caso raro)
i virus per infettare usano solitamente queste tecniche:
-append
-pre-append
-replace
-cavity
-inject
-companion

Append:
il virus copia s'è stesso dopo un file eseguibile, gli header del file infetto viene modificato in modo che all'avvio prima venga eseguito il virus e poi il virus rimandera' l'esecuzione al punto originale

Pre-Append:
come prima con la sola differenza che il virus si inserisce prima del file

Replace:
il virus mastica il file e lo sostituisce con s'è stesso (tecnica vecchissima non piu' in uso in quanto troppo facilmente rintracciabile)

Tutte queste tecniche hanno l'inconveniente che il file originale aumenta o diminuisce di dimensione, e questo detta sospetti

Cavity:
il virus si autoscrive in alcuni spazi vuori di un eseguibile (naturalmente se ci sono) e modifica gli header. In questo modo la dimensione del file non cambia.

Inject:
il codice fisico non risiede in un file infetto ma viene iniettato in un processo in memoria

Companion:
sono i virus che fanno compagnia ai file, sfruttano debolezze di sistema per eseguirsi al posto di altri file per poi lanciare quello vero. Un esempio:
se tu in una cartella hai pippo.exe (file tuo) e il virus mette un pippo.com
se lanci solo "pippo" da una shell dos, il sistema operativo dara' priorità al .com, poi il virus lancera' il .exe per non destare sospetti.
------------
i virus hanno convenienza a non alterare le funzionalità dei file per fare in modo che il sistema continui a funzionare ma "alimentando" le funzioni del virus il piu' a lungo possibile e rendendo piu' difficile scovarli.

Poi per aggiungere un pizzico di OffTopic diciamo che i virus cercano di nascondersi il piu' possibile pertanto usano tecniche di mimetismo dette stealth, usando codice polimorfico e altro ancora.

naturalmente l'argomento è vasto, e per fare virus raffinati occorre avere una conoscenza del formato pe e delle tecniche di antidetect (e antidebug) notevole. altrimenti escono i "soliti prodotti"
ciau

Predator
 
Aggiungo solo che le aree di memoria libere si chiamano NOP e hanno la caratteristica di incrementare semplicemente il PC (program counter) quindi se presenti posso essere facilmente sostituite da istruzioni maligne e invisibili senza minime differenze notabile esternamente se non il peggioramento delle prestazioni del programma stesso, finché si rimane nell'ambito dei processori Intel e simili non si dovrebbero avere grandi problemi ma in altri elaboratori con struttura superpipeline si renderebbe soggetto il programma infetto a errori come 'data hazard', 'branch hazard' ecc...
 
Predator ha detto:
[ot]ShuraBozz, la finisci con questi post inutili?[/ot]
putroppo onguno posta quello che meglio riesce :lol:

tornando alla domanda di Brolyssj, del tutto lecita e posta in modo civile (che ultimamente è un lusso):

un topic approfondito potrebbe diventare abbastanza lungo, prima di tutto occorre classificare i virus per tipologia
worm, trojan, virus, macro ecc
questa classificazione è solitamente fatta in base alle azioni che fanno:
un worms di solito sono virus non dannosi ma che si riproducono
un trojan è il tipico virus non si duplicano ma fanno danni
virus come i trojan ma con la variante di rendersi il piu' possibile invisibile
macro solitamente virus creati con linguaggi di script
ecc... ecc...
ovviamente ci sono tutte le combinazioni del caso: nessuno vieta che esista un virus che oltre ad avere caratteristiche trojan si moltiplichi.

ok premesso questo parliamo di alcuni modi di infezione:
un virus puo' essere un unico file, pertanto non aver infettato nessun file ma essere proprio il file stesso il virus (caso raro)
i virus per infettare usano solitamente queste tecniche:
-append
-pre-append
-replace
-cavity
-inject
-companion

Append:
il virus copia s'è stesso dopo un file eseguibile, gli header del file infetto viene modificato in modo che all'avvio prima venga eseguito il virus e poi il virus rimandera' l'esecuzione al punto originale

Pre-Append:
come prima con la sola differenza che il virus si inserisce prima del file

Replace:
il virus mastica il file e lo sostituisce con s'è stesso (tecnica vecchissima non piu' in uso in quanto troppo facilmente rintracciabile)

Tutte queste tecniche hanno l'inconveniente che il file originale aumenta o diminuisce di dimensione, e questo detta sospetti

Cavity:
il virus si autoscrive in alcuni spazi vuori di un eseguibile (naturalmente se ci sono) e modifica gli header. In questo modo la dimensione del file non cambia.

Inject:
il codice fisico non risiede in un file infetto ma viene iniettato in un processo in memoria

Companion:
sono i virus che fanno compagnia ai file, sfruttano debolezze di sistema per eseguirsi al posto di altri file per poi lanciare quello vero. Un esempio:
se tu in una cartella hai pippo.exe (file tuo) e il virus mette un pippo.com
se lanci solo "pippo" da una shell dos, il sistema operativo dara' priorità al .com, poi il virus lancera' il .exe per non destare sospetti.
------------
i virus hanno convenienza a non alterare le funzionalità dei file per fare in modo che il sistema continui a funzionare ma "alimentando" le funzioni del virus il piu' a lungo possibile e rendendo piu' difficile scovarli.

Poi per aggiungere un pizzico di OffTopic diciamo che i virus cercano di nascondersi il piu' possibile pertanto usano tecniche di mimetismo dette stealth, usando codice polimorfico e altro ancora.

naturalmente l'argomento è vasto, e per fare virus raffinati occorre avere una conoscenza del formato pe e delle tecniche di antidetect (e antidebug) notevole. altrimenti escono i "soliti prodotti"
ciau

Predator


Grazie per i chiarimenti,quello che appunto non riesco a capire è COME il virus trova i NOP, come fa a sapere che l'area di memoria X è libera?
Non capisco poi come faccia ad eseguirsi-> ok,scrive nell'area di memoria X il codice del virus, ma se non viene chiamata da qualche parte nell'exe non penso che il codice venga eseguito, o no?
Non so se ho posto la domanda in modo chiaro, in tal caso chiedo scusa.
 
Brolyssj4 ha detto:
[...]

Grazie per i chiarimenti,quello che appunto non riesco a capire è COME il virus trova i NOP, come fa a sapere che l'area di memoria X è libera?
Non capisco poi come faccia ad eseguirsi-> ok,scrive nell'area di memoria X il codice del virus, ma se non viene chiamata da qualche parte nell'exe non penso che il codice venga eseguito, o no?
Non so se ho posto la domanda in modo chiaro, in tal caso chiedo scusa.

premetto che non ne so molto, però voglio provare lo stesso a chiarirti il concetto:
se il programma prevede che per i prossimi 5 secondi deve aspettare, allora ci saranno 5 secondi di NOP (No OPeration)...
la NOP è un'istruzione vera e propria, e corrisponde al codice 0x90, pertanto non è una cella di memoria "vuota" come la chiami tu, ma è una cella di memoria con un'istruzione di "pausa". (imho mi sembra stupido che in un programma ci siano celle di memoria vuote, sarebbe uno spreco.)

quindi il virus che dici tu opererà in questo modo, scorrerà tutte le istruzioni del programma e controllerà se sono presenti degli 0x90. se ci sono li sostituisce col codice del virus.

se ho detto qualche cazzata (e ciò è molto probabile xD ) chiedo scusa...
 
Gian ha detto:
Brolyssj4 ha detto:
[...]

Grazie per i chiarimenti,quello che appunto non riesco a capire è COME il virus trova i NOP, come fa a sapere che l'area di memoria X è libera?
Non capisco poi come faccia ad eseguirsi-> ok,scrive nell'area di memoria X il codice del virus, ma se non viene chiamata da qualche parte nell'exe non penso che il codice venga eseguito, o no?
Non so se ho posto la domanda in modo chiaro, in tal caso chiedo scusa.

premetto che non ne so molto, però voglio provare lo stesso a chiarirti il concetto:
se il programma prevede che per i prossimi 5 secondi deve aspettare, allora ci saranno 5 secondi di NOP (No OPeration)...
la NOP è un'istruzione vera e propria, e corrisponde al codice 0x90, pertanto non è una cella di memoria "vuota" come la chiami tu, ma è una cella di memoria con un'istruzione di "pausa". (imho mi sembra stupido che in un programma ci siano celle di memoria vuote, sarebbe uno spreco.)

quindi il virus che dici tu opererà in questo modo, scorrerà tutte le istruzioni del programma e controllerà se sono presenti degli 0x90. se ci sono li sostituisce col codice del virus.

se ho detto qualche cazzata (e ciò è molto probabile xD ) chiedo scusa...


ma appunto, quello che non capisco è che anche se il virus sostituisce i NOP con il suo codice, come fa a "dire" all'exe infettato di eseguire le istruzioni che ha inserito?
 
Brolyssj4 ha detto:
Gian ha detto:
Brolyssj4 ha detto:
[...]

Grazie per i chiarimenti,quello che appunto non riesco a capire è COME il virus trova i NOP, come fa a sapere che l'area di memoria X è libera?
Non capisco poi come faccia ad eseguirsi-> ok,scrive nell'area di memoria X il codice del virus, ma se non viene chiamata da qualche parte nell'exe non penso che il codice venga eseguito, o no?
Non so se ho posto la domanda in modo chiaro, in tal caso chiedo scusa.

premetto che non ne so molto, però voglio provare lo stesso a chiarirti il concetto:
se il programma prevede che per i prossimi 5 secondi deve aspettare, allora ci saranno 5 secondi di NOP (No OPeration)...
la NOP è un'istruzione vera e propria, e corrisponde al codice 0x90, pertanto non è una cella di memoria "vuota" come la chiami tu, ma è una cella di memoria con un'istruzione di "pausa". (imho mi sembra stupido che in un programma ci siano celle di memoria vuote, sarebbe uno spreco.)

quindi il virus che dici tu opererà in questo modo, scorrerà tutte le istruzioni del programma e controllerà se sono presenti degli 0x90. se ci sono li sostituisce col codice del virus.

se ho detto qualche cazzata (e ciò è molto probabile xD ) chiedo scusa...


ma appunto, quello che non capisco è che anche se il virus sostituisce i NOP con il suo codice, come fa a "dire" all'exe infettato di eseguire le istruzioni che ha inserito?

nel programma non infettato, la cella X contiene un NOP e viene eseguita dal programma.
quando infetti il programma, cambi il contenuto della cella X, ma la cella appartiene sempre al programma e il programma la eseguirà credendo che dentro ci sia una NOP, mentre invece ci sarà il codice del virus... (non so se mi sono spiegato...)

quindi non bisogna dire all'exe di eseguire le celle... le celle fanno già parte del programma e pertanto vengono già eseguite.
 
A costo di essere ripetitivo, vorrei chiarire meglio anche per sapere se ho capito bene i NOP sono istruzioni regolarmente eseguite dal programma, una volta infettate dal codice malevolo smettono di essere "Pause" e il programma invece di non eseguire niente esegue quelle che prima erano le pause e quindi esegue il codice malevolo :)
 
se il programma prevede che per i prossimi 5 secondi deve aspettare, allora ci saranno 5 secondi di NOP (No OPeration)...
oddio...voglio sperare proprio di no. Una nop per essere esguita richiede una frazione di secondo così piccola che 5 secondi di pausa dichiederebbero qualche megabyte di 0x90 :p
 
a quanto pare Brolyssj4 ha capito il concetto della sostituzione di una NOP e tutto il resto ma,credo che voglia degli esempi...(p.s.=non so esserti di aiuto ma comunque sto leggendo quello che scrivono perchè è sempre interessante l'argomento :D)
 
Gian ha detto:
Brolyssj4 ha detto:
Gian ha detto:
Brolyssj4 ha detto:
nel programma non infettato, la cella X contiene un NOP e viene eseguita dal programma.
quando infetti il programma, cambi il contenuto della cella X, ma la cella appartiene sempre al programma e il programma la eseguirà credendo che dentro ci sia una NOP, mentre invece ci sarà il codice del virus... (non so se mi sono spiegato...)

quindi non bisogna dire all'exe di eseguire le celle... le celle fanno già parte del programma e pertanto vengono già eseguite.
grazie, era proprio questa la parte che mi mancava, non sapevo che le "celle" venissero eseguite automaticamente..

R4z0r_Cr4$H ha detto:
a quanto pare Brolyssj4 ha capito il concetto della sostituzione di una NOP e tutto il resto ma,credo che voglia degli esempi...(p.s.=non so esserti di aiuto ma comunque sto leggendo quello che scrivono perchè è sempre interessante l'argomento :D)
esatto xD, attendiamo fiduciosi il sommo Predator...
 
kama ha detto:
se il programma prevede che per i prossimi 5 secondi deve aspettare, allora ci saranno 5 secondi di NOP (No OPeration)...
oddio...voglio sperare proprio di no. Una nop per essere esguita richiede una frazione di secondo così piccola che 5 secondi di pausa dichiederebbero qualche megabyte di 0x90 :p

ok, forse non era un esempio azzeccatissimo... :p
 
Non sarebbe meglio "programmazione a basso livello" per questo argomento?

Per ignettare codice maligno è sufficiente sostituire delle istruzioni del programma, sostituendo i NOP però si è sicuri che il funzionamento a "puttane", e nessuno si accorgerà della cosa fino all'esecuzione e magari anche dopo.
Per fare un ignezion di questo tipo è necessario conoscere il linguaggio macchina dei pocessori Intel e con un disassemblatore andare a modificare le istruzioni di NOP o quello che preferite (xD) dal programma disassemblato ma dubito senza un accurato studio possiate capirci qualcosa è necessario conoscere almeno i fondamenti dell'assembly.
Vi spammo una guida per chi volesse fare giusto una prova e chiarirsi le idee: Code Inject
 
Carina la guida nightmare :) credo che più in la potrebbe essermi utile per fare qualche esperimento durante notti insonni :p
 
n1ghtmare ha detto:
Non sarebbe meglio "programmazione a basso livello" per questo argomento?

Per ignettare codice maligno è sufficiente sostituire delle istruzioni del programma, sostituendo i NOP però si è sicuri che il funzionamento a "puttane", e nessuno si accorgerà della cosa fino all'esecuzione e magari anche dopo.
Per fare un ignezion di questo tipo è necessario conoscere il linguaggio macchina dei pocessori Intel e con un disassemblatore andare a modificare le istruzioni di NOP o quello che preferite (xD) dal programma disassemblato ma dubito senza un accurato studio possiate capirci qualcosa è necessario conoscere almeno i fondamenti dell'assembly.
Vi spammo una guida per chi volesse fare giusto una prova e chiarirsi le idee: Code Inject



Grazie per la guida, è molto interessante, ma vedi, io fin lì sapevo come agire(avrei dovuto imparare un po' di ASM,ma a livello concettuale sapevo già come muovermi), il punto è che mi chiedevo come facessero i virus a farlo in modo automatico, io non penso che i virus aprano il disassemblatore quando infettano un pc, xD
 
Un virus di questo tipo procede circa in questo modo:

1) Controlla l'estensione e legge il contenuto, cioè il linguaggio macchina, dei semplici numeri.
2) Se trova dei numeri consecutivi che stanno a rappresentare dei NOP....
3) Li sostituisce con i numeri che rappresentano in linguaggio macchina le istruzioni in assembly desiderate....
4) Continua a setacciare la directory e cerca altri file;
5) Quando sono terminati cambia directory;
6) Quando termina in teoria dovrebbe cancellarsi, ma anche no.

Ci sono diverse cose che potrebbero andare storte nell'ignezione come cambiare il valore di un registro in utilizzo o di una locazione di memoria. Questo negli elaboratori Intel, perché in alti la cosa diventerebbe davvero difficile da gestire se con architettura superpipeline.
 
Interessante discussione, chi mi sà dare info in + sul polimorfismo ?
cioè come funziona il processo ?
visto che si possono fare domande :)
 
ma parlando di questa "memoria in pausa" di che ordine di grandezza è? Cioè, fisicamente parlando, varia in base alla grandezza dell'eseguibile o è standardizzata? Se si, quanto vale?

Davvero interessante :O
 
Angelic Code ha detto:
ma parlando di questa "memoria in pausa" di che ordine di grandezza è? Cioè, fisicamente parlando, varia in base alla grandezza dell'eseguibile o è standardizzata? Se si, quanto vale?

Davvero interessante :O

Quoto la domanda.
E quoto anche che l'argomento è interessante ;) thank's to chi ha spiegato xD
 
RedSkull92 ha detto:
Interessante discussione, chi mi sà dare info in + sul polimorfismo ?
cioè come funziona il processo ?
visto che si possono fare domande :)

Io conosco il polimorfismo solo in ambito dell'OOP quindi penso di non aver capito la domanda xD.

ma parlando di questa "memoria in pausa" di che ordine di grandezza è? Cioè, fisicamente parlando, varia in base alla grandezza dell'eseguibile o è standardizzata? Se si, quanto vale?

Se stai parlando dei NOP vengono eseguiti dal processore in 1 nanosecondo (con clock di 4mhz) e suppongo sia una serie di essi che crea ad esempio gli _sleep(const unsigned ); fisicamente non fanno altro che incrementare il registro PC ( program counter ) quindi aumentare il numero delle istruzioni fatte eseguire al processore. Rispetto all'eseguibile varia a seconda dell'architeturra del processore, se è di tipo CISC con un solo processore è di poca utilità mentre in altri superscalari diviene essenziale per evitare errori come il "data hazard" o il "branch hazard" cui ho accenato precedentemente.
 
Stato
Discussione chiusa ad ulteriori risposte.