====== 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]. {{ https://xerocrypt.github.io/articles/images/process-structure.gif?direct&301x451 |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]: * **interaktivni procesi;** Svi procesi pokrenuti korisnikovim ulaznim naredbama su interaktivni procesi. Ulazne podatke dobiva od korisnika, te rezultate izvođenja prikazuje na ekranu. * **pozadinski procesi;** Procesi koji nisu vezani uz terminal nazivaju se pozadinskim procesima. Kada se pojavi potreba za ulaznim podacima od strane korisnika proces čeka iste, dok samo izvođenje uglavnom nije vezano uz korisnika i ulazne naredbe. Posebna vrsta pozadinskih procesa su daemon procesi. Oni se pokreću za vrijeme pokretanja sustava, a izvođenje se nastavlja do kraja rada sustava; ne gase se. Oni se pokreću kao sustavni zadaci/usluge, a korisnik ima mogućnost kontrolirati ih putem „roditeljskog” (eng. init) procesa. 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: * **System() funkcija** - relativno jednostavna metoda, ali neefikasna i donosi velike sigurnosne rizike * **fork() i exec() funkcije** - naprednije metode; sigurnije, brže i fleksibilnije. 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: - **Roditeljski procesi **– Procesi koji stvaraju druge procese za vrijeme svog izvođenja - **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): - **Running** (u izvođenju) – proces u izvođenju ili spreman za izvođenje(čeka na dodjelu CPU-a) - **Waiting** (čeka) – čeka na pojavu događaja ili dodatne resurse. Imamo prekidne i neprekidne procese u čekanju. - **Stopped** (zaustavljeni) – proces je zaustavljen, najčešće dobivanjem signala (npr. CTRL+Z) - **Zombie** – proces je završio (eng. halted) ali i dalje postoji u tablici procesa. {{ https://www.tecmint.com/wp-content/uploads/2017/03/ProcessState.png?450x290 |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: * -a - ispisuje procese svih korisnika * -u - dodatne informacije o svakom procesu * -x - ispisuje procese bez kontrolnog terminala (npr. daemon procese) {{ https://i.imgur.com/22LCpra.png?direct&300x377 |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: * M - sortiranje po korištenju memorije * P - sortiranje po zauzeću procesora * N - sortiranje po identifikacijskom broju procesa * T - sortiranje po vremenu rada * R - obrnuti redoslijed ispisa * k - naredba za "ubijanje" procesa * -H - ispis dretvi umjesto procesa {{ https://i.imgur.com/kS2YgEJ.png?direct&500x423 |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: * zelena boja - sigurno * plava boja - obratiti pažnju, resurs bi mogao izazvati probleme kasnije * ljubičasta boja - upozorenje * crvena boja - kritično stanje promatranog resursa Neke od interaktivnih naredbi: * c - sortiranje procesa po zauzeću procesora * m - sortiranje procesa po zauzeću memorije * b - ispis podataka mreže u bitovima i bajtovima * 1 - zauzeće pojedine jezgre ili cjelokupnog procesora * [Enter] - pretraživanje procesa {{ https://i.imgur.com/PnlHoNF.png?direct&450x346 |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. {{ https://i.imgur.com/WIx0qkg.png?direct&500x179 |Slika 6: Naredba kill}} Najčešće korišteni signali su: * **SIGHUP** – šalje se procesu kada je njegov kontrolni terminal zatvoren * **SIGINT** – šalje ga terminal procesu kada korisnik prekine izvođenje naredbom CTRL+C * **SIGQUIT** – prosljeđuje se procesu nakon korisnikova prekida naredbom CTRL+D * **SIGKILL** – ovaj signal odmah prekida rad procesa * **SIGTERM** – signal za terminaciju procesa * **SIGTSTP** – zahtjev za prekidom rada, pokreće ga korisnik naredbom CTRL+Z 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] [[https://www.tecmint.com/linux-process-management/|Aaron Kili, All You Need To Know About Processes in Linux [Comprehensive Guide], 2017]] [2] [[https://www.tutorialspoint.com/unix/unix-processes.htm|Unix Processes Management]] [3] [[https://www.tecmint.com/ps-command-examples-for-linux-process-monitoring/|Aaron Kili, 30 Useful ‘ps Command’ Examples for Linux Process Monitoring, 2017]] [4] [[https://xerocrypt.github.io/articles/linux-process-analysis.html|Michael, Linux Process Analysis, 2017]] [5] [[https://www.booleanworld.com/install-use-glances-monitor-linux-systems/|Anirban Das, How to install and use Glances to monitor Linux systems]] [6] [[https://www.geeksforgeeks.org/ps-command-in-linux-with-examples/|Mausami Inhe, ps command in Linux with Examples]] [7] [[https://www.booleanworld.com/guide-linux-top-command/|Supriyo Biswas, A Guide to the Linux “Top” Command]]