ELABORAREA UNUI SISTEM DE ANALIZĂ PRIMARĂ STATICĂ ȘI [628243]
ROMÂNIA
MINISTERUL APĂRĂRII NAȚIONALE
ACADEMIA TEHNICĂ MILITARĂ
“FERDINAND I”
FACULTATEA DE SISTEME ELECTRONICE ȘI INFORMATICE
MILITARE
Specializarea: Calculatoare și sisteme informatice pentru apărare și
securitate națională
Elaborarea unui sistem de analiza primară statică și dinamică a
mostrelor de malware
CONDUCĂTOR ȘTIINȚIFIC:
Lect. Dr. Ing Alin PUNCIOU
ABSOLVENT: [anonimizat] ___________ file
Inventariat sub nr_______
Poziția din indicator: ____
Termen de păstrare: _____
BUCUREȘTI 2018
NECLASIFICAT
NECLASIFICAT
Page 1 of 97
APROB
DECANUL FACULTĂȚII DE
SISTEME INFORMATICE ȘI
SECURITATE CIBERNETICĂ
Col. Prof. Univ. Dr i ng
Ion BICA
TEMA Nr 69
a proiectului de licență aparținând student: [anonimizat],
specializarea CALCULATOARE ȘI SISTEME INFORMATICE PENTRU
APĂRARE ȘI SECURITATE NAȚIONALĂ
cu tema:
„ELABORAREA UNUI SISTEM DE ANALIZĂ PRIMARĂ STATICĂ ȘI
DINAMICĂ A MOSTRELOR DE MALWARE”
DETALII:
1. PRECIZĂRI ȘI DATE INIȚIALE:
Tendința de creștere a amenințărilor cibernetice din mediul online este
direct proporțională cu avansul tehnologic în ceea ce privește mecanismele de
asigurare a unui minim de protecție a cetățenilor, spațiul cibernetic fiind mereu
animat de cursa continuă dintre atacatori și cei care sunt afectați de aceste atacuri.
Datorită gradului mare de accesibiitate la tehnologii moderne, precum și evoluției
ascendentă în ceea ce privește nivelul de sofisticare al atacurilor, criminalitatea
cibernetică a ajuns la un nivel foarte ridicat, acest lucru având ca punct de plecare
utilizatori (grupuri de utilizatori) rău intenționați care încearc ă să obțină access la
informații confidențiale/clasificate, atât ale unor persoane fizice cât și juridice, dar
și ale unor enități publice civile și militare, prin intermediul aplicațiilor de tip
malware.
Pentru a detecta în mod eficient fișiere malițioas e, soluțiile actuale pot
utiliza combinații de tehnici avansate de evaluare a amenințărilor, care includ
verificarea în timp real a indicatorilor de compromitere, analiza statică a codului
sursă, a fișierului suspect pentru detecția de comportament anormal , de scripturi
NECLASIFICAT
NECLASIFICAT
Page 2 of 97
ofuscate sau bucăți de cod care fac trimitere către alte domenii web cu conșinut
nociv. Mai mult decat atât, unele soluții includ o analiză dinamică a fișierelor care
tranzitează rețeaua și/sau domeniilor identificate în trafic, prin detonar ea acestora
în interiorul uei mașini de analiză (sandbox), fiind observate modificările la
nivelul sistemului țintă și astfel actualizate mecanismele de detecție în timp real.
Proiectul iși propune să studieze stadiul actual al realizărilor din domeniu,
să identifice și sp descrie metodologia/metodologiile aplicate pentru analiza unei
aplicații malițioane, static și dinamic, pentru a obține următoarele rezultate:
– să poate fi estimat numărul de mașini infectate ceea ce se traduce prin
evaluarea impactului;
– vectorul de infecție și metoda de exploatare, care ne prezintă cât de
avansată este amenințarea, precum și dacă este un atac direcționat sau
comun;
– care sunt indicatorii de compromitere specifici acestei amenințări care
se transpune în implementarea unor r estricții/măsuri eficiente în mediul
de lucru.
2. MEMORIUL TEHNC VA CONȚINE
A) Introducere
– motivația lucrării
– obiectivele lucrării
– structura pe capitole, etc.
B) Metode și instrumente de analiză statică
– prezentarea conceptului de analiză de malware
– descrierea metodelor de analiză statică
– descrierea instrumentelor existente utilizate pentru
efectuarea unei analize statice
C) Metode și instrumente de analiză dinamică
– descrierea metodelor de analiză dinamică
– descrierea instrumentelor existente utiliz ate pentru
efectuarea unei analize dinamice
D) Platforma de analiză
– prezentarea tehnologiilor utilizate
– detalierea modului de funcționare al aplicației
E) Concluzii și perspective
NECLASIFICAT
NECLASIFICAT
Page 3 of 97
– evidențierea contribuțiilor aduse la lucrare
– descrierea unor direcții viitoare de cercetare
F) Bibliografie
-motivația lucrării
-obiectivele lucrării
-structura pe capitole, etc.
3. LUCRĂRI GRAFICE DE ÎNTOCMIT:
-Scheme bloc și diagrame;
-Codul sursă al modulelor dezvoltate.
4. BIBLIOGRAFIE:
-Resurse di sponibile pe Internet.
5. PRACTICA DE DOCUMENTARE:
-Academia Tehnică Militara „Ferdinand I” București
6. CONDUCĂTOR ȘTIINȚIFIC:
Alin PUNCIOIU
7. DATA PRIMIRII PROIECTULUI:
8. DATA PREDĂRII PROIECTULUI:
DIRECTOR UL DEPARTAMENTULUI DE CALCULATOARE
ȘI SEC URITATE CIBERNETICĂ
Lt. Col. Prof. Univ. Dr. Ing.
Mihai TOGAN
NECLASIFICAT
NECLASIFICAT
Page 4 of 97
ABSTRACT ………………………….. ………………………….. ………………………….. ………………………….. …………………… 5
ABREVIERI ………………………….. ………………………….. ………………………….. ………………………….. …………………… 6
REZUMAT ………………………….. ………………………….. ………………………….. ………………………….. ……………………. 7
A. INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. ………. 8
1. PREZENTARE GENERALĂ ………………………….. ………………………….. ………………………….. ………………………… 8
2. ISTORIA VIRUȘILOR ………………………….. ………………………….. ………………………….. ………………………….. .. 14
3. IMPORTANȚA TEMEI ………………………….. ………………………….. ………………………….. ………………………….. . 24
4. TIPURI DE MALWARE ȘI ATACURI CIBERNETICE ………………………….. ………………………….. ………………………….. . 27
B. STUDIU ACTUAL ………………………….. ………………………….. ………………………….. ………………………….. ……… 33
1. SOLUȚII SIMILARE ………………………….. ………………………….. ………………………….. ………………………….. ……… 33
2. ANALIZA DE BAZĂ A MAL WARE ………………………….. ………………………….. ………………………….. …………………… 37
C. FOMATUL FIȘIERELOR Ș I COD MAȘINĂ ………………………….. ………………………….. ………………………….. .. 42
1. FORMATUL PE ………………………….. ………………………….. ………………………….. ………………………….. ……. 42
2. FORMATUL ELF (EXECUTABLE LINKABLE FORMAT ) ………………………….. ………………………….. …………………….. 47
3. ELEMENTE DE BAZĂ ALE LIMBAJULUI DE ASAMBL ARE………………………….. ………………………….. ……………………. 48
3.1 Regiștrii microporcesorului ………………………….. ………………………….. ………………………….. ……… 48
3.2 Instrucțiuni de bază ………………………….. ………………………….. ………………………….. ……………….. 49
D. METOD E DE ANALIZĂ ………………………….. ………………………….. ………………………….. ……………………….. 51
1.A NALIZA STATICĂ MALWA RE ………………………….. ………………………….. ………………………….. ………………………. 51
1.1. Recunoașterea construcțiilor de cod assembly asociate limbajului C ………………………….. …………….. 51
1.2.Convenții ale apelurilor de funcții ………………………….. ………………………….. ………………………….. …… 56
1.3.Folosirea unor application binary interface în fișierele malițioase ………………………….. …………………. 58
1.4. Diferența dintre modul user și modul nucleu în analiza malware ………………………….. …………….. 59
1.5 Mecanisme de persistență ………………………….. ………………………….. ………………………….. ………. 60
2.A NALIZA DINAMICĂ MALWA RE ………………………….. ………………………….. ………………………….. ……………………. 61
2.1 Debugging ………………………….. ………………………….. ………………………….. ………………………….. …….. 61
2.2 Analiza dinamică folosind emulatoare ………………………….. ………………………….. …………………………. 64
E. METODE DE PROTECȚIE ÎMPOTRIVA ANALIZEI ………………………….. ………………………….. ………………….. 65
1. ANTI-DEBUGGING ………………………….. ………………………….. ………………………….. ………………………….. … 65
2. METODE ANTI DEZASAMBL ARE ………………………….. ………………………….. ………………………….. ………………. 67
3. METODE ANTI -VM………………………….. ………………………….. ………………………….. ………………………….. … 69
4. TEHNICI DE OBFUSCARE A CODULUI . POLIMORFISM ȘI METAMORFISM ………………………….. ………………………….. .. 70
F. PRACTICĂ ………………………….. ………………………….. ………………………….. ………………………….. …………… 73
1. PREZENTARE APLICAȚI E ………………………….. ………………………….. ………………………….. ……………………….. 73
2. FUNCȚIONALITĂȚI ȘI IM PLEMENTARE ………………………….. ………………………….. ………………………….. ………… 77
G. CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …………. 88
1. PROBLEME ÎNTÂMPIN ATE LA IMPLEMENTARE ………………………….. ………………………….. ………………………….. . 88
2. REZULTATE OBȚINUTE ȘI ÎMBUNĂTĂȚIRI ALE AP LICAȚIEI ………………………….. ………………………….. ………………… 89
3. CONCLUZIA FINALĂ ………………………….. ………………………….. ………………………….. ………………………….. .. 90
4. BIBLIOGRAFI E ………………………….. ………………………….. ………………………….. ………………………….. ……… 91
NECLASIFICAT
NECLASIFICAT
Page 5 of 97
Abstract
In this thesis I tried to combine theoretical informations about the static and
dynamic analysis of malicious files as well as the practical knowledge that a
malware analyst needs. Practical notions were explained from an analyst`s point
of view and also from an atacker`s point of view because it is important to
understand how they think. There were used knowledge from all domains of
computer s cience for a medium level. Beside these facts the thesis contains
explained elements that were used for developing an automated system for
malware detection and for taking out the information.
The necessity of the system appeared as a result of a case stuy with 100
people which work in different domains, but not those who have advanced
knowledge in computer science. Based on the study, I found some features that ar
part of a polymorphic malware that where used for classification. The accuaricy
of my system is approximatly 90%. The used mechanism is usefull because it can
be use on all types of systems, even with a low hardware configuration. In the first
chapter there were presented few hysterical elements which helped identifying the
main vulnerabilities an d the evolution of the malicious files. Under those
circumstances it was demonstrated the need of this type of detection system and
the educating of society regarding to the potential attackers and how to protect
and defend of malware. I presented some sol ution from the market that can help
us to get the information from files, and also the problems of t hose because the
majority of the application are no more supports and upgrades. Beside this, i
presented new possibilities in upgrading the application ( making the application
even better). I consider that all the informations wich are included in presentation
represent a real need for any malware analy st.
NECLASIFICAT
NECLASIFICAT
Page 6 of 97
Abrevieri
APT Advan ce Persistent Threat
PE Portable Executable
ELF Executable Linkable Format
IDS Intrusion Detection Sistem
DLL Dynamic Link Library
VBA Visual Basic for Application
OLE Object Linking and Embedding
DMZ Demilitarized zone
IPS Intrusion Prevention Sistem
ACL Access Control List
MBR Master Boot Record
DOS Denial Of Service
ASLR Address Space Layout Randomization
VM Virtual Machine
DEP Data Execution Prevention
COM Component Object Model
IAT Import Address Table
GUID Universally Unique Indentifier
IID Independent Identifier
VM Virtual Machine
CPUID CPU Identification
UPX Ultimate Packer for Executables
APC Asynchronous Procedural Call
SVM Support Vector Machine
CNN Convolutional Neural Networks
WOW64 Windows of Winodws 64
POO Object Oriented Programming
NECLASIFICAT
NECLASIFICAT
Page 7 of 97
Rezumat
În această teză am încercat să surprind atât elemente teoretice ce țin de analiza
statică și dinamică a fișierelor malițioase, cât și cunoștiințe practice pe care trebuie
să le dobândească un analist de malware . Noțiunile practice au fost explicate atât
din perspectiva unui analist de malware, dar și din perspectiva unui atacator
deoarece este destul de important să înțelegem gândirea acestora. Au fost folosite
cunoștiințe din toate domeniile ce aparțin de computer science la un nivel mediu.
Pe lângă aceste lucruri, lucrarea conține elemente folosite care au fost explicate
pentru dezvoltarea unui sistem automat de detecție de malware, dar și de extragere
de informații.
Necesitatea sistemului a apărut în urm a studiului realizat pe un eșantion de
100 de oameni din diferite domenii de activitate și nu pe acele persoane care au
cunoștiințe avansate de computer science. În urma studiului realizat, am
identificat anumiți factori ce aparțin de un malware polimorfic și sunt specifici
acestora și care au fost folosiți în clasificare. Procentul de identificări ale acestor
fișiere a fost de aproximativ 90% . Mecanismul folosit este util deoarece poate fi
folosit pe orice sistem cu cerințe hardware scăzute. În primul capi tol au fost
prezentate câteva elemente istorice care au ajutat la identificarea vulnerabilităților
principale și evoluția fișierelor malițioase. Prin acest lucru s -a demonstrat și
necesitatea aplicației și nevoia în secietate de o educare în privința potențialilor
atacatori, tipurilor de fișiere malițioase și cum putem evita sau cum ne putem
proteja de aceste lucruri. Au fost prezentate soluțiile actuale existente pe piață care
pot ajuta la identificarea unui malware, dar și probleme ale acestor aplica ții,
deoarece pentru majoritatea nu se mai oferă suport și update -uri. În ultimul capitol
au fost prezentate principalele probleme apărute pe parcursul dezvoltării
aplicației, dar și metode de rezolvare a acestora. Pe lângă aceste lucruri au fost
prezentat e și noi posibile idei de îmbunătățire a aplicației. Toate aceste lucruri
care au fost surprinse în lucrare, consider că sunt de o reală nevoie pentru un
analist de malware.
NECLASIFICAT
NECLASIFICAT
Page 8 of 97
A. Introducere
1. Prezentare generală
În cadrul acestei secțiuni voi prezenta modul în care ne influiențează un
anumit tip de malware, ce ar trebui sa luăm în calcul atunci când utilizăm un
sistem de calcul, fie el laptop, calculator personal, servere sau dispozitive mobile
de calcul, cum ne protejăm de aceste tipuri de fișiere mal ițioase. Aceste fișiere au
un grad de influieță mai mic sau major asupra sistemelor noastre existente în
funcție de rolul și tipul acest ora. Internetul a avut un impact major asupra
omenirii, fiind un mijloc rapid și aparent eficient de comunicare. Dar fie care
descoperire are riscurile ei. Acest lucru a facilitat apriția vulnerabilităților de rețea
și răspândirea ușoară a fișierelor malițioase. În zilele noastre internetul joacă un
rol extrem de important în societate . A devenit un utilitar pentru comunicarea la
distanță, pentru a face schimb de documente, cumpărături online, stocare de
informații în cloud și multe altele. Ca orice lucru pe care îl folosim zi de zi, acesta
are și părți nu tocmai bune de care ar trebui s ă ținem cont, cum ar fi frauda,
păstrarea intimității atunci cand navigăm, fishing, spamming, etc. Chiar dacă au
fost introduse numeroase legi care să -i facă pe atacatori să renunțe la a obține
informați, aceștia au preferat să iși riște propria libertate pentru bani sau pentru a
se afirma. În 2016 s -a vorbit despre înființarea in Romania a unui “Sistem
Național de Securitate Cibernetică” coordonat de SRI, valoarea proiectului fiind
de aproximativ 31.5 milioane de euro. Cu toate acestea nu înseamna ca un
malware se poate răspândi prin internet, acest lucru doar a facilitat, de exemplu
primul fișier malițios a fost dezvoltat în anul 1986 de către doi frați din Pakistan
numit „Brain” compatibil IBM. Acesta se răspândea prin intermediul floppy -disk-
urilor și a vea ca rol afișarea de mesaje. În anul 1992 a aparut un virus numit
„Michelangelo” și era asemănător cu virușii din ziua de astăzi. Odată cu trecerea
timpului, numărul fișierelor crește exponențial, una dintre cauze ar fi și utlizarea
superficială, sau nea decvată a calculatoarelor.
Motivația oamenilor cu rea voință este din ce în ce mai mare. Odată cu
dezvoltarea unor noi sisteme de protecție împotriva oricărui tip de malware,
aceștia dezvoltă și noi abilități de a încerca să pătrundă în sistem. Unii doar v or să
iși demonstreze capabilitățile, alții sunt angajați pentru a face rău,pentru a fura
informații, alții doar vor să se distreze. Dacă aceștia nu ar încerca să dezvolte noi
metode, fișiere malițioase pentru a fura informații nici tehnologia nu ar evolua
atât de mult. Acești răuvoitori se împart în doua categorii: white hat și black hat.
Cei din categoria black hat sunt sortiți să facă rău, caută vulnerabilități și merg pe
ideea că trebuie să aibă ceva de câștigat, indiferent ce metode de intruziune
folos esc. În schimb, white hat, sunt angajați de obicei de o companie pentru a găsi
vulnerabilități în softul dezvoltat de companie pentru a contracara dezvoltarea
unui exploit periculor. Una dintre cele mai importante metode de prevenție
NECLASIFICAT
NECLASIFICAT
Page 9 of 97
împotriva fișierelor m alițioase este să ne informăm asupra acestuia și dacă nu
suntem sigur care este rolul lui să îl „deschidem”, „executăm”. Oricine poate fi
victima unui malware. Chiar în acest moment calculatorul tău poate fi infectat.
Nu putem spune în nici un moment de ti mp ca suntem protejați 100% indiferent
de câte metode de protecție folosim, dar putem încerca să evităm acest lucru, să
diminuăm șansa de a de infecta cu un posibil malware. Nu există o cea mai bună
metodă, dar împreună pot satisface siguranța unui utiliza tor normal.
În ultimul timp se investesc din ce in ce mai mulți bani în securitatea
dispozitivelor electronice. Având în vedere ca datele/informațiile costă cel mai
mult în ziua de astăzi trebui să avem grijă și la protejarea intimității noastre când
vine vorba de a u tiliza serviciile unor companii mari precum Amazon, Google,
Facebook, deoarece e evident că acestea colectează informații și nu sunt folosite
doar ca să ne spioneze ci ca să ne observe comportamentul și obiceiurile în intenet.
Conform unui studiu realizat in 2017, aproximativ 10% din capitalul unei firme
private este investit in securitate. 39% dintre firmele private în 2016 au declarat
ca proiecte importante au fost oprite din cauza
atacurilor
informatice. Întrebarea se pune în felul
urmator: Oricât de mu lți bani am investi și
oricâte aplicații vom dezvolta, putem spune
vreodata că putem avea un sistem 100% sigur
și ca nimeni nu ne poate accesa datele? În 2016
atacurile bancare online au crescut cu 36%
asupra dispozitivelor Android față de 8% în
2015. Fir ma Karspesky a detectat tot în același
an a detectat 262 de milioane de URL -uri
infectate și au fost lansate 758 de milioane de
atacuri în întreaga lume. Au apărut 8 noi familii
de malware pentru ATM -uri și POS -uri, o
creștere cu 20% față de anul 2015. Dis tribuirea
malware a fost făcută prin aplicația Google
Play Store, aplicațiile fiind descărcate de sute
de mii de ori.
Numărul fișierelor malware prelucrate de Karspesky Lab a
ajuns la 360.000 pe zi în 2017, cu 11.5% ma i mult decât în
anul precedent. În anul 2011 media era de 70.000 pe zi de fișiere infectate.
Majoritatea fișierelor infectate sunt de tip malware (78%) conform statisticilor
Karspesky Lab.
Cele mai multe erori în scrierea de cod sunt cele uman e. De exemplu
eroarea umană pentru o persoană care are abilități destul de bune de a scrie cod
este de aproximativ 5%. Dar media este între 15 -50 bug -uri la 1000 de linii de cod
scrise. Bineînțeles ca totul este relativ. Numărul de bug -uri este invers
proporțională cu competențele programatorului. Un alt factor ce influiețează
Figura 1
NECLASIFICAT
NECLASIFICAT
Page 10 of 97
numărul de bug -uri este complexitatea algoritmilor folosiți. De ce am vrut să
specific rata de eroare a bug -urilor? Pentru că acestea reprezintă vulnerabilități ale
soft-urilor. Cu c ât un program este scris mai bine, mă refer la lipsa bug -urilor cu
atât atacatorului îi va veni mai greu să dezvolte un exploit pentru a avea acces la
un sistem. Dar după cum am zis. Totul este relativ și el mai important factor este
user-ul.
Atacurile de tip 0 day sunt cele mai periculoase în zilele noastre . Acesta se
manifestă prin apariția unei breșe de securitate într -un sistem/soft și care este
exploatată până la apariția patch -ului care rezolvă problema. Dacă vulnerabilitatea
este descope rită prima dată de atacatori, atunci le va da acces la întregul sistem
și la toate sistemele care folosesc acel soft vulnerabil. De exemplu în octombrie
2018 a apărut o vulnerabilitate de tipul 0 day al Microsoft Windows. Exploitul a
fost trimis prin in termediul unui backdoor1 PowerShell. Atacul era destinat
companiilor din Orientul Mijlociu. Pentru acest tip de atac, probabilitatea ca user –
ul să -și fi actualizat versiunea softului este de 0. De aceea șansa ca exploit -ul să
reușească ar trebui să fie de 100%. Atacatorii care folosesc un malware pentru a
exploata vulnerabilități de tip 0 day, folosesc diferiți vectori de atac. De obicei
când userii folosesc un anumit browser/ o anumită pagină web, codul malicios
poate exploata vulnerabilitățile din browser . Pe de altă parte, atacatorii pot folosi
metode de transmitere cum ar fi mail -ul pentru a trimite cod mailițios și astfel prin
deschiderea atașamentului de către user folosind un anumit program vulnerabil
acesta este exectutat și vulnerabilitatea este exp loatată. Putem considera axa
timpului și momentele în care atacatorul acționează.
𝑡0 vulnerabilitatea a fost descoperită
𝑡1 o nouă versiune de actualizare pentru soft a fost publicată
𝑡2 un atacator a dezvoltat un exploit
𝑡3 majoritatea sistemelor au fost infectate
𝑡0 < 𝑡1 < 𝑡2 < 𝑡3
Cu toate acestea, mai există și alte tipuri de atacuri, dar sunt folosite mai
puțin fișiere malițioase cum ar fi executabile, pdf -uri, word -uri, excel -uri. De
exemplu Advance Persistent Threat (APT) este un tip de atac în rețea care
încearcă să fie nedetectabil și se încearcă obținerea accesului neautorizat la o
rețea. Acesta încearcă să rămână sub o formă ascunsă și să fie persistent o perioadă
cât mai lungă de timp. Persistența se referă la m odul în care o amenințare reușește
să rămână cât mai mult timp în sistem. APT -ul încearcă să obțină informații de la
un sistem dintr -o rețea fără un acces autorizat. Multe dintre persoanele care
folosesc un APT pentru obținerea accesului neautorizat aparți n unor grupări sau
sunt plătiți să facă asta. Cele mai atacate istituții folosind APT -uri au fost cele din
zonele energetice, instituții financiare, transport, sănătate, telecomunicații.
1 Este o meto dă folosită pentru a păcăli/a evita un sistem de autentificare sau criptare
NECLASIFICAT
NECLASIFICAT
Page 11 of 97
O altă metodă de atac este de a obține acces la fișierele stocate în afara unui server
web. Această metodă nu implică folosirea unor fișiere malițioase ci se bazează
mai bine zis pe securitatea aplicațiilor web.
Ce este un malware? Acest tip de fișer are rolul de a extrage informații, de
a cripta fișiere, în principiu de a face ceva rău unui sistem. Este programat să
infecteze prin diferite metode o anumită mașină de calcul/calculator fără acordul
user-ului. Malware -ul poate fi specific unui anumit sistem cum ar fi calculator,
laptop,telefon, tabletă dar mai important s unt în funcție de sistemele de operare .
Adică un malware pentru windows mai mult ca sigur nu va funcționa pe un telefon
cu android. Au sisteme de operare diferice ceea ce înseamnă că folosesc formate
de fișiere diferite. În funcție de rolul unui malware ac eștia se pot clasifica în viruși,
trojeni, spyware, viermi, rootkit și vor fi detaliați în capitolul 4. Această clasificare
fiind după modul în care se răspândesc sau după rolul pe care îl au și ceea ce fac
în sistem. Ceea ce este mai important e că aceste clasificări ne pot ajuta pe noi să
identificăm problema, să vedem ce măsuri putem lua cand suntem infectați și să
intuim ceea ce ar putea să facă un malware atunci când îl analizăm și care ar putea
fi nivelul de infecție la nivel de rețea. De aceea este f oarte important ca un
utilizator să știe cum să se protejeze de un malware și de a avea un sistem sigur.
Orice criminal informatic se asigură că fișierul malițios dezvoltat asigură
persistența. Pentru că cel mai important e ca acel malware să rămână în sis tem cât
mai mult timp. Așa ar fi foarte simplu, găsim procesul și folosi comanda de
terminare proces. Bineînțeles, o provocare o reprezintă și găsirea procesului care
rulează. O altă problemă a fișierelor malițioase poate fi faptul că folosesc sisteme
de protecție împotriva analizării, cum ar fi detecția mașinii virtuale. Dacă este
detonat (executat) pe o mașină virtuală, malware -ul nu va face nimic pentru că
știe că se încearcă detonarea lui dintr -o mașină virtuală. Un alt sistem de protecție
este cel de a nti-debugging în care un malware poate detecta dacă bitul
corespunzător debug -ului este activat adică poziționat pe 1. Bineînțeles, detecția
unei mașini virtuale poate fi făcută prin mai multe metode, cum ar fi verificarea
instrucțiunilor de microporcesor, sau detecția numărului de core -uri active ( de
obicei o mașină virtuală are mai puține core -uri decât un host) . Toate acestea vor
fi explicate în capitolele corespunzătoare.
Având în vedere că în ziua de astăzi informația e cea mai scumpă, este
evident că de asta ne e cel mai frică, de accesul altor persoane la informațiile
noastre. Bun, problema se pune în felul următor, considerăm că al nostru sistem
poate avea un fișier mal ițion, cel mai simplu este o scanare cu un antivirus. Oprim
procesul, ștergem fișierul malițios. La nivel macro, se instalează un IDS la nivel
de rețea pentru a detecta semnătura fișierului și ca celelalte fișiere să nu mai fie
infectate. Un IDS este un si stem de detecție a instruziunilor și care monitorizează
evenimentele legate de rețea și pentru detecția acțiunilor repetate. Dar, cu toate
acestea, peste câteva zile observăm că sistemele noastre sunt din nou infectate.
Evident, semnătura unui fișier este schimbată deoarece IDS -ul a eșuat. Cu toate
NECLASIFICAT
NECLASIFICAT
Page 12 of 97
acestea, noi putem dezvolta sisteme și voi arăta metode de a imbunătăți semnătura
unui malware, cum îl putem găsi mai ușor in sistemele noastre, ce face mai exact
acel malware și cum să protejăm o rețea locală.
Ce este semnătura unui fișier? Un fișier poate avea mai multe tipuri de
semnături. Cea mai simplă este hash -uirea lui. Majoritatea sunt hash -uite cu MD5
dar este obsolit adică vulnerabil la atacuri de tip dicționar, iar pentru o bază de
date mare cu hash -uri nu este recomandat deloc. Ceea ce am folosit eu pentru a
hash-ui un fișier este SHA256. O altă semnătură este cea de rețea. Un IDS
identifică pe baza unor pattern -uri în funcție de header -ul pachetului, port -uri,
protocoale, dimensiune pachete. Cea de -a treia semnătură identificată de către
mine este cea în funcție de comportamentul fișierului malițios. Ce înseamnă asta?
De exemplu un anumit malware iși descarcă un payload (de exemplu un DLL cu
funcții exportate ) în vederea folosirii funcțiilor respecti ve de pe un anumit server
cu un anumit IP. Pe celelalte trei host -uri din rețeaua mea locală e alt malware
care descarcă de pe același server tot un DLL cu acceași dimensiune ca cel de mai
sus. Situația e destul de clară. Hash -urile celor două fișiere malw are sunt diferite
( e de ajuns ca un singur bit să difere ) dar semnăturile comportamentale sunt
aceleași. Sau o altă semnătură statică a unui fișier malițios poate fi și crearea unor
anumite fișiere cu o anumită cale, sau ștergerea lor. Altă metodă o poat e
reprezenta bucăți de cod specifice sau schimbările ce pot aparea în regiștrii
windows -ului. Sunt foarte mulți factori de luat în calcul atunci când dorim să
obținem absolut toate informațiile despre un fișier malițios.
Ce este analiza malware? Orice prog ram care cauzează un incident sau care
poate dăuna calculatorului sau rețelei dumneavoastră se numește malware fie că
e virus, vierme, spyware, rootkit sau cal troian. Indiferent de tipul de malware,
tehnicile dezvoltate pentru a identifica unul sau pentru a -ți face o idee despre ce
tip es te sum cam aceleași. Rămâne la latitudinea analistului de a dezvolta noi
tehnici sau softuri pentru extragerea informațiilor despre un anumit fișier sau ce
anume îl interesează pe acesta. Analiza de malware, putem spune că reprezintă o
serie de tehnici pen tru a înțelege cum funcționează un fișier malițios, cum îl putem
identifica, cum putem să ne apărăm de acesta și cum putem să -l eliminăm. Toate
aceste tehnici se deprind în timp și cu exercițiu. Dacă luăm în calcul faptul ca
probabil sunt milioane de fișie re malițioase în internet, stați liniștiți, aveți timp să
învățați. Având în vedere că Windows este cel mai răspândit sistem de operare,
tehnicile prezentate vor fi exclusiv pentru formatele de fișiere din acesta. Această
temă de licență va prezenta tehnic i de detecție a malware a fișierelor executabile
cu formatul Portable Executable ( PE ), dynamic link library ( DLL ), acestea fiind
cele mai răspândite tipuri de fișiere malițioase și cel mai greu de analizat , fișiere
PDF și fișiere din suita Office respe ctiv DOCX -uri. În urma experiențelor mele
am observat că este foarte important să analizezi tu un fișier deoarece sunt cazuri
în care nu toate antivirusurile pot detecta 100% un malware. De aceea cel mai
importat factor este cel uman. Sistemele automate a r trebui să fie făcute pentru a
NECLASIFICAT
NECLASIFICAT
Page 13 of 97
ne oferi o idee despre fișierele malițioase și de a face o filtrare inițială. Cele două
metode principale, respectiv analiza statică și dinamică se bazează pe extragerea
informațiilor dintr -un fișier și in final analizarea codului sursă de cod obiect al
fișierului. Toate acestea fac parte din analiza statică. În analiza dinamică voi
prezenta instrumentele folosite pe piață, voi exemplifica cum am gandit și
implementat propriul analizor dinamic. În capitolul III voi prezenta cele doua
tipuri de fișiere cele mai răspândite respectiv formatul PE pentru sistemul de
operare windows și ELF (Executable Linkable Format) specific Unix adică
sistemele care folosesc dist ribuții de linux inclusiv sistemul de operare android.
În capitolul IV voi prezenta secvențe de cod specifice limbajului assembly pentru
a vă forma o deprindere inițială în analiza fișierelor malițioase. În capitolul V voi
explica câteva dintre tehnicile d e protecție împotriva analizei folosite de
atacatori, metode de a ascunde anumite informații din fișier sau cod sursă, dar și
cum putem să le evităm. Primul pas în identificarea unui fișier malițios este să
cautăm semnătura fișierului în baza de date, astf el putem vedea dacă a mai fost
analizat sau nu, sau dacă este malițios. Semnăturile bazate pe traficul dintr -o rețea
se poate face monitorizâdu -l. De obicei pachetele transmise de câtre un malware
pot conține doar flag -uri de tipul SYN și SYN ACK, pentru a vedea serverul care
controlează toate informațiile extrase dacă hostul este online și astfel serverul
poatre transmite comenzi. O altă suspiciune precum că pachetele pot proveni de
la entități malițioase este că de obicei acestea sunt criptate sau au o di mensiune
mai mare decât de obicei. Următorul pas reprezintă analizarea fișierului malițios
cu scopul de a identifica dacă conține informații despre posibilitatea acestuia de a
fi un malware sau nu.
De cele mai multe ori când descoperiți un malware probabilitatea ca să fie
imposibil de citit folosind doar ochiul uman, în ideea în care puteți observa niște
cod sau folosind un editor de text în format hex pentru a extrage informații. De
obicei, în jur d e 30% dintre fișierele malițioase conțin funcții criptate, sau efectiv
xor-ate cu o cheie prezentă în zona de zero -uri a fișierului. Cea mai mare parte
dintr -un fișier executabil conține zero -uri. Alte fișiere sunt patch -uite folosind
utilitare de genul UP X. Și la momentul execuției fișierul malițios despachetează
ce-l de-al doilea fișier executabil în zona de date și de cod al fișierului patch -uit.
De fapt este un executabil ( fișierul malițios ) în altă secțiune a unui fișier
executabil. Bineînțeles, exis tă tool -uri pentru despachetarea fișierelor și astfel cu
anumite utilitare puteți face reverse engineering pe cod. Foarte ușor vă puteți da
seama dacă un fișier sau o anumită secțiune a fost criptată sau patch -uită după
entropie. Cu cât entropia este mai m are cu atât probabilitatea ca fișierul să fie
criptat. Un dezvoltator de software nu are nici un interes în ascunderea anumitor
secțiuni din fișierul executabil, ceea ce denotă că entropia mare poate ascunde ca
un fișier să fie executabil. Diferența princi pală dintre analiza statică și cea primară
o constituie faptul că analiza dinamică presupune executarea fișierului sau
detonarea lui. În capitolul destinat analizei dinamice voi prezenta și ce ar trebui
NECLASIFICAT
NECLASIFICAT
Page 14 of 97
să faceți sau mai bine zis cum să configurați o mași nă virtuală dacă doriți să vă
faceți propriul sistem de detecție. Cea de -a doua metodă o reprezintă utilizarea
unui sandbox. Acest lucru este mult mai ușor deoarece vine direct configurat și
uneori poate oferi informații prețioase despre ce modificări a ad us sistemului în
procesul de execuție.
2. Istoria virușilor
Orice program, soft, care atacă în mod deliberat un calculator, laptop,
telefon, indiferent de sistemul de operare pentru a face rău se numește malware.
De-a lungul timpului, mass -media a avut un rol foarte important în statisticile
privind gradul de infectare a sistemelor din acea perioadă. Termenul de malware
nu este de actualitate. Încă de la început au apărut diferite programe în principiu
pentru a spe ria utilizatorii. De exemplu apariția unei pop -up. Programele
malițioase nu erau așa de avansate din cauza faptului că atacatorii de la acea vreme
nu înțelegeau exact arhitectura sistemelor. Cu toate astea chiar și primele
calculatoare erau destul de vulnerabile doar că nu se știa exact cum se puteau
exploata pentru a obține informații fără acordul proprietarului. Odată cu
răspândirea calculatoarelor și accesul oamenilor la ele, virușii au înc eput să se
dezvolte , să devină din ce în ce mai complecși. Virușii în rețea au început să apară
aproximativ in anul 1970 odată cu dezvoltarea ARPANET . Explozia de malware
pe computerele personale au fost în anul 1980 și a fost inițiată de către Apple. Cu
cât s-au răspândit sistemele în rândul oamenilor cu atât mai mult ei au început să
le înțeleagă. Răspândirea virușilor a fost limitată de capacitatea de transfer și de
nevoia oamenilor de a face schimb de informații. Acum
toaă lumea are nevoie de informații și volumul de date a
crescut considerabil. Problema cea mai mare este că
atacatorii au ținut pasul foarte bine cu toate aceste
schimbări, de protocoale, de aplicații noi posibil
vulnerabile, diferite arhitecturi de calcul. Dacă
aproximativ prin anul 1980 majoritatea virușilor erau
folosiți pentru a exploata sistemele de operare sau
rețeaua, astăzi cele mai multe dintre ei sunt folosiți prin
vulnerabilitățile găsite în aplicațiile dezvoltate. După
1990 probabil că a fost un șoc în rândul populației
deoarece virușii dezvoltați în acea perioadă erau folosiți
pentru a fura parole și informații despre conturi și cărți de credit. Astăzi însă,
dezvoltarea de malware a devenit mai mult o afacere.
Figură 2 IBM 360
NECLASIFICAT
NECLASIFICAT
Page 15 of 97
În decursul anilor 1960 nu se știe exact dacă primul computer dezvoltat de
Charles Babbadge, dar ce se știe sigur e ca Univax 1180 și IBM 360/370 au avut.
În 196 1 un group de ingineri din cadrul America’s Bell Telephone Laboratories
au dezvoltat un joc numit Darwin . Jocul avea un liber arbitru în memoria
calculatorului care determina ordinea de luptă a programelor create de către useri.
Arbitrul putea urmări și distruge programele adversarilor și cel mai important era
că se putea multiplica. Scopul jocului era de a dis truge programele adversarului
și de a prelua controlul așa zisului câmp de luptă.
La începutul anilor 1970 un virus numit Creeper a apărut în rețeaua
ARPANET , aceasta fiind o rețea militara, precursorul internetului modern.
Virusul a fost scris pentru sistemul de operare Tenex și avea capabilitatea de a se
infiltra în modem și de a se copia singur în calculatorul userului. Calculatoarele
infectate cu acest virus afișau un mesaj „I’m the creeper: catch me if you can.” .
Partea amuzantă este că s-a dezvolt at un alt virus numit Reaper care se răspândea
în rețea și avea capabilitatea de a localiza virusul Creeper și de a -l șterge din
sistem. În 1974 un nou virus numit Rabbit a apărut având aceasta denumire
deoarece era capabil doar să se înmulțească și răspân dească. Un nou joc a fost
dezvoltat în 1975 numit Pervading Animal scris pentru calculatorul Univac 1108
și se presupune că acesta ar fi primul virus de tip Trojan. Regulile erau în felul
următor. Jucătorul se gândea la un animal și programul trebuia să -l ghicească
punând niște întrebări . Programul avea o funcție de auto -corectare. Dacă nu reușea
să ghicească animalul, jocul se updata și punea o nouă întrebare. Problema este că
de fiecare dată se tot copia în alte directoare și după un timp ajungea să ocupe un
volum considerabil din toată memoria calculatorului. Problema a fost rezolvată
complet după ce a ieșit pe piață o nouă versiune de sistem de operare numit Exec
8 care avea alt sistem de fișiere.
După 1980 tot mai multe persoane au început să dețină propriile
calculatoare personale și astefel s -a creat un mediu perfect pentru răspândirea
virușilor. Tot mai mulți oameni au început să -și dezvolte propriile lor aplicații sau
viruși. Problema este că a cei trojeni produceau pagube în momentul când userul
îl descărca și instala. Elk Cloner un virus special pentru calculatoarele de tip
Apple II care era capabil să se stocheze pe floppy disk. Când un calculator boota
de pe un floppy disk infectat, virusul s e executa automat. Dacă un floppy disk nou
neinfectat era folosit atunci acesta se copia. Acesta includea imagini care se
roteau, mesaje text . În 1986 un virus numit Brain a apărut și era destinat
calculatoarelor IBM care infecta sectorul de boot. Era capabil să se răspândească
NECLASIFICAT
NECLASIFICAT
Page 16 of 97
în întreaga lume în cateva luni. Acest virus a fost scris de un tânăr Pakistanez de
19 ani împreună cu fratele lui și includea un text cu numele și numerele lor de
telefon. Brain a fost primul virus ascuns care nu afecta datele. În același an un
programator german pe nume Ralf Burger a dezvoltat primul program care copia
cod executabil dintr -un fișier DOS într -un fișier COM ( asemănător batch -ului ).
În același an Ralf Burger îi trimite o copie a virusului lui Bernt Fix care a fost
capabil să neutralizeze virusul. Aceasta a fost prima reușită. De aici a pornit totul
pentru a se putea dezvolta antiviruși. La acea vreme antivirusul putea detecta,
oferea protecție, detecție și neutralizare. În același an apare și virusul Lehigh care
era capabil să distrugă datele de pe disc eventual și pe el insuși, dar acesta a rămas
în cadrul Universității Lehigh și nu a f ost lăsat ”in the wild” . Apoi utilizatorii au
început să devină tot mai interesați de acest subiect și cu pași mici incearcă să
invețe cum să se protejeze de acești viruși. Primul ransomware a apărut tot în anul
1987 pe nume Cascade care era alcătuit din două părți: o rutină de criptare și
corpul virusului. Acesta cripta virusul de fiecare dată și astfel pe fiecare sistem în
parte avea un format diferit. Acesta poate fi considerat predecesorul virușilor
polimorfici. Dimensiunea fișie rului era folosită ca cheie de decriptare. Dar cu
toate acestea rutinele de criptare rămâneau la fel ceea ce îl facea să fie destul de
ușor detectabil.
În anii 1988 au apărut o mulțime de întreprinderi d estul de mici, cu doi sau
trei angajați care ofereau servicii de protecție împotriva virușilor. Majoritatea
antivirușilor comparau secvențele de cod găsite. Mai apoi s -au dezvoltat
programe care modificau fișierele existente pe calculator pentru a da imp resia
virusurilor că sistemul a fost deja infectat. Dar odată cu
creșterea exponențială a numărului de viruși, această
metodă a devenit ineficientă. Indiferent de metodele de
protecție de la acea vreme, în fața unui nou virus erau
complet depășite. Cel mai important factor a fost cel uman.
Mulți oameni de la acea vreme nu credeau deloc în
posibilitatea existenței virușilor și astfel nu dădeau
importanță metodelor de protecție, antivirusurilor. Chiar și
celebrul Peter Norton a fost sceptic în ceea ce privește
existența virușilor informatici, dar se pare că într -un final
și-a înființat propria lui firma cunoscută și astăzi drept Norton Antivirus . În
același an s -a înființat primul forum pentru discuțiile legate antiviruși. La sfârșitul
anilor 1988 un an tivirus popular a făcut față amenințărilor. Acesta a fost dezvoltat
de un programator din Marea Britanie numit Dr. Solomon `s Anti -Virus Toolkit
Figură 3 Cilindru HDD
NECLASIFICAT
NECLASIFICAT
Page 17 of 97
rezistând pe piață până în anul 1998. În anul 1989 un nou virus derivat din familia
Vacsina și Yankee a făcut ravagii în cee ace privește pierderea datelor. Acest virus
formata la un nivel destul de scăzut al cilindrului hard -disk-ului ce a dus la
distrugerea fișierelor FAT și pierderea irevocabilă a datelor. Prima data a fost
descoperit în Olanda de către Fred Vo gel. Deși nu s -a răspândit destul de mult, la
nivel national a avut un impact major deoarece se credea că virusul a fost scris de
un terorist Norvegian pentru a pedepsi Americanii deoarece aceștia susțin eau că
Columb a descoperit America și nu Eric și Red. De aceea aceștia au denumit
virusul Columbus Day . În Olanda, poliția locală a decis că trebuie să ia masuri
împotriva atacurilor cibernetice. Ei au dezvoltat un antivirus aparent capabil să
identifice viruși. Era vândut populației cu suma de un dolar la acea vreme. Imediat
după ce a fost lansat pe piață s -a descoperit că avea o rată de detecție falsă foarte
mare. O nouă versiune a apărut, dar avea numeroase bug -uri. Primul ransomware
asemănător cu cel din zilele noastre a apărut în anul 1989 când compania Aids
Information Diskette a trimis în Europa, Africa, Australia un număr de 20.000
de diskete infectate cu un virus care se instala odat ă ce disketa era introdusă în
calculator. Acest virus la a 90 -a pornire a sistemului modifica sistemul de fișiere
și cripta toate numele de fișiere rămânând disponibil doar unul singur. Fișierul
conținea informații precum că va trebui să trimiți bani către un anumit cont pentru
a fi decodate toate fișierele. În același an o epidemie de viruși a lovit Rusia.
Cascade, modi ficări ale familiilor Vacsina și Yankee , Jerusalem , Vienna ,
Eddie și Ping Pong , toți acești tipuri de viruși s -au extins în Rusia. Dar să privim
și partea bună a lucrurilor. Au apărut companii de antiviruși precum F-Prot ,
ThunderBYTE și Norman Virus Control . Cu toate acestea, IBM a fost presat
de către populație pentru a crea un antivirus competent, așa că în Octombrie 1989
puteai achiziționa IBM Virscan pentru doar 35 dolari.
După anul 1990 se trece într -o nouă etapă a dezvoltării virușilor, cei
polimorfici. În primul rând putem vorbi despre familia Chameleon (1260, V2P1,
V2P2, V2P6). Mark Washburn a adăugat noi idei acestui virus putând să -și
schimbe codul după fiecare infecție făcând ca antivirușii să fie absolut inutil i. În
1992, Eugene Kaspersky a inventat una dintre cele mai eficiente metode de
detectare a virușilor polimorfici. Un emulator care decifrează coduri și care este
present în majoritatea antivirușilor de astăzi. Dark Avenger , un programator care
dezvolta viruși de fiecare dată când avea ocazia. Acesta olosea tehnici de infectare
a tuturor fișierelor din calculator și aveau și capabilitatea de a se răspândi foarte
repede. Acesta a creat și un forum având scopul de a face schimb de viruși. Dacă
un Utilizator încărc a un virus pe platforma acesta avea acces să descarce un alt
NECLASIFICAT
NECLASIFICAT
Page 18 of 97
virus. Dacă virusul acestuia era surprinzător, atunci primea acces la întreaga
platformă. Acest lucru a dus la facilitarea dezvoltării de viruși tot mai puternici.
Frodo and Whale au făcut un vir us inovativ în a doua jumătate a anului 1990.
Acesta cripta pe diferite nivele și avea un întreg vector de soluții anti -debugging.
La începutul anilor 1992, Dark Avenger a dezvoltat un generator polimorfic cu
scopul de a -și ajuta colegii de pe acel forum. Datorita lui MTE , acel generator
polimorfic a contribuit într -un mod foarte evident la dezvoltarea unor noi viruși
puternici, având această capabilitate și evident că antivirusurile nu puteau detecta
100% acei viruși. În anul 1993, un nou virus numit PMBS a apărut pentru
procesoarele 80386. În același an, companiile de antivirus erau total depășite.
Microsoft a dezvoltat propriul program de antivirus, MSAV ( Microsoft
Antivirus) . Se baza pe baza de date a Institutului Central Point AntiVirus ceea
ce din punctul meu de vedere nu era tocmai eficient având în vedere că nu toți
virușii de la acea vreme puteau fi detectați pe bază de semnătură. Acesta era
destinat pentru MS -DOS și pentru sistemele de operare Windows , dar încetul cu
încetul proiect ul a fost întrerupt datorită ineficien ței. După anul 1994 cea mai
ușoară și populară metodă de răspâdire a virușilor a fost cea pe mediile de stocare
externe respectiv CD -uri. În acel an au apărut doua tipuri de viruși polimorfici
SMEG.Pathogen și SMEG.Que eg. Nici în ziua de astăzi nu toți antivirușii pot
identifica acest tip de malware.
În anul 1996 a apărut primul virsul pentru sistemul de operare Windows
dezvoltat de programatorul rus Denis Petrovym. În martie 1996 virusul
Win.Tentacle a infectat rețeaua unui spital și câteva organizații din Franța. Era
diferit prin faptul că era primul virus pentru platforma Windows care era „in the
wild”. Până atunci, toți virușii destinați acestei platforme erau folosiți în cercetare
sau pentru a scr ie lucrări. În același an a apărut și primul virus pentru fișierele de
tip executabil winodws cu numele de OS2.AEP . În iulie 1996 Laroux , este
primul virus pentru fișierele de tip Microsoft Excel care a afectat companii
petroliere din Africa. Acest virus e ra bazat pe macrouri. Niște mici programe
scrise in Visual Basic. Pe același principiu se bazează și virușii destinați
pachetului Office din zilele noastre. În vara aceluiași an au fost dezvoltate doua
tool-uri specifice creării de viruși pentru pachetul Office respectiv Word Macro
Virus Construction Kit și Macro Virus Development Kit . În această perioadă
au fost creați o multitudine de viruși cu capacități noi de infiltrare, cu proprietăți
noi de criptare, de ascundere a fișierelor, polimorfisme. Virușii au trecut la un alt
nivel având în vedere ca au început să se folosească sisteme de operare pe 32bit.
NECLASIFICAT
NECLASIFICAT
Page 19 of 97
În anul 1997 virușii au trecut către un alt mediu. Primul virus pentru Linux
a luat naștere. Viruși care rulează în background, viruși care folosesc un a numit
payload. Evoluția majoră a acestor fișiere malițioase a fost că Linux la acea vreme
nu era destul de popular în rândul oamenilor. Office 97 a luat naștere. Odata cu
aceasta, Visual Basic a trecut la o noua versiune, respectiv 5.0. Singura problemă
era că virusul trebuia rescris din VB 3.0 în VB 5.0. În martie 1997, ShareFun a
fost primul virus folosind macrouri care folosea ca metodă de răspândire MS Mail.
În aprilie virusul Homer folosea ca metodă de propagare protocolul FTP ( File
Transfer Protoco l ). În același an a apărut și primul virus polimorfic WIN95. Mad
care se auto cripta pentru sistemul de operare Windows, mai exact pentru
Windows 95 . Esperado a fost un virus multi -platformă cu care s -a incercat un
atac către toate sistemele de operare di sponibile la acea vreme, Windows, MS –
DOS și Mac -OS, dar a fost un real eșec. Odată cu apariția internetului și cu
lansarea pe piață a aplicației mIRC ( Internet Relay Chat ), comunicarea dintre
scriitorii de viruși a devenit mult mai ușoară și evident noi viruși de tip vierme au
fost dezvoltați și transmiși prin canalele de mIRC. Fișierul SCRIPT.INI care era
conșinutul fișierului malițios de tip worm care ajungea automat pe calculatoarele
clienților era înlocuit cu fișierul original. La urmă toarea rulare a mIRC -ului se
rula codul malițios din fișierul SCRIPT.INI. Acest worm a fost descoperit destul
de repede.
După anul 1998 a apărut o noua familie de viruși trojeni care erau meniți să
fure parole , (familia PSW ) și noi metode de backdoor au început să fie folosite.
Câteva companii de distribuție de jocuri au fost prinse deoarece cd -urile pe care
erau jocurile conțineau și viruși. În septembrie 1998 virusul AutoStart a fost
descoperit pe cd -urile de instalare cu programul Corel DRAW 8.1. Virus ul
Win32.HLLP.DeTroi care infecta fișierele executabile pe 32 bit și aveau
capabilitatea de a transmite și informațiile înapoi către autor. Acesta modifica
librăriile franceze folosite, de aceea a afectat doar regiunea franceză. Odată cu
apariția unor noi virusuri polimorfice Win95.HPS și Win95.Marburg pentru
sistemele de operare windows pe 32 bit a fost nevoie de a găsi noi soluții de
detectare a polimorfismelor deoarece cele pentru MS -DOS nu funcționau. O mare
provocare pentru d ezvoltatorii de antivirus a fost scanarea fișierelor de tip
PowerPoint, deoarece codul VBA din acest tip era arhivat și necesita timp de
procesare mai mare plus că acel cod VBA putea fi encodata. Aceste fișiere office
foloseau formatul OLE ceea ce insemna că reprezenta efectiv o arhivare de fișiere.
NECLASIFICAT
NECLASIFICAT
Page 20 of 97
Anul 1999 vine cu noutăți. Un microvirus pe nume Caligula pentru MS
Office a fost descoperit. Acesta cauta în regiștrii sistemului și dacă un anumit
program folosea o bază de date locală acesta inițializa o con exiune FTP și trimitea
toate datele către un server. Un microvirus combinat cu un worm pe nume Melissa
scana adresa de contacte din MS Outlook și se trimitea automat către primele 50
de adrese găsite. Acest lucru se făcea fără consimțământul utilizatorului. A fost
depistat repede , dar totuși au fost infectate companii ca Intel, Microsoft și
Lockheed Martin forțându -le sa iși inchidă sistemul de mail pentru o perioadă de
timp. Virușii pot fi scriși în mu lte limbaje de programare, assembly, C, C++,
Visual Basic chiar și Corel SCRIPT. Și ca drept exemplu este virusul Gala care a
infectat firma Canadiană Corel și a fost primul virus capabil să infecteze fișierele
Corel Draw. În același an au mai aparut viruș i de criptare de fișiere folosindu -se
de un utilitar de arhivare. Un alt vierme a utilizat o vulnerabilitate găsită în
Interner Explorer și atunci când un utilizator deschidea un email, acel calculator
era infectat. Vecna , un virus extrem de periculor care se putea auto updata, adică
la fiecare minut se conecta la un server din Japonia și dacă găsea o altă versiune
mai nouă de virus îl descărca și se executa fișierul.
Anul 2000 aduce ve ști nu tocmai bune. Odată cu apariția lui Windows 2000
și a programului Visio pentru diagrame și statistici în format 2D au fost create
exploituri imediat și astfel Visio a dat faliment. În aprilie, primul macro virus de
tip rusesc a fost detectat în documentele de tip Word a l prim ministrului Englez și
astfel autoritățile englezeși au facut un proverb pentru ruși: „Don `t put off `ntill
tomorow what you can drink today.” . Pe 6 iunie a fost dezvoltat primul virus
pentru telefoanele mobile, Timofonica . Acest virus se răspândea p rin emailuri și
era capabil să trimită mesaje la numere de telefon random dintr -o anumită rețea.
Poate nu vă vine să credeți dar în același an a apărut și un virus pentru packetele
din AutoCAD pe nume Star. Un virus de tip vierme interesant pe nume Jer era
uploadat pe o pagină web și scriptul acestuia era automat rulat când o pagină
HTML era deschisă. Apoi apărea o fereastră userului precum că un fișier malițios
este deschis și erau psihologic forțați să apese butonul YES și automat rula pe
computer. În septembrie apare un nou virus pentru a corupe fișierele pentru
sistemul de fișiere NTFS. Un alt virus pericul pe nume Hybris care folosea auto
updatarea și folosea diferite module și site -uri web pentru a se updata. Acesta
folosea o cheie RSA pe 128 bit pe ntru identificarea modulelor. În anul 2000
conform statisticilor Kaspersky Lab 85% dintre viruși erau transmiși prin email.
Aproximativ 37 de tipuri noi de viruși au fost creați pentru distribuțiile de Linux
și macro virușii fiind cei mai populari.
NECLASIFICAT
NECLASIFICAT
Page 21 of 97
În anul 2001 transmiterea de fișiere malițioase prin intermediul emailului
au crescut cu 5%. Cele mai numeroase calculatoare infecțioase au provenit din
neglijența utilizatorilor când aceștia au descarcat și rulat tot felul de fișiere , dar o
nouă tehnică a apărut. Utilizatorii se infectau doar dacă vizitau o pagina web
compromisă. Cele mai multe exploituri erau pentru vulnerabilitațile din Microsoft
Internet Explorer. În acest an au apărut și serviciile de mesagerie instante ceea ce
a dus la o imbunătățire a metode lor de răspândire prin diverse canale de exemplu
cele de mIRC sau MSN Messenger . Atacurile pe distribuții Linux au devenit din
ce în ce mai numeroase, NASA, Supermicro, A&M University suferind atacuri.
Acestea au apărut datorită lipsei de intere al utilizatorilor nefăcând updaturile la
timp. 2001 a fost anul virușilor de tip vierme pentru sistemele de operare
Windows aceștia fiind 90% din totalul atacurilor existente. Doua noi categorii de
viermi având r olul de a se răspândi prin intermediul .NET au fost dezvoltați. LFM
și Donut , dar aceștia au fost doar un „proof of concept„ și nimeni nu a fost
infectat. În acest an scriitorii de malware s -au gândit că pot face bani din asta așa
că au încercat fără să se gândească la repercursiuni să fure parola, conturi bancare,
date confidențiale și să cripteze fișiere.
Anul 2002 aduce vulnerabilități în aplicațiile sau serviciile puse la
dispoziție. De exemplu fișierele malițioase de timp vierme Klez și Lentin
împrăștiindu -se folosind serviciul SMTP( Simple Mail Transfer Protocol). Acest
lucru a dus la o atenție sporită din partea dezvoltatorilor pe partea de securitate.
Klez a rămas cel mai periculos virus de tip vierme timp de 2 ani. Până la sfârșitul
anului statisticile spun ca 6 din 10 viruși erau de tip Klez sau clone ale acestuia.
Micro virușii nu au dispărut din cauza faptului că numărul de utilizatori de
Windows a crescut considerabil.
În 2003, probabil considerat cel mai periculor virus din istoria Inte rnetului,
Viermele Slammer , care folosea MS SQL Server pentru a se răspândi infectând
sute de mii de calculatoare . Problema imensă era că acest vierme nu folosea
fișiere. Acesta a reușit să ocupe lățime de banda și a mărit traficul în Internet cu
aproximat iv 40% -80% până când anumite segmente au început să cedeze. Ataca
folosind porturile 1433 și 1434 pentru a ataca calculatoarele, dar nu se copia pe
disk, dar rămânea în memoria RAM. Alți viruși apăruți în acest an au fost cel
pentru Windows, Lovesan , pentru fișierele MapInfo, MBP.Kynel , viermi
scandinavi precum Ganda și Avron . Începe să apară un război rece între
programatorii cu intenții rele. De exemplu între hackerii Pakistanezi și cei
Indieni. Un grup de hackeri Indieni au dezvoltat un virus car e se multiplica
NECLASIFICAT
NECLASIFICAT
Page 22 of 97
folosind arhivele ZIP. Un alt trojan a apărut, acesta pornind de la un scriitor Rus
care a exploatat o vulnerabilitate în Internet Explorer și putea să extragă cod binar
din cod HTML și să fie executat pe calculatorul țintei. Acesta fiind
Trojan.Win32.StartPage.l . Acest a ieșit în evidență prin numeroasele tipuri de
viruși viermi care au încercat să facă spam, să fure înformații, să blocheze rețele.
Anul 2004 începe cu un război virtual. Hackerii de la NetSky versul cei de
la Mydoom și Bagle. În numai 3 ore au apărut 5 versiuni de viruși de tip vierme
ceea ce reprezenta aproximativ 80% -90% din totalul traficului malițios din
Internet. În final cele doua grupur i au ajuns să dezvolte categorii de malware care
să distrugă virușii adversarului. Aceștia iși trimiteau chiar și mesaje de
amenințare. Citez: „ we are the skynet – you can’t hide yourself! – we kill malware
writers (they have no chance!) – [LaMeRz ->]MyDoom .F is a thief of our idea! –
-< SkyNet AV vs. Malware > – ->->” sau „ Skynet AntiVirus – Bagle – you are a
looser!!!! ”, dar și de partea opusă: „ Hey, NetSky, f**k off you b**ch, don’t ruine
our bussiness, wanna start a war ? ”. Pe 30 Aprilie, un nou malware de tip vierme
a penetrat calculatoarele folosindu -se de o vulnerabilitate din serviciul LSASS din
Windows pe nume Sasser . A produs pagube imense în sensul că au fost atacate
instituții guvernamentale, spitale, universități, a eroporturi, zborurile au fost
anulate. Microsoft anunță că va oferi 250.000 de dolari recompensă pentru a primi
orice informație legată de scriitori de malware Mydoom și Sasser , dar totul a
rămas un mister. Pe 27 Mai apare primul malware, Rugrat care are c apacitatea
de a infecta fișiere executabile pe 64 biți. În iunie apare și primul virus pentru
telefoanele smart. Acesta caută conexiuni Bluethoot deschise și trimitea țintei cod
pentru a fi executat. Ca o concluzie a acestui an, dezvoltatorii de antiviruși s-au
\axat mai mult pe cercetarea virușilor de tip vierme, a mail spamming -ului.
Autoritățile au devenit mult mai restrictive fiind primul an în care se încep a face
arestări ale dezvoltatorilor de viruși , iar firmele care dețin monopolul pe piață
oferă recompense pentru obținerea de informații în legătură cu creatorii, cu
criminalii informatici. Până în prezent, aceste tehnici de penetrare a
calculatoarelor au devenit din ce în ce mai sofisticate și mai u șor de găsit din cauză
că au apărut o mulțime de noi programe pentru facilita viața de zi cu zi. Numărul
de vulnerabilități poate fi direct proporțional cu numărul de aplicații dezvoltate.
Noi categorii de viruși pentru smartphone au apărut, pentru noile s isteme de
operare respeciv Windows Phone, Android, Symbian, iOS.
Recent putem vorbi de Cryptolocker apărut în 2013 care a schimbat
complet percepția lumii despre malware și despre cât de periculoși pot fi aceștia.
NECLASIFICAT
NECLASIFICAT
Page 23 of 97
Acesta este un trojan care cripta fișiere le unui calculator infectat special destinat
sistemului de operare Windows. Hackerii criptau datele folosind un algoritm
asimetric cu o cheie privată și una publică cu care criptau fișierele. Fișierele erau
imposibil de decriptat fără cheia privată. Cryptolocker afișa și un mesaj pe ecran
precum că utilizatorul trebuie să plătească o anumită sumă de bani dacă dorește
ca fișierele lui să fie decriptate. Inițial ținta primea pe email un fișier .docx sau
.pdf împreună cu un executabil ascuns. Odată ce ut ilizatorul deschidea fișierul,
executabilul era rulat și descărca fișierele de care avea nevoie. Deoarece era un
trojan acesta nu se replica ci că avea nevoie de fișiere pentru a infecta calculatorul.
Multe antivirusuri pot detecta și elimina acest malware , dar problema rămâne la
fișierele care sunt deja criptate.
În 2016 un alt malware care a provocat daune majore în întreaga lume a
fost Cerber . Acesta reușea să
infecteze calculatorul având un
sistem de operare Windows
foarte ușor. Ținta primea un
document Word care conținea
un macro ce deschidea un
PowerShell în modul ascuns.
Aceta se conecta la un server de unde downloada ransomware -ul. Mai ap oi
PowerShell -ul executa malware -ul și fișierele erau criptate. De asemenea ca și în
cazul lui Cryptolocker, un mesaj apărea pe ecran unde se cerea o anumită sumă
de bani.
2017 vine cu un malware care a infectat peste 150 de țări din întraga
lume. Wanna Cr y care era destinat tot pentru sistemele de operare Windows .
Acesta se baza pe un exploit numit Eternal Blue dezvoltat de NSA (National
Security Agency) pentru versiuni de Windows mai vechi. Eternal blue este un
exploit pentru SMB (Server Message Block) ca re operează la nivel de aplicație și
presentare pe stiva ISO OSI și care permite accesul mai multor dispozitive externe
imprimante, porturi seriale să împartă fișiere într -o rețea. WannaCry folosea un
mecanism automat de scanare a sistemelor pentru a vedea care sunt vulnerabile și
instala un backdoor, DoublePulsar . După ce ransomware -ul cripta datele, acesta
folosea exploitul pentru a se răspândi în rețea.
Figură 4 Cerber
NECLASIFICAT
NECLASIFICAT
Page 24 of 97
3. Importanța temei
Dacă privim în istorie au fost perioade în care s -au dezvoltat anumite tipuri de
malware care au folosit ingineria socială. Aceasta se referă la faptul ca pentru a
infecta un calculator ai nevoie de interacțiune cu user -ul. Atacatorii folosesc
tehnici psihologice pentru a -i păcăli. Odată cu apariția internetului, interacțiunea
user-atacator a devenit mai ușoară și rapidă. Ceea ce s -a întâmplat până acum
demonstrează faptul că omul nu a învățat nimic, nu a învățat cum să se protejeze
de atacatori, de potențialele amenințări, de „ofertele” promițătoare primite pe mail
sau chiar de programe software ce oferă pe lângă ceea ce ai tu nevoie și alte soft –
uri ascunse. De aceea putem vorbi de doi factori foarte important atunci când
vorbim de protejarea împotriva malware: tool -uri de protecție și vulnerabilitățile
oamenilor. Ambii factori sunt pe cât de importanți pe atat de periculoși deoarece
într-o companie mare e fo arte important ca să ai angajați de încredere care
folosesc aplicațiile în mod corespunzător. Primul factor e mai ușor de implementat
deoarece softul face ceea ce și -a dorit utilizatorul în principiu, dar când e vorba
de user, acesta e foarte imprevizibil. Uită să facă update -urile la timp, pune parole
slabe, evită autentificarea în mai mulți pași, se grăbește să facă un anumit lucru și
multe alte motive pentru care userul este mult prea maleabil pentru a avea
încredere totală în acțiunile sale. Pe lângă as ta, oamenii sunt de obicei atrași de
„ofertele” bune de pe piață, de câștiguri ușoare și de bonusurile promise. De câte
ori ați întâlnit o pagină cu text care să iasă în evidență și care scria „Click aici
pentru a câștiga un anumit lucru!”. Probabil de foa rte multe ori. Este foarte
important că omul trebuie să aibă un minimum de educație în ceea ce privește
protejarea de fișiere malițioase. Un antivirus care de obicei nu este free, ne
protecează în principiu de fișierele care exista deja pe hard disk dar nu ne pot
proteja de infectarea calculatorului. De exemplu dacă un user primește un
atașament pe mail , antivirusul nu îl va detecta decât în momentul când ajunge pe
calculator.
Această temă a fost gândită inițial pentru a fi folosită într -o rețea internă pen tru
verificarea fișierelor malițioase sau benigne provenite dintr -o zonă demilitarizată
(DMZ). Un DMZ are rolul de a separa serviciile și accesul la internet de o rețea
locală. Pe de altă parte, pentru un utilizator normal cel mai important e să știe
după o analiză dacă acel fișier este sau nu malițios și nu neapărat informațiile
extrase în urma efectuării raportului de către sistem. Informațiile extrase trebuie
să fie destul de clare și să ofere analistului o idee de ansamblu asupra acelui fișier.
NECLASIFICAT
NECLASIFICAT
Page 25 of 97
Cea mai mare problemă este că decizia finală trebuie luată de către analist și nici
un fișier malițios nu trebuie șters după analiză, ci trebuie facută o bază de date cu
toate informațiile posibile despre acesta deoarece exista probabilitatea foarte mare
ca și alt e calculatoare din rețea să fie infectate cu același tip de malware. Nici o
aplicație software nu poate garanta 100% că un sistem este sigur, că nu există
fișiere malițioase sau să garanteze că un anumit malware este sau nu benign.
Atunci când se detectează un malware trebuie să se țină cont și de ceea ce vrea să
facă malware -ul, de ceea ce vrea să obțină din sistemul tău, cum a ajuns acolo și
ce caracteristici (fe ature -uri) are. Aceste caracteristici definesc în mod unic un
anumit fișier malițios. De aceea raportul generat de aplicația mea este foarte
important. Pentru că oamenii au tendința de a da click pe orice, aceste fișiere
trebuie mai întâi verificate. Multe dintre tipurile de malware își fac vazută
prezența și sunt identific ați destul de târziu. Putem face o comparație cu mersul la
medic. E mult mai bine și ușor să previi o boală decât să o tratezi. La fel e și în
cazul infectării cu malware, uneori poate fi chiar prea târziu, de exemplu
infectarea cu un ransomware. Având în vedere că volumul de date și de procesare
a crescut considerabil o îngreunare a acestora ar produce multe efecte asupra
utilizatorului și a sistemelor. De exemplu traficul de rețea supraîncărcat este un
semn al prețenței unui malware. Terminare neașteptată ale unor aplicații poate
cauza pierderi de date importante. Aplicația dezvoltată de mine trebuie să vină în
ajutorul utilizatorilor atunci când vine vorba de accesat fișiere. Înainte de a
executa sau deschide un fișier, scanarea folosind aplicația trebuie să ofere
informații corecte și credibile care să ofere userului incredere că acel fișier nu este
malicios. Este important s ă se automatizeze pocesul de detecție și extragere a
indicatorilor de compromitere deoarece există foarte multe amenințări, fie ele
false sau nu. Prin analiză ne putem da seama daca până în acel moment a furat
informații, dacă a încercat să comunice cu alte entități din internet, dacă a transmis
ceva și ce tip de malware este. Uneori din dorința de a fi faimoși, unii atacatori
pot să lase urme în fișierul malițios și astfel ne putem da seama care ar putea fi
autorul. Sau un alt caz, dacă un malware se conectează la un server, ne putem da
seama după ip în ce loc este acesta. Foarte multe dintre alarme sunt false sau apar
diferite tipuri de malware scrise de tineri care sunt curioși să vadă ce se întâmplă
sau în marea majoritatea a cazurilor sunt scrise la un nivel scăzut al complexității.
De obicei criminalii informatici caută informații prețioase, cum ar fi parole sau
conturi bancare pe care mai apoi le pot folosi. Pierderea de informații este cea mai
acțiune care se poate întâmpla. De obicei sunt foarte prețioase și nu dorim să aibă
cineva date despre identit atea noastră. O întrebare pe care ar trebui sa și -o pună
NECLASIFICAT
NECLASIFICAT
Page 26 of 97
analiștii de malware este „Cine a creat acest malware și de ce?” deoarece această
întrebare ne poate oferi date despre comportamentul fișierului malițios sau indici
care să ne permită clasificarea ac estuia. Având în vedere că cele mai multe cazuri
de răsândire sunt prin email, după descărcarea atașamentului trebuie făcută o
verificare amănunțită a pdf -ului sau word -ului primit deoarece acestea pot avea
cod ascuns și lansa în execuție alte executabile. Aceste executabile se pot găsi în
atașament vizibile sau hidden , ascunse. La rândul lor pot sa nu conține neapărat
cod mailițios, dar se pot ascunde în calculator sau se pot activa după o perioada
de timp și probabilitatea ca sa -și descarce un payload este destul de mare. Codul
ascuns din document poate să facă append la un alt executabil a executabilului
care există în atașament și să schimbe adresa de la care începe procesorul să
execute programul. Conform unei statistici făcută de Safeatlast între decembrie
2018 și ianuarie 2019 atacurile cu fișiere malițioase a crescut cu 61 %. Karspesky
și AV -TEST au declarat ca au cel puțin 350.000 de fișiere malițioase pe zi de
analizat. Aceste cifre sunt imense, de aceea trebuie să luăm măsuri. Cea mai bună
măsură e să oferim o anumită educație utilizatorilor care se pot confrunta în orice
moment cu un potențial malware. Pe lângă asta este recomandat să nu instalăm
aplicații gratuite pentru că pot ascunde bucăți de cod malițios. Pe de altă parte,
având în vedere că putem lucra în structuri care să schimbe informații secrete,
frica de scurge ri de informații fiind mare, trebuie să luăm măsuri pentru a ne
proteja, deoarece nu este mereu de ajuns doar un antivirus. În orice moment un
utilizator neatent paote veni cu un stick USB să transfere niște fișiere și astfel ne
putem infecta. Ca să folose ști o aplicație de scanat fișiere nu trebuie sa fii
specialist. Acestea în principiu au rol pur informativ. Amenințările sunt peste tot
și cei ce vor să facă rău, să amenințe nu vor ierta pe nimeni.
De ce este impotantă această temă? În urma unui studiu efectuat pe un
eșantion de aproximativ 100 de oameni acesta ne -a indicat faptul că indiferent de
vârsta subiecților (considerând că cei tineri dețin mai multe cunoștiințe despre
securitatea calculatoarelor, dar nu este o regulă, concluzie luată în urma stu diului
) aproximativ 80% dintre aceștia au observat anomalii ale calculatoarelor în
sensul că acestea merg foarte greu de la un timp. În jur de 30% dintre useri nu au
un antivirus pe calculator ceea ce îi face să fie mai predispuși la atacuri. Problema
cea mai mare a reprezentat -o eliminarea unui malware din calculator. Ciudat este
faptul că 10% dintre subiecți efectiv nu au știut cum să reacționeze în urma
infectării. 22% au răspuns că în urma atacului au reinstalat windows -ul ceea ce
indică fa ptul că nu dețin cunoștințele necesare efectuării unei analize primare.
Ultima întrebare care se referă la ideea că dacă subiecții au primit email -uri
NECLASIFICAT
NECLASIFICAT
Page 27 of 97
ciudate cu atașamente ce conțineau documente. 40% dintre aceștia au răspuns că
au primit. Un aspect inter esant a fost atins. Am întrebat eșantionul cam cât de des
își fac update -uri. 17% au afirmat că nu au făcut niciodată un update al windows –
ului în schimb ce 25% nu au mai făcut un update de cel puțin 6 luni.
4. Tipuri de malware și atacuri
cibernetice
Atacurile cibernetice au un rol important
deoarece cu ajutorul acestora putem căuta
vulnerabilități în aplicații sau într -o anumită
rețea și astfel putem crea un exploit cu ajutorul
căruia putem folosi un malware pentru a infiltra
un calculator. Pentru ca un malware să își
îndeplinească scopul, trebuie ca să ajungă
cumva în calculatorul userului. O categorie din
amenințările existente sunt cei malware.
Aceștia se împart în viruși, viermi, calul trojan,
ransomware, spyware, adware și
scareware ,rootkit -uri.
Virușii sunt o categorie de malware care poate introduce cod executabil
suplimentar sau date într -un fișier executabil ( PE ) inițial inofensiv așteptând
rularea aplicației de către use r. Pe lângă asta permite copierea acestuia în alte
fișiere. Toate aceste lucruri se întâmplă fără conștientizarea userului.
Viermii, după cum spune și numele, ne indică modul de răspândire al acestora.
Inițial există o mașină infectată conectată la o rețea de internet și prin intermediul
acesteia și prin vulnerabilitățile găsite reușește să infecteze și alte sisteme. Un
malware de tip vierme meru cauzează daune rețelei de calculatoare. De exemplu
poate ocupa lățime de bandă și astfel îngreaunează foarte mult traficul. Un vierme
modifică aproape întotdeauna fișiere din calculatorul infectat. După cum am
menționat, dacă o vulnerabilitate este găsită și nu se lansează un patch pentru
aceasta, un malware de tip vierme poate infecta ținta și astfel are loc un atac de
tip 0 d ay. Userii pot preveni infectarea cu un malware de tip vierme prin update –
urile la timp a soft -urilor și sistemului de operare, prin instalarea unui firewall,
Figură 5 Categorii malware
NECLASIFICAT
NECLASIFICAT
Page 28 of 97
prin adaugarea ACL -urilor (Acces Control List) pe un router sau switch, poate
adăuga un filtru d e pachete sau prin instalarea unui IDS (Intrusion Detection
System) sau IPS (Intrusion Prevention System) .
Despre ransomware putem spune că este unul dintre cele mai periculoase
forme de malware. În toate cazurile acesta în momentul în care infectează un
calculator criptează fișierele fie cu o cheie simetrică sau asimetrică fie cu o cheie
total random. În cazul în care se folosește o cheie random probabilitatea de
recuperare a fișierelor tinde spre zero, iar în celălalt caz trebuie ca userul să dețină
cheia de decriptare. Astfel, userii vor avea afișat un mesaj în care sunt ademeniți
să plătească o anumită sumă de bani pentru a primi cheia, dar se pare că nu prea
se întâmplă. Un ransomware puternic folosește un algoritm criptografic pentru
interzicerea acce sului la fișiere. În acest paragraf putem vorbi și despre
Cryptovirology , fiind considerat domeniul care studiază modul în care se poate
crea un malware de tip ransomware cât mai artistic folosind criptografia. Acest
domeniu s -a născut pentru a face difere nța între ceea ce vede un atacator într -o
cheie publică și ceea ce vede un analist. Un atacator vede faptul ca deși exista în
malware cheia publică, acesteia îi corespunde și o cheie privată accesibilă userului
în cazul plății , iar în cazul analistului, acesta vede cheia publică în malware și atât.
Tehnica a fost prezentată prima dată în anul 1996 și a fost denumită cryptoviral
extortion . În prima jumătate a anului 2018 au fost 181.5 milioane de atacuri cu
ransomware , cu 229% m ai mare ca în anul 2017. Un succes a avut Cryptolocker
care a produs daune de 3 miliaone e dolari doar Americii. Într-un ransomware se
poate folosi și criptarea hibridă. De exemplu atacatorul generază o pereche de chei
asimetrice. Cheia publică este înglob ată în ransomware. Odată ce malware -ul a
infectat calculatorul, acesta generează o cheie simetrică random care criptează
fișierele utilizatorului. Cheia random este criptată asimetric folosind cheia publică
a atacatorului. Este generată o cheie random deoa rece cel mai probabil folosește
un algormit pe blocuri care este mult mai rapid decât o criptare asimetrică.
Teoretic după ce plata a fost efectuată către atacator acesta ar trebui să furnizeze
o cheie privată cu care să decripteze acea cheie simetrică ran dom și astfel userul
își poate decripta fișierele. De obicei până la plata către atacator, calculatorul
userului trebuie blocat prin posibilele următoare metode: modifcare MBR -ului
(Master Boot Record ) pentru a preveni restartarea calculatorului până la r epararea
sistemului de operare sau prin setarea Windows Shell -ului. Câteva metode de a
preveni pierderea datelor importante prin infectarea cu un ransomware sunt:
folosirea Cloud -ului, folosirea VSS (Volume Shadow Copy) din windows, dar
NECLASIFICAT
NECLASIFICAT
Page 29 of 97
uneori atacatorii c riptează și aceste date, mai puteți folosi din Windows 10 acel
Windows Defender deoarece acesta urmărește accesul la fișiere.
Un alt tip de malware este calul troian. Acesta are rolul de a se pretinde a fi
un program cu func ționalități normale, dar care poate avea o funcție dăunătoare
care este apelată atunci când utilizatorul rulează programul. În principiu este
prezentat cu o reclamă frumoasă pentru a -l convinge pe utilizator că are nevoie de
ea și că poate conține funcțion alități noi. Calul troian este răspândit prin
intermediul ingineriei sociale, de exemplu când un utilizator primește pe email un
atașament. Mulți dintre aceștia sunt folosiți pe post de backdoor pentru a obține
acces neautorizat la calculatorul țintei. Ace st lucru poate fi detectat prin urmărirea
utilizării procesorului sau a fluxului de date trimise sau primite dintr -o rețea. Spre
deosebire de viruși sau viermi, caii troieni nu se pot răspândi singuri în rețea. Prin
obținerea accesului asupra unui calculat or acest tip de malware poate descărca
alte tipuri de fișiere infecțioase cum ar fi un payload, un reverse shell sau un
spyware. Cum ne putem proteja de un cal troin? Ei bine, fiind cât mai atenți la
ceea ce descărcăm de pe internet, la ce fel de email -uri primim, cu ce atașamente
sau evitarea site -urile dubioase.
Un Spyware este un tip de malware concentrat să fure informații prețioase
din calculatorul țintei. Este unul dintre cele mai întâlnite tipuri de malware
deoarece informația este destul importantă în ziua de astăzi, cine are informație
are și putere. De obicei se infiltrează în calculatorul personal fără permisiuna ta.
De obicei folosește un alt tip de m alware pentru a se instala, de exeplu un virus
sau vierme. Acesta mai mult ca sigur rulează în background și dacă nu este bine
optimizat poate consuma din procesor destul de mult. În marea majoritate a
cazurilor acesta poate trimite datele către un server central prin diferite protocoale
și porturi. Urmărirea acestora este destul de importantă. Poți fi infectat prin
diferite metode cum ar fi breșe de securitate, vulnerabilități, neatenția
utilizatorului, atașamente primite pe mail, marketing, extensii ale p rogramelor
free.
Rootkit -urile sunt acele tipuri de malware în care principalul obiectiv este
de a rămâne cât mai mult timp în calculator pentru a evita în mod clar detecția.
Prin diferite metode sau rutine aceștia încearcă să nu fie observați de către
utilizatori, de exemplu să nu fie văzut în lista de procese care rulează. În cazul în
care este detectat și șters, un rootkit se poate copia în alt folder din calculator și
să se laseze în execuție. O modalitate de a scăpa de un astfel de malware este de
NECLASIFICAT
NECLASIFICAT
Page 30 of 97
a le șterge simultan ceea ce e destul de imposibil. Un rootkit pe lângă faptul că se
poate copia singur, mai poate să încerce să -și îndeplinească și alte obiective, cum
ar fi să extragă fișiere și să le trimite pe un server ca un spyware sau să ofere
control de la distanță asupra acelui calculator. Aceștia ajung în calculator prin
diferite metode deja cunoscute, ca de exemplu ingineria socială , phishing sau cu
ajutorul unui vierme. Cum ne dăm seama că am fost infectați cu un rootkit? În
primul rând prin îngre unarea calculatorului deoarece poate folosi procesorul
destul de mult. În al doilea rând poate dezactiva serviciul de detecție a unui
antimalware sau că al nostru calculator are un comportament ciudat. De exemplu
setările de Windows care se schimbă singure , cum ar fi imaginile de pe desktop.
Există mai multe feluri de rootkit cum ar fi cel care rulează în kernel mode. Acesta
aduce modificări asupra sistemului de operare sau driverele prin introducerea de
cod. Un alt tip de rootkit este bootkit -ul care infec tează MBR -ul (master boot
record) hard disk -ului.
Un backd oor este un tip de malware capabil să „treacă” peste procedurile
de autentificare . Chiar și algoritmii de criptare sau protocoalele de comunicații
pot avea un backdoor lăsat intenționat sau nu. De ex emplu în 2014 generarea
numerelor random folosind funcția Dual_EC_DRBG (Dual Elliptic Curve
Deterministic Random Bit Generator) era predictibilă. Odată ce un backdoor a
fost instalat pe calculator, mai mult ca sigur și alte tipuri de backdoor , viermi, cai
troieni vor fi instalate. Ideea de backdoor a plecat de la faptul că unele companii
doreau să ofere suport tehnic pentru clienți. Un backdoor poate fi „implantat”
chiar și de companiile care produc echipamente hardware sau aplicații pentru a
avea acces la datele criptate. Acest lucru este foarte important deoarece
integritatea noastră informațională are de suferit. Una dintre metodele de
prevenție și detecție o reprezintă folosirea unui fitru al pachetelor din rețea pentru
a monitoriza traficul. O altă meto dă ar fi folosirea unui firewall pentru a
restricționa traficul pe anumite porturi.
NECLASIFICAT
NECLASIFICAT
Page 31 of 97
Ce-l mai simplu tip de malware este un adware. Acesta se angajează să
ofere reclame, cel mai des prin intermediul browse rului web, frumos prezentate,
cu impact, care sa -l facă pe utilizator să instaleze alte programe care aparent se
cred a fi necesare și importante. Prin intermediul acestora se pot instala automat
alte tipuri de fișiere infecțioase. Parte interesantă este că la fiecare vizualizare a
unei reclame de către un user se aduc
venituri dezvoltatorului. Odată ce o
anumită reclamă a fost accesată
probabilitatea de a primi din ce în ce mai
multe oferte ireale dar de care probabil
aveți nevoie e ste din ce în ce mai mare. De
obicei un spyware apare de la un program
gratuit instalat fără a citi condițiile sau
politicile acestuia și fără să fim atenți la
ceea ce instalăm. Cum ne dăm seama că
este un adware? Simplu. Când suntem
redirectați automat că tre alte reclame, când
sunt afișate fără acordul nostru sau când
link-urile au un format neobișnuit.
Atacurile cibernetice sunt destul de
importante deoarece prin modalitățile lor de căutare a vulnerabilităților și prin
modul de transfer al fișierelor pute m „implanta” pe calculatorul țintei un malware.
Privind figura 6 putem considera că un malware poate fi considerat un exploit.
Prin diferite tehnici ale atacurilor cibernetice se găsește o vulnerabilitate a unei
rețele sau a unui calculator. Un așa zis ata cator cu rea intenție dorește să
exploateze acea vulnerabilitate astfel că dezvoltă o „aplicație” adică un exploit.
Acel exploit ajută atacatorul să preia controlul asupra unui calculator, să treacă de
sistemele de autentificare printr -un rootkit și să des carce un payload adică un
malware. Cel mai folosit tool pentru a găsi vulnerabilități este însuși sistemul de
operare Kali Linux având foarte multe aplicații implicit instalate.
Figură 6 Malware tree
NECLASIFICAT
NECLASIFICAT
Page 32 of 97
Unul dintre cele mai grele atacuri cibernetice de prevenit este DoS (Denial of
Service) sau DDoS (Distributed Denial of Service) .Acest tip de atac atentează la
resursele unui serviciu până când acesta nu mai reușește să răspundă în timp util
sau deloc. Atacul DdoS utilizează ca sursă
de cereri către server calculatoarele userilor
controlate fără consimțământul lor.
Această metodă nu poate aduce un
beneficiu material atacatorului . În schimb
îi poate oferi o satisfacție , dar motivul
pentru care să lansezi un atac DoS/DdoS
este ca să pregătești terenul pentru alt atac.
Cum ar fi session -hijacking . Acesta este
un atac de tip Man in the Minddle care se
interpune între client și un server din internet. Principiul este următorul: atacatorul
preia controlul asupra v ictimei, acesta deconectează clientul de la server, își
înlocuiește adresa IP cu cea pe care a avut -o victima și își continuă comunicarea
cu serverul crezând că este încă clientul. Alte metode folosite într -un atac
DoS/DdoS sunt Teartrop attack care modifi că pachetul IP astfel încât la
reconstrucție va da eroare. Într-un Smurf attack , victima bineînțeles, are un IP.
Atacatorul trimite o cerere ICMP către adresa de broadcast a rețelei cu IP sursă ca
fiind ip -ul victimei astfel că toate răspunsurile de la toa te calculatoarele din rețea
se vor întoarce către ip -ul victimei. Pentru a ne proteja de acest tip de atac este de
a dezactiva răspunsul la ICMP cu adresa destinație ca fiind adresă de broadcast.
O altă metodă de tip DoS/DdoS este Ping of Death când atacatorul
defragmentează un pachet de 65.535 octeți și îl trimite victimei. Aceasta încearcă
să asambleze pachetul există posibilitatea să apară un buffer overflow.
În ceea ce privește atacurile de tip Man in the Middle, nu există sisteme pentru
a preveni toate tipurile acestui atac. În principiu certificatele digitale și criptarea
ne oferă o oarecare siguranță , dar sunt și cazuri în care criptarea nu este de ajutor.
Atacuri de tip phishing este o metodă foarte ușoară de a răspândi o anumită
formă de malware. Probabil nu există user pe acest Pământ care să nu fi primit cel
puțin odată un email care părea important și care conținea un atașament evident
ce conține un malware sau un link către un site malițios. Ingineria socială este
folosită destul de m ult deoarece pot fi mail -uri destinate anumitor persoane dintr –
o instituție cu rol cheie. Asta necesită timp și documentare.
Figură 7 DOS Atack
NECLASIFICAT
NECLASIFICAT
Page 33 of 97
Cross Side Scripting (XSS) este un tip de atac care se realizează prin adăugarea
unui payload conținând cod Javascript în baza de d ate a unui website. Când
victima accesează acel website, payload -ul este transmis printr -o interogare în tag –
urile HTML din pagină și executat. Cele mai importante consecințe ale unui XSS
sunt: extragerea informațiilor de pe calculatorul victimei, extrager e e informații
despre rețea, furt de cookie -uri și cel mai periculos este ca atacatorul să aibă acces
remote la calculatorul victimei.
B. Studiu actual
1. Soluții similar e
În acest capitol voi prezenta căteva aplicații deja existente pe piață cu
ajutorul cărora putem efectua o analiză fie ea statică sau primară. Aceste soluții
au fost dezvoltate de firme mari care încearcă să și obțină profit în urma vânzării.
Indiferent de ce tool folosim pentru analiză, nu ne putem baza 100% pe decizia
pe care o poate lua în legătură cu un malware. Analiza statică se referă pe
extragerea de informații, dar când vine vorba să analizăm dinamic un fișier este
mult mai complicat. Toate soluțiil e existente pe piață nu pot să efectueze într -un
mod fluent o scanare și în majoritatea cazurilor acestea pot prezenta un mod de
funcționare anormal. De exemplu simularea unor instrucțiuni care trebuie să
randeze sau mai bine zis care folosesc apeluri de s istem care lucrează cu controale
grafice.
Dacă vorbim de analiza statică, există numeroase aplicații care extrag
informații, acestea fiind implementatate acum mult timp și sunt pe 32 bit. Nu
există pe pia ță un soft care să extragă o gamă largă de date. Fiecare program este
pentru a extrage ceva anume. De exemplu Dependency Walker care are rolul de
a afișa doar librăriile dinamice importate sau exportate de executabil și funcțiile
aferente acestora. O librărie dinamică este tot un executabil doar că are un anumit
bit din header diferit care indică faptul ca nu este executabil ci DLL. Un DLL
conține funcții care sunt automat încărcate în memorie atunci când un executabil
cere acea librărie dinamică și de obicei este la runtime. O altă soluție în analiza
statică o reprezintă PeiD care este folosit pentru a
vedea dacă un executabil este obfuscat într -un
anumit fel. Putem spune că acel fișier PE este
împachetat modificându -și secțiunile cu denumiri
Figură 8 PEview error
NECLASIFICAT
NECLASIFICAT
Page 34 of 97
ciudate . Un asemenea tool folosit pentru împachetare este UPX și dacă observăm
secțiunile acestea sunt denumite după numele aplicației cum ar fi upx1,upx2, etc.
O altă aplicație utilă, dar care este limitată pentru fișiere pe 64 bit este PEview .
Acesta parsează fișierul și extrage informații din header -ul PE -ului, dar sunt foarte
greu de observat , nu are o interfață grafică tocmai prietenoasă. Problema este că
extrage toate informații și doar pe cele care ar putea fi indicatori de compromitere.
Pe lângă asta este folosit și pentru afișarea secțiunilor prezente, dar fără să
calculeze entropiile deoarece acesta poate fi un indicator că o anumită secțiune
este obfuscată sau criptată. Acest tool oferă și o viualizare în format hexazecimal
și este des tul de util, dar problema este că nu putem modifica nici un octet. O altă
problemă o reprezintă faptul că pentru a extrage string -urile ASCII sau UNICODE
din executabil va trebui să folosim alt tool. Este foarte important ca în decursul
analizării dinamice să observăm procesele existente și ce apeluri de sistem sunt
apelate sau ce apeluri ale api -uri sunt de asemenea folosite. Un astfel de tool poate
fi chiar Task Manager care afișează toate procesele care rulează și care sunt
vizibile. Bineînteles, există și procese care pot rula fără ca să fie afișate. Pentru
identificarea în mod real a apelurilor se poate folosi Process Monitor . Problema
cu acest tool este că e foarte greu să sortezi sau să observi apelurile de la un anumit
proces deoarece în decurs a cât eva secunde pot fi zeci de mii de apeluri. O altă
observație ar fi că nu pot să monitorizez apelurile pe un anumit interval de timp.
Efectiv aceasta rulează până în momentul în care opresc aplicația. IDA Pro este
un tool profesional, în varianta pro se găs ește doar dacă îl cumperi. Este de mare
ajutor deoarece decompilează codul mașină în cod assmebly și astfel se poate face
reverse engineering. Are și o variantă de a crea o structură arborescentă pe baza
apelurilor de funcții. În ceea ce privește analiza d inamică treburile sunt mult mai
relative. Trebuie creat un mediu sigur în care se poate detona . De obicei se
folosește o mașină virtuală de Windows 7 fără antivirus. Cel mai util tool pentru
a crea mașina virtuală este VMWare și apoi trebuie configurată. Regiștrii din
windows au un rol bine definit. Aceștia au diferite roluri și reprezintă setările ce
sunt în windows -ul prezent sau în funcție de ce user este logat la momentul
respectiv. Un anumit malware poate schimba aceste setări pentru a rămâne
persiste nt în calculator. Prin acești regiștrii se pot autorula la fiecare pornire a
sistemului de exemplu. Pe de altă parte în Windows 7 se puteai seta în regiștrii ce
dll-uri să încarce un anumit executabil și se putea face un dll injection destul de
ușor. În pr incipiu atunci când se analizează dinamic se pot modifica valorile
regiștrilor și de aceea se face un snapshot înainte și după ce este oprit procesul.
NECLASIFICAT
NECLASIFICAT
Page 35 of 97
Un astfel de tool este Regshot , destul de minimalist care este capabil să compare
octet cu octet al fiecă rui snapshot.
Putem vorbi și despre antivirusuri. Acestea în principiu au o bază uriașă de
hash-uri ale fișierelor malițioase și probabilitatea ca să fie găsit este foarte mare.
Pe parte de analiză statică procesul este destul de simplist. Se extrag informațiile
aferent e și apoi după ce este analizat dinamic se face reverse engineering pe cod
pentru a dezvolta noi feature -uri ale softului de detecție. Pentru a -l analiza
dinamic, antivirușii folosesc un emulator care simulează funcționarea unei mașini
virtuale cu câteva s ute de mb ram și cam aceeași memorie hdd. În cazul în care se
regăsesc algoritmi criptografici în fișierul malițios aceștia se execută direct pe
procesor. Acest emulator poate prelua anumite blocuri de cod pentru a identifica
o anumită semnătură și va treb ui să țină cont de ASLR (Adress Space Layout
Randomization). Apoi pentru a simula un debug step by step, se ia fiecare
instrucțiune și se „compilează” în cod C și se verifică fiecare apel de sistem sau
de kernel. În momentul în care un apel de sistem/kerne l este identificat atunci
aplicația semnalează că ar fi un malware. Acest sistem funcționează până în
momentul în care fișierul nu este obfuscat sau criptat. Se mai pot folosi sisteme
anti-debugging sau anti virtual machine pentru a contracara analiza dina mică. Alte
aplicații antivirus folosesc module de inteligență artificială dar pentru asta va
trebui să ai servere pentru a le antrena și analiza probabil se face remote. În cazul
în care fișierul malițios are un comportament polimorfic sau metamorfic devin e
din ce în ce mai greu să fie analizat automat. Alte aplicații web folosite pentru a
identifica dacă un fișier este malițios sau benign este VirusTotal , dar acesta nu
ne poate oferi informații de bază pentru a trage noi o concluzie. În ceea ce privește
conexiunile/porturile pe care le poate deschide un malware se poate folosi
ApateDNS care este intuitiv și controlează răspunsurile DNS adică ascultă tot ce
se petrece pe portul UDP 53. BinDiff este o aplicație folosită pentru a compara
două binare ce raportează funcțiile care lipsesc sau ce blocuri de cod sunt
asemănătoare. Este util în cazul în care se dorește să se determine o anumită
semnătură a fișierului malițios sau dacă se dorește identi ficarea acestuia în mod
unic. Bochs este un alt utilitar cu care se poate analiza dinamic un fișier. Acesta
este un debugger care simulează instrucțiunile x86 . O altă aplicație folositoare
pentru monitorizarea sistemului de fișiere, regiștrii și procesele este Capture
BAT dar problema este că nu are interfață grafică. În cazul în care doriți să
NECLASIFICAT
NECLASIFICAT
Page 36 of 97
modificați un fișier PE puteți folosi CFF Explorer cu care puteți aduce schimbări
asupra secțiunilor existente sau tabelei de importuri. Pentru a vedea opcodul într –
o formă mai „citibilă” se poate folosi Hex-Rays Decompiler care poate
recunoaște chiar și funcții din diferite api -uri. Pentru fișierele de t ip ELF
(Executable Linkable Format), fișierele executabile pentru kernelul de Linux, se
pot analiza dinamic folosind gdb -ul stardard din Linux sau un tool foarte folositor
cu o interfață prietenoasa este gdb-peda . În principiu se folosesc comenzi de
Linux pentru analiza statică.
În ceea ce privește analiza unui PDF sau WORD, static se poate realiza
printr -o parsare. Unul dintre tool -urile foarte bune existente pe piață într -o
variantă free este pdf-parser de Didier Stevens. O variantă open -source. Dar cu
toate acestea nu reușește să extragă codul malițios deja existent în fișier. Acest
tool nu folosește o interfață grafică și este folosit doar pe linux în linie de comandă
ceea ce pentru un utilizator normal poate fi destul de greoi. Pentru a analiza un
fișier word, inițial nu găsisem nici un tool care să parseze fișierul ținând cont de
structura fișierului. Analiza dinamică este realizată folosind un sandbox care
deschide aplicația și monitorzează instrucțiunile. Mai apoi acesta generează un
raport p e baza căruia se poate lua o decizie. Tool -uri intuitive pe care le poți folosi
fără o bază pentru a -l clasa drept malware sau doar pentru a genera un raport
„citibil” ale acestor doua tipuri de fișiere nu există. Majoritatea sunt scrise în
python nefiind prea maleabil când vine vorba de interfețe, dar e foarte bun pentru
parsări. Memoryze este un tool pentru a extrage informațiile din memorie live.
Poate monitoriza fiecare proces în parte inclusiv fiecare modul în parte, dll -uri
încărcate, drivere sau ape luri de sistem din kernel mode. Pentru monitorizarea
traficului se poate folosi Netcat . Acesta ascultă fiecare port în parte și
înterceptează conexiunile către diferite ip -uri. Pe de altă parte poate afișa într -o
Figură 9 Hex-Rays Decompiler
NECLASIFICAT
NECLASIFICAT
Page 37 of 97
interfață grafică toate datele primite. OSR Driver Loader este un tool folosit
pentru a încărca în memorie un driver fără a restarta calculator. Acest lucru este
util în analiza dinamică atunci când se dorește interceptarea funcțiilor din kernel
space. Snort este un intrusion detection sistem folosit pentru a detecta trafic
malițios pe baza unei semnături. Poate rula chiar și offline pentru a ana liza
pachetele.
2. Analiza de bază a malware
În ceea ce privește analiza de bază, putem spune că este una super ficială,
adică aparent o poate face oricine care are cunoștiințe de bază despre indicatorii
de compromitere. Ca și analist nu va trebui să știi limbaje de programare pentru a
face asta, într -o fază inițială. Dacă vorbim de analiza statică a unui fișier de tip
PE, trebuie să extragem anumite informații care ne pot indica dacă ar putea fi un
malware sau bening. În primul rând îl puteți scana cu un antivirus, dar acest lucru
ne va spune doar dacă ar putea fi sau nu malicios. Un antivirus nu ne oferă
informații despre structura fișierului și dacă atacatorul schimbă anumite bucăți de
cod acesta ar putea fi declarat clean . În cazul în care aveți o bază de date puteți
compara hash -ul fișierului de analizat cu hash -urile din baza de date. De obicei se
folosește MD5 dar eu recomand SHA256 deoarece nu este vulnerabil. Pentru a
face hash unui fișier puteți folosi md5deep pentru w indows, dar și dumneavoastră
puteți folosi openssl pentru a calcula diferite hash -uri ale fișierelor .
Figură 10 sha256 of file
Odată ce ați aflat hash -ul îl puteți cauta chiar și pe internet deoarece probabilitatea
ca alții să fi purtat discuții pe baza unui posibil fișier malițios este destul de mare.
Dacă vizualizați un fișier executabil într -un hex editor veți observa că pot apărea
caractere citibile și dacă atacatorii nu sunt atenți puteți afla chiar adrese ip, mesaje
de eroar e, parole, funcții folosite sau url -uri. String -urile pot fi în două tipuri și
ambele se termină cu caracterul NULL adică 0x00. De exemplu puteți căuta tabela
ASCII și veți observa că un caracter A este reprezentat prin 0x41 , B prin 0x42 și
așa mai departe. Cele ASCII sunt reprezentate în mod continuu de exemplu 0x66,
0x67, 0x67 și la final 0x00 în timp ce șirurile UNICODE au după fiecare octet un
0x00 de exemplu 0x66, 0x00, 0x67, 0x00, 0x67, 0x00, 0x00. O aplicație care
NECLASIFICAT
NECLASIFICAT
Page 38 of 97
caută string -uri într -un bina r va încerca să găsească cel puțin 4 -5 octeți valizi adică
să fie caracter vizibil și sa fie ori literă, număr sau caracter special.
Figură 11 strings scan
După cum puteți observa a întânit cazuri în care string -urile sunt destul de clare și
sunt buni indicatori de compromitere având în vedere că am gasit o cale către un
executabil.
DLL -uri au același format ca și fișierele executabile PE din windows, doar
că diferă un singur octet din header. Un DLL exportă funcții care sunt folosite de
către un executabil și sunt încărcate în automat atunci când și executabilul este
încărcat în memorie. Headerul PE -ului conține informații despre librăriile
importate, despre funcțiile din librăriile de care are nevoie, spațiul de memorie de
care are nevoie, specificații. Indicatori foarte buni pot reprezenta funcțiile
importate care sunt foarte bine documentate și puteți afla ușor ce parametrii cer.
Diferența dintre o librărie statică și una dinamică este că cea statică atunci când
se linkează copiază tot codul funcțiilor în executabilul tău și astfel în header nu
va mai apărea că acea funcție este importată. O altă diferență între runtime linking
și librării dinamice este că executabilul în cazul runtime linking cere funcția doar
atunci când are nevoie și nu sunt toate încărcate când este executabilul încărcat în
memorie ca la librării dinamice. Câteva funcții care sunt folosite pentru a folosi o
librărie dinamică și care pot fi recunoscute sunt: LoadLibrary, Get ProcAddress.
Pentru a vedea toate librăriile și funcțiile importate de către un executabil se poate
folosi Dependency Walker.
Figură 12 dll dependency walker
NECLASIFICAT
NECLASIFICAT
Page 39 of 97
Cele mai utilizate dll -uri sunt kernel32.dll care folosește funcții pentru
manipularea memoriei, a fișierelor, advapi32.dll folosit pentru regiștrii și servicii
de windows, Ws2_32.dll conține funcții ce permit deschiderea de socketuri și
transmiterea de fi șiere între host -uri. Toate aceste lucruri creează o idee destul de
intuitivă despre ce ar putea să facă un fișier malițios. Un PE poate să și exporte
funcții care pot interacționa cu alte fișiere executabile. De obicei acestea sunt
folosite pentru servici i Microsoft ca de exemplu funcția ServiceMain. Dacă nu
sunteți siguri de ce face o anumită funcție puteți consulta documentația oferită de
Microsoft.
Un fișier PE conține în header adrese către anumite secțiuni ale acestuia
care au diferite roluri. Cele mai utilizate secțiuni sunt: .text care conține
instrucțiuni pe care procesorul le execută și ar trebui să fie unica secțiune care
conține cod. Secțiunea .rdata de obicei conține informații despre funcțiile
importate și exportate și ar trebui să fie read -only. .bss conține variabile alocate
static care sunt neinițializate . .rodata secțiune specifică variabilelor constante.
Această secțiune mai poate fi împărțită în .idata și .edata . .data conține informații
despre variabilele glo bale prezente în executabil. Ultima secțiune importantă este
.rsrc care conține date despre resursele prezente ca de exemplu meniuri, imagini.
Aceste secțiuni pot diferi de la un compilator la altul , dar putem considera că
oricum PE -ul are informațiile necesare în header și nu contează cum se numesc.
Uneori aceste secțiuni pot fi obfuscate și o bună tehnică de detectare este de a
calcula entropia pe fiecare secțiune în parte. Dacă variază între 5 și 7 șansa să fie
pur și simplu xor -at este foarte mare. Dacă este peste 7 atunci putem considera că
acea secțiune este criptată.
NECLASIFICAT
NECLASIFICAT
Page 40 of 97
În continuare vom analiza headerul fișierului.
Figură 13 PEview header
În IMAGE_FILE_HEADER, Machin e putem vedea pentru ce tip de procesor este
executabilul, numărul de secțiuni prezente, și timpul la care a fost compilar acesta.
Timpul este iarăși un indicator foarte bun deoarece dacă a fost compilat acum mult
timp șansa ca să găsiți hash -ul este mare. Dacă timpul este sub o formă ciudată ca
de exemplu 1970 înseamnă că cineva l -a modificat. Problema apare pentru
executabile Delphi care au timpul de compilare același, respectiv 19 Iunie 1992.
Informații prețioase pe care le putem extrage cu PEView este
IMAGE_SECTION_HEADER pentru fiecare secțiune în parte. Orice secțiune
care este denumită altfel decât conform standardelor poate crea suspiciuni. De
exemplu putem compara Virtual Size cu Size of Raw Data , ambele trebuie să fie
egale, iar diferențele mici pot apărea datorită alinierilor de memorie . Virtual Size
indică cât spațiu este alocat în momentul încărcării programului în memorie, iar
Size of Raw Data indică căt ocupă acesta pe disc. Dacă Virtual Size este mult mai
mare decât Size of Raw Data atunci acesta este un indicator că executabilul este
împachetat. În tabelul alăturat observăm că la
secțiunea .data, Virtual Size este mult mare
decât Size of Raw Data , dar pentru fișierele
executabile din Windows aparent e destul de
normal. Chiar și așa, acest lucru nu ne indică
faptul că nu este un malware.
Când vine vorba de analiza dinamică avem nevoie de un mediu cât mai
sigur. Acest lucru ne asigură că nu infectăm alte calculatoare din rețea. Problema
este că foarte multe mostre de malware depind de internet deoarece vor încerca să
Figură 14 VS vs SoRD
NECLASIFICAT
NECLASIFICAT
Page 41 of 97
descarce anumite payload -uri. Cea de -a doua problemă o reprezintă faptul că
unele fișierel malițioase se pot execua în mod diferit pe un host decât într -o mașină
virtuală. Ori sun t polimorfici ori pot să aibă mecanisme de securitate active. O
mașinp virtuală este un mediu izolat ce folosește resursele hostului și poate fi
consider un alt calculator. În cazul în care aceasta se defectează, se poate pur și
simplu reinstala sistemul de operare și relua analiza de malware. De obicei se
folosește o mașină virtuală de Windows 7 deoarece acesta nu are Windows
Defender integrat care să ne influențeze analiza. Pentru a observa în totalitate ce
la ce va dori acces un malware, vom seta mașina virtuală în ceea ce privește
rețeaua, pe Host Only. Aceasta creează o rețea privată între mașină virtuală și host.
Important e ca ma șina virtuală să aibă update -urile la tim p pentru a nu exploata o
vulnerabilitate și malware -ul să se răspândească la alte host -uri. O altă soluție ar
fi crearea de alte mașini virtuale conectate într -un LAN, dar în rețea diferită față
de host. Pentru a crea un mediu cât mai real, se vor porni ce le mai folosite servicii
de pe windows , în principiu HTTP pentru a răspunde la requesturi și DNS pentru
a rezolva o anumită adresă IP . Un sfat important este că nu trebuie să conectați
niciodată o mașină virtuală la internet. Înainte de a executa un posibi l fișier
malițios, puteți realiza un snapshot adică să salvați starea inițială a mașinii
virtuale. După execuție puteți da restore dacă malware -ul a produs schimbări
majore.
Figură 15 snapshot
Datorită analizei dinamice putem observa comportamentul unui malware și ce
funcționalități are. Dezavantajele folosirii unui sandbox de exemplu o reprezintă
faptul că acesta efectiv rulează fișierul malițios și dacă acesta cere diferite opțiuni
din linie d e comandă nu va descoperi funcționalități. Alt dezavantaj ar fi că dacă
malware -ul așteaptă un anumit pachet din rețea pentru a se detona, cu ajutorul
sandboxului nu va reuși , sau dacă fișierul malițios are o funcție de sleep de câteva
zile, același lucru se poate întâmpla . Pentru a rula un dll există două pisibilități.
Prima este de a folosi rundll32.exe dând ca argument numele dll -ului și cealaltă e
să schimbați în headerul fișierului IMAGE_FILE_DLL cu valoarea 0x2000, dar
NECLASIFICAT
NECLASIFICAT
Page 42 of 97
acest lucru poate cauza un crash . Process Monitor este utilitarul care se folosește
pentru a vedea accesul la regiștrii, sistemul de fișiere, accesul la rețea, procesele
și threadurile pornite. Procmon captează toate apelurile de sistem, dar va trebui să
îl opriți după o perioadă de timp deoarece memorează log -ul în RAM și dacă nu
va mai avea spațiu, mașina virtuală va da eroare și veți pierde tot fluxul analizei.
O altă aplicație care se poate folosi în analiza dinamică este Process Explorer.
Acesta este util pentru că veți vedea procese le în formă arborescentă și astfel veți
putea observa ușor dacă un malware s -a atașat de un proces deveind copilul lui.
Pentru fiecare proces în parte ne poate arăta dll -urile folosite, porturile deschise
și calea acestuia pe hard -disk. Un alt feature pe c are ni -l oferă Process Explorer
este că putem compara string -urile înainte de a rula fișierul malițios cu string -urile
aflate în memorie la momentul rulării acestuia. Cu ajitorul acestuia putem analiza
și fișierele de tipul PDF sau WORD, deoarece în
cazul în care acestea creează alte procese putem
observa în arborele de procese. ApateDNS este un
alt tool cu care putem observa cererile DNS făcute
de către malware. Pe de altă parte putem captura
pachetele cu Wireshark și putem analiza sesiunile
de tip TCP de exemplu. InetSim este o aplicație
pentru distribuții de linux folosit pentru a simula serviciile din Internet. Deschide
porturi specifice fiecărui serviciu în parte , cum ar fi http, port 80, smtp, port 25,
https, port 443, dns, port 53. De asemenea acesta înregistrează toate conexiunile
inbound. În final, înainte de a executa un malware se face un snapshot de regiștrii
din windows și altul după ce fișierul rulează un timp. Se compară și dacă sunt
schimbări înseamnă că încearcă să acțiuneze malițios asupra windowsului sau
încearcă să cate modalită ți de a rămâne persistent.
C. Fomatul fișierelor și cod mașină
1. Formatul PE
Fișierele executabile pentru windows adică formatul PE sunt încărcate în
memorie la adrese random relative. PE sunt fișierele standard ce se găsesc pe
windows și include executabil e și dll -uri. În cazul în care o anumită structură din
Figură 16 Apate DNS tool
NECLASIFICAT
NECLASIFICAT
Page 43 of 97
cadrul fișierului este deteriorată,
la încărcarea în memorie
sistemul de operare face
sanitizare a acestuia, încercând
să repare structura afectată.
Pentru ca programul să fie
încărcat la adresă random în
memorie, trebuie să înțelegem
foarte bine conceptul de adresă
relativ ă. Considerați inițial că ar
fi un offset la adresa de bază.
Observând Figura 15 putem
identifica de la octetul 0 DOS
Headerul. Acesta conține identificatorul MZ pe primii doi octeți din fișier. Le
puteți observa dacă fișierul este deschis cu un hex editor. După o serie de octeți
de 0x00 puteți observa mesajul „Thi s program can not be run in DOS mode”.
Sunt definite câteva seturi de instrucțiuni cu regiștrii diferiți pentru procesoarele
de 16/32/64 biți. În cazul în care un executabil pe 32biți este rulat, un mesaj de
eroare va apărea. Acesta este cel de mai
sus. În DOS header observăm următoarea
structură care are doar două câpuri
importante , e_magic și e_lfanew .
e_magic indică tipul fișierului adică
semnătura acestuia, respectiv „MZ”, iar
e_lfanew este adresa relativă la
PE_header . Acesta este un header pentru
fișierele pe 32 biți. Pentru 64 biți se
folosește DWORD care ocupă 32 biți în
memorie. Sunt inițializați stack segment, instruction point, code segment cu 0x00 .
Structura este IMAGE_DOS_HEADER predefinită în Win32.
PE header este o structură ce conține nu mărul de secțiuni ale executabilului,
NumberOfSection , timestampul pe 32 biți , TimeDateStamp , Machine indică tipul
de fișier și pentru ce fel de procesoare rulează, de exemplu dacă are valoarea
0x8664 este pentru procesoarele x86, 0x14c pentru Intel 386, 0 x200 pentru IA64
și caracteristicile aferente. Eu le -am extras pe cele mai relevante pentru o analiză
simplistă de malware.
Figură 17 PE structure
Figură 18 DOS Header
NECLASIFICAT
NECLASIFICAT
Page 44 of 97
IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 Fișierul este
executabil
IMAGE_FILE_DEBUG_STRIPPED 0x0200 Informațiile
pentru debug
sunt stocate în alt
fișier
IMAGE_FILE_DLL 0x2000 Fișierul este un
DLL.
IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 Fișierul poate fi
executat doar pe
un singur
procesor.
Optional PE Header se află exact în
continuarea PE headerului și dimensiunea
acestuia este dată de câmpul
SizeOfOptionalHeader din PE header și conține
foarte multe informații utile pentru analiza
statică. Acesta este un exemplu de structură al
unui fișier pe 32 biți. Semnătura ne arată pe câți
biți e ste executabilul, pe 32 cu valoarea 0x10b
sau 64 biți cu valoarea 0x20b . Variabila
SizeOfCode reprezintă suma dimensiunilor
tuturor secțiunilor de cod dacă există mai multe
sau a uneia singure. AddressOfEntryPoint este
adresa relativă de la care instruction point ar
trebui să execute instrucțiuni. Dacă fișierul este
un dll atunci are valoarea 0. BaseOfCode
reprezintă adresa de unde începe secțiune de cod.
BaseOfData conține adresa de unde începe
secțiunea de date. SizeOfImage este dimensiunea
imaginii cu toate headerele și trebuie să fie multiplu de SectionAlignment .
Subsystem ne indică faptul că fișierul conține și o interfață grafică dacă are
valoarea 2 sau dacă va crea un proces nativ fără alte module, valoarea 1 sau 3. În
DLLCharacteristics găsim informații de siguranță a codului executat precum
DEP , valoarea 0x0100 , ASLR , 0x0040 sau dacă tabela de execepție este activată
având valoarea 0x0400 . Acestea vor fi prezentate în capitolul specific.
SizeOfStackReserve reprezintă în număr de octeți dimensiunea rezervată pentru
Figură 19 PE Optional Header
NECLASIFICAT
NECLASIFICAT
Page 45 of 97
stivă. DataDirectory este un vector de structuri care conțin adrese relative către
tabela de importuri, exporturi, resurse sau COM. Pentru fișierele pe 64 se mai
adaugă la offset încă 16 biți.
IMAGE_DIRECTORY_ENTRY_IAT
Valoare
13
offset
200 Tabela de
importuri
IMAGE_DIRECTORY_ ENTRY_ EXPORT Valoare
0 offset
96 Conține
funcțiile
exportate
IMAGE_DIRECTORY_ ENTRY_ IMPORT Valoare
1 offset
104 Conține
funcțiile
importate
pentru
fiecare
dll din
IAT.
IMAGE_DIRECTORY_ENTRY_RESOURCES Valoare
2 offset
112 Conține o
structură
cu
resursele
folosite
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR Valoare
14
offset
208 Adresă
către
structura
de com –
uri
folosite
După această structură urmează fiecare secțiune în parte având dimensiunea
fixă de 40 octeț i. Fiecare structură în parte conține numele,
memoria virtuală ( VirtualSize ), și cât spațiu ocupă pe disc
(SizeOfRawData ). Fiecare secțiune în parte conține
caracteristici. De exemplu dacă aceasta conține cod ,
valoarea 0x00000020 și este executabil, valoarea
0x20000000, dacă se poate citi, 0x4000 0000 sau dacă
poate fi scrisă, 0x8000000.
Figură 20 Section Structure
NECLASIFICAT
NECLASIFICAT
Page 46 of 97
Pentru a extrage dll -urile folosite și funcțiile aferente pentru
IMAGE_DIRECTORY_IAT se iau toate structurile
IMAGE_IMPORT_DESCRIPTOR și vom gasi pentru fiecare câmp în parte
informațiile de care
avem nevoie.
Pentru asta va trebui
să ținem cont de adresele
virtuale. Pentru că sunt
doua cazuri atunci când
dorim să parsăm un
fișier. Fie îl încărcăm
într-un buffer și atunci
va trebui să transformăm
adresele virtuale în adrese relative virtuale fie îl adaugăm la pr ocesul curent și
atunci nu va mai trebui să facem asta. Un IMAGE_IMPORT_DESCRIPTOR
conține numele dll -ului și un Thunk. Diferența dintre FirstThunk și
OriginalFirstThunk este că în primul caz funcțiile sunt importate cu denumirea
lor și nu după numărul de ordine.
Atunci când structura este 0
înseamnă că nu mai sunt funcții
importate.
În ceea ce privește funcțiile
exportate, în vectorul director
IMAGE_DATA_DIRECTORY din
OptionalHeader pe poziția 17 se
găsește un vector de structuri
IMAGE_DIRECTORY_ENTRY_EXPORT care conțin informații despre funcția
exportată. AddressOfNames este un vecto r de nume de funcții. Fiecare adresă
relativă virtuală pointează către numele în format ASCII. Dacă nu există funcții
exportate atunci va avea valoarea 0. În capitolul destinat prezentării aplicației voi
arăta câteva secvențe de cod care extrag funcțiile a ferente.
Figură 21 IMAGE_IMPORT_DESCRIPTOR
Figură 22 IMAGE_EXPORT_DIRECTORY
NECLASIFICAT
NECLASIFICAT
Page 47 of 97
2. Formatul ELF (Executable Linkable Format)
Acest format al fișierelor executabile este destinat sistemelor de operare UNIX
cum ar fi Ubuntu, Kali Linux, Solaris . Este destul de asemănător cu formatul PE.
Structura unui fișier ELF se găsește în două
forme. Reloca table Files este tipul de fișier în cod
mașină după ce a fost compilat și optimizat.
Acesta are secțiuni. În partea dreapă după ce a
fost compilat, acesta împreună cu librăriile
necesare și alte fișiere relocatable sunt linkate
adică combinate și se va obține un fișier
executabil în care sunt prezente segmente și nu
secțiuni, iar Section header table este opțional.
Elf header este o struc tură în care se regăsesc câteva câmpuri importante. Vectorul
e_ident conține semnătura fișierului pe prima poziția, octetul \x7f adică „ELF”.
Pe poziția 4 în vector este valoarea 1 dacă este executabil pe 32 biți sau 2 dacă
este pe 64. E_ident [5] conține identificatorul pentru așezarea datelor în fișier,
little indian sau big indian și se poate observa în timp ce programul rulează la un
dump de stivă. E_ident[7] conține informații despre
mașina pe care ar trebui să ruleze executabilul, pe Unix,
embedded sau System ABI. E_type identifică tipul de
fișier, dacă este executabil, librărie,fișier adițional.
E_entry reprezintă adresa virtuală a enttry_point -ului, iar
dacă nu există aceasta va avea valoarea 0. E_shoff conține
adresa relativă adică offs etul în octeți în fișier de la care
încep secțiunile , iar e_phoff conține offsetul către tabela
headerului , dar ca să fie datele ușor de extras e_phnum
reprezintă și numărul de intrări în tabela headerului .
e_ehsize este dimensiunea în octeți a headerului , iar e_shnum , numărul de
secțiuni. Acestea sunt identificate pe baza unui index din tabela secțiunilor.
Secțiunea cu numărul 0 este rezervată pentru scopuri speciale de la adresa 0xFF00
până la 0xFFFF și toate variabilele din structură au valori de 0x00. În figura 2 3
putem observa structura unei secțiuni cu tipuri de date specifice fișierului ELF.
Sh_name reprezintă numele secțiunii. Sh_type este foarte important și conține
tipul acesteia. Sunt definite câteva standarde. STRTAB , secțiunea conține o
Figură 24 ELF format
Figură 23 Header Format
NECLASIFICAT
NECLASIFICAT
Page 48 of 97
tabelă cu string -uri, symtab , conține tabela de simboluri ,
dynamic , conține informații pentru linkare dinamică. Sh_flags
ca și pentru fișierele executabile din windows, ne indică dacă
secțiune este doar „citibilă”, dacă conține cod executabil sau
dacă secțiunea se încarcă în memoria imaginii programului.
Sh_addr conține adresa virtuală de început a secțiunii. Dacă nu
este a locată în memoria imaginii programului aceasta ar trebui
să fie 0. Sh_offset conține offsetul secțiunii, iar sh_size
dimensiunea în octeți a acesteia. Există o serie de secțiuni cu același rol și aceleași
denumiri ca în fișierele PE. De exemplu .bss, .data , .text, .rodata, darși câteva
specifice formatului ELF, .comment, .dynamic, .got, .hash. În secțiunea de string –
uri se află denumirile sețiunilor și a simbolurilor . În acest vector pe prima poziție
este mereu caracterul NULL. Tabela de simboluri conține i nformații despre
variabilele existente respectiv, tip, valoare, nume , dar și despre funcții, numele lor
și adresa la care se găsesc.
În tabela headerului se află informațiile necesare pentru ca
secțiunile, fișierele care se distribuie să formeze segmente.
P_type reprezintă tipul segmentului, dacă este dinamic sau un
segment care se încarcă ulterior. P_flags indică dacă segmentul
este wr itable, readable sau pentru execuție. Tabela hash conține
pointeri către fiecare tabelă de simboli ce conține informații
despre variabile și funcții. Sunt folosite funcții hash pentru a
eficientiza căutarea. Fiecare secțiune în parte se poate obține folosi nd funcțiile din
linux, objdump sau readelf .
3. Elemente de bază ale limbajului de asamblare
3.1 Regiștrii microporcesorului
Regi ștrii microprocesorului sunt seturi de date prin care procesorul reușește să
efectueze anumite operațiuni mult mai rapid. X86 are un set de instrucțiuni
standard fiind împărțit în următoarele categorii :
Regiștrii de uz general, EAX,EBX,ECX,EDX,EBP,ESP,ESI pentru
procesoarele pe 32 biți. În cazul celor pe 64 regiștrii specifici sunt
RAX,RBX,RCX,RDX,RBP,RSP,RSI. Aceștia pot fi folosiți pentru a
stoca valori sau adrese , de exemplu pentru cei de 32 biți pot stoca valori
Figură 25 section structure
Figură 26 header table
NECLASIFICAT
NECLASIFICAT
Page 49 of 97
și pe 32, dar și pe 16 folosind EAH sau EAL .
Figură 27 register
Pe de altă parte regiștrii EAX, EDX sunt standard folosiți pentru
operații de tip multiplicare și împărțire, dar asta nu înseamnă că un atacator nu îi
poate folosi și în alte scopuri. În funcție de standardele de apel ale funcțiilor
folosite, de obicei în EAX va fi stocată valoarea de return a funcției. În cazul în
care acest registru este folosit imediat după un apel de funcție, cel mai probabil
va fi modificat de către atacator. Registrul ECX este folosit în cazul folosirii
instrucțiunilor ciclice pe post de contor decrementându -se de la o valoare la 0.
Registrul ESI este folosit în cazul în care se dorește parcurgerea unui vector, având
rolul de a ține valoare de index. Regiștrii EBP și ESP sunt folosiți pentru accesul
controlat la stivă. EBP menține înto tdeauna adresa de return din stack frame pe
când ESP are rolul de a controla baza stivei pentru a nu putea fi depășită. Acesta
la un PUSH pe stivă scade și la un POP crește deoarece stiva menține principiul
LIFO. În cazul în care dorești să accesezi valoar ea de la o adresa stocată de
exemplu în registrul EAX se vor folosi paranteze pătrate, [EAX].
Regiștrii de segment , CS (code segment), DS (data segment), SS (stack
segment), ES (extended segment), GS și FS ( regiștrii suplimentari) sunt
utilizați pentru ac cesul controlat la segmente.
Registrul de flag -uri EFLAGS reprezintă statusul unor operații,
overflow, trap bit ( pentru debug), bitul se semn, bitul de carry pentru
operații pe mai mulți biți sau statusul ultimelor operații.
Registrul pentru instrucțiuni, EIP, conține adresa următoarei instrucțiuni
ce va fi executată.
3.2 Instrucțiuni de bază
Cea mai utilizată instrucțiune este MOV și cu ajutorul acesteia poți muta valori
sau adrese de la un registru sursă la alt registru desti nație.
mov sursă, destinație
NECLASIFICAT
NECLASIFICAT
Page 50 of 97
Exemplu de operații:
mov eax,ebx
Se copiază în registrul eax conținutul lui ebx.
mov eax, [ebx]
Se copiază în eax valoarea de la adresa ebx.
mov eax, 0x11
Se copiază în eax valoarea 0x11.
mov eax, [ebx + esi*2]
Se copiaz ă în eax valoarea de la un pointer de bază a unui vector de exemplu +
indexul esi *2.
O altă instrucțiune asemănătoare cu mov este lea (load efectiv address).
Aceasta are rolul de a veni în contrast cu instrucțiunea mov care pentru unele
operații de acce s a memoriei, aceasta poate fi invalidă. De exemplu lea eax,
[ebx+2] este diferită de mov eax,[ ebx+2 ]. În primul caz se copiază în eax adresa
de la ebx+2, iar în al doilea caz se copiază valoarea de la adresa ebx+2.
Instrucțiuni aritmetice cu rolul de a f ace operații matematice. Cele mai
folosite sunt:
add sursă, destinație -> pentru adunare
sub sursă, destinație -> pentru scădere
inc destinație -> incrementare
dec destinație -> decrementare
adc sursă, destinație -> adunare cu bitul de carry pe 1.
Pentru instrucțiunile mul și div se folosesc by default regiștrii eax și edx. Pentru a
multiplica două valori, prima valoare se stochează în eax și apoi instrucțiunea mul
val2 va pune în edx cei mai semnificativi 32 de biți ai înmulțirii, iar în eax cei mai
puțini semnificativi biți. Asemănător se întâmplă și la div. Rezultatul împărțirii
este stocat în eax, iar restul în edx.
NECLASIFICAT
NECLASIFICAT
Page 51 of 97
Instrucțiunile logice cele mai folosite sunt: AND destinație ,OR destinație ,
NOT destin ație, XOR sursă, destinație și TEST sursă, destinație . Instrucțiunea test
eax,eax inițializează registrul eax cu 0.
Instrucțiuni de rotație și shiftare sunt mai puțin folosite, dar un atacator le
poate folosi pe post de obfuscare. Modelul unei astfel de instrucțiuni este instr
destinație, valoare . Instrucțiunile pe care procesorul le cunoaște sunt shr (shift
left), shl (shift right) , rol (rotate left) , ror (rotate right) și deplasează sau rotește
biții spre stânga sau spre dreapta de câte ori este specifi cat în valoare .
Instrucțiuni de salt , salt condiționate sau apel la funcții sau etichete sunt:
jmp, jnz, je, jne, jae, jb , call. Diferența dintre aceste două instrucțiuni este că jmp
se folosește atunci când fac un salt către instrucțiuni din main -ul activ. Nu
formează alt stack frame și nu are o adresă de return pe când call salvează
contextul cu toate informațiile pe stivă formând un nou stack frame și trece la noul
block de instrucțiuni.
Instruc țiunea NOP (no operation) folosită pentru obfuscarea codului
aceasta nefăcând nimic, procesorul trecând la următoarea instrucțiune. În hexa are
valoarea 0x90. Poate fi folosit ca și padding pentru a adăuga instrucțiuni noi.
D. Metode de analiză
1.Analiza statică malware
1.1. Recunoașterea construcțiilor de cod assembly asociate limbajului C
Acest capitol ne ajută să înțelegem mai bine cum funcționează instrucțiunile
microprocesorului și să recunoaștem mult mai ușor blocuri de instrucțiuni care
pot reprezenta semnătura unui fi șier și petru a înțelefe mult mai bine
funcționalitățile unui fișier executabil. Un fișier malițios de tip PE este de obicei
scris în limbajul C, dar pentru a -l scrie la un nivel mult mai avansat se poate folosi
și assembly. Trebuie să ținem cont și de tip ul de compilator deoarece acesta poate
influența destul de mult modul în care optimizează codul, sau mofică anumiți
regiștrii la un apel de funcție de exemplu. Următoarele exemple pe care le voi
prezenta nu sunt generate de către un compilator al vc2017. M ajoritatea surselor
de cod c sunt compilate cu un gcc versiune mai veche.
NECLASIFICAT
NECLASIFICAT
Page 52 of 97
Variabile globale sunt referite prin adrese de memorie, iar variabilele
locale se află pe stivă și mereu trebuie să ținem cont de faptul că fiecare
variabilă este la ebp minus multiplu de 4 octeți . Pentru variabilele
globale trebuie să ținem cont că la modificarea valorii de la adresa
dword_500000 se va moficica peste tot în program. De exemplu:
Deoarece operațiile aritmetice joacă un rol
important în obfuscarea codului, le voi prezenta pe cele mai folosite.
Vom considera faptul că cele trei variabile sunt locale, deci valorile vor
fi pe stivă. Instrucțiunea cdq este folosită pentru că dacă facem modulo
pe un număr negativ atunci rezultatul va fi un număr pozitiv uriaș.
Figură 29 Caz1 v.g v.l
Figură 28 Caz2 v.g v.l
Figură 30 asm1 v.g v.l
Figură 31 asm2 v.g v.l
Figură 33 arithmetic C Figură 32 arithmetic
asm
NECLASIFICAT
NECLASIFICAT
Page 53 of 97
Recunoașterea instrucțiunilor condiționate if
poate fi importantă în cazul în care atacatorul
încearcă să folosească anumite metode de a face
malware -ul să fie polimorfic. Folosind anumite
tool-uri de exemplu IDA pro putem fizualiza în
mod grafic și ne putem da seama mult mai ușor
de flow -ul codului. Putem observa faptul că după
un apel call al funcție printf vom avea pe stivă
încă push -uit valoarea variabilei string care
conține un mesaj. Pentru a -l elimina se mută pointerul ebp cu 4 octeți.
Dacă aveam mai multe variabile push -uite atunci pentru fiecare
variabilă se va adauga câte 4 octeți.
Instrucțiunile loop sunt printre cele mai populare. De obicei se folosește
registrul ecx pentru contorizarea numărului de ciclii până acesta ajunge
la 0, dar poate fi folosit și un alt registru care se poate incrementa până
va ajunge la o valoare. Instrucțiunea loop are patru pași simpli:
inițializare, comparare, execuție instrucțiuni și incrementare.
Figură 34 conditii if
Figură 35 if grafic
Figură 36 loop C
Figură 37 loop ASM
NECLASIFICAT
NECLASIFICAT
Page 54 of 97
Instrucțiunile de tip while sunt asemănătoare cu cele for. Diferența este că
nu mai are în componență cei patru pași.
Instrucțiunile de tip switch sunt ca o grupare de if -uri condiționate.
Trebuie ținut cont de faptul că fiecare
instrucțiune x86 are 4 octeți sau 2 octeți în cazul celor
de salt condiționat și acele „number” -uri reprezintă de
fapt numărul de octeți până la următoarea funcție. De
exemplu instrucțiunea mov [ebp-4],12 are 4 octeți, iar
jmp short loc_…. are 2 octeți. Acesta nu este singurul
mod prin care poate fi dezasamblat un block switch,
depinzând foarte mult de optimizările pe care le face
compilatorul. O altă modalitate de a reprezenta in cod
assembly un bloc de tip switch este printr -o tabelă de
jump -uri. Este definit un bloc de offset -uri ale
funcțiilor prin care se încearcă indeplinire a condiției
pentru fiecare caz. Se scade un 1 din ecx deoarece
offsetul trebuie să fie între 0 și 3 pentru că sunt 4
cazuri. După cum vedeți fiecare instrucțiune are 4
octeți și de aceea edx se înmulțește cu 4. În cazul în
care un bloc de case este îndepli nit, se face jump la
funcția ce conține epilogul de final și retn de ieșire din
secvența de program principal.
Vectorii se folosesc de obicei pentru păstrarea unor date despre host sau
a unor ip -uri pentru a încerca mai multe conexiuni. În figura 39 putem
observa că avem un vector, variabilă locală inițializat cu valori și un
vector declarat local în funcția main. Pentru că cei doi vectori sunt de
Figură 38 switch C
Figură 40 Switch ASM
Figură 39 asm jump table
NECLASIFICAT
NECLASIFICAT
Page 55 of 97
tip int atunci ocupă pe stivă fiecare câte 4 octeți. Dword array1
reprezintă adresa vectorului 1 deoarece aces ta este declarat global.
Utilizarea structurilor sunt asemănătoare așezate în memorie cu vectorii.
Cu ajutorul acestora se pot face grupări de date și aceste grupări să fie
memorate în vectori. Folosesc un pointer de bază ca adresă de start în
structura aferentă. În exemplul de mai jos este definit un struct ce
conține un vector de tip int și un char, apoi o funcție prin care se
inițializează acel struct. Va trebui să învățați ca peste blocul unei funcții
se află prologul și epilogul unei funcții. Prin parametrul l a funcția
funcție , fiind pe strivă, prin argv0 putem folosi registrul ecx pentru a fi
la baza structurii, apoi cu registrul eax ne putem deplasa pe primii 5
octeti pentru vectorul de int și pe următorul octet pentru char -ul i. Chiar
dacă e pe un singur oct et, pe stivă se vor aloca 4. Apoi tot pe stivă de la
adresa ebp -18h va fi contorul i.
Figură 42 c vectori
Figură 41 asm vector
Figură 44 structura asm Figură 43 structura C
NECLASIFICAT
NECLASIFICAT
Page 56 of 97
1.2.Convenții ale apelurilor de funcții
Pentru a înțelege cât mai bine modul în care sunt apelate funcții și modul
de transfer al parametrilor trebuie să știm câteva lucruri și metode de transfer ale
acestora. În principiu, cel mai ușor mod de a treansfera parametrii unei funcții este
folosirea stivei sau prin regiștrii, dar în funcție de compilator sunt distribuiți în
mod diferit. Cele mai utilizate convenții de transfer a parametrilor la funcție sunt
cdecl, fastcall și stdcall.
Cdecl este cel mai popular mod de transfer al parametrilor. Acesta pune
pe stivă parametrii de la dreapta la stânga și la terminarea funcției face
pop la aceștia și valoarea returnată este în registrul eax. Funcția care
apelează este responsabilă de curățarea stivei, după cum puteți vedea și
în exemplu, main face un sub esp,Eh după terminarea funcției funcție .
De exemplu urmatorul block:
_cdecl int functie(int a, int b, int c, int d)
int x = functie(ap, bp, cp, dp)
Cod asm echivalent este:
push dp,
push cp,
push bp,
push ap
call functie
add esp, Eh
mov x, eax
NECLASIFICAT
NECLASIFICAT
Page 57 of 97
În convenția fastcall primii doi
parametrii sunt puși în regiștrii ecx și
edx, iar la final dacă mai sunt
parametrii puși pe stivă aceasta este
curățată. Este o metodă destul de
eficientă deoarece lucrul cu stiva costă
timp, dar totuși unele compilatoare
creează un stack frame chiar dacă nu
este utilizat. De asemenea rezultatul
este pus tot în registrul eax. După cum puteți observa în figura 43
parametrii dintr -un stack frame pot fi accesați de la adresa ebp+8 din 4
în 4 oc teți indiferent de convenții de apel ale funcțiilor.
_fastcall int functie(int x, int y)
Return a+b
Main:
int ret = functie(1,10)
Cod asm echivalent:
main:
mov eax, 1
mov edx, Ah
call functie
functie:
push ebp
mov ebp,esp
add eax, edx
pop ebp
ret
Conven ția stdcall este implementată de Windows Api fiind cunoscută
ca WINAPI . DLL -ul implementat are rolul de a curăța stiva înainte de a
se termina funcția apelată. Acest lucru face parte din epilogul funcției.
Această convenție ca și în cazul cdecl pune pe stivă parametrii de la
drepata la stânga, iar valoarea returnată este în eax.
Pe lângă acestea trei, mai sunt și alte tipuri de convenții ale funcțiilor, dar foarte
puțin folosite, de exemplu thiscall, vector call, syscall, optlink, safecall .
Figură 45 stack
NECLASIFICAT
NECLASIFICAT
Page 58 of 97
1.3.Folosirea unor applicati on binary interface în fișierele malițioase
Un application binary este definit de un COM ( Component Object Model)
folosit pentru a accesa codul altor aplicații din Windows de exemplu, fără
interacțiuni directe între ele. Prin asta mă refer că aplicațiile nu ar trebui să știe
una de alta. Aceste COM -uri folosesc anumiți identificatori pe care putem să -i
folosim deoarece folosesc pattern -uri de bloc uri de cod și ne ajută destul de mult
la analiza static când facem reverse engineering. Un COM este o aplicație server,
iar cel ce accesează diferite componente deja implementate are rol de client. La
ce sunt bune COM -urile? De exemplu un fișier malițios a ccesează un com prin
intermediul unui id și cu anumiți parametrii poate deschide un browser de web pe
un anumit url. Apoi pe acel website poate fi executat cod în spate pentru a infecta
calculatorul victimei. De fiecare dată când atacatorul încearcă să fol osească un
COM trebuie să folosească funcțiile OleInitialize , CoInitializeEx și
CoCreateInstance . După cum am precizat, fiecare component are un GUID cu o
valoare hexazecimal ă pe 128 de biți și IID. Un obiect folosit des de către
dezvoltatorii de malware este Navigate , fiind o funcție din interfața
IWebBrowser 2 care deschide browserul implicit din windows. Flow -ul folosirii
unui obiect este următorul. După apelarea funcției
CoCreateInstance având ca parametru un CLSID și
un IID, sistemul de operare caută în regiștrii aplicația
cu acești identificatori și încarcă programul. Funcția
returnează un pointer către acel obiect. De exemplu
IID-ul pentru IWebBrowser are un format
{68831F81 -F588 -11CA -1919 -090011F29384}. Dacă obiectul COM este un dll
atunci windows -ul va căuta în subkey -ul InProcServer32, iar dacă este un
executabil în LocalServer32. Unele tool -uri care dezasamblează codul pot
identifica aceste CLSID -uri, de exemplu pentru Internet Explorer acesta este:
{002DF01 -0000 -0000 -C000 -00000000046}. Odată ce f uncția a returnat valoarea
în registrul eax, la offsetul 0x2Ch putem găsi funcția Navigate care deschide un
browser web , dar înainte de a apela funcția va trebui să consultăm manualul pentru
a vedea ce parametrii cere. Într-un malware va trebui să ne dăm s eama de offsetul
care este apelat din structură și să găsim acei identificatori pentru a vedea ce obiect
este folosit. Uneori folosirea acestor com -uri implică crearea unui nou proces, dar
nu este o regulă. Unii atacatori experimentați dezvoltă un obiect care va fi folosit
pe post de server fiind înlocuit în Browser Helper Objects care conține plug –
inurile pentru Internet Explorer și astfel codul malițios este executat în timp ce
Figură 46 com
NECLASIFICAT
NECLASIFICAT
Page 59 of 97
broserul este folosit. Funcțiile folosite într -un obiect de timp server sunt
DllCanUnloadNow , DllInstall , DllRegisterServer care sunt mereu obligatorii de
implementat. Folosirea unui COM nu este restricționată de limbajul de
programare, pot fi regăsite și în limbajul C# de nivel înalt, sau VBA într -un
macrou din Word.
1.4. Diferența dintre modul user și modul nucleu în analiza malware
Aproape orice aplicație scrisă de către un dezvoltator normal rulează în user
mode, cu excepția driverelor. Indiferent de cum e scris o anumită aplicație are
propria lui memorie, resurse de care are nevoie și permisiuni. Pentru a avea acces
la anumite funcționalități din kernel, atacatorul poate folosi Windows API.
Trecerea dintr -un mod în celălalt se face prin opcod -ul 0x2E și prezența
SYSCALL -ului. Toate procesele care rulează în kernel pot împărți resurse. O altă
diferență dintre o aplicație care rulează în user mode și în kernel mode este că
atunci când apare o eroare în user mode, sistemul de operare dezaloc ă resursele
folosite și forțează închiderea aplicației , iar în cazul celălalt, nu are cine trata
eroarea și mai mult ca sigur utilizatorul va primi blue screen. Este foarte periculos
pentru useri în general dacă dezvoltatorii de malware exploatează mai mul t
folosind aplicații cu anumite blocuri de cod ce rulează din kernel mode. În kernel
mode nu mai există privilegii ale unei aplicații. Pentru ca Microsoft să protejeze
datele și resursele din kernel, a dezvoltat o
interfață care îți permite să ajungi acolo doar
prin anumite dll -uri. Presupunem următorul
scenariu. Un dezvoltator de aplicație prin
folosirea anumitor funcții din kernel32 dorește
să aibă acces la anumite res urse. Kernel32 prin
windows API și prin librăria ntdll.dll,
procesorul va trece în kernel mode accesând
resursele cerute. Pentru atacatori, această
funcționalitate reprezintă o ispită deoarece oferă
funcții pe care în modul user nu pot fi folosite.
De obic ei un sistem de securitate se interpune
între nivelul aplicație și funcțiile din kernel32 și dacă un malware încearcă să
apeleze direct funțiile din ntdll de exemplu NtWriteFile atunci acest sistem nu
poate detecta apelurile de sistem . Problema majoră este atunci când dorim să
Figură 47 so modes
NECLASIFICAT
NECLASIFICAT
Page 60 of 97
facem debugging. Dacă aplicația are instrucțiuni în kernel mode și punem un
breakpoint undeva la adresa unei linii atunci nici o altă aplicație nu va putea rula
de aceea înainte de a face debug se configurează ca mașina virtuală sa ai bă doua
sisteme din care unul să fie by default nucleu. Un tool care ne ajută să facem acest
lucru este SoftICE .
1.5 Mecanisme de persistență
Persistența unui malware este dată de modul în care acesta reușește să se
„mențină” în sistem cât mai mult timp , asta după ce a preluat controlul . Cel mai
eficient mod este ca atacatorul să găsească o modalitate unică de a rămâne în
sistem. Cele mai populare metode folosite de atacatori sunt folosirea regiștrilor
din windows și DLL hijacking. Putem considera că regiș trii sunt o bază de date
cu setările sistemului de operare. Aceștia pot fi folosiți de către orice aplicație. De
exemplu atunci când instalăm o aplicație observăm că putem avea opțiunea de a
porni atunci când și sistemul de operare este încărcat. Ei bine, asta înseamnă ca a
creat un nou subkey cu o anumită valoare pentru startup. Regiștrii pot fi vizualizați
din run folosind comanda regedit . Funcțiile folosite și pe care le puteță găsi sunt
RegOpenKeyEx , RegSetValueEx , RegGetValue .
HKEY_LOCAL_MACHINE stoche ază setările sistemului de operare și
setările hardware pentru calculatorul local. Acestea sunt valabile pentru
orice user logat la sistem. Valorile acestuia nu sunt stocate pe disc ci
sunt menținute într -un memory map în kernel și nu pot fi modificate de
orice aplicație. Conțin subkey -uri pentru device -urile plug and play,
drivere de sistem, programe care rulează ca servicii și setări pentru
windows , servicii COM, set de politici pentru fiecare user în parte.
HKEY_USERS conține informații despre fiecare user în parte creat pe
sistem.
HKEY_CURRENT_USER are informații despre setările asupra
sistemului pe care le are userul curent logat pe sistem. Poate conține
aceleași informații ca și în registrul hkey_users
Având în vedere cele prezentate mai sus putem vedea câteva path -uri pe
care un atacator le poate folosi. De exemplu
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion
/Run este folosit pentru a lansa în execuție un executabil de fiecare dată când este
bootat windowsul .
NECLASIFICAT
NECLASIFICAT
Page 61 of 97
Unele tipuri de malware pot persista folosind anumite dll -uri și anumiți
regiștrii cum ar fi AppInit_DLL care este automat încărcat în fiecare proces care
folosește User32.dll. O simplă modificare în regiștrii a fost de ajuns pentru a face
un malware s ă fie persistem. Această metodă funcționează fără probleme doar pe
sistemele de operare de dinainte de Windows10. Valoarea lui librăriei dinamice
AppInit_dll era stocată în urmatorul path-ul
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVers
ion/Windows.
O altă modalitate ca un malware să rămână persistent este să folosească de
evenimente de windows logon, startup, shutdown prin modificarea registrului
HKEY_LOCAL_MACHINE/SOFTWARE/Micr osoft/WindowsNT/CurrentVers
ion/Winlogon/ .
Așa cum am precizat mai sus, toate serviciile au setări în regiștrii. Un
malware poate fi instalat ca și serviciu . Pe de altă parte un dll malițios se poate
atașa de un serviciu svhost care conțin o suită de de alt e servicii. Un registru folosit
des de către atacatori este ImagePath care conține calea către un executabil.
Fiecare svhost conține o cheie care se poate seta pentru a încărca anumite dll -uri.
O funcție care poate fi identificată prin analiza statică este prezența
CreateServiceA .
Modalitățile de persistență sunt destul de diferite. Atacatorii au început să
exploateze din ce în ce mai mult privilegiile. Cel mai sigur este ca un user să nu
folosească mereu sistemul cu drepturi de administrator. Un malware dacă dorește
să aibă acces total la sistem va încerca să activeze un anumit token al unui proces.
Dacă acel proces va rula cu drepturi de administrator atunci și procesul copil al
lui va rula la același nivel. Funcțiile folosite pentru a încerca modificarea
drepturilor asupra unui proces sunt OpenProcessToken , LookupPrivilegeValue și
tokenul dat ca parametru TOKE_ADJUST_PRIVILEGES.
2.Analiza dinamică malware
2.1 Debugging
Analiza dinamică se bazează efectiv pe rularea codului și pe identificarea
anumitor indici cum ar fi modificarea regiștrilor, conexiuni, requesturi, creare de
procese, apeluri ale sistemului de fișiere , dar și pe rularea codului. Un debugger
este o aplicație folosită în a observa flow -uri execuției unei aplicații. Bineînțeles,
putem face asta și manual dând diferite input -uri și observând outputurile. Nu prea
NECLASIFICAT
NECLASIFICAT
Page 62 of 97
putem face asta automat deoarece sunt fișiere malițioase care așteaptă anumiți
parametrii. Cu ajutorul unui debugger putem observa valorile regiștrilor
procesorului la un mo ment dat sau a memoriei și de asemenea pentru o anumită
instrucțiuni putem modifica valoarea unui registru pentru a schimba flow -ul către
un alt branch. În continuare vom folosi WinDbg pentru a face câteva exemple și
pentru a găsi câțiva identificatori de compromis. Vom
lua un exemplu de keylloger și vom observa cum
încearcă să rămână persistent și cum ne dăm seama ca
e un keylloger. Putem vorbi puțin și despre analiza
statică și observăm că acesta importă f uncții din
kernel32.dll cum ar fi WriteFile, ReadFile,
VirtualAlloc, Sleep, LoadLibrary și acest lucru ne
indică faptul că e posibil ca să nu fie singura librarie
importată ci să fie și una încărcată dinamic. În figura
46 avem meniul principal al debuggeru lui. Cele mai
importante funcții sunt StepInto , StepOver , StepOut .
StepOver este folosit pentru a trece la următoarea
instrucțiune sau apel de funcție. StepInto este
folosit pentru saltul la funcții și StepOv er pentru
a trece peste anumite instrucțiuni de ciclare sau pentru a ieși din funcție. Din
partea dreaptă reptrezentat ca niște ferestre puteți vizualiza stiva de apeluri,
valorile regiștrilor procesorului și memoria.
Primul pas a fost să identificăm importurile, iar în figura 47 aveți o
secvență de cod dezasamblat al main -ului executabilului. Vom folosi și tool -ul
Process Explorer pentru a vedea procesele create și librăriile încărcate dinamic.
Figură 49 Keylloger
Figură 48 WinDbg
Figură 50 dll at first step
NECLASIFICAT
NECLASIFICAT
Page 63 of 97
În figura 48 observăm că înițial, executabilul nu a încărcat nici un DLL. Inițial
string -urile din memorie și din imaginea executabilului sunt la fel fără nici o
modificare. După câteva step -uri ale instrucți unilor parcurse, observăm cum a
încărcat dinamic kernel32.dll și kernelBase32.dll.
În timpul execuției instrucțiunilor observăm că acesta folosește librăria ntdll.dll și
apelează apeluri de system din kernel ceea ce înseamnă că un antivirus interpus
între nivelul aplicației și nivelul de kernel32.dll era inutil.
Figură 52 kernel function
De unde apare eroare serviciului svhost.exe? După cum putem observa și din
analiza statică, fișierul malițios încearcă să caute
imaginea procesului svhost și să se atașeze de el ,
dar problema apare la incompatibilitatea cu
wow64, Windows of windows 64 deoarece
malware -ul este pe 32, subiect pe care îl vom
discuta în capitolul destinat prezentării aplicației
mele. În situația de față nu putem modifica anumiți regiștrii pentru a păcăli un
compare de exemplu deoarece atașarea la un proces implică apelul mai multor
funcții. De exemplu instrucțiunea JNZ cu opcodul 75 poate fi transformă în JZ
prin modificarea opcodului cu 74. Astfel de procedee sunt ușor de folosit în cazul
în care un program cere o anumită parolă pentru login. Sau un alt exemplu prin
care această funcție este extrem de utilă este atunci când de exemplu avem un
program și la instalaze ne va cere să selectăm limba. Dacă alegem limba engleză
atunci programul nu va face nimic și se va dezinstala, iar dacă alegem orice altă
limbă programul va descărca un payload care peste 10 minute va cripta toate
fișierele din calculator. De asemenea cu ajutorul lui WinDbg puteți pune anumite
breakpoint -uri peste anumite instruc țiuni repetitive și atunci programul rulează
până la întâlnirea lui. Avantajul folosirii lui OllyDbg este că arată memoria ram
Figură 51 Load first library
Figură 53 svhost.exe error
NECLASIFICAT
NECLASIFICAT
Page 64 of 97
în real time în format hex și ascii. De asemenea putem seta un breakpoint pe o
anumită funcție și la fiecare apel al acelei funcț ii programul se va opri.
2.2 Analiza dinamică folosind emulatoare
În industria de securitate lucrurile stau puțin altfel când vine vorba de
analiză dinamică. Deoarece există sute de mii de amenințări pe zi, aceștia trebuie
să automatizeze analiza. În primul rând, majoritatea aplicațiilor antivirus folosesc
în spate un modul de inteligență artificială, dar pentru asta vor trebui extrase
feature -uri care vor fi folosite pentru antrenare și detecție. În al doilea rând primul
pas al acestora este să ide ntifice semnătura fișierului și să fie căutată într -o bază
de date imensă și probabilitatea ca să se regăsească este foarte mare. O altă
modalitate de analiză dinamică folosită de către programele antivirus o reprezintă
folosirea unui emulator care simulea ză o mașină virtuală. Aceasta trebuie să nu
fie resimțită de către user de aceea trebuie să nu folosească prea mult procesor sau
memorie ram. De obicei se folosesc câteva sute de mb ram și cam aceeași
memorie pentru discul virtual. Cu toate acestea, atacat orii au dezvoltat metode
evazive de a nu funcționa în parametrii normali atunci când este folosită o mașină
virtuală pentru analiză sau o aplicație de debug. Conform unui studiu făcut de
Lastline Labs în 2015 aproximativ 80% dintre sample -urile de malware au avut
tehnici evazi oniste cum ar fi detectarea de resurse folosite, numărul de core -uri,
loop-uri, sleep -uri, instrucțiuni de obfuscare care nu fac nimic important. Pentru
a trece de astfel de metode se folosesc tehnici ca extragerea caracteristicilor
mediului în care rulează aplicația, inconsistența api -urilor folosite, simularea unei
rețele, monitorizarea timpului de execuție a unei instrucțiuni . Dacă un fișier
malițios are librării atașate și criptate sau metode de anti -debugging, analizarea
acestuia d evine foarte dificilă. Pentru a implementa un astfel de emulator este
necesar cunoașterea în detaliu a arhitecturii x86 și a setulului de instrucțiuni și
resursele pe care arhitectura ne -o oferă. Un emulator încearcă să simuleze
executarea fiecărei instrucțiuni și la un apel de funcție care necesită trecerea în
modul kernel sau care dorește să modifice fișiere din sistemul de fișiere, sau care
încearcă să realizeze conexiuni, modificări de regiștri i acesta îl clasifică ca fiind
malware. În cazul în care există instrucțiuni sau funcții criptografice, acestea sunt
executate direct pe procesor. Problema cea mai mare este faptul că dacă un fișier
malițios folosește funcții de rendering sau dacă acesta c ere resurse pe care
emulatorul nu le poate oferi, acesta va da eroare și nu va mai putea continua
procesul de analizare. Pe lângă asta, un malware poate extrage biți de informație
NECLASIFICAT
NECLASIFICAT
Page 65 of 97
din emulator în cazul în care API -urile folosite nu sunt implementate corect . Un
emulator verifică ințial entry point -ul de la care se inițializează prima dată
registrul eip. Dacă acesta trece de dimensiunea normală a fișierului înseamnă ca
la aplicație a fost concatenat un alt executabil, cu instrucțiuni în clar sau criptate.
Pentru a testa orice emulator se poate folosi un fișier EICAR special destinat
pentru a verifica răspunsul antivirusului la detecția unui malware. Un alt mod prin
care poți trece de către sistemele de securitate este că emulatoarele de la
Bitdefender, AVG fo losesc nume hardcodate pentru căi, de exemplu:
„C:\TESTAPP.EXE ”, „C:\SELF.EXE ”. Câteva arteface ale acestor emulatoare
sunt de asemenea hardcodate cum ar fi MAC -ul la Bitdefender, numele
calculatoarelor „tz” la aceeași firmă. Un emulator nu simulează în to talitate o
mașină virtuală, cel mai probabil rulează pe un thread sau multi -threading. Un
atacator poate parcurge procesele curente și extrage informații. Acest lucru se
poate face folosind funcția CreateToolhelp32Snapshot. O greșeală pe care o fac
emulato arele este să returneze valori predefinite la apelul unor funcții. De
exemplu la returnarea unor erori la apelul funcției GetLastError, emulatorul
Bitdefender returnează mereu „(from_other)”.
Funcțiile care returnează valori ale timpului sunt
de asemena ha rdcodate. De exemplu Kaspersky
returnează 13 Iulie 2012 ora 11:01:19. Atunci
când un malware dorește să afle adresa unei
funcții exportate de către un dll folosind funcția
GetProcAddress, emulatorul Bitdefender returnează o adresă invalidă , iar AVG
folosește instrucțiunea lock mov ebx . În figura 52 putem observa cum arată fu ncție
GetProcAddress.
Având în vedere toate cele de mai sus, putem spune că probabil nu există o
metodă 100% eficientă care să detecteze în mod automat orice tip de fișier
malițios. Trebuie luați în calcul foarte mulți factori pentru a fi eficient. Momentan
atacatorii nu au fol osit aceste tehnici prezentate, dar un concept a fost realizat
pentru a demonstra faptul că se poate trece peste sistemele de detecție.
E. Metode de protecție împotriva analizei
1. Anti -debugging
După cum am relatat în capitolele anterioare, aproximativ 80% di ntre fișierele
malițioase folosesc tehnici evazioniste pentru a se sustrage de la cursul normal al
Figură 54 GetProcAddress
NECLASIFICAT
NECLASIFICAT
Page 66 of 97
executării instrucțiunilor. Tehnicile prezentate sunt exclusiv în WIN32 API. O
primă funcție care poate fi folosită este IsDebuggerPresent . Acesta nu returnează
decât o valoare de tip boolean și verifică dacă procesul curet rulează într -un
debugger sau nu . Aceasta este ușor detectabilă având în vedere faptul că se poate
importa din kernel32.dll. După cum puteți observa în imaginea 53 după trei
instrucț iuni se va returna valoarea în registrul eax conform standardului. Noi
putem modifica valoarea acestuia cu 0 sau putem umple funcția cu 0x90 și mov
eax,0 .
SystemKernelDebuggerInformation este o altă funcție folosită pentru a extrage
informații desprea starea actuală în care se află procesul. Această returnează dacă
procesul se află într -un kernel debugger. Pentru a prelua doar anumite informații
putem folosi NtQuerySystemInformation aflată în librări a ntdll.dll care are
următorii parametrii:
NTSTATUS WINAPI NtQueryInformation (
_In_ SYSTEM_INFORMATION -CLASS SystemInformationClass,
-parametru pentru informația pe care doresc să o obțin
_Inout_ PVOID SystemInformation,
-buffer petru output
_In_ ULONG SystemInformationLength,
-dimensiunea bufferului
_Out_opt PULONG ReturnLength
-lungimea informației primite
)
Trebuie luat în calcul faptul că funcțiile care încep cu Zw sunt funcții din kernel
mode. Înainte de a apela funcția va trebui să înc arcați librăria dinamică ntdll.dll
Figură 55 IsDebuggerPresent
NECLASIFICAT
NECLASIFICAT
Page 67 of 97
folosind LoadLibrary. Folosind funcția GetProcAccess pentru a lua adresa
funcției NtQuerySystemInformation și a vedea dacă este NULL, deoarece sunt
cazuri în care această funcție nu este disponibilă. Depinde de sistemul d e operare.
O altă modalitate de a folosi și de a observa o metodă de anti -debugging
este de a manipula bitul Trap din registrul EFLAGS. Acesta poate fi setat și
verificat în procesul curent. Dacă blocul de cod care determină asta este apelat
atunci înseamnă că procesul curent nu este într -un debugger. Această modalitate
de detecție este eficientă deoarece poate fi folosită atât în kernel mode cât și în
user mode. Acest lucru se poate face folo sind următoarele instrucțiuni în
assembly, pushfd pe 32 biți pentru a pune pe stivă registrul, popfd dacă
executabilul este pe 32 biți pentru a -i încărca în registrul EFLAGS , se modifică
bitul de trap și apoi se salvează în registrul destinat. Bitul de interrupt este al 9-
lea în registrul EFLAGS și are masca 0x 0100.
2. Metode anti dezasamblare
În cele ce urmează voi prezenta câteva metode de a încerca ca dezasamblarea
să fie cât mai abstractă pentru utilizatorul care încearcă să facă reverse engineering
pe cod. Pentru un analist începător acest lucru poate fi destul de folositor deoarece
îi va lua mult mai mult timp să -și dea seama de flow -ul aplicației. În principiu
sunt două tipuri algoritmi de dezasamblare, cei liniari și orientați pe flow -ul
instrucțiunilor. O metodă foarte folosită este folosirea instrucțiunilor de jump la o
adresă plus o constantă de un octet sau doi. Codul va fi interpretat cu totul altfel.
Inițial IdaPro nu vede fa ptul că se mai adună un octet la acea adresă și astfel
opcodul E8 este folosit pentru inducere în eroare fapt pentru care va fi un call
către o adresă total aiurea. Instrucțiunea jump la adresa loc_401010+1 va trebui
să ducă la functia loc_401011 care va î ncepe cu opcodul 8B și opcodul E8 să fie
Figură 56 jump with constant
NECLASIFICAT
NECLASIFICAT
Page 68 of 97
fără sens asemenea unui NOP . După adunarea acelui 1 la adresă noul cod
dezasamblat va fi:
O altă tehnică de a crea un alt flow al codului este ca după un jump condiționat la
o anumită adresă plus o constantă să urmeze imediat un salt condiționat negat la
aceeași adresă adunată cu aceeași constantă . A doua instrucțiune nu se va executa
niciodată, dar la fel ca în exemplu anterior IdaPro va deplasa in strucțiunile noului
bloc cu un număr de octeți egal cu acea constantă.
Salturile de tip ping pong implică o folosire intensivă a acestor instrucțiuni
prin metoda folosită mai sus .
Instrucțiunea jump la adresa loc_4012E6+2 ar trebui să sară la opcodul EB, iar
opcodul 66 și B8 să fie în afara funcției. Opcodul EB înseamnă un salt. După cum
puteți observa avem iarăși un salt la loc_4012EE ad unat cu o constantă, plus un
octet.
Acest lucru înseamnă că trebuie să facem din nou o realiniere a octeților pentru a
vedea exact care sunt într -adevăr instrucțiunile folosite. Toate aceste tehnici au
apărut din cauză că desazamblatoarele nu au luat în ca lcul acești factori. Totuși,
un user normal nu poate identifica aceste tehnici folosind un hex editor de
exemplu.
Figură 57 jump with constant resolved
Figură 58 ping pong
Figură 59 ping pong alingned
NECLASIFICAT
NECLASIFICAT
Page 69 of 97
O altă metodă care este extrem de eficientă în imposiblitatea dezasamblării
executabilului de tip PE este interpunerea unui octet între instrucțiuni de tip salt
condiționat . Acest opcode introdus se numește rogue byte deoarece el de fapt nu
face parte din program. După cum putem observa
în figura 58, octetul FF poate face parte a tât din
instrucțiunea EB FF care reprezintă un jump, dar și
din instrucțiunea FF C0 care reprezintă un
increment al registrului eax și este imposibil pentru
un desazamblator să -și dea seama din ce
instrucțiune face parte . Acest lucru este datorat
faptului că ambele instrucțiuni sunt pe 2 octeți. Instrucțiunile increment eax și
apoi decrement eax este de fapt un nop și poat fi introduse oriunde în cod deoarece
nu au nici un afect asupra flow -ului aplicației. Bineînțeles că adăugarea de
opcoduri poate fi mult mai complexă . Rezolvarea acestora se face cu înlocuirea
opcodurile inserate între instrucțiuni cu NOP -uri.
3. Metode anti -vm
Având în vedere faptul că majoritatea analizoarelor dinamice folosesc o
mașină virtuală pentru a nu se infecta cu un malware, această tehnică a devenit
din ce în ce mai populară. O mașină virtuală este ideal de folosit deoarece ne
permite să salvăm starea acesteia înainte de a executa un anumit fișier malițios.
Metodele de detecție a unei mașini virtuale se bazează în principiu pe un CPUID.
Ce este un CPUID? Aparent o instrucțiune cu un anumit input, eax=1 , ce va
returna în registrul ecx rezultatul. Al 31 -lea bit din ecx va fi
0 dacă programul rulează pe o mașină fizică și 1 dacă este
într-o mașină virtuală. Interesant este faptul că aceste
instrucțiuni se pot executa pe orice nivel de privilegiu. În
funcție de inputul dat în registrul eax se pot obține mult iple
informații despre starea procesorului. După cum putem
observa în figura 59, xor eax,eax pune inițializează registrul
eax cu 0, apoi îl incrementează. Instrucțiunea cpuid salvează
în ecx rezultatul îar bt salvează bitul în carry flag. Un jump
condițional care face salt la eticheta corespunzătoare indică
faptul ca suntem sau nu într -o mașină virtuală.
Figură 60 insert opcode
Figură 61 cpuid instructions
NECLASIFICAT
NECLASIFICAT
Page 70 of 97
O altă metodă este folosirea registrului eax cu inputul 0x40000000 și în
regiștrii eax, ecx, edx vor fi returnați un vector cu un string cu mesajele „ Microsoft
HV” sau „ VMwareVMware ”. După cum puteți observa
valoarea din ECX se va compara cu octeții 0x4D566572
(trebuie să ținem cont de faptul că sunt în little indian) care
în format hexa înseamnă „reVM” iar 0x65726177 în hexa
înseamna „ware” . În ecx se află un re înainte deoarece și în
registrul eax s -a returnat string -ul „VMwa” . Probabil vă
întrebați dacă putem schimba anumite valori pentru a
cotracara asta. În cazul în care folosiți Vmware puteți căuta
fișierul .vmx din locația mașinii virtuale și să adăugați
următoarea linie de cod.
cpuid.1.ecx= ”0–:–-:–-:–-:–-:–-:–-:–-”
După modificare, salvați fișierul și restartați mașina virtuală. Trebuie să ținem
cont de faptul că metoda de mai sus funcționează doar pentru prima modalitate de
detecție a unei mașini virtuale. Pentru ce -a de-a doua se vor adăuga următoarele
linii de cod.
cupid.40000000.ecx=”0000:0000:0000:0000:0000:0000:0000:0000”
cpuid.40000000.edx=”0000:0000:0000:0000:0000:0000:0000:0000”
4. Tehnici de obfuscare a codului . Polimorfism și Metamorfism
Obfuscarea codului de către dezvoltatorii de malware a devenit o obișnuiță.
Indiferent că e pe, elf, pdf sau word aceștia folosesc tehnici asemănătoare.
Obfuscarea este folosită pentru a face cât mai grea anali za statică atunci când vine
vorba de analizat codul. Atacatorii pot folosi metode diferite de obfuscare pentru
fiecare malware în parte pentur că semnăturile, hash -urile vor fi mereu diferite.
Se pot folosi metode simple precup indroducerea de instrucțiuni NOP, xor -area
unor funcții, randomizări, reinițializări de
regiștrii până la cele mai complexe cum ar fi
criptări de funcții. În acest capitol putem
vorbi și despre polimorfism care reprezintă
introducerea de junk code sau folosirea
diferitelor tipuri de funcții criptografice.
Metamorfismul se referă la forma codului
Figură 62 cpuid with another
input
Figură 63 jump -uri
NECLASIFICAT
NECLASIFICAT
Page 71 of 97
care poate fi diferită de la o țintă la alta. Putem începe discuția cu inserarea de cod
„mort” între instrucțiuni. Acest lucru se referă la faptul ca între instrucțiuni se
introduc NOP -uri sau în opcode 0x90. Altă mdalitate este de a face operații
aritmetice fără nici o logică. De exemplu add eax,0x05 h, sub eax,0x02 h, sub
eax,0x03 h. Pe de altă parte de la o generație la alta
se pot schimba utilizările regiștrilor în sensul că pot
fi folosiți regiștrii diferiți pentru operații aritmetice
sau pentru push și pop. O alt[ modalitate ar fi
rearanjarea instruc țiunilor în cod. Dacă un executabil are de exemplu 15 subrutine
atunci sunt maxim 15! factorial moduri de a rearanja instrucțiunile. Înlocuirea
subrutinelor cu altele echivalente poate reprezenta un mod de obfuscare. De
exemplu mov eax,0x00h poate fi înlocuită cu xor eax,eax. Utilizarea a mai multor
instrucțiuni de jump pentru code transportation . Această metodă nu afectează
flow-ul programului. Obfuscarea fișierelor pdf respectiv a codului JavaScript și a
codului VBA din Word -uri se face în principiu prin funcții care nu necesit ă timp
de deobfuscare. Folosirea unor xor -uri, rearanjări de cod, variabile cu denumiri
care nu respectă anumite standarde de code design sau nume de funcții care nu au
nici o relevanță. În figura din dreapta avem o funcție de obfuscare a unei funcții.
Se parcurge un string de lungime len(D0e). Funcția Mid() returnează un substring
al unui string. Asc() returnează reprezentarea în baza 10 a literei corespunzătoare
din care sescade 35 și se transformă înapoi în literă prin folosirea funcției Chr().
Dacă funcția aceasta primește ca înput string -ul „jhw”, atunci după parcurgerea
acestui algoritm va fi „GET”.
Una dintre metodele des folosite chiar și printre utilizatorii normali o
reprezintă folosirea u nui packer. Acestea nu folosesc funcții de criptare. Nu există
metode automate de „despachetare” a executabilelor și asta va trebui făcută
manual de către analistul de malware. Semnele care arată că un executabil este
împachetat sunt: imposiblitatea de a v edea în primă instanță funcțiile importate,
două funcții sunt folosite pentru împachetare
LoadLibraryA și GetProcAddress , tabela de string –
uri nu este „vizibilă” sau conține doar string -uri
nedescifrabile . De exemplu UPX folosește propria
tabelă de string -uri. Acesta redenumește secțiunile
în UPX0, UPX1, etc. După cum putem observa în
figura 62, executabil este împachetat într -o nouă
secțiune de obicei .data al noului pe. În noul pe
entry -point -ul va conține adresa de jump la funcția
Figură 65 upx packer
Figură 64 pdf obfuscation
NECLASIFICAT
NECLASIFICAT
Page 72 of 97
care despachetează executabilul. Dimensiunea executabilului împachetat este clar
mai mare decât al celui original. Pe același principiu
funcționează și dropperele.
Acestea reprezintă un
executabil care are atașat
mai multe executabile și în
funcție de anumiți factori
cum ar fi parametrii, nume
ale userului, calculatorului
dau drop la câteva dintre ele
și le lansează în proces. În
continuare voi prezenta câteva tehnici de împachetare respectiv injectare a
fișierelor executabile într -un dropper. Prima metodă o reprezintă un sim plu DLL
injection fiind și cea mai utilizată metodă. Dll-url este încărcat în spațiul virtual
al unui proces. De obicei se folosește procesul svhost.exe pentru a fi injectat.
Acest lucru se face parsând toate procesele care rulează în sistem folosind funcții
de genul Process32First, Process32Next care returnează snapshot -ul procesului.
Apoi cu ajutorul snapshotului se preia handle -lul procesul ui. Se alocă spațiu liber
virtual pentru încărcarea dll -ului prin apelul funcției VirtualAllocEx . Apoi se
apelează WriteProcessMemory pentru a scrie DLL -ul în spațiul alocat și
CreateRemoteThread . Dll-urile au o funcție care se apelează automat la încărcarea
acestuia. Bineînțeles, în situația de față este nevoie de un fișier malițios executabil
care să administreze și să apeleze toate aceste funcții. O altă metodă de asemenea
des folosită o reprezin tă concatenarea unui fișier de tip pe în alt fișier executabil
care rulează deja . Un avantaj al acestei tehnici este că nu va trebui să am pe disk
dll-ul pe care doresc să -l injectez pentru ca de fapt nu am nevoie de el. Ca și în
primul caz se alocă memori e virtuală în procesul
existent și se scrie codul malițios folosind
WriteProcessMemory . Această metodă implică
reacalcularea adreselor de bază și a relocărilor din
PE-ul inițial. Pentru a ne da seama că se fac
relocări, un bun indicator este faptul că se
folosește instrucțiunea and eax,0x0FFFh prin
primii 12 biți care sunt folosiți pentru a lua
offsetul adresei virtuale al blocului de relocări.
Altă modalitatea mai rar folosită, da r care este mult mai greu de detectat este
process hallowing . În loc să aloce spațiu și să se scrie în memoria procesului un
Figură 66 dll injection
Figură 67 inject dll function
Figură 68 hallowing
NECLASIFICAT
NECLASIFICAT
Page 73 of 97
DLL sau Pe, această metodă suprascrie spațiul de memorie al procesului care
ruleaz ă cu cod malițios. Inițial atacatorul crează procesul ce are cod malițios în
modul suspendat. Acest lucru se paote face folosind funcția Create Process cu
flag-ul CREATE_SUSPENDED . După aceasta, atacatorul va trebui să elibereze
memoria procesului țintă folosind funcția din ntdll.dll ZwUnmapViewOfSection.
Această funcție eliberează de fapt o secțiune. Apoi atacatorul realocă spațiul
folosind VirtualAllocEx și WriteProcessMemory pentr u a scrie fiecare secțiune a
fișierului malițios în noul proces. Malware -ul apelează SetThreadContext pentru
a seta noul entry point către secțiunea fișierului malițios. Metoda SIR (Suspend,
Inject, Resume) este o metodă asemănătoare cu process h allowing. Această
metodă se mai regăsește și sub numele de process hijaking. De această dată fișierul
malițios încearcă să modifice flow -ul unui thread. După ce atacatorul găsește
threadul pe care îl va folosi drept țintă, acesta îl pune în modul suspendat. Apoi
se procedează exact ca la process hallowing. A pune un thread în modul suspendat
poate cauza o eroare asupra sistemului de aceea de obicei se salvează EIP -ul
curent și va fi reluat după ce malware -ul a reușit să preia controlul , asta numai în
cazul în care eip -ul se găsește pe undeva prin ntdll.dll. Un alt scenariu care poate
fi regăsit printre atacurile folosing malware o reprezintă folosirea hook -urilor.
Pentru a deveni cât mai silențios se setează un anumit hook doar pe un
anumit thread. SetWindows HookEx primește un set de parametrii printre care și
funcția care va fi apelată la apariția unui eveniment. De aceea înainte de apelul
acestei funcții e posibil să fie apeluri ale lui LoadLibrary sau GetProcAddress.
Odată ce dll -ul este injectat nu rămâne decât să execute codul malițios. O altă
metodă prin care se poate face ca un thread să execute un anumit proces este
folosirea APC -ului (Asynchronous Procedure Calls) . Fiecare thread are o coadă
de APC -uri care sunt executate atunci când acesta intră într -o stare alterată.
Această stare este produsă de funcțiile SleepEx, SignalObjectAndWait. Malware –
ul caută în lista de thread -uri pe acela care este într -o stare alterabilă, și îl forțează
să execute funcția din coad a de APC -uri. Acesta folosind funcția QueueUserAPC
are unul dintre parametri funcția de la care threadul trebuie să continue, iar
atacatorul schimbă adresa funcției inițiale cu adresa funcției lui.
F. practică
1. Prezentare aplicație
NECLASIFICAT
NECLASIFICAT
Page 74 of 97
Aplicația dezvoltată de mine este destinată utilizatorilor nor mali dintr -o
rețea locală pentru analiz a fișiere lor PE, fie ele executabile sau DLL -uri, PDF -uri
și fișiere docx din suita Office. Aplicația analizează fișierele executabile atât din
punct de vedere static cât și dinamic. Aplicația se prezintă cu o interfa ță grafică,
web destul de intuitivă. Nevoia de a crea o astfel de aplicație a fost în urma
studiului realizat pe un eșantion de aproximativ 100 de persoane. 40% dintre
aceștia au declarat că au primit email -uri malițioase și analizând istoria ne putem
da seama că nu am învățat nimic și că noi continuăm să facem greșeli. Aplicația
oferă o idee generală despre comportamentul unui malware, despre starea statică
a acestuia și un decision tree care ar trebui să ia o decizie clară în ceea ce privește
clasificarea fișierului. Se presupune că acestă aplicație va rula pe o mașină virtuală
cu conexiune la internet dar folosind host-only pentru a delimita rețeaua mașinii
virtuale de rețeaua de calculatoare. Această aplicație este extrem de utilă deoarece
folosește destul de puține resurse hardware. Nu utilizează mai mult de 300mb ram,
iar procesorul nu este suprasolicitat. Fiecare fișier care este uploadat, analiza lui
durează aproximativ două minute deoarec e parsarea tuturor regiștrilor din
windows durează cel mai mult. În windows 10 sunt aproximativ 350.000 de valori
ale regiștrilor. Fiind o aplicație web care uploadează fișierele pe server
funcționează pe orice versiune de windows . În urma analizei putem o bserva
câteva statistici despre câți useri au fost activi și au uploadat fișiere, câte un grafic
despre fiecare tip de fișier în parte. Această aplicație este utilă deoarece nu există
încă pe piață acest concept care să ofere toate informațiile de care un analist are
nevoie într -un singur raport. Fiecare aplicație din cele menționate mai sus fac câte
un lucru separat din ceea ce poate face aplicația mea. De exemplu Dependency
Walker oferă informații doar despre dll -urile importate sau funcții exportate .În
ceea ce privește analiza pdf -urile și word -urilor pe lângă funcționalitățile oferite
de către aplicația autorului Didier Stevens, acesta extrage și codul sursă prezent
în fișierul malițios și ia în considerare chiar și tabela xref. Aceste funcționalități
sunt prezentate în următorul capitol. Pentru ca totul să fie funcțional din punct de
vedere al interacțiunii utilizator, aplicație de analizat se va folosi stiva wamp. Ce
înseamnă asta ? Că se vor folosit utilitare și limbaje precum windows, apache,
mysql și php. Toate limbajele folosite pentru aplicațiile ce rulează pe server sunt
Win32Api, C++, C și pyhton. Pe lângă toatea acestea, aplicația web oferă și un
sistem de ticketing pentru a identifica mai ușor problemele apărute în sistemele
utilizatorilor. De exemplu dacă doamna de la helpdesk primește un email cu un
conțin ciudat atunci va putea completa un formular în care să specifice persoana
de la care l -a primit și ce anume a facătu cu acel atașament, poate l -a deschis. În
NECLASIFICAT
NECLASIFICAT
Page 75 of 97
primă instanță utilizatorul obișnuit va trebui să uploadeze pe aplicația web fișierul
pe, pdf sau word. După uploadarea unui fișier, se va afișa în pagină un modal cu
un efect de loading care va restricționa accesul userilor de a crea mai mu lte
instanțe de analiză ale aceluiași fișier. Meniul „Report an issue” reprezintă
completarea formularului pentru a trimite un ticket. În cazul în care sunt admin
pot vedea și rezolva tickete din butoanele ticketului
aferent. Fiecare ticket este creat cu un logo special
bazat pe un string matching în cazul în care există
cuvinte cheie în mesajul ticketului precum virus,
malware, calculator etc. Aplicația poate oferi
statistici, acestea fiind disponibile din meniul
„Reports” se cțiunea „Dashboard”. Putem vedea
numărul de fișiere încărcate pentru fiecare categorie
în parte, câte dintre acestea sunt malițioase și câte nu folosindu -se grafice
intuitive. Pentru analiza fișierelor malițioase este folosit și un sistem de clasificare
binară bazat pe un decision tree. Dintr -un executabil am construit o imagine cu
pixeli ce au valori între 0 și 255 și am extras câte feature -uri. Acestea au fost
folosite ca date de antrenare sau validare are decisi on tree -ului. Pe lângă acestea,
am scris un set de reguli yara destinate fișierelor PE pentru a identifica posibil
anumite comportamente ale acestuia. De exemplu conexiuni, path -uri găsite,
anumite funcții criptografice. În pagina „Reports” sunt afișate în partea stângă
patru sub -meniuri pentru fiecare categorie de fișiere în parte. Totul este dinamic
pentru o mai bună interacțiune cu userii. Fiecare tabel afișat dinamic va conține
data la care a fost analizat, nivelul de risc, „Clean” sau „D angerous” în funcție de
caracteristicile
extrase din fișierul
malițios.
Figură 71 file info table
În urma analizei se
va crea un un
raport ce reprezintă
Figură 69 upload
Figură 70 menu
NECLASIFICAT
NECLASIFICAT
Page 76 of 97
indicatorii de compromitere a -i fișierului malițios. Există o serie de indic atori de
compromitere din analiza statică care vor fi interpretați de către analist. Modulul
de machine learning, de decision tree se antrenează pe informațiile extrase din
malware -ul transformat în imaginde de gri -uri. Acesti parametrii pot fi folosiți și
pentru rețele neuronale cum ar fi SVM -uri, K -means, CNN -uri. Acești parametrii
extrași din imagine, inițial erau pentru o rețea convoluțională neuronală, dar am
observat că funcționează foarte bine și pe un decision tree. Acești parametrii sunt:
dispersie , indice de asimetrie, indice de aplatizare și entropie. Pentru o anumită
clasificare a pdf -urilor și word -urilor nu s -a folosit un decision tree deoarece nu a
fost nevoie. Aceste tipuri de documente au indici foarte clari pentru a face
distincția dintre u n malware și un fișier benign. Pentru fiecare din cele doua tipuri
de fișiere s -a încercat extragerea codului malițios existent. Problema este că
uneori acest cod este obfuscat, dar cu o analiză în detaliu din partea unui analist
cu experiență va fi ușor să -și dea seama. În ceea ce priv ește analiza word -ului,
raportul conține structura acestuia, impreună cu niște tipuri de atacuri „ascunse”
cum ar fi DDE. Acest tip de atac ascunde în footer -ul documentului cod pe care îl
poate exeuta dacă va fi specificat în anumite taguri din fișierul C ontent.xml după
despachetarea word -ului. Aplicația dezvoltată de mine ia în considerare toți acești
factori. Timpul de analiză a acestor doua tipuri de fișiere, word și pdf este de
aproximativ 10 secunde. În interfața web va fi prezentată o decizie dacă es te fișier
malițios sau nu ăe baza unui scor. Acest scor este calculat în timpul procesului de
analiza. Aplicația face o delimitare clară între admiti, cei care analizează și iau
decizia finală asupra unui fișier, și userii normali. Adminul, pentru fiecare raport
are un buton „Check” pentru a confirma analiza raportului, iar userul vede în
tabelul lui dacă a fost verifcat sau nu. Un admin poate vedea toate rapoartele luui,
dar un useri nu poate vedea decât rapoartele încărcate de el. În ceea ce privește
analiza pe -urilor și dll -urilor, regulile yara au scrise în principiu pentru funcțiile
criptografice, chei posibile, randomizări găsite , numere ce par a fi randomizare.
Yara reprezintă un tool pentru detecția de malware bazată pe similitudini binare
și textual e. Pentru fiecare malware se poate face o semnătură bazată pe o regulă
yara și atunci vom putea știi din ce familie sau ce tip de malware este. În cazul
analizei dinamice s -au preluat valorile tuturor regiștrilor din windows înainte de
a lansa în execuție fișierul malițios. În momentul lansării în execuție, am
considerat că cea mai utilă metodă este de a face un funcțion hooking pentru a
vedea toate apelurile inițiate de către acel malware. La finalul execuției se va
închide procesul pentru a nu -l lăsa să p ersiste ca și proces. După aceasta se vor
prelua din nou valorile regiștrilor și se vor compara cu valorile inițiale. Se vor
NECLASIFICAT
NECLASIFICAT
Page 77 of 97
afișa numărul de valori care diferă. Pe lângă funcțiile apelare, analizorul va afișa
și parametrii importanți a -i funcției cum ar fi ip -ul la care dorește să se conecteze
sau numele fișierului pe care dorește să -l creeze.
În concluzie, consider că aplicația mea este destul de imporantaă și necesară
deoarece poate fi folosită pe orice sistem ce are sistem de operare windows,
nedepinzând de componentele hardware. Este destul de rapid și oferă o idee destul
de clară despre funcționalitățile fișierului malițios.
2. Funcționalități și implementare
În acest capitol voi prezenta detaliile de implementare pe baza
funcționalităților și cum a fost gândită aplicația. Deși unele api -uri puteau fi
folosite mult ma ușor, nu ofereau capacități multiple de manipulare a fișierelor.
Pentru analiza statică și di namică a fișierelor executabile PE a fost folosit
WIN32api și C++ deoarece oferă posibilitatea chiar de a lucra la nivel de octet. În
analiza fișierelor de tip docx s -a folosit limbajul de programare C deoarece a fost
mai simplu de integrat cu comenzile de batch pentru dezarhivarea lor . În schimb
pentru parsarea tuturor tagurilor și extragerea codului din fișierele PDF s -a folosit
python și o librărie oferita de Didier Stevens.
Pentru uploadarea fișierelor din aplicația web s -a folosit php și mysql
pentru indroducerea lor în baza de date.
move_uploaded_file($_FILES['file']['tmp_name'],$_FILES['file']['name' ]
)
Fișierul se va afla în folderul htdocs în cazul în care nu dorim noi să schimbăm
calea. În continuare discutăm cazul în care analizăm un fișier PE. După ce fișierul
a fost mutat pe disc -ul serverului, se lansează în execuție un script python pentru
a determina dacă este fișier PE, word sau pdf.
shell_exec($command);
Varia bilele x și y reprezintă indexul la care găsesc
fișierele cu extensia .docx sau .pdf. În cazul în care
fișierul este PE atunci voi lansa în execuție un
executabil care îmi va verifica dacă este pe 32 sau
64 biți. Acest lucru este important deoarece a trebui
să fac 2 tipuri de analizoare unul compilat pe 32 și
NECLASIFICAT
NECLASIFICAT
Page 78 of 97
celălalt pe 64 de biți. Dacă fi șierul meu PE pentru
analizat era pe 64 de biți și analizorul meu era pe 32
de biți atunci nu îl puteam lansa în execuție pentru
că windows -ul are spații de memorie virtuală
diferită pentru procesele care rulează pe biți diferiți.
Acest lucru este controla t de WOW 64, Windows of
windows 64. Pe lângă asta pentru că dimensiunile
header -ului PE este diferit pe 64 decât al celui pe 32
la extragerea informațiilor din header a trebuit să
folosesc tipuri de date diferite. Pentru că
executabilul care verifică pe câți biți este fișierul malițios este pe 32 de biți pentru
a lansa în execuție analizorul pe 64 de biți a trebuit să apelez folosind comanda
system() . Dacă doresc să apelez analizorul pe 32 de biți atunci p ot crea procesul
efectiv folosind comanda CreateProcess cu parametrii corespunzători așa cum se
poate observa în imaginea 70. În fișierul care lansează în execuție analizorul pe
64 de biți nu am decât comanda subprocess.popen() deoarece s -a dorit inițial ca
codurile de eroare să fie întoarse
în procesul părinte. Având în
vedere că analizorul pe 32 și pe 64
de biți sunt asemănătoare voi
prezenta doar unul, dar bineînțeles
că voi prezenta și diferențele.
Codul este obiectual ceea ce
înseamnă ca am încercat să
folosesc cât mai multe concepte
de POO. Inițial s -a extras extensia
fișierului deoarece numele raportului este același cu al executabilului doar că va
fi pregătit pentru inp ut în pagina web în format html. După cum puteți observa în
diagrama de clase din figura 71, clasa „ManagementClass” gestionează și
Figură 72 CreateProcess
Figură 73 Class diagram
NECLASIFICAT
NECLASIFICAT
Page 79 of 97
colectează informațiile de la toate celelalte clase. Clasa aceasta este singletone
deci poate fi instanțiată de oricâte ori este nevoie având aceleași informații mereu.
În imaginea 72 este prezentată conținutul de cod important din această clasă.
Prima dată instanțiem clasa ExceptionClass care este clasă singletone și care
colectează și reține toate erorile din parsarea fișierului PE. În pointerul _pbuffer
de tip unsigned char vom încărca fișierul PE. Deoarece acesta face parte din
procesul curent al aplicației de analiză, toate referințel e către datele și structurile
din PE vor trebui recalculate din adresele virtuale în adrese relative virtuale.
Acesta este cel mai important lucru pe care trebuie să îl înțelegem. Pentru că
spațiul alocat unui proces nu este mereu același și spațiul în car e am încărcat
bufferul cu fișierul PE este mereu la alte adrese.
Figură 75 va to rva
Pentru a obține adresa relativă virtuală se parcurge
fiecare secțiune în parte și va trebui să se afle între
adresa virtuala a acesteia și adresa virtuală plus adresa
fizică. În cazul în care executabilul este încărcat lângă
Figură 74 get info from pe
Figură 76 va to rva
NECLASIFICAT
NECLASIFICAT
Page 80 of 97
process folosind funcțiile Virt ualAlloc și WriteToMemory, atunci puteam folosi
direct adresele relative
pentru că efectiv erau în
continuarea secțiunilor
deja existente în
memorie. În imaginea
din dreapta putem
observa cel mai bine
această diferență.
Pentru un utilizator
normal este des tul de
greu de ob servat aceste
transformări ale
adreselor de memorie. Secțiunile se află la adrese relative virtuale, dar de exemplu
pentru secțiune de importuri, funțiile importate se află la adrese virtuale. După
cum observați și în imaginea de mai sus această funcție se află în clasa
„OtherFunctionClass” ce conține și alte funcții neimportante pentru extragerea
informațiilor despre fișierul PE. Clasa „DosHeaderClass” nu se folosește decât de
citirea fișierului în buffer, de verificarea fișierului și ext rage din header adresa de
offset numită e_lfanew . Acesta pointează către headerul PE din care se extrag
restul informațiilor din analiza statică. În figura 75 avem informațiile extrase
dintr -un malware și după cum putem observa nici ora compilării, nici diferențele
dintre dimensiunea virtuală a secțiunilor și size of row data nu sunt foarte mari ca
să-l putem clasa din prima ca fiind un posibil malw are. Dar un factor imporatant
este că ASLR -ul și DEP -ul sunt dezactivate, iar secțiunea de date încarcă în
memorie în timpul rulării mai multe date. Ceea ce putem observa este că entropia
pe secțiunea de cod este destul de mare ceea ce înseamnă ca codul po ate fi
obfuscat. Am realizat pe fiecare secțiune un sha256 pentru a fi puternic contra
Figură 77 info from header
NECLASIFICAT
NECLASIFICAT
Page 81 of 97
atacurilor de tip dicționar. Pentru calcularea a sha256 pe secțiune și a întregului
fișier s -a folosit librăria dinamică oferită de OpenS SL.
După cum putem observa, pentru fiecare obiect dintr -un fișier PE este definită
câte o structură. De exemplu pentru header -ul PE este deja definită structura
IMAGE_NT_HEADERS . Fiecare caracteristică din fișier după cum se poate
observa, are o valoare așa cum a fost prezentată în capitolul destinat prezentării
fișierului PE. Pentur extragerea string -urilor ASCII din fișierul PE, efectiv s -a
parcurs octet cu octet și în cazul în care întâlneam peste 5 caractere consecutive
care ca valoare să fie mai mare de 0x41 și mai mic de 0x7A deoarece aici este
range -ul de valori în hexa pentru care există caracterele limbii engleze. În cazul
în care am gasit mai mult de 5 caractere parcurg până ajung la 0x00 și afișez
string -ul obținut. Bineîn țeles că rezultatele obținute chiar și folosind un tool
profesional nu dau mereu rezultate bune. Vor apărea și string -uri fără nici o
relevanță.
Figură 78 pe header info
Figură 79 extract sections
NECLASIFICAT
NECLASIFICAT
Page 82 of 97
În imaginea 77 observăm că din header cunoaștem numărul de secțiuni și le vom
parcurge pe fiecare. Păstrez în doi pointeri startAddress și endAddress începutul
și sfârșitul în acea secțiune deoarece voi parcurge octet cu octet fiecare secțiune
și voi calc ula inițial histograma acesteia. Pe baza histogramei ne putem da seama
și dacă a fost obfuscat codul folosind xor -ări. Pentru că fiecare funcție are un
prologue și epilogue definiți de către niște octeți care sunt mereu aceeași. Pentru
a calcula histograma , fieacare octet este convertit la unsigned char pentru a avea
valori între 0 și 255. Apoi folosind formula entropiei calculăm bazându -ne pe
histogramă. 𝑝𝑖 reprezintă probabilitatea de apariție a unui caracater. De aceea
avem nevoie de histogramă. Pentru că histograma ne indică de câte ori apare o
anumită valoare și împărțind la câte sunt în total putem afla probabilitatea. Același
algoritm se aplică și pentru extragerea funcțiilor exportate din DLL -uri sau din
executabile. Deoarece nu este o regulă . Pentru extragerea resurselor la fel, se
folosesc structurile deja predefinite și se caută fiecare câmp folosind
transformările r elative virtual address to virtual address. În ceea ce privește
analiza dinamică am realizat un DLL injecțion pe anumite funcț ii. Ce se întâmplă
de fapt acolo? Parsez tabela de importuri ale funcțiilor și suprascriu adresa din
tabelă a unei funcții cu adresa funcției mele. Atunci când se va apela acea funcție,
de fapt se va apela funcția scrisă de mine. Eu preiau parametrii, obse rv că s -a
încercat apelul unei funcții de schimbare valori din
regiștrii, de creare/scriere de fișiere, conectări la
diferite ip -uri, creări de procese , funcții pentru
încărcări de librării dinamice, etc. Orice funcție
existentă poate fii hook -uită. Diferența dintre analizorul meu și un emulator este
că dacă un malware apelează vreo funcție de randare ai pixelilor nu va da nici o
eroare sau ca aplicația mea să primească vreun crash. De asemena pentru acest
lucru s -au realizat doua librarii dinamice un a pe 32 de biți și una pe 64 de biți
deoarece nu poate fi încărcat un dll pe 32 într -un proces pe 64 datorită lui WOW64
ce va fi explicat în capitolul următor. Clasa care se ocupă de injectarea dll -ului în
procesul malaware se numește „DynamicHookClass” . Metoda getProcess preia
Figură 80 entropy formula
NECLASIFICAT
NECLASIFICAT
Page 83 of 97
handle -lul, pid-ul procesului care rulează, inițial în modul suspended , injectează
dll-ul și apoi pornește procesul.
Figură 81 inject dll on 32
După cum puteți observa se deschide procesul cu OpenProcess care va returna
handle -ul. Folosind VirtualAllocEx se alocă memorie în procesul existent pentru
dll și se atașează la procesul folosind WriteProcessMemory al cărui handle este
returnat mai sus. Pentru fiecare excepție care poate apărea se introduce în clasa
respectivă. Pentru crearea unui DLL se va deschide un proiect „New Dynamic
link library”. Acesta va conține un switch case predefinit unde
„DLL_PROCESS_ATACH” care va rula o funcție scrisă de noi prima dată când
va fi încarcat dll -ul în proces. Pentru că nu știm unde în memorie găsim procesul
va trebui să luăm pointerul de bază al acestuia pentru a ajunge la tabela de
importuri așa cum a fost definită și la parsarea fișierului PE. PEB reprezin tă
Process Enviroment Block și este o structură ce conține toate infomațiile de care
are nevoie procesul , contextul global, parametrii de start, adresa de bază a
imaginii. Pentru a face hook pe o funcție din tabela de importuri se definește mai
întâi un po inter te tip unsigned int alocat dinamic.
unsigned int *iatEntryCreateFile = new unsigned int
Se parcurge tabela de importuri ale exectuabilului pornind de la adresa de bază și
până s -a găsit funcția dorită. Se reține pointerul funcției găsite. Se scrie noua
funcție cu care dorim să o înlocuim pe cea originală. Trebuie să se respecte forma
originală a parametrilor pentru a putea fi apelată. În interiorul acesteia putem scrie
Figură 82 get PEB
NECLASIFICAT
NECLASIFICAT
Page 84 of 97
absolut orice cod. La sfârșitul funcție se va returna apelul funcției originale
deoarece noi dorim să observăm în continuare flow -ul aplicației.
HANDLE WINAPI HookedCreateFILE(parametrii functiei CreateFile)
{
Cod ….
return CreateFile(parametrii functiei CreateFile);
}
După ce s -au respectat acești pași va trebui să înlocuim adresa funcției
CreateFile din iat cu pointerul funcției noastre. Înainte de asta se face un
VirtualProtect la acea adresă pentru a -i da drepturi de scriere citire să putem
înlocui funcția.
VirtualP rotect((unsigned int *)(((unsigned int)*iatEntry) & 0xFFFFF000),
0x1000, PAGE_EXECUTE_READWRITE, &oldPermissions)
Pentru analizorul pe 64 de biți s -a
folosit o librărie numită EasyHook
care automat alocă memo rie pentru
dll și îl mapează lângp procesul
curent. În DLL -ul pe 64 de biți nu va
fi nici o funcție care să se
autoapeleze la încărcarea DLL -ului
pentru că librăria de ocupă de tot. Se
va defini în dll funcția exact ca în dll -uri de 32, doar că va fi definit un
HOOK_TRACE_INFO înițializat cu 0 pentru fiecare funcție pe care dorim să
facem hooking. Avantajul este că nu va mai trebui să parcurgem toată tabela de
importuri deoarece folos indu-ne de librăria EasyHook putem apela doar funcția
LhInstallHook cu primul parametru este funcția pe care dorim să -i facem
hooking, al doilea parametru este funcția cu care o înlocuim pe prima și ultimul
parametru este acel HOOK_TRACE_INFO.
Figură 83 easyhook
NECLASIFICAT
NECLASIFICAT
Page 85 of 97
Regulile yara au fost scrise în principiu pentru câteva funcții criptografice,
pentru pattern -uri de numere, pentru path -uri găsite, pentru posibile conexiuni și
ip-uri găsite, inclusiv url -uri. Exemplu de
regulă yar a. În figura 82 se presupune a fi o
regulă pentru a căuta numere sau hash -uri pe
dimensiune multiplă de 2. Regulile sunt
integrate cu ajutorul lui python. După ce
sunt definite toate regulile, se importă
biblioteca yara în python, se compilează
regulile folosind yara.compile(cale_fișier) .
Obiectul rezultat este folosit pentru a verifica toate string match -urile. Funcția
folosită e result.match(pe_file) și va returna un vector cu toate potrivirile.
Pentru clasificatorul de mawlare s -a folosit un decision tree antrenat pe
câteva feature extrase din executabil. Un decision tree este un clasificator binar,
cu învățare supervizată ceea ce înseamnă că are nevoie de un set de date de
antrenare. Inițial, executabilul s -a transf ormat într -o imagine de gri -uri folosind
biblioteci din python. S-a încercat o construcție a imaginii relativă cu dimensiunea
executabilului. Cu cât executabilul este mai mare cu atât și dimensiunea imaginii
este mai mare. Pentru fiecare imagine în parte, pentru setul de antrenare s -au
extras următoarele caracteristici:
Skewness sau indice de asimetrice. O distribuție normală este dată de
clopotul lui gaus. Acest indice reprezintă distorsiunea față de axa pe
verticală în centrul clopotului și poate fi nega tivă adică deviată în partea
dreaptă sau positivă în
partea stângă. Reprezintă
de fapt cât de bine sunt
„împrăștiate” valorile în
imagine.
Kurtosis sau
coeficient de boltire. Împreună cu indicele
de asimetrie face parte din indicii de
apreciere a formei unei distribuții. Indicele
de boltire ne îndică mai mulți pixeli depărtați
față de media distribuției. Exemplifică
Figură 84 yara rule
Figură 85 indice de asimetrie
Figură 86 kurtosis
NECLASIFICAT
NECLASIFICAT
Page 86 of 97
extremele apăr ute în imagine. În cazul în care apar valori destul de mari ale
acestui indice înseamnă că trebuie analizată imaginea mult mai bine
deoarece arată o anormalitate. În imagine sunt exemplificare cele trei
moduri în care poate apărea indicele față de distribu ția normală.
Varianța sau dispersia. Dispersia unei variabile aleatoare este valoarea
așteptată a diferenței pătrate dintre variabilă și valoarea ei așteptată. În
principiu măsoară gradul de împrăștiere a pixelilor sau arată omogenitatea
acestora. Arată cât de mult variază datele față de valoarea medie.
Analiza pdf-urilor se realizează prin parsarea fișierului. Acesta este structurat
în Header, Body, tabela xref și trailer -ul. În header este specificat versiunea pdf –
ului apoi urmează o secvență d e caractere neafișabile. Body -ul fișierului conține
o serie de obiecte, stream -uri și elemente multimedia. De aici vom extrage fiecare
informație de care avem nevoie. Fiecare obiect are un tag, de exemplu
„/OpenAction ” și reprezintă secvența de cod care se execută la deschiderea
fișierului. Tabela xref conține referințele la toate obiectele din fișier. Aceasta ne
ajută să găsim anumite tag -uri din pdf fără a parcurge tot fișierul. Fiecare intrare
în tabela xref are 20 de oc teți
Xref
0 1
0000000023 65535 f
Prima linie reprezintă numărul obiectului din pdf și al doilea număr înseamnă câte
referințe ale subsecțiunilor conține acel document. Primii 10 octeți din referință
reprezintă offsetul față de începutul documentului. Apoi urmează un spațiu sau
0x20 în hexa urmat de object generation number urmat de un spațiu. La sfârșit
apare un f sau n ceea ce indică dacă obiectul este free sau used. Traileru -ul conține
informații despre cum ar trebui să găsim tabela xref. Fișierul pdf ar trebui citit de
la final. Tag-ul startxref conține offsetul față de începutul fișierului către tabela
xref. „/Encrypt” poate specifica dacă documentul conține un dicționar criptat.
Aplicația mea realizează parcurgerea și identificarea acest or tag -uri care ar putea
fi compromise sau care ar putea conține cod malițios. Un fișier normal nu conține
NECLASIFICAT
NECLASIFICAT
Page 87 of 97
cod javascript. Se realizează un hash pe baza con ținutului fișierului și se
analizează tabela xref .
Figură 87 js code from pdf
După cum putem observa, în acest
fișier malițios există cod javascript
obfuscat. Se folosesc variabile fără sens.
Obsevăm că după fiecare caracter
atacatorul a concatenat cu litera „P”. Pe
lângă asta, tabela xref nu respectă
standardele. Observăm că acest cod se execută în momentul în care fișierul este
deschis deoarece tot codul este în tagul /OpenAction. S-a calculat entropia
fișierului pentru a determina dacă aceasta conține elemente criptate. Pe baza
acestora s -a calculat un scor.
Analiza fișierelor de tip docx este destul de simplă. Trebuie studiată structura
fișierelor de tip OLE. Aceasta a fost gândită prima dată în 1995 odată cu apariția
lui Windows 95. OLE ( Object Linking and Embedding) este o structură de fișiere
ce conțin atribute și care aceste fișiere se linkează automat. Inițial am făcut o
aplicație care trebuie rulată cu d repturi de administrator
deoarece trebuie dezarhivate fișierele de tip docx. Se
schimbp extensia din .docx în .rar și se dezarhivează.
Fiecare fișier xml conține atributele necesare funcționării
corespunzătoare deschiderii fișierului. Un fișier docx
benign nu conține niciodată fișiere binare , „fisier.bin” . Acele fișiere conțin de
obicei cod în alte limbaje de programare care sunt folosite prin intermediul VBA –
ului din suita Office. Aplicația mea detectează atacuri de tip DDE (Dynamic Data
Exchange) din fișierele docx. Cum funcționează un atac de tip DDE? Se scrie
Figură 88 tags pdf
Figură 89 inside a word
NECLASIFICAT
NECLASIFICAT
Page 88 of 97
comanda de bash în documentul office, de obicei in footer și se setează culoarea
fontului pe alb pentru a nu se distinge de background.
În macro -ul fișierului se definește o funcție care manipulează comanda.
Public Sub FieldCodeFun()
' Payload String
Dim payload As String
payload = """c: \\windows \\system32 \\calc.exe"" ""/c calc.exe"""
' Insert our payload as a field code
Selection.Collapse Direction:=wdCollapseEnd
ActiveDocument.Fields.Add Range:=Selection.Range, _
Type:=wdFieldDDEAuto, Text:=payload
End Sub
Fișierul document.xml conține codul dde pentru a fi executat mai târziu. Acesta
se află între niște tag -uri de w:instr . String -urile care ne pot ajuta la analiza este
între tagurile w:t.
Aplicația mea caută toate funcțiile pe care le găsește în fișier. Unele funcții sunt
obfuscate mai mult sau mai puțin. În cazul în care găs esc funcții obfuscate
encodate cu base64 atunci aplicația mea este capabilă să decodeze funcția. Pe baza
tuturor celor găsite, se calculează un scor și în funcție de acesta, fișierul este sau
nu malițios.
G. Concluzii
1. Probleme întâmpinate la implementare
Dezvoltarea unei aplicații cu multiple funcționalități care să fie pregătită
pentru release, necesită timp. Pentru a demonstra capabilitățile de automatizare în
Figură 90 dde atack
Figură 91 dde 2 atack
NECLASIFICAT
NECLASIFICAT
Page 89 of 97
analiza malware am dezvoltat un concept. Pe parcursul dezvoltării aplicației am
întâmpinat câte va probleme destul de importante care trebuie luate în calcul atunci
când dorim să invățăm despre cum putem analiza un malware, dar și despre
arhitecturile sistemelor care sunt infectate.
În primul rând, cea mai mare provocare a fost faptul că trebuia să dezvolt doua
aplicații pentru analiza pdf -urilor, una pe 32 biți și una pe 64, respectiv și dll -urile
aferente. Sistemul de operare încarcă executabilul în doua zone de medii diferite.
Exec utabilele pe 64 biți folosesc librării dinamice pe 64 cum ar fi ntdll64.dll. Un
executabil pe 32 poate fi încărcat în zona de memorie pe 64 biți prin Windows of
windows 64. Acesta este de fapt un emulator pentru aplicațiile pe 32 de biți în
cazul în care s istemul de operare este pe 64 biți. În ceea ce privește analiza
dinamică a fișierelor, problema o constituie fragmentarea DLL -urilor din
Windows 10 deoarece s -a considerat că nu mai este nevoie să se încarce tot DLL –
ul în memorie și să ocupe spațiu pentru o funcție. O altă problema a constituit -o
transformarea din adresă virtuală în adresă relativă virtuală. Principalul lucru
înteresant a fost identificarea feature -urilor din imaginea creată pe baza fișierului
executabil deoarece acestea au fost concepute pentru o rețea de tipul CNN. Sunt
foarte multe modalități de extragere a unor identificatori dintr -o imagi ne, de
exemplu pe baza unor locali și globali descriptori.
În ceea ce privește analiza fișierelor pdf și word, ce mai mare problemă rămâne
faptul că după analiza, persoana care se ocupă de verificarea acestuia trebuie să
analizeze codul găsit. În majorita tea cazurilor acesta este obfuscat și se poate intui
care este regula de codare. În cazul fișierelor pdf, s -a descoperit mai târziu faptul
că există două tipuri de tabele xref. Cea liniară apare în momentul în care un user
folosește un tool de generare de pdf-uri sau folosește Latex care generează pdf
folosind cod .
2. Rezultate obținute și îmbunătățiri ale aplicației
Toate fișierele malițioase cu care a fost testată aplicația au fost mostre
provenite de la compania de securitate VirusTotal. Mi-au oferit un număr de
aproximativ 100 de mostre de malware din fiecare categorie cu un rezultat al
analizei lor superficial pentru a -mi testa aplicația. Setul de antrenare pentru
decision tree a fost de aproximativ 50 de probe de fișiere malițiose și benigne . Din
aproximativ 20 de fișiere testate de tipul PE aproximativ 60% au fost detectate ca
fiind malițioase și 40% benigne. Pe baza acestora am observat că modulul de
NECLASIFICAT
NECLASIFICAT
Page 90 of 97
machine learning are o rată de succes în detecție de aproximativ 90% și care poate
fi îmbunătățită prin analiza a câtor mai multe fișiere. Tabela cu datele de antrenare
se updatează automat atunci când se analizează un nou fișier. În ceea ce privește
analiza pdf -urilor și fișierelor docx s -a constatat o detecție de 100% . Se face o
distincț ie foarte clară între fișierele malițioase și benigne. În ceea ce privește
îmbunătățirile care pot fi aduse la aplicație se pot enumera următoarele:
implementarea unui sistem de detecție a obfuscării codului în cazul în care acesta
este xor -at dat fiind fa ptul că un fișier PE are foarte multe zero-uri și știm prologul
și epilogul unei funcții. O altă îmbunătățire ar fi în cazul fișierelor pdf și word de
a se crea metode de deobfuscare respectiv decriptare bazate pe detecție, dar în
opinia mea acest lucru tinde să fie imposibil. O altă modalitate de a fi implementat
un sistem de analiză dinamică ar fi un emulator care simulează instrucțiunile
microprocesorului, dar problema ajunge tot la detecția apelurilor de sistem din
ntdll care trec în kernel mode.
3. Concluzia finală
Concluzionând, amintesc principalele aspecte ce am încercat să le explicit prin
prezenta lucrare. Astfel, am supus analizei implicațiile elaborării unui sistem de
analiză primară statică și dinamică a mostrelor de malware.
Astfel, menționez faptul că în cadrul studiului realizat, am redat scriptic atât
elemente de natură istorică ce vizează tema alează pentru a demonstra
vulnerabilitatea cea mai importantă, omul, dar și elemente ce țin de evoluția
fișierelor malițioase. Totodată, am transpus elementele tehnice în practică, în
sensul că am încercat să exemplific conținutul științific cu elemente practice prin
prezentarea mai multor evenimente de atacuri cibernetice ce au dus la infectarea
unor anumiți subiecți, fapt ce demonstrează repetivitat ea lipseai de măsuri în
vederea protejării sistemelor.
De asemenea, menționez că partea teoretică și necesitatea unei astfel de
aplicații este foarte importantă deoarece prin statisticile obținute și prin studierea
istoriei s -a demonstrat că într -adevăr aș a este. Am realizat un studiu pe
aproximativ 100 de subiecți, persoane fizice, având cunoștiințe medii de utilizare
a calculatorului, ce a demonstrat faptul că aproximativ 40% dintre aceștia nu au
instalat pe sistemul propriu un antivirus și că aproximativ 60% au fost infectați cu
NECLASIFICAT
NECLASIFICAT
Page 91 of 97
un malware. Educarea populației în acest sens este un lucru imperios în vederea
evitării sau, cel puțin, în vederea folosirilor de tehnici de detectare și eliminare a
fișierelor de tip malware. Aplicația realizată vine în ajutorul analiștilor de
malware deoarece oferă informații concrete despre un anumit fișier, informații de
bază din care se poate trage o conclu zie. Pe lângă acest fapt, aplicația oferă și o
informația clară despre malware pentr u utilizatorii normali în sensul că în urma
analizei, aplicația ia o decizie de clasificare.
4. Bibliografie
Practical Malware Analysis , Michael Sikorski și Andrew Honing , 2012
The Art of Assembly Language ,
https://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Int
el%20×86%20Assembly.pdf
Virtual Machine for Encrypted Code Execution , Mihai Togan, Ali n
Feraru, Adrian Popescu, 2017
Reversing C++ , IBM Interner Security Systems X -Force R&D, Paul
Vincent Sabanal , Mark Vincent, Yason
AVLeak: Fingerprinting Antivirus Emulators Through Black -Box
Testing , Jeremy Blackthorne Alexei Bulazel Andrew Fasano Patrick
Biernat Bülent Yener , Rensselaer Polytechnic Institute
Investigation of Malicious Portable Executable File Detection on the
Network using Supervised Learning Techniques , Rushabh Vyas, Xiao
Luo, Nichole McFarland, Connie Justice , Indianapolis Department of
Information and Technology
Packed Malware Detection using Entropy Related Analysis , Department
of Computer Science Federal University, Lokoja, Kogi State, Nigeria
Bypassing Memory Protections , Alexander Sotirov, Mark Down,
https://www.blackhat.com/presentations/bh -usa-08/Sotirov_Dowd/bh08 –
sotirov -dowd.pdf
Machine Learning Aided Static Malware Analysis: A Survey and
Tutorial , Andrii Shalaginov, Sergii Banin, Ali Dehghantanha, Katrin
Franke
A learning model to detect maliciousness of portable executable using
integrated feature set , Ajit Kumar, K.S. Kuppusamy, G. Aghila
NECLASIFICAT
NECLASIFICAT
Page 92 of 97
Performing a ret2libc Attack ,
https://www.shellblade.net/docs/ret2libc.pdf
PE File Features in Detection of Packed Executables , Dhruwajita Devi
and Sukumar Nandi
Operating Systems Development – Portable Executable (PE) , Mike 20 11
Malware classification using self organising feature maps and machine
activity data , Pete Burnap, Richard French, Frederick Turner, Kevin
Jones
X86 Disassembly/ Windows Executable Files, Wikipedia
Import Table , http://win32assembly.programminghorizon.com/pe –
tut6.html
PE Format , Microsoft Documentation
Using File Entropy to Identify "Ransomwared" Files ,
https://isc.sans.edu/forums/diary/Using+File+Entropy+to+Identify+Ranso
mwared+Files/21351/
Malware Terms for Non -Techies -Code Entropy , Tal Morgensten, De c
2016 , CyberBit
Entropy and distinctive signs of packed PE files , Javier Nieto,
http://n10info.blogspot.com/2014/06/entropy -and-distinctive -signs -of-
packed.html
Windows registry information for advanced users ,
https://suppor t.microsoft.com/en -ie/help/256986/windows -registry –
information -for-advanced -users
API hooking revealed , Ivo Ivanov, 3 Dec 2002
Windows Function in Malware Analisys ,
https://resources.infosecinstitute.com/windows -functions -in-malware –
analysis -cheat -sheet -part-1/#gref
Art of Anti Detection , https://pentest.blog/art -of-anti-detection -1-
introduction -to-av-detection -techniques/
AnalyzePDF -Bringing the Dirt Up to the surface ,
https://hiddenillusion.github.io/2013/12/03/analyzepdf -bringing -dirt-up-
to-surface/
Convolutional Neural Network from the ground up , Alejandro
Escontrela, 2018
Analyzing and Detecting Malicius Content: Docx Files , Ayyad Naser ,
Mohammad Hjouj Btoush , Ali Hadi
NECLASIFICAT
NECLASIFICAT
Page 93 of 97
Macro Viruses , http://www3.safenet -inc.com/csrt/macrovirus.aspx
Hide DDE -Based Attack in MS Word , https://null –
byte.wonderhowto.com/how -to/hide -dde-based -attacks -ms-word –
0180784/
Detecting Hook and ROP Attacks Method with Examples , Vlad Andreev
Adversarial Malware Detection , Team Nematode , 2018
Executable and Linkable Format ,
http://www.skyfree.org/linux/references/ELF_Format.pdf
Understanding Code Obfuscation Techniques in PDF files ,
https://www.vadesecure.com/en/malware -analysis -understanding -code –
obfuscation -techniques/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: ELABORAREA UNUI SISTEM DE ANALIZĂ PRIMARĂ STATICĂ ȘI [628243] (ID: 628243)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
