| |
In primul rand vreau
sa mentzionez ca autorul acestui articol nu se face responsabil de folosirea
informatziilor,cunoshtintzelor sau tehnicilor prezentate aici,orice ar
insemna aceasta folosire.Acest material a fost conceput, scris shi publicat
in scop didactic shi pentru a veni in ajutor celor care doresc sa se protejeze
de virushii informatici.Sub nici o forma nu am instigat la scrierea de
virushi.VIRUSHII SUNT LAME!
Contzinut :
1. Introducere.
2. Ce este un virus?!
3. Tipuri de virushi.
3.1. Virushi de boot.
3.2. Virushi de fishier.
3.3. Virushi de document(macro virushi).
3.4. !!Virushi de IRC!!
4. Virushi "destructivi" vs. virushi "pashnici".
5. Ce sunt shi cum functzioneaza antivirushii?
6. Tehnici de evadare folosite de virushi.
7. Incheiere.
1. Introducere.
I LOOOVE YOU...me 2!Cam asha ziceau majoritatea posesorilor de computere
de pe glob acum vr'o luna sau doua,dupa ce virusul "I_LOVE_YOU"
le-a infectat sistemul.Pe vremea aia,cam toata lumea ma intreba ce e cu
el,ce face,daca e periculos, alea alea.Chestia care m-a izbit a fost ca
majoritatea nu shtiau ce e un virus.Foarte multzi amici de-ai mei au fost
foarte curioshi sa shtie cum se face un virus,ce este un virus shi cum
pot fi combatutzi.Ashea ca....am decis sa scriu articolul asta! Oricum...parerea
mea e ca epoca de aur a virushilor a apus de catva timp,locul lor fiind
preluat de troieni,despre care,insa, vom discuta altadata.Sa trecem la
treaba !!!
2. Ce este un virus?!
Un virus informatic copiaza pana la cele mai mici detalii comportamentul
virushilor biologici.Shi unii shi altzii au nevoie in primul rand de o
gazda pentru a supravietzui. In al doilea rand este nevoie de un mediu
(environment) adecvat,adiq un virus proiectat pentru o platforma Windows/x86
nu functzioneaza decat pe o platforma compatibila.Virusul biologic cauzeaza
stari de indispozitzie gazdei,shi uneori provoaca moartea,dar nu acesta
este scopul sau principal.Principala caracteristica a unui virus este
proliferarea. In mod identic se comporta shi un virus de calculator,el
infectand,dupa caz,fishiere sau MBR,alterandu-le contzinutul in asha fel
incat sa se faca posibila propagarea sa.Rutina distructiva este in multe
cazuri evitata deoarece daca un virus provoaca daune mari gazdei sale,
nu se mai poate inmultzi. ;)
Un virus informatic este un program care trebuie sa indeplineasca urmatoa-rele
conditzii:
- se atasheaza unei gazde(fishier executabil,document sau MBR)
- codul sau se executa inaintea celui apartzinand gazdei.
- contzine o rutina care permite infectarea unei alte gazde.
3. Tipuri de virushi.
Virushii informatici pot fi grupatzi dupa tipul gazdei pe care o prefera
in :
3.1. Virushi de MBR.
Aceshti virushi nu sunt foarte greu de creat shi infecteaza atat HDD cat
shi floppy-disk-ul.Zona de boot a discului este inlocuita cu codul virusului,
shi programul initzial de boot este rescris la o locatzie cunoscuta doar
de virus.Astfel,la repornirea calculatorului, se lanseaza in executzie
codul virusului dupa care acesta executa un salt la adresa unde a fost
rescrisa zona de boot initziala,continuandu-se cu executzia acesteia functzionarea
calculato- rului continuand aproape in mod normal. :P
3.2. Virushi de fishier.
In loc sa infecteze zona de boot,aceshtia tzintesc fishierele executabile
adiq cele care au extensia .COM,.EXE,.SYS,.DRV sau .BIN.Codul initzial
al programului este alterat in asha fel incat sa permita in primul rand
executzia codului ofensiv(virusul) shi abia apoi se executa programul
initzial.Sunt ceva mai elaboratzi shi mai greu de scris spre deosebire
de cei de boot,deoarece fishierele contzin un header in care sunt incluse
informatzii despre fishierul respectiv(marime,data crearii,paragrafe,adresa
de start,alea alea)care sunt folosite de sistemul de operare la lansarea
in executzie a programului respectiv.Daca headerul este alterat,sistemul
de operare primeshte informatzii eronate despre fishier shi in mod normal
il executa faultat,ceea ce duce ori la descoperirea virusului ori la oprirea
raspandirii acestuia.De aceea , cand se scrie un virus trebuie sa se tzina
seama de tipul fishierelor destinate sa fie gazda.
3.3. Virushi de document (macro virushi).
Ce este un macro?!Macro este o 'imbunatatzire',cum sunt multe altele cu
care ne-a invatzat Micro$oft, care permite crearea unei comenzi noi,user
defined,pentru executarea unor secventze folosite des de utilizator,doar
prin apasarea unui buton.Sunt un set de instructziuni automatizate care
imbunatatzesc viteza shi ushureaza munca utilizatorului. Pentru crearea
de astfel de macro-comenzi,in Office 97 a fost inclus shi Visual Basic
Engine.
Ashadar,un macro-virus este un virus format dintr-o macro-comanda care
contzine cod ofensiv shi care provoaca pagube sau este deranjanta cand
este lansata in executzie.Acest tip de virushi se raspandesc foarte repede
shi unii au o rutina de activare aleatoare.Macro-virushii sunt,probabil,
singurii virushi care nu sunt dependentzi de platforma,un macro-virus
proiectat sub un sistem Windoze poate infecta shi un Mac.:(
3.4. Virushi de IRC.
Acum vreo luna shi ceva un prieten m-a chemat la el sa ma uit un pic la
calculatorul lui...Ce se intampla?!Cand era pe IRC,totzi de pe canalul
respectiv il intrebau ce le trimite.El nu trimitea nimic...atunci ce dreq
se intampla?!
M-am uitat un pic prin calculatorul lui shi am vazut ceva ce nu mai vazusem:
un virus de IRC!!!Am analizat comportamentul sau shi in continuare va
prezint caracteristicile lui:
- inlocuise scriptul mirc.ini cu propriul script care ii permitea propagarea
de pe un calculator pe altul.
- se transmitea prin DCC trimitzand fishiere de tip BAT cu extensia .jpg
folosindu-se de un bug al mirc-ului.Fitzi atentzi : avem fishierul carina.jpg.bat
care este de tip BAT dar mIRC il vede ca fiind jpeg deoarece considera
extensie primele trei litere aflate dupa punct. Ashadar,la un DCC request
carina.jpg.bat va fi carina.jpg!!!! Pare sa fie poza unei tipe,nu?!NU
ESTE!!E un virus!! - o alta caracteristica interesanta era ca la doua
infectari nu pastra acelashi nume pentru "fotografie" ci il
compunea folosind o rutina semialeatoare.
Sfatul meu este sa nu acceptatzi DCC de la nimeni,nici chiar de la cel
mai bun prieten pentru ca ar putea fi infectat fara sa shtie ! /me are
DCC inchis... facetzi shi voi la fel...oricum,la ce dreq foloseshte?!
:P
Nota : Un virus nu infecteaza daca nu este lansat in executzie.Un virus
de boot nu porneshte daq se executa de pe o disketa system curata,un virus
de fishier executabil nu porneshte daq nu se executa fishierul respectiv,un
virus de mail nu actzioneaza daq nu se deschide mesajul care il contzine!
4. Virushi "destructivi"
vs. virushi "pashnici"
Probabil ca va intrebatzi de ce am folosit ghilimici...Cititzi capitolul
asta shi o sa va datzi singuri seama. In 6 ani,de cand am facut cunoshtintza
cu virushii, am realizat ca virushii distructivi nu sunt chiar asha de
distructivi pe cat se doresc shi aia pashnici sunt mai periculoshi decat
par.Acum vreo 3-4 ani,aproape fiecare casa (a se citi peceu) avea cate
un reprezentant al virusului 'Hi',nu-i asha?!Ce dreq facea cu cei 460
de bytes cu care il inzestrase natura?Se multiplica shi atata tot.Aceeashi
faza e valabila shi cu 'La Multi Ani!!!',unu care se lansa in preajma
sarbatorilor de Craciun.Erau virushi "pashnici",care nu faceau
mari pagube,dar totushi,cate sisteme nu au fost infectate?! Acum sa luam
exemplul virusului B00st,scris de un amic de-al meu.Super-distructiv,radea
hardul la data de 13 a fiecarei luni.Atzi auzit de el ? Normal ca nu,fiindca
nu a avut timpul necesar sa se inmultzeasca,distrugand fiecare sistem
pe care il infecta (cred ca vreo 5-6 calculatoare l-au cunoscut :)).Acum
v-atzi prins care-i faza cu ghilimelele din titlu? Inca nu?! Hmmmmm....najpa!
Un virus,pentru a fi intr-adevar periculos are nevoie de o perioada de
incubatzie shi rutina ofensiva nu trebuie sa fie foarte distructiva,pentru
a-i lasa timp sa se propage.Eu personal am preferat sa nu includ nici
o rutina ofensiva in codul virushilor scrishi de mine,sau daca am inclus
aceasta era doar agasanta shi se activa in imprejurari aleatoare,foarte
rar intalnite! Datorita acestui fapt,plus altele despre care vom vorbi
in capitolele urmatoare,chiar shi tu, cititorule, ai putea fi infectat
de un virus scris de mine, chiar fara sa shtii. :)
5. Ce sunt shi cum
functzioneaza antivirushii?
Antivirushii sunt programe al caror unic scop este sa ii detecteze shi
sa ii omoare pe ashtia mici...virushii.Tehnicile folosite in campania
antivirus s-au dezvoltat extraordinar in ultimul timp.Acum 5 ani antivirushii
cautau virushi dupa semnatura,shi descopereau numai virushii ale caror
semnaturi existau in baza lor de date.Astazi, exista cateva tehnici care
nu trebuiesc lasate deoparte daq se doreshte realizarea unui produs antivirus
care chiar sa poata descoperi virushi.
Scanarea semnaturii - este prima tehnica anti-virus existenta.Programul
antivirus are o baza de date in care sunt trecute semnaturile virushilor
cunoscutzi.Daca in fishierul scanat este intalnita semnatura unui virus,atunci
se considera ca fishierul este infectat.Nu permite detectarea virushilor
necunoscutzi!
Generator de cod - sau lansator de capcane.Este folosit pentru a prinde
virushi activi in memorie sau pentru a descoperi daca exista virushi in
memorie. Ideea de baza e simpla:se creaza fishiere executabile(bait-uri)
care sunt lansate in executzie,dupa care se controleaza marimea lor.Daca
aceasta este neschimbata inseamna ca fishierul nu a fost infectat,deci
in memorie nu sunt virushi pentru acel tip de fishier.Daca marimea a fost
modificata,se transmite fishierul mai departe,la engine-ul euristic.
Engine euristic - este un program care are o baza de date in care sunt
incluse toate instructziunile cunoscute ca fiind virus-like code(cu cat
mai multe cu atat mai bine,dar atentzie la alarme false).Cand actzioneaza
asupra unui fishier,il parcurge in intregime,urmarind jump-urile shi comparand
codul intalnit cu cel din baza de date.Daca intalneshte mai multe instructziuni
specifice virushilor,catalogheaza fishierul ca fiind infectat.Trebuie
sa tzinem cont de faptul ca engine-ul euristic nu garanteaza o detectzie
reala,in proportzie de 100%,el bazandu-se pe probabilitatzi shi putand
genera foarte multe alarme false.Cea mai noua generatzie de engine-uri
euristice creaza un mediu asemanator cu cel creat de sistemul de operare,lanseaza
virusul in executzie in acest mediu se face un dump al codului din memorie
shi abia acum se executa analizele euristice,pe virus.Acest lucru se face
pentru a trece de criptarea folosita de virushi,fiind shtiut faptul ca
doar un numar redus de virushi raman criptatzi shi in memorie.Aceasta
metoda permite detectarea chiar shi a viruhsilor necunoscutzi.
Blocarea accesului direct la disc - majoritatea virushilor incearca sa
scrie direct pe disc folosind INT 25h shi INT 26h.Dar shi programe legitime
pot sa foloseasca aceste functzii pentru lucru la nivel intim cu disk-ul.
Monitorizarea modificarilor MBR - multzi virushi infecteaza sistemul modificand
MBR-ul shi furand INT 13h.O monitorizare a acestora ar trebui sa tzina
sistemul relativ 'curat'. :)
K...Daq atzi inclus toate astea in programul dumneavoastra antivirus,
putetzi fi mandrii...avetzi un soft competitzional. /me va ureaza succes!In
cantitatzi induuuustriale!!! mwahahahahaha...
6. Tehnici de evadare
folosite de virushi.
In sfarshit...am ajuns la ce-mi place mie.Dupa ce atzi citit capitolul
anterior probabil ca v-atzi gandit ca saracele creaturi(virusheii...)
nu au nici o shansa in fatza railor de antivirushi...GRESHEALA!!Aproape
ca e invers...Eu personal am scris un virus care nu a fost detectat nici
de dreq in 2(doi) ani de zile. Shi nici pana in ziua de azi,cand scriu
asta.Cum am reushit? Ehehe...Am sa va explic in continuare cateva tehnici
folosite de cei care scriu virushi (ma rog, nu shtiu daq script - kiddies
vs. lamah'z le shtiu... ;)).
Modificare marime fishier.Intotdeauna,cand adaugi ceva la altceva acel
altceva creshte in dimensiuni.Shtitzi de ce?! Fiindca iarna nu e ca vara
! :)
Un antivirus se uita sa vada daq un fishier a crescut in marime,facand
o comparatzie cu marimea precedenta a fishierului respectiv,stocata intr-o
baza de date.Dar daq noi scadem marimea virusului nostru...ce modificare
mai vede? :)
Pastrare timestamp.Orice fishier are un timestamp, adiq cum ar veni o
data a nashterii,pe care daq o lasam cum a modificat-o virusul nostru
putem avea probleme.Ashadar va trebui sa salvam undeva timestampul inainte
de infectzie,iar dupa ce am modificat fishierul sa rescriem timestamp-ul
initzial.
Criptarea codului.Pentru a le da batai de cap in plus celor care scriu
programe antivirus, pushtanii ashtia "proshti" care scriu virushi
s-au gandit ca ar fi mishto sa cripteze secventzele critice de cod, sau
chiar intregul cod al virusului.Partea nashpa e ca daq s-a generat o cheie,e
valabila pentru decriptarea tuturor celorlalte copii ale virusului.
Polimorfism.Ehehehe...acum fiecare cheie e generata aleator shi este pastrata
undeva in corpul virusului sau este generata in functzie de o caracteristica
a unei componente a calculatorului,cum ar fi seria hard disk-ului sau
un checksum al zonei de boot.Sa vedetzi ce mishto o sa fie cand va schimbatzi
hard-ul.:) Cam asha ceva facea One_Half...encripta informatzia de pe HDD
cu o cheie generata in functzie de HDD shi o cheie generata aleator de
el.Asha ca daq schimbai HDD,programele erau duse shi daq shtergeai virusul
fara sa decriptezi HDD,iar erau duse.:PP Am intalnit virushi care generau
cheia de decriptare in functzie de caracteristicile fishierului infectat(marime,checksum,
data crearii,etc.).La polimorfism inca mai ramane o portziune dupa care
se poate genera semnatura... decriptorul. Cum dreq sa faci sa criptezi
decriptorul?!
Automorfism.Omul cu o mie de fetze poate nu exista,dar virusul cu un milion,cu
sigurantza da! Bajetzii ashtia de care ziceam mai devreme,"proshtii",
s-au gandit cum sa faca in asha fel incat sa nu se mai poata genera semnatura
pentru un virus.Cel mai mishto virus pe care l-am intalnit vreodata se
numeshte PINWORM shi este scris de unu, The QUaRaNTiNE. Virusul asta nu
are nici un singur byte constant!! Mishto, nu? Anyway,in assembler exista
o instructziune, nop care nu face nimic decat sa ocupe spatziu.Shi atunci
bajetzii s-au gandit s-o puna la treaba...ce ar fi daca ar ocupa spatziu
cu un scop? Daca ar ocupa spatziu pentru alte instructziuni...:) V-atzi
prins? Pentru un programator mediu in asm , nu este cine shtie ce corvoada
sa gaseasca vr'o 11-12 instructziuni care sa nu afecteze restul codului.
Sau cel putzin sa scrie codul in asha fel incat sa nu fie afectat de ele...Face
o rutina care scrie aceste instructziuni aleator pe spatzii ocupate de
instructziuni nop.Aceste nop-uri trebuiesc intercalate in zona decriptorului
creand astfel un cod cvasi-automorf,ele fiind inlocuite de instructziuni
aleatoare.Ash putea explica shi cum se poate realiza un cod 100% automorf(0
bytes constant) dar sunt sigur ca multzi nu ar intzelege deoarece este
nevoie de cunoshtintze avansate in programarea assembler x86. :P
Cod anti-debugging.Probabil ca va vetzi intreba ce dreq cauta instructziuni
anti-debugger la virushi...Pai unde in alta parte,fratzilor?! Un engine
heuristic analyser este in primul rand un debugger,ce-i drept o tzara
modificat.Shi,daq va amintitzi din articolul meu precedent,in care ziceam
de debuggere shi cod anti-debugging,un debugger se bazeaza doar pe doua
intreruperi care pot fi matrashite in nenumarate feluri(sploit that!!!).BTFW,fitzi
creativi!
Evitarea fishierelor care contzin in numele lor AV,CL shi SC.In general,
aceste grupuri de litere sunt contzinute in numele programelor antivirus,
deci ar fi o tampenie sa incerci sa infectezi tocmai p-ala care vrea sa
te omoare. :)
Atacarea fishierelor care contzin in numele lor AV,CL shi SC.Cea mai buna
defensiva e ofensiva zicea un strateg chinez.Shi avea dreptate.Mai bine
le anihilam noi pe ele decat ele pe noi!
Gresheli in programele antivirus.Programele antivirus sunt shi ele supuse
greshelilor de c0dare,deoarece sunt scrise de oameni.Acestea pot fi exploatate
intr-un mod nu prea magulitor pentru cei care le-au scris.Acum doi ani
am descoperit in codul TBAV o gresheala care lasa sa scape fishierele
infectate. Alta asemanatoare am gasit in F-PROT.Am scris o rutina care
inglobeaza ambele sploituri.Nu imi permit inca sa o public deoarece chiar
shi acum,dupa doi ani,acele gresheli nu au fost corectate!:)
O alta gresheala superba este in codul MSAV(din nou Micro$oft,cei mai
dragutzi 14m3ri :)) shi permite incheierea actziunii de rezidentza in
memorie a antivirusului.Daq faci chestia asta shi imediat dupa aceea scrii
la adresa unde obishnuieshte sa-shi puna el semnatura,o semnatura identica
cu a lui...ehehe,nu te mai deranjeaza. ;)
Ar mai fi cateva tehnici de pacalire a antivirushilor,dar cred ca astea
care le-am prezentat sunt suficiente pentru un articol care shi-a propus
sa invetze lumea ce e un virus shi cum sa te pazeshti de el... :))
7. Incheiere.
A venit timpul sa zic "cu@"...dar nu inainte de cateva vorbe.Dupa
ce am publicat articolul "Debuggere shi cod anti-debugger",din
numarul 2 al revistei, unii au spus ca trickurile prezentate nu imi apartzineau.Tzin
sa precizez inca o data ca articolele imi apartzin in totalitate,iar in
cazurile in care portziuni de cod sunt luate de la altcineva,acea persoana
este creditata. Trick-urile antidebugger prezentate in acel articol erau
100% munca mea,la fel ca intreaga arhiva ANTI-D.ZIP.Re Gush! :P
Doar doo vorbe.Un virus poate scrie oricine shtie ceva despre asm,VB sau
mIRC.Dar pentru a scrie o opera de arta este nevoie de tehnica.Cei care
scriu virushi elementari shi destructivi ar trebui impushkatzi...cei care
fac arta ar trebui premiatzi! Pana la urma ce este un virus?! Este PRIMA
forma de viatza non-biologica de pe TERRA!!!Foarte multa lume ar putea
invatza ceva de la cei care scriu virushi...shi,NU!Nu totzi sufera de
marginalizare sociala sau probleme psihice. Un DarkAvenger e un artist,nu
pentru virushii pe care i-a scris ci pentru ce a descoperit shi a implementat
in virushii lui. PINWORM, Neuroquilla, Tremor, One_Half, Prodigy, Allia,
Happy99 sau Melissa sunt catziva dintre virushii ai caror coderi ar merita
un premiu.Sigur mai sunt shi altzii(BergenBier?! :)) care insa nu au fost
descoperitzi. :P
/me va zice ciao!Shi daq vretzi sa scrietzi un virus...lasatzi-o balta,
mai bine facetzi un joc ceva ca oricum nu am mai vaz't demult ceva mishto!
:)))
|
|
|
 |