Securitate Unix - Unix security

Securitatea Unix se referă la mijloacele de securizare a Unix sau Unix- ului sistem de operare . Un mediu sigur este realizat nu numai prin conceptele de proiectare ale acestor sisteme de operare, ci și prin practici vigilente ale utilizatorilor și administrative .

Concepte de proiectare

Permisiuni

O caracteristică principală de securitate în aceste sisteme este permisiunea sistemului de fișiere . Toate fișierele dintr-un sistem de fișiere tipic Unix au seturi de permisiuni care permit accesul diferit la un fișier.

Permisiunile pentru un fișier sunt setate în mod obișnuit folosind comanda chmod și sunt văzute prin comanda ls . De exemplu:

-r-xr-xr-x  1 root  wheel  745720 Sep  8  2002 /bin/sh

Permisiunile Unix permit utilizatorilor să acceseze un fișier. Diferite grupuri de utilizatori au permisiuni diferite pentru un fișier.

Sistemele de fișiere Unix mai avansate includ conceptul Access Control List , care permite acordarea permisiunilor pentru mai mulți utilizatori sau grupuri. O listă de control acces poate fi utilizată pentru a acorda permisiunea unor utilizatori sau grupuri individuale suplimentare. De exemplu:

/pvr [u::rwx,g::r-x,o::r-x/u::rwx,u:sue:rwx,g::r-x,m::rwx,o::r-x]

În acest exemplu, care provine din comanda chacl din sistemul de operare Linux , utilizatorului în judecată i se acordă permisiunea de scriere în directorul / pvr .

Grupuri de utilizatori

Utilizatorii din sistemele de operare stil Unix aparțin adesea grupurilor gestionate cu permisiuni de acces specifice. Acest lucru permite gruparea utilizatorilor după nivelul de acces pe care îl au la acest sistem. Multe implementări Unix adaugă un strat suplimentar de securitate, cerând ca un utilizator să fie membru al grupului de privilegii ale utilizatorului roată pentru a accesa comanda. su

Acces la rădăcină

Majoritatea sistemelor Unix și Unix-like au un cont sau un grup care permite utilizatorului să controleze complet sistemul, adesea cunoscut sub numele de cont root . Dacă accesul la acest cont este obținut de un utilizator nedorit, acest lucru are ca rezultat o încălcare completă a sistemului. Cu toate acestea, un cont root este necesar în scopuri administrative și, din motivele de securitate de mai sus, contul root este rar utilizat în scopuri de zi cu zi ( programul sudo este mai frecvent utilizat), astfel încât utilizarea contului root poate fi monitorizată mai atent.

Accesul la rădăcină „așa cum ar trebui să fie” poate fi vizualizat de cei familiarizați cu poveștile lui Superman folosind următoarea analogie :

Folosirea unui cont root este mai degrabă ca și cum ai fi Superman; utilizatorul obișnuit al unui administrator seamănă mai mult cu Clark Kent. Clark Kent devine Superman doar atât timp cât este necesar, pentru a salva oamenii. Apoi revine la „deghizarea” sa. Accesul la rădăcină trebuie utilizat în același mod. Deghizarea lui Clark Kent nu-l restricționează cu adevărat, deoarece este încă capabil să-și folosească super-puterile. Acest lucru este analog cu utilizarea programului sudo.

Tehnici de utilizare și administrative

Unix are multe instrumente care pot îmbunătăți securitatea dacă sunt utilizate corect de utilizatori și administratori.

Parole

Alegerea unei parole puternice și păstrarea corectă a acesteia sunt probabil cele mai importante lucruri pe care le poate face un utilizator pentru a îmbunătăți securitatea Unix. În sistemele Unix, informațiile esențiale despre utilizatori sunt stocate sub fișierul /etc/passwdAcest fișier ține evidența utilizatorilor înregistrați în sistem și a definițiilor lor principale. Parolele, sau mai corect, hash-ul parolei, pot fi, de asemenea, stocate în același loc. Intrările în /etc/passwdocupă exact o linie fiecare și au următoarea formă:

nickname:password_hash:UserID:GroupID:Complete_Name:home_dir:shell_bin

Un exemplu ar fi:

xfze:$$1zuW2nX3sslp3qJm9MYDdglEApAc36r/:1000:100:Daniel Ernesto Ortiz Costa:/home/xfze:/bin/bash

Deoarece toți utilizatorii trebuie să aibă acces de citire la /etc/passwdfișier pentru a face multe sarcini comune (de exemplu, ls -l /homevor folosi /etc/passwdUID-urile la numele de autentificare), oricine ar putea citi și hashurile de parolă ale altor utilizatori. Pentru a rezolva această problemă, fișierul a /etc/shadowfost creat pentru a stoca hash-urile parolei, având doar acces root la citire. Sub umbrarea parolei, al doilea câmp ( hash de parolă ) este înlocuit cu un „x” care spune sistemului să recupereze parola utilizatorului corespunzător prin /etc/shadowfișier.

/etc/shadowFișierul de multe ori conține doar valori pentru primele două câmpuri:

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

Câmpurile rămase din /etc/shadowfișier includ:

  1. Numărul minim de zile dintre modificările parolei
  2. Numărul maxim de zile până când parola trebuie modificată
  3. Numărul de zile de avertisment dat înainte de parolă trebuie modificat
  4. Numărul de zile după parolă trebuie modificat atunci când contul devine inutilizabil
  5. Data (exprimată ca număr de zile de la 1 ianuarie 1970 ) când contul a expirat

Aceste câmpuri pot fi utilizate pentru a îmbunătăți securitatea Unix prin aplicarea unei politici de securitate a parolei.

Utilizatori și conturi

Administratorii ar trebui să șteargă conturile vechi cu promptitudine.

  • su , sudo , numai ssh , fără conectări root la distanță

Întreținerea software-ului

Patching

Sistemele de operare, la fel ca toate software-urile, pot conține erori care necesită remedierea sau pot fi îmbunătățite prin adăugarea de noi caracteristici. Corectarea sistemului de operare într-un mod sigur necesită ca software-ul să provină dintr-o sursă de încredere și să nu fi fost modificat de când a fost ambalat. Metodele obișnuite pentru verificarea faptului că patch-urile sistemului de operare nu au fost modificate includ utilizarea hashului criptografic , cum ar fi o sumă de control bazată pe MD5 sau utilizarea suporturilor de citire numai.

Din punct de vedere al securității, metoda de ambalare specifică, cum ar fi formatul RPM Package Manager inițial de la Red Hat Linux nu este la fel de importantă ca utilizarea caracteristicilor care asigură integritatea patch-ului în sine.

Distribuții sursă

Distribuțiile sursă includ posibilitatea de a examina codul pentru conținut suspect. Dezavantajul, în absența unei valori hash criptografice însoțitoare, este că utilizatorul trebuie să poată efectua el însuși o analiză de securitate a codului.

Pachete RPM

Distribuțiile Linux care utilizează formatul RPM Package Manager pentru furnizarea funcționalității de bază și actualizările software utilizează MD5 și GPG pentru a asigura integritatea conținutului. Valorile hash sunt ambalate cu fișierul RPM și verificate la instalarea pachetului.

Pachete Debian

Distribuțiile Linux care utilizează formatul pachetului Debian .deb pentru furnizarea funcționalității de bază și actualizările software utilizează semnăturile GPG pentru a asigura integritatea conținutului. O semnătură este calculată atunci când pachetul este construit și verificat ulterior când pachetul este instalat.

Alți furnizori și distribuții

Indiferent de furnizor sau distribuție, toate distribuțiile software ar trebui să ofere un mecanism pentru verificarea faptului că software-ul este legitim și nu a fost modificat de când a fost ambalat inițial.

Servicii

Software-ul de sistem inutil nu trebuie instalat sau configurat pe un sistem. Software-ul care nu mai este necesar trebuie eliminat complet, dacă este posibil.

  • Identificați ce servicii rulează
    • netstat -na
    • lsof
    • nmap
    • sockstat -4 ( FreeBSD )

Comenzile inetd și xinetd acționează ca super-servere pentru o varietate de protocoale de rețea, cum ar fi rlogin , telnet și ftp .

Dezactivarea serviciilor inutile

  • folosind update-rc.d pe Debian
  • folosind chkconfig pe Red Hat Linux
  • folosind /etc/rc.conf și /usr/local/etc/rc.d pe FreeBSD (menționați /etc/rc.local)
  • folosind rc-update pe Gentoo Linux

Această abordare se numește de obicei securitate proactivă . Există unele sisteme de operare care sunt securizate în mod implicit . Printre altele, aromele BSD gratuite ( FreeBSD , NetBSD și OpenBSD ) sunt sigure în mod proactiv. De exemplu, ieșirea netstat pe o stație de lucru NetBSD 3.0 conturează în mod clar această tehnică:

$ 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

Următorul exemplu dintr-un sistem BSD

$ sockstat -4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     sendmail   569    4 tcp    localhost.smtp        *.*
root     sshd       593    4 tcp    *.ssh                 *.*

Arată că pe această mașină numai serviciul SSH ascultă interfața de rețea publică a computerului. sendmail ascultă numai interfața loopback . Accesul la un serviciu poate fi restricționat în continuare prin utilizarea unui firewall .

Sisteme de fișiere

Securitatea sistemului de fișiere

Securitatea sistemului de fișiere în cadrul sistemelor UNIX și similare Unix se bazează pe 9 biți de permisiune, biți de identificare de utilizator și de grup stabiliți și biți lipicioși , pentru un total de 12 biți. Aceste permisiuni se aplică aproape în mod egal tuturor obiectelor sistemului de fișiere, cum ar fi fișiere, directoare și dispozitive.

Cele 9 biți de permisiune sunt împărțiți în trei grupuri a câte trei biți. Primul grup descrie permisiunile proprietarului fișierului, al doilea grup descrie permisiunile unui grup asociat cu proprietarul fișierului sau directorul care conține fișierul, iar al treilea grup descrie permisiunile asociate oricărui proces care nu are același utilizator ID ca fișier. Fiecare grup de trei biți conține un bit care indică accesul de citire, scriere sau executare. În cazul directoarelor, accesul la executare este interpretat ca permisiunea de a efectua o căutare a fișierului în director.

Setul ID utilizator și setul de biți ID grup, prescurtat în mod obișnuit set-UID și respectiv set-GID , sunt folosiți pentru a schimba identitatea procesului care execută un fișier care are unul sau ambii biți setați. Un fișier cu setul de biți de permisiune UID setat va determina un proces care execută acel fișier să treacă temporar ID-ul de utilizator efectiv cu cel al proprietarului fișierului. Un fișier cu setul de biți de permisiune GID setat va face ca un proces care execută acel fișier să treacă temporar ID-ul efectiv al grupului la cel al grupului de fișiere. Un proces poate alterna apoi între utilizatorul efectiv sau ID-ul grupului pe care l-a moștenit din fișier și ID-ul real al utilizatorului sau al grupului pe care l-a moștenit atunci când utilizatorul s-a conectat la sistem. Acesta oferă un mecanism prin care un proces poate limita drepturile de acces pe care le deține la acele regiuni de cod care necesită aceste drepturi de acces. Aceasta este o formă a unei tehnici de securitate cunoscută sub numele de separare de privilegii și îmbunătățește securitatea programului prin limitarea acțiunilor neintenționate sau nedorite ale unui proces.

Un director cu setul de biți de permisiune GID setat va face ca un fișier nou creat să aibă o valoare inițială a grupului de fișiere egală cu grupul de fișiere din director. Acesta oferă un mecanism prin care un subsistem, cum ar fi subsistemul poștal al sistemului, poate crea fișiere care au o valoare comună a grupului de fișiere, astfel încât procesele set-GID din acel subsistem să poată citi sau scrie fișierul.

Bit lipicios , cunoscut în mod oficial ca salva textul de pe swap de biți, derivă numele de la scopul său inițial. Inițial bitul lipicios a făcut ca imaginea de memorie inițială a unui proces să fie stocată ca o imagine contiguă pe unitatea de disc care a fost utilizată pentru a stoca pagini de memorie reală atunci când acestea nu erau utilizate. Acest lucru a îmbunătățit performanța comenzilor executate în mod obișnuit, făcând imaginea inițială a memoriei ușor disponibilă. Sistemele moderne UNIX nu mai îndeplinesc această funcție când bitul este setat, dar numele a fost păstrat totuși. În cazul fișierelor, bitul lipicios poate fi utilizat de sistem pentru a indica stilul de blocare a fișierelor care trebuie efectuat. În cazul directoarelor, bitul lipicios împiedică ștergerea unui fișier din acel director, altul decât unul care are privilegii de super-utilizator sau unul care are un ID de utilizator eficient al proprietarului fișierului. Lipicios bit este cel mai frecvent utilizat în directoarele inscriptibile în mod public, cum ar fi directoare diferite pentru spațiul de lucru temporare pe sistem.

Dovleac rădăcină

Root squash este o mapare specială a identității superutilizatorului (root) la distanță atunci când se utilizează autentificarea identității (utilizatorul local este același cu utilizatorul la distanță). Sub root squash, uidul 0 (root) al unui client este mapat la 65534 (nimeni). Este în primul rând o caracteristică a NFS, dar poate fi disponibilă și pe alte sisteme.

Root squash este o tehnică pentru a evita escaladarea privilegiilor pe computerul client prin executabilele suid Setuid . Fără root squash, un atacator poate genera binare suid pe server care sunt executate ca root pe alt client, chiar dacă utilizatorul client nu are privilegii de superutilizator. Prin urmare, protejează echipamentele client împotriva altor clienți rău intenționați. Nu protejează clienții împotriva unui server rău intenționat (unde root poate genera binare suid) și nici nu protejează fișierele altui utilizator decât root (deoarece clienții rău intenționați pot identifica orice utilizator).

SELinux

SELinux este setul de extensii de nucleu pentru a controla accesul mai precis, definind cu strictețe dacă și cum pot fi accesate fișierele, folderele, porturile de rețea și alte resurse prin procesul limitat. Acest sistem este utilizat mai ales pentru a restricționa procesele (baza de date, serverul) mai degrabă decât utilizatorii umani. De asemenea, poate limita procesele care rulează ca root. Alte distribuții utilizează alternative comparabile precum AppArmor .

Viruși și scanere de viruși

Sistemele de operare asemănătoare Unix sunt imune la majoritatea virușilor Microsoft Windows, deoarece binare create pentru a rula pe Windows, în general, nu vor rula pe alte platforme. Cu toate acestea, multe instalații precum Unix furnizează servicii de stocare a fișierelor pentru clienții Microsoft Windows, cum ar fi prin utilizarea software-ului Samba și pot deveni neintenționat un depozit pentru virușii stocați de utilizatori. Este comun ca serverele Unix să acționeze ca agenți de transfer de e-mail și, în consecință, este adesea instalată scanarea virusului de e-mail. ClamAV scanner -ul antivirus este disponibil sub formă de cod sursă și poate fi utilizată pentru a scana sistemele de fișiere Unix pentru viruși care infectează alte sisteme de operare.

Există viruși și viermi care vizează sistemele de operare de tip Unix. De fapt, primul vierme de computer - viermele Morris - a vizat sistemele Unix.

Firewall-uri

Firewall-ul de rețea protejează sistemele și rețelele de amenințările de rețea care există pe partea opusă a firewall-ului. Firewall-urile pot bloca accesul la servicii strict interne, utilizatori nedoriti și, în unele cazuri, pot filtra traficul de rețea după conținut.

iptables

iptables este interfața actuală a utilizatorului pentru interacțiunea cu funcționalitatea kernel netfilter Linux . A înlocuit ipchain-urile . Alte sisteme de operare Unix, cum ar fi, pot oferi propria funcționalitate nativă și există alte produse firewall open source . Informații mai detaliate despre iptables sunt conținute în altă parte. O scurtă discuție este conținută aici pentru a descrie modul în care iptables pot fi utilizate pentru a configura un firewall Linux.

netfilter oferă un filtru de pachete cu stare completă, care poate fi configurat în funcție de interfața de rețea , protocol , adresa sursă și / sau destinație , sursa și / sau portul de destinație și starea pachetului. Un pachet de rețea traversează mai multe lanțuri între momentul în care este primit de o interfață de rețea și momentul în care este acceptat de gazdă sau redirecționat către o altă gazdă. Lanțurile comune sunt INPUT , OUTPUT și FORWARD . INPUT lanț este traversat pentru toate pachetele pe masura ce acestea sunt primite printr - o interfață de rețea, indiferent dacă acestea urmează să fie acceptate de către gazdă sau transmise la o altă gazdă. IEȘIRE lanțul este traversat pentru toate pachetele , deoarece acestea sunt transmise printr - o interfață de rețea. FORWARD lanțul este traversat pentru acele pachete sunt dirijate prin gazda de la o interfață de rețea la alta, cum este cazul unui sistem multi-multihost (un sistem cu mai mult de o interfață de rețea fizică).

Fiecare dintre lanțurile încorporate are o politică implicită care definește ce acțiune este întreprinsă pentru un pachet care ajunge la capătul lanțului. Trecerea pachetului se termină atunci când o regulă se potrivește cu pachetul și are acțiunea ACCEPT , DROP , REJECT sau RETURN .

Cel mai simplu firewall iptables este format din reguli pentru fiecare serviciu dorit, urmate de o regulă care indică faptul că orice pachete care ajung la această regulă sunt abandonate. Un sistem care permite doar, de exemplu, traficul de e-mail primit, ar avea o regulă care acceptă conexiuni pe portul SMTP și apoi le-a eliminat pe altele. Ar fi necesară o regulă care să indice că toate conexiunile stabilite erau permise și astfel încât conexiunile de ieșire să primească răspunsuri de la alte sisteme.

Lanțul INPUT

Următorul exemplu prezintă un filtru de pachete simplu pentru lanțul INPUT pentru exemplul descris mai sus:

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

Adăugarea unei acțiuni DROP explicite asigură eliminarea pachetelor în cazul în care politica implicită a lanțului INPUT va fi modificată accidental în ACCEPT .

Lanțul IEȘIRE

Este mai puțin necesar un lanț OUTPUT și politica implicită a lanțului OUTPUT poate fi setată în siguranță la ACCEPT . În unele cazuri, poate fi de dorit ca un firewall să limiteze anumite conexiuni de ieșire la un anumit set de sisteme aprobate. Aceasta este cunoscută sub numele de filtrare de ieșire și poate fi utilizată pentru a preveni virușii din firewall să scape către alte sisteme. De exemplu, ar putea fi politica unei rețele să limiteze conexiunile de e-mail de ieșire la un singur server de e-mail autorizat ca o modalitate de combatere a spamului de e-mail . Acest lucru ar putea fi realizat prin următorul exemplu:

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

Nu este necesar să se includă alte reguli în acest exemplu, deoarece politica implicită pentru lanțul OUTPUT este ACCEPT . Această regulă presupune că gazda care acționează ca firewall nu va trimite e-mailuri în sine, de exemplu către serverul de e-mail. Aceasta este o presupunere bună, deoarece de obicei un sistem firewall conține cantitatea minimă de cod de sistem necesară pentru a acționa ca un firewall.

Un lanț OUTPUT mai restrictiv ar conține intrări permisive ( ACCEPT ) pentru acele servicii care pot fi accesate în afara firewall-ului și apoi o politică restrictivă ( DROP ) pentru lanțul în sine.

General

Comunicare securizată în rețea:

Adulmecarea pachetului:

Atacuri:

Avansat

Detalii despre servicii

Referințe

General

  • UNIX practic și Internet Security, Simson Garfinkel și Gene Spafford, O'Reilly & Associates, 2003.

linkuri externe