Cuckoo Sandbox

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Temu rezervirali: Tino Balint, Dean Jakovljević, Ivan Šepl

Sadržaj

Uvod

Kako bi lakše razumijeli ovu temu, morali smo proučiti što je to zapravo sandbox. Možemo se povezati sa stvarnim svijetom u ovoj situaciji. Sandbox u prijevodu znači kutija s pijeskom, ali mi ćemo na to gledati kao igralište s pijeskom u kojem se igraju djeca. Upravo to je i softver sandbox, nije ništa drugačiji od ovoga u kojem se igraju djeca. Ako pružimo sandbox djeci da se igraju, mi smo zapravo simulirali stvaran prostor u kojem se oni mogu igrati, drugim riječima to je isolated environment odnosno izolirana okolina, ali s ograničenjima što dijete smije raditi. Npr. ne smijemo mu dati da stavlja u usta pijesak, da baca pijesak na drugu djecu i slično. Znači mi želimo staviti ograničenja što dijete smije raditi zbog sigurnosnih razloga. A sad kako je to povezano sa našim sandboxom, mi dopuštamo bilo kakvom programu (djetetu) da se izvrši (igra se) ali mu zadajemo ograničenja o tome što program (dijete) smije raditi. Na taj način smo sigurni i zaštićeni što program (dijete) može napraviti. Još jedan primjer sandbox-a kojeg smo sigurno svi koristili je antivirus, on sam zadaje ograničenja što programi smiju raditi. Ako se slučajno detektirana zlonamjerna radnja, antivirus nam to javlja, zaustavlja izvođenje i izdaje nam upozorenje o tome. S ovime dolazimo do definicija što je to zapravo sandbox. Ako gledamo sa strane programskog inženjerstva sandbox je okolina za testiranje, izoliramo netestirani kod od strane npr. našeg repozitorija. Sa strane računalne sigurnosti sandbox jer sigurnosni mehanizam za odvojeno pokretanje određenih programa. Dolazimo do zaključka da je sandbox zapravo „kutija“ koja nam na siguran način omogućuje vršiti određene radnje, te ovisno o tim radnjama dolazimo do zaključaka. Računalna sigurnost je jedan od najvažnijih ako ne i najvažnijih čimbenika nekog većeg poslovanja. Pomoću sandbox-a poduzeća pokreću netestirani kod/programe, programe kojima ne vjerujemo koji dolaze od treće strane, raznih korisnika ili web stranica, bez ikakvog rizika da se zarazi računalo odnosno njegov operacijski sustav na kojem se te stvari testiraju. Implementiran je na način da pokreće programe koje želimo provjeriti u ograničenom prostoru operacijskog sustava ali na način da se kontroliraju resursi ( file destriptori, memorija, itd.) koje bi taj program mogao koristiti. Kroz ilustraciju se može vidjeti kako to zapravo izgleda u računalo, na koji način je sve ovo moguće što smo napisali. U ovom primjeru koristi se Sandboxie, prikazan je samo primjer na koji način sandbox zapravo radi. U nastavku ćemo objasniti kako funkcionira Cuckoo Sandbox, također kroz jednu ilustraciju.


Primjer rada Sandboxie

Općenito o Cuckoo Sandbox

Što je sami Cuckoo možemo reći u par riječi, to je sustav za analizu zlonamjernog koda/programa. Kako smo i definirali što je to sandbox tako i sam Cuckoo, ubacimo u njega bilo kakvu sumnjivu datoteku i u nekoliko sekundi Cuckoo će nam prikazati detaljne rezultate o toj datoteci, odnosno što je ta datoteka napravila kada se pokrenula unutar izoliranog okruženja. U današnje vrijeme kako smo i rekli da je računalna sigurnost jedno od najvažnijih područja bilo kakvog razvoja programa ili slično, pa zbog toga više nije dovoljno samo detektirani i obrisati zlonamjernu datoteku odnosno malware, nego važno je shvatiti kako taj malware funkcionira, na koji način radi, odnosno trebamo saznati sve o njemu kako bi se mogli obraniti u budućnosti. Za sada sam Cuckoo može analizirati datoteke na Windows, OS X, Linux i Android operacijskim sustavima. Vrste rezultata koje Cuckoo može saznati kada analizira pojedini malware su sljedeće:

Cuckoo Sandbox je projekt koji je bio pokrenut 2010. godine kao dio Google Summer of Code. Originalno je osmišljen od strane Claudia Guarnieria, koji je i trenutno programer, i najvećim djelom je on zaslužan za to gdje se Cuckoo sada nalazi. Godine 2011 izlazi prva verzija Cuckoo Sandboxa. Godinu kasnije ostvara se stranica Malwr.com, koja je online verzija Cuckoo Sandboxa. Od početka pa do danas Cuckoo je u konstantom razvoju te danas imamo verziju 2.0 na korištenje. Zbog toga kako je Cuckoo napravljen može ga se koristit kao zasebnu aplikaciju ali može se također integrirati u određene druge framework-e. Može analizirati razne stvari, neke od njih su:

Arhitektura i način rada

Cuckoo Sandbox se sastoji od softvera koji je zadužen za upravljanje sa pokretanjem i analizom samih datoteka koje se provjeravaju. Analize se mogu pokretati u virtualnim ili fizičkim uređajima. Glavne komponente Cuckoo-ve infrastrukture je Host uređaj (to je i ovaj uređaj kojeg sam spomenuo gore) te jedan ili više Guest uređaja svejedno da li su oni virtualni ili fizički, ovo sve o čemu smo pričali prikazano je na slici ispod, najbolje se iz nje vidi kako i na koji način zapravo Cuckoo funkcionira.

Arhitektura Cuckoo Sandbox-a

Konfiguriranje/instalacija Cuckoo Sandbox-a

Sama instalacija Cuckoo Sandbox-a nije jednostavna. Nailazili smo na dosta problema tijekom instalacije, radi toga ćemo napraviti kratak tutorial kako instalirati Cuckoo Sandbox, također pokušati ćemo što detaljnije objasniti postupak instalacije. Kao preporuka od strane Cuckoo dokumentacije je da se koristi Linux (Ubuntu se preporuča ali mi smo sve uspjeli napraviti i na Xubuntu, koji je dobar ako imate slabije računalo a pokrećete ga preko VirtualBox-a) kao Host računalo a kao Guest računala se preporuča korištenje Windows XP-a. U nastavku sljede koraci instalacije Cuckoo Sandbox-a kao i konfiguracija svih potrebnih stvari kako bi mogli izvršiti analizu malware-a. Pošto instalaciju radimo na potpuno novo instaliranom Ubuntu, prvo je bilo potrebno ažurirati i nadograditi operacijski sustav, to činimo sljedećim linijama.

          sudo apt-get update
          sudo apt-get upgrade

U ovom slučaju koristimo sudo da bi pokrenuli naredbu kao root korisnik te će biti potrebno unijeti lozinku. Nakon ažuriranja potrebno je skinuti python s odgovarajućim bibliotekama pokretanjem naredbe:

          sudo apt-get install python python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg-dev

Pip je sustav za pakete koji se koristi za instalaciju i upravljanje paketima napisanim u Pythonu. Libssl je dio OpenSSL-a koji se koristi za SSL i TLS kriptografske protokole za sigurnu komunikaciju preko interneta. Libxml2 je XML C parser i alat. Libxslt1 je XSLT C biblioteka. XSLT je jezik koji definira transformacije za XML. Libjpeg je biblioteka koja služi za pisanje i čitanje JPEG slikovnih datoteka.

Sada je potrebno skinuti cuckoo (gore iznad je već nadeven link s koje stranice se može preuzeti) i raspakirati ga te se pozicionirati na mjesto raspakiravanja i tamo pokrenuti naredbu:

          sudo pip install -r requirements.txt+

Nakon toga je potrebno skinut pydeep sa linka https://github.com/kbandla/pydeep te ga otpakirati i instalirati. Da bi ga instalirali potrebno je skinuti još jednu biblioteku za pyhton naredbom:

          sudo apt-get install python-dev libfuzzy-de

Biblioteka libfuzzy koristi funkcije za fuzzy hashing. To je metoda usporedbe sličnih, ali ne identičnih datoteka. Možemo pronaći slićne hash datoteke npr. md5sum ili sha1sum.

Nakon skidanja libfuzzy-a potrebno se pozicionirati u datoteku gdje smo otpakirali pydeep i pokrenuti instalaciju naredbom:

          sudo python setup.py install

Pydeep koristimo za povezivanje sa ssdeep bibliotekom. Ssdeep je program za računanje i povezivanje ranije spomenutog fuzzy hashinga.

Sada je potrebno instalirati tcpdump naredbom:

          sudo apt get install tcpdump

Tcpdump se koristi za analizu paketa koji se pokreće komandnom linijom. Omogućava korisniku pregled TCP/IP i drugih paketa koji su poslani i primljeni preko mreže na koju je računalo spojeno.

Nakon toga je potrebno postaviti mogućnosti odgovarajućih datoteka naredbom:

          sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

Setcap služi upravo tome, da postavimo mogućnosti datoteke. Cap_net_raw znaći da omogućujemo korištenje RAW i PACKET socket-a. Cap_net_admin daje privilegije za različite mrežne operacije

Zbog provjere pokrenemo naredbu:

          getcap /usr/sbin/tcpdump

Koja će nam prikazati ime i mogućnosti navedene datoteke.

Nakon postavljanja mogućnosti potrebno je skinuti i otpakirati Volatility razvojni okvir sa linka https://github.com/volatilityfoundation/volatility

te zatim se pozicionirati u datoteku i pokrenuti:

          sudo python setup.py install

Volatility je razvojni okvir napisan u Pythonu koji služi za vađenje podataka iz radne memorije.

Sada je potrebno skinuti VirtualBox i namjestiti Windows xp. Skinemo virtualbox naredbom:

          sudo apt-get install virtualbox

te ga zatim pokrenemo naredbom:

          sudo virtualbox

Kada smo pokrenuli virtualbox potrebno je instalirati Windows xp sa service pack 3. Potrebno je iskućiti firewall i automatska ažuriranja. Treba postaviti adresu u rasponu 192.168.56.1-255, a DNS na 8.8.8.8 Nakon toga ugasiti virtualku i podesiti internet naredbama:

          vboxmanage hostonlyif create
          vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1
          vboxmanage modifyvm 'winxp' --hostonlyadapter1 vboxnet0 
          vboxmanage modifyvm 'winxp’' --nic1 hostonly


Winxp je naziv koji smo dali Windows xp na VirtualBox-u. Ako koristite drugačiji naziv potrebno je koristiti taj naziv i ovdje. Ove naredbe služe za kreiranje sučelja koje može koristiti samo domaćin, postavljanje ip adrese te zadim dodjeljivanje mrežnog adaptera koji ćemo koristiti na Windowsima.

Zatim se pokrenu sljedeće naredbe kako bi postavili IP tablice.

          sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
          sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
          sudo iptables -A POSTROUTING -t nat -j MASQUERADE
          sudo sysctl -w net.ipv4.ip_forward=1

Naredba iptables se koristi za postavljanje, održavanje i pregled IP tablica. Preusmjeravamo pakete da prolaze kroz izlazno sučelje eth0 te da dolaze na ulazno sučelje vboxnet0 na adresu 192.168.56.0/24 te da ih uvijek prihvaćamo. Također postavili smo da prihvaćamo pakete u oba smjera te da kada dođe do nove konekcije da bude povezana sa starom. Na kraju mijenjamo postavke jezgre da omogućuje prosljeđivanje paketa preko ipv4 ukoliko ono već nije bilo omogućeno.

Potrebno je ponovo pokrenuti Windows xp i na njemu instalirati python 2.7 i skinuti cuckoo sandbox. Cuckoo sandbox je potrebno raspakirati, zatim pokrenuti agenta i napravi snapshot. Agent.py je python skripta koja služi za kominikaciju između uređaja, pomoću nje Cuckoo zna s kojim uređajem je povezan, zato taj agent mora biti pokrenut u ovom slučaju u Windows XP.

Sada treba podesiti config datoteke, one se nalaze u mapi cuckoo te podmapi conf.

U auxiliary.conf treba provjeriti putanju do tcpdump.

U cuckoo.conf treba postaviti:

          Memory_dump= on
          version_check=off
          Ip = 192.168.56.1

U Virtualbox.conf treba postaviti:

          mode=gui
          path = /usr/bin/VBoxManage 
          machines=winxp  ili naziv koji ste vi koristili
          ip = 192.168.56.10 
          label=winxp ili naziv koji ste vi koristili

Sada je potrebno pokrenuti virtualbox u root načinu rada:

          sudo virtualbox

Ukoliko slika ne radi u root načinu, potrebno je ponovo učitati sliku koju smo prethodno koristili tako da se pozicioniramo u datoteku gdje je skinut Cuckoo. Prije pokretanja Cuckoo-a potrebno je još skinuti biblioteku distorm3. Distorm3 je razlagač koji od instrukcije vraća binarni kod umjesto čistog teksta što pomaže oko analize koda. Možemo ga skinuti naredbom:

          sudo pip install distorm3

Osim distorm3 trebamo skinuti i pycrypto. Pycrypto sadrži kolekciju sigurnih hash funkcija poput SHA256 i RIPEMD160 i različite algoritme kao što su AES, DES, RSA i sl. Pycrypto možemo skinuti naredbom:

          sudo pip install pycrypto


Sada smo spremni za pokretanje Cuckoo-a ukoliko smo pozicionirani u datoteci gdje se nalazi naredbom:

          sudo python cuckoo.py
Cucko3.png


Pojaviti će se greška kao na slici koja vam govori da je potrebno ažurirati Cuckoo jer nemate zadnju verziju pa je potrebno pokrenuti

          ./utils/community.py -wafb monitor

Provjerite još jednom da li vam je Windows XP upaljen u virtualci, da li je agent.py u njemu pokrenut, ako je sve to u redu pokrenite naredbu:

          sudo python cuckoo.py

Nakon toga trebali bi dobiti sliku kao ispod, treba pisati da je učitan jedan uređaj i da se sada čeka na analizu.

Cucko2.png

Kratak primjer korištenja

Nakon što se uspješno podigne cuckoo sandbox potrebno je pronaći dokumente koje želimo testirati. Sa stranice dasmalwerk.eu preuzeli smo prvi zip dokument te ga raspakirali kako bismo ga mogli istestirati.

Analiza1.png
Analiza2.png


Raspakiranjem smo dobili virus.file koji je ujedno executable dokument. Testiranje se vrši tako da se pokrene submit.py koji se nalazi u utils folderu već prethodno skinutog cuckoo-a.

Testiranje se pokreće pomoću sljedeće naredbe

         sudo python ./cuckoo/utils/submit.py virus.file

Virus.file u prethodnoj naredbi je prvi argument koji se prosljeđuje programu submit.py (potrebna je cijela putanja do datoteke, no mi smo već bili pozicionirani na mjestu gdje se nalazi pa ju je dovoljno pozvati samo imenom).

Analiza3.png

Ako je sve u redu dodjeljuje se novi ID zadatka koji se prosljeđuje virtualnoj mašini winxp.

Analiza4.png

Nakon što se izvrši pregled, virtualna mašina se sama zatvara te se u terminalu pojavljuje obavijest da se zadatak s istim ID završio. Sljedeći korak je pregled rezultata, da bi to mogli vidjeti prvo je potrebno instalirati mongodb MongoDB je besplatna multi-platformska dokumentno-orijentirana baza podataka poznata kao NoSQL. MongoDB čuva podatke kao JSON dokumente sa dinamičkim shemama. Mongodb se instalira pomoću naredbe:

         sudo apt-get install mongodb

Nakon što se instalira, potrebno je dopustiti da cuckoo koristi mongodb. Dopuštenje se namješta u reporting.conf.

         [mongodb]
         enabled = yes
         host = 127.0.0.1
         port = 27017
         db = cuckoo
         store_memdump = yes
         paginate = 100

Sljedeće je potrebno pokrenuti lokalni server na kojemu ćemo pregledavati rezultate testiranja. Potrebno je pozicionirati se u terminalu u cuckoo/web te pokrenuti server. Pokreće se sljedećom naredbom:

         python manage.py runserver 
Analiza5.png

Pokretanjem servera u terminalu dobijemo adresu na kojoj možemo pristupiti podacima testiranja, u našem slučaju to se nalazi na adesi 127.0.0.1:8000.

Analiza6.png

Za ovaj virus nije bilo nikakvih podataka u bazi pa sam napravio ponovljeno testiranje ali za eicar virus, koji sam prethodno skinuo sa web stranice.

Po završetku testiranja dobili smo sljedeće rezultate:

Analiza7.png
Analiza8.png
Analiza9.png
Analiza10.png
Analiza11.png
Analiza12.png

Literatura

Cuckoo Sandbox

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima