Licenta Petre Mihai (1) [620058]

ROMÂNIA
MINISTERUL APĂRĂRII NAȚIONALE
ACADEMIA TEHNICĂ MILITARĂ
“FERDINAND I”

FACULTATEA DE SISTEME INFORMATICE ȘI SECURITATE CIBERNETICĂ
Specializarea: Calculatoare și sisteme informatice pentru apărare
și securitate națională

Sanitizarea documentelor de tip PDF, WORD, XLS, imagini, text.
Implementare sistem de analiză malware (sandbox) folosind aplicații open
source

CONDUCĂTOR ȘTIINȚIFIC:
Mr. conf. dr. ing. Ștefan -Adrian TOMA
CONSULTANT:
Lt. ing. Livia ROȘU

ABSOLVENT: [anonimizat] ___________ file
Inventariat sub nr. ______
Poziția din indicator: ____
Termen de păstrare: _____
BUCURE ȘTI
2019

NECLASIFICAT

NECLASIFICAT
1 din 108

NECLASIFICAT

NECLASIFICAT
2 din 108

NECLASIFICAT

NECLASIFICAT
3 din 108

NECLASIFICAT

NECLASIFICAT
4 din 108

NECLASIFICAT

NECLASIFICAT
5 din 108

ABSTRACT

Malicious non -executable files are being increasingly used to break into
user’s computers. Anti -virus solutions fail to detect all the malicious files. The
scope of this paper is to present a n automated malware detection approach using
machine learning to process the analysis reports generated by cuckoo sandbox .
Cuckoo is a n open source automated malware analysis system that allows you to
perform analysis on any suspicious file.
In this paper we will focus on non -executable files such as PDF, WORD,
XLS, te xt documents and image files . Because of the abnormal growth of
embedded malware inside popular document formats we need to use different
automated approaches to find theses infected files.
In this project we are going to implement a Python application which will
automate all the analysis tasks such as sending document s to cuckoo sandbox
for generating analysis report s, extract features for feeding the trained machine
learning model which will label the analyzed document s as benign or malware.
For traini ng and testing the classifier a relatively large amount of ma licious and
benign documents were collected. Several features are analyzed in order to
retrieve those significant for the detection of malicious documents. Two
machine learning classifiers were i nvestigated and Random Forests classifier
gave the best accuracy and performance.
Experiments were performed to find the best combination of features and
Random Forests configurations to maximize performance of the detection
algorithm. After applying feature selection algorithm over the data set, d espite
the simplicity of our model, we achived over 95% prediction accuracy. The best
prediction was achived on PDF documents with 98.56% accuracy.

NECLASIFICAT

NECLASIFICAT
6 din 108

REZUMAT

Documentele sunt des folos ite pentru a lansa atacuri de către infract orii
cibernetici. Un document cu subiect i nteresant este trimis victimei și atunci câ nd
documentul este deschis, o vulnerabilitate particulară a aplicaț iei cu care fișierul
a fost vizualizat este exploatată pentru a executa cod maliț ios pe sistemul
victimei. Soluțiile anti- virus oferă o protecție relativ ridicată împotriva
amenintărilor malware, dar nu este perfectă .
În cadrul acestei lucrări ne propunem să implementăm un sistem automat
de detecț ie a documen telor cu caracter m alițios prin intermediul unui sandbox
open source. Scopul unui sandbox este de a deschide fișierele testate î ntr-un
mediu controlat pentru a observa comportamentul acestora. De obicei, un
sandbox urmărește să replice mediu l real de lucru . Prin deschiderea fiș ierului
suspect , într-un sandbox, ne asteptăm să învățăm mai multe despre activitățile
sale ș i, prin urmare, să determină m caracterul malițios al acestuia. Pentru
implementar ea sistemului automat de analiză am ales sandbox -ul open source
cuckoo.
Analiza unui fișier malițios necesită mult mai mult timp ș i este mult mai
costisitor decâ t crearea acestuia. Pentru a automatiza procesul de analiză am
dezvoltat o aplicație scrisă î n limbajul de programare Python. Prin intermediul
acestei aplicaț ii se pot trimite documente pentru analiza comportamentală prin
intermediul sandbox -ului cuckoo. Documentele pot fi de tipul PDF, WORD,
XLS, text sau imagini. La sfârșitul analizei, se generează un raport din care se
vor ext rage cele mai importan te caracteristici care determină caracter ul maliț ios
al documentului. Prin intermediul acestor caracteristici extrase se va antrena și
testa un model de machine learning care va fi capabil să clasifice documentele în
fișiere maliț ioase sau benigne. Pentru modelul de clasificare s -au comparat doi
algorimti dintre care a fost ales algoritmul Random Forests deoarece rezultatele
testelor au fost mai bune .
Având î n vedere simplitatea sistemului dezvoltat, după selectarea celor
mai relevante caracteristici, am obț inut o predic ție cu acurateț ea de peste 95 %.
Deoarece formatul PDF ( Portable Document Format) este unul din cele mai
populare formate de fiș iere pentru schimbul de documente, am reușit să adunăm
o colecție semnificativă de fișiere malițioase ș i benig ne ceea ce a dus la cea mai
bună predicț ie, dintre toate formatele analizate , cu o acuratețe de peste 98.56%

NECLASIFICAT

NECLASIFICAT
7 din 108

CUPRINS

1. Introducere ………………………………………………………………………………………………………. 11
1.1. Importanța temei alese ………………………………………………………………………………………….. 12
1.2. S copul și obiectivele lucrării ………………………………………………………………………………….. 12
1.3. Rezultatele obținute ……………………………………………………………………………………………… 13
1.4. Rezumatul lucrării pe capitole ……………………………………………………………………………….. 13
2. Caracterul malițios al documentelor ……………………………………………………………………. 14
2.1. Portable Document Format (PDF) …………………………………………………………………………. 14
2.1.1. Structura fișierului PDF …………………………………………………………………………………………………. 15
2.1.2. Obiecte ………………………………………………………………………………………………………………………. 15
2.1.3. Filtre ………………………………………………………………………………………………………………………….. 17
2.1.4. Utilizarea do cumentelor PDF malițioase …………………………………………………………………………… 19
2.1.5. Obfuscarea documentelor PDF ……………………………………………………………………………………….. 22
2.2. Fișiere Microsoft Office ………………………………………………………………………………………… 24
2.2.1. Structura fișierelor Microsoft Office ………………………………………………………………………………… 25
2.2.2. Tehnici de atac prin intermediul documentelor de tip Microsoft Office …………………………………… 27
2.3. Imagini JPEG ………………………………………………………………………………………………………. 31
2.3.1. Reprezent area unei imagini JPEG ……………………………………………………………………………………. 31
2.3.2. Steganografia în atacuri cibernetice contemporane ……………………………………………………………… 32
2.4. Documente Text ……………………………………………………………………………………………………. 36
2.4.1. Caracterul malițios al documentelor text …………………………………………………………………………… 36
2.4.2. Deghizarea extensiilor de fisiere cu exploitu -ul „Unitrix” …………………………………………………….. 37
3. Tipuri de analiza a documentelor ……………………………………………………………………….. 38
3.1. Diferite abordări pentru analiza malware ……………………………………………………………….. 38
3.1.1. Analiza statică de bază (Basic static analysis) …………………………………………………………………….. 38
3.1.2. Analiza comportamentală (Behavioural analysis) ……………………………………………………………….. 39
3.1.3. Analiza dinamică avansată (Advanced dynamic analysis) …………………………………………………….. 39
3.1.4. Analiza statică avansată (Advanced static analysis) …………………………………………………………….. 39
3.1.5. Analiza automată (Automatic analysi s) …………………………………………………………………………….. 40
3.1.6. Avantaje și dezavantaje ………………………………………………………………………………………………….. 40
3.1.7. Analiza Hibridă ……………………………………………………………………………………………………………. 41
3.2. Aplicațiile cele mai cunoscute utilizate în analiză …………………………………………………….. 41
3.2.1. Instrumente pentru analiza statică ……………………………………………………………………………………. 41
3.2.2. Instrumente pentru analiza dinamică ………………………………………………………………………………… 42
3.2.3. Instrumente pentru analiza automată ………………………………………………………………………………… 42
4. Machine learning …………………………………………………………………………………………….. 43
4.1. Tehnici de machine learning ………………………………………………………………………………….. 43
4.1.1. Învățare supervizată (Supervised learning) ………………………………………………………………………… 44
4.1.2. Învățare nesupervizată (Unsupervised learning) …………………………………………………………………. 44
4.1.3. Reinforcement learning …………………………………………………………………………………………………. 45
4.1.4. Rețele neuronale și învățarea profundă (Neural networks and deep learning) …………………………… 46
4.2. Importanța utilizării tehnicilor de machine learning în analiza datelor electronice ……… 47
4.3. Detalierea tehnicii alese pentru implementare …………………………………………………………. 47
4.3.1. Procesul de clasificare …………………………………………………………………………………………………… 47

NECLASIFICAT

NECLASIFICAT
8 din 108

5. Proiectarea și implementarea practică …………………………………………………………………. 58
5.1. Arhitectura sistemului …………………………………………………………………………………………… 58
5.2. Aplicațiile open source utilizate ……………………………………………………………………………… 60
5.3. Configurare Cuckoo Sandbox ……………………………………………………………………………….. 61
5.3.1. Arhitectura ………………………………………………………………………………………………………………….. 61
5.3.2. Configurarea Host -ului ………………………………………………………………………………………………….. 62
5.3.3. Configurare Internet pentru Analiză …………………………………………………………………………………. 64
5.3.4. Pregătirea Guest -ului …………………………………………………………………………………………………….. 65
5.3.5. Cerințe Cuckoo ……………………………………………………………………………………………………………. 66
5.3.6. Salva rea Guest -ului ………………………………………………………………………………………………………. 68
5.3.7. Configurarea Fișierelor din Cuckoo Host ………………………………………………………………………….. 68
5.4. Integrare Cuckoo în aplicație ………………………………………………………………………………… 69
5.5. Setul de date pentru antrenare/testare ……………………………………………………………………. 70
5.6. Extragerea caracteristicilor …………………………………………………………………………………… 71
5.7. Selectarea caracteristicilor …………………………………………………………………………………….. 73
5.8. Antrenarea modelului de clasificare ……………………………………………………………………….. 74
5.9. Introducerea modelului de clasificare în sistem ……………………………………………………….. 75
5.10. Prezentare aplicație propusă………………………………………………………………………………… 76
5.10.1. Fereastra principală …………………………………………………………………………………………………….. 76
5.10.2. Fereastra pentru analiza documentelor ……………………………………………………………………………. 77
5.10.3. Fereastra pentru vizualizarea detaliilor analizelor ……………………………………………………………… 78
6. Concluzii …………………………………………………………………………………………………………. 81
6.1. Rezultatele testărilor efectuate și interpretarea acestora …………………………………………… 81
6.2. Sinteza principalelor idei din lucrare și direcții pentru continuarea cercetării ……………. 87
7. Bibliografie ……………………………………………………………………………………………………… 88
8. Anexe ……………………………………………………………………………………………………………… 90
8.1. Anexa A ………………………………………………………………………………………………………………. 90
8.2. Anexa B ………………………………………………………………………………………………………………. 90
8.3. Anexa C ………………………………………………………………………………………………………………100
8.4. Anexa D ………………………………………………………………………………………………………………104
8.5. Anexa E ………………………………………………………………………………………………………………105

NECLASIFICAT

NECLASIFICAT
9 din 108

LISTĂ DE FIGURI

Figura 2.1.1 Structura unui document PDF ………………………………………………………………………………………… 15
Figura 2.1.2.1 Definirea unui obiect indirect ………………………………………………………………………………………. 17
Figura 2.1.2.2 Referirea unui obiect către alt obiect ……………………………………………………………………………. 17
Figura 2.1.3 Un obiect de tip stream înainte și după ce a fost codificat …………………………………………………… 18
Figura 2.1.5.9 Moduri diferite de a scrie o buclă care execută aceeași funcție ………………………………………….. 24
Figura 2.2.1.1 Structura fișierului docx ……………………………………………………………………………………………… 25
Figura 2.2.1.2 Structura fișierului xlsx ………………………………………………………………………………………………. 25
Figura 2.2.1.1 Conținut [Content_Types ].xml ……………………………………………………………………………………… 26
Figura 2.2.1.2.1 Fișierul .rels …………………………………………………………………………………………………………… 26
Figura 2.2.1.2.2 Exemplu conținut fișier .rels ……………………………………………………………………………………… 26
Figura 2.2.1.2.3 Fișier de relații pentru document.xml (WORD) …………………………………………………………….. 27
Figura 2.2.1.2.4 Fișier de relații pentru workbook.xml (XLS) ………………………………………………………………….. 27
Figura 2.3.1.1 Reprezentarea unei imagini ………………………………………………………………………………………… 31
Figura 2.3.1.2 Conversie RGB la YCbCr ……………………………………………………………………………………………… 32
Figura 2.3.2 Comparație între o imagine care conține un mesaj ascuns și o imagine care nu conține …………… 34
Figura 2.4.2.1 Caracterul Unicode U+202E ………………………………………………………………………………………… 37
Figura 2.4.2.2 Utilizarea exploit -ului „Unitrix” ……………………………………………………………………………………. 38
Figura 4 Ciclul de viață al algoritmului de detectare ……………………………………………………………………………. 43
Figura 4.3.1 Procesul de clasificare ………………………………………………………………………………………………….. 47
Figura 4.3.1.3.1 Calculul performanței pentru datele pozitive clasificate corect ……………………………………….. 50
Figura 4.3.1.3.2 Calculul performanței pentru datele negative clasificate corect ………………………………………. 50
Figura 4.3.1.3.3 Acuratețea clasificatorului ……………………………………………………………………………………….. 51
Figura 4.3.1.3.4 Matricea de confuzie ………………………………………………………………………………………………. 51
Figura 4.3.1.3.5 Curba ROC …………………………………………………………………………………………………………….. 52
Figura 4.3.1.6 Relația pentru calculul Golub -score ………………………………………………………………………………. 54
Figura 4.3.1.7.1 Arbore decizional …………………………………………………………………………………………………… 56
Figura 4.3.1.7.2 Bagging = B ootstraping + Agg regation ………………………………………………………………………. 57
Figura 5.1.1 Faza Operațională ……………………………………………………………………………………………………….. 58
Figura 5.1.2 Faza de antrenare/testare …………………………………………………………………………………………….. 59
Figura 5.3.1 Arhitectura Cuckoo Sandbox ………………………………………………………………………………………….. 61
Figura 5.3.2.2 Instalare Volatility …………………………………………………………………………………………………….. 63
Figura 5.3.2.5 Eroare cryptography …………………………………………………………………………………………………. 64
Figura 5.3.3.1 Interfața de tip “host -only” …………………………………………………………………………………………. 64
Figura 5.3.3.2 Configurare interfata vboxnet0 ……………………………………………………………………………………. 64
Figura 5.3.3.3 Adaugare reguli iptables ……………………………………………………………………………………………. 65
Figura 5.3.3.4 Instalare “iptables -persistent” …………………………………………………………………………………….. 65
Figura 5.3.4.1 Configurare Ip ………………………………………………………………………………………………………….. 66
Figura 5.3.5.2 Instalare Python Pillow ………………………………………………………………………………………………. 67
Figura 5.3.6.1 Creare snapshot cu starea inițială a sistemului de operare ……………………………………………….. 68
Figura 5.3.6.2 Inchidere mașină virtuală …………………………………………………………………………………………… 68
Figura 5.3.7 Fișiere de configurare Cuckoo ………………………………………………………………………………………… 68
Figura 5.3.7.1.1 Deschidere fișier configurare memory.conf …………………………………………………………………. 68
Figura 5.3.7.1.2 Configurare fișier memory.conf …………………………………………………………………………………. 69
Figura 5.4.1 Pornirea sandbox -ului Cuckoo ……………………………………………………………………………………….. 69

NECLASIFICAT

NECLASIFICAT
10 din 108

Figura 5.4.2 Cerere pentru a adăuga un document în lista de așteptare pentru analiza comportamentală …… 70
Figura 5.8.1 Citirea fișierului de caracteristici …………………………………………………………………………………….. 74
Figura 5.8.2 Exemplu fișier CSV de caracteristici …………………………………………………………………………………. 74
Figura 5.8.3 Prelucrare date citite ……………………………………………………………………………………………………. 74
Figura 5.8.4 Împărțirea setului de date …………………………………………………………………………………………….. 75
Figura 5.8.5 Crearea clasificatorului RF …………………………………………………………………………………………….. 75
Figura 5.8.6 Antrenarea modelului ………………………………………………………………………………………………….. 75
Figura 5.8.7 T estarea modelului ………………………………………………………………………………………………………. 75
Figura 5.8.8 Salvarea modelului antrenat …………………………………………………………………………………………. 75
Figura 5.9.1 Citirea modelului antrenat ……………………………………………………………………………………………. 76
Figura 5.9.2 Clasificarea unui nou document ……………………………………………………………………………………… 76
Figura 5.9.3 Introducere clasificator în aplicația principală …………………………………………………………………… 76
Figu ra 5.10.1 Pagina principală a aplicației propuse …………………………………………………………………………… 77
Figura 5.10.2 Fereastra pentru analiza documentelor …………………………………………………………………………. 78
Figura 5.10.3.1 Fereastra pentru vizualizarea analizelor efectuate ………………………………………………………… 79
Figura 5.10.3.2 Fereastra corespunzătoare elementului selectat …………………………………………………………… 79
Figura 5.10.3.3 Fereastra pentru afișarea caracteristicilor statice ………………………………………………………….. 80
Figura 5.10.3.4 Fereastra pentru afișarea caracteristicilor comportamentale ………………………………………….. 80
Figura 5.10.3.5 Vizualizare captura de ecran din timpul analizei comportamentale ………………………………….. 81
Figura 6.1.1 Exemplu fișie r CSV ……………………………………………………………………………………………………….. 81
Figura 6.1.2 Curba ROC pentru RF si SVM in urma clasificarii documentelor PDF ………………………………………. 82
Figura 6.1.3 Curba ROC pentru RF si SVM in urma clasificarii documentelor Microsoft Office ……………………… 82
Figura 6.1.4 Curba ROC pentru RF si SVM in urma clasificarii imaginil or …………………………………………………. 83
Figura 6.1.5 Prediction Accuracy ……………………………………………………………………………………………………… 83
Figura 6.1.6 False Positives …………………………………………………………………………………………………………….. 84
Figura 6.1.7 False Negatives …………………………………………………………………………………………………………… 84
Figura 6.1.8 Prediction Accuracy after feature selection ………………………………………………………………………. 85
Figura 6.1.9 Importanța Caracteristicilor pentru imagini ……………………………………………………………………… 85
Figura 6.1.10 Importanța Caracteristicilor pentru documentele PDF ………………………………………………………. 86
Figura 6.1.11 Importanța Caracteristicilor pentru documentele Microsoft Office ……………………………………… 86

LISTĂ DE TABELE

T abel 2.1 Filtre PDF standard pentru stream -uri …………………………………………………………………………………. 18
T abel 5.2 Lista cu toate instrumentele open -source utilizate ………………………………………………………………….. 60
T abel 5.5 Sursele documentelor din colecția noastră ……………………………………………………………………………. 71
T abel 5.6.1 Caracteristici comportamentale extrase …………………………………………………………………………….. 71
T abel 5.6.2 Caracteristici statice extrase din documentele PDF ………………………………………………………………. 72

NECLASIFICAT

NECLASIFICAT
11 din 108

1. Introducere

În ultimii ani, atacurile cibernetice care vizează organizaț iile au crescut,
acestea includ, de obicei, activități dăună toare, cum ar fi furtul de info rmații
confidenț iale, spionarea, monitorizarea și perturbarea acț iunilor acesteia.
Marea majoritate a org anizațiilor se bazează foarte mult pe e -mail pentru
comunicarea internă și externă. Astfel, e-mail-ul a devenit o platformă foarte
atractivă pentru a iniția atacuri cibernetice împotriva organizaț iilor. Atacatorii
folosesc deseori social engineering pentru a încuraja destinatarii să acceseze un
link care trimite utilizatorul că tre un site web rău intenționat sau deschide un
atașament maliț ios. Fișierele non -executabile, cum ar fi documentele PDF,
WORD, XLS , txt sau imagin i, ataș ate la un e-mail, constituie o componentă a
multor atacuri cibernetice recente.
Acest tip de atac a crescut î n popularitate, din cauza procesului de filtrare
a serverelor de e -mail, fișierele executabile ataș ate la e- mailuri sunt filtrare de
majoritatea serverelor de e- mail din cauza riscului pe care îl reprezintă, în timp
ce ataș amentele no n-executabile nu sunt filtrate ș i sunt considerate sigure de
majoritatea utilizatorilor. Fișierele non -executabile sunt s crise î ntr-un format
care poate fi citit numai de un program care este proiectat special pentru acest
scop, de obicei, nu pot fi executat e direct. Din păcate, fiș ierele non -executabile
sunt la fel de periculoase ca fiș ierele executabile, deoarece aplicaț iile cu care
acestea sunt vizualizate pot conține vulnerabilități care, atunci câ nd sunt
exploatate, ar putea permite unui atacator să efectueze acțiuni rău intenț ionate
asupra computerului vi ctimei. Atacatorii profită de faptul că majoritatea
angajaților din cadrul organizațiilor nu iau măsuri de precauție atunci câ nd
primesc și deschid aceste fiș iere.
Pentru a decide dacă un document este maliț ios sau benign se poate folosi
fie analiza statică, fie analiza dinamică. Tehnicile de ana liză statică nu deschid
documentul pentru vizualizare , examinează doar structura fișierului și alte
proprietăț i ale datelor. Tehnicile de analiză dinamică, pe de altă parte,
vizualizează documentul pentru a observa comportamentul acestuia. Unele
sisteme de detectare a fișierelor malițioase aplică numai tehnici statice s au
dinamice, iar unele le aplică pe ambele. În timp ce tehnicile de analiză dinamică
a documentelor nu intenționează să înlocuiască tehnicile de analiză statică,
recentele atacuri malware ș i utilizarea tehnicilor so fisticate de evaziune pentru a
evita detectarea au demonstrat nevoia urgent ă de analiză dinamică și limită rile
analizei statice.
În încercarea de a preveni sau de a atenua aceste tipuri de atacuri ,
deoarece sunt concepute pentru a evita detectarea anti -virusului baza t pe
semnă turi, specialiștii în apărare cibernetică din organizaț ii folosesc tehnologii
sandbox pentru a identifica noile tipuri de malware. Prin sandbox î ntelegem o

NECLASIFICAT

NECLASIFICAT
12 din 108

abordare tradițională în care putem executa fișierele într -un mediu izolat,
excluzând orice daune fizice ale resurselor. În timp ce fișierele sunt rulate î ntr-
un sandbox, acest sistem poate evidenț ia activitătile malițioase, cum ar fi
modificări ale regiștrilor, ștergerea sau încărcarea de fișiere î ntr-un sistem.
Putem observa activi tatea dăunătoare a fișierului malițios pentru a înțelege î n
profu nzime comportamentul acestuia fără a deteriora sistemul fizic.
Există o convingere generală între experții în domeniul securității
cibernetice că instrumentele ș i sistemele anti -malware, alimentate de machine
learning, vor fi solutia atacurilor malware moderne.

1.1. Importanța temei alese

De aproape atâta timp cât oamenii au folosit computere și reț ele,
malware -ul a existat încercâ nd să compromită și să deterioreze aceste sisteme.
La început, virușii se ră spândeau prin dischete infectate și breș e de
securitate în aplicațiile server. Odată cu dezvoltarea internetului ș i a e-mail- ului,
fișierele executabile, răspândite în principal prin e -mail și prin fișiere încă rcate
pe site -uri web, au devenit o modalitate obișnuită de a înșela utilizatorii să
instaleze malware pe propriile siteme. Aceste tipuri de atacuri au fost ușor de
evitat și de oprit de că tre utilizatorii din departamentele IT. Există, de obic ei,
foarte puț ine motive pent ru care cineva ar trimite un fiș ier executabil prin e –
mail. Utilizatorii ș i intreprinderile au blocat sau au controla t capacitatea de a
transmite fiș ierele executabile prin e -mail, permitând totuși tipurile de fiș iere
considera te sigure, cum ar fi d ocum entel e PDF , WORD, XLS, tex t si im agini.
Dar, în timp, documentele și fiș ierele de acest tip s -au schi mbat. Ele nu mai sunt
simple fișiere statice cu un potenț ial mic de infectare a sistemului.
Produselor precum Microsoft Word si Adobe PDF l e-au fost adăugate
macro -uri și capabilităț i de scripting care permit acestor documente să
functioneze în același mod ca ș i prog ramele executabile, avâ nd capacitatea de a
rula procese ș i de a instala continut maliț ios pe sistemele utilizatorilor .
Deoarece, astăzi, documentele reprezintă una dintre cele mai comune
metode de propagare a co nținutului maliț ios pe Internet, am ales implementarea
unei aplicații care este capabilă, prin interm ediul unui sandbox open source ș i a
unei tehnici de machin e learning, să clasifice documentele ca benigne sau
maliț ioase .

1.2. Scopul și obiectivele lucrării

Scopul acestui proi ect este de a dezvolta o aplicaț ie care să automatizeze
procesul de analiz ă și clasificare a documentelor care pot avea conținut malițios
utilizâ nd sandbox -ul Cuckoo. Acest sandbox va fi utilizat pentru extragerea

NECLASIFICAT

NECLASIFICAT
13 din 108

caracteristicilor comportamentale al e documentelor cu caracter maliț ios, care
vor fi utilizate ca intrare î n algoritmii de machine lea rning.
Scopul final este de a determina cea mai bună metoda de r eprezentare a
caracteristicilor, modul î n care trebuie extrase caracteris ticile și modul de
selecț ie al caracteristicilor cele mai relevante pentru modelul utilizat precum și
algoritmul cel m ai precis care poate distinge documentele maliț ioase de cele
benigne cu cea mai mică rată de eroare.
Deoarece pentru clasificarea documentelor de tip WORD, XLS, imagini si
text se vor extrage, in mare parte, numai caracteristici comportamentale
rezultate din analiza efectuată prin intermediul sandbox -ului C uckoo, printre
obiectivele lucrării se enumera și scoaterea in evidentă a structurii ș i
caracteristicilor statice care pot determina caracterul maliț ios al documentelor de
tip PDF, WORD, XLS, imagini si text.
În plus, deoarece documentele de tip PDF sunt cel e mai folosite pentru a
lansa atacuri de către infractorii cibernetici, ne propunem să utiliză m un
instrument de parsare a conținutului fiș ierelor PDF pentru a extrage
caracteristici statice, pe langă cele dinamice rezultate din analiza efect uată de
către sandbox -ul C uckoo pentru a obț ine o precizie mai bună î n clasificarea
documentelor de acest tip.

1.3. Rezultatele obținute

Prin rezultatele obținute s -a confirmat faptul că analiza comportamentală
bazată pe sisteme de tip sandbox va domina noua ge neraț ie de sisteme anti-
malware. S-a dovedit faptul că analiza comportamentală este consumatoare de
timp ș i resurse, deoarece documentele sunt accesate ș i vizualizate intr -un mediu
izolat.
Totodată , am combinat și cele doua tipuri de analiză, statică și dinamică.
Rezultatele cele mai bune au fost date de către acest tip de analiză hibridă
deoarece pentru fiș ierele PDF am extras caracteristici dinamice rezultate din
analiza efectuată de sandbo x-ul cuckoo dar ș i caracterisitici statice rezultate din
parsarea structurii documentului.

1.4. Rezumatul lucrării pe capitole

Lucrarea este structurată după cum urmează. În Capitolul 2 sunt
prezentate informaț ii despre documentele de tip PDF, WORD, XLS, imagini ș i
text care pot deter mina caracterul maliț ios al acestora. Capitolul 3 oferă
informaț ii cu privire la tipurile de analiză a documentelor, analiza statică,
analiza dinamică și analiza automată cu ajutorul sistemelor de tip sandbox .
Totodată în aces t capit ol sunt evidențiate aplicaț iile cele mai cunoscute utilizate

NECLASIFICAT

NECLASIFICAT
14 din 108

pentru fiecare tip de anali ză. În cadrul Capitolului 4 sunt prezentate tehnicile de
machine learning care se utilizează î n analiza datelor electronice și clasificarea
acestora. Se va prezenta importanța utilizării acestora în analiza documentelor .
Tot î n acest capi tol se va detalia tehnica aleasă pentru implementare. Capitolul 5
este destinat prezentării arhite cturii sistemului de analiză , a aplicaț iilor open
source utilizate și descrierii detaliate a implementării , a tehnicii de machine
learning descrise în prezentarea teoretică și introducerea acesteia î n sistemul
utilizat. Lucrarea se încheie cu Capitolul 6, în care sunt expuse rezultatele
testărilor efectuate ș i interpretarea acestora, principalele idei din lucrare , fiind
propuse și idei pentru continuarea cercetării.
2. Caracterul maliț ios al documentelor

Răspâ ndirea documentelor malițioase nu este nouă, dar luând în
considerare modul î n care autorii malware utilizează diferite tehnici a d evenit o
provocare pentru analiș tii malware pentru a identifica modelele, a extrage și a
înțelege codul maliț ios. În acest capitol, vom afla despre cele mai des utilizate
tipuri de documente prin care este răspândit conținutul maliț ios, adică PDF,
WORD, XLS, text ș i imagini. Vom vedea, de asemenea, structura acestor
documente care trebuie înțeleasă mai întâi p e n t r u a a fla toate proprietăț ile
utilizate de autorii malware pentru a -și incorpora codul.

2.1. Portable Document Format (PDF)

Portable Document Format (PDF) a fost creat de Adobe Systems î n 1993
ca un standard deschis pentru reprezentarea documentelor inde pendente de
software, hardware ș i sistemul de operare. În 2008, formatul PDF a fost lansat
oficial ca un standard deschis de c ătre Organizația Internațională pentru
standardizare ca ISO 32000 -1. [1]
De la lansarea sa, PDF a devenit standardul de facto pentru schimbul de
documente. O mare p arte din succesul său constă în flexibilitatea pe care o oferă
formatul. În plus, față de co nținutul text și imagini, formatul acceptă , de
asemenea, incorporarea codului Javascript si Flash, are capacitatea de a deschide
resurse externe din sistemul local sau din Internet [2]. Aceste caracteristici sunt,
de asemenea, caracteristicile folosite de atacatori pentru a exploata
vulnerabilitățile în aplicaț iile de vizualizare a documentelor PDF.

NECLASIFICAT

NECLASIFICAT
15 din 108

2.1.1. Structura fiș ierului PDF

Un fișier PDF cuprinde patru părț i principale: antetul (header) , corpul
principal, tabela de referință (cross -reference table) și trailer -ul. [1]

Figura 2.1.1 Structura unui document PDF [3]

Antetul (header) trebuie să fie întotdeauna prima linie unică a fiș ierului
PDF. Ar trebui să fie de forma %PDF -M.N, unde M.N indică versiunea
standardului PDF utilizat la producerea documentului. Cea mai recentă versiune
a fost lansată î n 2017 si este 2.0 [4]
Corpul principal (main body) este locul în care găsim conț inutul
documentului PDF reprezentat ca obiecte sau fluxuri de obiecte. Obiectele vo r fi
discutate în capitolul 2.1.2.
Tabela de referință (cross -reference table) , denumită ș i tabelul xr ef,
este un tabel care specifică offset -ul oct eților fiecărui obiect specificat î n corpul
principal. Tabelul xref este utilizat pentru accesul direct la un obiect specific
făra căutare.
Trailer -ul oferă locația tabelei de referință ș i anumitor obiecte speciale
din corpul fiș ierului, precum obiectul root/starting (/root). Un marcator fixat,de
o singură linie, de forma %%EOF marchează sfârșitul trailer -ului ș i, astfel, a
documentului. Trailer -u l a r t r e b u i s ă se găsească direct după tabelul xref. Un
vizualizator PDF care respectă standardul ar trebui să citească fișierul de la
capăt, iar trailer -ul să servească drept referință pentru localizarea tabelului xref.

2.1.2. Obiecte

Partea principală a unui fișier PDF constă î n obiecte. Există opt tipur i
diferite de obiecte definite în standardul PDF, care vor fi prezentate pe scurt.
• Valorile booleene – poate fi Adevă rat sau Fals
• Obiecte numerice – PDF oferă conceptel e bine cunoscute ale numerelor
întregi ș i ale numerelor reale, exemplu: 31, – 15, 41.3.

NECLASIFICAT

NECLASIFICAT
16 din 108

• Șiruri de caractere (Strings) – Un obiect de tipul șir de caractere poate fi
în formă literală sau hexazecimală. Șirurile de caractere liter ale sunt
închise prin paranteză , de exemplu (Hello World!). Șirurile de caractere
hexazecimale sunt închise î n paranteze unghiulare, de exemplu <
84653c 3c6f20573 f716c642 20d0c >. String -ul este limitat la 32kB într -un
mediu pe 32 de biț i.
• Nume – Numele sunt folosite pentru a numi alte obiecte. Un nume este
definit prin plasarea unui slash în fața secvenț ei de caractere care
reprezintă numele, de exemplu /a_name. Numele trebuie să fie unic.
• Arrays – Sunt secvenț e unidimensionale de alte obiecte. Această matrice
unidimensională poate consta din orice tipuri de obiecte. Ele su nt închise
în paranteze păt r a t e , e x e m p l u [ ( H e l l o W o r l d ! ) 4 2 T r u e ] . Acestea pot
conține ș i alte matrice .
• Dicționare – Dicționarele sunt tabele ce conț in perechi de tipul cheie –
valoare. Cheile sunt nume ș i valorile pot fi orice fel de obiect. Obiectele
de tip dicționar reprezintă principalele elemente ale unui document PDF.
Ele sunt utilizate în mod obișnuit pentr u a colecta și a lega î mpreuna
atributele unui obiect complex , cum ar fi un font sau o pagină a
documentului.
• Streams – Un obiect de tip stream, ca un șir de caractere, o secvență de
octeț i. Obiectele de tipul stream totuși nu sunt limitate în dimensiune.
Obiectele cu o dimensiune mare de date sunt reprezentate ca stream -uri,
de exemplu: imagini, scripturi ș i pagini. Datele unui obi ect de tip stream
sunt plasate între cuvântul cheie de start „stream” și cuvântul cheie de sfârș it „endstream”. Toate aceste ob iecte trebuie să aibă la î nceput
lungimea (Length) , care indică dimensiunea stream -ului în octeț i. De
asemenea, stream -urile pot fi supuse unor filtre care comprimă sau
codifică datele din interiorul lor. Mai multe despre filtre î n capitolul 2.3.
• Obiectul nul (null object) – Obiectul nul este pur ș i simplu NULL .
Acesta este returnat atunci câ nd se face referire la obiecte inexistente sau
la intrările de dicț ionare goale.

Obiectele pot fi etichetate cu un identi ficator de obiect unic, astfel încât
acestea să poată fi menț ionate de un alt obiect. Un obiect etichetat se numeș te
obiect indirect. Identificatorul de obiect constă din două părți: numărul
obiectului și numă rul de generaț ie.
Numă rul obiectului este un număr î ntreg pozitiv atribuit obiectului.
Numă rul de generaț ie este un numă r intre g pozitiv utilizat numai pentru a
arăta numărul de revizie al obiectului. Într-un fi șier PDF nou creat, toate
numerele de generație vor fi setate la zero și incrementat e cu unu de fiecare dată
când se face o revizuire a obiectului.

NECLASIFICAT

NECLASIFICAT
17 din 108

Împreună, numărul obiectului și numărul de generație identifică î n mod
unic un obiect indirect. Definirea unui obiect indirect se face astfel:

Figura 2.1.2.1 Definirea unui obiect indirect [3]

Acest obiect indirect poate fi acum referit la orice alt obiect folosind
referinț a 7 0 R.
Ca în exemplul simplificat prezentat mai jos unde obiectul 4 0, care este o
pagină, se referă la conț inutul din obiectul 7 0.

Figura 2.1.2.2 Referirea unui obiect către alt obiect [3]

2.1.3. Filtre
După cum s -a menționat în secț iunea de mai sus, stream -urile pot fi
supuse unor filtre. Filtrele au sc opul de a comprima datele, adică de a reduce
dimensiunea acestora sau de a codifica datele î ntr-un format portabi l. Utiliz area
unui filtru trebuie inclusă în dicț ionarul stream -urilor. Unui stream i se pot
aplica mai multe filtre cascadate, exemplul de mai jos prezintă un obiect de tip
stream, c are conține text în clar, înainte și după ce a fost codificat utilizând
ambele filtre /FlateDecode ș i /AsciiToHexDecode. Un cititor de documente PDF

NECLASIFICAT

NECLASIFICAT
18 din 108

va aplica filtrele precum am specificat, de la stanga la dreapta, pentru a prelua
textul original.

Figu ra 2.1.3 Un obiect de tip stream înainte și după ce a fost codificat
O multitudine de filtre f ac parte din standardul PDF, atât pentru
comprimare, cât ș i pentru codare. Unele filtre au scopuri speciale, de exemplu
unele sunt create special pentru imagini . Printre filtrele care efectuează
comprimarea există atât filtre fără pierderi, cât și filtre cu pierderi, adică atunci când se utilizează filtrele cu pierderi, din cauza comp resiei, se pierde din calitate
și o parte din date.
Tabelul 2.1 oferă o imagine de ansamblu a filtrelor standard disponibile
pentru documentele PDF, unde primele cinci sunt cele mai relevante în
contextul acestei lucrări.

Nume Descriere
ASCIIHexDecode Decodează datele codificate într -o reprezentare hexazecimală ASCII,
reproducâ nd datele binare originale.
ASCII85Decode Decodează datele codificate î ntr-o repre zentare ASCII base -85,
reproducâ nd datele binare originale.
LZWDecode Decomprimă datele codificate folos ind metoda de compresie
adaptivă LZW (Lempel -Ziv-Welch), care reproduce textul original
sau datele binare.
FlateDecode Decomprimă datele codificate utilizâ nd metoda de c ompresie
zlib/deflate, reproducâ nd textul original sau datele binare.
RunLengthDecode Decomprimă datele codificate ut ilizând un algoritm bazat pe octeț i
numit run -length, care reproduce textul original sau datele binare ( de
obicei datele monocrome din imagine) .
CCITTFaxDecode Decomprimă datele codificate utilizâ nd stand ardul facsimile CCITT,
reproducând datele originale ( de obicei datele de imagine

NECLASIFICAT

NECLASIFICAT
19 din 108

monochrome la 1 bit pe r pixel).
JBIG2Decode Decomprimă datele codificate utilizând standardul JBIG2,
reproducâ nd datele de imagine originale monocrome (1 bit per pixel) .
DCTDecode Decomprimă datele codificate utiliz ând o tehnică DCT (transformare
discretă a cosinusulu i) bazată pe standardul JPEG, reproducând
datele din imagine care aproximează datele originale.
JPXDecode Decomprimă datele codificate utilizâ nd standardul JPEG2000,
reproducâ nd datele de imagine origin ale.
Crypt Decriptează datele criptate de că tre un mani pulator de securitate,
reproducând datele iniț iale.
Tabel 2.1 Filtre PDF standard pentru stream -uri [3]

2.1.4. Utilizarea documentelor PDF maliț ioase

După cum s -a menț ionat deja, formatul PDF este standardul de facto
pentru schimbul de documente. Practic fiecare PC (Personal Computer) are un
cititor PDF instalat. Deoarece PDF -ul est e un format extrem de puternic ș i
flexibil, este aproape un vis devenit realitate pentru un atacator.
În cele ce urmează, se vor prezenta cele mai comune metode de distribuire
a PDF- urilor maliț ioase. [3]

2.1.4.1. Distribuirea PDF -urilor maliț ioase

Potrivit [5], există trei canale principale pentru distribuirea documentelor
PDF malițioase . Acestea sunt mesageria în masă (mass mailing ), drive -by
downloads și atacurile direcț ionate (targeted attacks). Toate aceste metode sunt
atacuri de tip client -side.
Mesageria în masă este potrivită pentru a distribui documente PDF
dăună toare, deoarece majoritatea oamenilor sunt obișnuiț i să primească
atașamente PDF î n e-mailuri. Trucuri de social engineering sunt utiliz ate pentru
a atrage receptorul î n deschiderea doc umentului ataș at. Deseori, conț inutul unui
astfel de e -mail arată o part e dintr -un eveniment recent de știri, cu promisiunea
întregii povestiri ș i a detaliilor interesante din interiorul documentului PDF
atașat. PDF- urile malițioase trimise în astfel de ca mpanii vor conț ine adesea
executabile incorporate, payload- uri, care sunt extrase și executate atunci când
PDF-ul este deschi s într-un cititor vulnerabil.
Datorită caracteristicilor in corporate de deschidere automată a
documentelor PDF î n majoritatea brow serelor, descărc ările de tip drive -by sunt,
de asemenea, un canal popular pent ru distribuirea PDF -urilor maliț ioase. Un
utilizator poate nici măcar nu observă că un document P DF a fost deschis pe
sistemul său câ nd cade victima unui malware de tip drive -by download. Spre
deosebire de documentele PD F expediate prin mail, un PDF găzduit pe o pagină

NECLASIFICAT

NECLASIFICAT
20 din 108

web va fi de obicei de dimensiune mică și nu va conț ine niciun executabil
incorporat. În schimb, ele conț in mici fragmente de cod care, după o exploatare
reușită , vor descărca ș i executa executabile rău intenț ionate de pe internet.
Atacurile țintă sunt totuși cele în care documentele PDF malițioase își
îndeplinesc adevăratul potenț ial. Un document PDF vizat, vizează o persoană
sau o organizație ș i este spec ial creat pentru a avea succes împotriva acestei
destinaț ii. Șansa de succes este stimulată de cercetarea cu atenție a țintei ș i
plani ficarea atacului. Prin colectarea de informaț ii privind ținta, conț inutul de
social engineering a l atacului poate fi făcut în așa fel încât persoana vizată să
aibă încredere î n documentul PDF primit. De aseme nea, exploatarea poate fi
aleasă în așa fel încât să aibă o mare probabilitate de succes asupra sistemului
țintă.

2.1.4.2. Implementarea exploit -urilor

Noi vulnerabilități în cititoarele PDF și în pluginurile ș i bibliotecile
asociate apar tot timpul , iar pentru toate vulnerabilităț ile noi apare un exploit.
Diferite tipuri d e exploit -uri pot fi utilizate înt r-un document PDF maliț ios, iar
un singur PDF poate conț ine mai multe exploit- uri grupate împreună . Conform
[5], exploit -urile PDF sunt grupate în două clase distincte: exploit -uri bazate pe
cod JavaScrip t și exploit -uri care nu conț in cod JavaScript.
Exploit -urile bazate pe cod JavaScript sunt posibile prin intermediul
suportului JavaScript din caietul de sarcini PDF. Atacatorii știu să aprecieze
puterea unui limbaj de scripting ca JavaScript. JavaScript este folosit pentru a
exploata vulnerablilităț ile din API -ul PDF JavaScript și pentru a umple memoria
aplicaț iilor de vizualizare a documentelor PDF cu cod malițios, folosind o
tehnică numită heap spray. Această tehnică de heap spray pune o secvență de
octeți dorită într -o locație predeterminată î n memoria unui pr oces țintă prin
alocarea blocurilor î n memoria heap a procesului și umplerea octeț ilor din aceste
blocuri cu valorile dorite. O exploatare compl etă constă adesea î n codul care,
pentru î nceput, injectează shellcode î n memoria cititorului de documente PDF
pentru ca apoi să apeleze o funcție vulnerabilă. Acest lucru poate duce la
executarea shellcode -ului. Potrivit [5], ma joritatea documentelor PDF m alițioase
utilizează cod JavaScript într -o formă sau alta.
Exploit -urile care nu au la bază cod JavaScript sunt mult mai rare decât
exploit -urile care au la bază cod JavaScript. O alternativă la Jav aScript este
utilizarea capacităț ii documentelor PDF pentru a incorpora conț inut Flash. Un
astfel de conț inut poate fi folosit pentru a exploata vulnerabilitățile în motorul
Flash sau pentru a pune shellcode în heap -ul cititorului de fiș iere PDF.
În plus față de aceste vulnerabilităț i specifice, formatul PDF are multe
caracteristici care îi pot ajuta pe atacatori să creeze un document malițios fără a

NECLASIFICAT

NECLASIFICAT
21 din 108

folosi nici o vulne rablilitate în sine. Caracteristicile includ funcț ionalitatea de a
deschide alte documente, de a deschide hyperlink- uri, de a modifica ierarhia
documentelor, de a accesa resurse î n afara documentului activ, de a executa
aplicații, de a deschide fiș iere, de a imprima documente , de a accesa resurse la
distanță ș i de a importa date de la utilizatori. Va urma o detaliere mai profundă
asupra u nora dintre aceste caracteristici:
• OpenAction – funcț ia OpenAction permite creatorului unui document
PDF să definească acțiunile care se declanșează atunci când documentul
este deschis. Funcția nu face multe de una singură, dar atunci când funcț ii
precum Launch sa u ActionClass sunt date ca intrări lucrurile pot deveni
urâte. Funcția este folosită pentru a rula exploit -uri de îndată ce se
deschide document ul PDF, oferind victimei nicio șansă să o oprească .
• AA – Funcția AdditionalAction funcționează în mod s imilar cu funcț ia
OpenAction. Cu toate acestea, în loc să declanșeze acț iuni la deschiderea
documentului, aceasta se decla nșează la acț iuni specifice setate de
creatorul PDF -ului. Astfel de acțiuni includ declanșarea atunci când o
anumită pagină este desch isă sau închisă, atunci câ nd se face click pe
anumite zone, atunci câ nd mous e-ul este peste anumite zone, când se
imprimă și așa mai departe.
• Action class – clasa Action conține mai multe funcții care pot fi puse în
interiorul unei funcț ii OpenAction sau AdditionalAction . Există funcții
din această clasă care permit executarea fiș ierelor, activarea de hyperlink-
uri, trimitere a de date ș i multe altele. Toate aceste funcții pot ajuta
atacatorul să creeze un PDF maliț ios activ. Astăzi, aceste amenințări sunt
atenuate de majoritatea ci titoarelor de documente PDF, arătând victimei o
fereastră de confirmare ori de câte ori o acț iune este declanșată. Cu toate
acestea, prin social engineering și conștientizarea limitată a publicului
larg, această amenințare este totuși o problemă .
 Launch – este o funcț ie din clasa Action . Aceasta permite
executarea oricărui fișier în sistemul țintă , cu argumente
opționale.
 Înainte de implementarea ferestrelor de confirmare î n
cititoarele de documente PDF , aceasta a fost cea mai critică
vulnerabilitate din PDF.
 SubmitForm – este utilizat în mod normal pentru
formularele electronice. Aceasta permite creato rului de
fișiere PDF să trimită date din formulare către o adresă URL
specificată. Aceasta oferă un canal de date excelent pentru un
atacator pentru a prelua date de la gazda țintă.
 ImportData – permite unui document PDF importul de date
în formulare dint r-un fiș ier extern. Aces t lucru permite unui

NECLASIFICAT

NECLASIFICAT
22 din 108

atacator să fure informaț ii din calculatorul victimei. Folosită
împreună cu funcția SubmitForm oferă toate funcționalităț ile
necesare pentru a construi un spyware PDF.

2.1.5. Obfuscarea documentelor PDF

Atacatorii folosesc mai mu lte metode pentru a ascunde conținutul maliț ios
al unui document PDF. Astfe l de metode sunt posibile datorită naturii puternice
și flexibile a formatului PDF. În special codul JavaScript găsit adesea într -un
document PDF maliț ios are o m ulțime de metode de obfuscare.
Obfuscația are rolul de a îngreuna î ncercarea specialistului de a analiza
conținutul malițios ș i, de asemenea, de a evita detectarea prin sisteme de
detectare a intruziunilor prin semnături sau prin soluț ii anti -virus. [3]

2.1.5.1. Distribuirea codului maliț ios prin obiecte multiple

Ca și î n orice l imbaj de programare, codul maliț ios al unui document PDF
poate fi distribuit printre mai multe obiecte. Codul d istribuit este realizat astfel
încât în timpul execuției să se reasambleze într -un cod complet care să efectueze
acțiunile dorite [5]. Această tehnică poate fi folosită atât prin valorificarea
abilităț ii de a face referire la alte obiecte indirecte dintr -un PDF, fie prin
utilizarea unor metode personalizate de răspândire a codului JavaScript
incorporat într-un document. Răspâ ndirea codul ui pe mai multe obiecte va face
munca unui analist mult mai grea ș i va e limina IDS -urile bazate pe semnături ș i
aplicaț iile antivirus.

2.1.5.2. Aplicarea filtrelor
Prin aplicarea filtrelor, autorul poate codifica ș i comprima stream- ul unui
document PDF. Atacatorii pot folosi această caracteristică pentru a evita
detectarea de către software -ul de securitate. Dacă software- ul nu suportă filtrele
folosite, niciodată nu va vedea codul rău intenț ionat. Aplicarea filtrelor nu va
evita un analist u man speciali zat, dar cu siguranță va face munca acestuia mult
mai dificilă .

2.1.5.3. Randomizarea spaț iilor albe

Deoarece JavaScript ignoră spaț iile albe la run -time, este posibilă
inserarea oricărei valori arbitrare de caractere albe [6]. Deși acest lucru nu va
păcăli analistul uman, mecanismul de detectare bazat pe semnături poate fi ușor

NECLASIFICAT

NECLASIFICAT
23 din 108

înșelat. Orice mecan ism de detectare care se bazează pe suma hash a codului
JavaScript va fi, de asemenea, păcă lit, deoarece aceasta se va schimba atunci
când spaț iile albe sunt inser ate.

2.1.5.4. Randomizarea comentariilor

Comentariile sunt, de asemenea, ignorate de parser ul JavaScript la
momentul execuț iei. Acest lucru înseamnă că un atacator poate introduce sau
edita comentarii în codul sursă pentru a modifica suma de hash. Cu toate
acestea, acest lucru va afecta numai mecanismele de detectare bazate pe sume
hash. Metoda nu are nici un efect asupra analistului uman.

2.1.5.5. Randomizarea numelor de variabile

Deoarece variabilelor li se poate da aproape orice num e, este posibil ca
atacatorul să schimbe numele variabilelor. Acest lucru poate înș ela mecanismele
de detectare bazate pe semnături care caută nume specifice de variabile, dar va
avea un efect redus asupra analistului uman.

2.1.5.6. Obfuscarea ș irurilor de caractere

Scopul acestei obfuscări este de a schimba șirurile de caractere, astfel
încât acestea să pară lipsite de sens și greu de citit de către analistul uman. Acest
lucru se poate realiza î n mai multe moduri. Atacatorul poate împărț i string -urile
în mai multe substring -uri, c are sunt concatenate la run -time. De asemenea,
șirurile de caractere pot fi codate folosind scheme cum ar f i hexazecimal,
unicode, base64 și aș a mai departe. În cele din urmă , atacatorul poate obfusca
string -ul folosind o func ție arbitrară pe acesta, cum ar fi funcț ia XOR. O funcț ie
de deobfuscare va fi apoi executată la run -time, dezvăluind adevaratul șir de
caractere î nainte de a fi folosit. Această metodă are un efect enorm asupra
analistului uman, care va trebui să petreacă mult timp descoperind adevăratul
conținut al string -ului. Met oda este, de asemenea, eficientă pentru a ascunde, de
exemplu, shellc ode de IDS -urile bazate pe semnături. [3]

2.1.5.7. Obfuscarea numelor de funcț ii

Această metodă este aplicată pentru a ascunde util izarea funcț iilor
stand ard, cum ar fi unescape() ș i eval(). Pointerii către aceste funcț ii vor folosi
nume arbitrare, ceea ce va face munca u nui specialist mult mai dificilă ș i va
ocoli mecanism ele de detectare bazate pe semnături care caută funcț ii specifice.

NECLASIFICAT

NECLASIFICAT
24 din 108

2.1.5.8. Obfuscarea numerelor î ntregi

Obfuscarea numerelor întregi vizează reprezentarea numerelor î n mai
multe moduri diferite. De exemplu, dacă codul malițios utilizează o adresă de
memorie suspicioasă , precum 0x08000000, mecanismele de detectare pot
verifica această ad resă î n cod. Folosind obfuscarea numerelor î ntregi, atacatorul
poate reprezenta 0x08000000 ca 16777216*8.

2.1.5.9. Randomizarea blocurilor

Randomizarea blocurilor implică modificarea structurii JavaScript în așa
fel încât să funcționeze î n acelaș i mod, dar cu o sintaxă diferită . Exemplul de
mai jos prezintă trei mo duri diferite de a scrie o buclă care execută exact aceeași
funcț ie [6].

Figura 2.1.5.9 Moduri diferite de a scrie o buclă care execută aceeași funcț ie

2.2. Fișiere Microsoft Office

Microsoft Office 97 și alte versiuni ulterioare ale software -ului (denumit
„Microsoft Office 97 -2003”) au folosit fișierul binar ca fiș ier implicit. Extensiile
pentru binecunoscutele fișiere Microsoft Word, Excel și PowerPoint sunt *.doc,
*.xls ș i, respectiv, *.ppt . Odată cu lansarea Microsoft Office 2007, Micro soft a
introdus un format de fiș ier complet nou, bazat pe XML numit Open Office
XML (OOXML). Acest format de fișiere se aplică documentelor Microsoft
Word , E x c e l ș i PowerPoint și adaugă sufixul „x” l a extensia de fișiere
recunoscută : *.docx , *.xlsx ș i *.pptx . Aceste fișiere sunt comprimate automat
(până la 75% în unele cazuri) utilizând tehnologia Zip, iar atunci câ nd sunt
deschise, acestea se dezarhivează automat. Acest format este proiectat să fie
compatibil cu a lte programe non -Microsoft pentru a deschide cu ușurință fișierul
și a accesa informaț iile. De asemenea este structurat într -o manieră modulară
care păstrează componentele de date din fiș ier separat, ceea ce permite
deschiderea unui fiș ier, c hiar dacă o co mponentă din fișier este deteriorată sau
coruptă . [7]
Într-o încercare de a preveni sau de a atenua posibilele atacuri, Microsoft
Office oferă mai multe mecanisme, incluzând securitate la nivel macro, locații
de încredere și semnături digitale. Prin urma re, noul format baza t pe XML este
considerat mai puțin riscant și mai sigur decâ t vechiul format binar folosit

NECLASIFICAT

NECLASIFICAT
25 din 108

anterior, deoarece nu se bazează pe pr ograme vulnerabile care parsează fiș iere
binare [8]. Cu toate acestea, î n ciuda mecani smelor de securitate integrate în
versiuni mai noi a le Microsoft Office, fișierele î n noul format pot fi utiliz ate
pentru lansarea de atacuri și reprezintă, prin urmare, un risc.

2.2.1. Structura fișierelor Microsoft Office

Înainte de a prezenta tehnic ile de atac folosind documente Microsoft
Office, trebuie înțeleasă structura fișierelor docx ș i xlsx . Un document docx /xlsx
este un fișier zip (un pachet) care conține un număr de „părț i”, de obicei, fiș iere
XML codate UTF -8 sau UTF -16. Pachetul poate conține și alte fișiere media,
cum ar fi imagini ș i video. [9]
Puteți examina structura fișierului și fiș ierele prin simpla redenumire a
oricărui fiș ier docx /xlsx într-un fișier zip ș i dezarhivarea acestuia.

Figura 2.2.1.1 Structura fiș ierului docx

Figura 2.2.1.2 Structura fiș ierului xlsx

NECLASIFICAT

NECLASIFICAT
26 din 108

2.2.1.1. Fișierul Content Types

Fiecare pachet trebuie să aibă un fiș ier de tipul [Content_Types].xml,
găsit la rădă cina pachetului. Acest fișier conține o listă cu toate tipurile de
conținut ale elementelor din pachet . Fiecare element și tipul acestuia trebuie să
fie listat în [Content_Types].xml. Î n exemplu l de mai jos este un tip de conținut
pentru partea principală a documentului:

Figura 2.2.1.1 Conț inut [Content_Types].xml [9]

2.2.1.2. Relaț ii

Fiecare pachet conține o parte de relații care definește relațiile dintre
celelalte elemente și resursele din afara pachetului. Fișierul .rels separă relațiile
de conținut și ușurează schimbarea relațiilor fără a schimba sursele care vizează
obiectivele.

Figura 2.2.1.2.1 Fișierul .rels

Petru un pachet OOXML, există întotdeauna un fișier de relații (.rels) în
folderul _rels care identifică elementele inițiale ale pachetului sau relaț iile
pachetului. De exemplu, următoarele definesc identitatea părț ii de î nceput pentru
conținut:

Figu ra 2.2.1.2.2 Exemplu conț inut fișier .rels

În plus față de fișierul de relaț ii pentru pachet, fiecare element care este
sursa uneia sau mai multor relaț ii va avea un fișier de relaț ii proprii. Fiecare
astfel de fișier de relaț ie se găsește într-un sub-folder _rels a elementului și este
denumit prin adăugarea „.rels” la numele elementului. În mod obiș nuit,
elementul principal de conț inut (document.xml pentru Word ș i workbook.xml
pentru XLS ) are propriul fișier de relaț ii. Acesta va conține re lații cu celelalte

NECLASIFICAT

NECLASIFICAT
27 din 108

elemente ale conț inutului, precum styles.xml, themes.xml și footer.xml, precum
și URI -urile pentru linkuri externe. [9]

Figura 2.2.1.2.3 Fișier de relații pentru document.xml (WORD)

Figura 2.2.1.2.4 Fișier de relații pentru workbook.xml (XLS)

2.2.2. Tehnici de atac prin intermediul documentelor de tip
Microsoft Office
2.2.2.1. Atac baza t pe macro -uri

Docum entele Microsoft Office pot conț ine un macro car e este un cod
incorporat scris î ntr-un limbaj de programare cunoscut sub numele de Visu al
Basic for Applications (VBA). Codul macro este stocat într -un fiș ier binar
numit „vbaProject.bin” situat în dosarul „word \” (în Word) și “xl\” (în Excel) din
arhiva documentului. Macro -ul este o componentă legitimă , dar poate fi
periculoas ă, folosită în scopuri malițioase prezintă un risc de securitate. De
exemplu, macro -ul poate folosi comanda VBA shell pentru a executa comenzi
arbitrare. Macro -ul este, de asemenea, capabil să invoce indirect alte aplicaț ii
sau biblioteci pe sistemul gazdă, ca parte a randă rii sau edită rii documentelor.
Codul macro malițios poate fi configurat să ruleze automat atunci câ nd
documentul este deschis utilizând funcț iile „AutoExec” sau „AutoOpen”.
Macro -ul poate descărca un fișier executabil malițios de pe internet și poate să-l
desch idă sau să descarce și să execute un fișier maliț ios non-executabil, cum ar
fi un fiș ier PDF sau Flash. Macro -ul poate deschide , de asemenea, un site web
malițios î n fundal.
De la lansarea Microsoft Office 2013 toat e macro -urile sunt dezactivate în
mod implicit, cu o notificare în acest sens. În plus, î n conformitate cu Microsoft,
de la lansarea Microsoft Office 2007 și noul format de fiș iere bazate pe XML

NECLASIFICAT

NECLASIFICAT
28 din 108

doar documentele cu extensii de fișiere care se termină cu „m”, cum ar fi
*.docm, *.xlsm ș i *.pptm pot conț ine macro -uri. Cu toate acestea, există fișiere
*.docx care conțin cod macro ș i sunt etiche tate ca malware de unele aplicaț ii
antivirus. [7]

2.2.2.2. Omiterea nivelurilor de securitate macro

Versiunile m oderne ale Microsoft Office conțin funcț ii de securitate
integrate care ajută la protejarea utilizatorului de codurile macro. În Microsoft
Office 2003, a fost adăugată caracteristica nivelul ui de securitate macro,
prezentâ nd patru niveluri de securitate. Nivelul 1 de securitate macro permite
toate m acro-urile (adică, cod ul maliț ios poate fi e xecutat). Nivelul 2
dezactivează toate macr o-urile, cu excepț ia macro -urilor semnate digital.
Nivelul 3 dezactivează toate macro -urile și afișează o alertă. Nivelul 4
dezactivează toate macro -urile fără o alertă. Nivelul de securitate 3 reprezintă
configurația implicită . Nivelul de securitate este salvat în registrul Windows și
poate fi citit într -o manieră simplă . Cu toate acestea, după cum a fost indicat în
documentația oficială Microsoft, nivelul de securitate poate fi ocolit prin crearea
unui macro numit „AutoExec” în fiș ierul „Normal.dotm”. Normal.dotm este
fișierul ș ablon Micr osoft pentru Word, localizat la “[drive]: \ Users \ [username]
\ AppData \ Roaming \ Microsoft \ Templates \ Normal.dotm” (Windows 8) ș i
este desch i s o ri d e câ te ori este pornit Microsoft Office Word. Fișierul șablon
conține stilurile și personalizările implicite care determină aspectul de bază al
unui document. Orice modificări aplicate acestui fiș ier vor fi, de asemenea,
aplicate tuturor documente lor create î n viitor. Astfel, î n acest mod, un atacator
poate configura ca un anumit macro să fie executat ori de câte ori un document
Word este deschis.

2.2.2.3. Social engineering

Atacatorii pot introduce conț inut text de social engineering î n interiorul
unui document maliț ios p entru a convinge utilizatorul să facă anumite acț iuni.
Când nivelul de securitate macro este setat la nivel ul implicit, utilizatorul
primește o alertă dacă documentul conț ine cod macro. Prima pagină a
documentului poate avea conț inut de social engineering concepu t pentru a ghida
utilizatorul să activeze manual codul macro, astf el, se va executa macro -ul
maliț ios. În câteva documente *.docx malițioase, s -a descoperit că, odată ce
fișierul este deschis, utilizatorul vede următoarea propoziție de social
engineering î n corpul documentului : “Apăsați permisiunea de conținut pentru a
accesa informaț iile”. Dacă utilizatorul urmează această instrucțiune, codul
macro rău intenționat începe să se execute.

NECLASIFICAT

NECLASIFICAT
29 din 108

2.2.2.4. Atac bazat pe „Trusted Location”

„Trusted Location” este un mecanis m de securitate bazat pe o locaț ie de
încredere definită în mod obiș nuit ca un folder de pe hard disk sau dintr -o rețea
partajată . Când un folder este desemnat drept sursă de fișiere de încredere, orice
fișier care este salvat î n dosar este considerat a fi un fișier de î ncredere. Când un
fișier de încredere este deschis, tot conținutul din fișier este activat și utilizatorii
nu sunt informaț i despre eventualele ri scuri care ar putea fi ascunse în fiș ier.
Aceste riscuri pot include caracteristici speciale și macrouri nesemnate, linkuri
către conț inut de pe internet sau conexiuni cu o bază de date. În versiunile
moderne ale Micr osoft Office, politica implicită de securitate specifică fapt ul că
macr o-urile pot fi executate numai într -o locație de î ncredere. Fiecare aplicație
Office are propriile locații de încredere și setarea implicită poate fi modificată
folosind privilegii de utilizator. Astfel, u n atacator pune documentul malițios
care conține codul macro într -o locație de î ncredere s au, alternativ, stabilește
locația documentului malițios ca fiind de î ncredere. [7]

2.2.2.5. Atac bazat pe OLE maliț ios

Fișierele Office malițioase pot conține un obiect maliț ios de tipul Object
Linking and Embedding (OLE). OLE este tehnologia utilizată pentru partajarea
datelor între aplicații ș i permite, de exemplu, in corporarea unei diagrame Excel
într-un document Word, printre alte funcț ii. Un obiect OLE este stocat într -un
fișier binar numit „oleObject.b in ” și este si tu at în dosarul „word \embeddings \”
(în Word) și „xl \embeddings \” (în Excel) în arhiva de documente. Un obiect
OLE poate conține orice fișier sau linie de comandă care poate efectua acțiuni
maliț ioase. Dacă utilizatorul f ace dublu click pe obi ect (situat în document),
fișierul sau comanda este lan sată.[10]

2.2.2.6. Atac bazat pe fișiere maliț ioase incorporate

Fișierele Microsoft Office permit integrarea conț inutului activ care poate
fi maliț ios. Printre tipurile de fiș iere care pot fi incorporate se pot găsi fiș iere
binare precum: *.exe, *.com, *.pif ș i *.scr; comenzi ș i script -uri cum ar f i: *.bat,
*.cmd, *.vbs ș i *.js, f isiere HTML cum ar fi: *.html ș i *.XHTML (pot c ontine
cod JavaScript maliț ios) și alte fiș iere de documente, cum ar fi: *.pdf, *.doc,
*.xls ș i *.ppt. Mai mult, fișierele media maliț ioase, cum ar fi *.png sau *.jpeg,
pot fi incorporate într -un document și executate automat câ nd documentul este
randat. Fișierele maliț ioase incorporate sau OLE incorporat po t fi executate
automat atunci c ând documentul este deschis utilizâ nd macro -uri. Acestea pot fi,

NECLASIFICAT

NECLASIFICAT
30 din 108

de asemenea, deschise manual de către utilizator atunci când apar ca o
pictogramă î n document. [7]

2.2.2.7. Exploatarea vulnerabilităț ilor

Niciun software nu este perfect protejat și este aproape imposibil să se
prevină prezența vulnerabilităților în timpul dezvoltă rii unui proiect software de
mari dimensiuni. Aceste vulnerabilități, atunci câ nd sunt exploatate , pot permite
unui exploatant să obțină privilegii sau să directioneze fluxul normal de e xecuție
către un cod maliț ios arbitrar. Multe vulnerabilități au fost descoperite în
Microsoft Office, de când a fost publicat pentru prima oară. Din 1999 până î n
2019, 524 de vuln erabilități au fost descoperite și există probabil mai multe care
rămâ n nede scoperite . Chiar dacă a fost descoperită o vulnerabilitate, există un
timp de întârziere până câ nd un patch este publicat de Microsoft. În acea
perioadă , softw are-ul Office și utilizatorii să i sunt vulnerabili. În plu s, chi ar și
după publicarea unui patch, din diferite motive (exemplu, lipsa de
conștientizare) nu toate organizațiile ș i persoanele instalează patch -ul.
În octombrie 2014, Microsoft a dezvă luit o v ulnerabilitate severă de tip
„zero day vulnerability” î n Microsoft OLE. Această vulnerabilitate permitea
executarea codului la distanță dacă un utilizator deschidea un fiș ier Microsof t
Office special creat care conț inea un obiect OLE. Un atacator care exploata
vulnerabilitatea ar fi putut obține aceleași drepturi ca ș i utilizatorul conectat care
a deschis fiș ierul Office. În plus, deoarece Microsoft Office permite
incorporarea fiș ierelor, atacatorii ar putea profit a de o vulnerabilitate cunoscută
sau necuno scută a formatului de fișier incorporat cum ar fi un fiș ier *.PDF sau
*.SWF (Adobe Flash). [12]

2.2.2.8. Ocoli rea mecanismelor de securitate M icrosoft

Mecanismele de securitate furnizate de Microsoft î n noile versiuni Office
pot fi uș or ocolite. Au fost explorate diferite deficiențe din cadrul Microsoft
Office ș i OpenOf fice, care au permis unor potențiali atacatori să ignore setările
de securitate implicite, care î mpiedicau e xecutarea macro -urilor atunci când un
fișier era deschis. În plus față de demonstrarea tehnicilor de ocolire a
mecanismelor de securitate Microsoft , a fost dezvăluit cum se construiește un
atac care nu necesită nici tehnici sofisticate, nici cunoștințe speciale, rămânând
totodată nedetectaț i de programele antivirus. Ca dovadă , au implementa t două
atacuri atât pentru Microsoft Office, cât ș i pentru OpenOf fice. Primul atac a
schimbat nivelul de securitate la cel mai mic nivel . Al doilea atac a adăugat o
nouă cale pentru locația de încredere. Î n aceste atacuri, ar putea fi executat un
macro mal ițios, î n ciuda mecanismelor de securitate existente. [13]

NECLASIFICAT

NECLASIFICAT
31 din 108

2.3. Imagin i JPEG

Termenul JPEG provine de la grupul care a creat standardul (Joint
Photographic Experts Group). Este unul dintre cele mai comune formate și este
utilizat pe scară largă de către toț i producă torii de produse digitale, cum ar fi
camerele digitale. Acest tip de format provine din nevoia de a face schimb de
imagini prin diferite platforme și aplicaț ii. Scopul principal al compresiei JPEG
este de a elimina informația care este imperceptibilă pentru ochiul uman, lăsând
în acelaș i timp neschimbate detal iile estetice ale imaginii. Totodată , compresia
JPEG reduce dimensiunea datelor imaginii. Procedura de codificare
Transformata Discretă a Cosinusului (DCT) const ă în șase etape de bază:
conversia reprezentării culorilor din RGB (roșu, verde, albastru) în YCbCr,
scăderea valorilor crominanț ei (de obicei cu un factor de doi), transformarea
valorilor în frecvenț e (folosind blocuri de 8×8 pixeli), proce sul de cuantizare,
parcurgerea î n zigzag, compre sia fără pierderi utilizând o variantă de codificare
Huffman.

2.3.1. Reprezentarea unei imagini JPEG

Într-un mo d mai detaliat, o imagine constă din pixeli ș i fiecar e pixel are
de obicei trei octeți care reprezintă cele trei culori ale sale de bază: Roș u, Ver de
și Albastru (RGB).

Figura 2.3.1.1 Reprezentarea unei imagini [ 17]

Primul pas în procedura de codificare JPEG este de a converti aceste
valori ale pixelilor de la RGB la YCbCr, care este un alt spaț iu de culori care are
trei componente. Y reprezintă luminozitatea unei imagini și se numește
luminanță în timp ce Cb și Cr reprezintă culori și se numesc crominanță.

NECLASIFICAT

NECLASIFICAT
32 din 108

Figure 2.3.1.2 Conversie RGB la YCbCr [18]

Se știe că ochiul uman poate recunoaște diferența de lumină a imaginii
mai ușor decât coeficienț ii de crominanță . DCT -ul de tip II este responsabil
pentru procesul de cuantizare. DCT este o transformare matematică (utilizează
funcții cosinus) care converteș te valorile pixelilor de 8 x 8 blocuri la blocuri de
coeficienți de frecvență de 64.
O imagine dig itală ș i m a i a l e s o i m a g i n e J P E G p o a t e f i u n m e d i u d e
acoperire perfect, deoarece de obi cei are o cantitate mare de spațiu în care se pot
incorpora informaț ii. Există numeroși factori care determină o procedură de
incorporare de success, cum ar fi tehnica de incorporare. Tehnici populare
folosite pentru a ascunde informațiile î n imagini sunt : cel mai puț in semnificativ
bit (LSB – Least Significant Bit) ș i codificarea DCT. Tehnicil e de incorporare se
concentrează pe coeficienții DCT cuantificați ș i de obicei incorporează date prin
aplicarea codării LSB în acei coeficienț i care nu sunt egali cu zero. Acestea se
bazează pe faptul că procedurile care urmează fazei de cuantificare sunt fără
pierderi și pot fi obținute informaț iile ascunse . [14]

2.3.2. Steganografia î n atacuri cibernetice contemporane

Steganografia este practica de a trimite date într -un format ascuns, astfel
încât chiar tra nsmiterea datelor este deghizată. Cuvâ ntul steganografie este o
combinație a cuvintelor greceș ti στεγανός (steganos), adică „acoperită, ascunsă
sau protejată”, ș i γράφειν (graphein) însemnâ nd „scrierea”.
Spre deosebire de criptografie, care ascunde conț inutul unui mesaj secret,
steganografia ascunde însăși faptul că un mesaj este comunicat. Conceptul de
steganografie a fost introdus pentru prima dată în 1499, însă ideea însăși a
existat încă din cele mai vechi timpuri. Există povești despre o metodă utilizată
în Imperiul Roman prin care un sclav ales pentru a transmite un mesaj secret
avea scalpul ras ș i un mesaj a fost tatuat pe piele. Când pă rul mesagerul ui a

NECLASIFICAT

NECLASIFICAT
33 din 108

crescut, el a fost trimis în misiunea sa. Receptorul a scos din nou scalpul
mesagerului ș i a citit mesajul.
Steganografia a fost dezvoltată pe parcursul secolului al XX -lea, aș a cum
a fost steganaliza sau p ractica de a determina faptul că informația ascunsă este
comunicată î n cadrul unui stego -container (orice obiect î n care payload- ul este
incorporat î n secret). Astăzi, însă, apare o nouă tendință periculoasă:
steganografia este din ce î n ce m ai folosită de actorii care creează fișiere
malițioase ș i instrumente de spionaj cibernetic. Cele mai moderne soluții anti –
malware oferă puțină protecție î mpotriva steganografiei, în timp ce orice stego –
container în care u n payload poate fi transportat î n secret reprezintă o potențială
ameninț are. [15]
O vari etate de metode steganografice și algoritmi au fost dezvoltate și
testate științ ific. O descriere a unora dintre ele este furnizată mai jos:
• Stenografia LSB – payload -ul este codificat și transmis î ntr-unul
sau mai mulți biți cei mai puț in semnificativi (LSB) ai stego –
container -ului. Cu cât este mai mic numărul de biți folosiț i pentru a
transporta payload- u l , c u a t â t este mai mic impactul asupra
aspectului imaginii.
• Transformata discretă a cosinusului sau steganografia bazată
pe DCT – este un subtip al steganografi ei LSB care este adesea
aplicată pe stego -containere î n formatul JPEG (adică atunci câ nd
imaginile JPEG sunt folosite pentru a transporta payload- ul). În
această metodă, datele comunicate sunt secret codate în coeficienț ii
DCT. Dacă toți ceilalți factori sunt egali, această metodă oferă o
capacitate de transmisie a datelor mai mică, unul dintre motive este
că valorile coeficienților de 0 ș i 1 nu pot fi modificate, astfel încât
când coeficienț ii iau una dintre cele două valori nu se pot codifica
date.
• Paleta bazată pe steganografia imaginii – este în esență un al t
subtip de steganografie LSB, î n care dat ele comunicate sunt
codificate în cei mai puțin semnificativi biți ai paletei imaginii decât în cei ai stego -container -ului. Dezavantajul evident al aceste i
metode este capacitatea redusă de transmitere a datelor.
• Utilizarea câmpurilor de servicii î n formate de date – aceasta
este o metodă relativ simplă, î n care payload- ul este incorporat în
câmpurile de serviciu ale antetului stego -container -ului.
Dezavantajele su nt, din nou, o capacitate redusă de transmisie a
datelor și o protecție redusă a payload- ului: payload- ul inco rporat
poate fi detectat utilizând programe obiș nuite de vizualizare a
imaginilor, care pot afișa uneori conținutul câ mpurilor de serviciu.

NECLASIFICAT

NECLASIFICAT
34 din 108

• Incorporarea payload -ului – este o metodă prin care payload- ul
este codificat în stego -container și, pe parcursul livră rii, este
decodificat folosind un algoritm cunoscut de ambele părț i. Câteva
payload- uri pot fi codificate independent în acelaș i transpor tor
(stego -container), cu condiț ia ca metodele lor de incorporare să fie
ortogonale.
Trei motive principale pentru care a utorii malware folosesc din ce în ce
mai mult steganografia în creaț iile lor:
• Îi ajută să ascundă nu doar datele în sine, ci și faptul că datele
sunt încărcate și descărcate;
• Ajută la ocolirea sistemelor DPI, fiind foarte relevant pentru
sistemele comparative;
• Utilizarea steganografiei poate ajuta la ocolirea controalelor
de securitate prin intermediul produselor anti -APT
(Advanced Persistent Threat), deoarece acesta nu poate
procesa toate fișierele imagine (rețelele din corporații conț in
prea multe dintre acestea, iar algoritmii pentru analiză sunt
destul de scumpi) .
Pentru utili zator, detectarea unui payload î n cadrul unui st ego-container
poate fi o sarcină dificilă. De exemplu, să examină m cele doua imagini de mai
jos:

Figura 2.3.2 Comparație între o imagine care conține un mesaj ascuns
(dreapta) și o imagine care nu conț ine (stânga) [15]

Imaginile sunt identice, atât în dimensiune cât și în aspect. Cu toate
acestea, una dintre ele este un stego -container care conț ine un mesaj inc orporat.

NECLASIFICAT

NECLASIFICAT
35 din 108

Problemele sunt evidente:
• Stegano grafia este acum foarte populară pentru scriitori de
programe malware ș i spyware;
• Instrumentele anti -malware, în general, pot face foarte puține
operaț iuni cu payload- urile incorporate. Astfel de stego –
containere sunt foarte greu de detectat, deoarece arată ca
fișierele de imagini obiș nuite.
• Toate programele de detecț ie a steganografiilor sunt în
prezent esenț iale pentru demonastrarea conceptului, iar
logica lor nu poate fi implementată în instrumentele de
securitate comerciale deoarece sunt foarte lente, au rata de
detectare destul de scazută și, uneori, chiar conț in erori
matematice.

Mai jos este o listă de exemple despre modul în care steganografia poate
funcționa de obicei î n diferite scenarii:
• Un angajat decide să fure fiș iere sensibile. Cu sistemele de
securitate de astăzi, acest luc ru se va observa folosind abordă ri
clasice, cu toate aces tea, folosind steganografia, fișierele sensibile
sunt codate î n imagini. În acest fel , imaginile pot fi încărcate în
rețelele de socializare sau în serviciile de stocare în cloud, fără a
declanșa steaguri roș ii.
• Un grup de infractori cibernetici î ncearcă să comunice și să
sincr onizeze atacurile din diferite țări. Deoarece nu pot comunica
prin canalele de comunicare standard, ei decid să ascundă mesaje
secrete î n imaginile de profil ale conturilor sociale. În acest fel,
aceștia pot comunica încărcâ nd și descărcând fotografii de profil
care nu sunt suspicioase utilizâ nd serviciile permise.
• Este planificată o campanie malițioasă pentru a afecta milioane de
utilizatori, dar autorii vor să o păstreze cât mai secret ă posibil.
Deoarece obiectivul este de a exploata o vulnerabilitate a
browserului, ei folosesc steganogra fia pentru a ascunde codul
malițios î n imaginile publicitare. Pentru a ajun ge rapid la un public
larg, aceștia trimit bannerul în rețelele care distribuie imaginea
peste sute de site -uri web. Prin ac easta, propagarea este garantată,
iar veniturile din campanie pot fi mai mari.
In mod tragic, toate exemplele menționate mai sus se bazează pe istoricul
cazurilor de malware existente. Deși multe dintre aceste atacuri au fost în cele
din urmă identi ficate și opr ite, timpul ș i efortul necesar pentru a detecta și a opri
atacurile și comuni cările legate de steganografie a fost mare și continuă să
primească resurse și cunoștinț e enorme de investigat. Rezultatul este că

NECLASIFICAT

NECLASIFICAT
36 din 108

steganografia cont inuă să fie o teh nică ș i o oportunitate foarte profitabilă pentru
infractorii cibernetici. [16]

2.4. Documente Text

Un fiș ier TXT este un d ocument text standard care conț ine text
neformatat. Acest format este recunoscut de orice program de editare a tex tului
sau de procesare de text ș i poate fi procesat de majoritatea programelor
software. Fișierele TXT sunt adesea create și deschise utilizâ nd Microsoft
Notepad.
Fișierele TXT sun t utile pentru stocarea informațiilor în text simplu , fără
formatare specială în afară de fonturile de bază ș i stilurile de fonturi. Acest tip
de fișiere este utilizat în mod obișnuit pentru păstrarea de note, instrucțiuni ș i
alte documente similare care nu tr ebuie sa apară î ntr-un anumit mod.

2.4.1. Caracterul maliț ios al documentelor text

N u a r t r e b u i s ă f i e p o s i b i l ă rularea de programe malițioase prin
deschiderea unui fișier .txt. Ar trebui doar să se deschidă într -un editor de text,
fără executare de cod. Poate că ceea ce se întamplă cu adevarăt este trucul de
dublă extensie. Microsof t a decis că extensiile de fișiere ar trebu i să fie ascunse
în mod implicit, chiar dacă este un defect de securitate foarte mare. Cu
ascunderea extensiei, un fișier numit evil.txt.exe va apărea ca fiind numit
evil.txt, dar când il deschideț i, acesta va fi executat ca fiș ier executabil. Totuși,
acesta nu este de fapt un fiș ier .txt. Ar putea exista editoare de text care deschid
fișierele și le tratează ca executabil HTML, Python sau script batch în funcție de
conținutul lor. Nu ar fi o idee prea bună . Cineva ar putea să elaboreze un șir
UTF -8 nevalab il care să declanșeze o eroare în Notepad, făcându -l să execute un
cod arbitrar , dar nu există nici o dovadă că a fost vreodată fă cut. Repre zentarea
Unicode a fost folosită pentru deghizarea malware -ului, dar nu v a fi executat
până când fiș ierul nu es te rulat ca altceva decat un fiș ier text. Un proprietar
poate schimba asociațiile de fiș iere ale unui c omputer pentru a deschide un fișier
.txt cu altceva care să î l execute. A s t a a r f i p u ț i n p r o b a b i l ș i auto -distructiv.
Malware -ul ar putea face același lucru . Ar trebui să fie un proces în două etape,
schimbând mai întâi asocierile de fișiere și apoi să il ademenească pe utilizator
să deschidă fiș ierul text. Este destul de evident când o aplicație greșită începe să
deschidă fișiere text, astfel încâ t aceast a nu pare o modalitate probabilă de a
ataca calculatoarele.
În absența oricăror dovezi că este posibil să se ruleze programe m alware
prin deschiderea unui fișier text, este încă sigur să deschideți fiș iere .txt arbit rare
cu un editor de text, este posibil să întâlniți detectă ri false asupra unor fiș iere

NECLASIFICAT

NECLASIFICAT
37 din 108

text simple declanș ate de anti -virus deoarece acesta scanează ș i găsește
informații, note ș i nume specifice de infectare referitoare la diferite tipuri de
malware. [19]

2.4.2. Deghizarea extensiilor de fisiere cu exploitu -ul
„Unitrix”

Extensiile de fișiere pot fi false, acel fiș ier cu extensie .txt poate fi de fapt
un program executabil. Hackerii pot falsifica extensiile de fișiere abuzâ nd de un
caracter Unicode special, obligând textul să fie afișat î n ordine in versă . De
asemenea, Wind ows-ul ascunde extensiile de fișiere î n mod imp licit, ceea ce
este un alt mod în care utilizatorii începă tori p ot fi înșelaț i, un fiș ier cu un nume
precum readme.txt.exe va apărea ca un fiș ier text inofensiv. Dacă întotdeauna
spuneț i Windows -ului să afișeze extensiile de fișiere, s -ar putea să credeți că
sunteți în siguranță . Cu toate acestea, există alte moduri î n care se pot ascunde
extensiile de fiș iere.
Metoda „Unitrix” profită de un caracter special î n Unicode pentru a
inversa ordinea caracterelor dintr -un nume de fișier, ascunzâ nd extensia de fișier
periculoasă în mijlocul numelui de fișier și plasând o extensie de fișiere falsă,
inofensivă, aproape de sfârș itul numelu i fișierului.
Caracterul Unicode este U+202E: S uprascriere de la dreapta la stânga și
forțează programele să afișeze textul în ordine inversă.

Figura 2.4.2.1 Caracterul Unicode U+202E

În esență , numele real al fiș ierului poate fi „Awsome Song uploaded by
[U+202e]txt.exe” , unde [U+202e] reprezintă caracterul Unicode copiat din
figura 16. Caracterul special forțează Windows -ul să afișeze sfârșitul numelui
fișierului invers, astfel încât numele fișierului va apă rea ca în figura 17. Cu toate

NECLASIFICAT

NECLASIFICAT
38 din 108

acestea, nu este un fișier txt, este un fișier exe și va fi executat dacă se va face
dublu click pe el. [20]

Figura 2.4.2.2 Utilizarea exploit- ului „Unitrix”
3. Tipuri de analiza a documentelor

Analiza malware este un proces care utilizeaza diverse instrumente si
tehnici pentru a determina modul in care functioneaza codul malitios. Din
pacate, nu exista un singur algoritm care sa indice modul de analiza a unui astfel
de cod. Sunt necesare, de obicei, di ferite abordari, inclusiv analiza statica,
analiza comportamentala, depanarea codului executabil sau analiza codului dezasamblat. Mai mult decat atat, fiecare analist are tendinta de a avea propriile
tehnici si instrumente preferate.
Deoarece analiza malw are este de obicei o sarcina complexa, este
intotdeauna important sa existe un scop clar in minte. Unele obiective comune
de analiza sunt : determinarea indicatorilor de infectie pentru a detecta alte
computer infectate, detectarea mecanismului de propagare a malware -ului
pentru a preveni mai efficient infectiile viitoare sau pentru a cunoaste functionalitatea codului malitios pentru a evalua riscul asociat cu infectia
potential a.
Fisierele malitioase sunt de obicei destul de complexe. Unele fisiere sunt
destul de usor de analizat, in timp ce altele necesita o cunoastere profunda a
sistemului si abilitati avansate de reverse engineering pentru analiza. In general,
pentru a efectua analiza malware de baza, sunt necesare cateva cunostinte fundamentale de adm inistrare a sistemului si de programare. [21]

3.1. Diferite abordă ri pentru analiza malware

Există diferite abordă ri pentru analiza malware , fiecare avâ nd un scop
diferit. De o bicei, pentru a colecta informațiile necesare despre fișierul î n cauză,
se utilizează mai multe abordă ri.

3.1.1. Analiza statică de bază (Basic static analysis)

În acest tip de analiză, structura fișierului malițios este analizată făra a se
executa codul maliț ios. Scopul acestei an alize este de a colecta informații despre

NECLASIFICAT

NECLASIFICAT
39 din 108

potențiale le funcționalităț i malițioase și orice caracteristici ale fiș ierelor care ar
putea fi utiliz ate ulterior pentru a crea semnătura malware -ului.
În timpul analizei sunt verificate divers e elemente, cum ar fi lista de ș iruri
de caractere, tabele de import și export ș i resur se de fiș iere. Fișierul este, de
asemenea, verificat pentru semnături malware cunoscute și că utat pentru orice
obiecte incorporate (imagini, executabile) .

3.1.2. Analiza comportamentală (Behavioural analysis )

În acest tip de analiză, codul mali țios este executat în mod intenționat într –
un mediu co ntrolat pentru a observa schimbă rile pe care acesta le aduce
sistemului de operare. Se monitorizează elemenete cum ar fi modificările
sistemului de fișiere, modificările din regiș trii Windows, modific ările din lista
de procese, utilizarea resurselor de sistem, precum ș i orice alte anomal ii vizibile
(de exemplu dispariția fiș ierelor). Sistemul de operare este, de asemenea, scanat
pentru semne de activitate de rootkit . Un rootkit este un software fol osit de un
atacator pentru a obț ine acces constant la nivel de administrator asupra unui
computer sau o reț ea. Un rootkit est e instalat tipic printr -o parolă furată sau pri n
exploatarea unei vulnerabilități a sistemului fără acordul victimei.
Pe baza modifică rilor sistemului observat , analistul încearcă să deducă
unele dintre funcționalităț ile malware. Analiza comportamentală ne permite, de
asemenea, să determină m mecanismul de persistență a malware- ului ș i
indicatorii de infec ție. Cunoștinț ele despre mecanismu l de persistență și
indicatorii de infecț ie ar putea fi folosite pentru a identifica alte sisteme infectate
și pentru a le dezinfecta.

3.1.3. Analiza dinamică avansată (Advanced dynamic
analysis)

În timpul analize i dinamice avansate, codul malițios este executat î ntr-un
program de depanare, permițând analistului urmă rirea pr ecisă a modului de
executare a programelor malware. Analiza debugger -ului dezvă luie diferitele
moduri de execuție și algoritmii folosiț i de malware (de exemplu, algoritmul de
criptare utilizat pentru comunicarea în reț ea). Analiza dinamică avansată este, de
obicei, mai consumatoare de t imp decat alte tipuri de analiză și necesită abilităț i
bune de re verse engineering (RE), precum și o cunoaștere profundă a sistemelor.

3.1.4. Analiza statică avansată (Advanced static analysis)

În analiza statică avansată, codul malițios este dezasamblat și apoi
analizat pentru funcționalitatea malware ș i algoritmii utilizaț i. La fel ca și î n

NECLASIFICAT

NECLASIFICAT
40 din 108

cazul analizei dinamic e avansate, acest tip de analiză este, de obi cei, consumator
de timp și necesită abilităț i bune de reverse engineering (RE) și o cunoaștere
profundă a sistemelor. Unul dintre ava ntajele analizei statice este că nu se
execută codul malițios niciodată . Este, de asemenea, posibil să se analizeze părț i
ale codului care nu sunt executate niciodată î n timpul analizei dinamice.

3.1.5. Analiza automată (Automatic analysis)

Analiza automată de malware constă î n ob servarea caracteristicilor
funcț ionale ale unui document prin executarea acestuia î ntr-un mediu controlat
(Sandbox) și înregistrarea acț iunilor efectuate pe parcursul execuției î ntr-un
raport [22]. Analiza automată produce, de obicei, rezul tate similare cu analiza
statică de bază și analiza comportamentală. De asemenea, de obicei, durează cel
mai puț in timp dintre celelalte tipuri de analiză și este adesea folosit pentru a
verifica rapid un fișier maliț ios. [21]
Pentru acest tip de analiză se efectuează o imagine cu starea completă a
sistemului înainte ca malware -ul să fie executat pentru ca apoi să fie comparată
cu starea completă a sistemului d upă execuț ie. Acest mod de abordare
analizează numai efectele cu mulative ale documentelor malițioase, fără a ține
cont de modifică rile dinamic e, un exemplu este atunci când malware- ul
generează un fișier în ti mpul execuției, după care îl șterge î nainte de
terminare. [23]
Sandbox- urile simulează, î n mod normal, sistemele de operare Windows,
deoarece marea majoritate a conținutului maliț ios existent este scris pentru
acestea [22]. Caracteristicile sandbox -ului in clud monitorizarea de:
• fișiere create sau modificate;
• accesarea sau modificarea regiș trilor de sistem;
• librăriilor dinamice;
• zonele de memorie virtuală accesate;
• procesele create;
• conexiunile la internet;
• datele transmise prin internet.

3.1.6. Avantaje ș i dezavantaje

Toate te hnicile de mai sus au avantajele ș i dezavantajele lor. Analiza
statică de malware analizează codul sursă, lăsându -l pe specialist să observe
toate modurile posibile de execuț ie. Un avantaj considerabil este că analiza
statică nu poate fi detectată, fiș ierul analizat nu poate detecta că este analizat,
deoarece nu este executat. Anal iza statică este totuș i dificil de realizat deoarece
codul sursă al fișierului maliț ios nu este de obicei disponibil. Chiar dacă este, nu

NECLASIFICAT

NECLASIFICAT
41 din 108

puteți fi sigur că nu s -au produs modificări ale executabilului binar. În plus,
analiza statică la nivel de cod -mașină poate fi foarte gre oaie deoarece malware-
ul foloseș te adesea tehnici de obfuscare a codului, cum ar fi compresia, criptarea
sau auto -modificarea pentru a evita decompilarea ș i analiza [23]. Analiza
dinamică este mai utilă iar codul binar nu trebuie despachetat sau decriptat.
Analiza dinamică nu poate fi evitată prin tehnici de obfuscare a codului,
deoarece nu analizează codul fiș ierului. Pe de altă parte, este nevoie de timp și
resurse de calcul, deci ridică preocupări de scalabilitate. În plus, malware -ul
examinat poate detecta că acesta este executat într -un mediu izolat și își
încetează operațiun ile maliț ioase, rămânâ nd astfel nedetectat. [ 7]
Odată ce autorii de malware au început să proiecteze fișiere malițioase
mai complicate ș i mai sofisticate folosind tehnici de obfuscar e și de criptare,
analiza statică nu mai este capabilă să detecteze conți nutul maliț ios. Problema
este rezolvată cu ajutorul analizei dinamice care înregistrează comportamentul
maliț ios. Deci analiza dinamică are un potenț ial de a furniza rezultate mai
preci se decât analiza statică și este mai utilizată pentru o detectare prec isă a
fișierelor maliț ioase. [24]

3.1.7. Analiza Hibridă

Această tehnică este propusă pentru a depăși limitările analizei statice și
dinamice. Se combină punctele forte ale analizei statice și dinamice pentru a
identifica mai mult cod malițios decâ t s-ar fi pu tut identifica cu una dintre c ele
doua tehnici. Se utilizează tehnica de analiză statică pentru a analiza codul
înainte de executarea acestuia și tehnica de analiză dinamică pentru a analiza
codul ca re este ratat de analiza statică. Datorită acestei abord ări, analiza hibridă
depășeș te limitele analizelor statice si dinamice. [25]

3.2. Aplicaț iile cele mai cunoscute utilizate în analiză

Această secțiune prezintă lista c elor mai utilizate instrumente în analiza
malware. Este important să aveț i instrumentele potrivite pentru a analiza
documentele suspecte. [21]

3.2.1. Instrumente pentru analiza statică

• OfficeMalScanner – localizează shellcode- ul și macro -urile VBA
în fișierele Microsoft Office și extrage codul shell și îl incorporează
într-un fiș ier EXE pentru ana lize suplimentare.
• Microsoft Offvis – afișează conținutul brut și structura unui fișier
Microsoft Office ș i identifică unele exploit -uri comune.

NECLASIFICAT

NECLASIFICAT
42 din 108

• pyOLEScanner – poate examina și decoda unele aspecte ale
fișierelor binare Office.
• PDFiD – identifică PDF -urile care conțin ș iruri de caractere
asociate scripturilor și acț iunilor.
• PDF -parser – examinează structura fiș ierelor PDF.
• Peepdf – cu aju torul lui peepdf este posibil să vedeț i toate obie ctele
din document care prezintă elemente suspecte, acceptă cele mai
utilizate filtre și codifică ri, poate pars a diferite versiuni ale unui
fișier, stream -uri de obiecte și fiș iere criptate.

3.2.2. Instrumente pentru analiza dinamică

• Process Explorer – manager de task -uri și monitorizare de sistem
pentru Microsoft Windows. Oferă funcționalitatea Managerului de
activități Windows împreună cu un set bogat de funcț ii pentru
colectarea de informații despre procesele care rulează pe sistemul
utilizatorului.
• Process Monitor – instrument din suita Win dows Sysinternals.
Monitorizează și afișează în timp real toate activitățile sistemului de fișiere î ntr-un sistem de operare Microsoft Windows. Acesta
combină două instrumente mai vechi, FileMon și RegMon ș i este
utiliza t în administrarea sistemului, investiga rea calculatorului și
depanarea aplicaț iilor.

• Regshot – instrumentul open source care permite efectuarea unei
capturi a regiștrilor ș i al sis temului de fișiere pentru o comparație
ulterioară. Se utilizează pentru a detecta modificările î n regiștrii de
sistem și în sistemul de fișiere (inserții, ștergeri, modifică ri).
• GMER – aplicaț ie de căutare a activităților rootkit î n sistemul de
operare. Permite detectarea procese lor ascunse, a firelor de execuț ie
ascunse, a modulelor ascunse, a fișierelor ascunse ș i multe altele.

3.2.3. Instrumente pentru analiza automată

• Cuckoo Sandbox – sistem open source de analiză automată a
malware -ului. Acesta permite exec utarea automată a fișierelor
suspecte într -un mediu controlat și izolat, în care monitorizează
activitatea codului maliț ios. După analiză, acesta creează un
raport de analiză a malware -ului.

NECLASIFICAT

NECLASIFICAT
43 din 108

4. Machine learning

Machine learning este o formă de Inteligență Artificială care permite unui
sistem să învețe din date mai degrabă decât prin programare explicită . Cu toate
acestea, învățarea automată nu este un proces simplu.
În machine learning se folosesc o varietate de algoritmi care învață
iterativ din date pentru a îmbunătăți și a descrie date ș i pentru a prezice
rezultate. Pe măsură ce algoritmii primesc dat ele de antrenare , este posibil să se
producă modele mai precise pe baza acestor date. Un model de machine learn ing
este rezultatul generat după ce antrenezi un algoritm de machine learning cu
date. După antrenare, atunci când oferiț i unui mo del anumite dat e de intrare, veț i
primi anumite date de ieș ire. De exemplu, un algoritm predictiv va crea un
model predictiv. Apoi, atunci când oferiți modelului predictiv date, veți primi o
predicție pe baza datelor care au pregătit modelul. [26]

Figura 4 Ciclul de viață al algoritmului de detectare

4.1. Tehnici de machine learning

Tehnicile de machine l earning sunt necesare pentru a îmbunătăți
acurateț ea modelelor predictive. În funcție de natura problemei, există abordări
diferite bazate pe tipul ș i volumul datelor. În această secț iune, se vor prezenta
categoriile de machine learning.

NECLASIFICAT

NECLASIFICAT
44 din 108

4.1.1. Învățare s upervizată (Supervised learning)

Învăț area supervizată începe în mod obiș nuit cu un set stabilit de date și o
anumită înțelegere a modului în care aceste date sunt clasificate. Învățarea
supervizată are scopul de a găsi modele î n date care pot fi aplicate unui proces
de analiză. Aceste date au caracteristici eti chetate care definesc semnificaț ia
datelor. De exemplu, ar putea exista milioane de imagini cu animale și fiecare
imagine să includă o explicaț ie a ceea ce este fiecare animal și apoi să puteți
crea o aplicație de machine learning care să distingă un animal de altul. Prin
etichetarea acestor date despre tipu rile de animale, este posibil să aveț i sute de
categor ii de specii diferite . Când etichetele provin dintr -un set infinit de valori
(valori numerice) , se numește regresie iar când datele provin dintr -un set finit de
valori (valori categorice) , se numeș te clasificare. În esență, regresia utilizată
pentru învăța rea supervizată ajută să înțelegeți corelaț ia dintre variabile. Un
exemplu de învățare supervizată este prognoza meteo. Prin utilizarea analizei de
regresie, prognoza meteo ia î n considerare modelele me teorologice istorice
cunoscute și condiț iile actuale pentru a oferi o previziune asupra vremii.
Algoritmii sunt antrenaț i folosind exemple preprocesate și la acest pas,
performanț a algoritmilor este evaluată cu date de test. Dacă modelul este
antrenat pentru a reprezenta numai șabloanele care există î n sub setul de
antrenament, se creează o problemă numită suprapotrivirea ( overfitting ).
Overfitting înseamnă că modelul este precis antrenat pentru datele de antrenare,
dar nu poate fi folosit pentru seturi mari de date necunoscute. Pentru ocolirea
overfitting -ului, este necesar să se efectueze teste cu date neprevăzute sau
necunoscute. Utilizarea datelor neprevăzute pentru setul de test vă poate ajuta să
evaluați precizia modelului în prezicerea rezultatelor [26]. Modelele de
antrenare supervizată sunt des utilizate în detectarea documentelor maliț ioase.

4.1.2. Învățare nesupervizată (Unsupervised learning)

Învățarea nesupervizată este cea mai potrivită atunci când problema
necesită o cantitate masivă de date care nu sunt etichetate. De exemplu,
aplicaț iile de social media, cum ar f i Twitter, Instagram, Snapchat ș i asa mai
departe, toate au cantităț i mari de date neetichetate. Înțelegerea semnificaț iei din
spatele acestor date necesită algoritmi care pot începe să înț eleag ă semnificația
bazându -se pe capacitatea de a clasifica datele pe baza ș abloanelor sau
clusterelor pe care le găsesc. Prin urmare, învățarea ne supervizată efectuează un
proces iterativ de analiză a datelor fă ră intervenț ia omului. Învăț area
nesupervizată este utilizată cu tehnologia de detectare a spam -ului prin e -mail.
Există prea multe variabile în e- mailurile legitime ș i spam, pentru ca un analist
să semnalizeze e- mailurile spam. În schimb, clasificatorii de machine learning

NECLASIFICAT

NECLASIFICAT
45 din 108

care se bazează pe grupar e și asociere, su nt aplicaț i pentru a identifica e –
mailurile nedorite.
Algoritmii de învățare ne supervizată segmentează datele î n grupuri de
exemple (clustere) sau grupuri de caracteristici. Datele neetichetate creează
valorile parametrilor ș i clasificarea datelor. În es ență, acest proces adaugă
etichete datelor, astfel încât să devină supervizat . Învățarea nesupervizată poate
determina rezultatul atunci când există o cantitate masivă de date. În acest caz,
dezvoltatorul nu cunoaș te contextul datelor analizate, astfel că etichetarea nu
este posibilă în acest stadiu. Prin urmare, învățarea nesupervizată poate fi
utilizată ca prim pas înaintea transimterii datelor către un p roces de învățare
supervizată.
În mod similar cu învățarea supervizată, acești algoritmi caută șabloane î n
date, cu toate acestea, diferența este că datele nu sunt deja înț elese. De exemplu,
în domeniul medical, colectarea unor cantități uriașe de date despre o anumită
boală poate ajuta practicanții să obțină o perspectivă asupra tiparelor
simptomelor și să le corel eze cu rezultatele de la pacienț i. Ar fi nevoie de prea
mult timp pentru a eticheta toate sur sele de date asociate cu o boală. Prin
urmare, o abordare de învățare nesupervizată poate ajuta la determinarea
rezultat elor mai repede decât o abordare de învățare supervizată .

4.1.3. Reinforcement learning

Reinforcement learning este un model de învățare comportamentală .
Algoritmul primeș te feedb ack din analiza datelor astfel încât utilizatorul să fie
ghidat la cel mai bun rezultat. Reinforcement learning diferă de alte tipuri de
învățare supervizată deoarece sistemul nu e ste antrenat cu setul de date eș antion.
Mai degrabă , sistemul învață prin încercări ș i erori. Prin urmare, o succesiune de
deciz ii de succes va duce la “întă rirea” procesului, deoarece rezolvă cel mai bine
problema propusă .
Una dintre cele mai comune aplicații de reinforcement learning este
robotica sau jocurile pe calculator. Luați exemplu necesităț ii de a antrena un
robot pentru a urca un set de scări. Robotul își schimbă abordarea în navigarea
pe teren în funcție de rezultatul acț iunilor sale. Când robotul cade, datele sunt
recalibrate, astfel încât scările sunt navigate diferit până când robotul este
antrenat prin încercare ș i eroare pentru a înțelege cum să urce scările. Cu alte
cuvinte, robotul învață pe baza unei succesiuni de acț iuni de succes. Algoritmul
de învățare trebuie să fie capabil să descopere o asociere între scopul de a urca scările cu success fără să cadă ș i succ esiunea evenimentelor care duc la rezultat.
Reinforcement learning este, de asemenea, algoritmul care este uti lizat
pentru conducerea automată a autoturismelor. În multe privințe, pregă tirea unei
mașini care se conduce singură este incredibil de complexa, deoarece există o

NECLASIFICAT

NECLASIFICAT
46 din 108

mulțime de obstacole potenț iale. Dacă toate autoturismele de pe stradă ar fi
autonome, încercarea și eroarea ar fi mai uș or de depăș it. Cu toate acestea, în
lumea reală, ș oferii umani pot fi adesea imprevizib ili. Chiar ș i cu acest scenariu
complex, algoritmul poate fi optimizat în timp pentru a găsi modalități de
adaptare la starea în care acț iunile sunt recompensate. Una dintre cele mai
ușoare căi de a te gândi despre reinforcement learning este modul în care un
animal este antrenat să execute diferite acț iuni bazate pe recompense. Dacă
câinele primește o recompensă de fiecare dată când execută o comandă, el va
executa această comandă de fiecare dată.

4.1.4. Rețele neuronale și învățarea profundă (Neural
networks a nd deep learning)

Învăț area profu ndă este o metodă specifică de ma chine learning care
incorporează rețele neuronale în straturi succesive pentru a învăța din date î ntr-
un mod iterativ. Învăț area profundă este utilă în special atunci când se încearcă
învățarea ș abloanelor din date nestructurate.
Învățarea profundă – rețele neuronale complexe – sunt concepute pentru a
emula modul în care funcționează creierul uman, astfel încât computerele să
poată fi instruite pentru a face față abstracțiilor ș i probl emelor care sunt slab
definite. Un copi l în vârstă de cinci ani poate recunoaște cu ușurință diferența
dintre fața profesorului și fața gardianului ș colii. În schimb, calculatorul trebuie
să facă o mulț ime de lucruri pentru a afla cine este cine. Rețelele neuronale și
învățarea profundă sunt adesea folosite în aplicațiile de recunoaștere a imaginii
și a vorbirii.
O rețea neurona lă constă din trei sau mai multe straturi: un strat de intrare,
unul sau mai multe straturi ascunse și un strat de ieș ire. Datele sunt introduse
prin stratul de intrare. Apoi, datele sunt modificate în stratul ascuns și straturile
de ieș ire pe baza weight -urilor aplicate acestor noduri. O rețea neuronală tipică
poate fi compusă din mii sau chiar milioane de noduri simple de p roces are care
sunt interconectate. Termenul de învățare profundă (deep learning) este folosit
atunci când există mai multe straturi ascunse într -o rețea neuronală . Folosind o
abordare iterativă, o rețea neuronală se reglează continuu ș i face deducți i până la
atingerea unui anumit punct de oprire.
Învăț area profundă este o tehnică de machine learning care utilizează
rețele neuronale ierarhice pentru a învăța dintr -o combinație de algoritmi
superviza ți și ne superviza ți. Învățarea profundă este deseori numită o sub –
disciplină de machine learning. De obi cei, învățarea profundă învață din date
neetichetate ș i nestructurate. În timp ce învățarea profundă este foarte
asemănatoare cu cea a unei rețele neuronale tradiț ionale, a ceasta va avea mult

NECLASIFICAT

NECLASIFICAT
47 din 108

mai multe straturi ascunse. Cu câ t este mai complexă problema, c u atâ t vor fi
mai multe straturi ascunse în model. [26]

4.2. Importanța utilizării tehnicilor de machine learning
în analiza datelor electronice

În prim a parte a erei cibernetice, numărul de amenințări malware a fost
relativ scăzut, iar regulile simple create manual au fost adesea suf iciente pentru
a detecta amenințările. Creșterea rapidă a internetului ș i cre șterea ulterioară a
malware -ului au însemnat că regulile de d etectare create manual nu mai erau
practice și că au fost necesare noi tehn ologii avansate de protecț ie.
Companiile anti -malware au apelat la machine learning, o arie de
comput er science care a fost utilizată cu succes în recunoașterea, căutarea ș i
luare a deciziilor, pentru a spori detecția ș i clasificarea acestora. În prezent,
tehnicile de machine learning sporesc detectarea malware.

4.3. Detalie rea tehnicii alese pentru implementare

În această lucrare vom folosi un clasificator pentru a clasifica
documentele ca benigne sau maliț ioase. În urmatoarea secț iune se va prezenta
procesul de clasificare.

4.3.1. Procesul de clasificare

Procesul include o fază de antrenare și o fază de testare/operațională cum
este prezentat în figură.

Figura 4.3.1 Procesul de clasificare

NECLASIFICAT

NECLASIFICAT
48 din 108

4.3.1.1. Faza de antrenare

Obiectivul fazei de antrenare este de a învăța un clasificator, adică să
dobândească experiența E, astfel încât să poată î ndeplini sarcina de clasificare T
cu o performanță bună P. Ca intrare în această fază avem datele de intrare pentru
antrenare. Aceste date de intrare pot fi de mai multe feluri. În cazul acestui
proiect datele de intrare sunt documente de tip PDF, Word, XLS, text sau
imagini. Pentru faza de antrenare a unui clasificat or, datele de intrare trebuie să
fie etichetate cu clasa de ieșire corectă. [3]
Datele de intrare brute pot fi într -o formă care nu este adecvată pentru a
extrage caracteris ticile direct, deci primul pas în faza de antrenare este pre-
procesarea. În etapa de preprocesare, obiectivul este de a curăț a datele și de a le
obține î ntr-o form ă care este potrivită pentru extragerea caracteristicilor.
Exemple de preprocesare: filtrarea zgomo tului, decodarea, decompresia,
îndepărtarea datelor în exces și aș a mai departe.
Urmă torul pas este extrager ea caracteristicilor. În acest pas, datel e sunt
căutate pentru un anumit set de caracteristici, iar atunci când se găsește o astfel
de caracteristică, fie este contorizată sau măsurată. De exemplu, existența
cuvântului “Hello” într -un text poate fi numărat ă sau distanța dintre două
obiecte dintr -o imagine poate fi măsurată . Ieșirea pasului de extragere a
caracteristicilor este un v ector de caracteristici, o listă a caracter isticilor cu
valorile corespunzătoare.
Al treilea pas este etapa de postprocesare. Aici se efectuează sarcini
precum selectarea caracteristicilor ș i normalizarea. Astfel de sarcini sunt
efectuate pe datele de intrare pentru a fi mai potrivite pentru algoritmul de
învățare (normalizare) și pentru a vă asigura că sunt introdus e numai datel e
relevante (selecț ia caracteristicilor) .
În cele din urmă, datele sunt introduse în algoritmul de învățare, unde
pentru fiecare nouă informați e clasificatorul câștigă puțină experiență și, va avea
performanț e mai bune la clasificare. Î n a c e s t p a s p u t e m s pune că acest
clasificator î nvață ce fel de intrare aparține clasei A ș i ce t ip de intrare aparț ine
clasei B. Ca exe mplu, sarcina clasificatorului în acest proiect este de a clasifica
documentele de intrar e fie ca fiind benigne sau maliț ioase. Pentru fiecare
document procesat în faza de antrenare, acesta învață mai multe despre cum
arată un document benign și despre cum arată un document maliț ios și, astfel, își
va îmbunătăți performanț ele ca un clasificator pentru faza urmă toare.
Rezultatul etapei de antrenare este un clasificator învățat care va fi utilizat
în faza de testare/oper ațională .

NECLASIFICAT

NECLASIFICAT
49 din 108

4.3.1.2. Faza de testare/ operațională

Obiectivul fazei de testare este de a clasifica fiecare fișier primit la intrare
în clasa de ieșire corectă. Datele de intrare trebuie să fie etichetate, în aceeaș i
formă ca și î n faza de antrenare, însă etichetele de intrare nu vor mai fi furnizate
clasificatorului, deoarece este sarcina clasificatorului de a prezice clasa noilor
date.
La fel ca î n faza de ant renare, da tele de intrare brute trebuie să fie
prepr ocesate, trebuie extrase aceleași caracteristici ș i treb uie efectuată aceeași
prelucrare ulterioară. Dacă aceiași pași nu se efectuează în faza de testare, ca și
în faza de antre nare, clasificatorul nu va funcționa aș a cum a fost proiectat sau
poate nu va funcț iona deloc.
În etapa de clasificare, clasificatoru l antrenat procesează vectorul d e
caracteristici de la intrare și, pe baza experienț ei sale din faza de antrenare ,
prezice eticheta clasei de ieș ire. Eticheta cl asei prezise este apoi comparată cu
eticheta reală a datelor de intrare. Pot fi apoi calculate performanțele pentru a
evalua acurateț ea clasificatorului.
În cazul în care performanț ele clasificatorului sunt satisfăcătoare, acesta
poate fi pus în funcț iune. Faza operațională este exact aceeași cu faza de testare,
cu excepția faptului că nu mai exist ă etichete. Clasificatorul trebuie să -și
îndeplinească adevarata sarcină de clasificare a datelor care nu au fost clasificate
niciodată î nainte. [3]

4.3.1.3. Măsurarea performanț ei

Atunci când un clasificato r este instruit pentru o sarcină, performanța sa la
această sarcină trebuie să fie măsurată pentru a determina dacă poate fi folosit.
În această secț iune se va prezenta strategia de măsurare numită valid are
încrucișată (cross -validation) ș i unele dintre cele mai utilizate tehnici de
măsurare a performanț ei des crise î n [28].

• Validare încrucișată (cross -validation)

După cum am văzut, când vrem să testăm performanța unui clasificator,
trebuie să avem un set de da te etichetate pentru antrenare ș i un set de date
etichetate pentru testare. Modul naïve de mă surare a performanței este atunci
când se î mpar te setul complet de date pe jumătate ș i se folosește jumă tate pentru
instruire, iar cealaltă jumăt ate pentru testare.
Cu toate acestea, eș antioane le de date etichetate reprezintă o resursă rară
și într -adevăr am dori să folosim toate eș antioanele atât pentru instruire cât și

NECLASIFICAT

NECLASIFICAT
50 din 108

pentru testare. Dar antrenarea și testarea utilizând același set de date nu
reprezintă o soluție validă ș i vor oferi rezultate de performanță prea bune.
Pentru a rezolva această dilemă, folosim o metodă științ ifică cunoscută
sub numele de validare încrucișată (cross -validation) sau, mai exact, k -fold
cross -validation. În k-fold cross -validation se împarte întreg setul de date î n k
subseturi. Antrenarea este apoi efectuată pe k- 1 subseturi, iar testarea este
efectuată pe subsetul ră mas. Antrenarea și testarea se efectuează de k ori, iar de
fiecare dată se testează cu un subset diferit. De fiecare dată se calculează
măsurătorile de performanță și după toate cele k iterații se efectuează media
pentru a obț ine valoarea totală a măsurătorilor de performanță. [28]
În mod obiș nuit, este ales k = 10, ceea ce înseamnă că setul de date este
împărțit în 10 subseturi . Pentru fiecare iterație se utilizează 9 subseturi (90% din
eșantioane) pentru antrenare, iar ultimul (10% din eșantioane) se utilizează
pentru testare.

• Sensibilitatea

Sensibilitatea (Sensitivity) este o măsură de performanță numai pentru
problemele de două clase. Este definită ca frecvența relativă a probelor pozitive
clasificate corect. În securitat ea informatică aceasta este adesea menționată ca
True Positive Rate (TPR).

Figura 4.3.1.3.1 Calculul performanț ei pentru datele pozitive clasificate corect
[3]

• Specificitate

Specificitatea (Spec ificity) este, de asemenea, o măsură de performanță
numai pentru problemele de două clase. Se definește ca fiind frecvența relativă a
probelor negative clasificate corect. În securitatea informatică, aceasta este
adesea menționată ca True Negative Rate (TNR).

Figura 4.3.1.3.2 Calculul performanț ei pentru dat ele negative clasificate corect
[3]

NECLASIFICAT

NECLASIFICAT
51 din 108

• Acurateț ea

Acurateț ea (Accuracy), numită ș i rata de succes. Aceasta se definește ca
numă rul de probe clasi ficate corect (ncorr) supra numă rul total de probe (n).

Figura 4.3.1.3.3 Acurateț ea clasificatorului [3]

• Matricea de confuzie

Matricea de confuzie (Confusion m atrix) este o matrice care arată
numă rul TP (True Positive) , TN (True Negative) , FP (False Positive) și FN
(False Negative) într-un mod foarte informativ. Din matricea de confuzie este
ușor de citit câ t de precis este clasificatorul ș i unde întâmpină probleme.

Figura 4.3.1.3.4 Matricea de confuzie

• Curbe ROC (Receiver Operating Characteristic)

Curbele ROC arată relația dintre sensibilitatea ș i specificitatea
clasificatorului. Pe axa orizontală este reprezentată rata fals po zitivă (False
Positive Rate = 1 – specificity) , pe axa verticală este reprezentată rata reală
pozitivă (True Positive Rate = sensitivity) . Un clasificator este apoi reglat prin
modificarea prag urilor pentru valorile de pe axă . Clasificatorul ideal este cel în
care rata reală pozitivă (True Positive Rate) este 1 pentru toate valorile ratei
false pozitive (False Positive Rate) , deși acest lucru nu este niciodată atins
pentru probleme complexe . În schimb, curba este optimizată în funcție de
problema întâ mpinat ă, în funcț ie de ce este mai critic, fals positive sau fals
negative.

NECLASIFICAT

NECLASIFICAT
52 din 108

Figura 4.3.1.3.5 Curba ROC [3]

Calitatea clasificatorului este reflectată î n zona de sub curba ROC (AUC).
Calitatea poate fi împărțită î n :
 0.9-1 = Excelent
 0.8-0.9 = Bun
 0.7-0.8 = Rezonabil
 0.6-0.7 = Slab
 0.5-0.6 = Inutil

4.3.1.4. Caracteristici

Algoritmii de machine learning iau ca element de intrare ceea ce numim
“vectori de caracteristici” (“feature vectors”). Un vector de caracteristici x
conține un numă r de caracteristici xi. Acesta poate fi reprezentat î n mai multe
forme, cum ar fi “vecto r form” de forma “caracteristică -valoare”. Vectorii de
caracteristici de forma vector arată aș a:

rotund,portocaliu,156,portocală
rotund,verde,85,mă r

Iar în forma caracteristică- valoare, vectorii pot arăta astfel:
forma:rotund,culoare:portoca liu,greutate:156,clasa:portocală
forma:rotund,culoare:verde,greutate:85,clasa:mă r

Sintaxa exactă pentru vectori va varia pentru fiecare implementare a
metodei de machine learning.

NECLASIFICAT

NECLASIFICAT
53 din 108

Valorile caracteristicilor pot fi de trei tipuri:
 Numere cu valoare reală (greutate, înălț ime, lungime );
 Numere discrete (frecvență)
 Valori categorice (culoare: roș u, alb, albastru; forma:rotund,
pătrat, oval)
În exemplele de mai sus am inclus eticheta clasei ( măr/portocală ) pentru
vectorul de caracteristici. Aceasta este cunoscută ca target -ul de ieșire și este
utilizată pentru antrenarea al goritmului de machine learning și testarea
performanț ei acestuia. [3]

4.3.1.5. Extragerea de caracteristici (Feature extraction)

Pentru a crea vectorii de caracteristici, trebuie mai întâi să se decidă ce
caracteristici su nt relevante pentru sarcina de învățare și apoi să se facă
măsură torile necesare pentru a determina valor ile caracteristicilor pe un număr
suficient de date. Prin dat e, înțelegem obiectele despre care vrem ca algorimul
să prezică ceva. De exemplu, fructele din exemplul de mai sus sau documentele
cu care vom lucra î n această lucrare. Numă rul suficient de date va varia de la un
caz la altul și estimarea creșterii performanței care rezultă din adă ugarea mai
multor date de intrare pentru antrenare este o sarcină dificilă .
În general, putem spune că un set mai mare de d ate de intrare este mai
bun, atâta timp cât nu are efecte negative grave asupra resurselo r computaț ionale
necesare pentru antrenarea algoritmului. În mod ideal, eșa ntioanele ar trebui
distribuite uniform pe toate clasele de ieșire, însă acest lucru nu este î ntotdeauna
posibil.
Ce caracter istici sunt relevante se bazează adesea pe cunoștințele
experț ilor umani care lucrează în domeniu și îndeplinesc sarcina cerută. Aceste
date selectate de un expert po t servi drept punct de plecare înainte de a efectua o
analiză suplimentară a performanței caracteristicilor și a selecț iei automate a
caracterist icilor.
Pentru a măsura valorile caracteristicilor , se poate utiliza orice unealtă
adecvată, de la măsurători manuale, folosind o riglă, la măsurători sofisticate ș i
automatizat e, folosind computere cu aplicaț ii specializate.

4.3.1.6. Selectarea caracteristicilor (Feature Selection)

Selectarea caracteristicilor înseamnă pur ș i simplu selectarea
caracteristicil or relevante pentru sarcina de învățare propusă . Selectarea
caracteristicilor se face manual ș i calitatea caracteristicilor selectate depinde
foarte mult de cunoștinț ele ex perților. Cu toate acestea, oamenii pot eșua ș i pot
introduce caracteris tici care nu au nici o importanță sau chiar au efe cte adverse

NECLASIFICAT

NECLASIFICAT
54 din 108

asupra sarcinii de învăț are. Prin eliminare a caracteristicilor irelevante și
redundante, putem îmbunătăț i performanț a d e c lasificare ș i putem reduce
complexitatea calculelor. Pentru selectarea automată a caracteristicilor, se aplică
frecvent wrappere ș i modele de filtrare din machine learning. Modelul wrapper
evaluează caracteris ticile selectate prin perform anța algoritmului d e învăț are.
Prin urmare, metoda wrapper necesită mult timp și resurse de calcul pentru a
găsi cele mai bune subseturi de caracteristici. Modelul de filtru analizează
caracteristicile statistice ale unui set de date direct fără a implica nici un
algoritm de învăț are.
Există mai mulț i algo ritmi pentru selectarea automată a caracteristicilor ,
în această lucrare vom folosi doi algoritmi : Golub -score și funcț ia
.feature_importances_ din libraria Scikit -learn pentru limbajul de prog ramare
Python. Golub -score este independent de algoritmul de clasificare ales iar
.feature_importances calculează importanț a caracteristicilor pentru algoritmul
Random Forests.

Metoda de filtrare Golub -score

Algoritmul Golub -score utilizează măsurări statistice “golub -score”
pentru a clasific a caracteristicile prin relevanța lor pentru sarcina de î nvățare.
Golub- score poate fi exprimat ca:

Figura 4.3.1.6 Relaț ia pentru calculul Golub- score [3]

Unde 𝑥𝑥𝑖𝑖 reprezintă caracteristica i. µ𝑖𝑖+ și 𝜎𝜎𝑖𝑖+ reprez intă media și deviaț ia
standard pentru caracteristica i din to ate datele de intrare care aparț in clasei +.
Iar µ𝑖𝑖− și 𝜎𝜎𝑖𝑖− reprezintă media și deviaț ia standard pentru caracteristica I din
toate datele de intrare care aprț in clasei -.
F(𝑥𝑥𝑖𝑖) va calcula scor ul pentru fiecare caracteristică î n parte. Apoi se vor
păstra caracteristicile cu cel mai mare scor.
Principalul deza vantaj al acestei metode este că valorile scorului sunt
calcula te pentru fiecare caracteristică individual, fără a fi luate în vedere
dependenț ele dintre ele. De asemenea, această abordare poate produce rezultate
mai bune pentru un clasifi cator ș i mai slabe pentru altul, fiind independent de
algoritmul ales. [3]

NECLASIFICAT

NECLASIFICAT
55 din 108

Feature importances

Libraria Scikit -learn pune la dispoz iție pentru algoritmul de cl asificare
Random Forests o funcț ie foarte folositoare care se numeș te
feature_importances_.
Arborii decizionali ș i metodele care sunt construite pe baza lor lucrează
prin împărțirea datelor în subseturi care aparț in cel mai mult u nei clase. Arborele
va continua să construiască diferite subseturi până când înțelege și reprezintă relația variabilelor cu ț inta. Arborii pot învăț a din greșelile lor, ajustându -se în
mod iterativ pentru a clasifica mai bine datele. Toate metodele care fo losesc
arbori decizionali își calculează subsetur ile prin determinarea matematică a
subseturilo r care vor ajuta cel mai mult să distingă clasele. Deoarece aceasta este
metoda lor, instanț ele sklearn ale acestor modele au un atribut
.feature_importances_ care returnează o matrice a importanței fiecărei
caracteristici.

4.3.1.7. Clasificatorul utilizat în acest proiect

Am comp arat doi dintre cei mai utilizați algoritmi de clasificare și anume
Random Forests ș i Support Vector Machine pentru a selecta clasificatorul optim
care să detecteze documentele maliț iose. Algoritmul Random Forests a fost
selectat datorită capacității sale eficiente de clasificare, performanțelor puternice
și ușurinței utilizării. Pentru a înțelege cum funcționează acest algoritm, mai întâi tre buie să înțelegem cum funcționează arborii decizionali deoarece stau la
baza algoritmului Random Forests. Clasificatorul ales es te implementat cu
ajutorul libră riei de machine learning Scikit -Learn î n limbajul de programare
Python.

Arbori Decizionali (Decision Trees)

Un arbore decizional este un model structural de tip arbore care are
frunze, care reprezintă clasificări sau decizii, și ramuri, care reprezintă conjuncț iile caracteristicilor care conduc la aceste clasificări. Un arbore
decizional b inar este reprezentat în figura 26, unde C reprezintă nodul rădăcină
al arborelui, Ai (i=1,2) sunt frunzele (nodurile terminale) ale arborelui ș i Bj
(j=1,2,3,4) sunt ramuri (punctul de decizie) al arborelui.
Clasificarea arborilor unui vector de intrare s e realizează prin traversarea
arborelui care începe de la nodul rădăcină și se termină la frunză. Fiecare nod al
arborelui calculează o inegalitate bazată pe o singură variabilă de intrare. Fiecare
frunză este atribuită unei anumite clase. Fiecare inegalitate care este utilizată
pentru a împărți spațiul de intrare se bazează numai pe o variabilă de intrare.

NECLASIFICAT

NECLASIFICAT
56 din 108

Arbori i decizionali liniari sunt asemănă tori arbori lor de decizie binari, cu
excepția faptului că inegalitatea calculată la fiecare nod are o formă liniară
arbitrară care poate depinde de mai multe variabile. Cu diferitele selecț ii ale
criteriilor de divizare, se dezvoltă arbori de clasificare și regresie ș i alte modele
de arbori.
Așa cum este ilustrat în figura 26, un arbore decizional depinde de
regul ile if-then, dar nu necesită parametrii și nu există valori. Această structură
simplă și interpretabilă permite arborilor decizionali să rezolve probleme care au
atribute de mai multe tipuri. Arborii decizionali pot ges tiona, de asemenea,
valori lipsă sau date care conț in zgomot. [29]

Figura 4.3.1.7.1 Arbore decizional

Random Forest

Algoritmul Random Forest este cea mai populară metodă de clasificare
bazată pe ansambluri bagging (Bootstrap Aggregation) . Bagging este o metodă
simplă și foarte puternică care se bazează pe deciziile unui ansamblu, deoarece
ține cont de principiul conform că ruia un grup de „c lasificatori slabi” pot forma,
împreună , un clasificator puternic. Ideea bootstrap- ului este să se creeze
subseturi cu date alese aleator din setul de date original. Un detaliu important
este că se poate alege același eș antion de mai multe ori. Metoda bagging este
ilustrată în figura 27. Algoritmul Random Forest constă din mai mulț i arbori
decizionali. Decizia algoritmulu i Random Forest este determinată de voturile
date de fiecare arbore. Fiecare arbore decizional este construit prin clasificarea
subseturilor de bootstra p ale datelor de intrare utilizâ nd un algoritm bazat pe
arbori. Apoi, fiecare arbore va fi folosit pentru clasificarea datelor de testare.
Fiecare arbore trebuie să eticheteze toate datele de testare. Această etichetă este
numită vot. În cele din urmă , ansamblul de arbori (pă durea) decide rezultatul

NECLASIFICAT

NECLASIFICAT
57 din 108

clasificării datelor de testare după colectarea voturilor primite de la fiecare
arbore.

Figura 4.3.1.7.2 Bagging = B ootstraping + Agg regation

Să analiză m algoritmul Random Forests . Având o pădure alcătuită din K
arbori {𝑇𝑇1,…, 𝑇𝑇𝐾𝐾}, un vector aleator θ𝑘𝑘 este generat pentru arborele k, k =
1,…,K. Vectorii θ𝑘𝑘 sunt vectori random pentru modelarea arborelui. Acești
vectori sunt definiți în construcț ia arborelui. De exemplu, în selecția aleatore,
acești vectori sunt compuși din întregi random selectați aleat or din {1,…,N}
unde N este numă rul cu care se divide setul de date. Folosind setul de date
pentru antrenar e și vectorii θ𝑘𝑘, un arbore crește și exprimă un vot pentru cea
mai populară clasă la intrarea x. Prezentă m arborele de clasificare k ca ƒ(x, θ𝑘𝑘) și
obținem o pădure aleatoare formată din colecț ia acelor arbori, { ƒ(x, θ𝑘𝑘) }, k =
1,…,K.
Acura tețea algoritmului Random Forest depinde de puterea arborilor
individuali și de dependenț ele dintre arbori. Mai mult decât atât, alg oritmul
Random Forest utilizează bootstrap pentru a evita bias -urile în construirea
arborilor, astfel încât validarea încruc ișată (cross validation) nu este necesară în
antrenare ș i testare. Bias-ul este tendința algoritmului de a învăța în mod
consecvent lucrul greșit prin fap tul că nu ia în considerare toate informaț iile din
date (underfitting). Cu toate acestea, algoritmul R andom Forest suferă de un

NECLASIFICAT

NECLASIFICAT
58 din 108

dezechili bru al claselor datorat maximizării preciziei de predicție î n algoritmul
său. Metodele care au la bază arborii au o var iație mare. Structura ierarhică a
arborilor poate produce un rezultat instabil. Media mai multor arbori, de
exemplu folosind bagging, poate î mbun ătăți stabilitat ea ansamblului
algoritmilor de învățare. [29]
5. Proiectarea și implementarea practică

5.1. Arhitectura sistemului

Conceptual sistemul nostru constă î n sandbox- ul Cuckoo care este util izat
împreună cu software -ul de virtualizare VirtualBo x pentru analiza
comportamentală a documentelor, scriptul Python care extrage caracteristicile
comportamen tale din raportul JSON generat în urma analizei sandbox -ului și î n
modelul de clasificare antrenat p entru a clasifica binar documentele în benign
sau maliț ios. Toate componentele de mai sus f ac parte din faza operațională,
reprezentată î n figura 28, adică faza î n care un document necunoscut e ste
analizat pentru a fi clasificat într-una din cele două clase (maliț ios/benign) .

Figura 5.1.1 Faza Operațională

NECLASIFICAT

NECLASIFICAT
59 din 108

Pentru a se obț ine modelul de clasificare antrenat folosit la faza
operațională, este nevoie de o altă etapă numită faza de antrenare/testare,
reprezentată în figura 29. La această fază, î n plus fa ță de faza operațională, apare
etapa de salvare a tuturor caracteristicilor extrase din do cumentele de
antrenare/testare într -un fiș ier CSV care apoi va fi citit pentru etapa de antrenare
a modelului de c lasificare ales care are la bază algoritmul Random Forests.

Figura 5.1.2 Faza de antrenare/testare

Toate etapele specif icate mai sus sunt incorporate într -o aplicație scrisă î n
limbajul de programare Python care vine și cu o interfață grafică dezvoltată î n
PyQt. Înainte de a î ncepe utilizarea sandbox -ul C uckoo, este necesară
configurarea sistemului care va fi prezentată în secț iunea 5.3.

NECLASIFICAT

NECLASIFICAT
60 din 108

5.2. Aplicațiile open source utilizate

Metoda propusă constă î n utilizarea instrumentelor FOSS (Free and open-
source software) indicate î n tabelul 5.2 pentru a efectua o ana liză automată a
documentelor.

Nume Descriere
Cuckoo Sandbox Sistem avansat, 100% ope n-source pentru
analiza automată a malware -ului.
VirtualBox Software de virtualizare
Scikit -learn Instrument de machine learning pentru
limbajul de programare Python
Tabel 5.2 Lista cu toate instrumentele open- source utilizate

Sandbox -ul Cuckoo a fost selectat datorită faptului că este un proiect
gratuit , cu licență deschisă, activ dezvoltat, care poate fi fo losit pentru
extragerea automată a datelor comportamentului dinamic din execuția fișierelor
în cadrul unui mediu controlat.
Cuckoo este sc ris complet î n limbajul de p rogramare Python. Acesta
suportă urmatoarele sisteme de operare:
• Sistemul host: GNU/Linux (de preferat Debian sau Ubuntu), de
asemenea testat pen tru a rula în Windows 7 ș i Mac OS X.
• Sistemul guest (sandbox): Windows (Windows XP și Windows
7, recomandat pe 64 biți), Mac OS X, GNU/Linux ș i Android.

Permite:
• Analizează multe fiș iere malware diferite ( executabile, documente
care conț in exploit- uri, applet -uri Java), precum și site -uri web
malițioase, î n mediul virtual Windows, OS X, Linux sau Android.
Urmărește apelurile de sistem ș i compo rtamentul general al
fișierului;
• Analizează traficul de rețea, chiar și atunci când este criptat;
• Efectuează o analiză avansată a memoriei sistemului virtual infectat
cu suport integrat pentru Volatility.
Poate returna urmatorul tip de rezultate:
• Apelurile de sistem efectuate de toate procesele generate de
malware;
• Fișierele create, șterse și descărcate de către malware in timpul execuț iei;
• Dump -urile de memorie ale proceselor malware;
• Traseele traficului de rețea î n format PCAP;

NECLASIFICAT

NECLASIFICAT
61 din 108

• Capturi de ecran realizate î n timpul exeuctării programului
maliț ios.
Oracle VirtualBox a fost selectat ca mediu de virtualizare, deoarece este
un softwa re open- source utilizat pe scară largă ș i suportat de sandbox -ul
Cuckoo. Acest sandbox permite trimiterea de documente pentru a fi analizate.
Rezultatele analizei sunt stocate în formatul Ja vascript Object Notation (JSON).
Pentru a analiza o cantitate mare de date obț inute din software -ul Cuckoo, a fost
selectat instrumentul Scikit- learn.
Scikit -learn (fostul scikits.learn) este o bibliotecă de machine learning
pentru limbajul de programare Python. Dispune de algoritmi de clasificare,
regre sie și clusterizare, inclusiv cei testați în acest proiect SVM (support vector
machines ) și Random Forests.

5.3. Configurare Cuckoo Sandbox
5.3.1. Arhitectura

Acest software pentru analiza automată de malware este alcătuit din două
elemente principale: Cuckoo Host și Cuckoo Agent. Pentru sistemul gazdă am
ales sistemul de operare Ubuntu 18.04, unde se vor configura toate fișierele
corespunză toare pentru utilizarea sandbox -ului cuckoo ș i de unde se vor trimite
docume ntele pentru analiza comportamentală .
Cuckoo Agent , mașina virtuală de Windows 7, reprezintă mediul izolat
unde se vor analiza compor tamental toate documentele. Inițial se va face o
captură a stării întregului sistem de operare (Windows 7) care se va comp ara cu
starea î ntregului sistem de operare de după execuț ia documentului pentru a se
genera raportul JSON cu pr ivire la analiza comportamentală .

Figura 5.3.1 Arhitectura Cuckoo Sandbox

NECLASIFICAT

NECLASIFICAT
62 din 108

5.3.2. Configurarea Host -ului

În sistemul de operare Ubuntu 18.04 deschidem Terminalul și rulă m
urmatoarele comenzi:

 Instalare GIT :
$ sudo apt- get install git – y

Componentele host -ului Cuckoo sunt scrise în Python, deci este necesar
să avem instalată o versiune apropiată de Python. La acest moment există suport
pentru Python 2.7. [32]
 Următoarele pachete software sunt necesare pentru ca sandbox -ul
Cuckoo să funcționeze corespunzător:
$ sudo apt- get install python python- pip python- dev libffi- dev libssl- dev
$ sudo apt- get install python- virtualenv python- setuptools -y
$ sudo apt- get install libjpeg- dev zlib1g- dev swig –y

 Pentru a folosi interfața Web, MongoDB este necesar (în acest proiect
se folosește Rest A PI-ul Cuckoo care este un server ):
$ sudo apt- get install mongodb – y

 Pentru a folosi baza de date PostgreSQL ( în acest proiect am folosit
baza de date sqlite care este default ):

$ sudo apt- get install postgresql libpq- dev –y

5.3.2.1. Software de virtualizare

Am ales să folosim VirtualBox, acestea sunt comenzile pentru a instala
ultima versiune de VirtualBox pe mașina Ubuntu.

$ echo deb http://download.virtualbox.org/virtualbox/debian xenial contrib
| sudo tee – a /etc/apt/sources.list.d/virtualbox.list
$ wget – q https://www.virtualbox.org/download/oracle_vbox_2016.asc – O- |
sudo apt- key add –
$ sudo apt- get update
$ sudo apt- get install virtualbox

NECLASIFICAT

NECLASIFICAT
63 din 108

5.3.2.2. Instalare Volatility

Volatility este un tool opțional pentru o investigație detaliată a dump –
urilor de memorie. În combinație cu Cuckoo, acesta poate oferi, în mod automat,
o vizibilitate suplimentară în modificările sistemului de operare, precum și
detectarea prezenței tehnologiei rootkit.
Pentru a funcționa corect, Cuckoo necesită cel puțin versiunea de
Volatility 2.3, dar recomanda ultima versiune:
$ sudo git clone
https://github.com/volatilityfoundation/volatility

Figura 5.3.2.2 Instalare Volatility

5.3.2.3. Instalare M2Crypto

Librăria M2Crypto este acceptată numai daca SWIG este instalat.
SWIG este un instrument de dezvoltare software care conectează
programele scrise în C și C++ cu o varietate de limbaje de programare de nivel
înalt.
$ sudo apt- get install swig

Dacă SWIG este prezent pe sistem, putem instala M2Crypto:

$ sudo pip install m2crypto==0.24.0

5.3.2.4. Instalare Cuckoo

Pentru a instala ultima v ersiune de Cuckoo este recomandat să se facă
upgrade la librăriile pip și setuptools pentru a nu întâmpina probleme la instalarea Cuckoo. [32]

$ sudo pip install – U pip setuptools
$ sudo pip install – U cuckoo

Cuckoo mai necesită biblioteca de dezasambla re diStorm3:

$sudo pip install distorm3

NECLASIFICAT

NECLASIFICAT
64 din 108

5.3.2.5. Cuckoo Working Directory

În acest director se găsesc toate fișierele configurabile pentru Cuckoo.
Configurare CWD:

$ sudo mkdir /opt/cuckoo
$ sudo chown cuckoo:cuckoo /opt/cuckoo
$ cuckoo –cwd /opt/cuckoo

La ultima comandă executată ne va apărea o eroare deoarece librăria
cryptography nu este versiunea corespunzătoare.

Figura 5.3.2.5 Eroare cryptography

Pentru a rezolva această problemă trebuie să aducem pyOpenSSL, care
este un wrapper Python peste lib raria OpenSSL, la ultima versiune.

$ pip install – upgrade pyopenssl

După ce am făcut upgrade -ul, trebuie să executăm din nou comanda:

$ cuckoo –cwd /opt/cuckoo

5.3.3. Configurare Internet pentru Analiză

Configurare host -only network folosind VirtualBox pentru Cuckoo
Sandbox. Această metodă este preferată în locul celei de “bridget networking”
deoarece este nevoie de un singur IP extern.
Pentru început trebuie să cream o interfață de tip “host -only” pe host:

Figura 5.3.3.1 Interfaț a de tip “host -only”

Figur a 5.3.3.2 Configurare interfata vboxnet0

Pentru ca Mașina Virtuală să poată accesa internetul trebuie să adaugăm
urmatoarele reguli iptables care vor înainta pachetele prin host către internet.

NECLASIFICAT

NECLASIFICAT
65 din 108

Figura 5.3.3.3 Adaugare reguli iptables

Aceste reguli nu vor face packet forwarding pâna când IP forwarding nu
este explicit activat în kernel. Pentru a face acest lucru există o metodă
temporară care rezistă numai până când sistemul este închis, și o metodă
permanentă care rezistă și după ce mașina este închisă. Executăm ambele
metode:

$ echo 1 | sudo tee – a /proc/sys/net/ipv4/ip_forward
$ sudo sysctl – w net.ipv4.ip_forward=1

Regulile de IPtables nu sunt persistente, deci pentru a păstra regulile
trebuie să folosim un script sau să instalăm “iptables -persistent”:
(La întrebările care apar selectăm YES si apoi NO)

Figura 5.3.3.4 Instalare “iptables -persistent”

Mergem în setările Mașinii Virtuale de Windows 7 și adăugă m interfata
“vboxnet0”.

5.3.4. Pregă tirea Guest -ului

Pentru început trebuie să instalăm prin intermediu l software -ului
VirtualBox o mașină virtuală de Windows 7.

5.3.4.1. Configurare Internet:

Trebuie configurat internetul pentru ca Host -ul și Guest -ul să poată
comunica. Se vor folosi numai adrese IP statice pentru Guest, deoarece Cuckoo
nu suportă DHCP. [32]

NECLASIFICAT

NECLASIFICAT
66 din 108

Debifăm “Internet Protocol Version 6” și selectăm Ipv4 in “Local Area
Connection Proprieties”.
Trebuie să ne asigurăm că adresa de Gateway este adresa IP a Server -ului
Cuckoo.

Figura 5.3.4.1 Configurare Ip

5.3.5. Cerințe Cuckoo

Pentru a putea rula Cuckoo într -un mod corespunzător va trebui să instalăm
câteva programe și librării necesare. [30]

5.3.5.1. Instalare Python

Python este necesar pentru componenta Cuckoo guest (analizatorul)
pentru a funcționa corespunzător. Se va instala Python 2.7.

5.3.5.2. Python Pillow

Este folosit pentru a capta screenshot -uri cu ecranul Windows -ului pe
timpul analizei.

NECLASIFICAT

NECLASIFICAT
67 din 108

Figura 5.3.5.2 Instalare Python Pillow

După ce Pillow a fost instalat, este necesar un Restart.

5.3.5.3. Instalarea Agentului

Se copiază agentul de pe host pe desktop- ul ma șinii virtuale de Windows
7 din folderul “cuckoo/agent”.

5.3.5.4. Setări Windows

Unul dintre cele mai importante lucruri de făcut este dezactivarea
Windows Firewall și Automatic Updates. Motivul este deoarece pot afecta
comportamentul malițios.
Trebuie să mai setăm când să fim notificaț i despre schimbari î n sistem la
“Never notify”.
Adăugăm mai mulți useri pentru ca virusul să nu detecteze că este testat
într-un mediu virtual izolat. [30]

5.3.5.5. Programe Suplimentare

În funcție de ce fișiere dorim să analizăm va trebui să instalăm programe
adiționale.
Instalăm browser -ul Google Chrome , Adobe Reader 9.5 si Office Word
deoarece pentru acest proiect se vor analiza documente :

NECLASIFICAT

NECLASIFICAT
68 din 108

5.3.6. Salvarea Guest -ului

Pornim Agentul care a fost copiat pe desktop. După ce agentul a fost
pornit, creăm un snapshot cu numele “Snapshot” de care host -ul se va folosi
pentru analiză:

Figura 5.3.6.1 Creare snapshot cu starea i nițială a sistemului de operare

Apoi închidem Mașina Virtuală:

Figura 5.3.6.2 Inchidere mașină virtuală

5.3.7. Configurare a Fișierelor din Cuckoo Host:

Cuckoo se bazează pe câteva fișiere de configurare principale:

Figura 5.3.7 Fișiere de configurare Cuckoo

5.3.7.1. memory.conf

Figura 5.3.7.1.1 Deschidere fișier configurare memory.conf

NECLASIFICAT

NECLASIFICAT
69 din 108

În secțiunea de bază a fișierului “memory.conf” putem configura profilul
pentru Volatility și dacă dump -urile de memorie ar trebui să fie șterse dupa ce
au fost procesate (acest lucru salvează o mulțime de spațiu pe disc). Î n acest
fișier modificăm “guest_profile” cu denumirea sistemului de operare pe care l –
am ales pentru analiză și dacă vrem să salvam dump -urile de memorie sau
nu.[30]

Figura 5.3.7.1.2 Configurare fișier memory.conf

5.4. Integrare Cuckoo în aplicație

Dacă sandbox- ul Cuckoo a fost configurat cu succes, ne mutăm în
Cuckoo Working Directory. Î nainte de a executa comanda pentru p ornirea
sandbox- ului, trebuie să ne asigurăm că interfața virtuală “vboxnet0”
funcționează, altfel ne vor apărea erori.
Pentru a porni Cuckoo execută m comanda:
$ cuckoo – d
Trebuie să ne apară precum î n imaginea de mai jos:

Figura 5.4.1 Pornirea sandbox -ului Cuckoo

Pentru ca tot procesul de analiză al documentelor să fie automat, am
integrat sandbox -ul Cuckoo în aplicaț ia dezvolt ată prin intermediul unui se rver
de REST API pus la dispoziț ie de Cuckoo. Un REST API este o interfață a unei

NECLASIFICAT

NECLASIFICAT
70 din 108

aplicații (API) care utilizează cereri HTT P p en t ru a f ace GE T , P UT , P O ST ș i
DELETE pe date.
Pornim REST API -ul Cuckoo prin comanda:
$ cuckoo api
În mod implicit, se va lega serviciul pe localhost:8090.
Atunci când aplicaț ia de detectare a documentelor malițioase primeș te
unul sau ma i multe documente pentru analiză , li se extrage calea pentru a se
adăuga în lista de aș teptare pentru analiza compo rtamentală efectuată de
sandbox- ul Cuckoo. Acest lucru se îndeplineș te prin urmatoarea cerere către
REST API -ul Cuckoo:

Figura 5.4.2 Cerere pentru a adăuga un document în lista de aș teptare pentru
analiza comportamentală Cuckoo [32]

Dacă cererea a fost efectuată cu succes și documentul a fost adăugat în
lista de aș teptar e pentru analiza comportamentală, se returnează id-ul asignat
documentului.
În dezvoltarea aplicaț iei au mai fost folosite cereri pentru:
 returnarea fișierelor din listă alături de câteva detalii;
http://localhost:8090/tasks/list
 returnarea detaliilor asociate unui anumit id;
http://localhost:8090/tasks/view/id
 returnarea î ntregului raport JSON asociat unui anumit id;
http://localhost:8090/tasks/report/id
 ștergerea raportu lui împreună cu toate informaț iile din baza de date
despre un anumit id;
http://localhost:8090/tasks/delete/id

5.5. Setul de date pentru antrenare/testare

Pentru antrenarea ș i testarea cl asificatorului, a fost colectată o cantitate
relativ mare de documente benigne ș i maliț ioase. Documentele Word includ
formatul doc și docx, documentele XLS includ formatul xls și xlsx iar imaginile
includ formatul jpeg, png, bmp și gif. Tabelul 5.5 prezintă sursele documentelor
din colecția noastră.

NECLASIFICAT

NECLASIFICAT
71 din 108

Formatul Fișierului Fișiere Malițioase Fișiere Benigne Sursa
PDF 730 1000 Contagio Dump
Word 1514 879 Virus Total
Contagio Dump
Digital Corpora XLS 319 345
Imagini 171 235 Virus Total
Digital Corpora Text 1510 1203
Total 4244 3662 7906
Tabel 5.5 Sursele documentelor din colecția noastră

Fișierele colectate au fost apoi salvate în directoare diferite după fiecare
format și după clasificarea lor în benigne sau malițioase. Toate fiș ierele au fost
redenumite î n formatul: “Label_FormatFisier_index.fo rmat” utilizâ nd propriul
nostru script “rename.py ” din Anexa A (exemplu : “Benign_PDF_21.pdf”) .
De obicei, între 60 ș i 80% din setul de date este utilizat pent ru antrenarea
clasificatorului ș i restul pentru testare.

5.6. Extragerea caracteristicilor

Scopul este de a găsi caracteristici relevante ș i semnificative pentru
clasificarea docume ntelor ca benigne sau maliț ioase.
Vrem să detectăm automat dacă un document trimis este maliț ios pe baza
raport ului generat de analiza automată efectuată cu sandbox -ul Cuc koo. O parte
din valorile extrase în urma parsării rapoartelor pentru a fi utilizate ca ș i
caracteristi ci într-un model de clasificare sunt prezentate mai jos (primele trei
caracteristici sunt bazate pe cercetările din [31]) :

1.Number of dropped files
2.Number of accessed files
3.Number of accessed registry
4.Number registry read
5.Number file read
6.Number deleted registry
7.Number command line
8.Number directory created
9.Number registry written
10.Number file created
11.Number file written
12.Number dll loaded
13.Number file deleted
14.Number file recreated
15.Number file failed
16.Number file moved
Tabel 5.6.1 Caracte ristici comportamentale extrase

NECLASIFICAT

NECLASIFICAT
72 din 108

Pentru fiecare tip de format mai sunt adăugate sau eliminate anumite
caracteristici, la documentele de tip Microsoft Office se adaugă o caracteristică
semnificativă pentru rezultatul de clasificare, aceasta reprezintă numărul de
macro -uri detectate.
În secțiunea următoare vom folosi selecția automată a caracteristicilor
pentru a determina care dintr e acestea sunt cu adevă rat semnificative.
Caracteristicile sunt extrase din rapoartele documente lor folosind propriul
script „extract_features_csv.py ” din Anexa B. Acest script extrage
caracteristicile comportamentale de mai sus din raportul JSO N generat de
sandbox- ul cuckoo și le exportă î ntr-un forma t CSV pentru a putea fi citite î n
etapa de antrenare a clasificatorului. Pe prima linie a fiș ierului CSV (header) se
află toate denumirile de caracteristici extras e iar fiecare linie care urmează
reprezintă vectorul de caracteristici extrase al fiecărui document.
În plus, pentru documente le PDF deoarece sunt cele mai răspândite, am
extras ș i caracteristicile statice pe ntru a efectua o analiză hibridă. Tot în acelaș i
script pentru extragerea caracteristicilor dinamice, dacă documentul este PD F
acesta se parsează cu PDF -parse r din „jsunpack -n”. Apoi se numără frecvența
de apariț ie a tuturor caracteristicilor din tabelul 5.6.2 și se adaugă la
caracteristicile dinamice extrase mai sus. Urmatoarele 18 caracteristic i statice
sunt bazate pe cercetările din [3]:

obj_mis Neconcordanța dintre instrucțiunile obj ș i endobj
stream_mis Neconcordanța dintre instrucțiunile stream ș i endstream
xref Prezența unei tabele de referință xref
trailer Prezenț a unui trailer
startxref Prezența unei instrucț iuni startxref
/Page Numă rul de pagini din document
/Encrypt Dacă este documentul criptat sau nu
/ObjStm Numă rul de object streams
/JS Numă rul de comenzi javascript executate
/JavaScript Numă rul de comenzi javascript incorporate
/AA Numă rul de additional actions
/OpenAction Prezența unei acț iuni de tip open action
/AcroForm Numă rul de formulare incorporate
/JBIG2Decode Utilizar ea filtrelor JBIG2Decode
/RichMedia Utilizarea de RichMedia
/Colors Utilizarea de /Colors cu o valoare mai mare de 224
/AsciiHexDecode Utilizarea filtrului asciihexdecode
/Launch Utilizarea funcț iei /Launch
Tabel 5.6.2 Caracteristici statice extrase din documentele PDF

NECLASIFICAT

NECLASIFICAT
73 din 108

5.7. Selectarea caracteristicilor

Vectorul de caracteristici pe care l -am creat se bazează pe cunoștinț ele
cercetătorilor în domeniu. În acest proiect dorim să utiliză m metode statistice
pentru a analiza caracteristicile î ntr-un mod obiectiv. Utilizâ nd cei doi algo ritmi
pentru selectarea automată a caracteristicilor prezentați î n 4.3.1.6, Golub- score
și funcția feature_importances_ din libră ria Scikit -learn pentru limbajul de
programare Python, vom afla ce caracteristici sunt cu adevărat semnificative
pentru clasificarea documentelor în setul nostru de date.
Metod a de filtrare Golub -score primește fiș i e r u l C S V c are conț ine
caracteristicile extras e din documentele de antrenare și returnează caracteristicile
împreună cu scorul primit. S corul reprezintă relevanța, adică cât de
semnificativ ă este caracteristica respectivă pentru clasificare. Pentru a calcula
aceste scorur i ne folosim de scriptul creat î n limbajul de programare Python
“golub_score_filter.py ” din Anexa C .
Pentru funcț ia feature_importances_ a m folosit librăria Scikit -learn î n
scriptul “ random_forest.py ” din Anexa D care primește ca intrare același fiș ier
CSV ca la metoda a nterioară . Prin această metodă caracteristicile sunt
comparate în funcț ie de modelul ales, la prima metodă scorurile erau calculate
independent de clasificator. Pentru a se calcula relevanța caracteristicilor prin
această metodă, trebuie să se creeze mai întâi clasificatorul, în cazul nostru un
clasificator bazat pe algoritmul Random Forests.
După rularea celor doi algoritmi pe setul de date, putem avea doi vectori
de caracteristici diferite. Apoi trebuie să decidem care dintre ele are cea mai
bună perfor manță î n clasficare. Pentru a lua această deciz ie, se vor efectua
urmatorii paș i:
 Se va efectua selecția automată de caracteristic i pe caracteristicile
descrise î n capitolul 5.6 cu metoda Golub -score. Se va salv a noul
vector de caracteristici;
 Se va efectu a selecția automată de caracteristic i pe caracteristicile
descrise în capitolul 5.6 cu metoda p usă la dispoziț ie de Scikit -learn.
Se va salv a noul vector de caracteristici;
 Se va evalua performanț a de clasificare pentru ambele seturi de
caracteristici extrase.
Măsurile de performanță utilizate vor fi zona de sub curba ROC (AUC) ș i
matricea de confuzie. Anal iza rezultatelor va fi efectuată pentru a stabili care
vector de caracteristici ș i care clasficator (Random Forests sau SVM) are cea
mai bună performan ță. Rezultatele se vor discuta î n capitolul 6.

NECLASIFICAT

NECLASIFICAT
74 din 108

5.8. Antrenarea modelului de clasificare

Pentru alegerea algoritmului care stă la baza modelului de clasificare am
comp arat doi dintre cei mai cunoscuț i algoritmi de clasificare, Support Vector
Machine (SVM) și Random Forests (RF). După măsurătorile de performanță am
selectat algoritmul RF deoare ce s -a dovedit a fi mai precis. Pentru
implementarea modelului de clasificare am folosit libră ria scikit -learn pentru
limbajul de programare Python.
Primul pas, pentru a in troduce modelul de clasificare î n sistemul propus,
este de a crea clasificatorul fo losind algor itmul Random Forests. Pasul următor
este de a antrena ș i testa clasificatorul pe setul de antrenare/testare. Î n fina l, după
efectuarea acestor paș i rezultatul va fi un model de clasificare antrenat care
trebuie exportat pentru integrarea sa î n sistemul propus.
În continuare se va detalia implementarea prin care clasificatorul este
antrenat, î n acest scop a fost creat un script „random_forest.py” care va exporta
mode lul antrenat pentru clasificare:
1. Pentru început trebuie citit fiș ierul CSV care a fost creat la pasul de
extragere a caracteristicilor:

Figura 5.8.1 Citirea fiș ierului de caracteristici

2. Prelucrarea datelor citite:

Figura 5.8.2 Exemplu fiș ier CSV de caracteristici

Figura 5.8.3 Prelucrare date citite

3. Împărțirea setului de date în setul de antrenare ș i de testare:

NECLASIFICAT

NECLASIFICAT
75 din 108

Figura 5.8.4 Împărț irea setului de date

4. Crearea clasificatorului Random Forest:

Figura 5.8.5 Crearea clasificatorului RF
5. Antrenarea modelului :

Figura 5.8.6 Antrenarea modelului

6. Testă m clasificatorul:

Figura 5.8.7 Testarea modelului

7. Salvarea mo delului pentru introducerea sa î n sistemul propus:

Figura 5.8.8 Salvarea modelului antrenat

5.9. Introducerea modelului de clasificare î n sistem

Pentru a introduce în sistemul propus modelul antrenat la pasul anterior
am creat o funcț ie „classifyNew” în scriptul „new_random_forest” care primește
ca parametrii fiș ierul unde a fost salvat modelul a ntrenat și id -ul asignat
documentului î n urma an alizei comportamentale efectuată de sandbox- ul
Cuckoo.
Aceast ă funcție face o cerere către server- ul de Rest API pus la dispoziție
de Cuckoo, pentru a obține raportul de analiză comportamentală a documentului
cu id -ul primit ca parametru. Această cerere se efectuează numai după ce
raportul cu id- ul respecti v a r e s t a tus-ul „reported”. După ce raportul a fost
obținut cu succes, se ext rag caracteristicile enumerate î n capitolul 5.6.

NECLASIFICAT

NECLASIFICAT
76 din 108

Dacă s-au extras caracterist icile cu succes, în următorul pas se citește
modelul antrenat î n capitolul 5.8:

Figura 5.9.1 Citirea modelului antrenat

După ce modelul a fost citit, putem clasifica noul document pe baza
caracteristicilor:

Figura 5.9.2 Clasificarea unui nou document

Rezultatul clasificării împreună cu toate caracterist icile extrase sunt
salvate de către aplicația noastră, în raportul JSON corespunzător documentului
cu id -ul primit ca referință și în baza de date SQLite pusă la dispoziț ie de
sandbox- ul Cuckoo. Aceste informații sunt salvate pentru a se afișa în interfața
aplicației care va fi discutată în capitolul urmă tor.
Această funcție explicată mai sus din script -ul „n ew_random_forest” este
importată în aplicația principală dezvoltată î n PyQt prin :

Figura 5.9.3 Introducere clasificator în aplicația principală

5.10. Prezentare aplicaț ie propusă

Pentru implementarea interfeței grafice a aplicației am folosit libră ria
PyQt care permite ut ilizarea framework -ului Qt GUI î n limbajul de programare
Python. Prin interfaț a grafică a aplicaț iei putem trimite noi documente spre
analiza comportamentală folosind san dbox- ul Cuckoo pentru ca apoi să fie
clasificate pe baza caracteristicilor extrase î n benigne sau malițioase. Î n plus,
putem vizualiza toate documentele analizate, valorile caracteristicilor extrase,
capturi de ecran efectuate pe parc ursul analizei comport amentale și putem șterge
din listă rapoartele de care nu mai avem nevoie.

5.10.1. Fereastra principală

În fereastra principală putem alege să î ncepem analiza documentelor sa u
să vizualiză m rezultatele analizelor deja efectuate.

NECLASIFICAT

NECLASIFICAT
77 din 108

Figura 5.10.1 Pagina principală a aplicaț iei propuse

5.10.2. Fereastra pentru analiza documentelor

În fereastra pentru a naliza documentelor avem o hartă care ne arată ce
trebuie să facem, dacă pasul respec tiv este verde, înseamnă că a fost efectuat cu
succes.
Primul pas îl reprezintă selectarea formatului pentru documentul sau
documentele pe care le vom analiza. Apoi trebuie să alegem documentele pentru
analiză, se p ot selecta mai multe documente în același timp dar să fie de ace lași
tip. Dacă acești pași au fost efectuaț i cu succes, putem apăsa pe butonul de
începere a analizei malware.
Dacă au fost selectate mai multe documente, calea fiecărui document este
adăugată într -o listă și se trimit, pe râ nd, spre analiza comportamentală . Pe
parcur sul analizei se trimit cereri către Rest API -ul Cuckoo pentru a afla status –
ul analizei, de oarece acest lucru se efectuează într -o buclă care se încheie atunci
când documentul este raportat, tot acest proces se efectuează pe un fir separat de
execuț ie pentru a putea efectua și alte acț iuni pe parcursul analizei, spre exemplu
putem vizualiza documentele analizate până î n acel moment.

NECLASIFICAT

NECLASIFICAT
78 din 108

Figura 5.10.2 Fereastra pentru analiza documentelor

Dacă documentul a fost raportat cu succes, acesta trece prin procesul de
extragere a caracteristicilor ș i apoi prin procesul de clasificare, folosind script -ul
new_random_forest.py ” din Anexa E pe baza caracteristicilor extrase. La
sfârșitul analizei se va afiș a pagina cu detaliile acesteia care va fi prezentată î n
capitolul pentru prezentarea ferestrei de vizualizare a detaliilor despre
documentele analizate.

5.10.3. Fereastra pentru vizualizarea detaliilor analizelor

În această fereastră putem vizualiza detaliile despre documentele deja
analizate. Am implementat filt re pentru formatul documentul ui, numele acestuia
și intervalul de timp în care a fost analizat. În această fereastră se afișează
formatul document ului, numele, eticheta rezultată în urma clasificării și data în
care a fost efectuată analiza. Detaliile desp re documentele analizate care nu mai
sunt utile, pot fi ș terse.

NECLASIFICAT

NECLASIFICAT
79 din 108

Figura 5.10.3.1 Fereastra pentru vi zualizarea analizelor efectuate

Dacă se apasă pe un element din listă, se va deschide fereastra î n care se
pot vedea caracteristicile extrase pentru d ocumentul respectiv (este aceeaș i
fereastr ă care apare și în urma terminării analizei comportamentale):

Figura 5.10.3.2 Fereastra corespunzătoare elementului selectat

NECLASIFICAT

NECLASIFICAT
80 din 108

Dacă se selectează butonul pentru vizualizarea caracteristicilor statice va apărea
fereastra cu valorile caracteristicilor extrase:

Figura 5.10.3.3 Fereastra pentru afiș area caracteristicilor statice

Dacă se va apăsa pe butonul pentru vizualizarea caracter isticilor
comportamentale va apărea fereastra cu valorile caracteristicilor extrase, împreună cu un buton pentru a vizualiza capturile de ecran efectuate pe
parcursul analizei comportamentale din mediul izolat de test:

Figura 5.10.3.4 Fereastra pentru afiș area caracteristicilor compor tamentale

NECLASIFICAT

NECLASIFICAT
81 din 108

Dacă se va apăsa pe butonul de vizualizare a capturilor de ecran efectuate
în timpul an alizei comportamentale va apă rea:

Figura 5.10.3.5 Vizualizare captura de ecran din timpul analizei
comportamentale
6. Concluzii

6.1. Rezultatele testărilor efectuate ș i interpretarea acestora

Pentru partea de testare am folosi t rapoartele JSON generate de către
Sandbox- ul Cuckoo î n urma analizei documentelor (specificate î n Tabela 3) într-
un mediu izolat. Timpul de analiză pentru un document este între 2 și 5 minute.
Pentru fiecare format de document s -au folosit dife rite cititoare de fiș iere c are
sunt folosite ca implicite în deschiderea formatului respectiv:
• Documente PDF  Adobe Reader Version 9.5
• Micro soft Office  Microsoft Office 2016
• Imagini  IrfanView (deoarece î n Windows Photo Viewer
imaginile n u modificau nicio caracteristică comportamentală)
• GIF  Internet Explorer
• Fișiere text  Notepad
Cu ajutorul “extract_features_csv.py” din Anexa B am extras într-un
fișier csv to ate caracteristicile relevante în funcț ie de formatul documentului.
În aceste fișiere prima linie reprezintă denumirile caracteristicilo r iar fiecare
linie care urmează reprezintă valorile caracteris ticilor pentru fiecare
document , precum î n figura de mai jos :

NECLASIFICAT

NECLASIFICAT
82 din 108

Figura 6.1.1 Exemplu fiș ier CSV
Am grupat fiș ierele cu formatul doc, docx, xls ș i xlsx într-un singur fișier
csv deoarece au aceleaș i rezultate comportamentale , precum și fișierele jpeg,
png ș i bmp.
În pasul urmă tor am antrenat și testat doi algoritmi de machine learning ,
script “random_forest.py ” din Anexa D pentru algoritmul Random Forest, pe
baza fiș ierelor csv primite ca input , rezultatul fiind modelul de clasifica re
antrenat care va fi folosit în aplicația pr opusă . După ce am comparat rezultatele
celor doi algoritmi de clasificare se poate vedea că algoritmul Random Forest
are rezultate mai bune. În figurile de mai jos se prezintă rezultatele obț inute cu
fiecare algoritm dintre cei doi:

Figura 6.1.2 Curba ROC pentru RF si SVM in urm a clasificarii documentelor
PDF

Figura 6.1.3 Curba ROC pentru RF si SVM in urma clasificarii documentelor
Microsoft Office

NECLASIFICAT

NECLASIFICAT
83 din 108

Figura 6.1.4 Curba ROC pentru RF si SVM in urma clasificarii imaginilor

Figura 6.1.5 Prediction Accuracy

Din aceste rezultate obținute reiese că pentru documentel e d e t i p P D F ,
Microsoft Office ș i imagini performanța clasificării este excelentă, conform
capitolului 4.3.1.3 în care se prezintă măsurarea performanț ei. Pentru formatul
GIF performanțele clasifică rii sunt rezonabile spre slabe iar pentru documentele
text, clasificatorul este etichetat ca inutil, c eea ce înseamnă că nu se poate folosi
într-o aplicaț ie din viața reală . Se poate vedea că pentru d ocumentele de tip PDF
performanț a este aproape de maxim deoarece am folosit analiza hibridă,
extrăgând caracteristici comportamentale dar ș i statice.
0.996 0.977 0.987
0.72
0.545 0.992
0.94 0.949
0.697
0.54
00.20.40.60.811.2
PDF Microsoft
OfficeImagini GIF TextRandom Forest
SVM

NECLASIFICAT

NECLASIFICAT
84 din 108

Figura 6.1.6 False Positives

Din această figură reiese numă rul de documente în care acestea sunt
prezise ca fiind malițioase dar eticheta reală este că sunt documente benigne.

Figura 6.1.7 False Negatives

Din această figură reiese numărul de documente î n care acestea sunt
prezise ca fiind benigne dar eticheta reală este că sunt documente maliț ioase.
În urma selecț iei caracteristicilor relevante pentru clasificarea cu
algoritmul Random Forest am obț inut rezultate mai bune pentru documentele
PDF iar pentru restul formatelor am obținut rezultate asemănă toare cu cele
anterioare. Deoarece metoda de filtrare Golub -Score este independentă de
algoritmul de clasificare ales, selecția caracteristicilor s -a realizat cu funcția
feature_importances_ din libră ria Scikit -learn.
1 11
1 6 8
3 47
1 8 23
05101520253035404550
PDF Microsoft
OfficeImagini GIF TextRandom Forest
SVM
1 10 0 6 362
1 8 3 5 351
050100150200250300350400
PDF Microsoft
OfficeImagini GIF TextRandom Forest
SVM

NECLASIFICAT

NECLASIFICAT
85 din 108

Figura 6.1.8 Prediction Accuracy after feature selection

În urma selecț iei putem vedea importanța caracteristic ilor pentru
rezultatul clasificării , caracteristicile care incep cu “number” sunt caracteristici
comportamentale :

Figura 6.1.9 Importanț a Caracteristicilor pentru imagini
0.998
0.977 0.986
0.858
0.750.80.850.90.9511.05
PDF Microsoft OfficeRandom Forest
SVM

NECLASIFICAT

NECLASIFICAT
86 din 108

Figura 6.1.10 Importanț a Caracteristicilor pentru documentele PDF

Figura 6.1.11 Importanț a Caracteristicilor pentru documentele Microsoft Office

Sistemul propus este limitat în detectarea documentelor text maliț ioase
deoarece acestea conțin cod malițios dar nu execută nimic dacă sunt deschise cu
notepad. De obicei, un antivirus semnalează un fișier text ca fiind malițios
deoarece îi parsează conținutul acestuia și detectează porțiuni de cod care
dăunează sistemului.

NECLASIFICAT

NECLASIFICAT
87 din 108

6.2. Sinteza principalelor idei din lucrare și direcții pentru continuarea
cercetă rii

În cadrul aces tei lucră ri a fost prezentat un sistem automat ce permite
analiza documentelor de tip PDF, WORD, XLS, imagini ș i text cu scop ul de a
detecta caracterul maliț ios al acestora. Pentru analiza automat ă a documentelor
am folosit Sa ndbox- ul Cuckoo ca re în urma analizei acestora într -un mediu
izolat generează un raport JSON cu detalii despre comportamentul documentelor
atunci câ nd su n t d e s c h i s e c u u n c i t i t o r d e f i ș iere pentru tipul respectiv. Din
rapoartele acumulate î n urma analizei, am extras un numă r finit de caracteristici
relevante sub forma unui fiș ier CSV pentru antrenarea ș i testarea modelului
folosind algoritmul de machine learning Random Forest. Rezult atele
experimentale demonstrează performanț e acceptabile pentru clasificarea
documentelor maliț ioase. Modelul rezultat în urma antrenă r i i c u s e t u l d e
caract eristici extrase este integrat în aplicația propusă care va clasifica noi
documente necunoscute.
Direcții de continuare a cercetării î n acest proiect ar putea fi reprezentate
de extragerea caracteristicilor structurale din documentele Microsoft Office
conform [7] pentru efectuarea unei analize hibride care să obțină rezultate mai
bune , precum a fost propusă pentru documentele PDF. Deoarece am analizat
doar 7906 doc umente este posibil ca în alte documente să apară noi
caracteristici. În viitor vom strâ nge un set de date mai mare care să fie echilibrat,
astfel încât să obț inem un set extins de caracteristici pentru vizualizarea
perfo rmanț elor. Fișierele text care conțin porțiuni de cod malițios nu sunt
detectate de aplicația propusă pentru că sistemul de operar e își asumă faptul că
un fișier text nu conține cod, acesta nu -l execută ceea ce duce la nemodificarea
caracteristicilor comportamentale. În acest sens ar tr ebui implementat un script
care să parseze fiș ierele text pentru a extrage caracteristici statice.
Deoarece autorii de documente malițioase sunt pe deplin conștienți de
posibilităț ile de testare, malware -ul poate conț ine cod care poate detecta mediile
de virtualizare ceea ce va opri exec uția pentru o perioadă de timp. Este o tehnică
simplă dar foarte eficientă pentru că sistemele de analiză trebuie să analizeze documentele malițioase î ntr-un ti m p c â t m a i s c u r t , d e e x e m p l u , s e u i t ă d u p ă
comportamentul maliț ios al acestora î n cateva minute. Ca raspuns la această
tehnică de ocolire a sistemului de de tecție ne propunem ca pe viitor să creștem
timpul î n care se analizează comportamental documentele.
Este posibil ca un document malițios să ocolească detecț ia, fă când
documentul în așa fel încât să pară benign pentru clasificator. Un experiment ar
trebui proiectat ș i executat pentru a testa robustețea î mpotriva unei astfel de
evaziuni.

NECLASIFICAT

NECLASIFICAT
88 din 108

7. Bibliografie

[1] Inc., A. S. ISO Standard 32000 -1:Document management – Portable
Document Format – Part 1: PDF 1.7 . International Organization for
Standardization, 2008.
[2] ACM. Combining Static and Dynamic Analysis for the Detection of Malicious Documents, 2011.
[3] Detecting malicious PDF documents, Jarle Kittilsen , 01/12/2011.
[4] ISO 32000- 2:2017: Document management – Portable document format –
Part 2: PDF 2.0 , 2017- 07.
[5] Selvaraj, K. & Gutierrez, N. F. The rise of pdf malware. Technical report, Symantec, 2010.
[6] Feinstein, B. Caffeine monkey: Automated collection, detection and analysis
of malicious javascript. Technical report, SecureWorks Inc., 2007 .
[7] SFEM: Structural feature extraction methodology for the detection of
malicious office documents using machine learning methods – Aviad Cohen,
Nir Nis sim, Lior Rokach, Yuval Elovici, 2016.
[8] Extracting VB Macro Code from Malicious MS Office Documents
http://digital- foren sics.sans.org/blog/2009/11/23/extracting- vb-macros -from –
malicious -documents , 2009.
[9] Anatomy of a WordProcessingML File
http://officeopenxml.com/anatomyofOOXML.php , 2012.
[10] Insert an objec t in your Excel spreadsheet
http://office.microsoft.com/en -us/excel -help/create -edit-and-control -oleobjects –
HP010217697.aspx
[11] Vulnerability Trends Over Time
https://www.cvedetails.com/product/320/Microsoft -Office.html?vendor_id=26 ,
2019.
[12] http://www.pcworld .com/article/2837132/microsoft -discloses -zeroday –
flaw-publishes -quick -fix.html , 2014.
[13] Office Documents: New Weapons of Cyberwarfare – Jonathan Dechaux,
Eric Filiol, Jean -Paul Fizaine , 2010.
[14] JPEG steganography detection with Benford’s Law – Panagiotis Andriotis,
George Oikono mou, Theo Tryfonas , 2013.
[15] Steganography in contemporary cyberattacks – Alexey Shulmin, Evgeniya
Krylova, 2017.
https://securelist.com/steganography -in-contemporary -cyberattacks/79276/
[16] Positive Identification of LSB Image Steganography Using Cover Image
Comparison – Michael Pelosi, Nimesh Poudel, Pratap Lamichhane, Devon Lam,
Gary Kessler , 2018.

NECLASIFICAT

NECLASIFICAT
89 din 108

[17] JPEG Compression, What it is – When to Use It – And When Not To
www.learnmem.cshlp.org/site/misc/tsg_JPEG_instructions.pdf , 2011.
[18] Grey level to RGB using YCbCr color space Technique – R. Vijaya Kumar,
K. Prudvi Raju, L. Ravi Kumar, M. Jogendra Kumar , 2016.
[19] Can a .txt file contain malware?
https://madfileformatscience.garymcgath.com/2018/02/05/can -txt-file-contain –
malware/ , 2018.
[20] How Hackers Can Disguise Malicious Programs With Fake File E xtensions
https://www.howtogeek.com/127154/how -hackers -can-disguise -malicious –
programs -with-fake-file-extensions/ , 2012.
[21] ENISA, Artifa ct analysis fundamentals, 2014.
[22] Malware Automatic Analysis. César Augusto Borges de Andrade, Claudio
Gomes de Mello, Julio Cesar Duarte – Computer Engineering Department,
Military Engineering Institute (IME) , 2013.
[23] Toward Automated Dynamic Malware Analysis Using CWSandbox.
Carsten Willems, Thorsten Holz & Felix Freiling , 2007.
[24] Malware Classification Framework for Dynamic Analysis using
Information Theory. Ehsan Moshiri*, Azizol Bin Abdullah, Raja Azlina Binti Raja Mahmood and Zaiton Muda , 2017.
[25] Hybrid Analysis and Control of Malware. Kevin A. Roundy, Barton P.
Miller , 2010.
[26] Machine Learning For Dummies, IBM Limited Edition by Judith Hurwitz ,
2017.
[27] Machine Learning for Malware Detection – Kaspersky Lab , 2019.
[28] Kononenko, I. & Kukar, M. 2007. Machine Learning and Data Mining.
Horwood, 2007.
[29] DUA, Sumeet; DU, Xian., Data mining and machine learning in
cybersecurity, Auerbach Publications, 2016 .
[30] Cuckoo Malware Analysis, Analyze malware using Cuckoo Sandbox,
Digit Oktavianto Iqbal Muhardianto, PACKT Publishing , 2013.
[31] Automatic Detection of Malicious PDF Files Using Dynamic Analysis ,
2013.
[32] Cuckoo Sandbox Book
https://cuckoo.readthedocs.io/en/latest/, 2018.

NECLASIFICAT

NECLASIFICAT
90 din 108

8. Anexe

8.1. Anexa A

#rename.py
import os

def main ():
#index- ul inițial de und e se va începe numerotarea
index = 1
#calea către folder -ul unde se găsesc documentele
path = " PDF_Docs /"
#se ia fiecare document din folder și se redenumește
#fișierele benigne și malițioase se țin în foldere diferite
for filename in os.listdir(path):
dst = "Benign_PDF _" + str(index) + ".pdf "
src = path + filename
dst = path + dst

os.rename(src,dst)
index += 1

if __name__ == '__main__':
main()

8.2. Anexa B

#extract_features_csv.py
import pdf
import sys, os
import re, requests, json, time
import csv
###Behavior
#Number of dropped files
def count_dropped_files (json_report):
#Verificam daca exista cheia in dictionar
if 'dropped' in json_report:
dropped_files = json_report["dropped"]
return len(dropped_files)
else:
return 0
#Number of accessed files
def count_accessed_files (behavior_summary):
if 'file_opened' in behavior_summary:

NECLASIFICAT

NECLASIFICAT
91 din 108

return len(behavior_summary["file_opened"])
else:
return 0

#Number of accessed registry entries
def count_accessed_registry (behavior_summary):
if 'regkey_opened' in behavior_summary:
return len(behavior_summary["regkey_opened"])
else:
retur n 0

#Number of deleted registry
def count_deleted_regis try(behavior_summary):
if 'regkey_deleted' in behavior_summary:
return len(behavior_summary["regkey_deleted"])
else:
return 0

#Number of file read
def count_file_read (behavior_summary):
if 'file_read' in behavior_summary:
return len(behavior_summary["file_read"])
else:
return 0

#Number of registry read
def count_registry_read (behavior_summary):
if 'regkey_read' in behavior_summary:
return len(behavior_summary["regkey_read"])
else:
return 0

#Number of file created
def count_file_created (behavior_summary):
if 'file_created' in behavior_summary:
return len(behavior_summary["file_created"])
else:
return 0

#Number of file recreated
def count_file_recreated (behavior_summary):
if 'file_recreated' in behavior_summary:
return len(behavior_summary["file_recreated"])
else:
return 0

#Number of dll loaded
def count_dll_loaded(behavior_summary):

NECLASIFICAT

NECLASIFICAT
92 din 108

if 'dll_loaded' in behavior_summary:
return len(behavior_summary["dll_loaded"])
else:
return 0

#Number of file written
def count_file_written (behavior_summary):
if 'file_written' in behavior_summary:
return len(behavior_summary["file_written"])
else:
return 0

#Number of failed files
def count_file_failed (behavior_summary):
if 'file_failed' in behavior_summary:
return len(behavior_summary["file_failed"])
else:
return 0

#Number directory created
def count_directory_created (behavior_summary):
if 'directory_created' in behavior_summary:
return len(behavior_summary["directory_created"])
else:
return 0

#Num ber command line
def count_command_line (behavior_summary):
if 'command_line' in behavior_summary:
return len(behavior_summary["command_line"])
else:
return 0

#Number file moved
def count_file_moved (behavior_summary):
if 'file_moved' in behavior_summary:
return len(behavior_summary["file_moved"])
else:
return 0

#Number file deleted
def count_file_deleted (behavior_summary):
if 'file_deleted' in behavior_summary:
return len(behavior_summary["file_deleted"])
else:
return 0

#Number registry written

NECLASIFICAT

NECLASIFICAT
93 din 108

def count_registry_written (behavior_summary):
if 'regkey_written' in behavior_summary:
return len(behavior_summary["regkey_written"])
else:
return 0

#Number downloads files
def count_downloads_file (behavior_summary):
if 'downloads_file' in behavior_summary:
return len(behavior_summary["downloads_file"])
else:
return 0

#Number file copied
def count_file_copied (behavior_summary):
if 'file_copied' in behavior_summary:
return len(behavior_summary["file_copied"])
else:
return 0

#Number connects host
def count_connects_host (behavior_summary):
if 'connects_host' in behavior_summary:
return len(behavior_summary["connects_host"])
else:
return 0

###Static
#Number of crosss -reference tables
def count_xref (strin gs):
regex = re.compile(r' \bxref \b')
#Se converteste in JSON string cu dumps
matches = regex.findall(json.dumps(strings))
return len(matches)
#Number of startxref
def count_startxref (strings):
regex = re.compile(r' \bstartxref \b')
matches = regex.findall(json.dumps(strings))
return len(matches)
#Number of obj keywords
def count_obj (strings):
regex = re.compile(r' \bobj\b')
matches = regex.findall(json.dumps(strings))
return len(matches)
#Number of endobj keywords

NECLASIFICAT

NECLASIFICAT
94 din 108

def count_endobj (strings):
regex = re.compile(r' \bendobj \b')
matches = regex.findall(json.dumps(strings))
return len(matches)

#Number of stream keywords
def count_stream (strings):
regex = re.compile(r' \bstream \b')
matches = regex.findall(json.dumps(strings))
return len(matches)

#Number of endstream keywords
def count_endstream (strings):
regex = re.compile(r' \bendstream \b')
matches = regex.findall(json.dumps(strings))
return len(matches)

#Number of trailer keywords
def count_trailer (strings):
regex = re.compile(r' \btrailer \b')
matches = regex.findall(json.dumps(strings))
return len(matches)

#Calculam diferenta dintre obj si endobj
def obj_mismatch (strings):
if (count_obj(strings) – count_endobj(strings)) != 0:
return 1
else:
return 0

#Calculam diferenta dintre stream si endstream
def stream_mismatch (strings):
if(count_stream(strings) – count_endstream(strings)) != 0:
return 1
else:
return 0

#Numarul de macrouri detectate
def count_detected_macros (data):
detected_macros = 0
#Verificam daca exista cheia in dictionar
if 'static' in data:
static = data['static']
if 'office' in static:
office = static['office']
if 'macros' in office:
macros = office['macros']

NECLASIFICAT

NECLASIFICAT
95 din 108

detected_macros = len(macros)
return detected_macro s

#Extragem features
def getFeatures (data, filename, document_type):
#Vector features (dictionary)
features = {}

#Extragem Static features (macros) doar pentru documentele doc,docx,xls,xlsx
if document_type == "doc" or document_type == "docx" or document_type == "xls"
or document_type == "xlsx":
features['detected_macros'] = count_detected_macros(data)
#Extragem Behavior features
features['number_dropped_file s'] = count_dropped_files(data)

#Verificam daca exista cheia din dictionar
if 'behavior' in data and 'summary' in data["behavior"]:
behavior_summary = data["behavior"]["summary"]

if document_type != "pdf":
features['number_registry_written'] =
count_registry_written(behavior_summary)
features['number_dll_loaded'] = count_ dll_loaded(behavior_summary)
features['number_accessed_files'] =
count_accessed_files(behavior_summary)
features['number_accessed_registry'] =
count_accessed_registry(behavior_summary)
features['number_file_written'] =
count_file_written(behavior_ summary)
features['number_file_read'] = count_file_read(behavior_summary)
features['number_registry_read'] =
count_registry_read(behavior_summary)
if document_type != "jpeg" and document_type != "jpg" and
document_type != "png" and document_type !="bmp":
features['number_file_created'] =
count_file_created(behavior_summary)
features['number_file_recreated'] =
count_file_recreated(behavior_summary)
features['number_file_failed'] =
count_file_failed(behavior_summary)
features['number_directory_created'] =
count_directory_created(behavior_summary)
features['number_command_line'] =
count_command_line(behavior_summary)

NECLASIFICAT

NECLASIFICAT
96 din 108

features['number_file_moved'] =
count_file_moved(behavior_summary)
features['number_file_de leted'] =
count_file_deleted(behavior_summary)
features['number_deleted_registry'] =
count_deleted_registry(behavior_summary)

if document_type == "gif":
features['number_downloads_file'] =
count_downloads_file(behavior_summary)
features['fi le_copied'] = count_file_copied(behavior_summary)
features['connects_host'] =
count_connects_host(behavior_summary)

#Doar pentru fisierele TXT
if document_type == "txt":
features['number_downloads_file'] =
count_downloads_file(behavior_summary)
else:
#Caracteristicile comportamentale selectate pentru documentele pdf
features['number_file_read'] = count_file_read(behavior_summary)
features['number_accessed_files'] =
count_accessed_files(behavior_su mmary)
features['number_registry_read'] =
count_registry_read(behavior_summary)
features['number_deleted_registry'] =
count_deleted_registry(behavior_summary)
features['number_accessed_registry'] =
count_accessed_registry(behavior_summary)
else:

if document_type != "pdf":
features['number_registry_written'] = 0
features['number_dll_loaded'] = 0
features['number_accessed_files'] = 0
features['number_accessed_registry'] = 0
features['number_file_written'] = 0
features['number_file_read'] = 0
features['number_registry_read'] = 0

if document_type != "jpeg" and document_type != "jpg" and
document_type != "png" and document_type !="bmp":
features['number_file_created'] = 0
features['number_file_recreated'] = 0
features['number_file_failed'] = 0
features['number_directory_created'] = 0
features['number_command_line'] = 0
features['number_file_moved'] = 0

NECLASIFICAT

NECLASIFICAT
97 din 108

features['number_file_deleted'] = 0
features['number_deleted_registry'] = 0

#Doar pentru fisierele TXT
if document_type == "txt":
features['number_downloads_file'] = 0

if document_type == "gif":
features['number_downloads_file'] = 0
features['file_copied'] = 0
features['connects_host'] = 0
else:
#Caracteristicile comportamentale selectate pentru documentele pdf
features['number_file_read'] = 0
features['number_accessed_files'] = 0
features['number_registry_read'] = 0
features['number_deleted_registry'] = 0
features['number_accessed_registry'] = 0

#Extrag static features doar pentru documentele PDF
if document_type == "pdf":
if 'strings' in data:
strings = data["strings"]

#features['xref'] = count_xref(strings)
features['startxref'] = count_s tartxref(strings)
#features['trailer'] = count_trailer(strings)

#features['obj_mis'] = obj_mismatch(strings)
#features['stream_mis'] = stream_mismatch(strings)
features['Page'] = 0
#features['Encrypt'] = 0
features['ObjStm'] = 0
features['JS'] = 0
features['JavaScript'] = 0
#features['AA'] = 0
#features['OpenAction'] = 0
#features['AcroForm'] = 0
#features['JBIG2Decode'] = 0
#features['RichMedia'] = 0
#features['Launch'] = 0
#features['AsciiHexDecode'] = 0
#features['Colors'] = 0
#Citesc fisierul PDF
#Open a file and read into string
pdfFile = open(filename,'r')

NECLASIFICAT

NECLASIFICAT
98 din 108

pdfData = pdfFile.read()
mypdf = pdf.pdf(pdfData,pdfFile)
#pdfFile.close()

#Parse PDF to decompress and decode streams
if mypdf.is_valid():
mypdf.parse()

#Search parsed PDF for features
for pdfObject in mypdf.objects:
for pdfTag in mypdf.objects[pdfObject].tags:
if 'Page' in pdfTag:
features['Page'] += 1
#if 'Encrypt' in pdfTag:
# features['Encrypt'] += 1
if 'ObjStm' in pdfTag:
features['ObjStm'] += 1
if 'JS' in pdfTag:
features['JS'] += 1
if 'JavaScript' in pdfTag:
features['JavaScript'] += 1
#if 'AA' in pdfTag:
# features['AA'] += 1
#if 'OpenAction' in pdfTag:
# features['OpenAction'] += 1
#if 'AcroForm' in pdfTag:
# features['AcroForm'] += 1
#if 'JBIG2Decode' in pdfTag:
# features['JBIG2Decode'] += 1
#if 'RichMedia' in pdfTag:
# features['RichMedia' ] += 1
#if 'Launch' in pdfTag:
# features['Launch'] += 1
#if 'AsciiHexDecode' in pdfTag:
# features['AsciiHexDecode'] += 1
#if 'Colors > 2^24' in pdfTag:
# features['Colors'] += 1
else:
#features['xref'] = 0
features[' startxref'] = 0
#features['obj_mis'] = 0
#features['stream_mis'] = 0
#features['trailer'] = 0
features['Page'] = 0
#features['Encrypt'] = 0
features['ObjStm'] = 0
features['JS'] = 0
features['JavaScript'] = 0

NECLASIFICAT

NECLASIFICAT
99 din 108

#features['AA'] = 0
#features['OpenAction'] = 0
#features['AcroForm'] = 0
#features['JBIG2Decode'] = 0
#features['RichMedia'] = 0
#features['Launch'] = 0
#features['AsciiHexDecode'] = 0
#features['Colors'] = 0
#end_pdf
return features

#Scriem Feature vector in fisier
def writeFeatureVector_csv (list_features, list_filename, list_label,export_file):
first_line = []
first_line.append("Filename")
for key, value in list_features[0].iteritems():
first_line.append(key)
first_line.append("Label")

with open(export_file, 'wb') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',', quotechar='|',
quoting=csv.QUOTE_MINIMAL)
filewriter.writerow(first_line)
for i in range(0,len(list_filename)):
row = []
row.append(list_filename[i])
for key ,value in list_features[i].iteritems():
row.append(value)
row.append(list_label[i])
filewriter.writerow(row)
if __name__ == '__main__':
#Get time for usage calculations
start_time = time.time()
list_features = []
list_file_name = []
list_labels = []
#Calea catre folderul cu documentele analizate
folder_path = sys.argv[1]
#Extensia documentului
document_type = sys.argv[2]
#Calea catre fisierele originale (trebuie la pdf pt parsare)
pdf_folder = sys.argv[3]
#Calea catre fisierul unde se vor scrie caracteristicile extrase
export_file = sys.argv[4]

NECLASIFICAT

NECLASIFICAT
100 din 108

#Pentru fiecare folder deschidem fisierul cu raportul
for report_path in os.listdir(folder_path):
report_path = folder_path + '/' + report_path + '/reports/report.json'

with open(report_path) as json_report:
data = json.load(json_report)
id_task = data["info"]["id"]
file_name = data["target"]["file"]["name"]
#Labelul documentului Benign/Malware
label = file_name.split('_')
label = label[0]
cale_originala =""
features = getFeatures(data,cale_originala, document_type)
print 'ID: ' + str(id_task) + ' Filename: ' + file_name + ' Label; ' + label

list_features.append(features)
list_file_name.append(file_name)
list_labels.append(label)
print ("adaugat in lista")
writeFeatureVector_csv(list_features,list_file_name,list_labels,export_file)
print ("scriere fisier")
#Calculate used time for performance measu res
end_time = time.time()
used_time = end_time – start_time
print "Work done for " + document_type + " in " + str(used_time) + " seconds."

8.3. Anexa C

#golub_score_filter.py
import csv
import statistics, sys
def getLabel (row):
label = row[len(row) – 1]
return label
def getFeatureNames (filename):
features_name = []
#Citim headerul cu feature names
with open(filename, 'r') as csv_file:
reader = csv.DictReader(csv_file)
features_name = reader.fieldnames
csv_file.close()
features_name_final = []
for i in range(1,len(features_name) – 1):

NECLASIFICAT

NECLASIFICAT
101 din 108

features_name_fin al.append(features_name[i])
return features_name_final

def getFeatureVector (row):
features_vector = []
for i in range(1,len(row) – 1):
feature = row[i]
features_vector.append(feature)
return features_vector

def getFilename (row):
filename = row[0]
return filename
def golubScore (features_name, list_features_vector_benign,
list_features_vector_malware):
#Golub -score Filter Method
#Pentru fiecare feature
golub_scores_list = []
for feature_i in range(0,len(features_name)):
suma = 0
samples_benign = []
#Calculam pentru al i -lea feature media pentru cele pozitive (benigne)
for line_number in range(0,len(list_features_vector_benign)):
suma += int(list_features_vector_benign[line_number][feature_i])
#Memoram feature_i de la fiecare linie pentru a calcula deviatia
standard

samples_benign.append(int(list_features_vector_benign[line_number][feature_i]))
n = len(list_features_vector_benign)
if suma != 0:
medie_benign = suma/n
dev_standard_benign = statistics.stdev(sampl es_benign)
else:
medie_benign = 0
dev_standard_benign = 0

suma = 0
samples_malware = []
#Calculam pentru al i -lea feature media pentru cele negative (malware)
for line_number in range(0,len(list_features_vector_malware)):
suma += int(list_features_vector_malware[line_number][feature_i])

samples_malware.append(int(list_features_vector_malware[line_number][feature_i]))
n = len(list_features_vector_malware)
if suma != 0:
medie_malware = suma/n
dev_standard_malware = statistics.stdev(samples_malware)

NECLASIFICAT

NECLASIFICAT
102 din 108

else:
medie_malware = 0
dev_standard_malware = 0

if (medie_benign – medie_malware) != 0 and (dev_standard_benign +
dev_standard_malware) != 0:
golub_score = abs((medie_benign – medie_malware) /
(dev_standa rd_benign + dev_standard_malware))
else:
golub_score = 0

golub_scores_list.append(golub_score)
return golub_scores_list

#Ordonam scorurile crescator pentru a pastra numai 15 features
def order_scores (golub_scores_list, features_name, list_featur es_vector_benign,
list_features_vector_malware):
for i in range(0,len(golub_scores_list) – 1):
for j in range(i + 1, len(golub_scores_list)):
if golub_scores_list[i] < golub_scores_list[j]:
aux = golub_scores_list[i]
golub_scores_list[i] = golub_scores_list[j]
golub_scores_list[j] = aux
aux_name = features_name[i]
features_name[i] = features_name[j]
features_name[j] = aux_name
for linie in range(0,len(list_features_vector_benign)):
aux_benign = list_features_vector_benign[linie][i]
list_features_vector_benign[linie][i] =
list_features_vector_benign[linie][j]
list_features_vector_benign[linie][j] = aux_benign
for linie in range(0,len(list_features_vector_malware)):
aux_malware = list_features_vector_malware[linie][i]
list_features_vector_malware[linie][i] =
list_features_vector_malware[linie][j]
list_features_vector_malware[linie][j] = aux_malware
#Scriem scorurile intr -un fisier
def write_golub_score_list (golub_score s_list,features_name, outfile):
outfile = open(outfile, "w")
feature_scores = 'Features Rank: \n'
for i in range(0, len(features_name)):
feature_scores += str(i + 1) + '. ' + features_name[i] + ' = ' +
str(golub_scores_list[i]) + ' \n'

NECLASIFICAT

NECLASIFICAT
103 din 108

outfile.write(feature_scores)

def main ():
infile = sys.argv[1]
outfile = sys.argv[2]

#content = f.readlines()
#Memoram numele pentru features
features_name = getFeatureNames(infile)
#Memoram cate un vector de features pentru fiecare linie
list_fea tures_vector_benign = []
list_features_vector_malware = []
list_filename_benign = []
list_filename_malware = []

#Luam linie cu linie
with open(infile, 'r') as csv_file:
reader = csv.reader(csv_file)
#Trecem peste header
reader.next()
for row in reader:
label = getLabel(row)
#Se creeaza cate un vector de features pentru fiecare linie
features_vector = getFeatureVector(row)
#Memoram numele fisierului
filename = getFilename(row)
if label == "Clean":
list_features_vecto r_benign.append(features_vector)
list_filename_benign.append(filename)
else:
list_features_vector_malware.append(features_vector)
list_filename_malware.append(filename)
csv_file.close()

#Calculam golub -score pentru fiecare feature
golub_ score_list = golubScore(features_name, list_features_vector_benign,
list_features_vector_malware)
#Ordonam scorurile
order_scores(golub_score_list, features_name, list_features_vector_benign,
list_features_vector_malware)
#Scriem in fisier golub -score list
write_golub_score_list(golub_score_list, features_name, outfile)

if __name__ == "__main__":
main()

NECLASIFICAT

NECLASIFICAT
104 din 108

8.4. Anexa D

#random_forest.py
#Import scikit -learn dataset libary
import pandas as pd
#Import train_test_split function
from sklearn.model_selection import train_test_split
#Import Random Forest Model
from sklearn.ensemble import RandomForestClassifier
#Import scikit -learn metrics module for accuracy calculation
from sklearn import metrics
#For visualization
import matplotlib. pyplot as plt
import seaborn as sns

import numpy as np
#Pentru a salva modelul
import pickle

def writeFeatureImportance(feature_imp):
outfile = open('feture_importance_jpeg_png_bmp.txt', "w")
outfile.write(str(feature_imp))
#Read data
data = pd.read_csv('dataset_jpeg_png_bmp.csv')

#Inlocuim label- urile pentru a putea desena ROC curve
data.Label.replace(['Benign', 'Malware'], [1, 0], inplace=True )

print data.head()
#Features
X=data.drop(['Label','Filename'],axis=1)
#Labels
y=data['Label']
#Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3) #70% trianing and 30% test
#Cerate a Gaussian Classifier ( n_estimators = number of trees in the forest)
clf=RandomForestClassifier(n_es timators=100)

#Train the model using the training sets
clf.fit(X_train,y_train)

NECLASIFICAT

NECLASIFICAT
105 din 108

#Salvam modelul
filename = 'random_forest_model_jpeg_png_bmp.sav'
pickle.dump(clf, open(filename,'wb'))
#Calculam importanta pentru features
feature_imp = pd.Series(clf.feature_importances_,index =
X.columns).sort_values(ascending= False )
#Scriem intr -un fisier feature dupa scorul obtinut
writeFeatureImportance(feature_imp)
#Creating a bar plot pentru features importance
sns.barplot(x=feature_imp, y=feature _imp.index)
#Add labels to your graph
plt.xlabel('Feature Importance Score')
plt.ylabel('Features')
plt.title("Visualizing Important Features")
plt.legend()
plt.show()

#Testam clasificatorul cu datele de test
y_pred=clf.predict(X_test)

#Model Accuracy, how often is the classifier correct?
print ("Accuracy:",metrics.accuracy_score(y_test,y_pred))
print ("Confusion Matrix:")
print metrics.confusion_matrix(y_test,y_pred)
print (metrics.classification_report(y_test,y_pred))

#Clasificam un nou document
#print str(clf.predict([[4,21,97,1,1,1,840,1,0,0,646]]))

#False positive rate , True positive rate
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)
auc = metrics.roc_auc_score(y_test, y_pred)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend(loc=4)
plt.show()

8.5. Anexa E

#new_random_forest.py
#Functia de extragere atribute
from extract_features_csv import getFeatures
#Pentru a incarca modelul salvat
import pickle

NECLASIFICAT

NECLASIFICAT
106 din 108

import sys, os
import re, requests, json
import sqlite3
from sqlite3 import Error

####
def getFilePath (json_report):
target_file = json_report["target"]["file"]
file_path = target_file["path"]
return file_path

def getReportPath (file_path,file_id):
path = file_path.split('/')
report_path = ""
for i in range (1,len(path) – 2):
report_path += '/' + path[i]
report_path += '/analyses/' + file_id + '/reports/report.json'
return report_path

def getDBPath (report_path):
path = report_path.split('/')
db_pa th = ""
for i in range (1,len(path) – 5):
db_path += '/' + path[i]
db_path += '/' + 'cuckoo.db'
print ("DB PATH: " + db_path)
return db_path

def update_label (conn,task_id,label):
cur = conn.cursor()
cur.execute("UPDATE tasks SET owner = ? WHERE id = ?", (label,task_id))
print 'Se scrie rezultatul clasificarii -' + str(label) +' – in BD'

def addClassifyLabelDB (db_file, task_id, label):
#Se creaza conexiune cu o baza de date SQLite
print ("Se conecteaza BD")
try:
conn = sqlite3.connect(db_file)
print (sqlite3.version)
with conn:
#Se face update la bd
update_label(conn,task_id, label)
except Error as e:
print (e)
finally :
conn.close()

NECLASIFICAT

NECLASIFICAT
107 din 108

def getFileType (json_report):
filename = json_report["target"]["file"]
filename = filename["name" ]
file_type = filename.split('.')[1]
return file_type

####

#Clasificarea unui nou document
#Fisierul de unde se incarca modelul salvat
#Id-ul documentului care se va clasifica
#model_filename = sys.argv[1]
#file_id = sys.argv[2]
def classifyNew (file_id):
#Extragem features din documentul file_id
HEADERS = {"Authorization": "Bearer S4MPL3"}
REST_URL_DETAILS = "http://localhost:8090/tasks/report/" + file_id
response_details = requests.get(REST_URL_DETAILS, headers=HEADERS)

#Aflam ce tip de document este
file_type = getFileType(response_details.json())

if file_type == "pdf":
model_filename = "ModeleClasificare/random_forest_model_pdf.sav";
elif file_type == "doc" or file_type == "docx" or file_type == "xls" or file_t ype ==
"xlsx":
model_filename = "ModeleClasificare/random_forest_model_MS_Office.sav"
elif file_type == "txt":
model_filename = "ModeleClasificare/random_forest_model_Text.sav"
elif file_type == "gif":
model_filename = "ModeleClasificare/random_forest_model_gif.sav"
elif file_type == "jpeg" or file_type == "jpg" or file_type == "png" or file_type ==
"bmp":
model_filename =
"ModeleClasificare/random_forest_model_jpeg_png_bmp.sav"
#Aflam calea fisier ului care se va analiza
file_path = getFilePath(response_details.json())

#Asta pentru pdf (pentru restul facem alte functii)
features = getFeatures(response_details.json(), file_path, file_type)

if features == -1:
print ("Exceptie: eroare la citirea raportului!")
else:
random_forest_model = pickle.load(open(model_filename,'rb'))
label = random_forest_model.predict([features.values()])

NECLASIFICAT

NECLASIFICAT
108 din 108

#Aflam unde este salvat raportul
report_path = getReportPath(file_path, file_id)
print ("CALE RAPORT: " + report_path)

#Se creeaza dictionarul cu clasificarea pentru a se pune in report.json
if label == 1:
print 'Benign'
#Deoarece label -ul de sus nu este format int
label = 1
#Scriem in raport clasificare
classifier_dict = {'classifier': 'Benign'}
else:
label = 0
print 'Malware'
classifier_dict = {'classifier': 'Malware'}

#Adaugam label -ul in baza de date pentru a face request /list care se ia din
#BD si nu din raport
db_path = getDBPath(report_path)

#Adaugam label -ul de clasificare in BD
addClassifyLabelDB(db_path, file_id, label)

#Se adauga la dictionarul de features cel de clasificare
features.update(classifier_dict)

temp = {'results': []}
temp['results'].append(features)

with open(report_path) as f:
data = json.load(f)

#Se face append la json -ul existent cu dictionarul nou creat
data.update(temp)

with open(report_path, 'w') as f:
json.dump(data, f)
return label

Similar Posts