Linux sigurnosni sustavi

Jedan od razloga ogromnog uspjeha Linux OS-a na ugrađenim, mobilnim uređajima i poslužiteljima je prilično visok stupanj sigurnosti kernela, povezanih usluga i aplikacija. Ali ako Pogledaj bolje na arhitekturu Linux kernela, onda je u njemu nemoguće pronaći kvadrat koji je odgovoran za sigurnost kao takvu. Gdje se krije Linux sigurnosni podsustav i od čega se sastoji?

Pozadina sigurnosnih modula Linuxa i SELinuxa

Sigurnosno poboljšani Linux skup je pravila i mehanizama pristupa koji se temelje na obveznim i modelima pristupa temeljenim na ulogama za zaštitu Linux sustava od potencijalnih prijetnji i ispravljanje nedostataka Diskrecijske kontrole pristupa (DAC), tradicionalnog Unix sigurnosnog sustava. Projekt je nastao u utrobi američke Nacionalne sigurnosne agencije, a izravno su ga razvijali uglavnom izvođači Secure Computing Corporation i MITER, kao i brojni istraživački laboratoriji.

Linux sigurnosni sustavi
Linux sigurnosni moduli

Linus Torvalds dao je brojne komentare o novim NSA razvojima kako bi se mogli uključiti u glavnu jezgru Linuxa. Opisao je opće okruženje, sa skupom presretača za kontrolu operacija s objektima i skupom određenih zaštitnih polja u podatkovnim strukturama jezgre za pohranjivanje odgovarajućih atributa. Ovo okruženje zatim mogu koristiti moduli jezgre koji se mogu učitavati za implementaciju bilo kojeg željenog sigurnosnog modela. LSM je u potpunosti ušao u Linux kernel v2.6 2003.

LSM okvir uključuje zaštitna polja u strukturama podataka i pozive funkcijama presretanja na kritičnim točkama koda kernela kako bi se njima manipuliralo i izvršila kontrola pristupa. Također dodaje funkcionalnost za registriranje sigurnosnih modula. Sučelje /sys/kernel/security/lsm sadrži popis aktivnih modula na sustavu. LSM kuke su pohranjene u listama koje se pozivaju redoslijedom navedenim u CONFIG_LSM. Detaljna dokumentacija o kukicama uključena je u datoteku zaglavlja include/linux/lsm_hooks.h.

Podsustav LSM omogućio je dovršetak potpune integracije SELinuxa s istom verzijom stabilnog Linux kernela v2.6. Gotovo odmah, SELinux je postao de facto standard za sigurno Linux okruženje i uključen je u najpopularnije distribucije: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glosar

  • identitet — SELinux korisnik nije isto što i uobičajeni Unix/Linux korisnički ID; oni mogu koegzistirati na istom sustavu, ali su potpuno različiti u biti. Svaki standardni Linux račun može odgovarati jednom ili više njih u SELinuxu. SELinux identitet je dio cjelokupnog sigurnosnog konteksta, koji određuje kojim se domenama možete pridružiti, a kojim ne.
  • Domene - U SELinuxu, domena je kontekst izvršenja subjekta, tj. procesa. Domena izravno određuje pristup koji proces ima. Domena je u osnovi popis onoga što procesi mogu učiniti ili što proces može učiniti s različitim tipovima. Neki primjeri domena su sysadm_t za administraciju sustava i user_t koja je normalna neprivilegirana korisnička domena. Init sustav radi u domeni init_t, a imenovani proces radi u domeni named_t.
  • uloga — Ono što služi kao posrednik između domena i SELinux korisnika. Uloge određuju kojim domenama korisnik može pripadati i kojim vrstama objekata može pristupiti. Ovaj mehanizam kontrole pristupa sprječava prijetnju napada eskalacije privilegija. Uloge su zapisane u sigurnosni model kontrole pristupa temeljen na ulogama (RBAC) koji se koristi u SELinuxu.
  • Vrste — Atribut popisa provedbe tipa koji je dodijeljen objektu i određuje tko mu može pristupiti. Slično definiciji domene, osim što se domena odnosi na proces, a tip se odnosi na objekte kao što su direktoriji, datoteke, utičnice itd.
  • Subjekti i objekti - Procesi su subjekti i izvode se u specifičnom kontekstu ili sigurnosnoj domeni. Resursi operacijskog sustava: datoteke, direktoriji, utičnice, itd., objekti su kojima je dodijeljena određena vrsta, drugim riječima, razina privatnosti.
  • Pravila SELinuxa — SELinux koristi različite politike za zaštitu sustava. Pravila SELinuxa definiraju pristup korisnika ulogama, uloga domenama i domena vrstama. Prvo, korisnik je ovlašten za dobivanje uloge, zatim je uloga ovlaštena za pristup domenama. Konačno, domena može imati pristup samo određenim vrstama objekata.

LSM i SELinux arhitektura

Unatoč nazivu, LSM-ovi općenito nisu Linux moduli koji se mogu učitavati. Međutim, poput SELinuxa, izravno je integriran u kernel. Svaka promjena LSM izvornog koda zahtijeva novu kompilaciju kernela. Odgovarajuća opcija mora biti omogućena u postavkama kernela, inače LSM kod neće biti aktiviran nakon pokretanja. Ali čak iu ovom slučaju, to može biti omogućeno opcijom OS bootloader.

Linux sigurnosni sustavi
LSM kontrolni stog

LSM je opremljen kukicama u osnovnim funkcijama jezgre koje mogu biti relevantne za provjere. Jedna od glavnih značajki LSM-ova je da su složeni. Dakle, standardne provjere se i dalje izvode, a svaki sloj LSM-a samo dodaje dodatne kontrole i kontrole. To znači da se zabrana ne može poništiti. To je prikazano na slici; ako je rezultat rutinskih DAC provjera neuspjeh, tada stvar neće ni doći do LSM kukica.

SELinux usvaja Flask sigurnosnu arhitekturu istraživačkog operativnog sustava Fluke, posebno načelo najmanje privilegije. Bit ovog koncepta, kao što mu i samo ime govori, jest da se korisniku ili procesu daju samo ona prava koja su mu potrebna za izvršenje predviđenih radnji. Ovo je načelo implementirano korištenjem prisilnog upisivanja pristupa, stoga se kontrola pristupa u SELinuxu temelji na modelu tipa domene =>.

Zahvaljujući prisilnom tipkanju pristupa, SELinux ima mnogo veće mogućnosti kontrole pristupa nego tradicionalni DAC model koji se koristi u Unix/Linux operativnim sustavima. Na primjer, možete ograničiti broj mrežnog priključka na koji će se ftp poslužitelj spojiti, dopustiti pisanje i mijenjanje datoteka u određenoj mapi, ali ne i njihovo brisanje.

Glavne komponente SELinuxa su:

  • Poslužitelj za provedbu pravila — Glavni mehanizam za organiziranje kontrole pristupa.
  • Baza podataka sigurnosnih politika sustava.
  • Interakcija s LSM presretačem događaja.
  • Selinuxfs - Pseudo-FS, isti kao /proc i montiran u /sys/fs/selinux. Dinamički popunjava Linux kernel tijekom izvođenja i sadrži datoteke koje sadrže informacije o SELinux statusu.
  • Pristup predmemoriji vektora — Pomoćni mehanizam za povećanje produktivnosti.

Linux sigurnosni sustavi
Kako radi SELinux

Sve radi ovako.

  1. Određeni subjekt, u terminima SELinuxa, izvodi dopuštenu radnju na objektu nakon DAC provjere, kao što je prikazano na gornjoj slici. Ovaj zahtjev za izvođenje operacije ide LSM presretaču događaja.
  2. Odatle se zahtjev, zajedno sa sigurnosnim kontekstom subjekta i objekta, prosljeđuje SELinux Apstraction and Hook Logic modulu, koji je odgovoran za interakciju s LSM-om.
  3. Tijelo za donošenje odluka o pristupu subjekta objektu je Policy Enforcement Server i prima podatke od SELinux AnHL.
  4. Za donošenje odluka o pristupu ili odbijanju, Policy Enforcement Server obraća se podsustavu predmemorije Access Vector Cache (AVC) za najčešće korištena pravila.
  5. Ako se rješenje za odgovarajuće pravilo ne pronađe u predmemoriji, zahtjev se prosljeđuje u bazu podataka sigurnosnih pravila.
  6. Rezultat pretraživanja iz baze podataka i AVC-a vraća se na poslužitelj za provedbu pravila.
  7. Ako pronađeno pravilo odgovara traženoj radnji, tada je operacija dopuštena. U suprotnom, operacija je zabranjena.

Upravljanje SELinux postavkama

SELinux radi u jednom od tri načina:

  • Provođenje - Strogo pridržavanje sigurnosnih pravila.
  • Dopušteno - dopušteno je kršenje ograničenja; odgovarajuća bilješka se pravi u dnevniku.
  • Onemogućeno—Sigurnosna pravila nisu na snazi.

Sljedećom naredbom možete vidjeti u kojem je načinu rada SELinux.

[admin@server ~]$ getenforce
Permissive

Promjena načina prije ponovnog pokretanja, na primjer, postavljanje na prisilno ili 1. Permisivni parametar odgovara numeričkom kodu 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

Također možete promijeniti način rada uređivanjem datoteke:

[admin@server ~]$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=cilj

Razlika sa setenfoceom je u tome što kada se operativni sustav podigne, SELinux mod će biti postavljen u skladu s vrijednošću SELINUX parametra u konfiguracijskoj datoteci. Osim toga, promjene za nametanje <=> onemogućeno stupaju na snagu samo uređivanjem datoteke /etc/selinux/config i nakon ponovnog pokretanja.

Pogledajte kratko izvješće o stanju:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

Za pregled SELinux atributa, neki standardni pomoćni programi koriste -Z parametar.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

U usporedbi s normalnim izlazom ls -l, postoji nekoliko dodatnih polja u sljedećem formatu:

<user>:<role>:<type>:<level>

Posljednje polje označava nešto poput sigurnosne klasifikacije i sastoji se od kombinacije dva elementa:

  • s0 - značaj, također zapisan kao interval niske razine-visoke razine
  • c0, c1… c1023 - kategorija.

Promjena konfiguracije pristupa

Koristite semodule za učitavanje, dodavanje i uklanjanje SELinux modula.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Prva ekipa semanage prijava povezuje SELinux korisnika s korisnikom operativnog sustava, drugi prikazuje popis. Konačno, zadnja naredba s prekidačem -r uklanja mapiranje SELinux korisnika na OS račune. Objašnjenje sintakse za vrijednosti MLS/MCS raspona nalazi se u prethodnom odjeljku.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

Momčad semanage korisnik koristi se za upravljanje mapiranjem između SELinux korisnika i uloga.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Parametri naredbe:

  • -dodaj prilagođeni unos mapiranja uloga;
  • -l popis odgovarajućih korisnika i uloga;
  • -d izbrisati unos mapiranja korisničke uloge;
  • -R popis uloga pridruženih korisniku;

Datoteke, portovi i Booleove vrijednosti

Svaki SELinux modul pruža skup pravila za označavanje datoteka, ali možete dodati i vlastita pravila ako je potrebno. Na primjer, želimo da web poslužitelj ima prava pristupa mapi /srv/www.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Prva naredba registrira nova pravila označavanja, a druga resetira, odnosno postavlja tipove datoteka u skladu s trenutnim pravilima.

Isto tako, TCP/UDP priključci su označeni na takav način da ih samo odgovarajući servisi mogu slušati. Na primjer, kako bi web poslužitelj slušao na portu 8080, trebate pokrenuti naredbu.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

Značajan broj SELinux modula ima parametre koji mogu poprimiti Booleove vrijednosti. Cijeli popis takvih parametara može se vidjeti pomoću getsebool -a. Booleove vrijednosti možete promijeniti koristeći setsebool.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

Radionica, pristupite Pgadmin-web sučelju

Pogledajmo praktičan primjer: instalirali smo pgadmin7.6-web na RHEL 4 za administriranje baze podataka PostgreSQL. Malo smo šetali potraga s postavkama pg_hba.conf, postgresql.conf i config_local.py, postavili dopuštenja mape, instalirali nedostajuće Python module iz pip-a. Sve je spremno, lansiramo i primamo 500 Interna pogreška poslužitelja.

Linux sigurnosni sustavi

Počinjemo s tipičnim sumnjivcima, provjeravajući /var/log/httpd/error_log. Ima tu zanimljivih unosa.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

U ovoj će točki većina Linux administratora biti u velikom iskušenju pokrenuti setencorce 0 i to će biti kraj. Iskreno, upravo sam to napravio prvi put. Ovo je naravno i izlaz, ali daleko od najboljeg.

Unatoč glomaznom dizajnu, SELinux može biti jednostavan za korištenje. Samo instalirajte paket setroubleshoot i pogledajte zapisnik sustava.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Imajte na umu da se usluga auditd mora ponovno pokrenuti na ovaj način, a ne korištenjem systemctl-a, unatoč prisutnosti systemd-a u OS-u. U zapisniku sustava bit će naznačeno ne samo činjenica blokiranja, već i razlog i način prevladavanja zabrane.

Linux sigurnosni sustavi

Izvršavamo ove naredbe:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Provjeravamo pristup web stranici pgadmin4-web, sve radi.

Linux sigurnosni sustavi

Linux sigurnosni sustavi

Izvor: www.habr.com

Dodajte komentar