Sadržaj

Analiza procesa operativnog sustava Linux

Sažetak

Detekcija i analiza zlonamjernih programa započinje analizom radne memorije, dok je sama memorija tvrdog diska manje bitna. U radnoj memoriji su pohranjeni podaci pokrenutih procesa. Ovim seminarom opisat ćemo ukratko nastanak procesa, njihove tipove i strukturu. Prikazat ćemo neke od programa namijenjenih analizi i kontroli procesa operacijskog sustava Linux.

Ključne riječi: procesi; Linux; terminal; analiza;

Uvod

Kada pričamo o detekciji zlonamjernih programa i analizi malwarea, memorija pohranjena na tvrdom disku nije toliko bitna (osim u slučajevima utvrđivanja slijeda događaja). Jezgra operacijskog sustava kao i svi ostali pokrenuti programi unutar sustava pohranjeni su u radnoj memoriji. Radna memorija jedino je mjesto u sustavu gdje se mogu pronaći nekriptirani podaci samih procesa, također je moguće pronaći kriptografske ključeve.

Procesi u sustavima baziranim na Linuxu organizirani su u niz susjednih podatkovnih struktura, tj. spremnike kreirane za pokrenute programe. Oni sadrže sve potrebno za izvršavanje programa, uključujući preslike izvršnih datoteka, poveznice za vanjske module (.so objekte), varijable, podatke o pokretanju itd. Procesi imaju unaprijed definiranu logičku strukturu, a najjednostavniji prikaz je dan donjom slikom (Slika 1) [4].

Slika 1: Logička struktura procesa

Procesi u operativnom sustavu Linux

Izvršavanjem programa na sustavu pogonjenom Linux operativnim sustavom, sustav stvara posebno okruženje za taj program. To okruženje možemo nazvati proces. Proces je naziv za program u izvođenju. Sastavljen je od programskih instrukcija, podataka pročitanih iz datoteka, drugih programa ili ulaznih instrukcija dobivenih od korisnika sustava.

Procesi se mogu svrstati u dvije skupine [1,2]:

Novi procesi uobičajeno nastaju kada već postojeći proces kopira sam sebe u memoriji. Proces djeteta imat će istu okolinu kao i roditelj, a samo identifikacijski broj se razlikuje među njima.

Najčešći korišteni načini stvaranja procesa unutar Linuxa su:

Svaki proces u izvođenju treba biti moguće jednoznačno identificirati, za to se koriste ID procesa (PID) i ID roditeljskog procesa (PPID).

Ovime možemo podijeliti procese u dvije kategorije:

  1. Roditeljski procesi – Procesi koji stvaraju druge procese za vrijeme svog izvođenja
  2. Procesi djece – Procesi koji su stvoreni od strane drugih procesa za vrijeme izvođenja

Proces roditelj svim procesima naziva se init() proces. To je prvi program koji je izveden za vrijeme pokretanja sustava baziranog na Linuxu; upravlja svim ostalim procesima. ID procesa init uvijek je 1, te „posvaja” sve procese bez roditelja.

Proces za vrijeme svoga izvođenja može mijenjati stanja (Slika 2):

  1. Running (u izvođenju) – proces u izvođenju ili spreman za izvođenje(čeka na dodjelu CPU-a)
  2. Waiting (čeka) – čeka na pojavu događaja ili dodatne resurse. Imamo prekidne i neprekidne procese u čekanju.
  3. Stopped (zaustavljeni) – proces je zaustavljen, najčešće dobivanjem signala (npr. CTRL+Z)
  4. Zombie – proces je završio (eng. halted) ali i dalje postoji u tablici procesa.

Slika 2: Stanja procesa

Alati za analizu

Naredbe ps, top i glances

Dva najčešće korištena alata za pregled pokrenutih procesa su ps i top terminal naredbe.

Naredba ps [3, 6] (Slika 3) prikazuje informacije o aktivnim procesima sustava. Pokretanjem naredbe ps bez dodavanja opcija, ispisuje se standardi obliku; ispisuje četiri vrijednosti za pojedini proces: njegov PID, TTY (terminal koji je pokrenuo proces), vrijeme korištenja procesora i CMD (naredba koja je pokrenula proces). Po završetku ispisa podataka proces naredbe ps se terminira.

Neke od opcija pokretanja naredbe ps su:

Slika 3: Naredba ps

Naredba top [7] (Slika 4) dinamički u stvarnom vremenu daje uvid u aktivne procese i njihovo zauzeće resursa. Jedna je od najkorisnijih naredbi sistemskih administratora i dolazi instalirana na svim distribucijama Linuxa. Za razliku od naredbe ps, naredba top je interaktivna te omogućava pretraživanje kroz liste procesa, “ubijanje” procesa i slično. Kod ispisa u zaglavlju vidljivi su podaci kao trenutno vrijeme, vrijeme sustava u radu, zauzeće radne i swap memorije, broj pokrenutih procesa na sustavu i opterećenje procesora.

Neke od opcija naredbe top:

Slika 4: Naredba top

Naredba glances [5] (Slika 5) najnovija je od gore navedenih naredbi. Jedna od funkcija je naglašavanje procesa koji zauzimaju najviše resursa. Na samom vrhu ispisanih podataka ispisane su privatna i javna IP adresa računala, proteklo vrijeme od pokretanja sustava te zauzeće memorije i procesora. Lijevo su ispisani informacije o prometu mreže, diskovi i senzori temperature sustava. Desna strana prikazuje pokrenute procese i informacije o njima (kao što su zauzeće memorije i procesora, identifikacijski broj…). Naredba glances se koristi vizualnim identificiranjem problema korisniku:

Neke od interaktivnih naredbi:

Slika 5: Naredba glances

Naredbe kill, pkill, killall, pgrep

Linux također dozvoljava upravljanje procesima.

Naredba kill (Slika 6) terminira proces; to jest ako proces ignorira regularni način gašenja, kill -9 [PID] će odraditi posao.

Dok naredba kill terminira proces zadan PID-om, naredbom pkill moguće je terminirati proces zadavanjem naziva ili drugih atributa. Naredba killall također šalje signale procesu definiranom imenom.

Pronalazak PID-a određenog procesa moguće je naredbom pgrep. S obzirom na zadane kriterije pretrage (npr. naziv ili drugi atributi) ispisuje PID procesa.

Osnovni način kontroliranja procesa je slanjem signala. Slanje tih signala moguće je gore navedenim naredbama kill, pkill, killall naredbama, ali programi mogu odgovarati na signale jedino ako su tako programirani.
Popis signala dobivamo naredbom kill -l.

Slika 6: Naredba kill

Najčešće korišteni signali su:

Procesi se razlikuju po prioritetu; što je prioritet veći proces dobiva više vremena na CPU-u. Taj prioritet također je moguće mijenjati. Naredbom nice moguće je pokrenuti proces te definirati njegov prioritet, a naredba renice omogućava promjenu postojećeg prioriteta nekog procesa.

Zaključak

Analiza rada pokrenutih programa započinje identifikacijom njegovih procesa. Ovim radom
probali smo opisati osnovnu teoriju nastanka i „života“ procesa, te identifikaciju i analizu
istih.
U osnovi analiza pokrenutih procesa provodi se u svrhu identifikacije problematičnih
procesa te njihove eliminacije.
Korištenjem osnovnih metoda navedenih u radu moguće je detektirati problematične
procese te reagirati u skladu s problemom.

Literatura

[1] Aaron Kili, All You Need To Know About Processes in Linux [Comprehensive Guide], 2017

[2] Unix Processes Management

[3] Aaron Kili, 30 Useful ‘ps Command’ Examples for Linux Process Monitoring, 2017

[4] Michael, Linux Process Analysis, 2017

[5] Anirban Das, How to install and use Glances to monitor Linux systems

[6] Mausami Inhe, ps command in Linux with Examples

[7] Supriyo Biswas, A Guide to the Linux “Top” Command