Facultatea de electronica, telecomunicatii si tehnologia informatiei


Stocarea pe linii. Accesul folosind capabilitati



Yüklə 318,29 Kb.
səhifə2/4
tarix28.10.2017
ölçüsü318,29 Kb.
#18495
1   2   3   4

2.2.2 Stocarea pe linii. Accesul folosind capabilitati
Cealalta metoda de reorganizare a matricii din figura 4 se face pe randuri. Cand se folosește aceasta metoda, fiecare proces are asociata o lista de obiecte pe care le poate accesa, împreună cu o indicatie care specifica de operaţii sun permise pe fiecare, altfel spus, domeniul lui. Aceasta lista se numeste lista de capabilitati (C-list) şi fiecare obiect din ea se numeste capabilitate. În figura 7 este un set de 3 procese şi capabilitatile lor. Fiecare capabilitare permite proprietarului anumite drepturi asupra unui anumit obiect. În figura 7, procesul utilizatorului A poate citi fişierele F1 şi F2. În general, o capabilitate consta într-un fişier (sau, mai general, un obiect) identificator, şi o „harta de biti” (bitmap) care descrie drepturile. În sistemele similare UNIX, identificatorul de sistem este, cel mai probabil, numarul nodului i (i-node). Listele de capabilitati sunt ele insele obiecte care pot fi indicate de alte liste de capabilitati, facilitand impartirea pe subdomenii.


A

B

C

F1

F2

F3

F1:R

F2:R

Proces

Utilizator

C-LIST

F1:R

F2:RW

F3:RWX

F1:R

F2:RX

Spațiu user


Spațiu kernel

FIG 7: La utilizarea listelor de capabilitati, fiecare proces are o lista

Este evident ca lista de capabilitati trebuie protejata de utilizatori. Sunt cunoscute 3 metode. Prima necesita arhitectura cu etichete, care din proiectarea hardware presupune ca fiecare cuvant din memorie sa aiba un bit în plus (o eticheta) care sa spuna dacă acel cuvant conține o capabilitate sau nu. Acest bit poate fi modificat numai de programele care rulează în mod de kernel. Au fost construite masini cu arhitectura pe etichete, obtinandu-se performante rezonabile (ex: IBM AS/400).

A doua metoda este păstrarea C-list-urilor în interiorul sistemului de operare. În acest caz, capabilitatile sunt referite prin pozitia lor în lista.

A treia metoda consta în păstrarea C-list-urilor în spațiul utilizatorului, dar gestiunea lor sa se faca criptografic, astfel încât utilizatorii sa nu le poată modifica. Aceasta metoda este folosita în sistemele distribuite şi funcţioneaza în modul următor. Cand un proces client trimite un mesaj unui server de a crea un obiect pentru el, serverul il creaza şi genereaza un numar lung, aleator (campul de verificare) pe care il trimite împreună cu obiectul. În tabelul de fişiere al serverului este rezervat un slot pentru obiect şi campul de verificare este stocat acolo împreună cu adresele blocurilor discului. În termeni UNIX, campul de verificare este stocat în server în nodul “i”. Nu este trimis inapoi la user şi nu este pus niciodata pe retea. Serverul apoi genereaza şi intoarce o capabilitate utilizatorului, având forma ilustrată în figura 8.


Server

Obiect

Drepturi

f(Obiecte, Drepturi, Verificare)

FIG 8: Capabilitate protejata criptografic


Capabilitatea returnata conține identificatorul serverului, numarul obiectului (indicele în tabelul serverului) şi drepturile, stocate ca bitmap. Pentru un obiect nou creat, toate drepturile sunt disponibile (proprietarul poate face orice). Ultimul camp consta în concatenarea obiectului, drepturilor şi a campului de verificare, realizata printr-o funcţie criptografica neinversabila f.

Cand utilizatorul incearcă sa acceseze obiectul, trimite capabilitatea către server, ca parte a cererii, Serverul extrage numarul obiectului pentru a-l identifica în tabela lui şi calculeaza f(Obiect, Drepturi, Verificare), luand primii 2 parametrii din capabilitate şi al treilea din tabela proprie. Dacă rezultatul este egal cu al patrulea camp din capabilitate, cererea este servita; altfel, este respinsă. Dacă un utilizator incearcă sa acceseze fişierele altcuiva, nu va reuşi deoarece al patrulea camp nu va fi obtinut corect.

Un utilizator poate cere serverului sa produca o capabilitate mai slaba, de exemplu, pentru acces read-only. Mai intai, serverul verifica validitatea capabilitatii. Dacă rezultatul este pozitiv, calculeaza f(Obiect, Drept_nou, Verificare), şi genereaza o noua capabilitate pe care o stocheaza în al patrulea camp. Aceasta noua capabilitate este trimisa la procesul care a iniţiat cererea. Utilizatorul poate acum sa o trimita cuiva printr-un mesaj. Dacă acel cineva seteaza bitii de drepturi care ar trebuie sa fie pe 0, serverul va detecta acest lucru cand capabilitatea este folosita, deoarece valoarea funcţiei f nu corespunde cu campul de drepturi false.

Pe langa drepturile specifice dependente de obiect, capabilitatile (şi cele protejate de kernel şi criptografic) au şi drepturi generice aplicabile tuturor obiectelor.


Exemple:




  1. Copierea capabilitatii: crearea unei noi capabilitati pentru acelaşi obiect;

  2. Copierea obiectului: crearea unui obiect duplicat cu o capabilitate noua;

  3. Ştergerea unci capabilitati: eliminarea unei intrări din C-list, fără a afecta obiectul;

  4. Distrugerea obiectului: eliminarea permanenta a obiectului şi a capabilitatii.

De reținut ca în sistemele bazate pe capabilitati, revocarea accesului la un obiect se face greu în versiunea gestionata de kernel. Este dificil pentru sistem sa gaseasca toate capabilitatile unui obiect pentru a le modifica, din moment ce ele pot fi stocare în C-list-uri pe tot discul. O abordare este aceea ca fiecare capabilitate sa indice către un obiect indirect, în locul obiectului adevarat. Păstrand un obiect indirect, sistemul poate intrerupe oricand legatura, invalidand toate capabilitatile.

In cealalta schema, revocarea este mai usoara. Trebuie schimbat doar campul de verificare stocat împreună cu obiectul, şi toate capabilitatile existente sun invalidate. Însă nici una din scheme nu permite revocarea selectiva, o problema majora în sistemele bazate pe capabilitati.

Pe scurt, ACL-urile şi capabilitatile au proprietăți complementare. Capabilitatile sunt eficiente deoarece nu este necesară nici o verificare, în timp ce la ACL, o cautare (uneori lunga) trebuie facuta în tot ACL-ul. Dacă grupurile nu sunt suportate, atunci permiterea accesului tuturor se face prin enumerarea tuturor utilizatorilor în ACL. Capabilitatile permit incapsularea usoara a unui proces, în timp ce ACL – nu. Totuşi, ACL permit o revocare selectiva a drepturilor, lucru care nu se poate face în cazul capabilitatilor. Aditional, apar probleme dacă se elimina capabilitatea şi rămâne obiectul, sau invers (se elimina obiectul şi rămâne capabilitatea). Acest neajuns nu apare la ACL.


3. Sisteme „trusted”. Baza calculului „trusted”
Sistemele trusted sunt sisteme care au fost declarate sigure şi care indeplinesc conditiile de securitare. La baza fiecarui sistem trusted se afla un TCB (Trusted Computing Base) care consta în tot ceea ce înseamnă hardware şi software utilizat pentru a creste securitatea. Dacă TCB funcţioneaza corect, securitatea sistemului nu poate fi compromisa, indiferent dacă orice altceva nu funcţioneaza corespunzator.

In general, TCB consta în majoritatea hardware-ului (mai putin dispozitivele I/O care nu afecteaza securitatea), o portiune din kernel-ul sistemului de operare şi majoritatea sau chiar toate programele utilizatorului. Funcţiile sistemului de operare care trebuie sa faca parte din TCB includ crearea de procese, comutarea lor, managementul memoriei, şi o parte a managementului de fişier şi de I/O. Într-o proiectare sigura, TCB este separat de restul sistemului de operare. O parte importanta a TCB este monitorul de referinte, ilustrat în figura 9. El accepta toate apelurile de sistem care implica securitatea, ca deschiderea de fişiere, şi decide dacă ar trebui procesate sau nu. Permite ca toate deciziile de securitate sa se ia într-un singur loc, fără posibilitatea de a trece peste controlul acesta.



Kernel şistem de operare

TCB

Proces utilizator

Spațiu User

Spațiu Kernel

Toate apelurile de şistem trec prin monitorul de referinte pt verificare de securitate





Monitor referinte

FIG 8: Monitorul de referinte

Se fac cercetari pentru a reduce dimensiunea TCB de la cateva milioane de linii de cod la cateva zeci de mii. În kernel-ul sistemului de operare MINIX 3 rulează doar 4000 de linii de cod, restul ruland ca set de procese ale utilizatorului. Unele din ele, ca sistemul de fişiere şi managerul de procese, sunt parte a TCB, deoarece pot compromite usor securitatea sistemului.


4. Modele formale de sisteme sigure
Matricile de protective nu sunt statice, se schimba frecvent, pe masura ce se creaza noi obiecte, se distrug cele vechi, sau proprietarii decid sa adăuge sau sa anuleze drepturi. S-a incercat sa se proiecteze sisteme în care aceasta matrice sa se poate schimba mai usor. În 1976, au fost identificate 6 operaţii primitive: creare/ştergere de obiect şi de domeniu, inserarea la stanga şi inserarea la dreapta. Aceste primitive pot fi combinate în comenzi de protecţie, pe care utilizatorul le poate executa pentru a modifica matricea. Însă nu sunt direct executabile, de exemplu, cand se creaza un obiect nou, sistemul verifica mai intai dacă nu cumva există deja altul cu acelaşi nume. în orice moment, matrice determina de poate face un proces într-un domeniu, nu ce este autorizat sa faca. Sistemul intareste ceea ce este inregistrat în matrice. Setul tuturor matricelor posibile poate fi divizat în doua seturi disjuncte: setul starilor autorizate şi cel al starilor neautorizate. În 1976 s-a dovedit ca în cazul unei configuratii arbitrare pentru un mecanism de protecţie arbitrar, securitatea este relativa. Însă, pentru un sistem specific, se poate dovedi dacă se poate trece dintr-o stare autorizata într-una neautorizată.
5. Securitatea multi-nivel
Majoritatea sistemelor de operare permit utilizatorilor individuali sa hoţarasca cine poate citi sau scrie fişierele şi obiectele lor. Aceasta politica se numeste controlul discretionar al accesului. Acest sistem funcţioneaza bine în anumite situatii, dar nu şi în cazul în care este necesar un nivel de securitate mai avansat (in domeniu militar, spitale, departamente ale marilor companii etc). În aceste domenii se folosește controlul accesului delegat.
5.1 Modelul Bell-La Padula
A aparut în 1973, creat de Bell şi La Padula, şi este cel mai raspandit model de securitate multi-nivel. A fost proiectat pentru a gestiona securitatea în domeniul militar, dar s-a raspandit şi în alte zone. Aici, documentele sunt claşificate pe nivele de acces: libere, confidentiale, secrete şi super-secrete (top secret). La fel şi personalul care are acces la ele. Un proces rulat de un utilizator cu un anumit grad de acces, are şi el acelaşi nivel.

Acest model are reguli care gestioneaza modul în care informaţiile sunt accesate:



  1. Proprietatea simpla de securitate: un proces care rulează la nivelul de securitate k poate accesa numai obiecte aflate la nivelul lui sau mai jos.

  2. Proprietatea *: Un proces care rulează la nivelul de securitate k poate scrie numai obiecte la nivelul sau sau mai sus.

Pe scurt, procesele pot citi în jos şi scrie în sus, invers nu. Dacă sistemul implementeaza riguros aceste 2 reguli, atunci se poate demonstra ca nu există nici o scurgere de informaţii de la nivelele mai inalte. Proprietatea * a fost denumita asa din simplul motiv ca autorii nu au gasit un nume mai potrivit pentru ea, şi au pus „*” până la stabilirea unuia (şi * a ramas).

Modelul Bell-La Padula se referă la structura de organizare, dar în final, trebuie întărit de sistemul de operare. O metoda de implementare este alocarea unui nivel de securitate fiecarui utilizator, care sa fie stocat împreună cu informaţiile specifice lui (ca UID şi GID). La logare, shell-ul va prelua nivelul de securitate al utilizatorului. Dacă un proces care rulează la un nivel de securitate k incearcă sa acceseze un fişier sau un obiect aflat la un nivel mai mare de securitate, cererea va fi respinsă.


5.2 Modelul Biba
Singurul avantaj al modelului precedent este acela ca permite păstrarea secretelor, dar nu asigură şi integritatea datelor. Informaţiile false pot urca de la personalul cu nivel de securitate inferior până la cel mai inalt nivel, deci o persoana neautorizată poate induce un grad mare de dezinformare, acordandu-i-se dreptul de scriere la fişierele/obiectele din niveluri mai inalte. Pentru a garanta integritatea datelor, modelul Biba inversează cele doua proprietăți:

  1. Proprietatea integritatii simple: un proces care rulează la un nivel de securitate k poate numai sa scrie obiecte aflate la un nivel inferior (sau la acelaşi nivel). Nu poate scrie în sus.

  2. Proprietatea *: un proces care rulează la un nivel de securitate k poate numai sa citeasca obiecte aflate la un nivel superior (sau la acelaşi nivel). Nu poate citi în jos.

Cele doua modele se afla în conflict direct, deci este foarte dificilă implementarea simultană a avantajelor amândurora.

6. Canalul acoperit – o metoda de a ocoli mecanismele de protecţie
Singura problemă este că toate aceste modele şi sisteme presupuse sigure nu funcţioneaza. Chiar şi într-un sistem care are un model adecvat de securitate implementat şi care este dovedit ca fiind sigur, vor exista scurgeri de informaţii (chiar dacă s-a demonstrat matematic că acest lucru nu este posibil).

In 1973, Lampson a formulat un model pentru un singur sistem care folosește tehnica time sharing, dar aceleaşi idei pot fi adaptate şi pentru LAN-uri şi alte medii cu utilizatori multiplii. În cea mai simpla formă, implica 3 procese care rulează pe o masina protejata. Primul proces doreste ca al doilea sa execute o sarcina, dar cele doua procese nu au incredere unul în celalalt. Exemplu: un client folosește un server care il ajuta sa completeze un formular bancar. Clientul nu are deplina incredere în server, pentru ca acesta poate stoca datele financiare şi trimite cuiva neautorizat. Serverul nu are incredere în client deoarece acesta poate incerca sa fure programul care gestioneaza datele financiare.

A
KERNEL

Client

Colaborator

Server


KERNEL

Client

Colaborator

Server incapsulat


Canal acoperit
l treilea proces este un colaborator, care lucrează împreună cu serverul pentru a fura datele clientului. De obicei, serverul şi colaboratorul aparţin aceluiaşi utilizator. În figura următoare, sunt ilustrate cele 3 procese

FI

FIG 10: Clientul, serverul şi colaboratorul. Serverul are o scurgere de



informaţii prin canal
Din punctul de vedere al proiectantului, scopul este de a incapsula serverul astfel încât sa nu lase colaboratorul sa preia informaţii de la el. Folosind matricea de protecţie, putem usor garanta ca serverul nu poate comunica ci colaboratorul scriind un fişier la care el sa aiba acces. Nici prin mecanismul de comunicare inter-proces nu poate trimite informaţii colaboratorului. Însă există alte canale de comunicaţii mai subtile. De exemplu, serverul poate comunica printr-un stream binar astfel: pentru a trimite un bit 1, va calcula intens pentru o anumită perioada de timp. Pentru a trimite un 0, nu va avea acţivitate o perioada de timp identica.

Colaboratorul poate incerca sa detecteze bitii, monitorizand cu atentie timpii de raspuns. Va primi un raspuns mai bun cand srverul trimite 0-uri, decât atunci cand trimite 1. Acest canal de comunicaţii se numeste canal „ascuns”. Este afectat de zgomot, dar folosind o codare corectoare de erori, se pot transmite fiabil informaţii. Un neajuns al acestui canal ascuns este banda limitata, deci introducerea unei codari ar limita şi mai mult latimea de banda, însă chiar şi asa se obtin suficiente date. Modularea utlizarii CPU nu poate fi eliminata prin mecanisme ca matricea de protecţie.

Şi rata de paginare poate fi modulata (pentru un 1: multe page faults; pentru un 0: 0 page faults). Dacă sistemul permite o blocare a fişierelor, atunci serverul poate bloca unele fişiere pentru a indica un 1, şi debloca pentru a indica un 0. Pe unele sisteme, este posibil ca un proces sa detectese dacă un fişier e blocat sau nu, chiar dacă nu il poate accesa. În figura următoare este exemplificat un astfel de procedeu (se transmite un şir: 10110):

Server





1

0

1

1

0

0

1

1

0

1

Fişier blocat cand se trimite un 1.

Fişier deblocat cand se trimite un 0.


Colaborator



FIG 11: Canal ascuns folosind blocarea unui fişier.
Un alt aspect care poate compromite securitatea unui sistem este factorul uman. Un exemplu graitor: la o mare companie (al carei nume nu a fost facut public) s-a anuntat ca în zilele următoare va soşi o comişie care va evalua securitatea întregului sistem informaţic. Într-o noapte, niste membrii ai comişiei au aruncat cateva stick-uri de memorie USB în parcarea firmei. Dimineata, personalul le-a gasit şi le-au introdus în calculatoare pentru a le verifica. Însă conțineau un virus nou care a reusit sa adune toate parolele în cursul a cateva zile. [6]
Concluzie
Securitatea este un aspect foarte important în domeniu calculatoarelor, mai ales în ziua de astazi, cand majoritatea informaţiilor importante sunt stocate şi prelucrate electronic (nu numai), de la e-mailul personal până la informaţiile bancare şi documentele oficiale (carti de identitate, pasapoarte etc). Majoritatea sistemelor de operare implementeaza mecanisme complexe de protecţie, unele implementate pe baza celor amintite mai sus, altele folosind tehnici mult mai avansate, însă intotdeauna vor există ameninţari care creaza necesitatea inventarii unor metode noi de protecţie.


Bibliografie:


  1. www.wikipedia.com.

  2. http://www.cs.odu.edu/~mukka/cs772f05/Lectures/securitymodels.pdf.

  3. http://www.softpanorama.org/Access_control/Security_models/biba_model.shtml.

  4. nathanbalon.com/projects/cis576/Biba.ppt

  5. Andrew S. Tanenbaum: Modern Operaţing Systems, 3-rd Edition, Editura “Pearson Prentice Hall”, 2008.

  6. Seminar pe probleme de securitate şi metode de protecţie, Galaciuc, 2008.


Partea a II-a. Principalele tipuri de atac la sistem


  1. Atacuri din interiorul sistemului

Spre deosebire de atacurile la sistem survenite din exterior, cele din interior sunt realizate de persoane care fac parte din companii de profil (programatori sau alţi angajaţi) şi care au cunoştinţe avansate asupra sistemului in cauză. In cele ce urmează o să exemplificăm cazurile cele mai intălnite in trecut. Fiecare dintre aceste exemple se deosebeşte prin cine atacă şi ce se urmăreşte prin atacul respectiv.


1.1 Bombe logice

In perioadele de masive disponibilizări chiar şi programatorii incep să-şi facă griji in legătură cu pierderea stabilităţii locului lor de muncă. Câteodată unii dintre aceştia iau in calcul posibilităţi precum şantajul indirect, strategia fiind aplicată prin introducerea in sistem a unor secvenţe de program numite bombe logice. Acestea constau in coduri scrise de actuali angajaţi ai unei companii, introduse in sistem in mod secret. Atâta timp cat programatorul respectiv introduce parola programului zilnic, acesta rămâne inactiv. Astfel, in momentul in care programatorul este inlăturat fara preaviz din sistem şi nu-şi mai introduce parola, bomba logică se activează. Această activare poate avea diferite consecinţe nefaste, conform instructiunilor introduse de creator: ştergerea discului, ştergerea de fişiere in mod aleatoriu, realizarea de schimbări greu de detectat in programe importante, criptare de fişiere. In această situaţie compania este pusă in situaţia dificilă de a contacta poliţia sau de a reangaja programatorul respectiv pentru a face reparaţia necesară contra unuei sume mari de bani. In al doilea caz compania se expune la posibilitatea plantării unor noi bombe, in timp ce in primul caz, riscă să nu găseasca soluţia problemelor create. Câteodata aceste bombe logice sunt programate să acţioneze la un moment dat de timp şi in acest caz vorbim de bombe programate.


1.2 Capcane

O alta metodă de a ataca din interior securitatea sistemului este reprezentată de capcane. Această problemă este creată de un cod introdus in sistem de un programator de sistem care realizeaza de obicei verificări de rutină. De exemplu, un programator poate să adauge cod in programul de logare pentru a lasă să se conecteze la sistem pe oricine cu un id prestabilit de el, indiferent de parola introdusă.


Exemplu:


while(true)

{

v=check_validity(name,password);



if(v) break;

}
while(true)

{

v=check_validity(name, password);



if(v|| strcmp(name, “user”)==0) break;

}


Prima secvenţă de program este cea normală. In a doua, apelând functia strcmp se verifică dacă user-ul introdus este cel presetat de programator. La introducerea id-ului respectiv, logarea se realizează indiferent de parola introdusă.

O posibilitate pentru companii de a prevenii aceste logari este să realizeze periodic verificarea codurilor scrise. O dată ce programatorul a terminat implementarea unui cod acest modul trebuie verificat si stocat intr-o baza de date. Toţi programatorii trebuie să se intâlneasca periodic să-şi explice in faţa celorlalţi codurile realizate, linie cu linie. Aceste măsuri reduc substanţial posibilitatea unor atacuri la sitem de acest tip.


1.3 Colectarea de parole

La acest tip de atac, cel care acţionează este un utilizator legitim care incearcă să obţină parolele de logare a altor utilizatori. Este o tehnică in general intâlnită la organizaţiile ale căror LAN-uri sunt formate din multe calculatoare folosite de useri multiplii. Un exemplu este cazul universităţilor care dispun de săli de calculatoare unde studenţii se pot loga la orice calculator.

Normal, când nimeni nu este logat pe un calculator, in sistemul UNIX de exemplu, apar pe ecran două locaţii unde pot fi tastate id-ul si parola. Când utilizatorul le introduce, acesta se logheaza la calculatorul respectiv.

Putem insă considera si un alt scenariu. Un utilizator rău intenţionat, scrie un program care afişeaza ecranul prezentat mai sus, cu cele două locaţii respective. Când un alt utilizator se logheză cu userul si parola, acestea sunt păstrate intr-un fişier. In acest moment contul utlizatorului rău intenţionat se inchide, iar pe ecran apare mesajul că utilizatorul păgubit a greşit parola. Acesta reincearcă şi de această dată logarea se realizează cu succes, dar parola lui se află şi in posesia altcuiva. Deoarece acum utilizatorul care a folosit programul are 2 parole de logare, acesta continuă in acest fel colectarea de alte parole, acţiunea lui fiind din ce in ce mai rapidă cu cât numărul de calculatoare pe care e logat ilegal si actionează programul respectiv este mai mare.

O soluţie pentru inlăturarea acestui risc este de a implementa inceperea secvenţei de logare cu o combinaţie de taste care nu pot fi implementate prin programe. Windows-ul foloseşte combinaţia CTRL-ALT-DEL in acest scop. In acest caz, când un utilizator incepe logarea prin tastarea acestor taste, userul care era logat (cel rău intenţionat) este automat delogat, mecanismul de logare având in acest fel loc in mod sigur. Această cale nu poate fi ocolită prin niciun fel de alt mecanism.



  1. Expluatarea erorilor conceptuale de program (code bugs)

După ce am studiat modalitaţile in care securitatea poate fi atacată din interior, a venit timpul să studiem cum poate fi atacat sistemul din exterior, in general prin Internet. Majoritatea mecanismelor de atac se folosesc de micile scăpări ale sistemelor de programare sau a aplicaţiilor precum Internet Explorer si Microsoft Office. Scenariul tipic sună in felul următor: cineva descoperă o excepţie la buna funcţionare a unui program si apoi găseşte o cale de a o expluata pentru a compromite calculatoare care rulează codul respectiv.

In următoarea secţiune vom examina câteva metode de atac care folosesc erori de program des intâlnite. La general, o cale de a expluata o astfel de excepţie de funcţionare este dată de următorii paşi:


  • Rularea unei scanări automate de porturi pentru a căuta maşini care acceptă conexiuni telnet.

  • Incercarea de logare prin ghicirea de id-uri si parole.

  • Odată intrat in sistem, se ruleaza programul cu intrări care se folosesc de bug-urile descoperite.

  • Activarea unor programe care ascultă comenzi printr-un port IP.

  • Setarea ca programul să inceapă mereu la incărcarea sistemului.

Acest script poate să ruleze pentru mult timp, existând posibilitatea ca la un moment dat să-şi atingă scopurile.

Alt scenariu des intâlnit este acela când se lanseaza un virus care infectează dispozitive prin intermediul Internetului, expluatând de fiecare data bug-ul când ajung să ruleze pe masini noi. In majoritatea cazurilor programul va rula pe maşina virusată, aproape intotdeauna fără ca proprietarul sa ştie despre prezenţa acestuia.
2.1 Depăşirea capacităţii buffer-ului (buffer overflow)
O sursă de atac este dată de faptul că majoritatea sistemelor si cele mai multe programe de sistem sunt scrise in limbajul de programare C. Din păcate, niciun compilator C nu verifică limitele tablourilor.

Un exemplu este evidenţiat in cele ce urmează:




Fig.2.1. Spaţiul de adrese in cele trei cazuri
In prima figură vedem spatiul de adrese virtuale când rulează programul principal (main) si variabilele sale locale in stivă. La un moment dat este apelată o procedura A, conform celei de-a doua figuri. Secvenţa standard de apelare incepe prin impingerea adresei returnate pe stiva (push). Apoi controlul este transferat procedurii A care decrementează pointerul de stivă pentru a aloca loc de memorare a variabilelor sale locale.

Să presupunem că scopul procedurii A este să achiziţioneze calea către un fişier (file path) şi apoi să-l deschidă pentru a face altceva cu el. A dispune de un buffer B de dimensiune fixă pentru a păstra numele fişierului. Dispunând de un buffer de lungime fixă uşureaza cu mult programarea decât in cazul când s-ar determina mai intâi dimensiunea necesară şi apoi alocarea ei dinamică.

Din păcate acest raţionament are un neajuns. Să presupunem că utilizatorul programului furnizează un fişier al cărui nume e de 2000 caractere. Când acest nume este folosit, acesta nu se va deschide, deoarece in sistemele de operare de obicei numele sunt limitate la 255 caractere. Atacatorul nu este afectat de acest lucru. Când procedura copiază numele fişierului in buffer, dimensiunea numelui depăşeşte capacitatea buffer-ului şi rescrie memorie, lucru ilustrat cu gri in figura a treia. Mai mult, dacă numele este destul de lung, rescrie de asemenea adresa de intoarcere, aşa că intoarcerea in programul principal nu se mai realizează corect, această adresă fiind coruptă. Astfel, execuţia programului va sări la o adresa oarecare şi ulterior va genera erori.

Dar dacă numele fişierului conţine un program valid şi totul a fost bine sincronizat astfel incât adresa de intoarcere să corespundă adresei de start a acestui program ? In acest caz, la terminarea execuţiei procedurii A, nu se va mai continua executarea programului principal ci se va incepe execuţia programului dat ca nume de fişier. Cu alte cuvinte, atacatorul a scris in memorie propriul program si a mijlocit executarea acestuia.

Pe acelaşi principiu se pot folosi şi string-uri lungi, locaţii de introducere de date destinate user-ilor sau orice altceva unde programatorul a creat un buffer fix pentru a manipula string-uri scurte.

Funcţia gets a limbajului C, care citeşte un şir de caractere intr-un buffer fix, este foarte folosită la astfel de atacuri. Unele compilatoare chiar detectează folosirea acestei funcţii si avertizează riscurile existente la implementarea ei.

Un alt exemplu de o gravitate şi mai mare este cazul in care programul atacat este root-ul SETUID din UNIX. Codul inserat poate să faca acum apeluri de sistem pentru a integra codul atacatorului pe disc in root-ul SETUID, astfel incât când acesta este executat sâ aiba drepuri administrative de super user. Din acest moment, atacatorul devine de neoprit: poate schimba biblioteci, să descarce de pe Internet programe si script-uri pe care să le stocheze pe disc si să creeze procese pe care să le ruleze. Aceste procese pot asculta la un port IP specific aşteptând comenzi de afară, maşina devenind un zombi. Pentru a inlătura pierderea acestor disfuncţionalităţi când sistemul este restartat, atacatorul trebuie să seteze ca noile scripturi si programe să fie incărcate odata cu incărcarea sistemului. Acest lucru se realizează foarte simplu atât in sistemele Windows cât şi UNIX.

Majoritatea problemelor de securitate au drept cauză acest lucru şi sunt greu de rezolvat deoarece foarte multe programe in C nu verifică depăşirea capacităţii bufer-ului deşi este o operaţie destul de simplă. Din păcate, faptul că unele programe sunt vulnerabile la un astfel de atac este detectat după ce atacul a fost realizat cu succes.




2.2 Atacuri de tip format string

Unora din programatori nu le place să tasteze mult deşi au capacitatea de a face acest lucru. Nu văd utilitatea folosirii de variabile cu nume lungi când o denumire de doar unul, două caractere poate să-şi atingă la fel de bine scopul. Acest lucru este o aparenţă, deoarece uneori poate duce la erori de sistem catastrofice.

Vom da un exemplu destul de simplu. Considerăm programul C următor:
char *s=”Hello Bug!!!”;

printf(“%s”,s);


Acest cod este corect din toate punctele de vedere. El afişeaza un şir de caractere, funcţia printf având două argumente: formatul de şir de caratere (format string) “%s” si adresa acestuia in memorie, s.
Un alt programator poate scrie acelaşi cod astfel:
char *s=”Hello Bug!!!”;

printf(s);


Acest cod nu va genera eroare dar s in acest caz va fi un format string si nu adresa şirului de caractere. Afişarea unui format string poate rescrie memoria, fiind un alt mecanism de care alţi programatori mai experimentaţi pot profita. Ei pot acum să rescrie adresa de intoarcere a funcţiei printf in stivă şi să sară in alta parte, de exemplu, in noul format string introdus. Această tehnica se numeşte atac de tip format string.

Astfel, incă o data, odata ce programatorul are posibilitatea să rescrie in memorie şi să forţeze salturi la alte noi coduri introduse, programul are toate drepturile pe care programul atacat le avea.


2.3 Atacul la intoarcerea in librăria libc

Cele două tipuri de atacuri prezentate anterior constau in introducerea in stivă de coduri si apoi executarea acestora, execuţia programului principal ne mai având loc. O cale de a combate aceste atacuri este să marcăm paginile stivei ca scrise/citite, dar fără să executam. Unităţile centrale de prelucrare a procesoarelor Pentium moderne pot face acest lucru. Dar există un alt tip de atac care va funcţiona chiar dacă programele din stivă nu sunt executate. Este cunoscut ca fiind atacul la intoarcerea in librăria libc.

Majoritatea programelor in C sunt legate de librăria libc, care conţine funcţiile cheie de care au nevoie aceste programe. O astfel de functie este strcpy care copiază un şir de caractere de la o adresă la alta. Această funcţie poate fi păcălită să copieze codul atacatorului in segmentul de date pentru a fi executat.

In următoarele două figuri sunt reprezentate spaţiul de adrese inainte si după atac.

In prima figură observăm stiva inainte ca programul main să apeleze o functie F. Presupunem că acest program rulează cu privilegii super user si are un bug care poate fi expluatat astfel incât să permită atacatorului să-şi copieze codul in memorie. Se observă că dupa atac in locul adresei de intoarcere in main avem adresa strcpy-ului. Când strcpy se termină, codul va fi copiat in segmentul de date executabil, iar intoarcerea se va realiza tocmai la adresa de inceput a acestui cod. Din acest moment codul copiat va rula cu drepturile programului atacat si poate crea scripturi pentru a monitoriza porturi IP şi să aştepte comenzi. Si in acest caz maşina atacată devine un zombi şi poate fi folosită la transmiterea de spam-uri sau la lansarea atacurilor de tip denial-of-service.

Fig.2.2 Stiva inainte si după atac


2.4 Depăşirea maximului dimensiunii acceptate in biţi a unei variabile de tip Integer

Calculatoarele realizează operaţii aritmetice cu numere de lungimi fixe, in general de 8, 16, 32 sau 64 biţi lungime. Dacă suma a două numere depaşeşte dimensiunea maximă in care poate fi reprezentat un integer are loc ceea ce se numeşte o depaşire (overflow). Programele in C nu detectează acest tip de eroare ci doar stochează şi folosesc această valoare incorectă rezultată.

Acestă inabilitate de a detecta depaşiri numerice poate fi folosită la un eventual atac. O cale de a face acest lucru este să se furnizeze programului ca parametrii 2 numere valide dar foarte mari, ştiind deja că la adunarea lor va rezulta o depăşire.

De exemplu, unele programe grafice, la primirea unei imagini ca parametru, pot converti imaginea respectivă la alte dimensiuni. Dacă dimensiunile dorite sunt gândite pentru a depăşi maximul admis, programul va calcula greşit câtă memorie ii trebuie pentru a stoca imaginea şi va apela malloc pentru a aloca in acest caz un buffer mult prea mic. Ajungem din nou la depăşirea buffer-ului. Expluatări similare pot avea la realizarea sumei sau produsului a doi intregi cu semn +, rezultatul fiind de semn opus.



2.5 Atacuri prin injectare de cod

Este un alt caz când un program ajunge in urma unui atac să execute coduri fără ca cineva să realizeze acest lucru. Să considerăm un program care la un moment dat are nevoie să faca o copie unui fişier:


int main(int argc, char *argv[])

{

char sursa[100], dest[100], aux[205]=”cp”;



gets(sursa);

strcat(aux,sursa);

strcat(aux,” ”);

gets(dest);

strcat(aux,dest);

system(aux);

}
In acest cod comanda cp este realizată prin intermediul funcţiei system, care la primirea parametrului cp, il execută ca pe o comandă. Dacă utilizatorul furnizează ca sursa „fis1” şi ca destinaţie „fis2”, comanda executată este următoarea: cp fis1 fis2, care copiază conţinutul fişierului fis1 in fis2.

Din păcate acest program poate mijloci ceea ce se numeşte tehnica injectării de cod. Să presupunem că user-ul foloseşte acest program şi introduce ca prim parametru „fis1” iar ca al doilea „fis2; rm –rf/”. Comanda construita şi executată in acest caz va fi:

cp fis1 fis2; rm –rf/

Aceasta in prima fază copiază fişierul fis1 in fis2, dar apoi incepe să şteargă recursiv fiecare fişier şi director din sistem, prin inermediul celei de-a doua comenzi introduse rm -rf/. Dacă programul rulează cu drepturi de super user, atacul se va realiza cu succes, ştergând fişierele sistemului.




  1. Malware

Precursorii acestui tip de programe au fost tinerii pasionaţi de domeniul IT care incepând cu anii ’90 au inceput să le dezvolte şi să le răspândească in lume. Acest tip de software, care include cai Troien, viruşi, viermi, au fost incadraţi in categoria malware (programe malicioase) şi sunt foarte răspândiţi in lume in zilele noastre.

La inceput aceste programe nu au fost scrise cu scopuri precise sau in aşteptarea unor remuneraţii, deşi pierderile materiale şi de date erau la fel de mari. In limba engleza, faptul că acest software era scris mai mult in glumă, fără anumite scopuri, s-ar traduce “just for the heck of it”, de unde a apărut denumirea programatorilor care se ocupau de aceste lucruri ca fiind heckeri.

Momentan lucrurile s-au schimbat, aceste programe fiind scrise la cerere, contra unor sume mari de bani. Majoritatea sunt concepute astfel incât să se imprăştie foarte repede pe Internet şi să infecteze cât mai multe maşini. Când o maşina este infectată, software-ul instalat furnizează adresa acesteia altor maşini, care de obicei se află in tări cu sisteme judiciare corupte. Pe maşina infectată este de asemenea instalată o aplicaţie de tip backdoor care permite celor care au furnizat malware-ul să comande respenctiva maşină. O astfel de maşină infectată se numeşte zombi, iar mai multe astfel de maşini formeaza o colecţie numita botnet, o prescurtare de la „robot network”.

O altă aplicaţie care poate fi instalată pe o maşină infectată este una de tip keylogger. Acest program inregistrează tot ceea ce s-a tastat la maşina respectivă, lucrurile vizate in mod special fiind: numerele si codurile de identificare ale cărţilor de credit, date despre persoane pentru a fi utilizate la furturi de identitate.

Malware-urile sunt folosite şi in industrie pentru a diminua competiţia prin acţiuni de sabotaj.

După aceste câteva exemple, ne punem incă intrebarea de ce acest soft se răspândeşte atât de repede. Motivele sunt numeroase. 90 % din computerele din lume ruleaza un singur sistem de operare, Windows, care este usor de infectat tocmai prin natura lui user-friendly. In schimb, daca pe piaţă ar exista 10 sisteme de operare fiecare in proportie de 10%, răspândirea de malware care să funcţioneze in cazul acestei diversificări ar fi drastic redusă.

In continuare vom studia principalele tipuri de malware, cum sunt implementate si cum se răspândesc. Mai departe, in secţiunea a treia vom examina metodele prin care ne putem proteja contra acestor atacuri.


3.1 Cai Troieni

O metodă clasică de implementare a programelor malicioase este de a scrie programe foarte utile, care includ si cod malware. In acest fel oamenii vor downloada si instala aceste programe in mod voluntar, neştiind că odata cu software-ul respectiv işi infecteaza calculatorul. Acest soft poarta numele de cal Troian prin analogie cu celebrul episod descris in Odisea lui Homer.

Când programul instalat este executat, se apelează o funcţie care scrie malware-ul pe disc pentru a-l executa. Din acest moment, programul instalat poate realiza ceea ce a fost programat să faca: să şteargă, să modifice sau să encripteze fişiere, să caute numere de carţi de credit, parole, sau alte lucruri care pot fi folosite in mod ilegal. Mai mult, malware-ul realizează comenzile necesare pentru a asigura existenţa lui şi după restartarea calculatorului.

Aplicabilitatea acestui tip de atac constă in faptul că autorul nu trebuie să facă nimic pentru a infecta calculatorul altor useri. Utilizatorii işi infectează singuri calculatorul.

O altă modalitate de infectare este aceea in care caii Troieni sunt inseraţi in directoare complicate, accesate foarte rar, numele lor fiind reprezentate de erori de comenzi foarte uzuale. Sansa ca cineva să comita o astfel de eroare este destul de mare. In cazul cel mai rău, daca un super user realizează această comanda greşită malware-ul se activează, având drepturi depline asupra maşinii. Cele mai multe programe se află in /bin sau /usr/bin. Să presupunem căprogramatorul rău intenţionat introduce la in /usr/bin/X11 in care se află şi comanda foarte folosită ls. Dacă un user tastează la in loc de ls, programul la se activeaza, işi realizează scopul, iar apoi semnalează ca la nu este o comandă validă.

Aceste exemplificări nu sunt simple supoziţii, ci fac parte din intâmplări adevărate care au dus la numeroase pierderi materiale, de date sau de identitati.

Exemplu:

Keyloggerii sunt cei mai simpli troieni. Singura operaţie pe care o realizează este aceea de a inregistra fiecare tastă apasată de victima. In majoritatea cazurilor aceşti troieni repornesc de fiecare dată când se incarcă Windows-ul. Prezintă posibilitatea de a lucra atât in mod online cât şi in mod offline. In modul online ei inregistrează si trimit in mod direct informaţia. Modul offline este activat in momentul in care victima nu mai este conectată la reţea (internet), informaţia inregistrată fiind salvată pe harddisk-ul victimei asteptând să fie transferată.

Ca exemplu , Blue Pill si tehnica de detectare a acestuia, Red Pill. Denumirile acestora sunt date in analogie cu conceptele prezentate in Matrix si anume, daca se aleagea pastila albastra omul isi continua viata in Matrix fara sa stie ca aceasta este de fapt o iluzie (sistemul e compromis) iar daca alegea pe cea rosie, adevarata lume iesea la iveala, adica keylogger-ul este detectat si neutralizat.




3.2 Viruşi

Virusul este un program care se autoreproduce prin ataşarea codului său altui program, analog viruşilor biologici. El poate fi scris in orice limbaj de programare (de exemplu, assembler, C) ş i apoi este inserat intr-un program folosind un utilitar numit dropper. Programul infectat rezultat este apoi distribuit pe Internet, mai ales prin colecţiile de software free. Programul poate fi un joc, o versiune piratată a unui soft comercial căutat sau orice altceva care poate fi căutat, dorit de alţi utilizatori. Astfel acest program infectat este downloadat.

Odată instalat pe maşina victimei, virusul nu actionează până când programul respectiv nu este executat. La execuţie, el incepe prin infectarea altor programe instalate pe maşina respectivă dar nu acţioneaza decât după o perioadă de timp când o mare parte din aplicaţiile sistemului respectiv sunt corupte.

In continuare vom examina pincipalele 7 categorii de viruşi, clasificarea fiind făcuta după tipul aplicaţiilor afectate: viruşii companioni, viruşii care infectează programe executabile, cei care atacă memoria, sectorul de boot si driver-ele, macro viruşii şi viruşi de tip cod sursă.


Viruşii companioni nu infectează propriu-zis programe dar rulează in acelaşi timp cu programul respectiv.

Pentru e explica conceptul mai usor propunem urmatorul exemplu: in MS-DOS când un utilizator tasteaza prog , MS-DOS prima dată caută un program numit prog.com. Dacă nu-l găseşte, caută un altul numit prog.exe. In Windows se intâmplă acelaşi lucru când tastăm Start si apoi Run. Doar că in zilele noastre majoritatea programelor au extensia .exe, fişierele de tip .com fiind foarte rare. Astfel deoarece extensia .com incă are intâietate când se apelează un program la linia de comandă, un programator poate profita de acest lucru pentru a denumi virusul cu numele prog.com. Astfel, de fiecare dată când cineva va dori să ruleze prog, mai intâi va fi executat virusul. D-abea apoi prog.exe va fi executat , dar utilizatorul nu va ştii că a apelat şi alt program in paralel cu comanda prog.

Un alt exemplu este legat de folosirea unor prescurtări in Windows pentru a apela programe. Virusul poate schimba scopul acestor prescurtări, realizându-se astfel apelul unor viruşi şi nu a aplicaţiilor dorite. După ce exectuţia virusului s-a terminat, aplicaţia dorită va fi şi ea apelată.
Viruşii care afectează executabilele

Aceşti viruşi sunt mai complecşi. Cel mai simplu realizat practic rescrie programul executabil cu propriul cod. Se mai numesc şi viruşi de suprascriere. Aceşti viruşi au codul relativ redus (fişiere text de capacitate mai mică de 2KB). Ludwig a publicat in 1998 un cod in assembler complet pentru MS-DOS care infectează toate fişierele, in această versiune asamblată având numai 44B.

Este interesant de ştiut că antiviruşii (programele care depistează şi indepărtează viruşii) folosesc logica virusilor de a găsi fişierele executabile şi a le infecta, când depistează programele corupte pentru a indeparta codurile malicioase. Astfel, putem spune că este necesar să intelegem in detaliu cum funcţioneaza viruşii pentru a fi capabili să-i inlăturăm.

Din punctul de vedere al programatorilor rău intenţionati, această tehnică este prea uşor de detectat deoarece user-ul va sesiza instantaneu schimbările. Scopul lor este să găseasca metode ca viruşii să lucreze in paralel cu programele de drept pentru a nu trezi imediat suspiciuni. Aceşti viruşi se mai numesc si paraziţi.

Viruşii paraziţi se pot ataşa la inceputul, la sfârşitul sau in interiorul unui program executabil. In următoarea figură sunt prezentate cele trei tipuri.

Dacă un virus se ataşează la inceput (front loader), el trebuie mai intâi să copieze programul respectiv in RAM, să se autoinsereze la inceput si apoi să recopieze tot din RAM. Pentru a evita aceste manevre complexe, cei mai folosiţi viruşi sunt cei back loaders, adică cei care se ataşează la sfârşitul executabilului.



Fig.3.1 Cele trei tipuri de viruşi paraziţi
Formatele programelor executabile complexe, precum fişierele .exe in Windows, permit programului să aibă segmente multiple de date sau de text. La acest sistem de operare toate segmentele sunt multiplii de 512B. Nu toate aceste segmente sunt pline, iar unii viruşi incearcă să se ascundă in locurile libere. Aceşti viruşi se mai numesc şi viruşi de cavitate.

Viruşii rezidenţi in memorie

Acest tip de virus rămâne in memoria RAM tot timpul, ascunzându-se la capătul superior al ei sau la bază, unde se află un spaţiu de câteva sute de B care in general rămân nefolosiţi. Un virus evoluat poate induce in eroare bitmap-ul memoriei RAM făcând sistemul să creadă că intr-adevăr locaţiile de memorie unde rezidă virusul sunt ocupate, pentru a inlătura posibilitatea unei rescrieri a acestuia.


Viruşii sectorului de boot

La deschiderea unui calculator BIOS-ul incarcă inregistrarea master boot din discul de bootare in RAM şi o execută. Acest program determină care partiţie este activă şi citeşte in sectorul de boot din acea partiţie după care o execută. De aici a venit ideea creării unui virus care să rescrie acea inregistrare master boot, rezultatele fiind dezastroase. Aceşti viruşi sunt acum foarte comuni.

In mod normal, un astfel de virus copiază prima data adevăratul sector de boot intr-un loc sigur pe disc, pentru a putea boota sistemul de operare după terminarea sarcinilor sale. Când sistemul este restartat virusul se autocopiaza pe RAM, fie la inceputul sau la sfârşitul memoriei. In acest moment maşina este in modul de lucru kernel, pe ea nerulând nicun sistem de operare si niciun program antivirus. Acesta este momentul propice să actioneze.

O problema pe care o are este insă cum să preia controlul şi mai târziu. Metoda obişnuită este să expluateze datele disponibile in legătură cu felul in care sistemul de operare lucrează cu vectorii de intreruperi.


Viruşii pentru drivere

Driverele sunt un tip de program executabil care rezidă pe disc şi sunt incărcate la bootare. Dacă unul dintre ele este infectat, virusul va fi mereu oficial incărcat odată cu incărcarea sistemului de operare.


Macro viruşi

Multe programe precum Word şi Excel permit utilizatorilor să folosească macrocomenzi, adică la o combinaţie de taste să fie executate un grup de comenzi. In Microsoft Office o singură macrocomandă poate duce la executarea unui intreg program in Visual Basic. Aceste comenzi sunt stocate odată cu documentele căruia ii aparţin.

Probleme pot apărea in momentul in care cineva scrie un document Word şi creează o macrocomandă pe care o ataşeaza functiei OPEN FILE. Aceasta conţine un macro virus. Acest document este trimis prin e-mail victimei care il va deschide. Deoarece macrocomanda poate conţine un program, ea poate să infecteze alte documente Word, să ştearga fişiere şi multe altele.

In mod curent, Word-ul dă un mesaj de avertizare când trebuie să deschidă un fişier care are ataşate marocomenzi, dar foarte mulţi utilizatori nu inţeleg importanţa acestei avertizări şi deschid fişierul.

Aceşti viruşi sunt foarte uşor de scris, ceea ce evidenţiază de asemenea problema scrierii de viruşi de cât mai mulţi oameni care nu au legatură neapărat cu lumea IT-ului.
Viruşii de tip cod sursă sunt cei mai portabili viruşi. Ei caută programe in C pentru a introduce două linii de cod - calea lor de acces. Infectarea se produce prin inserarea liniei #include la inceputul fiecărui program C. Mai este inserată şi instrucţiunea de apelare a virusul in interiorul programului: run_virus(); . Odată apelat, programul poate face orice a fost proiectat, in principal să răspândească infectarea şi la celelalte programe C.
Ca o concluzie la acest subcapitol dedicat viruşilor vom pune in evidenţă principalele modalităţi de răspândire a acestora.

Scenariul clasic de răspândire a unui virus conţine mai multe etape: codul virusului este scris, apoi este inserat in alt program de interes pentru alţi utilizatori şi postat pe un site de descărcare de soft fără licenţă. Eventual cineva va descărca acest program şi-l va instala. Pentru inceput virusul va infecta cât mai multe fişiere de pe hard, pentru a facilita şi mai mult răspândirea in cazul in care această victimă va trimite unul dintre aceste fişiere altor utilizatori.

Există şi alte posibilităţi de răspândire. Virusul poate fi conceput să verifice dacă maşina deja afectată se afla conectată la un LAN. Tocmai prin această legatură virusul poate să afecteze fişiere de pe toate serverele conectate la LAN-ul respectiv. Unii dintre useri pot avea instalate programe de protecţie şi vor anunţa administratorii reţelei. Dacă administratorul va inspecta problema fiind logat ca super user , toate maşinile din reţea vor fi afectate.

De multe ori, calculatoarele legate intr-o retea LAN au autorizaţie să se logheze la distanţă la alte maşini. Acest lucru oferă şi mai multe oportuniţăţi viruşilor să se răspândească, o mica greşeală ducând la infectarea intregii companii.

Legată de imprăştierea actualilor viruşi este şi răspândirea tehnologiei de a concepe viruşi. Există grupuri de arhitecţi de viruşi care lucrează impreună pentru a crea noi tehnologii de virusare. Pentru mulţi acest lucru este poate doar un hobby dar rezultatele sunt la fel de devastatoare. O altă categorie de scriitori de malware fac parte din armată. Ei văd viruşii ca pe o armă intr-un poteţial război, folosită la distrugerea calculatoarelor inamicului.

Despre viruşi se pot discuta multe lucruri şi o sa revenim asupra lor in partea a treia, când vom dicuta despre tehnicile de protecţie contra acestora.


3.3 Viermi

Prima violare a securităţii a avut loc in anul 1988, când un student absolvent la Cornell, Robert Tappan Morris a răspândit un vierme prin intermediul Internetului. Acest program a distrus calculatoare din universităţi, corporaţii şi laboratoare guvernamentale din toata lumea până a fost depistat si indepărtat. Când a fost desoperit, Morris a fost judecat de curtea federala. Ulterior şi-a dat doctoratul la universitatea Harvard şi momentan este profesor la M.I.T.

Povestea incepe cândva in acelaşi an când Morris a descoperit două erori conceptuale in UNIX-ul Berkeley de care se putea folosi pentru a câştiga accesul neautorizat la maşini de oricunde conectate la Internet. De unul singur, el a scris un program care se auto-replica in câteva secunde in fiecare maşină infectată.

La fel ca şi cei biologici, viruşii de obicei călătoresc în spinarea altor programe, care forţează celulele organismului gazdă să-I multiplice. Programul cel nou era însă autonom şi de aceea a fost numit vierme: era un organism de sine-stătător, capabil să se multiplice şi să atace de la sine alte calculatoare.


Cercetătorii au atacat viermele prin mai multe metode:
• au început să-l dezasambleze şi să descifreze instrucţiunile din care era compus.
• au creat maşini-capcană pe care să le infecteze, care înregistrau o mulţime de detalii despre ceea ce se petrecea cu ele insele.
• au creat maşini-mutant pe care le paralizau parţial, pentru a descoperi care sunt serviciile de care viermele are nevoie pentru a se putea multiplica.

Viermele era construit din două programe: bootstrap-ul şi worm proper-ul. Primul era alcătuit din 99 de linii de cod in C numit l1.c. Era compilat şi executat de sistemul atacat.

Odata rulat, făcea conexiunea cu maşina de unde venise, incărca viermele principal şi-l executa. Incercând in acelaşi timp să -şi ascundă existenţa, viermele căuta in tabelele de rutare ale victimei alte maşini in care se putea răspândi:

• intâi incerca să se transfere intre calculatoare pe care acelaşi utilizator avea conturi diferite şi intre care utilizatorul işi configurase acces fără parole (folosind fişierele .rhosts).


• dacă nu reuşea folosind acest mecanism, incerca să folosească o slabiciune din programul send mail, care şi la ora actuală este cel mai folosit program pentru procesarea poştei electronice. Pe multe calculatoare send mail era instalat si compilat cu o configuraţie de depanare, care permitea executarea unor comenzi de la distanţă.
• viermele exploata un bug din implementarea programului finger, care este folosit in
mod normal pentru a vedea cine lucrează pe un calculator la distanţă. Viermele expluata pentru prima oară un tip de bug care este la ora actuala extrem de folosit de alte malware de acelaşi gen si despre care am mai discutat şi anume buffer overflow. Viermele trimitea programului finger, care primeşte întrebări despre
utilizatori prin reţea, un nume de utilizator foarte lung, care depăşea memoria alocată pentru recepţia mesajului. Numele era atât de lung incât suprascria stiva programului şi modifica valoarea salvată a registrului PC. Aceasta cauza un salt la o adresă dinainte stabilită, aflată in numele foarte lung, unde viermele conţinea codul care prelua controlul.
• odată instalat pe un calculator, viermele încerca să decripteze unele din parolele utilizatorilor folosind un dicţionar de parole obişnuite, pentru a pune mâna pe noi conturi din care să re-atace folosind prima metodă.
• Viermele se propaga in două etape pe un nou calculator pe care-l infecta: intâi trimitea un scurt program scris în C, care era compilat pe maşina locala, care apoi aducea şi restul viermelui, care consta în module pre-compilate pentru Sun si VAX.
• in plus, in interiorul viermelui toate şirurile de caractere (inclusiv comenzile pe care viermele le lansează in execuţie şi dictionarul de parole inclus) erau “ascunse”.
Viermele nu efectua acţiuni distructive, cum ar fi ştergerea de fişiere sau instalarea de conturi ascunse: singurul efect negativ provenea din faptul că maşinile erau infectate in mod repetat şi repede, deci nu făcea altceva decât să execute copii ale viermelui.
O varietate de alţi viermi au fost concepuţi de atunci, in general după acelaşi principiu, doar că expluatează alte bug-uri de sistem. Aceştia tind să se răspândească mult mai repede pentru că faţă de alţi malware ei se pot mişca independent odată lansaţi.
Tipuri de viermi:
Viermii care se transmit prin e-mail E-mail-ul este una din cele mai folosite metode de imprastiere a viermilor. De obicei, este sub forma unui e-mail cu atasament (o poza sau un fisier text), iar cand utilizatorul ruleaza acest atasament, viermele va infecta calculatorul. Dupa ce calculatorul este infectat, viermele va incerca sa gaseasca alte adrese de e-mail pe calculator (de obicei in fisierele de configurare ale clientilor de e-mail) si se va trimite automat la toate adresele pe care le gaseste, pornind astfel un nou ciclu.
Viermii care se transmit prin IM (Internet Messaging) Viermii care se transmit prin IM se vor imprastia folosind clienti de IM (Yahoo, MSN, AOL.).
Ei actioneaza trimitind tuturor celor din lista celui infectat un link spre un fisier infectat sau spre un site. Cand este dat click pe linkul respectiv, viermele este downloadat si rulat. Astfel se va infecta calculatorul respectiv. Viermele va incepe sa scaneze lista de contacte a calculatorului respectiv, trimitand acelasi link la toti cei din lista, pornind astfel un nou ciclu.
Viermii care se transmit prin Internet Exista posibilitatea infectarii cu un vierme doar fiind conectat la Internet. Unii viermi cauta calculatoare vulnerabile (fara update-uri de securitate, fara firewall). Odata gasit un calculator vulnerabil, va incerca sa se copieze si sa se instaleze pe acesta.
Viermii care se transmit prin retea Sunt viermi care se copiaza automat intr-un director care este vizibil in reteaua locala (share), si se redenumeste automat astfel incat sa atraga atentia, fiind apoi downloadat de catre utilizatorii din retea. Utilizatorii care cred ca downloadeaza o oarecare aplicatie, se vor infecta cu acel vierme.
Viermele Cuebot-K Sistemul antipiraterie creat de Windows, Windows Genuine Advantage (WGA), era acuzat de catre utilizatori ca fiind de fapt o forma de
spyware. Microsoft a incercat sa rezolve problema creand o versiune noua a programului, lucru de care au profitat programatorii de virusuri creand viermele Cuebot-K. Acest program din 2006 a aparut pe net pretinzand ca este noua versiune Microsoft. Se lansa singur cand deschideai computerul si afisa mesaje cum ca dezinstalarea lui va face computerul sa se blocheze. Dar ce facea cel mai rau, era sa deschida o usa din spate (backdoor) prin care hackerii puteau sa corupa sistemul.

3.4 Spyware

Acest tip de malware este şi el instalat in calculatorul victimei fără ştiinţa acestuia, lucrează in background-ul sistemului. Termenul de spyware este in general greu de definit fără a ne păcăli asupra adevăratei lui semnificaţii.

Barwinski şi echipa sa au hotarat in 2006 că această categorie de soft are patru principale caracteristici. In primul rând, este un soft inteligent care se ascunde si nu poate fi uşor depistat de către victimă. In al doilea rând, el colectează date despre utilizator, precum pagini web vizitate, parole, cărţi de credit folosite. Mai mult, el comunică datele colectate la distanţă, celui care la inserat in reţea. Nu in ultimul rând, el se lupta să reziste incercărilor repetate de eliminare.

Tot Barwinski şi echipa sa i-au catalogat in trei categorii:



  • de tip marketing: doar colectează informaţii pe care le trimite inapoi la sursă.

  • de supraveghere: de exemplu unele companii instaleaza spyware pe calculatoarele angajaţilor pentru a-i monitoriza şi a vedea ce pagini web accesează.

  • spyware clasic care o dată ce a infectat o maşină aceasta devine zombi, fiind coordonată din afara sistemului.



Actiuni tipice ale spyware-ilor:

  • schimbă home page-ul browser-ului

  • modifică paginile favorite

  • adaugă noi instrumente

  • schimbă motorul de căutare setat de user

  • adaugă noi iconiţe pe desktop

  • inserează reclame in cutiile de dialog standard ale Windows-ului

  • generează şiruri lungi de pop-up care se deschid.



  1. Concluzii

Computerele conţin de cele mai multe ori date valoroase precum numere de cărţi de credit, planuri de afaceri şi multe altele pe care proprietarii incearcă sa le protejeze. O cale este de a folosi criptarea şi parolarea acestora.

In toate sistemele cu securitate ridicată fiecare user se autentifică inaintea accesării oricărui sistem. In prima parte am exemplificat cum chiar aceşti useri pot cauza neplăceri din interiorul sistemului.

Am văzut de asemenea cum pot fi din interior expluatate diferitele bug-uri de sistem şi la ce riscuri se expun utilizatorii care nu acorda atenţie protecţiei atunci când accesează pagini de internet.

In următoarea parte o sa vedem metodele de protecţie dar şi posibilităţi de autoprotecţie a sistemelor.


Yüklə 318,29 Kb.

Dostları ilə paylaş:
1   2   3   4




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin