Sistemet mbrojtëse Linux

Një nga arsyet e suksesit të madh të sistemit operativ Linux në pajisjet e integruara, mobile dhe serverat është niveli i lartë i sigurisë së kernelit, shërbimeve përkatëse dhe aplikacioneve. Por nëse e shikoni me kujdes arkitekturën e kernelit Linux, nuk do të gjeni një katror që përgjigjet për sigurinë, si një e tillë. Ku fshihet, pra, nën-sistemi i sigurisë në Linux dhe nga çfarë përbëhet ai?

Historia e Moduleve të Sigurisë në Linux dhe SELinux

Security Enhanced Linux paraqet njĂ« grup rregullash dhe mekanizmash qasjeje, tĂ« bazuar nĂ« modelet e qasjes obliguese dhe rolit, pĂ«r tĂ« mbrojtur sistemet Linux nga kĂ«rcĂ«nimet e mundshme dhe pĂ«r tĂ« rregulluar mangĂ«sitĂ« e Discretionary Access Control (DAC) — sistemit tradicional tĂ« sigurisĂ« Unix. Projekti u lind nĂ« brendĂ«si tĂ« AgjencisĂ« KombĂ«tare tĂ« SigurisĂ« sĂ« Shteteve tĂ« Bashkuara, ndĂ«rsa zhvillimi u krye kryesisht nga kontraktorĂ«t e Secure Computing Corporation dhe MITRE, si dhe disa laboratorĂ« kĂ«rkimorĂ«.

Sistemet mbrojtëse Linux
Linux Security Modules

Linus Torvalds ka bërë një sërë vërejtjesh mbi zhvillimet e reja të NSA, me qëllim që ato të mund të përfshihen në degën kryesore të kernelit Linux. Ai përshkroi një ambient të përgjithshëm, me një grup interceptuesish për të menaxhuar operacionet me objekte dhe një grupp fushash mbrojtëse në strukturat e të dhënave të kernelit për të ruajtur atributet përkatëse. Më pas, ky ambient mund të përdoret nga modulet e ngarkueshme të kernelit për të zbatuar çdo model sigurie të dëshiruar. LSM u integrua plotësisht në kernelin Linux v2.6 në vitin 2003.

Korniza LSM përfshin fusha mbrojtëse në strukturat e të dhënave dhe thirrje funksionesh interceptimi në pika kritike të kodit të kernelit për t'i menaxhuar ato dhe për të kryer kontrollin e aksesit. Ajo gjithashtu shton funksione për regjistrimin e moduleve të sigurisë. Interfaces /sys/kernel/security/lsm përmban një listë të moduleve aktive në sistem. Hooks LSM ruhen në lista, të cilat thirren në rendin e specifikuar në CONFIG_LSM. Dokumentacioni i detajuar mbi hooks përfshihet në skedarin përfshirës include/linux/lsm_hooks.h.

Sistemi LSM ka lejuar përfundimin e integrimit të plotë të SELinux së njëjtës version të bërthamës stabil Linux v2.6. Menjëherë, SELinux u bë standardi de-facto i mjedisit të sigurt të Linux dhe u përfshi në distribucione më të njohura: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Fjalori i SELinux

  • Identiteti — PĂ«rdoruesi i SELinux nuk Ă«shtĂ« i njĂ«jtĂ« me identifikuesin e zakonshĂ«m tĂ« pĂ«rdoruesit Unix/Linux, ata mund tĂ« koegzistojnĂ« nĂ« tĂ« njĂ«jtĂ«n sistem, por janĂ« krejtĂ«sisht tĂ« ndryshĂ«m nĂ« thelb. Çdo llogari standarde e Linux mund tĂ« pĂ«rputhet me njĂ« ose mĂ« shumĂ« nĂ« SELinux. Identiteti i SELinux Ă«shtĂ« njĂ« pjesĂ« pĂ«rbĂ«rĂ«se e kontekstit tĂ« pĂ«rgjithshĂ«m tĂ« sigurisĂ«, qĂ« pĂ«rcakton nĂ« cilat domenĂ« mund tĂ« hyhet dhe nĂ« cilat — jo.
  • Domenet — NĂ« SELinux, njĂ« domain Ă«shtĂ« konteksti nĂ« tĂ« cilin ekzekutohet njĂ« subjekt, pra, njĂ« proces. Domaini pĂ«rcakton drejtpĂ«rdrejt qasjen qĂ« ka procesi. Domaini Ă«shtĂ« nĂ« thelb njĂ« listĂ« e asaj qĂ« mund tĂ« bĂ«jnĂ« proceset ose cilat veprime mund tĂ« kryejnĂ« proceset mbi tipe tĂ« ndryshme. Disa shembuj tĂ« domainĂ«ve janĂ«: sysadm_t pĂ«r administratĂ«n e sistemit, dhe user_t, i cili Ă«shtĂ« njĂ« domain i zakonshĂ«m i pĂ«rdoruesit pa privilegji. Sistemi i inicializimit init ekzekutohet nĂ« domainin init_t, ndĂ«rsa procesi named ekzekutohet nĂ« domainin named_t.
  • Rollet — Ajo qĂ« shĂ«rben si njĂ« ndĂ«rmjetĂ«s mes domainĂ«ve dhe pĂ«rdoruesve tĂ« SELinux. Role tĂ« pĂ«rcaktojnĂ« nĂ« cilĂ«t domainĂ« mund tĂ« pĂ«rfshihet njĂ« pĂ«rdorues dhe cilit lloj objektesh do t'i ketĂ« qasje. NjĂ« mekanizĂ«m i tillĂ« ndanĂ«s e parandalon kĂ«rcĂ«nimin e sulmit tĂ« rritjes sĂ« privilegjeve. Roles janĂ« tĂ« shkruara nĂ« modelin e sigurisĂ« Role Based Access Control (RBAC), qĂ« pĂ«rdoret nĂ« SELinux.
  • Tipe — Atributi i listĂ«s Type Enforcement, i cili i caktohet njĂ« objekti dhe pĂ«rcakton se kush do tĂ« ketĂ« qasje nĂ« tĂ«. Duket si pĂ«rcaktimi i domenit, pĂ«rveç se domeni aplikohet nĂ« procesin, ndĂ«rsa tipi aplikohet nĂ« objekte tĂ« tilla si katalogĂ«, skedarĂ«, socket-e, etj.
  • Subjektet dhe objektet — Proceset janĂ« Subjekte dhe ekzekutohen nĂ« njĂ« kontekst tĂ« caktuar, ose domain sigurie. Burimet e sistemit operativ: skedarĂ«t, direktorĂ«t, socket-et etj., janĂ« objekte, tĂ« cilĂ«ve u caktohet njĂ« tip i caktuar, nĂ« tĂ« tjera fjalĂ« — njĂ« nivel i sekretit.
  • Politikat SELinux — PĂ«r tĂ« mbrojtur sistemin, SELinux pĂ«rdor politika tĂ« ndryshme. Politika SELinux pĂ«rcakton qasjen e pĂ«rdoruesve nĂ« role, rollet nĂ« domenet dhe domenet nĂ« tipe. NĂ« fillim, njĂ« pĂ«rdorues autorizohet pĂ«r tĂ« marrĂ« njĂ« rol, mĂ« pas roli autorizohet pĂ«r qasje nĂ« domenet. MĂ« nĂ« fund, njĂ« domain mund tĂ« ketĂ« qasje vetĂ«m nĂ« disa lloje objektesh.

LSM dhe arkitektura SELinux

MegjithĂ«se emri LSM nĂ« pĂ«rgjithĂ«si nuk Ă«shtĂ« module tĂ« ngjashme me ato tĂ« ngarkueshme nĂ« Linux. MegjithatĂ«, si SELinux, ai Ă«shtĂ« integruar drejtpĂ«rdrejt nĂ« bĂ«rthamĂ«. Çdo ndryshim nĂ« kodin burimor tĂ« LSM kĂ«rkon kompilim tĂ« ri tĂ« bĂ«rthamĂ«s. Opsioni pĂ«rkatĂ«s duhet tĂ« aktivizohet nĂ« cilĂ«simet e bĂ«rthamĂ«s, pĂ«rndryshe kodi LSM nuk do tĂ« aktivizohet pas ngarkimit. Por edhe nĂ« kĂ«tĂ« rast, mund tĂ« aktivizohet me opsionin e ngarkuesit tĂ« OS-sĂ«.

Sistemet mbrojtëse Linux
Streha e kontrollit LSM

LSM ofron hook në funksionet kryesore të bërthamës, të cilat mund të jenë të rëndësishme për kontrollet. Një nga karakteristikat kryesore të LSM është se ato janë të strukturuara sipas parimit të një strehe. Kështu, kontrolllet standarde vazhdojnë të ekzekutohen, dhe çdo shtresë LSM vetëm shton elemente shtesë të kontrollit dhe menaxhimit. Kjo do të thotë se ndalimi nuk mund të kthehet prapa. Kjo ilustrohet në figurë, nëse rezultati i kontrolleve rutinë DAC është refuzim, atëherë çështja as nuk arrin te hook-et e LSM.

SELinux ka marrë struktura e sigurisë së Flask nga sistemi operacional kërkimor Fluke, veçanërisht parimi i privilegjeve më të vogla. Thelbi i kësaj koncepte, siç sugjeron emri, është të ofrohen përdoruesit ose procesit vetëm ato të drejta që janë të nevojshme për kryerjen e veprimeve të parashikuara. Ky parim zbatohet përmes tipizimit të detyrueshëm të aksesit, kështu që kontrolli i hyrjeve në SELinux bazohet në modelin domen => tip.

Me tipizimin e detyrueshëm të aksesit, SELinux ka mundësi shumë më të mëdha për ndarjen e aksesit, sesa modeli tradicional DAC, i përdorur në OS Unix/Linux. Për shembull, mund të kufizohet numri i portit rrjetësor që do të përdoret nga serveri ftp, të lejohet shkruajta dhe ndryshimi i skedarëve në një dosje të caktuar, por jo fshirja e tyre.

Komponentët kryesorë të SELinux janë:

  • ShĂ«rbimi i Zbatimit tĂ« Politikeve — Mekanizmi kryesor i organizimit tĂ« kontrollit tĂ« aksesit.
  • Baza e tĂ« dhĂ«nave pĂ«r politikat e sigurisĂ« sĂ« sistemit.
  • Interaksioni me interceptorin e ngjarjeve LSM.
  • Selinuxfs — Pseudo-FS, e njĂ«jtĂ« si /proc dhe e montuar nĂ« /sys/fs/selinux. PlotĂ«sohet nĂ« mĂ«nyrĂ« dinamike nga bĂ«rthama Linux gjatĂ« ekzekutimit dhe pĂ«rmban skedare qĂ« kanĂ« informacion rreth statusit tĂ« SELinux.
  • Access Vector Cache — NjĂ« mekanizĂ«m ndihmĂ«s pĂ«r rritjen e performancĂ«s.

Sistemet mbrojtëse Linux
Skema e funksionimit të SELinux

Kjo punon në këtë mënyrë.

  1. Një subjekt, në terma të SELinux, kryen një veprim të lejuar mbi një objekt pas verifikimit DAC, siç tregohet në figurën e sipërme. Kërkesa për kryerjen e operacionit dërgohet te interceptori i ngjarjeve LSM.
  2. Nga aty, kërkesa së bashku me kontekstin e sigurisë së subjektit dhe objektit kalon tek moduli SELinux Abstraction and Hook Logic, përgjegjës për ndërveprimin me LSM.
  3. Instanca e vendimit për qasjen e subjektit ndaj objektit është Serveri i Zbatimit të Politikave dhe ai merr të dhëna nga SELinux AnHL.
  4. Për të marrë një vendim në lidhje me qasjen, ose ndalimin, Serveri i Zbatimit të Politikave i referohet nën-sistemit të ruajtjes së rregullave më të përdorura, Access Vector Cache (AVC).
  5. Nëse nuk gjendet një vendim për rregullin përkatës në cache, kërkesa kalon për më tej në bazën e të dhënave të politikave të sigurisë.
  6. Rezultati i kërkimit nga baza e të dhënave dhe AVC kthehet te Serveri i Zbatimit të Politikave.
  7. Nëse politika e gjetur përputhet me veprimin e kërkuar, atëherë operacioni lejohet. Përndryshe, operacioni ndalohet.

Menaxhimi i konfigurimeve të SELinux

SELinux funksionon në njërin nga tre modet:

  • Enforcing — Zbatimi i rregullave tĂ« sigurisĂ«.
  • Permissive — Lejohen shkeljet, me shĂ«nimin pĂ«rkatĂ«s nĂ« regjistĂ«r.
  • Disabled — Rregullat e sigurisĂ« nuk pĂ«rkthehen.

Për të parë se në cilin mod është SELinux, mund të përdorni komandën e mëposhtme.

[admin@server ~]$ getenforce
Permissive

Ndryshimi i modit deri në rinisje, për shembull, për ta vendosur në enforcing, ose 1. Parametri permissive i korrespondon kodit numerik 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 # e njëjta gjë

Një mënyrë tjetër për të ndryshuar modin është editimi i skedarit:

[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=duke
# 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=targete

Dallimi me setenfoce është se në ngarkimin e sistemit operativ, moda SELinux do të vendoset sipas vlerës së parametrave të skedarit të konfigurimit. Përveç kësaj, ndryshimet midis enforcing disabled hyjnë në fuqi vetëm përmes editimit të skedarit /etc/selinux/config dhe pas rinisjes.

Shikoni një raport të shkurtër statusi:

[admin@server ~]$ sestatus

Statusi i SELinux: i aktivizuar
Montimi i SELinuxfs: /sys/fs/selinux
Katalogu rrënjësor i SELinux: /etc/selinux
Emri i politikës së ngarkuar: i targetuar
ReĆŸimi aktual: lehtĂ«sues
ReĆŸimi nga skedari i konfigurimit: forcues
Statusi i politikës MLS: i aktivizuar
Statusi i politikës deny_unknown: i lejuar
Versioni maksimal i politikës së kernelit: 31

Për të parë atributet e SELinux, disa utilitete standard përdorin parametrin -Z.

[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

Në krahasim me daljen normale të ls -l, këtu ka disa fusha shtesë në formatin e mëposhtëm:

:::

Fusha e fundit shënon diçka si një gradë sekretësie dhe përbëhet nga një kombinim i dy elementeve:

  • s0 — rĂ«ndĂ«sia, gjithashtu shkruhet me intervalin lowlevel-highlevel
  • c0, c1
 c1023 — kategoria.

Ndryshimi i konfiguracionit të qasjes

Përdorni semodule për të ngarkuar modul të SELinux, për ta shtuar dhe hequr atë.

[admin@server ~]$ semodule -l |wc -l #lista e të gjitha moduleve
408
[admin@server ~]$ semodule -e abrt #aktivizo - aktivizo modulin
[admin@server ~]$ semodule -d accountsd #ndalo - ndalo modulin
[admin@server ~]$ semodule -r avahi #hiq - hiq modulin

Komanda e parë semanage login lidhi përdoruesin e SELinux me përdoruesin e sistemit operativ, komanda e dytë shfaq një listë. Në fund, komanda e fundit me çelësin -r heq lidhjen e shfaqjes së përdoruesve të SELinux me llogaritë e OS. Shpjegimi i sintaksës së vlerave MLS/MCS Range ndodhet në seksionin e mëparshëm.

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

Emri i identifikimit të përdoruesit SELinux Lidhja me MLS/MCS
__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

Ekipa semanage user përdoret për të menaxhuar lidhjet ndërmjet përdoruesve dhe rollev të SELinux.

[admin@server ~]$ semanage user -l
                Etiketime   MLS/       MLS/                          
Përdoruesi SELinux    Prefiksi     MCS Niveli  MCS Range             Rollet SELinux
guest_u         përdorues       s0         s0                    guest_r
staff_u         staf      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          përdorues       s0         s0                    user_r
xguest_u        përdorues       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Parametrat e komandës:

  • -a shto njĂ« regjistĂ«r tĂ« pĂ«rdoruesve pĂ«r lidhjet e rollev;
  • -l lista e lidhjeve tĂ« pĂ«rdoruesve dhe rollleve;
  • -d hiq njĂ« regjistĂ«r tĂ« pĂ«rdoruesve pĂ«r lidhjet e rollev;
  • -R lista e rolleve tĂ« lidhura me pĂ«rdoruesin;

Skedarët, portet dhe vlerat logjike

Çdo modul SELinux ofron njĂ« grup rregullash pĂ«r etiketimin e skedarĂ«ve, por gjithashtu mund tĂ« shtoni rregulla tĂ« veçanta nĂ«se Ă«shtĂ« e nevojshme. PĂ«r shembull, dĂ«shirojmĂ« t'i japim serverit tĂ« uebit tĂ« drejtat pĂ«r tĂ« aksesuar dosjen /srv/www.

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

Komanda e parë regjistron rregullat e reja të etiketimit, ndërsa e dyta rivendos, më saktë përcakton, llojet e skedarëve në përputhje me rregullat aktuale.

Po ashtu, portet TCP/UDP janë etiketuar në një mënyrë që vetëm shërbimet përkatëse mund t'i dëgjojnë ato. Për shembull, për të lejuar që serveri i uebit të dëgjojë portin 8080, duhet të kryhet komanda.

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

Një numër i rëndësishëm i moduleve SELinux kanë parametra që mund të pranojnë vlera logjike. Lista e plotë e këtyre parametrave mund të shihet me getsebool -a. Vlerat logjike mund të modifikohen me 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

Praktikë, qasje në ndërfaqen Pgadmin-web

Le të shqyrtojmë një shembull praktik, ne instaluam pgadmin4-web në RHEL 7.6 për administrimin e bazave të të dhënave PostgreSQL. Ne kaluam një eksplorim të vogël misioni me konfigurimin e pg_hba.conf, postgresql.conf dhe config_local.py, vendosëm lejet për dosjet, instaluam modulet e humbura të Python nga pip. Të gjitha janë gati, e nisim dhe marrim 500 Internal Server error.

Sistemet mbrojtëse Linux

Fillojmë me të dyshuarit tipikë, kontrollojmë /var/log/httpd/error_log. Atje ka disa të dhëna interesante.

[timestamp] [core:notice] [pid 23689] Politika SELinux e aktivizuar; httpd po funksionon si konteksti system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Leje e refuzuar: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] KËSHILLË: Mund tĂ« duhet tĂ« vendosni manualisht lejet mbi
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin për të lejuar apache të shkruajë në të.

Në këtë moment, shumica e administratorëve të Linux do të kenë një tundim të fortë për të ekzekutuar setenforce 0, dhe problemi zgjidhet. Të pranoj, herën e parë unë e bëra ashtu. Kjo është një zgjidhje gjithsesi, por padyshim jo më e mira.

Pavarësisht nga komplekset e strukturave, SELinux mund të jetë miqësor ndaj përdoruesit. Mjafton të instaloni paketën setroubleshoot dhe të shihni regjistrin e sistemit.

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

Vini re se shërbimi auditd duhet të riniset kështu, e jo me systemctl, pavarësisht nga prania e systemd në OS. Në regjistrin e sistemit do të tregojë jo vetëm faktin e bllokimit, por gjithashtu shkakun dhe mënyrën për të kaluar ndalimin.

Sistemet mbrojtëse Linux

Ekzekutojmë këto komanda:

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

Kontrollojmë qasjen në faqen e internetit pgadmin4-web, gjithçka funksionon.

Sistemet mbrojtëse Linux

Sistemet mbrojtëse Linux

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster