1. Uvod

PEid je besplatan program otvorenog koda koji se koristi kod analize zloćudnih programa. Može otkriti pakirane (engl. packed) datoteke i raspakirati ih kako bi se one mogle dalje analizirati. Prepoznaje više od 600 digitalnih potpisa (engl. signatures) u PE datotekama.

Jednostavno ga je preuzeti i koristiti. Preuzimanje se može obaviti na stranici:

http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml

Potrebno je samo raspakirati arhivu koju smo preuzeli i pokrenuti PEiD aplikaciju. Nakon rasprakiravanja preuzete arhive, imat ćemo izgled direktorija prikazan na slici 1.1.

Slika 1.1. - prikaz direktorija nakon raspakiravanja

Osim datoteke za pokretanje vidimo i dva poddirektorija sa dodacima (engl. plugins) i još tri tekstualne datoteke:

  • readme – pruža nekoliko osnovnih informacija o samom alatu

  • external – pruža dodatne informacije o datoteci userdb

  • userdb – datoteka sa digitalnim potpisima. Korisnik je može po želji mijenjati i dodavati digitalne potpise za provjeru. Može ga se zamijeniti sa verzijom datoteke u kojoj su već dodani digitalni potpisi. Do nje se može doći putem nekih od sljedećih linkova za preuzimanje:

http://handlers.sans.org/jclausing/userdb.txt

http://reverse-engineering-scripts.googlecode.com/files/UserDB.TXT

Osnovni prozor koji će nam se tada otvoriti prikazan je na slici 1.2.

Slika 1.2 – osnovni prozor programa PEiD

Kao što je već rečeno, PEiD se koristi za otkrivanje pakiranih datoteka i njihovo raspakiravanje. Obično se koristi u kombinaciji s drugim alatima za analizu zloćudnih programa kao što su Process Explorer i Dependency Walker. Može otkriti način pakiranja ili kompilator kojim je datoteka izgrađena. Zloćudni programi često koriste metodu pakiranja kako bi prikrili svoju funkcionalnost i kako bi izgledali manji.

Ako prilikom analize u Process Exploreru ili Dependency Walkeru primijetimo mali broj znakovnih nizova i mali broj uvezenih (engl. imported) funkcija, možemo posumnjati da je promatrani program pakiran. Potom možemo program provjeriti pomoću alata PEiD i uvjeriti se je li stvarno tako.



2. Grafičko sučelje

Kao što je vidljivo na slici 1.2, grafičko sučelje sastoji se od nekoliko logičkih cjelina.

  1. File - polje u kojemu odabiremo datoteku za analizu pomoću gumba s desne strane

  2. Entrypoint – adresa polazišne točke sa koje se program pokreće

  3. EP Section – adresa PE datoteke na koju polazišna točka pokazuje. U ovom primjeru je .text što znači da pokazuje na dio PE datoteke u kojem se nalazi izvodivi kod programa

  4. File Offset – relativna adresa. Offset označava broj adresnih lokacija koje je potrebno dodati baznoj adresi kako bi se dobila specifična, apsoultna adresa

  5. First Bytes – heksadekadski zapis prvih bitova sa samog početka datoteke

  6. Linker Info – informacije o programu za povezivanje (engl. linker)

  7. Subsystem – informacije o podsustavu

Ako pokrenemo proizvoljni program, primjerice chrome.exe, prozor će nam izgledati kako je prikazano na slici 2.1.

Slika 2.1. - sučelje nakon pokretanja programa chrome.exe

Na slici 2.1. također možemo vidjeti da se s desne strane prozora, pored drugog stupca polja nalaze strelice. Ako na njih kliknemo, otvorit će nam se dodatni prozori.

Ako kliknemo na strelicu pored polja EP Section, otvorit će nam se prozor sa ispisom svih dijelova PE datoteke kako prikazuje slika 2.2.

Slika 2.2 – dijelovi PE datoteke

Zaglavlje PE datoteke sadrži metapodatke o samoj datoteci kao što su:

  • izvodivi kod programa

  • informacije o uvozu i izvozu (engl. import i export)

  • informacije o globalnim podacima kojima se može pristupiti iz bilo kojeg dijela programa

  • resursi koje program koristi

Ako kliknemo na strelicu pored polja First Bytes, otvorit će nam se prozor sa disasemblerom i popisom svih naredbi. U ovom prozoru odabirom guba Strings otvorit će nam se još jedan mali podprozor sa ispisom svih znakovnih nizova kako je prikazano na slici 2.3.

Slika 2.3 – prozor disasemblera i mali potprozor sa znakovnim nizovima

Programi koji su pakirani u ovom dijelu imaju jako malo znakovnih nizova i to pomoću ovog podprozora možemo provjeriti. Ispisani su svi znakovni nizovi programa i pritom je ignoriran kontekst i formatiranje. Pretražuju se nizovi od tri ili više znakova koji završavaju znakom za kraj niza u ASCII ili UNICODE-u. Zbog ove metode pretraživanja, u prozoru Strings program može ispisati znakovne nizove koji to zapravo nisu, nego su dijelovi podataka koje program koristi, memorijske adrese, instrukcije procesora i slično. Razlikovanje pravih stringova od lažnih ostavlja se na brigu korisniku. Na sreću, lažni stringovi su očiti pa ih možemo ignorirati u daljnoj analizi.

Klikom na strelicu pored polja Subsystem, otvorit će nam se prozor sa detaljnim informacijama o PE datoteci prikazan na slici 2.4.

Slika 2.4. - detaljan opis PE datoteke

Vidimo da je prozor podijeljen na dva dijela. U prvom dijelu su osnovne informacije o PE zaglavlju, a u drugom dijelu su detaljne informacije o direktoriju. Za analizu zloćudnih programa posebno su zanimljiva polja ExportTable i ImportTable jer možemo analizirati koje sve funkcije datoteka uvozi i izvozi.

Klikom na strelicu s desne strane polja ExportTable otvorit će nam se podprozor prikazan na slici 2.5.

Slika 2.5 - prikaz podprozora polja ExportTable

Analizom funkcija možemo vidjeti što program može izvesti. Zloćudni programi često koriste funkcije za manipulaciju registrima i dretvama i za sakrivanje funkcionalnosti.

Klikom na strelicu s desne strane polja ImportTable otvorit će nam se podprozor prikazan na slici 2.6.

Slika 2.6 - prikaz podprozora polja ImportTable

U gornjem dijelu prozora možemo vidjeti ispis svih uključenih dinamičkih knjižnica (engl. dynamic link library). Ako je kod pakiran, ovaj popis bit će veoma kratak i na njemu će se nalaziti neke od jezgrenih funkcija operacijskog sustava kojima korisnik inače nema izravan pristup.

U donjem dijelu prozora vidimo sve funkcije koje pojedina dinamička knjižnica uključuje. Zloćudni programi na ovom popisu funkcija često znaju imati funkcije LoadLibrary i GetProcAddress. Te funkcije su često korištene kod zloćudnih programa jer omogućavaju programu da uključi funkcije koje se ne nalaze u zaglavlju programa pa time zloćudni program skriva svoju pravu funkcionalnost.

Gumb Options u izborniku glavnog prozora grafičkog sučelja možemo podesiti koliko detaljno skeniranje PE datoteke želimo izvršiti. Postoje tri moguće opcije:

  • Normal mode

  • Deep mode

  • Hardcore mode



3. PEiD i analiza zloćudnih programa

Kako je već ranije navedeno, PEiD se uglavnom koristi za analizu zloćudnih programa s obzirom da je njegova glavna funkcionalnost otkrivanje pakiranog koda i njegovo raspakiravanje.

Pakiranje (engl. packing) je metoda koju autori zloćudnih programa često koriste kako bi svoje programe učinili težima za otkriti i analizrati. Zloćudni program podvrgava se procesu kompresije. Zbog toga se program prikazuje manjim nego što zapravo jest. Prilikom pokretanja pakiranog programa pokreće se i mali "program omotač" (engl. wrapper program). Program omotač vrši dekompresiju pakiranog programa i pokreće ga nakon što se raspakira. Prilikom pakiranja, oni transformiraju izvodivi program da bi stvorili novi izvodivi program u kojemu je zloćudni transformirani program spremljen kao podatak i sadrži programsku rutinu za rasprakiravanje koji poziva operacijski sustav. Transformirana datoteka je komprimirana i kriptirana kako bi je se teže otkrilo. Shema programa prije i nakon pakirana dana je na slici 3.1

Slika 3.1 – program prije i nakon pakiranja

Većina programa za pakiranje koristi algoritam kompresije. Program za pakiranje može pakirati sve podatke ili samo jedan njihov dio. Da bi se zadržala funkcionalnost originalnog programa, program za pakiranje mora pohraniti informacije o uvozu (engl. import).

Kako je već navedeno, komprimirana datoteka je kriptirana. PEiD posjeduje dodatak Krypto ANALyzer (KANAL) koji može prepoznati kriptografske funkcije. Kad se pokrene, KANAL ispisuje listu konstanti, tablica i kriptografskih funkcija koje su uključene u program. Pokretanje dodatka KANAL iz glavnog grafičkog sučelja prikazano je na slici 3.2

Slika 3.2 – pokretanje dodatka KANAL

Za demonstraciju rada alata PEiD napisan je kratki program u programskom jeziku C koji zbraja dva broja i pakiran je korištenjem programa UPX. U ovom primjeru sam kod izvornog programa nije toliko bitan nego je bitna činjenica da je program pakiran. Kada analiziramo zadani program naziva zad1.exe, dobit ćemo prikaz sa slike 3.3.

Slika 3.3 – sučelje nakon analize pakiranog programa zad1.exe

Vidimo da nam je PEiD ispisao da je program pakiran programom UPX. Također, umjesto nekog od standardnih dijelova PE zagljavlja u polju EP Section nam piše UPX1 što također upućuje na to da je taj program korišten za pakiranje.

Ako kliknemo na dvostruku strelicu ispod gumba Exit, otvorit će nam se mali podprozor sa dodatnim informacijama koji je prikazan na slici 3.4.

Slika 3.4. - podprozor sa dodatnim informacijama

Vidimo da je PEiD opet ispisao da je otkriven UPX kao program koji je korišten za pakiranje. Također, vidimo da je u polju Entropy dosta visoka vrijednost što znači da je program pakiran. Općenito, veća entropija jedan je od pokazatelja koji upućuju na pakiranje. Entropija pakiranih datoteka je veća jer je sličnija slučajnim podacima.

Kao što je već ranije spomenuto, dobro je pregledati popis uključenih funkcija. To ćemo učiniti tako da u prozoru sa detaljnim opisom PE datoteke opisanom u poglavlju 2 otvorimo podprozor ImportTable. Rezultat je prikazan na slici 3.5.

Slika 3.5 – prikaz podprozora ImportTable za pakirani program zad1.exe

Ako usporedimo sliku 2.6. na kojoj je prikaz uključenih funkcija programa koji nije pakiran i sliku 3.5. možemo uočiti bitnu razliku. Popis funkcija na slici 3.5. daleko je kraći. Štoviše, sastoji se od svega dvije funkcije od kojih je jedna jezgrena funkcija KERNEL32.DLL.

Kod analiziranja programa alatom PEiD važno je naglasiti da će on ponekad pokrenuti izvodivu (engl. executable) verziju zloćudnog programa bez upozorenja. Zbog toga se prije njegovog korištenja preporuča postaviti sigurnu okolinu u obliku virtualnog stroja u kojoj će se moći provoditi analiza bez opasnosti za korisnikovo računalo.



4. Zaključak

PEiD je vrlo jednostavan program za otkrivanje pakiranih datoteka. Intuitivno korisničko sučelje olakšava njegovu uporabu. Međutim, za razumijevanje svih detalja koje PEiD prikazuje potrebno je znanje asemblerskog programiranja i operacijskih sustava. Čitatelju kojemu je ovaj tekst bio težak za razumijevanje preporuča se detaljnije izučavanje navedenih područja.

Nove inačice programa PEiD prestale su izlaziti 2011. godine. Preporuča se koristiti najnoviju inačicu jer su stare imale slabost u obliku spremničkog preljeva (engl. buffer overflow). Pomoću tog nedostatka, autor zloćudnog programa mogao bi dobiti udaljeni pristup korisnikovom računalu (engl. arbitrary code execution) pa se zbog toga korisnik upućuje na dodatan oprez.



5. Literatura

[1]: http://www.aldeid.com/wiki/PEiD

[2] Fakultet elektrotehnike i računarstva; Radovi iz područja računalne sigurnosti; 2014; http://os2.zemris.fer.hr/index.php?show=start

[3] Michael Sikorski; Andrew Honig. Practical Malware Analysis: The Hands-On Guide To Dissecting Malicious Software. San Francisco: no starch press, 2012