Bezpečnosť v Unixe

Bezpečnosť v Unixe znamená spôsoby zabezpečenia unixového alebo Unix-like operačného systému. Bezpečné prostredie je dosiahnuté nielen návrhom dizajnu týchto operačných systémov, ale aj pomocou pozorných užívateľských a administrátorských praktík.

Koncept dizajnu

Prístupové práva 
Jedným zo základných znakov v týchto systémoch je systém prístupových práv. Všetky súbory v Unix-ových súborových systémoch môžu dovoľovať rôzny prístup k súborom na základe určených prístupových práv.

Prístupové práva pre súbor sú zvyčajne nastavované pomocou príkazu chmod a zobrazované cez príkaz ls. Napríklad:
 -r-xr-xr-x  1 root  wheel  745720 Sep  8  2002 /bin/sh

Unix-ové práva povoľujú prístup k súboru rôznym používateľom. Rôzne skupiny používateľov majú rôzne prístupové práva k súboru.

Zložitejšie Unix-ové súborové systémy obsahujú Access Control List (zoznam kontroly prístupu), koncept, ktorý umožňuje udeľovať práva viacerým užívateľom alebo skupinám. Access Control List môže byť použitý na udelenie práv ďalším jednotlivým užívateľom alebo skupinám. Napríklad:
 /pvr [u::rwx,g::r-x,o::r-x/u::rwx,u:peter:rwx,g::r-x,m::rwx,o::r-x]

V tomto príklade, ktorý pochádza z príkazu chacl v Linux-ových operačných systémoch, užívateľovi peter sú udelené zapisovacie práva na zložku /pvr.

Skupiny používateľov 
Užívatelia pod Unix-ovými operačnými systémami často patria do skupín so špecifickými prístupovými právami. Toto umožňuje zoskupovať užívateľov podľa toho, aké veľké práva majú mať v systéme. Veľa Unix-ových implementácií pridáva ďalšiu úroveň ochrany vyžadovaním členstva užívateľa vowheel user privileges group, ak chcú spúšťať príkaz su.

Problémy 
Väčšina Unix-ových a Unix-like systémov má účet alebo skupinu, ktorá umožňuje užívateľovi kompletnú kontrolu nad systémom. Takýto účet sa nazýva root. Ak prístup k takémuto účtu získa nechcený používateľ, znamená to úplný prienik do systému. Účet root je ale nevyhnutný pre administrovanie systému, a pre spomenuté bezpečnostné dôvody je málokedy používaný pre každodenné potreby (častejšie sa používa program sudo). Takto sa používanie tohto účtu dá precíznejšie monitorovať.

Kto pozná Supermana, môže si predstaviť ako by malo vyzerať používanie root-a cez nasledujúcu analógiu:

Používanie root účtu je ako byť Supermanom, pričom administrátorov bežný účet je skôr ako Clark Kent. Clark Kent sa stáva Supermanom len vtedy, keď je to potrebné, aby zachránil ľudí. Potom sa znova vracia do svojho "prevleku". Root prístup by mal byť používaný rovnako. Prevlek Clarka Kenta ho však neobmedzuje, keďže stále je schopný používať svoje super schopnosti. Toto je analógia k sudo programu.

Užívateľské a administratívne techniky 
Unix má veľmi veľa nástrojov, ktoré dokážu zlepšiť bezpečnosť, ak sú vhodne použité užívateľmi či administrátormi.

Heslá 
Výber silného hesla a jeho stráženie sú pravdepodobne najdôležitejšie veci, ktoré môže užívateľ urobiť pre zvýšenie bezpečnosti Unix-u. V Unix-ových systémoch, najdôležitejšie údaje o hesle sú uložené v súbore  /etc/passwd. Tento súbor udržuje prehľad o užívateľoch a ich hlavných nastaveniach. Heslá, resp. hash-e hesiel môžu byť tiež uložené na rovnakom mieste. Záznamy v /etc/passwd každý zaberajú presne jeden riadok a majú nasledujúcu formu:

 nickname:hash_hesla:UserID:GroupID:kompletné_meno:domovský_adresár:shell_bin
Napríklad: 
 xfze:$1$zuW2nX3sslp3qJm9MYDdglEApAc36r/:1000:100:José Carlos D. S. Saraiva:/home/xfze:/bin/bash

Keďže všetci užívatelia musia mať práva na čítanie tohto súboru (aby systém vedel skontrolovať prihlasovacie heslo), vznikol jeden bezpečnostný problém: hocikto vedel prečítať tento súbor a získať hash-e hesiel ostatných užívateľov. Preto bol pre uchovávanie hash-ov hesiel vytvorený súbor /etc/shadow , na ktorý mal práva na čítanie iba root. Pri utajovaní hesiel, druhá položka v riadku v súbore /etc/passwd (hash hesla) je nahradená 'x' ktoré hovorí systému, aby našiel príslušné heslo cez súbor /etc/shadow.

Súbor /etc/shadow zvyčajne obsahuje iba prvé dve hodnoty:

 xfze:$1$zuW2nX3sslp3qJm9MYDdglEApAc36r/:::::

Zvyšné hodnoty v súbore /etc/shadow obsahujú: 
 Minimálny počet dní medzi zmenami hesla
 Maximálny počet dní predtým, než musí byť heslo zmenené
 Počet dní s varovaním predtým, než musí byť heslo zmenené
 Počet dní, po ktorých musí byť heslo zmenené, keď sa účet stane nepoužiteľný
 Dátum (vyjadrené ako počet dní od 1. januára, 1970) kedy platnosť účtu vyprší

Tieto hodnoty môžu byť použité na zvýšenie Unix-ovej bezpečnosti prinútením užívateľov zaoberať sa heslami.

Užívatelia a účty 
Administrátori by mali mazať staré účty okamžite.
 su, sudo, sudosh, ssh iba, žiadne vzdialené prístupy na root

Softvérová údržba

Patchovanie 
Operačné systémy, tak ako každý softvér, môžu obsahovať chyby žiadajúce opravu alebo môžu byť vylepšované pridávaním nových funkcií. Bezpečné patchovanie operačného systému vyžaduje, aby softvér pochádzal z dôveryhodného zdroja a nebol pozmenený pred zabalením. Medzi bežné metódy overujúce, či patche pre operačné systémy neboli pozmenené, patrí použitie kryptografického hashu, ako napríklad MD5 suma, alebo použitie read-only média.

Z bezpečnostného uhla pohľadu, špecifické metódy balenia, ako napríklad RPM Package Manager formát pôvodne od Red Hat Linux nie sú až tak dôležité ako zabezpečenie integrity samotného patchu.

Distribúcia zdrojových kódov 
Distribúcia zdrojových kódov znamená možnosť prehľadať kód na podozrivý obsah. Mínusom ale je, že užívateľ musí byť schopný vykonať bezpečnostnú analýzu kódu sám.

RPM balenia 
Linuxové distribúcie, ktoré používajú RPM Package Manager formát pre zabezpečenie základnej funkcionality a softvérových updatov, využívajú MD5 a GPG pre zabezpečenie integrity obsahu. Hodnoty hash-ov sú zabalené spolu so súbormi RPM a overované, keď je balík inštalovaný.

Debian balenia 
Linuxové distribúcie, ktoré používajú Debian .deb balíkový formát pre zabezpečenie základnej funkcionality a softvérových updatov, využívajú GPG podpisy pre zabezpečenie integrity obsahu.  Podpis je vypočítaný, keď je balík vyrobený a neskôr overovaný, keď sa balík inštaluje.

Ostatní predajcovia a distribúcie 
Bez ohľadu na predajcu alebo distribúciu, všetky softvérové distribúcie by mali poskytovať mechanizmus na overenie, či je softvér legitímny, a či nebol modifikovaný od času, keď bol pôvodne zabalený.

Služby 

Nepotrebný systémový softvér by nemal byť inštalovaný ani konfigurovaný na systéme. Softvér, ktorý je ďalej nepotrebný by mal byť pokiaľ možno kompletne odstránený.
 Identifikácia bežiacich služieb
 netstat -na
 lsof
 nmap
 sockstat -4 (FreeBSD)

Príkazy inetd a xinetd sa správajú ako super-servery pre množstvo sieťových protokolov, napríklad ako rlogin, telnet a ftp.

Vypnutie nepotrebných služieb

 použitím chkconfig na Red Hat Linux
 použitím /etc/rc.conf a /usr/local/etc/rc.d na FreeBSD (/etc/rc.local)
 použitím rc-update na Gentoo Linux

Tento prístup je bežne nazývaný proaktívna bezpečnosť. Existujú operačné systémy, ktoré sú prirodzene bezpečné. Popri iných, voľné BSD distribúcie (FreeBSD, NetBSD, a OpenBSD) sú proaktívne bezpečné. Napríklad, výstup z netstat-u na NetBSD 3.0 pracovnej stanici jasne podčiarkuje túto techniku:
 $ netstat -a
 Active Internet connections (including servers)
 Proto Recv-Q Send-Q  Local Address          Foreign Address        State
 tcp        0      0  localhost.smtp         *.*                    LISTEN
 tcp        0      0  *.ssh                  *.*                    LISTEN
 Active Internet6 connections (including servers)
 Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
 tcp6       0      0  localhost.smtp         *.*                    LISTEN
 tcp6       0      0  *.ssh                  *.*                    LISTEN
 Active UNIX domain sockets
 Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
 c0d10d80 dgram       0      0        0 c0cd8680        0 c0cb7000 -> /var/run/log
 c0cb7000 dgram       0      0        0 c0cd8680        0        0 -> /var/run/log
 c0cd8680 dgram       0      0 cb9639e8        0 c0d10d80        0 /var/run/log

Nasledujúci príklad je z BSD systému
 $ sockstat -4
 USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
 root     sendmail   569    4 tcp    localhost.smtp        *.*
 root     sshd       593    4 tcp    *.ssh                 *.*

Ukazuje, že na tomto stroji iba služba SSH počúva na verejnom sieťovom rozhraní počítača. sendmail počúva iba na loopback rozhraní. Prístup k službe môže byť ďalej obmedzený použitím firewallu.

Súborové systémy

Bezpečnosť súborových systémov 
Bezpečnosť súborových systémov v UNIX a Unix-like systémoch je založená na 9 bitoch, ktoré znamenajú prístupové práva, set user a group ID bitoch, a na sticky bite, čo spolu dáva 12 bitov. Tieto práva sa aplikujú rovnako takmer na všetky objekty súborového systému ako sú súbory, adresáre a zariadenia. 

9 prístupových bitov je rozdelených do troch skupín po troch bitoch. Prvá skupina popisuje práva vlastníka súboru, druhá skupina popisuje práva skupiny asociovanej s vlastníkom súboru alebo s adresárom, ktorý súbor obsahuje a tretia skupina popisuje práva asociované s procesom, ktorý nemá rovnaké user ID ako súbor. Každá skupina troch bitov obsahuje bity označujúce povolenie prístupu na čítanie, zapisovanie alebo spúšťanie. V prípade adresárov znamená právo na spúšťanie právo prezerať daný adresár. 

Set user ID a set group ID bity, bežne skracované ako set-UID a set-GID, sú používané na zmenu identity procesu, ktorý spúšťa súbor, ktorý má nastavený jeden alebo oba tieto bity. Súbor s nastaveným prístupovým bitom set-UID spôsobí, že proces, ktorý súbor spustil dočasne zmení effective user ID na user ID vlastníka súboru. Súbor s nastaveným prístupovým bitom set-GID spôsobí, že proces, ktorý súbor spustil dočasne zmení effective group ID na group ID súboru. Proces potom môže meniť effective user alebo group ID, ktoré zdedil zo súboru, a medzi real user alebo group ID, ktoré zdedil, keď sa užívateľ prihlásil do systému. Toto predstavuje spôsob, akým proces môže limitovať prístupové práva, ktoré vlastní, voči častiam kódu (code regions), ktoré tieto prístupové práva vyžadujú. Toto je forma bezpečnostnej technológie nazývanej privilege separation (privilegované rozdeľovanie) a zvyšuje bezpečnosť programov limitovaním nechcených alebo neplánovaných činností procesu.

Adresár, ktorý má nastavený set-GID bit spôsobí, že novo vytvorené súbory budú mať počiatočnú hodnotu skupinu rovnakú ako je skupina adresára. Toto predstavuje spôsob, kde subsystém, napríklad mailový subsystém, môže vytvárať súbory, ktoré majú  bežnú hodnotu skupiny, takže set-GID procesy v rámci subsystému sú potom schopné prečítať a zapísať do súboru.

Sticky bit, formálne známy ako save text on swap bit, odvádza svoje meno od svojho pôvodného účelu. Sticky bit pôvodne znamenal, že pamäťový obraz (image) procesu bol uložený ako spojitý obraz na disku, ktorý bol používaný na uchovávanie reálnych pamäťových stránok, keď neboli používané. Toto zvyšovalo výkon bežne spúšťaných procesov, keďže počiatočný obraz pamäte bol ľahko dostupný. Moderné UNIX-ové systémy už ďalej nevykonávajú túto funkciu, ak je sticky bit nastavený, napriek tomu názov ostal. V prípade súborov, sticky bit môže byť použitý systémom na indikovanie spôsobu, akým má byť vykonané uzamknutie súboru. V prípade adresárov, sticky bit zabraňuje vymazanie súboru v rámci adresára hocijakému procesu, okrem procesu, ktorý má super-user (root) práva alebo má nastavené effective user ID ako má vlastník súboru. Sticky bit je najbežnejšie používaný vo verejne zapisovateľných adresároch, akými sú napríklad rôzne dočasné pracovné adresáre v systéme.

Vírusy a vírusové skenery 
Unix-like operačné systémy sú imúnne voči väčšine vírusov z prostredia Microsoft Windows, pretože binárne súbory vytvorené pre beh na Windows vo všeobecnosti nefungujú na iných platformách. Avšak veľa Unix-like zariadení pokskytuje ukladanie dát pre užívateľov Microsoft Windows, napríklad použitím Samba softvéru, a takto sa môžu tieto zariadenia neplánovane stať skladiskom vírusov uložených užívateľmi. Pre Unix-ové servery je bežné fungovanie ako Mail transfer agent, teda často je inštalovaný aj skener emailových vírusov. Vírusový skener ClamAV je dostupný vo forme zdrojového kódu a môže byť použitý na skenovanie Unix-ových súborových systémov na vírusy, ktoré napádajú iné operačné systémy. 

Existujú vírusy a červy, ktoré majú za cieľ Unix-like operačné systémy. Prvý počítačový červ - Morris worm bol namierený proti Unix-ovým systémom.

Firewall
Firewall odvádza svoje meno z konštrukčných metód, v ktorých spevnená, ohňu-vzdorná vrstva je použitá na ochranu steny pred ohňom na opačnej strane steny. Podobne, sieťový firewall chráni systémy a siete pred sieťovými hrozbami, ktoré existujú na opačnej strane firewallu.

iptables 
iptables je súčasný užívateľský interface pre interakciu s funkcionalitou  netfilter (súčasť Linux-ového jadra). Nahradili ipchains. Ďalšie Unix like operačné systémy môžu poskytovať ich vlastnú natívnu funkcionalitu, takisto existujú ďalšie open source firewallové produkty. Nasledujú stručné poznámky o tom, ako môžu byť iptables použité na konfiguráciu Linux-ového firewallu.

netfilter poskytuje state-full paketový filter, ktorý môže byť konfigurovaný podľa sieťového rozhrania, protokolu, zdrojovej alebo cieľovej adresy, zdrojového alebo cieľového portu a podľa stavu paketu. Sieťový paket prechádza viacerými okruhmi medzi časom, kedy je prijatý sieťovým rozhraním a časom, kedy je akceptovaný hostom, alebo preposlaný inému hostovi. Bežné okruhy sú INPUT (vstup), OUTPUT (výstup) a FORWARD (ďalej).  INPUT okruhom prechádzajú všetky pakety tak, ako sú prijaté sieťovým rozhraním, nezávisle od toho, či sú hostom prijímané alebo preposielané inému hostovi. OUTPUT okruhom prechádzajú všetky pakety posielané sieťovým rozhraním. FORWARD okruhom prechádzajú tie pakety, ktoré sú routované cez hosta z jedného sieťového rozhrania do iného, napríklad v prípade multi-homed systému (systém s viac ako jedným sieťovým rozhraním).

Každý zo vstavaných okruhov ma vlastnú implicitnú politiku ktorá definuje aké akcie sa uplatňujú voči paketu, ktorý sa dostane na koniec okruhu. Prechod paketu končí, keď sa pravidlo zhodne s paketom a má akciu ACCEPT (akceptuj), DROP (zahoď), REJECT (odmietni) alebo RETURN (vráť).

Najjednoduchší iptables firewall sa skladá z pravidiel pre každú požadovanú službu, nasledovaných pravidlom, ktoré indikuje, že pakety, ktoré dosiahli toto pravidlo su zahodené (dropped). Systém, ktorý iba povoľuje napríklad emailové prenosy bude mať pravidlo, ktoré akceptuje spojenia na SMTP porte, a potom zahadzuje ostatné. Bolo by vyžadované pravidlo, ktoré by indikovalo, že všetky započaté spojenia boli povolené, takže odchádzajúce spojenia by dostali odozvu z ostatných systémov.

INPUT okruh 
Nasledujúci príklad ukazuje jednoduchý paketový filter INPUT okruh pre hore spomenutý príklad:

 Chain INPUT (policy DROP 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
     0     0 ACCEPT     all—any    any     anywhere             anywhere            state ESTABLISHED
     0     0 ACCEPT     tcp—any    any     anywhere             anywhere            tcp dpt:smtp
     0     0 LOG        all—any    any     anywhere             anywhere            LOG level warning
     0     0 DROP       all—any    any     anywhere             anywhere

Pridanie explicitnej DROP akcie uisťuje, že pakety, ktoré boli odhodené implicitnou politikou INPUT okruhu nebudú náhodou zmenené na ACCEPT.

OUTPUT okruh 
Je menšia potreba pre OUTPUT okruh a implicitná politika pre OUTPUT okruh môže byť bezpečne nastavená na ACCEPT. Niekedy môže byť žiaduce pre firewall aby limitoval určité odchádzajúce spojenia do množiny povolených systémov. Toto je známe ako egress filtering a môže byť použité v rámci firewallu na prevenciu úniku vírusov do iných systémov. Napríklad, politikou siete môže byť limitovanie odchádzajúcich emailových spojení na jediný autorizovaný emailový server (čo je jeden zo spôsobov boja s e-mailovým spamom). Toto môže byť dosiahnuté nasledujúcim príkladom:

 Okruh OUTPUT (politika ACCEPT)
  pkts bytes target     prot opt in     out     source               destination
     0     0 DROP       tcp—any    any    !server               anywhere            tcp dpt:smtp

Nie je potrebné zahŕňať ďalšie pravidlá do tohto príkladu, keďže implicitná politika pre OUTPUT okruh je ACCEPT.  Všimnite si, že toto pravidlo predpokladá, že host, ktorý sa správa ako firewall nebude posielať email sám, ale pošle ho emailovému serveru. Toto je dobrý predpoklad, keďže typicky firewall obsahuje minimum systémového kódu potrebného aby fungoval ako firewall.

Viac obmedzujúci OUTPUT okruh by obsahoval povoľujúce (ACCEPT) vstupy pre tie služby, ku ktorým môže byť pristupované zvonka firewallu a potom obmedzujúcu (DROP) politiku pre okruh samotný.

Všeobecne 
Bezpečná sieťová komunikácia:
 Vrstva 7: GPG/PGP
 Vrstva 4: SSL/TLS/SSH/Stunnel/S/MIME
 Vrstva 3: VPN, IPsec
 Vrstva 2: PPTP

Packet sniffing :
 tcpdump, Wireshark

Útoky:
 Man in the middle attack
 oblastné ping of death, Denial-of-service attack atď.

Advanced 
 rootkits, moduly kernelu, chkrootkit
 detaily exploitov, buffer overflows, lokálny vs vzdialený prístup
 Security-Enhanced Linux

Detaily služieb 
 banners
 SMTP - spam
 Sendmail
 Domain Name System - reverzné mapovanie dnssec

Externé odkazy 
 Model Unix-ovej bezpečnosti pre administráciu web serveru Robert K. Moniot 2000
 Prehľad architektúry UNIX Network Security (sieťovej bezpečnosti UNIXU) Robert B. Reinhardt 1993
 jednoduchý návod na zmenu hesla v debiane - povinné čítanie pre administrátorov, ak sa chcú vyhnúť crackerom
 materiály k bezpečnosti UNIX-u

Referencie 

Practical UNIX and Internet Security, Simson Garfinkel and Gene Spafford, O'Reilly & Associates, 2003.

Zdroj 
 

Unix
Počítačová bezpečnosť