Zaštita web poslužitelja - Moduli za apache i ostali mehanizmi zaštite
Ivan Kos Grabar | Jurica Hlevnjak
Uvod
Web server, odnosno web poslužitelj, općenito označava bilo koje računalo ili uređaj na kojem se mogu nalaziti različiti podaci. Web poslužitelj najčešće služi za pohranu web stranica koje nude raznolik sadržaj, drugim riječima, kako bi neka stranica bila dostupna na internetu, potrebno ju je smjestiti na neki web poslužitelj. Kako bi se osigurala funkcionalnost samog web poslužitelja, on mora biti opremljen odgovarajućim softverom koji se brine za pravilnu razmjenu podataka između klijenata i samog poslužitelja. Osim što se pod pojmom web server, odnosno web poslužitelj, smatra računalo ili uređaj na kojem su smješteni podaci, češće se u praksi pod ovim pojmom smatra upravo softver zadužen za pravilan prikaz sadržaja i pravilnu komunikaciju između klijenta i servera. Danas se u praksi koristi dosta veliki broj web poslužitelja, no neki od najpoznatijih i najkorištenijih su:
- Apache
- Microsoft-IIS
- Nginx
- LiteSpeed
Na sljedećoj slici, dan je grafički prikaz najviše korištenih web poslužitelja po pojedinoj regiji u svijetu, prema podacima iz kolovoza 2012. godine.
Iz slike možemo uočiti kako je daleko najpopularniji web poslužitelj Apache, a slijede ga Microsoft-IIS, te Nginx. Apache web poslužitelj nalazi se na preko 60% poslužitelja, dok Microsoft-IIS i Nginx zauzimaju 16.7% te 14.3%. Detaljniji pregled statistike korištenja pojedinog web poslužitelja nalazi se na sljedećoj slici.
Zbog činjenice kako se na poslužiteljima nalaze različiti podaci, koji su često povjerljivi i od velike važnosti za organizaciju, pitanje sigurnosti web poslužitelja od velike je važnosti, te se njemu treba pristupiti sa velikom pažnjom. Prilikom odabira odgovarajućeg web poslužitelja, jedna od najvažnijih stavki je upravo razina sigurnosti koju web poslužitelj pruža. Danas postoji veliki broj različitih oblika napada koji predstavljaju sigurnosne prijetnje na koje je potrebno reagirati odgovarajućim mehanizmima zaštite, te će se u ovom radu obraditi načini zaštite web poslužitelja.
--Ivankos 15:30, 13. siječnja 2013. (CET)
Napadi na web poslužitelje
Zaštita web poslužitelja je lakša ukoliko znamo od čega sve se treba braniti.
Napadi na web poslužitelje su brojni i svakodnevni. Opasnosti koje prijete ovise o aplikacijama koje se nalaze na poslužitelju, o operacijskom sustavu ili npr. o konfiguraciji kompletnog sustava.
Ovdje će ukratko biti opisani najčešći, odnosno tipični napadi na web poslužitelje.
DoS napadi
DoS ili "denial of service" napad je zapravo jednostavan napad u kojem jedan sustav napada drugi s namjerom da spriječi legitimnog korisnika u korištenju usluga tog sustava na način da zauzme sve resurse koji osiguravaju te usluge.
Resursi koji se napadaju su procesor (CPU), radna memorija (RAM), disk, propusnost (bandwidth) ili povezanost na mrežu.
Posljednja dva resursa su najčešća meta. Dakle, napadom se najčešće želi postići to da računalo nema pristup mreži ili da se umanji propusnost tako da se mreža zatrpa prometom.
DoS uključuje sljedeće napade:
- Jamming networks
- Flooding service ports
- Misconfiguring routers
- Flooding mail servers
DDoS napadi
Razlika u odnosu na DoS napad je u tome što se kod DDoS-a za napad koriste brojna računala koja koordinirano pokreću DoS napade protiv jedne ili više meta. Koristeći klijent-server tehnologiju značajno se multiplicira učinkovitost napada. Ovakvi napadi su obično prejaki čak i za one najveće web stranice.
DDoS napadi provode se najčešće tako da automatizirane skripte traže ranjivosti i upadaju u takve ranjive sustave te ih stavljaju pod kontrolu jednog master sustava. Ti ranjivi sustavi su kompromitirani te se nazivaju zombi računala (zombies). Takva računala mogu se koristiti "po volji" za napade ili vrlo često za slanja neželjene (spam) pošte.
Na slici se nalazi prikaz scenarija ovakvog napada.
Neki od najpoznatijih DDoS napada navedeni su ispod:
- FTP bounce back
Ovaj napad, vezan uz FTP protokol, se koristi za zaobilaženje aplikacijskog vatrozida. Napadač postavi datoteku na FTP server koja se zahtjevom šalje unutrašnjeg (internal) serveru. Ako datoteka sadrži maliciozni kod (npr. skripta) može okupirati resurse na internal serveru kao što su memorija ili procesor. Napad se može spriječiti regularnim ažuriranjem FTP alata te praćenjem svih nepoznatih prijenosa datoteka na serveru. Rješenje je i podešavanje vatrozida tako da filtrira sadržaj i blokira određene ekstenzije datotetka.
- Port scanning
Skeniranje portova radi se tako da napadač koristi softver za sistematsko skeniranje ulaznih točaka računala. Napadač može ostvljati uznemirujuće poruke, saznati lozinke ili mijenjati konfiguracije. Obrana od napada je stalno praćenje mreže za što postoje određeni alati.
- Ping flooding
Ping uključuje slanje signala drugom računalu očekujući odgovor na signal. Tako se može saznati koji servisi su na tom računalu dostupni. Ping flooding je napad koji šalje tisuće ili milijune "pingova" u sekundi što može čak dovesti i do rušenja npr. cijelog web mjesta. Preplavljivanje se, dakle, radi tako da se na računalo žrtve šalju ping paketi. Na ovaj napad su ranjivi brojni sustavi.
- Smurf napadi
Ovaj napad je modifikacija prethodno opisanog napada. Razlika je u tome što se ping upit ne šalje direktno sustavu koji se napada već na broadcast adresu koja sadrži povratnu adresu žrtve. Tako čitav niz IP adresa šalje ping zahtjeve na jedno računalo. Zaštititi se od ovog napada može tako da se server ne koristi za broadcast prijenos. Ruter mora odbiti takav način prijenosa iz drugih mreža na internetu.
- SYN flooding
Napadom se iskorištava ranjivost na TCP/IP komunikacijskom protokolu. Napadnuto računalo odgovara na zahtjeve sustava koji ne postoji. Žrtva šalje pakete i čeka odgovor od sustava koji ima pogrešnu IP adresu. Tako se prilikom odgovora sustav preplavi sa zahtjevima. Zahtjev čeka na odgovor dok ne istekne vrijeme (timeout). Tijekm čekanja, sustav žrtve je zauzet trošenjem zahtjev i ne može odgovoriti na one legitimne zahtjeve. Prilikom uspostavljanja veze, odredište prima SYN paket i šalje odgovor (SYN ACK). Kada se primi odgovor veza je uspostavljena. Tu se radi o TCP trostrukom rukovanju. Ako se npr. smanji vrijeme čekanja (timeout) smanjit će se i rizik od ovog napada. Današnji sustavi su uglavnom otporni na ove napade.
- IP fragmentation/overlapping
IP paketi mogu se smanjiti na način da se paket podijeli na više manjih paketa. Ako su paketi dovoljno mali, ruteri kao ni intrusion detection sustavi ne mogu identificirati sadržaj paketa te ih propuštaju dalje bez provjere. Kada paketi stignu te se na drugoj strani slože u jedan, izazvan je buffer overflow ili preljev spremnika. Sustav će se najvjerojatnije ponovno pokrenuti (reboot), ali postoji i vjerojatnost da neće biti nikakvog efekta.
- IP sequence prediction
Napadač može uspostaviti vezu s računalom žrtve i saznati slijedni broj IP paketa. S tim brojem, napadač može kontrolirati sustav žrtve na način da uvjerava sustav da komunicira s nekim drugim sustavom. Napad je sprječen na način da danas operacijski sustavi organiziraju te brojeve nasumično pa ih je teško predvidjeti.
- SNMP napad
Većina mrežnih uređaja poodržava SNMP protokol i obično je aktivan po default postavkama. Ovim napadom moguće je mapirati mrežu ili pratiti i usmjeravati promet. Najbolji način obrane je korištenje SNMP3 protokola jer on kriptira lozinke i podatke. Ipak prelazak na SNMP3 nije lagan pošto gotovo svi mrežni uređaji (ruteri, hubovi, switchevi, printeri, serveri) koriste SNMP.
Pregled mogućih napada na web poslužitelje ovdje je dan ukratko jer je dobro vidjeti kakvi sve napadi postoje, odnosno što sve administratori web poslužitelja moraju uzeti u obzir prilikom instalacije i konfiguracije web poslužitelja. Ovdje nije dan pregled svih napada, već onih vrlo čestih.
Više o temi napada na web poslužitelje može se naći sljedećim linkovima:
- http://www.techiwarehouse.com/engine/21b0d480/Types-of-Attacks-on-Web-Servers
- http://www.princeton.edu/~rblee/ELE572Papers/p514-kargl.pdf
- http://en.wikipedia.org/wiki/Denial-of-service_attack
- http://www.ibm.com/developerworks/web/library/wa-secureweb/
Isto tako prilikom zaštite web poslužitelja u obzir treba uzeti i napade na web aplikacije pošto se one nalaze na web poslužiteljima, te ih se također može tretirati kao napade na sam web poslužitelj. Takvi napadi su nama dobro poznati. Riječ je naravno o SQL injection napadima, XSS (cross-site scripting) napadima i sličnim napadima. Nešto više se o tim napadima može naći na sljedećim linkovima:
- http://en.wikipedia.org/wiki/Web_application_security
- https://www.owasp.org/index.php/Category:Attack
Indirektni napadi
Ove napade karakterizira uzimanje informacija korisncima kao što su npr. brojevi kreditnih kartica. Korisnika se obično preusmjeri automatski na neku malicioznu web stranicu koja se čini kao dobra, tj. legitimna stranica. Na taj način mogu se ukrasti informacije o identitetu korisnika koje mogu dovesti do krađe identiteta. Uspješni napad kompromitira pouzdanost web mjesta.
Indirektni napadi javljaju se u dva oblika:
- Phishing
Napadači koriste socijalni inženjering za prijevare. Korisnika se navodi da se prijavi na lažnu stranicu te mu se uzimaju korisnički podaci.
- Pharming
Kompromitiraju se DNS serveri ili korisnički hostovi za preusmjeravanje korisnika na maliciozne stranice slične legitimnim.
--Jurica 18:26, 16. siječnja 2013. (CET)
Ostali problemi od kojih se se potrebno zaštititi
Danas postoje razvijeni programi koji automatski traže ranjivosti web aplikacija i web poslužitelja te su aktivni stalno. Poznato je da se od velike većine napada moguće obraniti. Ako gradimo web aplikacije, mora nam biti jasno da postoje napadi koji mogu našu aplikaciju srušiti, izmijeniti ili preuzeti. Moramo imati na umu napade koji mogu manipulirati našim podacima, tj. podacima korisnika naše web aplikacije. Napadi kao što su SQL injection, XSS i slični napadi na web aplikacije vrlo jednostavno se mogu izbjeći pravilnim programiranjem aplikacije.
Isto tako, većina napada na same web poslužitelje može se izbjeći njihovim pravilnim podešavanjem. Administratori su sami vrlo često krivi za sigurnosne propuste. Prilikom instalacije, ažuriranja ili konfiguracije, vrlo često se ostavljaju predefinirane (default) postavke. Kada su u pitanju web poslužitelji, najčešće je problem konfiguracija. Sustavi složeni po tim predefiniranim postavkama vrlo su česta meta napada.
Loše konfiguriran web server
Kako bi poslužitelj mogao odgovoriti na brojne zahtjeve istovremeno, potrebno je pokrenuti veliki broj procesa koji na te zahtjeve odgovaraju. Ako se ostave predefinrane postavke, broj zahtjeva na koje će poslužitelj odgovoriti može biti prevelik ili premali. Npr. u Apache serveru taj broj je 256, što znači da server ne može pokrenuti više od 256 procesa. Problem na koji treba paziti je i memorija s kojom treba postupati racionalno jer nije neograničena. Obično poslužitelji ne postižu ekstremne kapacitete jer je dobra praksa ograničiti broj procesa koji mogu biti pokrenuti. Ako se taj broj postavi previsoko vrlo je moguće da će se događati prekidi. Isto tako treba pažljivo konfigurirati i promet prema serveru, te pristup pojedinim direktorijima servera. Vrlo je važna i konfiguracija vatrozida. Vrlo česti su propusti upravo u navedenim slučajevima. Takvi propusti, a to su samo neki, napadačima uvelike olakšavaju posao.
Loše programirane web aplikacije
Kako danas gotovo svaka web aplikacija u pozadini ima bazu podataka ili više njih, problem nastaje upravo u komunikaciji s bazom. Ako je aplikacija loše programirana, napadač može lako doći do podataka iz baze podataka ili čak preuzeti kontrolu nad bazom, a samim time i nad aplikacijom. Ako npr. web stranica komunicira s bazom na svaki zahtjev za stranicom pa čak i onda kada to uopće nije potrebno, već postoji problem koji će napadač znati iskoristiti. Pogotovo ako se radi o web mjestu koje posjećuje veliki broj korisnika. Ovdje treba ograničiti broj upita na bazu. Ovdje vidimo da je problem najčešće u povezivanju na bazu podataka, a znamo da je to najvažniji dio aplikacije od same autentifikacije korisnika pa sve do njegove odjave sa sustava.
Iako veća web mjesta imaju baze podataka na odvojenim database serverima, loše programirane web aplikacije mogu uzrokovati probleme i web serveru i serveru baze podataka. Zaštita web aplikacija vrlo je važna u kontekstu zaštite web poslužitelja.
--Jurica 18:55, 17. siječnja 2013. (CET)
Preporuke za zaštitu web poslužitelja (NIST guidelines)
NIST ili National Institute of Standards and Technology [5] objavio je publikaciju u kojoj su navedene preporuke i savjeti vezani uz sigurnost web poslužitelja (zadnje izdanje 2007. godine).
Publikacija se može naći na sljedećem linku: NIST preporuke za zaštitu web poslužitelja
Publikacija je vrlo cijenjena te se smatra najboljom publikacijom za ovo područje. Svi koji se na neki način bave web poslužiteljima trebali bi pročitati ovu publikaciju.
Primarna namjena ovog dokumenta je pomoć organizacijama u instaliranju, konfiguraciji i održavanju web poslužitelja. Detaljnije su opisane preporuke vezane uz:
- sigurnost, instalaciju i konfiguraciju operacijskog sustava
- sigurnost, instalaciju i konfiguraciju web poslužitelja
- postavljanja primjerenih mehanizama za zaštitu mreže kao što su vatrozidi, ruteri i sustavi za otkrivanje upada
- održavanje sigurne konfiguracije aplikacija kroz ažuriranja i nadopune, sigurnosna testiranja, praćenje i logove, sigurnosne kopije podataka
- korištenje, objavljivanje i zaštita informacija i podataka na pažljiv i sistematičan način
Važno je naglasiti da je dokument primarno napisan za organizacije kao što su državni odjeli i agencije na području SAD-a. Međutim, preporuke vrijede za sve sustave.
Također, preporuke vrijede i za Apache i za IIS web poslužitelj, kao i za ostale.
Planiranje i upravljanje web poslužiteljima
Planiranje osigurava da je web poslužitelj sigurniji što je više moguće. Provodi se na samom početku životnog ciklusa sustava kako bi se maksimizirala sigurnost i smanjili troškovi.
Planiranje web poslužitelja uključuje sljedeće:
- identificirati namjenu web poslužitelja
- koje informacije će biti pohranjene na poslužitelju
- koje informacije će se obrađivati i prenositi kroz poslužitelj
- koji su sigurnosni zahtjevi za te informacije
- hoće li informacije biti pohranjene na nekom drugom poslužitelju (backend database)
- koje su ostale usluge koje če poslužitelj osiguravati
- koji su sigurnosni zahtjevi za te dodatne usluge
- koji su zahtjevi za kontinuitet usluga osiguranih od strane poslužitelja
- gdje će na mreži biti lociran poslužitelj
- identificirati mrežnu uslugu koja će biti osigurana na poslužitelju, supplied kroz sljedeće protokole
- http
- https
- icp (internet caching protocol)
- htcp (hyper text caching protocol
- wccp (web cache coordination protocol)
- socks
- database service (ODBC)
- identificirati sav mrežni softver, klijentski i serverski, koji će biti instaliran na poslužitelju
- identificirati korisnike ili kategorije korisnika poslužitelja
- odrediti privilegije koje će koja kategorija korisnika imati
- odrediti kako će se upravljati web poslužiteljem (lokalno, remotely iz unutarnje mreže ili vanjske mreže)
- odlučiti kako će korisnici biti autentificirani i kako će podaci biti zaštićeni
- odrediti primjereni pristup informacijama
- odrediti koje aplikacije na serveru će pratiti zahtjeve
- raditi usko s proizvođačem u fazi planiranja
- odabrati operacijski sustav uzimajući u obzir sljedeće
- mogućnost ograničenja admin/root razine aktivnosti na samo autorizirane korisnike
- mogućnost kontrole pristupa podacima na serveru
- mogućnost onemogućavanja nepotrebnih mrežnih servisa
- mogućnost kontrole pristupa raznim programima, kao što su CGI skripte i pluginovi
- mogućnost logiranja određenih aktivnosti
- host-based firewall
- planirati lokaciju web poslužitelja razmatrajući sljedeće
- primjereni sigurnosno-zaštitni mehanizmi (brave, kartice, zaštitari, kamere itd.)
- primjerene kontrole okoline (vlaga i temperatura)
- rezervni izvor energije i kako dugo osigurava energiju
- redundantna veza na internet (barem 2 ISP)
- lokacija je poznata po prirodnim katastrofama ili je izvan takvog područja
- osoblje uključeno u planiranje web poslužitelja, implementaciju i administraciju
- primjerena upravljačka praksa je kritična za održavanja sigurnog web poslužitelja
- sistemski sigurnosni plan za poboljšanje zaštite resursa
- osiguravanje ljudskih resursa za adekvatno izvođenje određenih funkcija
- korištenje alternativne platforme za web poslužitelj
- Trusted Operating System (TOS)
- Web server Appliances
- Pre-Hardened OS
- Virtualizirane platforme
Zaštita operacijskog sustava web poslužitelja
Prvi korak u zaštiti web poslužitelja je kaljenje ili očvršćivanje OS-a. Mnogi sigurnosni problemi se mogu izbjeći ako je operacijski sustav na kojem leži web poslužitelj dobro konfiguriran. Gotovo svi web poslužitelji funkcioniraju na višenamjenskim operacijskim sustavima. Predefinirane postavke postavljene od strane proizvođača nisu najbolje rješenje i problem su za sigurnost. Razlog je u tome što proizvođači o tome niti ne razmišljaju.
Preporuka je pet potrebnih koraka za održavanje OS-a sigurnim:
1) planiranje instalacije i postavljanja OS-a i drugih komponenti na poslužitelj (računalo) 2) nadopune i ažuriranja OS-a 3) očvršćivanje i konfiguracija OS-a za adekvatnu sigurnost 4) instalacija i konfiguracija dodatnih sigurnosnih kontrola, ukoliko je to potrebno 5) testiranje OS-a za osiguranje da su prethodni koraci odrađeni dobro
Instalacija i konfiguracija OS-a
Nadopune i ažuriranja
Kad je OS instaliran, potrebno ga je ažurirati i nadograditi kako bi se ispravile sve poznate ranjivosti. Sve ranjivosti koje su poznate je potrebno ukloniti prije nego se na njega postavi web poslužitelj.
Onemogućavanje nepotrebnih servisa i aplikacija
Samo u idealnom slučaju, web poslužitelj je jednonamjenski host. Prilikom konfiguracije potrebno je onemogućiti sve osim onoga što je prijekopotrebno. Dakle, potrebno je isključiti sve servise i aplikacije, i uključiti samo one koje su potrebne web poslužitelju. Preostale je nakon toga potrebno i obrisati. Ako je moguće u nekom slučaju, dobro je instalirati minimalnu konfiguraciju OS-a i zatim isključiti navedeno.
Neke od servisa i aplikacija koje je dobro isključiti su:
- file and printer sharing
- wireles networking
- remote control and remote acces
- directory service
- email service
- language compilers and libraries
- system development tools
- system and network management tools and utilities (uključujući SNMP protokol)
Konfiguracija autentifikacije korisnika
Potrebno je limitirati broj autoriziranih korisnika koji mogu konfigurirati OS na mali broj (administratori i webmasteri).
Kako bi se osigurala primjerena autentifikacija korisnika potrebno je pratiti sljedeće korake:
- ukloniti ili onemogućiti nepotrebne predefinirane račune i grupe
- onemogućiti račune koji nisu interaktivni
- stvoriti korisničke grupe
- stvoriti korisničke račune
- provjeriti police lozinki organizacije (duljina, složenosti, ponovna iskoristivost, sigurnost)
- konfigurirati računalo kako bi se spriječilo pogađanje lozinki
- instalirati i konfigurirati ostale sigurnosne mehanizme za poboljšanje autentifikacije
Konfiguracija kontrole resursa
Pažljivim postavljanjem kontrole pristupa i odbijanjem neautoriziranog pristupa, administratori poslužitelja mogu smanjiti sigurnosne „breaches“. Ako se npr. odbije pravo čitanja datoteke može se zaštititi informacija, ako se odbije pisanje može se očuvati integritet informacija. Limitiranje prava na pokretanje programa samo na administratore može spriječiti korisnike u promjeni konfiguracija i slično.
Instalacija i konfiguracija dodatnih sigurnosnih kontrola
OS često ne uključuje sve sigurnosne kontrole, servise ili aplikacije. Stoga je potrebno odabrati, instalirati i konfigurirati dodatni softver kako bi se nadopunile nedostajuće kontrole. To su najčešće anti-malware softver, aplikacijski vatrozid, sustav za otkrivanje i prevenciju upada, softver koji ažurira drugi softver i slično.
Sigurnosno testiranje
Svako periodično testiranje je važno u identificiranju ranjivosti. Primjerene metode za testiranje OS-a uključuju skeniranje ranjivosti i penetracijska testiranja. To se obično provodi automatskim skenerima.
Penetracijsko testiranje je testiranje procesa dizajniranih za kompromitiranje mreže koristeći alate i metodologije napadača. Uključuje iterativno identificiranje i eksploataciju najslabijih područja mreže kako bi pristupilo ostatku mreže, kompromitirajući cjelokupnu sigurnost mreže.
Zaštita web poslužitelja
Zaštita web poslužitelja počela je zaštitom operacijskog sustava koji se vrti u pozadini. Kada je OS instaliran i siguran, može početi instalacija web server softvera. Instalacija se mora vršiti u okruženju u kojem nema povezanosti na mrežu (Internet). Razlog je taj što se server može kompromitirati u svega nekoliko minuta ako je povezan na mrežu, a da nije do kraja konfiguriran.
Sigurna instalacija web poslužitelja
Potrebno je instalirati samo one servise koji su potrebni web serveru. Svaka nepotrebna aplikacija, servis ili skripta mora biti uklonjena odmah.
Tijekom instalacije preporučaju se sljedeći koraci:
- instalirati web server softver na „dedicated host“ ili „dedicated guest“ OS ako se koristi virtualizacija
- uključiti sve nadopune i ažuriranja
- kreirati fizički disk ili logičku particiju kako bi se odvojio sadržaj od OS-a i aplikacija servera
- ukloniti ili onemogućiti sve nepotrebne servise koji se kreiraju prilikom instalacije servera a nisu potrebni
- ukloniti ili onemogućiti sve nepotrebne račune za prijavu kreirane tijekom instalacije servera
- ukloniti svu dokumentaciju proizvođača
- ukloniti primjere ili testne datoteke, uključujući skripte i kod
- primijeniti primjereni sigurni predložak
- rekonfigurirati HTTP service banner
Konfiguracija kontrola pristupa
OS i web poslužitelj najčešće omogućuju postavljanje prava pristupa za individualne datoteke, uređaje ili druge komunikacijske resurse. Vrlo je važno postaviti ista prava kako na OS-u tako i na web poslužitelj softveru. Ono na što se posebno pazi su ograničavanje pristupa web server aplikacija podskupu računalnih resursa te ograničavanje pristupa korisnicima kroz dodatne kontrole pristupa gdje su potrebne detaljnije razine kontrole pristupa.
Kontrola pristupa može se također iskoristiti za ograničenje resursa prilikom DOS napada.
Obično se kontrola pristupa postavlja za sljedeće:
- aplikacije i konfiguracijske datoteke
- datoteke vezane direktno sa sigurnosnim mehanizmima
- log datoteke i system audit datoteke
- sustavske datoteke i njegove konfiguracijske datoteke
- datoteke web sadržaja
Konfiguracija dopuštenja za web aplikacije
Kada se neka aplikacija pokreće na serveru važno je da se ona pokreće samo za nekog individualnog korisnika ili za neku grupu. Novi korisnici i grupe trebaju biti nezavisni od ostalih korisnika i grupa, te jedinstveni.
Preporuke su sljedeće:
- servisi se trebaju pokretati kao korisnički sa ograničenim privilegijama (ne kao root ili admin)
- web sadržaj se može čitati, ali servisi ne smiju pisati po njemu
- procesi ne smiju pisati u direktorije u kojima je pohranjen javni sadržaj
- samo autorizirani procesi mogu pisati po web sadržaju
- web aplikacije mogu pisati u log datoteke, ali log datoteke se ne smiju čitati od strane tih aplikacija (njima smije pristupiti samo root/admin proces)
- privremene datoteke kreirane na serveru moraju biti ograničene u specificiran i zaštićen poddirektorij
- pristup privremenim datotekama smije imati samo proces koji ih je kreirao
Također je važno da aplikacije ne može spremati ili čitati datoteke izvan specificirane strukture datoteka. Treba osigurati da se direktorijima i datotekama ne može pristupati izvan specificiranog stabla direktorija. Datotekama se ne smije pristupiti niti preko URL-a te datoteke.
Konfiguracija direktorija sigurnog sadržaja
Poveznice ili prečaci na direktorije koji se nalaze na serveru ne smiju postojati na javnom dijelu servera, odnosno u javnom dijelu stabla direktorija. Ako je moguće treba onemogućiti mogućnost da se prate ti linkovi. Također, log datoteke ili konfiguracijske datoteke moraju biti izvan specificiranog stabla direktorija.
Kako bi se ograničio pristup određenim direktorijima treba pratiti sljedeće korake:
- odrediti jedan tvrdi disk ili logičku particiju za web sadržaj i uspostaviti povezane poddirektorije za web sadržaj uključujući npr. slike, ali ne i skripte i druge programe
- definirati jedinstvenu strukturu direktorija za sve vanjske skripte i programe koji se izvršavaju kao dio web sadržaja
- onemogućiti pokretanje skripti koje nisu pod kontrolom admin ili root računa
- onemogućiti korištenje simboličnih poveznica
- definirati cjelokupnu matricu pristupa sadržaju, identificirati koji direktorij ili datoteka treba biti ograničen, a kojem se može pristupiti
URI i kolačići
URI je zanimljiv iz razloga što s njim dolazi i nekoliko sigurnosnih pitanja. Npr. URI se pamti u logovima web preglednika, proxy logovima ili HTTP povezanim logovima trećih strana. Stoga se ne preporuča sakrivanje osjetljivih podataka kao što su korisničko ime i lozinka u URI. Brojni napadači i maliciozni botovi traže osjetljive URI podatke kroz izvorni kod.
Kolačići sadrže informacije koje se mogu zapisati na korisnički disk kad korisnik posjeti stranicu. Namjena kolačića je prepoznavanje korisnika od strane servera. Poznate su ranjivosti koje su vezane uz kolačiće (cookies). Stoga kolačići ne smiju sadržavati podatke koje napadač može direktno iskoristiti.
Kontrola web botova na web poslužitelju
Web botovi (crawleri ili pauci) su aplikacije korištene za prikupljanje podataka, analizu i indeksiranje web sadržaja. Koriste se i zbog brojnih drugih namjena.
Botovi mogu biti izazov za administratore jer serveri sadrže direktorije koji ne trebaju biti indeksirani, neke stranice ne žele biti dostupne kroz tražilice, botovi mogu otkriti informacije koje su trebale ostati tajna. Ipak, moguće je utjecati na ponašanje većine botova.
Ako se želi limitirati akcije botova, potrebno je kreirati tekstualnu datoteku robots.txt u root ili admin direktoriju. To je jednostavna datoteka koja treba sadržavati neke ključne riječi i povezane informacije. Ključne riječi pokazuju botovima koje dijelove treba isključiti iz pretraživanja. Npr. ključna riječ User-agent je ime bota, a Disallow kaže botu koji dijelovi su isključeni (npr. User-agent:* Disallow:/images/ Disallow:/banners/ itd. ). Moguće je i isključiti sve botove (User-gent:* Disallow:/).
Zaštita web sadržaja
Zaštita web sadržaja je druga komponenta zaštite web poslužitelja. Prva se odnosi na zaštitu aplikacija i softvera koji se nalazi u pozadini, uključujući sam web poslužitelj softver i operacijski sustav.
Sigurnost sadržaja često se zanemaruje. Ipak važne su dvije komponente zaštite sadržaja. Prva je da se vlasnički i klasificirani podaci, te osjetljive informacije ne stavljaju kao javno dostupne na poslužitelj, ako nisu poduzete mjere zaštite (kriptiranje i autentifikacija). Druga je izbjegavanje kompromisa uzrokovanih načinom kako se sadržaj obrađuje na poslužitelju.
Objava informacija na web stranicama
Često se ne vodi briga o sadržaju koji se objavljuje na webu.
Preporuka je da se sljedeći sadržaj ne postavlja na stranice:
- klasificirani zapisi
- unutrašnja pravila i procedure osoblja
- osjetljive i vlasničke informacije
- osobne informacije osoblja i korisnika
- brojevi telefona i mail adrese osoblja
- raspored i lokacije osoblja
- osjetljive informacije vezane uz nacionalnu sigurnost
- istraživački zapisi
- financijski zapisi
- medicinski zapisi
- procedure informacijske sigurnosti
- informacije o ranjivostima
- sadržaj zaštićen autorskim pravima
Provjera regulacija o prikupljanju osobnih informacija
Ovdje je nemoguće zaobići zakone kojima je propisano koje informacije se smiju prikupljati o korisnicima. Zakoni, regulacije i preporuke su važne i treba ih se držati. Preporuča se traženje savjeta od stručnjaka iz tog područja. Ako organizacija želi prikupljati podatke, mora biti svjesna promjena legalnih, regulatornih i ugovornih zahtjeva. Agencije koje prikupljaju podatke trebaju to raditi u sukladno konstituciji i zakonu.
Prihvatljiva praksa je upoznati individualca o informacijama koje se o njemu prikupljaju, uključujući opise podataka koji se prikupljaju, s kime se dijele i što će se činiti s njima. Informacije mogu biti sljedeće: ime, e-mail adresa, adresa, broj telefona, SSN, informacije o financijama.
Ublaživanje indirektnih napade na sadržaj
Indirektni napadi nisu direktni napadi na web poslužitelj ili sadržaj, već uključuju načine prikupljanja informacija od korisnika koji posjete maliciozne web stranice.
Tipovi ovih napada su phishing i pharming. O ovim napadima više se može pročitati na ovom linku
Phishing se ne može spriječiti u potpunosti tehničkim mjerama zaštite na web poslužitelju, ali neke mjere koje nisu tehničke prirode mogu smanjiti broj takvih napada:
- uvjeravanje korisnika na opasnost takvog napada i usmjeriti ih u to kako te napade izbjeći
- ne odgovaranjem na poruke koje dolaze kao popup prozori
- ne treba vjerovati telefonskim brojevima u takvim porukama
- koristiti protuvirusnu zaštitu, ant-spyware i vatrozid
- ne slati osobne informacije putem e-maila
- pregledavati kreditne kartice i bankovne račune regularno i tražiti kopije izvještaja
- validiranjem službene komunikacije personaliziranjem maila i identificiranjem informacija tako da ih zna samo organizacija i korisnik
- korištenjem digitalnog potpisa
- validacijom sadržaja unutar web aplikacije
- korištenjem token-bazirane autentifikacije
Pharming se također može ublažiti raznim tehnikama:
- korištenjem nove verzije DNS softvera s uključenim posljednjim nadopunama
- instaliranjem DNS zaštitnih mehanizama na serveru
- praćenjem domena i registracija sličnih domena
- pojednostavljenjem strukture i broja naziva domena
- korištenjem sigurne konekcije (https) za prijavu
- provjerom rezolucija hostova trećih strana
- korištenje pre-shared tajni
Zaštita aktivnog sadržaja
Odnosi se na dinamičke web stranice sa interaktivnim elementima. Povezano je s tehnologijama kao što su ActiveX, Java, VBScript, JavaScript, AJAX.
Potrebno je posebno razmatrati zaštitu aktivnog sadržaja pošto postoje brojne ranjivosti web tehnologija na strani klijenata. Tu treba u obzir uzeti prethodno navedene tehnologije i njihove nedostatke.
Ranjivosti na strani servera se očituju u sljedećem:
- pristup bazi podataka
- aplikacije e-trgovine/e-government
- chat sobe
- diskusijske grupe
Problem su tehnologije kao što su CGI, ASP.NET, PHP, Java EE i slične.
U ovom dijelu vidljivo je da se razmatra zaštita web aplikacija. Ovdje se u sve probleme pojedine tehnologije neće ulaziti.
Korištenje autentifikacijske i tehnologije kriptiranja
Koriste se brojne tehnologije za identifikaciju i autentifikaciju korisnika od kojih se neke baziraju na kriptografskim funkcijama. Kriptiranje se koristi za zaštitu informacija koje se prenose mrežom ili su pohranjene negdje. Bez kriptiranja svatko može lako saznati sadržaj poruke koja se prenosi čime se krši integritet i pouzdanost podataka.
Zahtjevi za autentifikaciju i kriptiranje
Periodički je potrebno ispitati sve informacije dostupne na poslužitelju. Za informacije koje zahtijevaju neku razinu autentifikacije, potrebno je odrediti tehnologije i metode koje će osigurati primjerenu razinu autentifikacije i enkripcije.
Autentifikacija temeljena na adresi
Najjednostavnijji mehanizam autentifikacije podržan na većini poslužitelja. Kontrola pristupa se temelji na IP adresi. Osjetljiva je na napade uključujući IP spoofing i DNS poisoning. Korištenje ove autentifikacije nije preporučljivo osim ako se radi o minimalnim sigurnosnim zahtjevima.
Osnovna autentifikacija
Koristi strukturu direktorija web poslužitelja. Za pristup datotekama istog direktorija obično su iste privilegija pristupa. Osnovna ili basic autentifikacija je podržana od standardnih preglednika te korisna za zaštitu informacija od malicioznih botova, ali za neke češće i sofisticiranije napade nije dovoljna.
Digest autentifikacija
Pojavila se u verziji 1.1 HTTP protokola. Koristi tzv. challenge-response mehanizam za autentifikaciju. Korisniku koji je pitan za korisničke podatke se šalje nonce (broj korišten samo jednom) ili neka druga vrijednost. Informacije koje korisnik unosi se sažimaju kriptografskim hash funkcijama koje koriste i nonce. Ovo štiti od sniff napada, ali i malicioznih botova.
SSL/TLS
SSL i TLS osguravaju i server i klijent autentifikaciju i enkripciju komunikacija. Više se o ovim protokolima može pročitati ovdje.
SSL i TLS dopuštaju korisniku potvrdu identiteta poslužitelja. Omogućuje klijentu standardne tehnike kriptografije. Dopušta web poslužitelju da potvrdi identitet korisnika provjeravajući certifikat. SSL/TLS imaju i nedostatke, ali su prepoznati kao najrašireniji protokoli koji osiguravaju siguran HTTPS prijenos podataka između klijenta i servera.
Implementacija sigurne mrežne infrastrukture
Mrežna infrastruktura kao podrška web poslužitelju je kritični dio sigurnosti web poslužitelja. Mrežna infrastruktura je prva linija obrane između Interneta i web poslužitelja, što naravno uvelike ovisi o konfiguraciji infrastrukture. Međutim, sama konfiguracija mreže nije dovoljna za zaštitu web poslužitelja.
U ovom dijelu razmatraju moraju se razmotriti sve one mrežne komponente koje mogu podržati i štititi web poslužitelj kao dio cjelokupne njegove sigurnosti.
Struktura i kompozicija mreže
Uređaji koji kontroliraju mrežni promet između mreža su ruteri i vatrozidi. Time oni mogu štititi web poslužitelj od ranjivosti u TCP/IP-u i time mogu smanjiti sigurnosna pitanja vezana uz nesigurne aplikacije i OS. U mnogim situacijama, kompozicija i struktura mreže je prva kritična odluka koja djeluje na sigurnost poslužitelja jer određuje kako elementi mrežne infrastrukture štite poslužitelj.
Nepreporučljivi mrežni raspored
Ako se npr. poslužitelj nalazi u unutrašnjoj produkcijskoj mreži, odnosno ako se nalazi u istoj mreži u kojoj su i unutarnji korisnici i poslužitelji, postoji glavna slabost tog rasporeda koja izlaže unutarnju mrežu i njezine komponente dodatnom riziku. Ako u ovom slučaju napadač kompromitira poslužitelj, imat će pristup cijeloj unutrašnjoj mreži. Također, ne preporuča se ni raspored u kojem se poslužitelj stavlja ispred vatrozida ili rutera koji osiguravaju IP filtriranje. U tom slučaju zaštite praktički ni nema.
Demilitarizirana zona
Demilitarizirana zona opisuje mrežni segment kao neutralnu zonu između neke mreže (npr. organizacijske mreže) i Interneta. Sprječava vanjskog korisnika u dobivanju pristupa unutrašnjoj mreži (intranetu). Ova zona umanjuje rizik lociranja web poslužitelja u unutrašnjoj mreži ili njegovog izlaganja Internetu. DMZ pruža najviše beneficija s najmanje rizika za neku organizaciju.
Postoji veći broj DMZ konfiguracija.
Stvaranje DMZ uključuje stavljanje vatrozida između graničnog rutera i unutrašnje mreže, i stvaranje novog mrežnog segmenta kojem se može pristupiti samo kroz DMZ uređaj. Web poslužitelj se nalazi na novom segmentu, zajedno s ostalim komponentama infrastrukture i poslužiteljima koji ne moraju biti dostupni izvana. Spomenuti granični ruter često može biti i osnovni vatrozid.
Sljedeća slika prikazuje primjer jednostavne DMZ koristeći ruter s listom kontrole pristupa.
DMZ kakva je prikazana iznad predstavlja pristup s malim troškovima. Nedostatak postoji u pogledu ovog graničnog rutera. Nešto bolji pristup dodaje još jedan vatrozid između Interneta i DMZ kao što je prikazano na slici ispod.
Dvostruki vatrozid povećava sigurnost jer može imati složeniji i moćniji skup sigurnosnih pravila. Ako je pristup s dva vatrozida preskup, dobro rješenje je postojanje tzv. „service leg“ DMZ. U toj konfiguraciji vatrozid ima nekoliko (npr. 3) mrežnih sučelja od kojih je jedno zakopčano na granični ruter, drugo na unutrašnju mrežu, treće na DMZ kao što se vidi na slici ispod.
Prednosti DMZ sa stajališta sigurnosti:
- web poslužitelj je bolje zaštićen i promet se može pratiti
- kompromitiranje web poslužitelja nije direktna prijetnja unutrašnjoj mreži
- mogu se osigurati veće kontrole jer se može kontrolirati sav promet na i od servera.
- DMZ se može konfigurirati i optimizirati za podršku i zaštitu web poslužitelja
Vanjski (outsourced) hosting
Može se donijeti odluka da se hosting web poslužitelja preda vanjskoj trećoj strane (ISP-u ili npr. vladinoj agenciji). Tako se poslužitelj neće nalaziti u mreži organizacije.
Upravljana mreža (managed network)
Moguće je postaviti vezu između web poslužitelja i ostalih komponenti na način da veza ide kroz odvojenu mrežu poznatu kao managed network, umjesto da veza ide kroz standardnu mrežu organizacije. Ako se ta mreža koristi, svaki host koristi dodatno mrežno sučelje kojim se povezuje na tu mrežu. Isto tako, taj host neće moći slati promet između managed sučelja i bilo kojeg drugog mrežnog sučelja. Arhitektura efektivno izolira mreže. Korist se vidi u tome što se omogućuje zaštita komponenti od napada (npr. DDoS-a).
Konfiguracija mrežnih elemenata
Kada se poslužitelj smjesti na mrežu, potrebno je konfigurirati sve elemente mrežne infrastrukture. Primarni elementi su vatrozidi, ruteri, IDS i IPS (intrusion detection i prevention sustavi), switch, load balanseri i reverse proxy. Svaki element ima svoju ulogu u cjelokupnoj strategiji zaštite web poslužitelja.
Ruter/vatrozid (firewall)
Postoji više vrsta vatrozida. Npr. osnovni vatrozid je zapravo ruter koji osigurava pristup IP paketima. Najjači vatrozidi su vatrozidi aplikacijskih slojeva ili proxy vatrozidi koji mogu razumjeti i filtrirati web sadržaj. Iako se smatra da ruter i vatrozid mogu eliminirati sav rizik i zaštititi protiv miskonfiguracije web poslužitelja, to nažalost nije tako. I vatrozid i ruter su također ranjivi.
Moderni ruteri mogu se ponašati kao mrežni i transportni filteri, tj. osnovni vatrozid. Ruter može osigurati filtriranje sadržaja bazirano na sljedećem:
- izvornoj IP adresi
- destinacijskoj IP adresi
- vrsti prometa
- TCP/UDP broju porta
Snaga rutera očituje se najčešće u njegovoj cijeni.
Aplication layer vatrozidi smatraju se najsigurnijim i imaju veliki broj prednosti kao što su mogućnosti:
- sposobnost logiranja (logging)
- sposobnost filtriranja
- sukladnost protokola
- validacija ponašanja protokola
- jednostavna konfiguracija
- sposobnost korisničke autentifikacije
- integriranu detekciju napada temeljenu na potpisu
Intrusion detection i prevention sustavi (IDS i IPS)
To su aplikacije koje prate događaje koji se javljaju u sustavu ili mreži i analiziraju ih kao znakove potencijalnih incidenata. Oba sustava nude vrlo slične sposobnosti pa se često nazivaju IDPS. Kada takav sustav detektira potencijalni incident obavještava administratora kroz poruke putem konzole, maila, stranice ili nekog drugog mehanizma.
Dva su najvažnija tipa IDPS-a. To su host baziran i mrežno bazirani tip.
IDPS mora biti konfiguriran za:
- praćenje mrežog prometa na i od servera
- praćenje promjena na kritičnim datotekama
- praćenje resursa sustava
- blokiranje IP adresa koje napadaju mrežu
- obavještavanje
- otkrivanje raznih skeniranja i napada
- bilježenje logova
- hvatanje paketa
- ažuriranje novih potpisa napada
Switch
Switch je uređaj koji osigurava vezu između dva ili više hostova lociranih na istom mrežnom segmentu. Često uključuje specifične sigurnosne postavke. Npr. vrlo često je da switch ima mogućnost minimiziranja rizika napada ARP spoofinga i ARP trovanja. Naravno, ako switch ima te mogućnosti potrebno ih je uključiti prema dokumentaciji proizvođača.
Load balancers
Distribuiraju HTTP zahtjeve kroz višestruke poslužitelje, dopuštajući povećanje kapaciteta web stranica dodavajući dodatne poslužitelje. Ponašaju se kao virtualni serveri, primajući HTTP zahtjeve na web stranice. Ono što se karakteristika je to da load balancer pokušava osigurati da svaki server prima podjednaki broj zahtjeva. Ima i mogućnost praćenja servera.
Revers proxies
To je uređaj koji se nalazi između poslužitelja i njegovog klijenta. Tok podataka je povratni za razliku od tradicionalnog (forward) proxy-ja. Može služiti kao dodatna zaštita poslužitelja. Može sadržavati sljedeće funkcionalnosti:
- ubrzavače kriptiranja
- sigurnosne gateway-e koji prate promet
- filtre sadržaja
- autentifikacijske gateway-e
Administracija web poslužitelja
Nakon što je web poslužitelj u potpunosti razvijen, administratori ga moraju kontinuirano sigurno održavati. U ovom dijelu dane su preporuke za sigurnu administraciju web poslužitelja vezane uz glavne aktivnosti kao što su rukovanje i analiziranje log datoteka, izvođenje regularnih backupova (izrada sigurnosnih kopija), oporavak od kompromitiranja, regularno testiranje sigurnosti i provođenje remote administracije na siguran način.
Logovi
Bilježenje logova je temelj sigurnosni stav. Bilježenjem ispravnih podataka u log datoteke i praćenje tih zapisa je vitalno za svaki sustav. Osim osnovnih logova kao što su mrežni i sustavski, često se provode i oni dodatni.
Log zapisi osiguravaju sljedeće:
- uzbuna na sumnjive aktivnosti koje zahtijevaju daljnja istraživanja
- praćenje aktivnosti napadača
- pomoć pri oporavku sustava
- pomoć u poslije događajnom istraživanju
- potrebe informacije za legalne postupke
Administratori moraju pratiti sljedeće instrukcije kako bi konfigurirali i omogućili logove:
1. Identificiranje sposobnosti bilježenje logova web poslužitelja - transfer log - error log - agent log - referrer log 2. Identificiranje dodatnih zahtjeva za bilježenje logova 3. Preporučene opće konfiguracije logova 4. Pregled i zadržavanje log datoteka 5. Alate za automatiziranu analizu log datoteka
Backup procedure
Očuvanje integriteta podataka je jedna od najvažnijih funkcija poslužitelja. Dva su osnovna principa kojih se treba držati prilikom izrade sigurnosnih kopija: regularni backup podataka i OS-a i održavanje odvojenih zaštićenih kopija sadržaja.
Strategije i police izrade sigurnosnih kopija
Kopije se izrađuju iz legalnih i financijskih razloga. Sve organizacije trebaju izraditi police sigurnosnih kopija podataka.
Tu treba uključiti utjecaj tri faktora:
- legalni zahtjevi (zakoni i regulacije, zahtjevi sporova)
- zahtjevi misije (ugovorni, dobra praksa, kritičnost podataka za organizaciju)
- organizacijske preporuke i police
Održavanje test poslužitelja
Donosi obično nove troškove, ali nudi brojne prednosti:
- osigurava platformu za testiranje novih nadopuna (patches, service packs)
- osigurava razvojnu platformu za webmastere i administratore
- osigurava platformu za konfiguracijske testove
Održavanje autoritativne kopije web sadržaja
Svaka organizacija treba održavati kopije sadržaja web poslužitelja.
Za zaštitu i osiguravanje tih kopija treba pratiti sljedeće zahtjeve:
- zaštita kopija od neautoriziranog pristupa
- postavljanje primjerenih procedura za ažuriranje kopija
- uspostava procesa kopiranja kopija na glavni poslužitelj
- uključiti procedure za povrat kopija
- razmotriti automatska ažuriranja periodički
Oporavak od kompromitiranja
Prvi korak oporavka je izrada i dokumentiranje potrebnih polica i procedura za odgovaranje na uspješne upade prije samog upada.
Primjer koraka koje je dobro provoditi nakon otkrivanja uspješnog upada:
- prijava incidenta
- izoliranje kompromitiranog sustava
- konzultiranje s upravljačkim, legalnim i zakonskim tijelima
- istraživanje sličnih upada koji su kompromitirali druge sustave
- analiziranje upada
- vraćanje sustava
- testiranje sustava
- ponovno povezivanje na mrežu
- praćenje sustava i mreže za ponovne pokušaje upada
- dokumentiranje naučene lekcije
Sigurnosno testiranje poslužitelja
Potrebno je testove provoditi periodički. Bez periodičkih testova nema saznanja da su trenutne mjere dobre. Postoje razne tehnike testiranja. Najčešće je skeniranje ranjivosti. Penetracijsko testiranje se također široko koristi.
Preporuka je, dakle:
- skeniranje ranjivosti
- identificiranje aktivnih hostova na mreži
- identificiranje aktivnih portova na hostovima i traženje ranjivih
- identificiranje aplikacija i bannera
- identificiranje OS-a
- identificiranje ranjivosti povezanih s otkrivanjem OS-a i aplikacija
- penetracijsko testiranje
- testiranje mreže koristeći iste metodologije i alate koje korite i napadači
- provjera postojanja ranjivosti
- demonstracija kako se ranjivosti mogu eksploatirati iterativno i dobiti veći pristup
- demonstrirati kako ranjivosti nisu samo teoretske
- osigurati realnost potrebnu za imenovanje sigurnosnih pitanja
- dopustiti testiranje procedura i uključivanje ljudskog elementa te socijalni inženjering
Remote administracija
Ovo se preporuča samo ako su pažljivo razmotreni svi rizici. Ako organizacija smatra da je potrebno remote administriranje ili promjena sadržaja, potrebno je pratiti sljedeće korake koji osiguravaju da je sadržaj postavljen na najsigurniji mogući način:
- korištenje jakih autentifikacijskih mehanizama
- ograničenje hostova koji će biti korišteni za remote administriranje
- korištenje sigurnih protokola (SSH, HTTPS, SSL, IPSec)
- uključiti koncept najmanje privilegije
- ne dopustiti remote administraciju kroz vatrozid osim ako se ne koristi npr. VPN
- promjena svih predefiniranih računa i lozinka
- ne namještati dijeljenje datoteka na unutrašnju mrežu sa web poslužitelja
(Izvor: http://csrc.nist.gov/publications/nistpubs/800-44-ver2/SP800-44v2.pdf)
--Jurica 17:12, 17. siječnja 2013. (CET)
Zaštita Apache web poslužitelja
Apache web poslužitelj
Kao što je navedeno u uvodu, Apache web poslužitelj danas je najpopularniji web poslužitelj te se koristi za pogon velike većine servera te za rukovanje različitim web sadržajem. Apache web poslužitelj pojavio se 1995. godine, a prvu verziju je izradio Robert McCool zajedno sa svojim suradnicima, te je tako nastala prva verzija Apache HTTP poslužitelja. Nakon samog izlaska Apache web poslužitelja, njegova popularnost naglo je porasla, te je i tu popularnost zadržao i do danas. Prednosti koje su korisnici Apache web poslužitelja prepoznali su jednostavnost, efikasnost te činjenica što je Apache web poslužitelj besplatan, odnosno open source. Također, jedna od najbitnijih značajki Apache web poslužitelja, koja je ujedno i najznačajnija za njegove korisnike je razina sigurnosti koju on pruža, a ta razina sigurnosti dostignuta je konstantnim postupcima ispravaka i optimizacije, te se u pravilu, nova verzija Apache web poslužitelja izdaje samo kako bi se uklonili sigurnosni propusti, no njih je vrlo mali broj.
Za Apache web poslužitelj važna je i 2002. godina, kada izlazi 2.0 inačica, koja je donijela mnoga poboljšanja, a neka od tih su:
- Threading - podrška za rad na računalima sa više procesora
- Apache API - poboljšanje efikasnosti i fleksibilnosti poslužitelja
- IPv6 Support - podrška za internet protokol verzije 6
- Support for non-Unix platforms - više pažnje posvetilo se prvenstveno Windows okruženju
- Simplified configuration - naredbe za podešavanje web servera pojednostavljene su
--Ivankos 15:29, 20. siječnja 2013. (CET)
Apache sigurnosni principi
Sigurnost se može definirati na razne načine.
Jedan način je definiranje sigurnosti kroz tri cilja:
- pouzdanost
- integritet
- dostupnost
Još jedan način uključuje pogled na sigurnost kroz procese koji se sastoje od faza:
- procjena
- zaštita
- otkrivanje
- odgovor
Ovdje se prvenstveno ne misli na tehničku zaštitu, već onu taktičku razinu zaštite.
Osnovni sigurnosni principi
Ovo su principi koje svaka osoba koja se bavi sigurnošću mora poznavati:
- Pregrađivanje
Prema principu podmornice, pregrađivanje čuva cijelu podmornicu od curenja vode u nekom dijelu. Ako podmornica ne bi bila pregrađena, cijela podmornica bi se ispunila vodom. Dakle, misli se na kontrolu štete. Ideja je da se cijeli dizajn sastoji od brojnih malih povezanih dijelova.
- Korištenje načela najmanje privilegije
Svaki dio sustava treba imati svoje privilegije za izvođenje svog posla i nikakve druge privilegije. Ako je jedan dio sustava kompromitiran, šteta će biti ograničena.
- Provođenje obrane u dubinu
Ovdje se misli na postojanje višestrukih nezavisnih slojeva sigurnosti.
- Skrivanje informacija
Informacije treba čuvati skrivene od napadača čim više je moguće i time napadaču otežati posao što je više moguće.
- Sigurno podbacivanje
Ako neka komponenta sustava padne, treba osigurati da podbaci tako da se promijeni u još sigurnije stanje. Npr. ako sustav za prijavu padne, onda treba odbiti sve moguće pokušaje prijave u sustav.
- Osiguravanje najslabije karike
Sustav je jak koliko je jaka najslabija karika. Potrebno je razumijeti sve dijelove sustava i fokusirati se na one slabije dijelove.
- Prakticiranje jednostavnosti
Pošto se ljudi teško nose sa složenošću (7 koncepata), teško je razumijeti stvari koje su složene. Jednostavne sustave lako je konfigurirati, provjeravati i koristiti.
Koraci sigurnosnog procesa
Ako uzmemo u obzir ona početna definiranja sigurnosti može se doći do sedam praktičnih koraka koji pokrivaju sigurnosni proces:
1. Razumijeti okolinu i sigurnosne zahtjeve
2. Uspostaviti sigurnosne police i dizajn sustava
3. Razviti operacijske procedure
4. Pažljivo konfigurirati
5. Provoditi održavanje i redovito ažurirati
6. Pratiti
7. Nositi se s napadima
Apache pogled na aplikacijsku strukturu
Osim Apache pogleda, na aplikacijsku strukturu možemo gledati s korisničkog stajališta i stajališta mreže.
Apache pogled na sustav je vrlo složen. Uključuje sve komponente koje poznajemo, ali ne razmišljamo o njima na taj način.
To su:
- sam Apache
- Apache moduli
- Apache konfiguracija
- CGI skripte
- Aplikacije
- Konfiguracija aplikacija
- Podaci aplikacija na datotečnom sustavu
- Podaci u bazama podataka
- Vanjski servisi
- Datoteke sustava
- System binaries
Sljedeća slika najbolje islustrira ove navedene komponente.
--Jurica 15:26, 19. siječnja 2013. (CET)
Savjeti za sigurniji Apache
Prilikom postavki Apache web poslužitelja dobro se držati nekih sugestija. Neke su općenite, dok su neke vezane upravo za Apache.
Savjeti se detaljnije mogu pročitati na web stranicama Apache poslužitelja: Apache savjeti
Ovdje je dan kraći pregled najvažnijih sigurnosnih savjeta od Apache tima:
- Redovito ažuriranje
Apache Community stalno brine o novim sigurnosnim pitanjima, stoga se često objavljuju nove verzije i dopune. Ipak, potrebno je ažurirati redovito i ostali softver te operacijski sustav.
- Dopuštenja na root direktoriju poslužitelja
Apache se pokreće kao root korisnik, i prebacuje na drugog korisnika kako je definirano u User direktivi. Potrebno je brinuti o zaštiti pristupa od strane ne-root korisnika. U datoteke smije pisati samo onaj tko ima root privilegiju, ali isto mora vrijediti za datoteke koje se nalaze u direktorijima koje su u strukturi iznad. Ako se root direktorij poslužitelja stavi u /usr/local/apache onda je taj direktorij potrebno kreirati kao root korisnik na sljedeći način: mkdir /usr/local/apache cd /usr/local/apache mkdir bin conf logs chown 0 . bin conf logs chgrp 0 . bin conf logs chmod 755 . bin conf logs Ako se dopusti da neki drugi korisnik ima pristup root direktoriju sustav je već kompromitiran.
- SSI (Server Side Include)
Predstavlja administratoru nekoliko potencijalnih prijetnji. Prva je povećano opterećenje servera. Isto tako SSI ima isto rizik povezan s CGI skriptama. Koristeći exec cmd naredbu SSI omogućava datoteci da se izvrši kao CGI skripta ili program s dopuštenjem korisnika ili grupe koja pokreće Apache kako je konfigurirano u httpd.conf Za izolaciju štete koju SSI može uzrokovati potrebno je omogućiti suexec.
- CGI općenito
Prvo na pameti treba biti povjerenje u onoga tko je pisao CGI skriptu. CGI skripte se izvršavaju kao isti korisnik, stoga imaju potencijalni sukob s ostalim skriptama.
- Non Script Aliased CGI
Korisniku se smije dopustiti pokretanje CGI skripte samo ako je razmotreno sljedeće: Ako se vjeruje korisniku da neće pisati skripte koje izlažu sustav napadima Ako se razmotri sigurnost stranice pa je ta prijetnja nevažna Ako nema korisnika, tj. ako nitko ne posjećuje server
- Script Aliased CGI
Ograničenje CGI na posebne direktorije daje administratoru kontrolu nad onim što će ići u te direktorije. Većina stranica odabire uparvo ovu opciju umjesto Non Scripting CGI pristup.
- Drugi izvori dinamičkog sadržaja
Ugrađene opcije skripti koje se pokreću kao dio servera kao što su mod_php, mod_perl, mod_tcl i slične, pokreću se pod identitetom samog servera pa mogu pristupiti svemu onome čemu i server sam može pristupiti.
- Zaštita sustavskih postavki
Potrebno je spriječiti korisnike u postavljanju .httacces datoteke koja može zaobići sigurnosne postavke. To se može učiniti na sljedeći način postavljanjem naredbe u config datoteku: <Directory /> AllowOverride None </Directory>
- Predefinirana zaštita datoteka servera
Default pristup se često ne razumije. Ako se ne promijene te postavke, server može naći način da dođe do datoteke kroz URL mapping pravila i njima poslužiti klijenta. Kako bi spriječili da klijent izlista sadržaj kompletnog servera potrebno je dodati u config sljedeće: <Directory /> Order Deny,Allow Deny from all </Directory> Ovo brani pristup filesystem lokaciji. Ako pak se želi dati pristup samo nekim područjima potrebno je dodati ovo: <Directory /usr/users/*/public_html> Order Deny,Allow Allow from all </Directory> <Directory /usr/local/httpd> Order Deny,Allow Allow from all </Directory>
- Pregled logova
U logovima se moraju naći sve informacije o svemu što se događalo u sustavu. Primjer: grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log grep "client denied" error_log | tail -n 10 Naredba izlistava broj napada koji su htjeli eksploatirati Apache Tomcat Source. Log datoteka prikazuje samo ono što se već dogodilo.
(Izvor: http://httpd.apache.org/docs/2.2/misc/security_tips.html)
--Jurica 14:29, 19. siječnja 2013. (CET)
Moduli za Apache
Apache obuhvaća brojne Multi-Processing module koji otpremaju podatke na obradu dretvama ili procesima. Brojni dodatni moduli su dostupni za proširenje funkcionalnosti samog Apache poslužitelja. Broj modula danas je negdje oko 540.
Ovdje će biti opisani moduli Apache poslužitelja vezani uz sigurnost ovog web poslužitelja.
mod_access
mod_access ili access_module osigurava kontrolu pristupa baziranu na klijentovom imenu (hostname), IP adresi ili nekoj drugoj karkteristici zahtjeva kojeg klijent šalje serveru.
Direktive (smjernice) koje osigurava ovaj modul koriste se u <Directory>,<Files> i <Location> sekciji kao i u .htaccess datoteci za kontrolu pristupa pojedinim dijelovima poslužitelja.
Pristup se može kontrolirati na temelju klijentovog imena, IP adrese ili karakteristike njegovog zahtjeva koje se bilježe u environment varijablama (varijable okoline).
Direktive koje se koriste su:
- Allow
- Deny
- Order
Allow i Deny smjernice se koriste kako bi se specificiralo koji klijent može, a koji ne može pristupiti poslužitelju. Order smjernica postavlja default stanje pristupa i konfigurira kako Allow i Deny smjernice međusobno djeluju jedna s drugom.
Općenito, zabrana pristupa se primjenjuje na sve metode pristupa (GET, PUT, POST). Ipak, moguće je ograničiti neke metode, a druge dopustiti. Te metode stavljaju se onda u <Limit> sekciju.
Allow smjernica
Kontrolira koji host možee pristupiti nekom području poslužitelja.
Sintaksa je sljedeća:
Allow from all|host|env=env-variable [host|env=env-variable]
Prvi argument je uvijek from. Allow from all dopušta pristup svima. Ako se želi specificirati samo neki korisnik ili grupa, tada se može koristiti neki od ovih formata:
Allow from apache.org
Allow from .hr example.edu
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205
Allow from 10.1
Allow from 10 172.20 192.168.2
Allow from 10.1.0.0/255.255.0.0
Allow from 10.1.0.0/16
Za IPv6 se također može specificirati na sljedeći način:
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
Deny smjernica
Kontrolira koji hostovi nemaju pristup poslužitelju prema imenu hosta, IP adresi ili varijabli okoline.
Sintaksa je sljedeća:
Deny from all|host|env=env-variable [host|env=env-variable]
Argumenti smjernice jednaki su argumentima Allow smjernice.
Order smjernica
Kontrolira predefinirano stanje pristupa i uređuje kako su Allow i Deny procijenjeni.
Sintaksa:
Order ordering (Allow,Deny; Deny,Allow ili Mutual-failure)
Order Deny,Allow
Primjer:
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
(Izvor: http://httpd.apache.org/docs/2.0/mod/mod_access.html)
--Jurica 18:42, 19. siječnja 2013. (CET)
mod_auth
Modul služi za autentifikaciju koristeći tekstualne datoteke. Modul dopušta korištenje HTTP osnovne autentifikacije za ograničavanje pristupa na način da provjerava korisnika u plain text password i group datotekama. Slične funkcionalnosti ima i mod_auth_dbm i mod_auth_digest.
- AuthAuthoritative smjernica
Smjernicom se postavlja kako je autorizacija i autentifikacija proslijeđena modulima nižih razina. Sintaksa: AuthAuthoritative On|Off Ako se vrijednost postavi na Off tada se dopušta da se autentifikacija i autorizacija proslijede na module niže razine.
- AuthGroupFile smjernica
Postavlja ime tekst datoteke koja sadrži listu grupa korisnika za autentifikaciju. Sintaksa: AuthGroupFile file-path File-path je putanja do datoteke grupe. Ako nije apsolutna, tretira se kao relativna. Primjer: mygroup: bob joe anne
- AuthUserFile smjernica
Postavlja naziv tekst datoteke koja sadrži listu korisnika i lozinki za autentifikaciju. Sintaksa: AuthUserFile file-path
(Izvor: http://httpd.apache.org/docs/2.0/mod/mod_auth.html ovdje)
--Jurica 18:54, 19. siječnja 2013. (CET)
mod_cband
Ukoliko postoji potreba za ograničavanjem mrežnog prometa, odnosno mrežne propusnosti, modul cband za Apache web poslužitelj dolazi do izražaja. Osnovna namjena cband modula je ograničavanje mrežne propusnosti prema korisnicima i virtualnim hostovima (eng. virtual host). Pojam virtualni host, označava praksu kod koje se na jednom uređaju, odnosno poslužitelju nalazi više web mjesta, pa tako svako web mjesto koje se nalazi na tom poslužitelju, može se razlikovati prema IP adresi, ili prema imenu, odnosno web mjesto može biti IP-Based ili name-base. Više o virtual host-u se nalazi na sljedećem linku, Apache Virtual Host documentation. Upotrebom modula cband, mogu se postavljati ograničenja prema virtualnim hostovima, te korisnicima u obliku dodijeljenih kvota vezanih uz mrežnu propusnost, zatim najveću brzinu downloada, najveći broj istovremenih zahtjeva sa različitih IP adresa.
Značajke Apache modula cband:
- jednostavan modul za ograničavanje bandwidtha
- ograničavanje bandwidth-a prema korisnicima
- ograničavanje bandwidth-a prema virtualnim hostovima
- ograničavanje bandwidth-a prema određenima adresama
- ograničavanje:
- najvećeg dopuštenog prometa
- najveće brzine download-a
- najvećeg broja istovremenih zahtjeva
Što se tiče same instalacije modula cband, ona je poprilično jednostavna te se sastoji od nekoliko koraka. Prvi korak kod instalacije modula na Linux okruženju je njegovo preuzimanje, modul cband preuzet je sa adrese prikazane ispod.
wget http://dembol.org/downloads/cband/mod-cband-0.9.7.5.tgz
Modul dolazi u obliku tar arhive te ga je potrebno raspakirati.
tar -xzf mod-cband-0.9.7.5.tgz
Nakon raspakiravanja, unutar direktorija u kojem je raspakiran modul potrebno je pokrenuti instalaciju.
cd mod-cband-0.9.7.5 ./configure make make install
Nakon završene instalacije potrebno je restartati Apache kako bi se pohranile promjene.
/etc/apache2/restart
Sljedeći primjer prikazuje na koji način se može ograničiti promet nad nekoliko virtualnih hostova. Potrebno je kreirati pravilo kojim se kasnije mogu povezivati virtualni hostovi, u ovom primjeru to je myUser.
<CBandUser myUser> # 100Mb limit, 10 tjedana CBandUserLimit 100Mi CBandUserPeriod 10W # datoteka u koju se zapisuje bandwidth po hostu CBandUserScoreboard /somewhere/user.myUser.scoreboard </CBandUser> #nad svakim virtualnim hostom primjenjuje se myUser <VirtualHost firstvhost> ... CBandUser myUser <VirtualHost> <VirtualHost secondvhost> ... CBandUser myUser </VirtualHost>
Primjer kako ograničiti bandwidth određenoj IP adresi je prikazan ispod. Prvi korak kod ograničavanja bandwidtha je da se definira skup, odnosno klasa koja sadrži sve IP adrese kojima se ograničava propusnost
<CBandClass myClass> CBandClassDst IP1 CBandClassDst IP2/mask CBandClassDst IP3 .... </CBandClass>
Zatim se nad tom stvorenom klasom IP adresa mogu stavljati različita pravila, odnosno ograničenja.
<VirtualHost> ... # limit prometa od 1GB, na period od 4 tjedna CBandClassLimit myClass 1G CBandPeriod 4W </VirtualHost>
Nešto više o modulu cband nalazi se na sljedećim linkovima, cband Documentation, cband FAQ. Vrlo sličan modul cbandu, je i modul bandwidth, odnosno mod_bandwidth. Njegova namjena je prilično slična kao i namjena mod_cband, dakle, mod_bandwidth omogućava postavljanje limita, odnosno ograničenja bandwidtha ili propusnosti prema serveru ili prema korisnicnima. Na sljedećim linkovima nalazi se više informacija o samom mod_bandwidthu kao i njegova instalacija i konfiguracija, Setup and configure bandwidth limiting, mod_bandwidth.
(Izvor: http://dembol.org/blog/mod_cband/documentation/)
--Ivankos 19:55, 19. siječnja 2013. (CET)
mod_chroot
Ovaj modul omogućuje pokretanje Apache poslužitelja u sigurnoj chroot okolini. Ovaj modul uključen je u neke linux distribucije kao što su FreeBSD, Gentoo Linux, NetBSD, PLD Linux itd.
chroot mijenja root direktorij procesa u neki direktorij koji nije "/". To znači da se proces zaključa unutar nekog virtualnog file system root-a. Ako se chroot konfigurira dobro, Apache procesi i svi procesi djeca uključujući CGI skripte neće moći pristupiti ničemu osim onog što je u tom kontejneru ili zatvoru (jail). Ne root procesi ne mogu napustiti chroot jail.
Ako se koristi mod_chroot tada se Apache može smjestiti u "zatvor" bez dodatnih datoteka. Međutim, pokretanje Apache poslužitelja u tom zatvorenom kontejneru može biti problematično.
mod_chroot može se uključiti u Apache pomoću sljedećih naredbi u Linux okruženju:
./configure --add-module /usr/src/mod_chroot-x.y/src/apache13/mod_chroot.c make && make install apachectl start
(Izvor: http://core.segfault.pl/~hobbit/mod_chroot/)
--Jurica 19:31, 19. siječnja 2013. (CET)
mod_ssl
Modul ssl za Apache web poslužitelj služi za uspostavljanje sigurne veze upotrebom kriptografije putem SSL(Secure Socket Layer) protokola. Modul ssl pojavio se 1998. godine za Apache verziju 1.3., dok se izlaskom verzije 2.0., modul ssl nalazi kao dio Apache web poslužitelja. Secure Socket Layer protokol koristi se za obavljanje sigurnih transakcija preko interneta. Njegova osnovna namjena je osigurati zaštićeni prijenos podataka između klijenta i servera. SSL je danas jedan od najšire korištenih protokola koji nudi privatnost i pouzdanost kod komunikacije između klijenta i servera. Uz pomoć kriptografskih algoritama i ključeva između dvije komunikacijske strane, uspostavlja enkripcijski kanal kroz koji ostali protokoli poput HTTP mogu obavljati svoj dio posla. Kao dodatna značajka SSL protokola, javlja se autentifikacija svih strana komunikacijskog kanala pomoću certifikata. SSL protokol se sastoji od nekoliko slojeva:
- SSL Handshake Protocol
- SSL Change Cipher Spec Protocol
- SSL Alert Protocol
- SSL Record Layer
Prema TCP/IP mrežnom modelu, SSL protokol se nalazi u aplikacijskom sloju, što je i prikazano na slici ispod. Osim osiguravanja spomenutog HTTP protokola, za kojega je i inicijalno bio namijenjen, SSL se koristi i za osiguravanje SMTP, POP, IMAP, te FTP protokola.
SSL protokol u osnovi uključuje identifikaciju servera, identifikaciju klijenta te kriptiranu razmjenu podataka između klijenta i servera, a tu razmjenu ostvaruje preko prije spomenutih tehnika kriptiranja. U osnovi svaka SSL konekcija odnosno veza ostvaruje se u dva koraka ili faze, handshake faza, i data-exchange faza. SSL protokol u osnovi uključuje identifikaciju servera, identifikaciju klijenta te kriptiranu razmjenu podataka između klijenta i servera, a tu razmjenu ostvaruje preko prije spomenutih tehnika kriptiranja. U osnovi svaka SSL konekcija odnosno veza ostvaruje se u dva koraka ili faze, handshake faza, i data-exchange faza.
- Handshake
- U handshake fazi, ili fazi rukovanja, server šalje klijentu certifikat koji sadrži javni ključ, a klijent potvrđuje identitet servera pomoću PKI(Private Key Infrastructure) tehnologije. Također, server na isti način provodi verifikaciju klijentovog certifikata. Nakon uspješne verifikacije, klijent i server dogovaraju algoritam kojim će se kriptirati podaci, te dogovaraju ključeve koji će se koristiti za vrijeme trajanja sesije, odnosno sjednice.
- Data-exchange
- U ovoj fazi, nakon definiranja tajnih ključeva, komunikacija između klijenta i servera se nastavlja, a razmjena podataka je kriptirana nekim od dogovorenim simetričnim algoritmom
Deataljniji prikaz komunikacije putem SSL protokola prikazan je na sljedećoj slici.
Iz slike možemo vidjeti kako klijent uspostavlja vezu sa serverom putem handshake postupka, te razmjenu ključeva i certifikata. Nakon uspostavljanja veze, odnosno uspješnog handshakinga ili rukovanja, do izražaja dolazi Record layer SSL protokola u kojem se svi podaci koji se razmjenjuju kriptiraju dogovorenim algoritmom. Važan dio SSL-a je i njegov SSL Alert Protocol koji, ukoliko dođe do nekakve greške javlja upozorenje. Koliko je sigurna veza, odnosno sjednica uspostavljena SSL protokolom ovisi o mogućnostima klijenta i servera, te ukoliko server podržava 128-bitne ključeve, dok klijent podržava samo 40-bitne ključeve, veza ili sjednica će biti ostvarena putem 40-bitnog ključa.
Modul ssl sadrži veliki broj direktiva čiji kompletan popis se nalazi na http://httpd.apache.org/docs/2.2/mod/mod_ssl.html. Također, mod_ssl se može konfigurirati na način da može implementirati mnoge značajke SSL protokola putem različith varijabli. Neke od tih varijabli su:
- SSL_PROTOCOL - string, verzija protokola
- SSL_SESSION_ID - string, hex zapis ID sjednice
- SSL_VERSION_INTERFACE - string, verzija mod_ssl
Najjednostavnija konfiguracija mod_ssl-a sastoji se od sljedećih direktiva:
# omogućavanje SSL SSLEngine On # definiranje lokacije certifikata od servera SSLCertificateFile /usr/local/apache/conf/ssl/server.crt # definiranje lokacije privatnog ključa servera SSLCertificateKeyFile /usr/local/apache/conf/ssl/server.key
(Izvor: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html)
--Ivankos 20:59, 19. siječnja 2013. (CET)
mod_filter
mod_filter za Apache web poslužitelj omogućava pametnu konfiguraciju koja je sposobna prepoznati određeni izlazni sadržaj. Koristeći ovaj modul, Apache može biti konfiguriran na način da obrađuje različite vrste sadržaja preko različitih filtera, te može i obraditi sadržaj nepoznate vrste. mod_filter, web administratorima omogućava fleksibilnost u stvaranju lanca filtriranja Smjernice, odnosno direktive ovog modula su sljedeće:
- AddOutputFilterByType
- FilterChain
- Filter Declare
- FilterProtocol
- FilterProvider
- Filter Trace
Postoje tri koraka kod konfiguracije lanca filtriranja:
- Declare Filters
Pomoću FilterDeclare smjernice deklarira se filter, dodjeljuje mu se ime te tip filtera
- Register Providers
Smjernica FilterProvider registrira tzv. ''providera'' sa filterom. Ukoliko filter nije deklariran sa FilterDeclare, dodjeljuje mu se defaultni tip. Zadnji argument kojega FilterProvider prima je izraz, koji omogućava provideru izvršavanja zahtjeva, samo ukoliko je taj izraz ispravan.
- Configure the Chain
Prethodne dvije smjernice potrebne su za izgradnju lanca filtriranja, ali za njegov pravilan rad potrebna je smjernica FilterChain, koja je zadužena za konstrukciju lanca filtriranja od prethodno deklariranih pametnih filtara, također ova smjernica omogućava fleksibilnost ubacivanja filtera na kraj ili početak lanca, te brisanje filtera.
(Izvor: http://httpd.apache.org/docs/2.4/mod/mod_filter.html linku)
mod_ratelimit
Apache modul mod_ratelimit služi kao filter za limitiranje klijentu mreženu propusnost, odnosno bandwidth. Brzina konekcije definira se u KiB/s, pomoću varijable rate_limit. Primjer konfiguracije pomoću mod_ratelimit:
<Location /downloads> SetOutputFilter RATE_LIMIT SetEnv rate-limit 400 </Location>
(Izvor: http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html)
mod_limits
Apache modul mod_limits ima dvije osnovne namjene, da limitira najveći broj istovremenih ostvarenih konekcija, te da server odbija zahtjev ukoliko je opterećenje iznad neke određene granice. Primjer upotrebe mod_limits, gdje se ograničava broj konekcija sa IP adresa, te dopušteno preopterećenje:
<IfModule mod_limits.c> LimitMaxConnsPerUid 20 LimitMaxConnsPerIP 30 LimitMaxLoadAVG 10 CheckLoadInterval 5 </IfModule>
(Izvor: https://github.com/hackman/mod_limits)
mod_suexec
Apache modul mod_suexec omogućava izvršavanje CGI skripta određenom korisniku ili grupi korisnika. mod_suexec zajedno sa suexec programom se koristi za izvršavanje spomenutih CGI skripti. Sintaksa mod_suexec:
SuexecUserGroup User Group
mod_suexec sadrži smjernicu SuexecUserGroup koja omogućava definiranje korisnika ili grupe korisnika za izvršavanje određenih CGI skripti. Primjer upotrebe mod_suexec:
SuexecUserGroup nobody nogroup
(Izvor: http://httpd.apache.org/docs/2.2/mod/mod_suexec.html)
mod_log_config
Modul mod_log_config omogućava evidenciju i bilježenje svih zahtjeva prema poslužitelju. Omogućava fleksibilnu evidenciju svih zahtjeva sa strane klijenta, odnosno evidenciju korisničkih zahtjeva. Bilješke se mogu zapisivati u prilagodljivom formatu, te se mogu zapisivati direktno u datoteku ili na neki vanjski program. Smjernice, odnosno direktive ovog modula su:
- BufferedLogs
- CustomLog
- LogFormat
- TransferLog
TransferLog se koristi za stvaranje datoteke dnevnika, odnosno log datoteke, LogFormat se koristi za postavljanje prilagođenog formata, te CustomLog za definiranje log datoteke i formata. BufferedLogs se koristi kada se se zapisi prvo spremaju u radnu memoriju, a zatim se zapisuju na tvrdi disk, čime se ne mora nakon svakog zahtjeva izvršavati zapisivanje u dnevnik i spremanje na disk. Ovakvim načinom bilježenje zahtjeva, učinkovitije se koristi disk, te se povećavaju performanse.
(Izvor: http://httpd.apache.org/docs/2.4/mod/mod_log_config.html)
mod_log_forensic
mod_log_forensic omogućava forenzičko bilježenje klijentskih zahtjeva prema serveru. Bilježenje, odnosno logiranje, se obavlja prije i poslije obrade zahtjeva, pa tako forenzički dnevnik sadrži dva retka za svaki zahtjev prema serveru, također format zapisa u dnevnik je fiksan, što znači da se nakon zapisa on ne može mijenjati. Zapisivanje u dnevnik prvi put se provodi prije daljnje obrade zahtjeva, a drugi put nakon obrade zahtjeva u isto vrijeme u kojem bi se u dnevnik bilježio zapis kod normalnog logiranja. ForensicLog smjernica zadužena je za zapisivanje zahtjeva prema serveru za forenzičku analizu. Sintaksa ForensicLog direktive:
ForensicLog filename|pipe
Svaki zapis u dnevnik dobiva jedinstveni ID preko kojega se može povezati određeni zahtjev koristeći CustomLog direktivu. Argumenti koje ForensicLog prima su ime datoteke na koju se zapisuje, te vanjski program koji prihvaća zabilješke o zahtjevima.
(Izvor: http://httpd.apache.org/docs/2.4/mod/mod_log_forensic.html)
--Ivankos 21:00, 19. siječnja 2013. (CET)
Ostali mehanizmi zaštite
Apache u "zatvoru"
Koliko god se trudili zaštiti neki sustav, upadi i u najzaštićeniji sustav su mogući. Ukoliko napadač uspije probiti mehanizme zaštite, njegova namjena je pronaći što više ranjivosti te postati superuser korisnik, te na taj način imati nesmetan pristup i kontrolu nad poslužiteljem. Cilj jail mehanizma zaštite je, ukoliko dođe do upada u sustav, ograničiti napadaču pristup određenim dijelovima sustava, te ga zadržati u samo određenom dijelu sustava u kojem ne može prouzrokavati značajniju štetu. Blokiranje napadača ostvaruje se sistemskim pozivom chroot, koji omogućava postavljanje restrikcija na različite procese, te se tako limitira pristup tog procesa određenim datotečnim sustavima. chroot funkcionira na način da odabere direktorij koji postaje novi root datotečnog sustava. Nakon izvršavanja sistemskog poziva chroot nad procesom, proces se ne može vratiti u prethodno stanje, odnosno on se nalazi u 'zatvoru', jail. Implementiranjem jail mehanizma u web server pruža mnogo prednosti, a neke od njih su:
- Blokiranje(Containment) - ukoliko napadač ostvari pristup poslužitelju, pomoću ovog mehanizma blokiranja, 'dopušta' mu se samo pristup ograničenim direktorijima, odnosno onemogućen mu je pristup važnim podacima
- Nepostojanje jezgre(No shell) - mnoge vrste napada koriste se jezgrom kako bi provele napad, ovaj mehanizam ne otklanja jezgru operacijskog sustava, nego ju zaštićuje od upada
- Limitirana dostupnost alata -ukoliko je napadač ostvario pristup poslužitelju, daljnji napadi su spriječeni na način da mu se onemogući korištenje alata
- Nepostojanje suid root binarnih datoteka - izlazak iz jail okruženja je moguće ukoliko napadač posjeduje privilegije root korisnika, te se zbog toga preporuča stavljanje ovakvih datoteka u jail okruženje
Sljedeći primjer prikazuje kako uz pomoć chroot staviti Apache u 'zatvor'. Prvi korak je da se kreira novi home direktorij za Apache te se Apache premjesti u tu novu lokaciju.
# mkdir -p /chroot/apache/usr/local # mv /usr/local/apache /chroot/apache/usr/local # ln -s /chroot/apache/usr/local/apache /usr/local/apache # mkdir -p /chroot/apache/var # mv /var/www /chroot/apache/var/ # ln -s /chroot/apache/var/www /var/www
Razlog zbog kojega se Apache kopira u novi direktorij je da se mogu upotrebljavati obje verzije Apache-a, 'slobodna' i 'zatvorena'. Za ispravan rad, Apache-u su potrebne biblioteke, pa se uz pomoć ldd alata može dobiti popis tih biblioteka.
# ldd /chroot/apache/usr/local/apache/bin/httpd libm.so.6 => /lib/tls/libm.so.6 (0x005e7000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00623000) libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x00902000) libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00930000) libdl.so.2 => /lib/libdl.so.2 (0x0060b000) libc.so.6 => /lib/tls/libc.so.6 (0x004ac000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00494000)
Kopije ovih biblioteka potrebno je staviti u 'zatvor'.
# mkdir /chroot/apache/lib # cp /lib/tls/libm.so.6 /chroot/apache/lib # cp /lib/libcrypt.so.1 /chroot/apache/lib # cp /usr/lib/libgdbm.so.2 /chroot/apache/lib # cp /usr/lib/libexpat.so.0 /chroot/apache/lib # cp /lib/libdl.so.2 /chroot/apache/lib # cp /lib/tls/libc.so.6 /chroot/apache/lib # cp /lib/ld-linux.so.2 /chroot/apache/lib
Sljedeći koraci obuhvaćaju način na koji se korisnici, grupe korisnika i datoteke stavljaju u 'zatvor'. Defaultni korisnik httpd ne postoji u jail okruženju, pa i jail mora sadržavati njegove autentifikacijske sadržaje.
# mkdir /chroot/apache/etc # cp /etc/nsswitch.conf /chroot/apache/etc/ # cp /lib/libnss_files.so.2 /chroot/apache/lib
Kako bi Apache funkcionirao u jail okruženju, potrebne su neke dodatne datoteke kako bi se omogućilo raspoznavanje imena domena.
# cp /lib/libnss_dns.so.2 /chroot/apache/lib # cp /etc/hosts /chroot/apache/etc # cp /etc/resolv.conf /chroot/apache/etc
Ovim postupkom Apache se nalazi u jail okruženju.
Sljedeći primjer prikazuje kako konfigurirati PHP za pravilan rad unutar jail okruženja. Prvi korak je normalna instalacija PHP-a, te je zatim potrebno napraviti listu dijeljenih biblioteka te ih kopirati u jail okruženje.
# ldd /chroot/apache/usr/local/apache/libexec/libphp4.so libcrypt.so.1 => /lib/libcrypt.so.1 (0x006ef000) libresolv.so.2 => /lib/libresolv.so.2 (0x00b28000) libm.so.6 => /lib/tls/libm.so.6 (0x00111000) libdl.so.2 => /lib/libdl.so.2 (0x00472000) libnsl.so.1 => /lib/libnsl.so.1 (0x00f67000) libc.so.6 => /lib/tls/libc.so.6 (0x001df000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00494000)
Ukoliko se neke biblioteke nalaze već u jail okruženju, kopiraju se samo one koje nedostaju, u ovom primjeru one su boldane.
# cp /lib/libresolv.so.2 /chroot/apache/lib # cp /lib/libnsl.so.1 /chroot/apache/lib
Ovime je PHP konfiguriran da radi u jail okruženju.
(Izvor: Ristić I. Apache Security)
--Ivankos 17:31, 20. siječnja 2013. (CET)
Sustavi za otkrivanje upada (intrusion detection)
Sustavi za otkrivanje neovlaštenih upada(IDS - Intrusion Detection System) danas predstavljaju jednu od najvažnijih komponenti sigurnosnog sustava. Upravo zbog tog razloga treba voditi računa o izradi sigurnosnih mehanizama koji onemogućavaju neovlašteni pristup računalnim resursima i podacima. No, potpuno sprječavanje neovlaštenog pristupa ponekad nije moguće izvesti. Današnji sigurnosni sustavi pokušavaju pravovremeno detektirati takve napade, te samim time i pravovremeno poduzeti potrebne akcije sprječavanja neovlaštenog pristupa.
Mod Security (mod_sec)
Mod Security, odnosno mod_sec, jedan je od najpoznatijih modula za Apache web poslužitelj. Njegova osnovna namjena je da djeluje kao zaštitni mehanizam za detekciju i prevenciju neovlaštenih aktivnosti koje su usmjerene prema web aplikacijama, kao i na web poslužitelj. Mod Security funkcionira kao integrirani dio web poslužitelja, a neke od njegovih najvažnijih značajki su:
- Filtriranje zahtjeva(Request Filtering) - dolazni zahtjevi se analiziraju prije nego se obrađuju
- Presretanje i pregledavanja svih HTTP/HTTPS zahtjeva
- Detekcija naprednih metoda zaobilaženja IDS sustava(eng. Anti-evasion)
- Provjera POST sadržaja - sav sadržaj koji se prenosi POST metodom se analizira
- Detaljno bilježenje svih zahtjeva(eng. Audit logging)
- Mogućnost kreiranja vlastitih pravila zaštite
Postupak instalacije Mod Security modula razlikuje se ovisno o odabranoj platformi, te o inačici Apache web poslužitelja. mod_sec radi na 1.3.x te na 2.x inačicama Apache web poslužitelja te je kompatibilan sa obje verzije. ModSecurity moguće je dohvatiti u obliku izvornog koda(tar arhiva), ili kao izvršnu datoteku sa adrese http://www.modsecurity.org/download/. Preporučena instalacija ModSecurity je preko izvornog koda, jer time se osigurava instalacija najnovije verzije, kao i eventualne izmjene kod instalacije od strane korisnika, no jednostavnija i bržža opcija je instalacija preko izvršne datoteke. Za instalaciju ModSecurity potrebno je zadovoljiti neke uvjete. Uz pretpostavku kako je Apache web poslužitelj već instaliran, kao i modul mod_unique_id potrebno je instalirati dodatne biblioteke libpcre(biblioteka koja sadrži skup funkcija za regularne izraze), libxml2(biblioteka za XML obradu), libcurl(služi za udaljeno bilježenje logova,remote logging). Također, opcionalna biblioteka koja se preporuča je liblua, koja služi za kreiranje složenijih pravila pomoću Lua skriptnog jezika.
Na Debian i Ubuntu distribucijama instalacija preko izvršne datoteke moguća je preko jedne naredbe:
# apt-get install libapache-mod-security
Pomoću ove naredbe, ModSecurity paket se downloada te instalira, i aktivira se modul u Apache konfiguracijskoj datoteci.
Instalacija na Windows okruženju također je prilično jednostavna, nakon downloada odgovarajućeg paketa, potrebno je kopirati dinamičke biblioteke u mapu modules, zatim je potrebno modificirati konfiguraciju Apache web servera kako bi se aktivirao ModSecurity:
LoadModule security2_module modules/mod_security2.so
Također, kako bi ModSecurity pravilno funkcionirao na Windows okruženju potrebno je aktivirati mod_unique_id, potrebno je u konfiguraciju Apache-a dodati:
LoadModule unique_id_module modules/mod_unique_id.so
Nakon instalacije ModSecurity potrebno ga je pravilno podesiti kako bi on pravilno funkcionirao.
Konfiguracijske direktive
ModSecurity koristi poveći broj direktiva, te će ovdje biti navedene samo neke od njih. Konfiguracija ModSecurity obavlja se preko konfiguracijske datoteke httpd.conf, te ga je potrebno u toj datoteci uključiti kako bi ga Apache mogao koristiti. ModSecurity se uključuje pomoću IfModule direktive:
IfModule mod security.c> #popis pravila ... /IfModule>
Prema početnim postavkama, mnoge opcije ModSecurity su onemogućene, pa ih je potrebno omogućiti i podesiti.
Uključivanje filtriranja prometa obavlja se preko sljedeće direktive:
SecFilterEngine On
Vrijednosti koje SecFilterEngine parametri mogu imati su:
On - analiza svih dolazećih zahtjeva Off - analiza zahtjeva isključena, ne analizira se niti jedan zahtjev DynamicOnly - analiziraju se zahtjevi koji su generirani dinamički za vrijeme izvođenja
Provjera POST sadržaja
Provjera sadržaja koji se prosljeđuje serveru preko POST metode također je isključena prilikom inicijalne instalacije, te ju je potrebno uključiti odgovarajućom direktivom. POST metodom se prosljeđuju vrijednosti koje upisuju korisnici putem web formi, a i na ovaj način se provodi većina napada, pa se svakako preporuča uključiti provjeru POST sadržaja putem direktive:
SecFilterScanPost On
Nasljeđivanje filtera
U Apache web poslužitelju poddirektoriji nasljeđuju pravila filtriranja od nadređenih direktorija, ovakav pristup je vrl čest, no postoje situacije u kojima je potrebno definirati drugačija pravila filtriranja, pa se u tom slučaja nasljeđivanje sigurnosnih postavki iz nadređenog direktorija onemogućava sljedećom direktivom:
<Location /web/direktorij> SecFilterInheritance Off </Location>
Provjera URL kodiranja
Za korištenje specijalnih znakova unutar URL adrese, HTTP dozvoljava prikazivanje znakova u heksadecimalnom obliku, u tom slučaju znakovi se prikazuju u obliku %XY, gdje su X i Y znakovi od A do F u heksadecimalnom obliku. No, često se javlja slučaj da napadači koriste druge znakove kako bi zaobišli sigurnosne mehanizme. Upravo zbog tog razloga, ModSecurity provjerava sve podržane tipove kodiranja kako bi se osiguralo da su svi upiti pravilno kodirani, te se ta provjera ispravnosti kodiranja URL niza uključuje pomoću direktive:
SecFilterCheckURLEncoding On
Za modul ModSecurity postoji opširna i detaljna dokumentacija, koja pokriva sve aspekte ovog vrlo korisnog modula. Na sljedećim linkovima može se pronaći više informacija o samom modulu:
- http://www.modsecurity.org/
- http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/modsecurity-manual.html#N10152
- http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual#ModSecurity.C2.AE_Reference_Manual
- http://www.atomicorp.com/wiki/index.php/Atomic_ModSecurity_Rules
(Izvor: http://www.modsecurity.org/)
--Ivankos 14:34, 20. siječnja 2013. (CET)
OSSEC
OSSEC [6] je besplatan, open source sustav za otkrivanje upada (intrusion detection system). Sustav omogućuje analize logova, provjeru integriteta datoteka, praćenje polica, otkrivanje rootkita, real-time obavještavanje i aktivno odgovaranje.
OSSEC radi na gotovo svim operacijskim sustavima (Linux, MacOS, Solaris, Windows, OpenBSD...).
Prednost mu je što ima centraliziranu arhitekturu koja mu omogućuje praćenje i upravljanje višestrukim sustavima.
Autor OSSEC-a je Daniel B. Cid, a objavio ga je 2004. godine.
Kako OSSEC funkcionira
OSSEC se sastoji od brojnih dijelova. Ima centralni Manager koji prati sve i prima informacije od agenata, sysloga, baze i agentnih uređaja.
Manager koji je glavni dio, pohranjuje sljedeće:
- bazu podataka pomoću koje provjerava integritet datoteka
- logove
- događaje
- unos revizije sustava
Agent je manji program instaliran u sustav koji se želi pratiti. Prikuplja informacije u realnom vremenu te ih prosljeđuje Manageru na analizu.
Moguće je instalirati i sustav bez agenta u slučaju da ga sustav ne podržava, ali i dalje ostaje mogućnost izvođenja nekih operacija.
OSSEC je moguće instalirati unutar virtualne mašine te daje vrlo korisne informacije o svemu što se na njoj događa.
Također, sustav može prihvaćati podatke za analizu s brojnih uređaja kao što su vatrozidi, switchevi, ruteri i slično.
Instalacija i pokretanje
Na Linux sustavima instalacija se provodi u svega par koraka.
Prije instalacije potrebno je skinuti posljednju verziju i po mogućnosti provjeriti sažetak.
# wget http://www.ossec.net/files/ossec-hids-2.6.tar.gz # wget http://www.ossec.net/files/ossec-hids-2.6_checksum.txt # cat ossec-hids-2.6_checksum.txt MD5 (ossec-hids-2.6.tar.gz) = f4140ecf25724b8e6bdcaceaf735138a SHA1 (ossec-hids-2.6.tar.gz) = 258b9a24936e6b61e0478b638e8a3bfd3882d91e # md5sum ossec-hids-2.6.tar.gz MD5 (ossec-hids-2.6.tar.gz) = f4140ecf25724b8e6bdcaceaf735138a # sha1sum ossec-hids-2.6.tar.gz SHA1 (ossec-hids-2.6.tar.gz) = 258b9a24936e6b61e0478b638e8a3bfd3882d91e
Zatim treba napraviti extract paketa i pokrenuti ./install.sh
# tar -zxvf ossec-hids-*.tar.gz (or gunzip -d; tar -xvf) # cd ossec-hids-* # ./install.sh
i naravno pokrenuti OSSEC naredbom
# /var/ossec/bin/ossec-control start
(Izvor: http://www.ossec.net/)
--Jurica 23:13, 19. siječnja 2013. (CET)
Praktični dio >> Sigurna instalacija i konfiguracija Apache Web Servera
U dosadašnjem dijelu rada mogu se vidjeti načini zaštite web poslužitelja od čestih napada. Jedno od važnijih dijelova su preporuke za zaštitu web poslužitelja koje se mogu primijeniti na sve web poslužitelje. Zaštita poslužitelja počinje planiranjem. Nakon toga kreće se s osiguravanjem operacijskog sustava na kojem će se pokretati web poslužitelj. Zatim slijedi zaštita samog poslužitelja, zaštita mrežne infrastrukture pa zaštita sadržaja i sigurna administracija.
Dakle prije same instalacije i konfiguracije poslužitelja potrebno je ranije učiniti nekoliko koraka.
Zbog praktičnosti izvedbe i dostupnih resursa za ovaj dio rada krenut ćemo s pretpostavkom da su ti koraci napravljeni, te počinjemo s korakom zaštite web poslužitelja (Apache poslužitelj), čemu prethodi njegova sigurna instalacija i konfiguracija.
Dakle, ovdje će biti prikazano kako instalirati i konfigurirati web poslužitelj Apache na što je moguće sigurniji način, od samog preuzimanja paketa, instalacije i konfiguracije te instalacije i konfiguracije dodatnih modula kao što su mod_ssl, mod_cband, mod_security, koji su opisani iznad.
Instalacija
Postupak instalacije
Instalacija je prvi korak koji se provodi kako bi naš poslužitelj bio funkcionalan. Naravno prije same instalacije potreban nam je instalacijski paket koji se lako može skinuti s web stranica Apache poslužitelja.
Prvo pitanje na koje se može pojaviti je instalacija poslužitelja iz izvornog koda ili koristeći binarni paket.
Ako se odlučimo za korak u kojem je prvo potrebno kompajlirati izvorni kod, možemo imati potpunu kontrolu iako postupak traje puno duže vrijeme. Instalacija iz binarnih paketa je vrlo često jednostavna, ali tu su česti problem predefinirane postavke.
Ovdje će biti prikazan ovaj prvi način instalacije. Dakle, potrebno je skinuti izvorni kod.
$ wget http://archive.apache.org/dist/httpd/httpd-2.4.3.tar.gz
Ako želimo biti dosljedni u provođenju sigurnosnih mjera, provjerit ćemo integritet paketa kojeg smo skinuli uz pomoć MD5 ili SHA1, ili još složeniji pristup korištenjem kriptografije javnog ključa što se može učiniti uz pomoć PGP-a.
Ako se koristi npr. MD5, potrebno je s Apache web stranice (na ovoj stranici su sve distribucije uključujući i sažetke i ključeve) skinuti MD5 sažetak i usporediti s izračunatim sažetkom paketa kojeg smo skinuli.
Sljedećom naredbom izračunavamo sažetak paketa kojeg smo skinuli prethodno:
$ md5sum httpd-2.4.3.tar.gz 538dccd22dd18466fff3ec7948495417 httpd-2.4.3.tar.gz
Naredba ispod skida i prikazuje sadržaj MD5 sume sa stranice Apache poslužitelja:
$ wget -O - -q http://archive.apache.org/dist/httpd/httpd-2.4.3.tar.gz.md5 538dccd22dd18466fff3ec7948495417 *httpd-2.4.3.tar.gz
Sume naravno moraju biti identične, inače je paket koji smo skinuli ranije kompromitiran.
Ako želimo koristiti PGP, odnosno kompleksniju provjeru, treba učiniti sljedeće:
$ wget http://archive.apache.org/dist/httpd/httpd-2.4.3.tar.gz.asc
Ako ovdje želimo provjeriti potpis, od nas će se tražiti ključ.
$ gpg httpd-2.4.3.tar.gz.asc
Ovdje će se u ovom slučaju pojaviti poruka da nema ključa.
Ključ možemo dobiti uz pomoć naredbe:
$ gpg --keyserver pgpkeys.mit.edu --recv-key DE885DD3
Kad se naredba izvrši, pojavi se poruka da je ključ uspješno importan.
Ako sada provjerimo potpis s naredbom
$ gpg httpd-2.4.3.tar.gz.asc
dobit ćemo željeni rezultat.
Mi smo za našu potrebu iskoristili MD5 funkciju za provjeru integriteta preuzetog paketa.
Nakon ovog koraka možemo biti sigurni da imamo dobar paket Apache poslužitelja.
Dodatno je moguće provjeriti na web stranicama poslužitelja postoje li kakvi dodatni patchevi.
Sljedeće što nas čeka je odabir između stvaranja jedinstvene statične biblioteke ili kompajliranje koristeći dinamičko učitavanje modula. Danas razlika između ovih pristupa gotovo da ne dolazi do izražaja.
Prije nego pokrenemo instalaciju, potrebno je provjeriti da je Apache svjestan okoline.
Naravno potrebno je napraviti extract skinutog paketa
$ gzip -d httpd-2.4.3.tar.gz $ tar xvf httpd-2.4.3.tar $ cd httpd-2.4.3
te obaviti provjeru sljedećom naredbom
$ ./configure --prefix=/PREFIX
PREFIX = filesystem putanja unutar koje bi server trebao biti instaliran, default vrijednost je najčešće /usr/local/apache
Configure skripta istraži sustav i kreira Makefile, te je moguće pokrenuti proces (mogu se javiti problemi s bibliotekom APR koju je potrebno dodatno instalirati, a upute se mogu pronaći u readme.txt)
$ make # make install $ vi PREFIX/conf/httpd.conf $ PREFIX/bin/apachectl -k start # /usr/local/apache/bin/apachectl start
Ove naredbe instaliraju Apache te ga pokreću. Nakon toga dobro je konfigurirati operacijski sustav tako da se Apache pokrene prilikom pokretanja sustava.
Za moguće probleme ili dodatne upute najbolje je pogledati ovdje.
Provjera instalacije
Jednostavno, otvorimo naš web preglednik i u URL ukucamo localhost ili 127.0.0.1. Ako se dobije poruka da je Apache uspješno instaliran onda je sve prošlo u redu.
Kako bi se u to uvjerili, mi smo učinili isto te dobili sljedeće:
Također možemo pogledati koji Apache procesi su pokrenuti
$ ps -Ao user,pid,ppid,cmd | grep httpd // ispis
Instalacija modula
Zajedno s Apache poslužiteljem instalira se tek manji broj modula. Kako bi osigurali naš poslužitelj što je više moguće, instalirat ćemo module koji su spomenuti na početku. Ovdje također treba biti oprezan, jer nije dobro instaliravati module koji nam nisu potrebni.
Vrlo lako možemo provjeriti koji moduli su instalirani naredbom
$ ./configure --help
Modul koji pored sebe ima oznaku yes aktiviran je po defaultu.
Koristeći naredbe --enable-module i --disable-module određujemo koji moduli će biti aktivirani, a koji ne.
$ ./configure \ > --prefix=/usr/local/apache \ > --enable-module=rewrite \ > --enable-module=so \ > --disable-module=imap \ > --disable-module=userdir
Za pogled na cijelu listu predefinirano aktiviranih modula možemo ukucati naredbu
$ ./httpd -l
Ako želimo promijeniti default listu modula treba nam sljedeća naredba:
$ ./configure \ > --prefix=/usr/local/apache \ > --enable-rewrite \ > --enable-so \ > --disable-imap \ > --disable-userdir
Kao što je rečeno, kako bi osigurali dodatno Apache instalirat ćemo ove module: mod_cband, mod_ssl i mod_security.
Kako instalirati mod_cband već je ranije opisano.
Prvo je potrebno skinuti modul naredbom:
$ wget http://dembol.org/downloads/cband/mod-cband-0.9.7.5.tgz
i raspakirati naredbom
$ tar -xzf mod-cband-0.9.7.5.tgz
Nakon raspakiravanja pokreću se sljedeće naredbe:
$ cd mod-cband-0.9.7.5 $ ./configure $ make $ make install
Kako bi modul mogao funkcionirati potrebno je ponovno pokrenuti Apache poslužitelj.
Naravno, da bi ovim modulom mogli štiti poslužitelj od npr. DoS napada potrebno je u datoteci httpd.conf podesiti određene parametre o čemu se više može pročitati u dijelu Konfiguracija.
Što se tiče ssl modula, on je u većini slučaja instaliran po defaultu. Ipak, vrlo lako ga se može instalirati pomoću sljedeće naredbe:
# sudo a2enmod ssl
Naravno, nakon toga potrebno je ponovno pokrenuti Apache, a kako bi se uvjerili da je modul instaliran i da radi može se iskoristiti sljedeće:
$ apache2ctl -t -D DUMP_MODULES | grep ssl
Naredba bi trebala vratiti sljedeće:
# ssl_module (shared) #(The module is loaded.)
Mod Security koji je opisan ranije vrlo je koristan alat za Apache poslužitelj (i ostale). Modul predstavlja sustav za otkrivanje upada što je vrlo važno u zaštiti poslužitelja.
Ovaj modul se vrlo lako može instalirati na svaki Linux sustav, pa tako i ovaj koji mi koristimo, Ubuntu 12.4.
Prije same instalacije modula potrebno je bilo instalirati neke biblioteke:
$ sudo apt-get install libxml2 libxml2-dev libxml2-utils $ sudo apt-get install libaprutil1 libaprutil1-dev
Sam Security mod instaliramo uz pomoć ove naredbe:
$ sudo apt-get install libapache-mod-security
Ono što je također dobro napraviti je uključiti OWASP Core Rule Set za Mod Security, te u njega uključiti neke postavke koje OWASP preporučuje, a nalaze se u datoteci modsecurity_crs_10_setup.conf.example.
To se može učiniti na sljedeći način:
$ cd /tmp $ sudo wget http://downloads.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.5.tar.gz $ sudo tar -zxvf modsecurity-crs_2.2.5.tar.gz $ sudo cp -R modsecurity-crs_2.2.5/* /etc/modsecurity/ $ sudo rm modsecurity-crs_2.2.5.tar.gz $ sudo rm -R modsecurity-crs_2.2.5 $ sudo mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf
Za kraj je također dobro provjeriti uspješnost instalacije
$ sudo a2enmod headers $ sudo a2enmod mod-security
i ponovno pokrenuti Apache.
Uz ovaj modul obično je potrebno instalirati i mod_evasive. Ovo je vrlo koristan modul koji osigurava potrebne akcije u slučaju DoS, DDoS ili Brute Force napada.
$ sudo apt-get install libapache2-mod-evasive
Osim toga potrebno je kreirati i njegovu konfiguracijsku datoteku, provjeriti instalaciju i ponovno pokrenuti Apache.
$ sudo vi /etc/apache2/mods-available/mod-evasive.conf $ sudo a2enmod mod-evasive
Za kraj instalacije ovdje je priložen jedan video u kojem je prikazano kako je na vrlo lagan i brz način moguće konfigurirati neke osnovne postavke Apache poslužitelja: video.
Sama instalacija kao u slučaju bilo kojeg drugog modula nije dovoljna. Potrebno je naravno u konfiguracijskim datotekama podesiti one elemente koji su nam potrebni.
(Izvori: apache.org; Ristić I. Apache Security)
Konfiguracija
Nakon što je naša instalacija u potpunosti gotova, potrebno je učiniti Apache poslužitelj još sigurnijim.
Konfiguracija se provodi u datoteci koja ima nastavak .conf (obično je to httpd.conf datoteka).
U našem slučaju ova datoteka se nalazi na sljedećoj putanji: /usr/local/apache2/conf/httpd.conf
Ako pogledamo malo bolje tu datoteku, vidimo da je prepuna raznih konfiguracija, a ponajviše ima komentara. Datoteka je nepregledna na prvi pogled i predefinirano u sebi sadrži puno stvari koje nam zapravo ni ne trebaju.
Stoga, dobra praksa je da datoteku ispraznimo i krenemo od početka, tj. hrabro od prazne konfiguracijske datoteke.
Najbolje je držati tu datoteku urednom, kratkom i jasnom.
Za početak u httpd.conf potrebno je upisati nekoliko direktiva opće namjene:
# lokacija datoteka web servera ServerRoot /usr/local/apache # lokacija direktorija stabla web servera DocumentRoot /var/www/htdocs # put do PID(Process ID) datoteke u kojoj je pohranjen PID glavnog Apache procesa PidFile /var/www/logs/httpd.pid # port na kojem osluškuje Listen 80 # onemogućavanje pretvorbe klijentskih IP adresu u imena HostNameLookups Off
Postavljanje korisničkog računa na serveru
Nakon instalacije, Apache je pokrenut kao korisnik nobody. Ovakav korisnički račun je uobičajen na Unix operacijskim sustavima, no dobra praksa je kreirati odvojeni korisnički račun za svaki pojedinačni zadatak. Ovaj način rada je koristan, ukoliko dođe do napada na poslužitelj u kojem napadač preuzima privilegije i prava određenog korisničkog računa.
Najčešće korišteno korisničko ime je httpd, ali se koristi i apache. Za kreiranje računa potrebno je izvršiti sljedeće naredbe(kao root):
#groupadd httpd # useradd httpd -g httpd -d /dev/null -s /sbin/nologin
Pomoću ovih naredbi kreira se grupa i korisnički račun, te se računu dodjeljuje home direktorij /dev/null i shell /sbin/nologin(čime se onemogućava login za račun). Na kraju je potrebno dodati sljedeće linije u httpd.conf:
User httpd Group httpd
Postavljanje dozvola za izvršavanje Apache binary datoteka
Apache se izvršava preko porta 80, te on mora biti pokrenut kao root. Ukoliko se dopusti bilo kojem drugom korisničkom računu da mijenja httpd binary datoteku, taj račun bi mogao dobiti dozvole za izvršavanje bilo koje datoteke kao root. Iz ovoga se može uočiti koliki sigurnosni rizik ovaj propust predstavlja, ukoliko ga napadač iskoristi. Zbog gore navedenog razloga, root se mora konfigurirati na način da samo on ima dozvolu pisanja, odnosno write:
# chown -R root:root /usr/local/apache # find /usr/local/apache -type d | xargs chmod 755 # find /usr/local/apache -type f | xargs chmod 644
Podešavanje zadanih postavki
Ukoliko dođe do greške koja može slučajno otkriti važne sistemske datoteke, potrebno je zabraniti pristup cjelokupnom datotečnom sustavu i nakon toga dopustiti pristup root dokumentu na način da se u httpd.conf datoteku ubace sljedeće direktive:
<Directory /> Order Deny,Allow Deny from all </Directory> <Directory /var/www/htdocs> Order Allow,Deny Allow from all </Directory>
Options direktiva
Gore spomenuti način zaštite ne štiti posve od netočno ili zlonamjerno postavljenih simboličnih linkova izvan direktorija var/www/htdocs. Korisnici sustav mogli bi kreirati simbolične linkove do resura čiji oni nisu vlasnici. Kontrola simboličnih linkova i druge kontrole pristupa datotekama kontroliraju se preko Options directive unutar <Directive> direktive. Options direktiva može imati jednu ili više sljedećih vrijednosti:
All - prikaz svih opcija None - niti jedna opcija nije omogućena ExecCGI - omogućava izvršavanje CGI skripti FollowSymLinks - omogućava pristup simboličnim linkovima Includes - dozvoljava server-side uključenja IncludesNOEXEC - dozvoljava SSI,ali ne dozvoljava exec naredbu koja se koristi za izvršavanje vanjskih skripti Indexes - dozvoljava serveru da generira listu datoteka u direktoriju kada zadana indeksna datoteka nedostaje MultiViews - dozvoljava pregovaranje o sadržaju, content negotiation SymLinksIfOwnerMatch - dozvoljava pristup simboličnim linkovima ako je vlasnik linka isti kao i vlasnik resursa na koji link pokazuje
Direktiva Options -FollowSymlinks onemogućuje upotrebu simboličnih linkova u Apache-u. Znak - ispred imena opcije pokazuje Apache-u da zadrži postojeću konfiguraciju i onemogući navedenu opciju. Isto tako, znak + znači dodavanje opcije u konfiguraciju.
AllowOveride direktiva
Prema zadanim postavkama dozvoljava pojedinim dijelovima konfiguracijskih podataka da budu smješteni unutar stabla direktorija web servera, u datotekama koje se nazivaju .htaccess. Konfiguracijski podaci koji se nalaze unutar te datoteke mogu nadjačati podatke unutar httpd.conf datoteke. Ovakav način može znatno usporiti rad servera, te može omogućiti bilo kome tko ima kontrolu nad stablom direktorija, limitiranu kontrolu nad serverom. Ova značajka se kontrolira putem AllowOverride direktive, koja se također pojavljuje unutar <Directive> direktive, koja specificira direktorij za koji se opcija odnosi. AllowOverride directiva podržava sljedeće opcije:
AuthConfig - omogućava korištenje(unutar .htacces datoteke) autorizacijskih direktiva FileInfo - omogućava korištenje direktiva vezanih uz kontroliranje tipova dokumenata Indexes - omogućava korištenje direktiva vezanih uz kontroliranje indeksiranja direktorija Limit - omogućava korištenje direktiva vezanih uz kontroliranje pristupa host-u Options - omogućava korištenje direktiva vezanih uz kontroliranje specifičnih funkcija direktorija(Options, XbitHack direktive) All - dozvoljava sve opcije None - ignorira .htacces konfiguracijsku datoteku
Za zadanu konfiguraciju odabrana je None opcija, pa prema tome <Directory> direktive su:
<Directory /> Order Deny,Allow Deny from all Options None AllowOverride None </Directory> <Directory /var/www/htdocs> Order Allow,Deny Allow from all </Directory>
Omogućavanje CGI skripti
Omogućavanje CGI skripta se preporuča samo ukoliko su one nužne. U tom slučaju, kao dobra praksa, ističe se grupiranje svih skripti u jedan direktorij koji najčešće nosi naziv cgi-bin. Na taj način možemo znati koje skripte se izvršavaju na serveru. Kako bi se dozvolilo izvršavanje CGI skripti u nekom direktoriju, u ovom slučaju /var/www/cgi-bin, potrebno je u httpd.conf dodati:
<Directory /var/www/cgi-bin> Options ExecCGI SetHandler cgi-script </Directory>
Bilježenje aktivnosti(logging)
Vrlo važan čimbenik zaštite je zapisivanje svih aktivnosti na serveru u dnevnik. Postoje dvije vrste dnevnika, acces log, koji služi za zapisivanje svih zahtjeva prema serveru. Pomoću direktive LogFormat, definira se format zapisa u dnevnik, a zatim pomoću CustomLog direktive kreira se access dnevnik u tom formatu:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\ "" combined CustomLog /var/www/logs/access_log combined
Sljedeći dnevnik je error log, te se u njega bilježe sve sistemske aktivnosti, poput kada se web server pokrenuo i zaustavio, kao i sve eventualne pogreške nastale tijekom obrade zahtjeva. Primjer česte greške je greška koja se generira kada klijent zatraži neki nepostojeći resurs, tada HTTP generira pogrešku pod kodom 404, te se u tom slučaju bilježi aktivnost u access log te greška u error log. Za definiranje error log-a potrebne su direktive LogLevel i ErrorLog, gdje ErrorLog kreira stvarni dnevnik:
LogLevel info ErrorLog /var/www/logs/error_log
Postavljanje konfiguracijskih limita na serveru
Slabo ili nepravilno podešeni limiti na serveru mogu server učiniti lakom metom za različite napade. Sljedeća konfiguracijska direktiva prikazuje zadanu(defaultnu) konfiguraciju vrijednosti Apache-a te se definira koliko dugo server čeka na sporog klijenta:
# čekaj do 300 sekundi sporije klijente TimeOut 300 # dozvoli ponovnu upotrebu veze između zahtjeva KeepAlive On # dozvoli maksimalno 100 zahtjeva po konekciji MaxKeepAliveRequests 100 # čekaj do 15 sekundi do sljedećeg # zahtjeva na otvorenu vezu KeepAliveTimeout 15
Defaultna, zadana vrijednost za timeout konekcije, odnosno prestanak konekcije je 300 sekundi, što je dosta dugo čekanje. Timeout se može postaviti na 60 sekundi i time se znatno povećava tolerancija prema DoS napadima. Sljedeće direktive nameću limite na različite aspekte jednog HTTP zahtjeva:
# ne nameće se nikakav limit na zahtjev LimitRequestBody 0 # dozvoli do 100 zaglavlja u zahtjevu LimitRequestFields 100 # svako zaglavlje može biti dužine do 8190 bitova LimitRequestFieldsize 8190 # prva linija zahtjeva može biti # dužine do 8190 bitova LimitRequestLine 8190 # limitiraj XML zahtjev do milijun bitova(Apache 2.x) LimitXMLRequestBody 1000000
Sprječavanje curenja informacija(information leaks)
Svaka informacija o serveru koja je na bilo koji način dostupna, omogućava napadačima izvšavanje različitih napada. Primjer odavanje informacija javlja se kod instalacijskog procesa, gdje se automatski stavlja email adresa korisnika koji kompilira Apache u konfiguracijski datoteku. Na taj način korisnički račun se otkriva javnosti, što predstavlja rizik. Sljedeća direktiva služi za zamjenu generirane adresa od strane Apache-a sa generičkom adresom:
ServerAdmin webmaster@apachesecurity.net
Prema početnim postavkama, email adresa definirana ovom direktivom pojavljuje se na stranicama generiranim od strane servera, ukoliko to ne želimo, ova opcija se isključuje pomoću direktive:
ServerSignature Off
HTTP protokol definira povratno polje zaglavlja pod nazivom server, čija namjena je identifikacija softvera koji odgovara na zahtjev. Prema početnim postavkama, Apache ovo polje popunjava sa imenom, verzijom, te imenima i verzijama svih modula. Primjer kako to izgleda na testnom zahtjevu:
$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 19 Mar 2004 22:05:35 GMT Server: Apache/1.3.29 (Unix) Content-Location: index.html.en Vary: negotiate,accept-language,accept-charset TCN: choice Last-Modified: Fri, 04 May 2001 00:00:38 GMT ETag: "4002c7-5b0-3af1f126;405a21d7" Accept-Ranges: bytes Content-Length: 1456 Connection: close Content-Type: text/html Content-Language: en Expires: Fri, 19 Mar 2004 22:05:35 GMT
Ovo polje zaglavlja otkriva neke potencijalno korisne informacije napadačima, pa se pomoću sljedeće direktive dozvoljava samo prikaz imena servera:
ServerTokens ProductOnly
Još jedan problem koji se javlja je automatsko indeksiranje direktorija, a on može prouzročiti nenamjerno otkrivanje različitih datoteka, pa se preporuča isključivanje automatskog indeksiranja, te konfiguriranje Apache-a na način da odbija sve zahtjeve koji odgovaraju nizu regularnih izraza. Sljedeća direktiva služi za traženje različitih datotečnih ekstenzija koje nebi smjele biti prisutne na web serveru:
<FilesMatch "(^\.ht|~$|\.bak$|\.BAK$)"> Order Allow,Deny Deny from all </FilesMatch>
FilesMatch direktiva gleda samo posljednji dio cijelog imena datoteke,odnosno ekstenziju, pa prema tome FilesMatch konfiguracijske specifikacije se ne mogu primijeniti na imena direktorija. Kako bi se u cijelosti ograničio pristup određenom direktoriju, na primjer pristup CVS administrativnim datotekama, to se može na ovaj način:
<DirectoryMatch /CVS/> Order Allow,Deny Deny from all </DirectoryMatch>
(Izvori: apache.org; Ristić I. Apache Security)
--Jurica 21:49, 20. siječnja 2013. (CET) | --Ivankos 21:53, 20. siječnja 2013. (CET)
Literatura
1.Ristić I.(2005). Apache Security
2.Gelbmann M.(2012). Most popular web servers by country, dostupno na http://w3techs.com/blog/entry/most_popular_web_servers_by_country
3.W3Techs.com(2012). Usage of web servers for websites, dostupno na http://w3techs.com/technologies/overview/web_server/all
4.Kargl F., Maier J., Weber M.(2001). Protecting Web Servers from Distributed Denial of Service Attacks, dostupno na http://www.princeton.edu/~rblee/ELE572Papers/p514-kargl.pdf
5.TechiWarehouse(2004). Types of Attacks on Web Servers, dostupno na http://www.techiwarehouse.com/engine/21b0d480/Types-of-Attacks-on-Web-Servers
6.Oryano S.P.(2009). Securing a Web server, dostupno na http://www.ibm.com/developerworks/web/library/wa-secureweb/
7.Tracy M., Jansen W., Scarfone K., Winograd T.(2007). Guidelines on Securing Public Web Servers, dostupno na http://csrc.nist.gov/publications/nistpubs/800-44-ver2/SP800-44v2.pdf
8.Trustwave Holdings Inc., ModSecurity® Reference Manual, dostupno na http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual#ModSecurity.C2.AE_Reference_Manual
9.Carnet,Mod security modul, dostupno na http://www.cis.hr/www.edicija/LinkedDocuments/CCERT-PUBDOC-2004-02-63.pdf
10.Carnet(2008). Usporedba sigurnosnih rizika poslužitelja Apache i IIS, dostupno na http://www.cert.hr/sites/default/files/CCERT-PUBDOC-2008-09-239.pdf
11.ModSecurity Handbook, dostupno na https://www.feistyduck.com/books/modsecurity-handbook/
12.http://en.wikipedia.org/wiki/Web_application_security
13.https://www.owasp.org/index.php/Category:Attack
14.Phishing and pharming Information Site, dostupno na http://www.pharming-phishing.com/
15.What is TLS/SSL?, dostupno na http://technet.microsoft.com/en-us/library/cc784450%28v=ws.10%29.aspx
16.Security tips, dostupno na http://httpd.apache.org/docs/2.2/misc/security_tips.html
17.Kargl, Maier, Weber. Protecting Web Servers from Distributed Denial of Service Attacks. Princeton. Dostupno na http://www.princeton.edu/~rblee/ELE572Papers/p514-kargl.pdf
18.Guidelines on Securing Public Web Servers. NIST. Dostupno na http://csrc.nist.gov/publications/nistpubs/800-44-ver2/SP800-44v2.pdf
19.Apache Module Index. Dostupno na http://httpd.apache.org/docs/2.0/mod/
20.OSSEC. Dostupno na http://www.ossec.net/
Zaduženja članova tima
Ovdje je ukratko navedeno što je koji član tima radio, iako je ispod svakog poglavlja to naznačeno.
Ivan Kos Grabar
- Uvod
- Apache web poslužitelj
- Moduli za Apache
- mod_cband
- mod_ssl
- mod_filter
- mod_ratelimit
- mod_limits
- mod_suexec
- mod_log_config
- mod_log_forensic
- Ostali mehanizmi zaštite
- Apache u 'zatvoru'
- Sustavi za otkrivanje upada
- Mod Security(mod_sec)
- Zajednički rad na praktičnom dijelu
Jurica Hlevnjak
- Napadi na web poslužitelje
- Ostali problemi od kojih se potrebno zaštititi
- Preporuke za zaštitu web poslužitelja (NIST)
- Apache sigurnosni principi
- Savjeti za sigurniji Apache
- Moduli za Apache
- mod_access
- mod_auth
- mod_chroot
- OSSEC
- Zajednički rad na praktičnom dijelu
siječanj 2013. | Ivan Kos Grabar | Jurica Hlevnjak