====== Static analysis of malware ======
===== Sažetak =====
Širenje malwarea po mreži i računalima može uzrokovati velike štete i povrede privatnosti korisnicima, ali i cijelim organizacijama. Većina računala koristi antiviruse kako bi se zaštitili od takvih programa, no takva zaštita nije uvijek dovoljna. Statička analiza može služiti kao dodatni sloj zaštite i detektirati maliciozne programe koje je antivirus propustio. Ovaj rad nudi pregled najbitniji vrsta malwarea te objašnjava različite tehnike statičke analize koje mogu detektirati maliciozne programe uz pomoć utvrđivanja formata i potencijalnih funkcionalnosti. Osim toga, objašnjen je rad tr alata koji se koriste pri statičkoj analizi.
Ključne riječi: malware, statička analiza, tehnike statičke analize, vrste malwarea
===== Uvod =====
Informatizacijom svijeta ljudi postaju sve više zavisni o računalima te na njih prenose razne nebitne, ali i bitne i osjetljive podatke koji mogu postati meta napadačima. Jedan od načina kojim napadači ugrožavaju računala su maliciozni programi, poznati kraće kao malware. Korisnici ih preuzmu preko web stranica, socijalnih mreža ili emailova te ga pokreću nesvjesni da se radi o malicioznom programu. Najčešće samo pokretanje malicioznog programa može naštetiti računalu stoga ukoliko postoji sumnja da je program zloćudan potrebno je analizirati ga prije nego što se pokrene. Takva analiza programa koji se ne izvršava naziva se statičkom analizom. Ona može otkriti različite informacije o programu poput namijenjenog operacijskog sustava, neke od funkcionalnosti te je li već otkriveno da je promatrani program malware.
Rad će prvo objasniti vrste malwarea kako bi se bolje upoznalo s prijetnjama koje je potrebno otkriti analizom. Zatim će se objasniti pojam statičke analize te koje se tehnike primjenjuju pri analizi malicioznih programa. Rad sadrži i praktični dio gdje se opisuju tri različita alata statičke analize i kako se mogu koristiti da detektiraju malware.
===== Vrste malwarea =====
Malware je zajedničko ime za različite tipove zlonamjernih programa poput viusa, ransomwarea i spywarea. Njegova svrha je oštetiti podatke i računala ili ostvariti pristup osjetljivim podacima i djelovima mreže. Najčešće se širi kao poveznica ili datoteka unutar emaila, web stranice ili objave na socijalnim mrežama.
==== Virus ====
Jedan od najčešćih oblika malwarea je virus koji svoj zlonamjerni kod dodaje legitimnoj aplikaciji i tako zavara korisnike. Opasnost ovog oblika jest to što korisnici najčešće niti se sumnjaju da se virus nalazi u datoteci jer program normalno obavlja svoju svrhu. Samo preuzimanje virusa ne uzrokuje štetu računalu, no kada se program pokrene virus se počinje replicirati i širi se kroz računalo ili čak mrežu računala s kojima je zaraženo računalo povezano.[[https://comtact.co.uk/blog/what-are-the-different-types-of-malware/|[6]]]
==== Crv ====
Crv je oblik malicioznog programa kojeg karakterizira mogućnost samo-repliciranja. Za razliku od virusa, crv se može širiti i prije nego što je korisnik pokrenuo program. Zbog tog svojstva su vrlo opasni jer jedno zaraženo računalo unutar tvrtke može u vrlo kratkom vremenu zaraziti cijelu mrežu. [[https://www.csoonline.com/article/2615925/security-your-quick-guide-to-malware-types.html|[5]]]
==== Trojanski konj ====
Trojanski konj se slično kao i virus skriva unutar datoteke koja se čini legitimnom, no razlika je u tome što trojanski konj nije vezan na drugi legitimni program. Kako bi se aktivirao, korisnik mora pokrenuti program zbog čega je nužno da on izgleda legitimno. Takva vrsta malware služi napadačima kao ulaz na računalo, a nakon dobivanja pristupa mogu izmjenjivati podatke, koristiti računalo kao dio botneta ili špijunirati aktivnosti. [[https://comtact.co.uk/blog/what-are-the-different-types-of-malware/|[6]]]
==== Ransomware ====
Maliciozni programi koji kriptiraju podatke napadnutog računala i tako onemogućavaju pristup njima nazivaju se ransomware. Kako bi korisnik dobio ključ s kojim može dekriptirati podatke potrebno je uplatiti određenu svotu novaca to jest otkupninu od kud ovaj virus dobiva svoje ime. [[https://www.csoonline.com/article/2615925/security-your-quick-guide-to-malware-types.html|[5]]]
==== Adware ====
Vrsta malicioznog programa koji uzrokuje pojavu reklama, najčešće u obliku pop-up prozora nazivaju se adware. Iako sam adware najčešće nije opasan već iritantan, on osim reklama može sadržavati i poveznice na stranice na kojima se nalaze drugi zloćudni programi. [[https://comtact.co.uk/blog/what-are-the-different-types-of-malware/|[6]]]
==== Spyware ====
Program koji prati aktivnost računala i skuplja osobne informacije poput podataka za prijavu i povijest pretraživanja naziva se Spyware. Najčešće se predstavlja kao legitiman program kako bi naveo korisnika na preuzimanje, a zatim tokom korištenja skuplja podatke računala. Prikupljeni podaci se u većini slučajeva šalju napadačima ili oglašivačima. [[https://comtact.co.uk/blog/what-are-the-different-types-of-malware/|[6]]]
===== Tehnike statičke analize malwarea =====
Statička analiza je metoda provjere programa pri kojoj se kod pregledava bez izvršavanja programa. Takva analiza omogućuje bolje razumijevanje koda te programerima služi kako bi se uvjerili u kvalitetu napisanog koda. Ručna analiza troši puno vremena stoga se statička analiza uvijek provodi uz pomoć alata.Unutar alata je najčešće potrebno definirati pravila po kojima se traže ranjivosti u programu te ukoliko su pravila zadovoljena označi se mjesto potencijalne ranjivosti. Ovaj pristup se može iskoristiti i nad programima o kojima se potrebno saznati više informacija. Uz drugačiji skup pravila, a koristeći iste alate moguće je detektirati maliciozne funkcije unutar programa i tako utvrditi da je analizirani program malware.
==== Pretraga po hashu ====
Jedan od najjednostavnijih načina provjere malicioznog programa jest potražiti je li on već bio analiziran i koji su bili rezultati te analize. S obzirom da se ime programa lako mijenja traženje po njemu ne daje dobre rezultate te se umjesto imena koristi hash funkcija. Prednosti hash funckije su da će uvijek dati rezultat iste veličine bez obzira na veličinu programa te ukoliko su programi isti i njihove hash funkcije će biti iste. Zato uz korištenje hash-a možemo biti sigurni da se analiza koju smo pronašli odnosi na identičan program. Nakon generiranja hasha potencijalni malware se može identificirati na stranicama specijaliziranim za to, poput Virus Total. [[https://shehackske.medium.com/static-analysis-of-malware-pt-1-720e03668e22|[3]]]
==== Obfuskuacija koda ====
Napadači mogu otežati statičku analizu koda uz obfuskuaciju. To je proces koji tekstualne i binarne podatke namjerno pretvara u podatke koji nisu čitljivi ljudima. Time traženje nizova znakova postaje beskorisno, a ova tehnika se također koristi i kako bi prevarila vatrozide koji rade na temelju potpisa. Primjer koda prije i nakon obfuskuacije prikazan je na slici 3.1. gdje je vidljivo kako je iz drugog oblika nemoguće zaključiti što kod radi. Obfuskuacija koda nije nužno znak da je program maliciozan. Kod se obfuskuira i kada se želi zaštititi intelektualno vlasništvo ili onemogućiti da napadači provedu reverzno inženjerstvo. Ipak, sa takvim programima je potrebno biti pažljiv jer se analizom ne može saznati što program radi. Izvođenjem naredbe strings lako se može saznati je li program obfuskuiran jer će takav program vratiti vrlo malo nizova znakova, dok uobičajeni program vraća mnoštvo. Mali broj importova u programu nam također može dati do znanja je li program pakiran. Da bi se nad takvim programom mogla provesti bilo kakva daljnja analiza potrebno je znati kojom je tehnikom pakiran te ga otpakirati uz pomoć alata. [[https://nasbench.medium.com/malware-analysis-techniques-basic-static-analysis-335a7286a176|[2]]]
{{ :racfor_wiki:malware:obfuscuation.jpg?500 }}
Slika 3.1. Primjer koda prije i nakon obfuskuacije[[https://www.sciencedirect.com/topics/computer-science/obfuscation-code|[9]]]
==== Prepoznavanje ekstenzije ====
Pri instalaciji legitimnih programa potrebno je paziti da se preuzme verzija koja je kompatibilna s operacijskim sustavom računala na kojem se program pokreće. Isto pravilo vrijedi i za maliciozne programe te oni neće moći napraviti nikakvu štetu računalu ako nisu kompatibilni s njim. Ekstenzije datoteka se razlikuju ovisno o namijenjenom operacijskom sustavu pa je čitanjem ekstenzije moguće odrediti kojem operacijskom sustavu program može naštetiti. Preimenovanjem datoteke se lako promjeni i ekstenzija stoga nije dovoljno samo pogledati kako se datoteka zove.Provjera prave ekstenzije datoteke može se napraviti uz korištenje naredbe file na Linuxu koja ispisuje ekstenziju programa. Na svim sustavima je ekstenziju datoteke moguće saznati uz hex čitače jer sve datoteke na predodređenom mjestu imaju zapisan jedinstveni identifikator ekstenzije. [[https://shehackske.medium.com/static-analysis-of-malware-pt-1-720e03668e22|[3]]]
==== Analiza nizova znakova ====
Analiza ekstenzije programa daje nam informaciju samo o operacijskom sustavu koji može pokrenuti program. Kako bi se procjenilo je li program opasan osim namijenjenog sustava potrebno je saznati i njegove funkcionalnosti. Pretragom nizova znakova to jest Stringova moguće je saznati dodatne informacije o programu i utvrditi neke funkcionalnosti. Pretraga može pronaći IP adrese, URL-ove, adrese bitcoin novčanika, poruke o pogreškama i ostale dijelove koda pisane u prirodnom jeziku. Tako se na temelju pojave IP adrese ili URL-a može zaključiti da će se program spojiti na mrežu i nešto slati ili primati s nje. Za ispis nizova znakova koristi se naredba strings koja je dostupna na svim najraširenijim operacijskim sustavima. Uz naredbu se najčešće koristi regularni izraz koji filtrira rezultate jer ih u suprotnom ima previše za uspješnu analizu.[[https://resources.infosecinstitute.com/topic/malware-analysis-basics-static-analysis/|[1]]]
==== Analiza PE sekcija ====
Na Windows operacijskom sustavu većina malicioznih programa dolazi u obliku exe datoteka koje unutar PE (Portable Executable) sekcija datoteke osim koda sadrže i neke dodatne informacije. Kod koji se izvodi je pohranjen u sekciji .text, a osim nje postoje i sekcije .rdata, .data i .rsrc. Sekcija .rsrc koja služi za resurse poput slika i ikona može sadržavati i maliciozne programe koji se pozivaju iz glavnog programa. Time glavni program može izgledati legitimno, a kod koji šteti računalu ili krade podatke se sakrije u izvedbenu datoteku unutar .rsrc sekcije. PE format također sadrži import i export tablice iz kojih se saznaje koje su funkcije i knjižnice uvezene i izvezene iz programa. Ta informacija može biti jako korisna jer knjižnice otkrivaju koje bi mogle biti mogućnosti programa. [[https://nasbench.medium.com/malware-analysis-techniques-basic-static-analysis-335a7286a176|[2]]]
===== Alati za statičku analizu malwarea =====
==== VirusTotal ====
Web stranica VirusTotal je vrlo koristan alat pri detekciji malicioznih programa. On agregira više različitih antivirusa i online alata za skeniranje. Korisnicima može poslužiti da dodatno provjere programe koje je njihov antivirus propustio, ali i da provjere je li blokirani program uistinu malware ili ga je antivirus krivo detektirao. Alat je moguće koristiti preko Web stranice koja nudi analizu datoteke, URL-a, IP adrese, domene ili hash vrijednosti. VirusTotal nudi i API kojem je moguće slati upite naredbama curl iz komandne linije.
Kako bi se poslao zahtjev na API nije potrebna nikakva instalacija već samo jedinstevni API ključ koji korisnik može pročitati na stranici nakon uspješne registracije. Taj se ključ prosljeđuje u svakom zahtjevu, a osim njega se šalje i izračunata hash vrijednost programa koji se analizira (isječak 4.1).
curl -v --request POST \
--url 'https://www.virustotal.com/vtapi/v2/file/report' \
-d apikey=$your-api-key \
-d 'resource=$your-file-hash'
Isječak 4.1. Poziv VirusTotal API-ja [[https://www.tines.io/blog/virustotal-api-security-automation|[5]]]
Odgovor API-ja je u obliku kao na isječku 4.2. te se iz njega može vidjeti koji integrirani alati su ga detektirali. Odlaskom na poveznicu unutar odgovora dobiva se ljepši prikaz analize(slika 4.1.) gdje možemo vidjeti što je detektirao određeni alat, te se također mogu saznati drugi detalji o datoteci kao što su vrijeme stvaranja i izmjene, ime malwarea i ponašanja koja su detektirana kao zapis u datoteku. [[https://www.tines.io/blog/virustotal-api-security-automation|[5]]]
{
'response_code': 1,
'verbose_msg': 'Scan finished, scan information embedded in this object',
'resource': '99017f6eebbac24f351415dd410d522d',
'scan_id': '52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c-1273894724',
'md5': '99017f6eebbac24f351415dd410d522d',
'sha1': '4d1740485713a2ab3a4f5822a01f645fe8387f92',
'sha256': '52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c',
'scan_date': '2010-05-15 03:38:44',
'positives': 40,
'total': 40,
'scans': {
'nProtect': {'detected': true, 'version': '2010-05-14.01', 'result': 'Trojan.Generic.3611249', 'update': '20100514'},
'CAT-QuickHeal': {'detected': true, 'version': '10.00', 'result': 'Trojan.VB.acgy', 'update': '20100514'},
'McAfee': {'detected': true, 'version': '5.400.0.1158', 'result': 'Generic.dx!rkx', 'update': '20100515'},
'TheHacker': {'detected': true, 'version': '6.5.2.0.280', 'result': 'Trojan/VB.gen', 'update': '20100514'},
.
.
.
'VirusBuster': {'detected': true, 'version': '5.0.27.0', 'result': 'Trojan.VB.JFDE', 'update': '20100514'},
'NOD32': {'detected': true, 'version': '5115', 'result': 'a variant of Win32/Qhost.NTY', 'update': '20100514'},
'F-Prot': {'detected': false, 'version': '4.5.1.85', 'result': null, 'update': '20100514'},
'Symantec': {'detected': true, 'version': '20101.1.0.89', 'result': 'Trojan.KillAV', 'update': '20100515'},
'Norman': {'detected': true, 'version': '6.04.12', 'result': 'W32/Smalltroj.YFHZ', 'update': '20100514'},
'TrendMicro-HouseCall': {'detected': true, 'version': '9.120.0.1004', 'result': 'TROJ_VB.JVJ', 'update': '20100515'},
'Avast': {'detected': true, 'version': '4.8.1351.0', 'result': 'Win32:Malware-gen', 'update': '20100514'},
'eSafe': {'detected': true, 'version': '7.0.17.0', 'result': 'Win32.TRVB.Acgy', 'update': '20100513'}
},
'permalink': 'https://www.virustotal.com/file/52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c/analysis/1273894724/'
}
Isječak 4.2. Odgovor VirusTotal API-ja [[https://www.tines.io/blog/virustotal-api-security-automation|[5]]]
{{ :racfor_wiki:malware:virustotal.png?650 }}
Slika 4.1. Rezultat analize programa na VirusTotal[[https://www.virustotal.com/gui/file/52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c/detection|[8]]],
==== PE Studio ====
PE studio je alat koji služi za statičku analizu programa u formatu Portable Executable što je uobičajeni format izvršnih datoteka na Windows operacijskom sustavu. Alat omogućava otkrivanje ugrađenih datoteka, pregled stringova,import i export tablica te se također povezuje i s prethodno navedenim VirusTotal s kojeg dohvaća ocjenu pouzdanosti. Za analizu je moguće koristiti naredbe u terminalu ili GUI verziju programa.
Kako bi se alat koristio potrebno je preuzeti ga s [[https://winitor.com/download|poveznice]] te ga raspakirati nakon čega je spreman za upotrebu. Nakon otvaranja potrebno je otvoriti sumnjivu datoteku ili je samo povući i ispustiti na prozor s programom. PE studiju treba nekoliko sekundi za analizu, a zatim prikaže neke generalne informacije o datoteci kao što su entropija i MD5 hash vrijednost. U izborniku je dostupna i opcija indikatori gdje piše je li se datoteka smatra opasnom. Tu informaciju PE studio dobiva od VirusTotal alata, no moguće je tu opciju onemogućiti unutar datoteke settings.xml. U izborniku je ponuđena i opcija imports koja vraća popis svih funkcija koje su referencirane unutar datoteke. PE studio dolazi s predefiniranom listom knjižnica i funkcija koje su česte u malware-ima stoga može označiti maliciozne funckije zastavicom blacklisted kako je prikazano na slici. Alat također sadrži listu sumnjivih nizova znakova stoga i njih može označiti. Na slici 4.2. je vidljivo kako je u ovom primjeru pronađeno 79 nizova karakterističnih za maliciozne programe. Opcija resources nudi pregled datoteka ugrađenih u program gdje napadači često sakriju dodatne izvršne datoteke. [[https://isc.sans.edu/forums/diary/Triaging+suspicious+files+with+pestudio/22706/|[7]]]
{{ :racfor_wiki:malware:imports.jpg?650 }}
Slika 4.2. Pregled import tablice[[https://isc.sans.edu/forums/diary/Triaging+suspicious+files+with+pestudio/22706/|[7]]]
==== Yara ====
Maliciozne programe moguće je otkriti i uz korištenje alata Yara. Taj je alat napravljen upravo za identificiranje i klasificiranje malwarea te na temelju tekstualnih i binarnih uzoraka prepoznaje grupe malwarea. Yara analizira program na temelju korisnički definiranih pravila stoga je ova tehnika najbolja za već iskusne korisnike koji znaju definirati korisna pravila. Pravila se mogu definirati tako da u programu traže uzorke funkcija koji se javljaju u drugim programima za koje je već ustanovljeno da su malware. Primjer pravila koje traži uzorak iz već poznatog Silent Banker Trojan prikazan je na isječku 4.3. Pravilo sadrži dvije ključne riječi: strings i condition, strings definira koji se niz znakova ili byetova traži u programu, a condition definira kriterij detekcije. Ovisno o potrebi moguće je definirati detekciju kada su pronađeni svi navedeni nizovi ili samo određeni broj. [[https://medium.com/bugbountywriteup/intro-to-malware-detection-using-yara-eacab8373cf4|[10]]]
rule silent_banker : banker
{
meta:
description = "This is just an example"
threat_level = 3
in_the_wild = true
strings:
$a = {6A 40 68 00 30 00 00 6A 14 8D 91}
$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
condition:
$a or $b or $c
}
Isječak 4.3. Primjer Yara pravila [[https://medium.com/bugbountywriteup/intro-to-malware-detection-using-yara-eacab8373cf4|[10]]]
Yara pravila pojavljuju se i u ostalim alatima za detekciju malicioznih programa. Već navedena stranica VirusTotal omogućuje korisicima dodavanje vlasitith pravila kako bi se lakše pratili uzorci programa. Prilikom analiziranja nove datoteke koriste se upravo ta korisnički definirana pravila.
===== Zaključak =====
Jedna od metoda zaštite računala od malicioznih programa je statička analiza. Ona se provodi nad izvornim kodom ili binarnom datotekom bez potrebe za pokretanjem. Kako program nije pokrenut ova vrsta analize ne ugrožava računalo i može se provoditi bez potrebe za virtualnom mašinom. Tehnike analize razlikuju se ovisno o formatu programa. Bez obzira na format, na temelju hash vrijednosti programa moguće je saznati je li on već bio analiziran te koji je bio rezultat analize. Format programa odnosno njegova ekstenzija daje do znanja za koji je operacijski sustav on namijenjen to jest u slučaju malware-a za koji sustav je program opasan. Funkcionalnost nepoznatog programa moguće je saznati na više načina: pretragom nizova znakova te pregledom tablica uvezenih i izvezenih knjižnica i funkcija. Ako je analizirani program formata Portable Executable prethodne informacije, ali i neke dodatne podatke poput ugrađenih datoteke moguće je pronaći unutar PE zaglavlja.
===== Literatura =====
[1] [[https://resources.infosecinstitute.com/topic/malware-analysis-basics-static-analysis/|Infosec: Static Malware Analysis]], 29.4.2015. , pristupljeno 14.1.2021.
[2] [[https://nasbench.medium.com/malware-analysis-techniques-basic-static-analysis-335a7286a176|Medium: Malware Analysis Techniques — Basic Static Analysis]], 13.9.2019. , pristupljeno 14.1.2021.
[3] [[https://shehackske.medium.com/static-analysis-of-malware-pt-1-720e03668e22|SheHacks_KE: Static Analysis of Malware (Pt.1)]], 17.7.2020. , pristupljeno 14.1.2021.
[4] [[https://www.theta432.com/post/malware-analysis-part-1-static-analysis|Theta432: Malware Analysis - Part 1: Static Analysis]], 25.6.2020., pristupljeno 14.1.2021.
[5] [[https://www.tines.io/blog/virustotal-api-security-automation |Tines: VirusTotal API – Getting started with security automation]], pristupljeno 15.1.2021.
[5] [[https://www.csoonline.com/article/2615925/security-your-quick-guide-to-malware-types.html|CSO: 9 types of malware and how to recognize them]], 17.11.2020., pristupljeno 15.1.2021.
[6] [[https://comtact.co.uk/blog/what-are-the-different-types-of-malware/|Comtact: What are the different types of Malware?]], 14.3.2019., pristupljeno 15.1.2021.
[7] [[https://isc.sans.edu/forums/diary/Triaging+suspicious+files+with+pestudio/22706/|SANS ISC InfoSec Forums: Triaging suspicious files with pestudio]], 3.8.2020., pristupljeno 15.1.2021.
[8] [[https://www.virustotal.com/gui/file/52d3df0ed60c46f336c131bf2ca454f73bafdc4b04dfa2aea80746f5ba9e6d1c/detection|VirusTotal: Detection]], pristupljeno 16.1.2021.
[9] [[https://www.sciencedirect.com/topics/computer-science/obfuscation-code|ScienceDirect: Obfuscation Code]], pristupljeno 17.1.2021.
[10] [[https://medium.com/bugbountywriteup/intro-to-malware-detection-using-yara-eacab8373cf4| Medium: Intro to Malware Detection using YARA]], 17.2.2020., pristupljeno 16.1.2021.
[11] [[https://www.geeksforgeeks.org/working-with-magic-numbers-in-linux|GeeksforGeeks:Working with Magic numbers in Linux]], 5.6.2020., pristupljeno 17.1.2021.
[12] [[https://tech-zealots.com/malware-analysis/pe-portable-executable-structure-malware-analysis-part-2/|Tech zealots: Understanding PE Structure, The Layman’s Way – Malware Analysis Part 2]], 10.5.2018., pristupljeno 17.1.2021.