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 vo*[[Wheel (Unix term)|wheel]]* 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:

```text
$ 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

```text
$ 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 *[[setuid|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 *[[setgid|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
* 

Kategória:Unix
Kategória:Počítačová bezpečnosť