Linuxi kaitsesĂŒsteemid

Üks peamisi pĂ”hjuseid, miks Linuxi operatsioonisĂŒsteem on sisseehitatud, mobiilsetes seadmetes ja serverites nii edukas, seisneb tuuma, seotud teenuste ja rakenduste piisavalt kĂ”rges turvalisuses. Kuid kui vaatame tĂ€helepanelikult Linuxi tuuma arhitektuuri, siis ei leidu seal turvalisuse eest vastutavat ruutu. Kus aga peitub Linuxi turvasĂŒsteem ja millisest see koosneb?

Linuxi turvamoodulite ja SELinuxi eelajalugu

Security Enhanced Linux on reeglite ja ligipÀÀsumehhanismide kogum, mis pĂ”hineb mĐ°ĐœĐŽaatse ja rollipĂ”hise ligipÀÀsu mudelitel, et kaitsta Linuxi sĂŒsteeme vĂ”imalike ohtude eest ja parandada Discretionary Access Control (DAC) — traditsioonilise Unix'i turvasĂŒsteemi puudusi. Projekt algas USA Rahvusliku Julgeoleku Ameti raames ning selle arendamisega tegelesid peamiselt Secure Computing Corporation ja MITRE, samuti mitmed uurimislaborid.

Linuxi kaitsesĂŒsteemid
Linuxi turvamoodulid

Linus Torvalds esitas mitu kommentaari Uute NSA arenduste kohta, et neid oleks vĂ”imalik lisada Linuxi pĂ”hi haru. Ta kirjeldas ĂŒldist keskkonda, koos protokollide kogumiga objektide toimingute haldamiseks ja mitte mingite kaitsevĂ€ljade kogumiga tuumandmete struktuurides vastavate atribuutide salvestamiseks. See keskkond saab seejĂ€rel kasutada tuumamoodulite laadimiseks, et rakendada soovitud turvamudelit. LSM lisandus tĂ€ielikult Linuxi tuuma v2.6 2003. aastal.

LSM raamistiku kaudu on kaitsevĂ€ljad tuumandmete struktuurides, samuti tuumakoodi kriitilistes punktides aktsiate helistamise funktsioonid, et neid haldada ja juurdepÀÀsu kontrollida. Samuti lisab see turvamoodulite registreerimise funktsioonid. Liides /sys/kernel/security/lsm sisaldab loetelu aktiivsetest moodulitest sĂŒsteemis. LSM tĂ”ukejĂ”ud hoitakse loettel, mida kutsub esile CONFIG_LSM mÀÀratud jĂ€rjekord. Üksikasjalik dokumentatsioon tĂ”ukejĂ”udude kohta on lisatud pĂ€ise faili include/linux/lsm_hooks.h.

LSM sĂŒsteem vĂ”imaldas lĂ”petada SELinuxi tĂ€ieliku integreerimise sama stabiilse Linuxi kerneliversiooni v2.6. Sellega muutus SELinux de facto standardiks kaitstud Linuxi keskkonnas ning see lisandub paljudele populaarsetele distributsioonidele: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinuxi glossaar

  • Identiteet — SELinuxi kasutaja ei ole sama, mis tavaline Unix/Linuxi kasutaja id, need vĂ”ivad eksisteerida samas sĂŒsteemis, kuid on olemuselt tĂ€iesti erinevad. Iga standardne Linuxi konto vĂ”ib vastata ĂŒhele vĂ”i mitmele SELinuxis. SELinuxi identiteet on osa laiemast turvakontekstist, mis mÀÀratleb, millistesse domeenidesse saab siseneda ja millistesse mitte.
  • Domeenid — SELinuxis on domeen, mis on subjektide, st protsesside, tĂ€itmis kontekst. Domeen mÀÀrab otseselt juurdepÀÀsu, millel on protsess. Domeen on peamiselt loetelu sellest, mida protsessid vĂ”ivad teha vĂ”i milliseid toiminguid protsess vĂ”ib erinevate liikidega teostada. MĂ”ned nĂ€ited domeenidest: sysadm_t sĂŒsteemiadministreerimise jaoks ja user_t, mis on tavalise tavakasutaja domeen. SĂŒsteemi initsialiseerimine, init, kĂ€ivitub domeenis init_t ning protsess named kĂ€ivitub domeenis named_t.
  • Rollid — Miski, mis toimib vahendajana domeenide ja SELinuxi kasutajate vahel. Rollid mÀÀravad, millistes domeenides vĂ”ib kasutaja olla ja millistele objektitĂŒĂŒpidele tal ligipÀÀs on. Sarnane juurdepÀÀsukontrollimehhanism takistab privileegide tĂ”stmise rĂŒnnakuid. Rollid on sisse kirjutatud rollipĂ”hisesse juurdepÀÀsukontrolli (RBAC) turvamudelisse, mida kasutab SELinux.
  • TĂŒĂŒbid — Type Enforcement loendi atribuut, mis mÀÀratakse objektile ja mÀÀrab, kes sellele juurde pÀÀseb. Sarnaneb domeeni mÀÀratlusele, vĂ€lja arvatud see, et domeen kehtib protsessile, samas kui tĂŒĂŒp kehtib sellistele objektidele nagu kataloogid, failid, pistikud jne.
  • Subjektid ja objektid — Protsessid on subjektid, mis kĂ€ivitatakse teatud kontekstis vĂ”i turvadomeenides. OperatsioonisĂŒsteemi ressursid: failid, kataloogid, pistikud jne on objektid, millele mÀÀratakse spetsiifiline tĂŒĂŒp, teisisĂ”nu – konfidentsiaalsuse tase.
  • SELinux poliitikad — SELinux kasutab sĂŒsteemi kaitsmiseks erinevaid poliitikaid. SELinuxi poliitika mÀÀrab kasutajate juurdepÀÀsu rollidele, rollide juurdepÀÀsu domeenidele ja domeenide juurdepÀÀsu tĂŒĂŒpidele. Alguses autoriseeritakse kasutaja rolli saamiseks, seejĂ€rel autoriseeritakse roll domeenidele juurdepÀÀsuks. LĂ”puks vĂ”ib domeen pÀÀseda vaid teatud tĂŒĂŒpi objektidele.

LSM ja SELinuxi arhitektuur

Kuigi LSM-i nimi ei viita, et need oleksid Linuxi laaditavad moodulid, on need siiski, nagu SELinux, otseselt integreeritud tuumas. Iga muudatus LSM-i lĂ€htekoodis nĂ”uab uue tuuma kompileerimist. Sobiv valik peab olema tuuma seadete hulgas aktiivne, vastasel juhul LSM-i kood ei aktiveeru kĂ€ivitamisel. Isegi sel juhul saab selle aktiveerida operatsioonisĂŒsteemi laadimisvaliku kaudu.

Linuxi kaitsesĂŒsteemid
LSM-i kontrollide virn

LSM on varustatud pĂ”hifunktsioonidesse inteeritud haakidega, mis vĂ”ivad olla kontrollide jaoks asjakohased. Üks LSM-i pĂ”hiomadusi on, et need on ĂŒles ehitatud virna pĂ”himĂ”tte jĂ€rgi. Seega, standardkontrollid viiakse endiselt lĂ€bi ning iga LSM-i kiht lisab vaid tĂ€iendavaid juhtimise ja kontrollimise elemente. See tĂ€hendab, et keelu tĂŒhistamine ei ole vĂ”imalik. See on nĂ€idatud joonisel: kui rutiinsete DAC kontrollide tulemus on keeld, ei jĂ”ua see isegi LSM-i haakideni.

SELinux on vĂ”tnud kasutusele Fluke operatsioonisĂŒsteemi Flask turvaarkitektuuri, eelkĂ”ige minimaalsete privileegide pĂ”himĂ”tte. Selle kontseptsiooni tuum, nagu nimigi ĂŒtleb, seisneb Ă”iguste andmises kasutajale vĂ”i protsessile vaid nende Ă”iguste jĂ€rgi, mis on vajalikud soovitud tegevuste teostamiseks. Seda pĂ”himĂ”tet rakendatakse kohustusliku juurdepÀÀsutĂŒĂŒpimise kaudu, mistĂ”ttu on SELinuxi juurdepÀÀsukontroll pĂ”hinev domeen => tĂŒĂŒp mudelil.

Kuna SELinux rakendab kohustuslikku juurdepÀÀsutĂŒĂŒpimist, on sellel juurdepÀÀsu piiramiseks mĂ€rksa suuremad vĂ”imalused kui traditsioonilisel DAC mudelil, mida kasutatakse Unix/Linux operatsioonisĂŒsteemides. NĂ€iteks on vĂ”imalik piirata vĂ”rgupordi numbrit, mida FTP-server kasutab, lubada failide kirjutamist ja muutmist kindlas kaustas, kuid mitte nende kustutamist.

SELinuxi pÔhikomponendid on jÀrgmised:

  • Poliitika jĂ”ustamise server — Peamine juurdepÀÀsu kontrollimise mehhanism.
  • SĂŒsteemi turvapoliitika andmebaas.
  • Koostöö sĂŒndmuste peegeldajaga (LSM).
  • Selinuxfs — Pseudofail, sama nagu /proc ja monteeritud /sys/fs/selinux. TĂ€idetakse dĂŒnaamiliselt Linuxi tuumaga töötamise ajal ja sisaldab failide teavet SELinuxi oleku kohta.
  • Access Vector Cache — TĂ€iendav jĂ”udluse parandamise mehhanism.

Linuxi kaitsesĂŒsteemid
SELinuxi tööpÔhimÔte

See kÔik töötab jÀrgmiselt.

  1. MĂ”ni subjekt, SELinuxi terminite kohaselt, teostab objekti ĂŒle lubatud toimingu pĂ€rast DAC kontrollimist, nagu on nĂ€idatud ĂŒlemisel pildil. See operatsiooni teostamise taotlus jĂ”uab LSM’i sĂŒndmuste kĂ€ivitajani.
  2. Sealt edastatakse taotlus koos subjekti ja objekti turvakontekstiga SELinuxi Abstraction and Hook Logic moodulisse, mis vastutab LSM'iga suhtlemise eest.
  3. Subjekti juurdepÀÀsu objekti otsustamise instantsiks on Policy Enforcement Server, kuhu saadetakse andmed SELinux AnHL'ilt.
  4. Otsuse tegemiseks juurdepÀÀsu lubamise vĂ”i keelamise kohta pöördub Policy Enforcement Server kĂ”ige sagedamini kasutatavate reeglite Access Vector Cache (AVC) alamsĂŒsteemi poole.
  5. Kui vastava reegli otsus ei leidu vahemÀlus, edastatakse taotlus edasi julgeolekureeglite andmebaasi.
  6. Otsingu tulemused andmebaasist ja AVC naasevad Policy Enforcement Serverisse.
  7. Kui leitud poliitika vastab taotletavale tegevusele, siis operatsioon lubatakse. Vastupidisel juhul on operatsioon keelatud.

SELinuxi seadete haldamine

SELinux töötab ĂŒhes kolmes reĆŸiimis:

  • Enforcing — JĂ”hkralt jĂ€rgides turvapoliitikaid.
  • Permissive — Lubatud on piirangute rikkumine, mis kajastub logis.
  • Disabled — Turvapoliitikad ei kehti.

SELinuxi reĆŸiimi saab vaadata jĂ€rgmise kĂ€su abil.

[admin@server ~]$ getenforce
Permissive

ReĆŸiimi muutmine enne taaskĂ€ivitamist, nĂ€iteks seadmine jĂ”hkraks, vĂ”i 1. Parameetrile permissive vastab numbrikood 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #sama asi

ReĆŸiimi saab muuta ka faili redigeerimise teel:

[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=kehtiv
# 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

Erinevus setenfoce-st on see, et kĂ€ivitusprotsessi ajal seatakse SELinuxi reĆŸiim vastavalt konfiguratsioonifailis oleva SELINUX parameetri vÀÀrtusele. Lisaks sellele jĂ”ustuvad muutused enforcing disabled ainult lĂ€bi faili /etc/selinux/config redigeerimise ja pĂ€rast taaskĂ€ivitamist.

Vaata lĂŒhikest seisundiaruannet:

[admin@server ~]$ sestatus

SELinuxi olek: lubatud
SELinuxi montaaĆŸ: /sys/fs/selinux
SELinuxi juurkataloog: /etc/selinux
Laaditud poliitika nimi: sihitud
Praegune reĆŸiim: lubav
ReĆŸiim konfiguratsioonifailist: jĂ”ustamisreĆŸiim
Poliitika MLS olek: lubatud
Poliitika deny_unknown olek: lubatud
Maksimaalne kernel'i poliitika versioon: 31

SELinux atribuutide vaatamiseks kasutavad mÔned tavalised utiliidid parameetrit -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

Erinevalt tavalisest ls -l vÀljundist on siin mitu tÀiendavat keelt jÀrgmises formaadis:

:::

Viimane vÀli tÀhistab midagi, mis sarnaneb salajaste dokumentide klassifitseerimisega ja koosneb kahe elemendi kombinatsioonist:

  • s0 — olulisus, kirjutatakse ka vahemikuna madal-tase kĂ”rge-tase
  • c0, c1
 c1023 — kategooria.

JuurdepÀÀsukonfiguratsiooni muutmine

Kasuta semodule, et laadida SELinuxi mooduleid, lisada ja eemaldada neid.

[admin@server ~]$ semodule -l |wc -l #kÔik moodulid
408
[admin@server ~]$ semodule -e abrt #aktiviseerida - aktiveeri moodul
[admin@server ~]$ semodule -d accountsd #deaktiveerida - deaktiveeri moodul
[admin@server ~]$ semodule -r avahi #eemalda - eemalda moodul

Esimene kĂ€sk semanage login seondab SELinuxi kasutaja operatsioonisĂŒsteemi kasutajaga, teine kĂ€sk kuvab nimekirja. LĂ”puks, viimane kĂ€sk vĂ”tmega -r eemaldab SELinuxi kasutajate seondumise OS-i kontodele. SĂŒnnaksis MLS/MCS vahemike selgitus on eelnevas osas.

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

Sisselogimise nimi SELinuxi kasutaja MLS/MCS vahemik teenus
__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

Meeskond semanage user kasutatakse SELinuxi kasutajate ja rollide seondumise haldamiseks.

[admin@server ~]$ semanage user -l
                Sildistamine   MLS/       MLS/                          
SELinuxi kasutaja    Eesliide     MCS tase  MCS vahemik             SELinuxi rollid
guest_u         kasutaja       s0         s0                    guest_r
staff_u         personal      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          kasutaja       s0         s0                    user_r
xguest_u        kasutaja       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

KĂ€skude parameetrid:

  • -a lisa kasutaja rolli seondumise kirje;
  • -l kuva kasutajate ja rollide seondumise nimekiri;
  • -d eemalda kasutaja rolli seondumise kirje;
  • -R kasutajale kĂŒlge seotud rollide loend;

Failid, portid ja boolen vÀÀrtused

Iga SELinux'i moodul pakub failide silti mÔistete komplekti, kuid vajadusel saab lisada oma reegleid. NÀiteks soovime anda veebiserverile juurdepÀÀsu kaustale /srv/www.

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

Esimene kĂ€sk registreerib uued silti reeglid ning teine nullib, pigem mÀÀrab, failide tĂŒĂŒbid vastavalt praegustele reeglitele.

Sarnaselt on TCP/UDP portide mÀrgitakse nii, et ainult vastavad teenused saavad neid kuulata. NÀiteks, et veebiserver saaks kuulata porti 8080, peab tÀitma kÀsku.

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

Oluline hulk SELinux'i mooduleid omab parameetreid, mis vÔivad vÔtta boolen vÀÀrtusi. KÔiki neid parameetreid saab vaadata kÀsklusega getsebool -a. Boolen vÀÀrtusi saab muuta kÀsklusega 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

Praktikum, pÀÀseda Pgadmin-web liidesele

Vaatame praktilist nÀidet, me paigaldasime RHEL 7.6-sse pgadmin4-web PostgreSQL andmebaasi haldamiseks. LÀbisime vÀikese pÀrast pg_hba.conf, postgresql.conf ja config_local.py seadistamise, panime kaustade Ôigused paika, installisime pip-i kaudu puuduolevad Python moodulid. KÔik on valmis, kÀivitame ja saame 500 Internal Server error.

Linuxi kaitsesĂŒsteemid

Alustame tĂŒĂŒpiliste kahtlusalustega, kontrollime /var/log/httpd/error_log. Seal on mĂ”ned huvitavad kirjed.

[timestamp] [core:notice] [pid 23689] SELinux poliitika aktiveeritud; httpd töötab kontekstis system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Luba keelatud: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] SOOVITUS: VÔib-olla peate kÀsitsi seadma Ôigused
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin, et lubada apache'il sinna kirjutada.

Sel hetkel tekib enamikul Linuxi administraatoritest tugev kiusatus kÀivitada setenforce 0 ja asi on lahendatud. Pean tunnistama, et esimesel korral tegingi nii. See on muidugi ka vÀljapÀÀs, kuid mitte kaugeltki parim.

Hoolimata SELinux'i keerukusest vĂ”ib see kasutajasĂ”bralik olla. Piisab, kui installida setroubleshoot paket ja vaadata sĂŒsteemilogid.

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

Pange tĂ€hele, et teenus auditd tuleb just nii taaskĂ€ivitada, mitte systemctl kaudu, hoolimata systemd olemasolust opsĂŒsteemis. SĂŒsteemilogis nĂ€idatakse mitte ainult blokeerimise fakti, vaid ka pĂ”hjust ja viisi keelu ĂŒletamiseks.

Linuxi kaitsesĂŒsteemid

KÀime need kÀsud lÀbi:

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

Kontrollime pgadmin4-web veebilehe ligipÀÀsu, kÔik töötab.

Linuxi kaitsesĂŒsteemid

Linuxi kaitsesĂŒsteemid

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster