Linuxi kaitsesĂŒsteemid

Üks pĂ”hjusi Linuxi operatsioonisĂŒsteemi globaalsele edule sisseehitatud, mobiilsete seadmete ja serverite seas on tuum, seotud teenused ja rakendused, mille turvalisus on piisavalt kĂ”rge. Kuid kui vaadata lĂ€hemalt Linuxi tuuma arhitektuuri, siis ei leia sealt turvalisuse eest vastutavat vĂ€ikest ruutu. Kus peitub Linuxi turvasĂŒsteem ja millest see koosneb?

Linuxi turvamenetluste ja SELinuxi eelajalugu

Security Enhanced Linux on reeglite ja juurdepÀÀsumehhanismi kogum, mis pĂ”hineb kohustuslikel ja rollidel pĂ”hinevatel mudelitel, et kaitsta Linuxi sĂŒsteeme vĂ”imalike ohtude eest ja parandada Discretionary Access Control (DAC) — traditsioonilise Unix’i turvasĂŒsteemi puudusi. Projekt sai alguse USA Riikliku Julgeoleku Ameti (NSA) all, mille otsese arendusega tegelesid peamiselt Secure Computing Corporationi ja MITRE’i hankijad ning mitmed teaduslaborid.

Linuxi kaitsesĂŒsteemid
Linuxi turvamenetlused

Linus Torvalds tegi mitmeid mĂ€rkuseid uute NSA arenduste kohta, et neid saaks integreerida Linuxi tuuma pĂ”hivĂ€itesse. Ta kirjeldas ĂŒldist keskkonda koos operatsioonide objekti haldamiseks mĂ”eldud hĂ€kkide kogumiga ja mitmete kaitsevĂ€ljade kogumiga tuuma andmestruktuurides, et salvestada vastavaid atribuute. SeejĂ€rel saab seda keskkonda kasutada laaditavate tuumamoodulite abil soovitud turvamudeli rakendamiseks. LSM integreeriti tĂ€ielikult Linuxi tuuma v2.6 versiooni 2003. aastal.

LSM raamistik sisaldab kaitsevĂ€lju andmestruktuurides ja funktsioonide hĂ€kkide kutsumisekohti tuuma koodis juurdepÀÀsu kontrollimiseks ja haldamiseks. See lisab ka funktsioone turvamoodulite registreerimiseks. Liides /sys/kernel/security/lsm sisaldab sĂŒsteemis aktiivsete moodulite loendit. LSM hĂ€kkid hoitakse loendites, mida kutsutakse CONFIG_LSM-is mÀÀratud jĂ€rjekorras. HĂ€kkide pĂ”hjalik dokumentatsioon on lisatud include/linux/lsm_hooks.h pealkirjafaili.

LSM sĂŒsteem vĂ”imaldas muuta SELinuxi tĂ€isintegreerituks sama stabiilse Linuxi tuuma v2.6 versiooniga. Peaaegu kohe sai SELinux de facto standardiks Linuxi turvalises keskkonnas ning kuulub populaarseimatesse distributsioonidesse: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinuxi glossaar

  • Identiteet — SELinuxi kasutaja ei ole sama, mis tavaline Unix/Linux kasutaja id; need vĂ”ivad sama sĂŒsteemi sees kooseksisteerida, kuid nende olemus on tĂ€iesti erinev. Iga standardne Linuxi konto vĂ”ib vastata ĂŒhele vĂ”i mitmele SELinuxis. SELinuxi identiteet on osa ĂŒldisest turvakontekstist, mis mÀÀrab, millistesse domeenidesse vĂ”ib siseneda ja millistesse mitte.
  • Domeenid — SELinuxis on domeen subjekti, st protsessi, tĂ€itmise kontekst. Domeen mÀÀrab otseselt protsessi juurdepÀÀsu. Domeen on sisuliselt loetelu sellest, mida protsessid saavad teha vĂ”i milliseid tegevusi protsess saab eri tĂŒĂŒpi elementidega teha. MĂ”ned domeenide nĂ€ited: sysadm_t sĂŒsteemi administreerimiseks ja user_t, mis on tavaline mitteprivileegitud kasutaja domeen. InitsialiseerimissĂŒsteem init kĂ€ivitub domeenis init_t ning protsess named kĂ€ivitub domeenis named_t.
  • Rollid — See toimib vahendajana SELinuxi domeenide ja kasutajate vahel. Rollid mÀÀravad, millistes domeenides vĂ”ib kasutaja olla ja millistele objektitĂŒĂŒpidele ta pÀÀseb ligi. Sarnane juurdepĂ€su piiramismehhanism takistab privileegide tĂ”stmise rĂŒnnakute toimumist. Rollid on sisse kirjutatud RollipĂ”hise JuurdepÀÀsu Kontrolli (RBAC) turvamudelisse, mida kasutatakse SELinuxis.
  • TĂŒĂŒbid — Type Enforcementi loendi atribuut, mis mÀÀratakse objektile ja mÀÀrab, kes sellele juurde pÀÀseb. See sarnaneb domeeni mÀÀratlemisele, vĂ€lja arvatud see, et domeen kehtib protsessile, samas kui tĂŒĂŒp kehtib elementide, nagu kataloogid, failid, soketid jne, kohta.
  • Subjektid ja objektid — Protsessid on subjektid ja töötavad kindlas kontekstis vĂ”i turva domeenis. OperatsioonisĂŒsteemi ressursid: failid, kataloogid, soketid jne, on objektid, millele mÀÀratakse kindel tĂŒĂŒp, teisisĂ”nu - konfidentsiaalsustase.
  • SELinuxi poliitikad — SĂŒsteemi kaitsmiseks kasutab SELinux mitmesuguseid 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 ligi ainult teatud objektitĂŒĂŒpidele.

LSM ja SELinuxi arhitektuur

Hoolimata LSMi nimest ei ole nad tegelikult Linuxi laaditavad moodulid. Kuid nagu SELinux, on see otse integreeritud tuuma. Iga LSMi algkoodi muutmine nĂ”uab tuuma uue kompileerimist. Vastav valik peab olema tuuma seadetes sisse lĂŒlitatud, vastasel juhul ei aktiveerita LSMi koodi pĂ€rast kĂ€ivitamist. Kuid isegi sel juhul saab selle aktiivseks teha operatsioonisĂŒsteemi laadija valikuga.

Linuxi kaitsesĂŒsteemid
LSMi kontrollide virn

LSMil on tuuma peamistes funktsioonides konksud, mis vĂ”ivad olla kontrollide jaoks asjakohased. Üks LSMi peamine omadus on see, et need on korraldatud virna pĂ”himĂ”ttel. Nii jĂ€tkatakse standardsete kontrollide lĂ€biviimist ning iga LSMi kiht lisab vaid tĂ€iendavaid juhtimise ja kontrollimise elemente. See tĂ€hendab, et keeldumise tagasimineku vĂ”imalust ei ole. Kui rutiinsete DAC kontrollide tulemus on keeldumine, ei jĂ”ua juhtum isegi LSMi konksudeni, nagu on nĂ€idatud joonisel.

SELinux on laenanud Fluke'i teadusliku operatsioonisĂŒsteemi Flask'i turvaarhitektuuri, eriti minimaalsete privileegide printsiibi. Selle kontseptsiooni olemus, nagu nimigi ĂŒtleb, seisneb selles, et kasutajale vĂ”i protsessile antakse vaid need Ă”igused, mis on vajalikud kavandatud toimingute teostamiseks. See pĂ”himĂ”te realiseeritakse sundtĂŒĂŒbistamise kaudu, seega pĂ”hineb SELinuxi juurdepÀÀsu kontroll domeeni => tĂŒĂŒbi mudelil.

SundtĂŒĂŒbistamise tĂ”ttu on SELinuxil palju suuremad vĂ”imalused juurdepÀÀsu piiramiseks vĂ”rreldes traditsioonilise DAC mudeliga, mida kasutatakse Unix/Linux operatsioonisĂŒsteemides. NĂ€iteks on vĂ”imalik piirata vĂ”rgupordi numbrit, mida ftp-server kuuleb, lubada failide kirjutamist ja muutmist kindlas kaustas, kuid mitte nende kustutamist.

SELinuxi pÔhikomponendid on jÀrgmised:

  • Poliitika jĂ”ustamise server — Peamine mehhanism juurdepÀÀsu kontrollimise organiseerimiseks.
  • SĂŒsteemi turvapoliitikate andmebaas.
  • Koostöö LSMi sĂŒndmuste pĂŒĂŒdjaga.
  • Selinuxfs — Pseudo-FS, sama nagu /proc ja mountitud /sys/fs/selinux. TĂ€idetakse dĂŒnaamiliselt Linuxi tuuma poolt töö ajal ja sisaldab faile, mis annavad teavet SELinuxi oleku kohta.
  • Access Vector Cache — TĂ€iendav mehhanism jĂ”udluse suurendamiseks.

Linuxi kaitsesĂŒsteemid
SELinuxi töö skeem

KÔik see töötab jÀrgmiselt.

  1. Mingil on subjekt, kes SELinux'i terminoloogiaga tegeledes, teeb objekti ĂŒle lubatud toimingu pĂ€rast DAC-i kontrolli, nagu nĂ€idatud ĂŒlemisel pildil. See operatsiooni sooritamise taotlus suundub LSM-i sĂŒndmuste pĂŒĂŒdmise sĂŒsteemi.
  2. Sealt edastatakse taotlus koos subjekti ja objekti turvakontekstiga SELinuxi Abstraction and Hook Logic moodulile, mis vastutab LSM-iga suhtlemise eest.
  3. Subjekti ja objekti juurdepÀÀsumeetmete otsustamiseks kasutatakse Policy Enforcement Serverit, mis saab andmeid SELinuxi AnHL-lt.
  4. Juhtimisotsuse tegemiseks, kas lubada vÔi keelduda, pöördub Policy Enforcement Server Access Vector Cache'i (AVC) poole, et leida kÔige sagedamini kasutatavad reeglid.
  5. Kui vastava reegli otsus ei leidu vahemÀlus, antakse taotlus edasi turvapoliitikate andmebaasi.
  6. Andmebaasist ja AVC-st leitud tulemus saadetakse Policy Enforcement Serverile tagasi.
  7. Kui leitud poliitika kooskÔlastub nÔutava toiminguga, siis toiming lubatakse. Vastasel juhul keelatakse toiming.

SELinuxi seadete haldamine

SELinux töötab ĂŒhes kolmest reĆŸiimist:

  • Enforcing — Turvapoliitikate range jĂ€rgimine.
  • Permissive — Piirangute rikkumised on lubatud, sellest tehakse pĂ€evikusse vastav mĂ€rge.
  • Disabled — Turvapoliitikad ei kehti.

SELinuxi reĆŸiimi vaatamiseks saab kasutada jĂ€rgmist kĂ€sku.

[admin@server ~]$ getenforce
Permissive

ReĆŸiimi muutmine enne taaskĂ€ivitamist, nĂ€iteks seadistamine 'enforcing' vĂ”i 1. Parameetrile 'permissive' vastab numbriline kood 0.

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

ReĆŸiimi saab muuta ka faili muutmisega:

[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=kohustuslik
# 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'ist on see, et operatsioonisĂŒsteemi kĂ€ivitamisel seadistatakse SELinuxi reĆŸiim vastavalt konfiguratsioonifaili parameetri SELINUX vÀÀrtusele. Lisaks, muudatused enforcing disabled jĂ”ustuvad ainult faili /etc/selinux/config muutmise kaudu ja pĂ€rast taaskĂ€ivitamist.

Kohese oleku aruande vaatamiseks:

[admin@server ~]$ sestatus

SELinuxi olek: lubatud
SELinuxfs mount: /sys/fs/selinux
SELinuxi juurdirektori: /etc/selinux
Laetud poliitika nimi: suunatud
Praegune reĆŸiim: lubav
ReĆŸiim konfiguratsioonifailist: sundiv
Poliitika MLS olek: lubatud
Poliitika deny_unknown olek: lubatud
Maksimaalne kernelipoliitika versioon: 31

SELinuxi attribuutide 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

VÔrreldes tavalise ls -l vÀljundiga on siin mitmeid tÀiendavaid valdkondi jÀrgmises formaadis:

:::

Viimane vÀli tÀhistab midagi sarnast salastatusele ja koosneb kahe elemendi kombinatsioonist:

  • s0 — oluline, samuti kirjatatakse vahemiku lowlevel-highlevel
  • c0, c1
 c1023 — kategooria.

LigipÀÀsu ĐșĐŸĐœŃ„ĐžĐłŃƒŃ€Đ°Ń†ĐžĐž muutmine

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

[admin@server ~]$ semodule -l | wc -l # KÔik moodulite nimekiri
408
[admin@server ~]$ semodule -e abrt # aktiveerimine - mooduli aktiveerimine
[admin@server ~]$ semodule -d accountsd # deaktiveerimine - mooduli vĂ€ljalĂŒlitamine
[admin@server ~]$ semodule -r avahi # eemaldamine - mooduli eemaldamine

Esimene kĂ€sk semanage login seob SELinuxi kasutaja operatsioonisĂŒsteemi kasutajaga, teine annab nimekirja. LĂ”puks eemaldab viimane kĂ€sk valiku -r SELinuxi kasutajate kaardistuse kustutamiseks OS konto peale. MLS/MCS Range'i vÀÀrtuste sĂŒntaks on selgitatud eelnevas jaotis.

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

Sisesta Nimi SELinux Kasutaja MLS/MCS Ulatus 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 kaardistamise haldamiseks.

[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

KĂ€sku parameetrid:

  • -a lisada kasutajate ja rollide vastavussuhe;
  • -l kasutajate ja rollide vastavussuhte nimekiri;
  • -d eemaldada kasutajate ja rollide vastavussuhe;
  • -R rollide nimekiri, mis on kasutajaga seotud;

Failid, pordid ja boolean vÀÀrtused

Iga SELinux moodul annab failide mÀrgistamise reeglite komplekti, kuid vajadusel saab lisada ka oma reeglid. NÀiteks soovime anda veebi serverile 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 uusi mĂ€rgistamisreegleid, teine aga lĂ€htestab ehk mÀÀrab failide tĂŒĂŒbid vastavalt kehtivatele reeglitele.

Sarnaselt on TCP/UDP sadamad mÀrgistatud nii, et ainult vastavad teenused saavad neid kuulata. NÀiteks, et veebi server saaks kuulata porti 8080, tuleb kÀivitada kÀsk.

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

Suur hulk SELinux mooduleid sisaldab parameetreid, mis saavad vÔtta loogilisi vÀÀrtusi. KÔiki selliseid parameetreid saab nÀha kÀsklusega getsebool -a. Loogilisi vÀÀrtuseid 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, ligipÀÀs Pgadmin-web liidesele

Vaatame praktika nÀidet, oleme installinud RHEL 7.6 pgadmin4-web PostgreSQL andmebaasi haldamiseks. Oleme lÀbinud vÀikese teekonna pg_hba.conf, postgresql.conf ja config_local.py seadistamisega, mÀÀranud kaustade Ôigused, installinud pip'i kaudu puuduolevad Python moodulid. KÔik on valmis, kÀivitame ja saame 500 Internal Server error.

Linuxi kaitsesĂŒsteemid

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

[timestamp] [core:notice] [pid 23689] SELinux poliitika lubatud; 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] NÄPUNDA: VĂ”ib olla vajalik kĂ€sitsi seadistada Ă”igused
[timestamp] [wsgi:error] [pid 23690] \/var\/lib\/pgadmin, et lubada apache'il sellele kirjutada.

Selles kohas tekib enamikul Linuxi administraatoritest tugev kiusatus kÀivitada setenforce 0 ja asi ongi lahendatud. Tuleb tunnistada, et esmakordselt tegingi nii. See on muidugi ka lahendus, kuid mitte parim.

Vaatamata SELinux'i keerukusele vĂ”ib see olla kasutajasĂ”bralik. Piisab setroubleshoot paketi installimisest ja sĂŒsteemi logi vaatamisest.

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

Pange tĂ€hele, et teenus auditd tuleb taaskĂ€ivitada just nii, mitte systemctl kaudu, hoolimata systemd olemasolust operatsioonisĂŒsteemis. SĂŒsteemi logis nĂ€idatakse mitte ainult blokeerimise fakti, vaid ka pĂ”hjust ja viisi, kuidas keeldu ĂŒletada.

Linuxi kaitsesĂŒsteemid

KÀivitame need kÀsud:

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

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

Linuxi kaitsesĂŒsteemid

Linuxi kaitsesĂŒsteemid

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster