UVOD DO POCITACOVEJ BEZPECNOSTI

19.08.2002 18:15 | blackhole

V tomto dokumente sa budem snazit naznacit jemny uvod do pocitacovej, hlavne linuxovej bezpecnosti. Nebudem sa venovat iba roznym workaroundom ako zvysit bezpecnost vasich linuxovych boxov, ale zlahka nacrtnem aj temu bezpecnostnych politik. article urcite nezachytil vsetko, kedze tema pocitacovej bezpecnosti je velmi rozsiahla a pravdepodobne obsahuje aj dost nepresnosti, neuplnosti.

Bezpecnostna politika
Kazda organizacia by mala mat vypracovanu bezpecnostnu politiku, dobrym zakladom moze byt www.faqs.org/rfcs/rfc2196.html . Pred tym nez sa budete chystat zabezpecit vas system mali by ste si ujasnit proti comu sa ho chystate zabezpecit, realne ryzika, ako velmi zranitelny vas system uz je, kto je zodpovedny za bezpecnost, hodnotu systemu a ostatne aspekty.

RIZIKO - je moznost, ze sa utocnikovi podari ziskat pristup na vas pocitac. Ak na pocitaci prevadzkujete niektore nebezpecne sluzby napriklad tftp, alebo pouzivate .rhosts riskujete kompromitaciu celeho systemu.

HROZBA - prichadza od niekoho kto ma zaujem ziskat pristup do vasho pocitaca, resp. do vasej siete. Su rozne druhy utocnikov:

Curious - pokusa sa zistit nieco o systeme, zabezpecit pristup k datam ...
Malicious - chce system znicit, zmenit stranky, alebo inym sposobom vas prinutit aby ste stracali cas a peniaze obnovenim toho co on znicil
High-Profile - chce vyuzit vas system na ziskanie popularity alebo uznania
Competition - mysli si ze mate nieco z coho by mohol profitovat
Leapfrogger - typ utocnika ktoreho jedinym cielom je vyuzitie pocitaca na ziskanie
pristupu do dalsich systemov

ZRANITELNOST - definuje ako dobre je vas pocitac chraneny pred neopravnenym pristupom nanho z inej siete

Tvorba bezpecnostnej politiky
Bezpecnostnu strategiu by mali dodrziavat pouzivatelia a mala by im zaistit bezpecnost a sukromie. Vseobcne akceptovatelna bezpecnostna politika by mala zacinat frazou \"To co nie je povolene, je zakazane\". To znamena, ze pokial nepovolite pouzivatelovi pristup k nejakej sluzbe, uzivatel nesmie mat moznost danu sluzbu vyuzivat.

Some usefull links:
rfc1244
rfc1281
ftp://coast.cs.purdue.edu/pub/doc/policy

Rozne druhy bezpecnosti
Fyzicka bezpecnost
- zamky
- hesla v biose
- hesla v boot manageri
- pouzivanie xlock a vlock

Lokalna bezpecnost
Tento druh bezpecnosti byva casto nepravom podcenovany. Nepravom preto, lebo drviva vacsina uspesnych utokov na firemne siete pochadza od nespokojnych zamestnancov. Je dobre drzat sa niektorych zasad:

- pri zriadovani uzivatelskych uctov davat uzivatelom co najmensie prava, nevyhnutne potrebne na ich pracu
- mazanie starych a nepouzivanych uctov
- alias rm=\"rm -i\"
- pouzivanie roota len v tych najnevyhnutnejsich pripadoch
- root nesmie mat v premennej PATH . a ani ziadne writable adresare
- pouzivanie r-utilities(rlogin, rsh) pod rootom je velmi riskantne
- subor /etc/securetty obsahuje zoznam terminalov, z ktorych sa moze root nalogovat. Mal by obsahovat len lokalne virtualne konzoly (vtys). Pri potrebe vzdialeneho pristupu superuzivatela je tu moznost lognut sa cez ssh ako normalny user a su root.
- nastroj sudo umoznuje definovat pouzivatelov, ktori budu mat pristup len k obmedzenym prikazom vykonavanym ako root (vsetko sa loguje)
- pouzivanie volby nosuid v subore /etc/fstab na particie, ktore su zapisovatelne inymi uzivatelmi ako je root
- urcenie filesystem limitov cez /etc/pam.d/limits.conf (cat /dev/zero > subor)
- mat prehlad o vsetkych SUID/SGID suboroch ( find / -type f \\( -perm -04000 -o -perm -02000 \\) ), world writable suboroch (find / -perm -2 ! -type l -ls), nikomu nepatriacich suboroch (find / -nouser -o -nogroup -print), .rhosts suboroch (find /home -name .rhosts -print).
- spravne nastavenie umask v /etc/profile
- pouzivanie integrity checkerov(programy, ktore kontroluju ci neboli zmenene dolezite binarne, resp. konfiguracne subory, napr. tripwire.
- skontrolovanie kazdeho balika, ktory sa chystame nainstalovat (md5 checksum)
- aplikovanie bezpecnostnych patchov do kernela (openwall, grsecurity)

Sietova bezpecnost
Nebudem sa tu rozpisovat o firewalloch, co by bolo nad ramec tohto dokumentu. Spomeniem len tcp_wrapper a portsentry.

Balik tcp_ wrapper umoznuje centralizovat zakladnu kontrolu pristupu k sietovym sluzbam do dvoch konfiguracnych suborov - hosts.allow a hosts.deny. Zakladom tcp_wrapperu je knznica libwrap, pomocou ktorej mozme kontrolovat pristup k jednotlivym sietovym sluzbam na zaklade ip adries. Takze, tcp_wrapper pracuje s dvoma konfiguracnymi subormi /etc/hosts.allow, ktory obsahuje zoznam adries ktore maju k danej sluzbe pristup a /etc/hosts.deny obsahuje adresy, ktore pristup povoleny nemaju. Vela aplikacii uz tcp_wrapper podporuje, alebo je mozne ich spustat cez superserver xinetd, ktory tiez tcp_wrapper podporuje. Pred tym ako aplikacia akceptuje prichadzajuce spojenie preda ip-cku stroja, z ktoreho request vysiel kniznici libwrap a ta potom na zaklade konfiguracnych suborov rozhodne o
akceptovani alebo neakceptovani spojenia.

Utilita portsentry poskytuje aktivnu ochranu pred skenovanim portov. Rozlisujeme dva zakladne druhy portscannov, v zavislosti od toho cez aky protokol prebiehaju: tcp(RFC 793) a udp(RFC 768). Pricom tcp protokol je spolahlivejsi, pretoze zaistuje ze sa v ramci spojenia v pripade chyby data nestratia, cize zarucuje ze vsetky odoslane data budu druhou stranou prijate, co sa o udp protokole povedat neda. Kazdy tcp datagram moze mat nastavenych niekolko priznakov, pricom z nasho pohladu su najzaujimavejsie:

SYN - pouziva sa pri navazovani tcp spojenia
FIN - pouziva sa pri ukonceni tcp spojenia
ACK - paket obsahuje potvrdenie sekvencie
RST - ziadost o reset spojenia

Asi najznamejsim nastrojom na skenovanie portov je utilita nmap, ktora umoznuje prevadzat tieto druhy skenov:

- connect - najjednoduchsia metoda tcp skenov, kedy sa program pokusa naviazat plnohodnote spojenie pomocou volania jadra connect()
- syn stealth - klient odosle paket s nastavenym syn priznakom. Ak je port otvoreny,
server odosle syn+ack paket, v opacnom pripade posle paket s nastavenym rst priznakom.
- fin - podla RFC by mal system po obdrzani fin paketu v pripade ze je port zatvoreny reagovat odoslanim rst paketu a v pripade ze je port otvoreny ho ignorovat. Windows vsak paket ignoruje v oboch pripadoch, cize sa tento druh skenovania portov neda pouzit na microsoftacke masiny.
- xmas - priznaky su FIN, URG a PUSH
- syn/fin - paket ma nastavene syn a fin priznaky
- null - paket ma vynulovane vsetky priznaky
- ack - posielaju sa pakety s nastavenym priznakom ack a nahodne zvolenym cislom sekvencie.

Normalne obdrzime v pripade ze je port otvoreny aj v pripade ze je zatvoreny paket s rst priznakom, ak vsak neobdrzime odpoved ziadnu, pripadne icmp spravu o nedostupnosti, znamena to, ze je port filtrovany firewallom.

- udp - posielaju sa udp pakety, pokial cielovy port nie je otvoreny obdrzime icmp spravu o nedostupnosti. Mnozstvo tychto icmp sprav zaslanych behom urciteho casoveho useku byva spravidla limitovane.

Portsentry pracuje tak, ze analyzuje vsetky prichadzajuce pakety a ak zisti pokus o skenovanie portov reaguje podla konfiguracie. Moze to byt bud zablokovanim prichadzajuceho spojenia pomocou firewallu, upravou routovacej tabulky jadra, upravou konfiguracnych suborov tcp_wrapperu. Vsetky pokusy o scan su zaznamenavane do systemoveho logu. Portsentry poskytuje taktiez moznost aktivnej obrany, kedy je v pripade detekovania pokusu o port scan spusteny externy prikaz (shut him down ;).

Administracia
Takze tu uz len velmi strucne spomeniem dalsie ulohy spravcov systemov. Jednou z najzanedbavanejsich uloh spravcov systemov je pravidelne zalohovane. Zalohovanie suborov sa musi robit pravidelne. Vyber zalohovacieho media zavisi od objemu zalohovanych dat a financnych moznosti organizacie. Zalohovat by sa okrem ineho mali aj systemove logy, standartne umiestnene
v /var/log. Nastavenia syslogd sa robia v subore /etc/syslog.conf. Dolezite je taktiez spravne nastavit rotovanie logov. Dalsou velmi dolezitou ulohou je updatovanie programov a aplikovanie bezpecnostnych patchov.

Co robit po kompromitacii nasho systemu
Popisem tu co by mal admin spravit len z velmi vseobecneho hladiska, pretoze realne situacie byvaju velakrat o mnoho zlozitejsie a treba zohladnit aj mnoho inych faktorov. V prvom rade ak je to mozne tak dany system odpojit zo siete, ak to nie je mozne pokusit sa znemozit utocnikovi dalsi pristup do pocitaca, co nemusi byt jednoducha uloha. Ak sa to podarilo dalsou dolezitou vecou je zaplatanie bezpecnostnej diery(ak ju vieme urcit) bud instalaciou novsej verzie programu alebo opatchovanim. Dalsou vecou by mal byt odhad skod, cize co vsetko bolo skompromitovane a nasledny pokus o vystopovanie utocnika. Ak sa nam ho podari vystopovat mali by sme to nahlasit jeho providerovi, policii, ktori by mali dalej konat, co je ale v nasich podmienkach asi dost tazko predstavitelne.

Resources
http://metalab.unc.edu/mdw/linux.html
http://www.linuxzone.cz
ftp://ftp.porcupine.org/pub/security/index.html
http://www.psionic.com/products/index.html
http://www.insecure.org/nmap/
RFC 768, 791, 793soulfly