sveuČiliŠte u zagrebu fakultet elektrotehnike i...
TRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
SEMINAR IZ PREDMETA RAČUNALNA FORENZIKA
Mjere za povećanje sigurnosti javno dostupnih Linux poslužitelja
Željko Baranek
Zagreb, siječanj 2018.
Sadržaj
Uvod ........................................................................................................................................... 3
Definicija sigurnosti sustava ................................................................................................... 3
Sigurnost udaljenog pristupa ljusci operacijskog sustava .......................................................... 4
Problemi autentifikacije lozinkom.......................................................................................... 4
Promjena vrata za SSH poslužitelj .......................................................................................... 5
Korištenje asimetrične kriptografije ....................................................................................... 5
Odabir algoritma i veličine ključa asimetrične kriptografije .................................................. 6
Onemogućavanje prijave korijenskom korisniku ................................................................... 6
Prava pristupa ............................................................................................................................ 7
Blokiranje pristupa nakon određenog broja neuspjelih pokušaja prijava ............................. 7
Dodavanje korisnika s ograničenim pravima ......................................................................... 7
Redovita ažuriranja .................................................................................................................... 8
Sigurnosna stijena (firewall) ....................................................................................................... 9
Zaključak ................................................................................................................................... 10
Reference ................................................................................................................................. 11
Uvod
Početak 21. stoljeća obilježen je prožimanjem infrastrukture Interneta diljem svijeta i usluga
koje se pružaju tim putem. Osim mrežne infrastrukture, za pružanje usluga potrebna je i
računalna infrastruktura u vidu podatkovnih središta – mjesta koja udomljavaju računalne i
ostale resurse. Cijene zakupa takvih resursa osjetno je pala, a znanje koje je potrebno za
njihovo postavljanje i upravljanje postalo je široko dostupno svakome s pristupom Internetu.
Kao posljedica se pojavljuje sve veći broj poslužitelja kojima upravljaju pojedinci ili manja
društva čija primarna djelatnost nije održavanje tih sustava. Dodatno, razina primjenjivosti,
kvalitete i održavanosti besplatne programske potpore otvorenog koda je u porastu i postaje
čest odabir u odnosu na komercijalna rješenja. Razvoj programske potpore postaje lakši, brži
i jeftiniji dostupnošću mnogih besplatnih, gotovih komponenti i razvojnih okvira pa time i
razvoj web-aplikacija i ostalih usluga koje se pružaju putem Interneta.
Svi prethodno navedeni faktori dovode do velikog broja poslužiteljskih računala koji pružaju
javno dostupne usluge putem Interneta. Jednostavnost i brzina korištenja takvih usluga u
odnosu na neinformatizirane klasične načine ne dolazi bez troška – zaštita sigurnosti sustava
usložnjava njihov razvoj, održavanje i konačnu cijenu takvoga sustava jer zahtijeva dodatna
ekspertna znanja, iskustva i procedure. Gleda li se aspekt sigurnosti operacijskog sustava i
web-poslužitelja, moguće je izdvojiti mjere koje je općenito poželjno poduzeti da bi se
povećala razina sigurnosti bilo kojeg sustava kao cjeline.
U radu se navode jednostavne i preporučene mjere koje treba poduzeti prilikom početnog
postavljanja operacijskog sustava. Pretpostavlja se korištenje Linux operacijskog sustava,
točnije, popularne Ubuntu distribucije koja se temelji na distribuciji Debian. Preporučene
mjere se može izvesti na veoma slične načine, ali ponekad uporabom drugih sličnih alata i
naredbi, za bilo koju distribuciju Linux operacijskog sustava.
Definicija sigurnosti sustava
Da bi se sustav smatrao sigurnim, podrazumijeva zadovoljenje osnovnih sigurnosnih zahtjeva:
• Povjerljivost – pristup podacima dopušten samo ovlaštenim korisnicima
• Cjelovitost – izmjena podataka po zadanim pravilima i samo ovlaštenim korisnicima
• Raspoloživost – dostupnost podataka unatoč nepredviđenim događajima
Postoje i dodatni sigurnosti zahtjevi koji proizlaze iz osnovnih:
• Autentifikacija – dokazivanje da se doista radi o korisniku za kojeg se predstavlja
• Neporecivost – nije moguće prikriti tragove nastale obavljanjem radnji u sustavu
• Kontrola pristupa – granulacija prava korisnika u sustavu
[1]
Sigurnost udaljenog pristupa ljusci operacijskog sustava
SSH (Secure Shell) je aplikacijski protokol koji nudi pristup ljusci (primjerice, bash) operacijskog
sustava udaljenog računala. Može ga se smatrati nasljednikom starijeg protokola TELNET koji
ima istu svrhu, ali za razliku od protokola SSH, ne primjenjuje nikakvo šifriranje za prijenos
podataka pa se narušava povjerljivost tih podataka. Zbog toga se TELNET uopće ne bi trebao
koristiti, već je SSH alternativa. Pristup i upravljanje udaljenim računalima, posebice
poslužiteljima, uobičajeno se vrši udaljeno putem ljuske, obzirom da je to za naprednije
korisnike učinkovitije sučelje od grafičkog, te često fizički pristup poslužitelju nije dostupan ili
jeftin. Napadačeva uspješna prijava u ljusku operacijskog sustava ne ostavlja dobre izglede za
daljnju sigurnost sustava – potencijalno su narušeni svi sigurnosni zahtjevi jer napadač može
izvršavati proizvoljne naredbe.
SSH daemon program, odnosno SSH poslužitelj, može se konfigurirati. Njegova konfiguracija
nalazi se u tekstualnoj datoteci /etc/ssh/sshd_config.
Problemi autentifikacije lozinkom
Nakon instalacije OS-a na poslužitelju, inicijalno je uobičajeno da je omogućen SSH pristup uz
zadani način autentifikacije lozinkom. U konfiguracijskoj datoteci to je zadano sljedećim
retkom:
PasswordAuthentication yes
Autentifikacija lozinkom predstavlja sigurnosni rizik jer računalo s javnom IP adresom i
otvorenim vratima 22 za SSH protokol odmah postaje meta napada – najčešće automatiziranih
skripti koje pokušavaju upasti u sustav primjenom grube sile (isprobavanjem lozinki).
Takvi napadi, temeljem IP adresa poslužitelja s kojih su upućeni, u pravilu dolaze iz zemalja sa
slabijom provedbom legislative u području kiberkriminala (npr. Kina, Rusija, Brazil). Za takve
pokušaje napada prisutan je žargonski naziv Script Kiddie. Skripte u slučaju uspješnog prijave
mogu instalirati malware, računalo učiniti dijelom botnet mreže, dojaviti autoru pristupne
podatke ili pokrenuti bilo kakav proizvoljan kôd. [2]
Navedeni napadi ne predstavljaju ozbiljnu prijetnju u slučaju primjene sljedeće navedenih
mjera.
Promjena vrata za SSH poslužitelj
Vrata 22, po organizaciji IANA, službeno su namijenjena za korištenje protokola SSH. Tu
činjenicu iskorištavaju prethodno spomenute skripte te bilo tko može provesti port scanning
(primjerice alatom NMAP).
Vrata na kojima će SSH daemon raditi može se podesiti što je u konfiguracijskoj datoteci već
prva stavka:
Port 22
Promjenom na vrata na neku veću vrijednost, većina automatiziranih skripti odustaje daljnje
pokušaje napada. Na taj se način barem smanjuje broj zapisa u auth.log datoteci, što je
vjerojatno i jedina prednost ove mjere.
Važno je voditi računa o sigurnosnim stijenama kojima prolazi promet kada želimo uspostaviti
SSH vezu. On je najčešće podešen da propušta promet na vratima 22. Ako promijenimo vrata
na neku drugu vrijednost, postoji opasnost od nemogućnosti spajanja na SSH iz određenih
mreža, što se s aspekta dostupnosti ne smatra sigurnosnim sustavom. Nadalje, ova mjera
nikako nije dovoljna i jedina mjera na kojoj treba stati jer se naizgled sigurnost postiže načelom
„Security through obscurity“ koje ne bi trebalo biti jedini način zaštite, ako i uopće jedan od
načina. [3]
Korištenje asimetrične kriptografije
Asimetrična kriptografija ili kriptografija javnog ključa (Public-key cryptography, PKI) može se
koristiti kao način autentifikacije tako da se na poslužitelj za pojedinog korisnika sustava
postavi javni ključ kao jedan redak u datoteci:
/home/user/.ssh/authorized_keys
S druge strane, SSH klijent (primjerice, PuTTY) kojim se korisnik spaja na poslužitelj, posjeduje
privatni ključ. Privatni ključ može dodatno biti zaštićen lozinkom (passphrase) koju korisnik iz
SSH klijenta mora unijeti da bi ga klijent mogao poslati poslužitelj u ispravnom obliku. Ako se
poslani privatni ključ i javni ključ na poslužitelju podudaraju (čine par ključeva asimetričnog
kriptografskog sustava), autentifikacija je uspješna.
Ovim načinom se složenost napada grubom silom usložnjava do te mjere da je neisplativ za
prosječnog korisnika. Ipak, pojedini algoritmi asimetrične kriptografije i veličine ključeva se
smatraju manje sigurnima.
Po uspješnom podešavanju načina autentifikacije asimetričnom kriptografijom, smisleno je
onemogućeni autentifikaciju lozinkom što se može postići promjenom retka u datoteci
/etc/ssh/sshd_config na
PasswordAuthentication no
Odabir algoritma i veličine ključa asimetrične kriptografije
Postoji nekoliko algoritama i veličina ključeva koje oni podržavaju. Najčešći za SSH su:
• DSA (Digital Signature Algorithm)
• RSA (Rivest–Shamir–Adleman)
• ECDSA (Elliptic Curve Digital Signature Algorithm)
[4]
RSA ključevi od 1024 bita ili manje smatraju se nesigurnima jer već današnja superračunala
mogu uporabom grube sile u razumnom vremenu probiti takvu zaštitu, odnosno provesti
potrebu faktorizaciju. Veličine RSA ključa od 2014 bita trenutno se smatra sigurnom, ali samo
do 2030. godine kada se očekuje da će superračunala u razumnom vremenu i njih moći
probijati. [5]
ECDSA je varijanta DSA algoritma i po performansama i veličini ključa je to trenutno
najisplativiji algoritam. Drugim riječima, za iste veličine ključeva za DSA ili RSA algoritam,
mnogo je teže probiti ECDSA s tom veličinom ključa. Postoje ranjivosti ako se radi o
neispravnoj implementaciji koje mogu smanjiti složenost probijanja. Ipak, njegova ispravna
implementacija trenutno nema poznatih ranjivosti pa se preporuča njegova primjena. [6]
Onemogućavanje prijave korijenskom korisniku
Korisnik root spada u grupu superuser, ima sve ovlasti u sustavu i prijava njegovim računom
putem SSH protokola ne bi trebala biti izravno omogućena. Ako postoji potreba za
izvršavanjem radnji koje zahtijevaju povećanje ovlasti u sustavu, preporuča korištenje sudo
naredbe za izvršavanje pod grupom superuser. Svaka tako izvršena naredba se zapisuje i u
auth.log dnevnik.
U prethodno spomenutoj SSH daemon konfiguracijskoj datoteci potrebno je osigurati
postojanje sljedećeg retka
PermitRootLogin no
Prava pristupa
Blokiranje pristupa nakon određenog broja neuspjelih pokušaja prijava
Nastavno na sigurnost udaljenog pristupa ljusci operacijskog sustava, Postoje alati koji mogu
pratiti svaki pokušaj prijave iz datoteke auth.log i temeljem nje uporabom sigurnosne
stijene onemogućiti daljnje pokušaje prijava s te IP adrese. Jedan takav alat je Fail2Ban. [7]
Općenita konfiguracijska datoteka tog alata jest /etc/fail2ban/fail2ban.conf u kojoj
se, između ostalog, podešava gdje zapisivati dnevnik blokiranja (koja je IP adresa, kada i zašto
bila blokirana i odblokirana).
U drugoj konfiguracijskoj datoteci /etc/fail2ban/jail.conf podešavaju se primjerice:
• Vremenski interval praćenja neuspjelih pokušaja prijave
• Koliko neuspjelih prijava je dopušteno u tom intervalu
• Na koliko dugo se blokira IP adresa nakon dosegnutog broja u intervalu
• …
Fail2Ban alat, osim za praćenje SSH prijava iz auth.log dnevnika, može pratiti i mnoge ostale
dnevnike različitih skupova aplikacija. Neke od njih su:
• Web-mail (Horde, Roundcube, SquirrelMail)
• Web CMS sustavi (Drupal)
• Web-poslužitelje (Apache, Nginx, Squid)
• FTP poslužitelje (ProFTPd, PureFTPd)
• Mail poslužitelje (CourierSMTP, Postfix, Sendmail, Dovecot)
• Baze podataka (MySQL)
Obzirom da prethodno navedene aplikacije, za razliku od SSH protokola, nisu u mogućnosti
koristiti autentifikaciju primjenom asimetrične kriptografije, nego isključivo lozinkom, za njih
ima još više smisla koristiti ovaj alat jer je izvjesnost pokušaja napada grubom silom velika.
Dodavanje korisnika s ograničenim pravima
Iz dodatnih sigurnosnih zahtjeva – kontrola pristupa – proizlazi potreba za ovom radnjom.
Poželjno je precizno odrediti prava, odnosno radnje koje su dostupne nad direktorijima
svakom korisniku koji će pokretati određeni program. Korisniku pod kojim se program pokreće
se dodjeljuju prava dovoljna da program može funkcionirati, ali ne i viša nego što su programu
potrebna. Na taj se način osigurava da napadač koji iskorištavanjem ranjivosti unutar
programa primjenom shellcode-a (kôd koji ubacuje u aplikaciju s ciljem njegovog izvršavanja
izravno u ljusci operacijskog sustava), taj kôd bude izvršen sa što nižim pravima. Tako ubačen
kôd može napraviti mnogo manju štetu ako se ne izvršava pod superuser pravima.
Dodavanje korisnika vrši se naredbom adduser example_user, dodavanje korisnika u
grupu adduser example_user example_group. Naredba chown omogućava promjene
vlasništva nad datotekama i direktorijima. [8]
Redovita ažuriranja
Svakim danom otkivaju se ranjivosti bilo koje vrste programe potpore: operacijskog sustava,
korisničkih aplikacija, ali i u implementacijama prethodno opisanih kriptografskih algoritama.
Kada se sigurnosni propusti otkriju, u pravilu se brzo pojave ažuriranja i zakrpe koje u novoj
inačici više ne pate od otkrivene ranjivosti.
Otkrivene ranjivosti se objavljuju u pod nazivom CVE (Common Vulnerabilities and Exposures)
te njihovom oznakom, najčešće godinom i rednim brojem. Postoje javno dostupne baze
podataka CVE-ova [9] po kategorijama (OS, tehnologija, itd.) na koje se može pretplatiti, što je
preporučeno jer se na taj način brzo može saznati o ranjivostima sustava i primijeniti
odgovarajuća zakrpa ili dodatne radnje ako je to potrebno.
Ubuntu pruža mogućnost automatskih nenadziranih ažuriranja operacijskog sustava pod
nazivom Unattended Upgrades ili Automatic Security Updates korištenjem apt upravitelja
paketa. Moguće je podesiti na koje se pakete primjenjuje. Uobičajeno se postavlja automatsko
ažuriranje samo za sigurnosne nadogradnje obzirom da novije inačice programa mogu biti
nekompatibilne s ostalim dijelovima sustava ili drugih programa s kojima komuniciraju pa bi
automatsko ažuriranje moglo prouzročiti prestanak ispravnog rada sustava kao cjeline. [10]
Usprkos automatskim ažuriranjima, ponekad je potrebno ponovno pokretanje sustava
(restart) da bi određena ažuriranja mogla biti primijenjena. Stoga je ipak povremeno potrebno
i ručno pratiti stanja ažuriranih paketa.
Sigurnosna stijena (firewall)
Sigurnosna stijena služi filtriranju prometa definiranjem parametara veza za dopuštanje ili
zabranu. Primjeri parametara koje se može podešavati su:
• Izvorišne i odredišne IP adrese
• Izvorišna i odredišna vrata (ili pretpostavljeni aplikacijski protokol koji koristi ta vrata)
• Transportni protokol (TCP ili UDP)
Postoje dva pristupa prilikom podešavanja sigurnosne stijene: whitelisting i blacklisting. U
prvome popisujemo parametre veza koje želimo dopuštati, a sve ostale zabranjujemo. U
drugom popisujemo parametre veza koje ne želimo dopustiti, a sve ostale dopuštamo. Pristupi
se mogu kombinirati gdje se prioritet primijenjenog određuje redoslijedom definiranja ili
prioritetnim brojem.
Preporučeno je podesiti da sigurnosna stijena zabranjuje sve veze koje nisu dopuštene,
odnosno whitelisting pristup. U pravilu se uspostavljanje veze klijenta prema poslužitelju
omogućava na vratima iza kojih doista postoji program. S druge strane, također je uputno
dopuštati uspostavljanje veze sa strane poslužitelja prema vanjskoj mreži samo na vratima i
prema adresama koja su opravdana i očekivana za pojedini program. [11]
Zaključak
Sigurnost sustava definirana je njegovom dostupnošću i cjelovitošću te povjerljivošću
podataka koje obrađuje. Očuvanje određenih zahtjeva ostvaruje se autentifikacijom koja se
često provodi lozinkom. Taj način autentifikacije podložan je pokušajima napada primjenom
grube sile. Za dijelove sustava koji mogu podržati autentifikaciju asimetričnom kriptografijom,
poželjno je uvesti taj način te onemogućiti autentifikaciju lozinkom. Prilikom odabira i
generiranja para privatnog i javnog ključa treba obratiti pažnju na algoritam i za njega
prikladnu veličinu ključa. Za dijelove sustava gdje je jedini podržan način autentifikacije
lozinka, uputno je primijeniti alate koji će onemogućiti daljnje pokušaje autentifikacije
korisniku nakon što se premaši njihov neuspješan broj u nekom vremenskom intervalu.
Programe ne treba izvršavati pod korisnikom s ovlastima višima nego što to program zahtijeva.
Uputno je stvarati korisnike i grupe korisnika kojima se dodjeljuju ograničena prava nad
sustavom te obavljati radnje i izvršavati programe pod njima, a ne kao privilegirani korisnik.
Ažuriranja sustava potrebno je redovito vršiti, posebice sigurnosna ažuriranja, koja je moguće
automatizirati da se vrše i bez nadzora. Postavke sigurnosne stijene trebaju biti takve da
onemogućavaju sve veze koje nisu eksplicitno dopuštene, a dopuštene veze treba popisati po
potrebama programa koji ih žele ostvarivati.
Reference
[1] F. ZTEL, »Prikaznice iz predmeta "Sigurnost u Internetu",« 2017. [Mrežno].
[2] S. ". v. Broucke, »Running A SSH Honeypot With Kippo: Let’s Catch Some Script Kiddies,« 10 05 2011. [Mrežno]. Available: http://blog.macuyiko.com/post/2011/running-a-ssh-honeypot-with-kippo-lets-catch-some-script-kiddies.html. [Pokušaj pristupa 1 2018].
[3] Wikipedia, »Security through obscurity,« [Mrežno]. Available: https://en.wikipedia.org/wiki/Security_through_obscurity#Criticism. [Pokušaj pristupa 01 2018].
[4] rakhesh.com, »Notes on Cryptography Ciphers,« [Mrežno]. Available: https://rakhesh.com/infrastructure/notes-on-cryptography-ciphers-rsa-dsa-aes-rc4-ecc-ecdsa-sha-and-so-on/. [Pokušaj pristupa 01 2018].
[5] R. Laboratories, »TWIRL and RSA Key Size,« [Mrežno]. Available: https://web.archive.org/web/20170417095741/https://www.emc.com/emc-plus/rsa-labs/historical/twirl-and-rsa-key-size.htm. [Pokušaj pristupa 01 2018].
[6] S. Levy, »Performance and Security of ECDSA,« [Mrežno]. Available: https://koclab.cs.ucsb.edu/teaching/ecc/project/2015Projects/Levy.pdf.
[7] »Fail2Ban,« [Mrežno]. Available: https://www.fail2ban.org/wiki/index.php/Main_Page.
[8] C. Hope, »Linux chown command,« [Mrežno]. Available: https://www.computerhope.com/unix/uchown.htm. [Pokušaj pristupa 01 2018].
[9] MITRE, » Common Vulnerabilities and Exposures,« [Mrežno]. Available: https://cve.mitre.org/.
[10] Canonical, »Ubuntu AutomaticSecurityUpdates,« [Mrežno]. Available: https://help.ubuntu.com/community/AutomaticSecurityUpdates. [Pokušaj pristupa 01 2018].
[11] Rackspace, »Best practices for firewall rules configuration,« [Mrežno]. Available: https://support.rackspace.com/how-to/best-practices-for-firewall-rules-configuration/. [Pokušaj pristupa 1 2018].