Sistemi di sicurezza Linux

Unu di i mutivi di u tremendu successu di u Linux OS nantu à i dispositi mobili è i servitori incrustati hè u livellu abbastanza altu di sicurità di u kernel, servizii è applicazioni cunnessi. Ma si fighjate più vicinu à l'architettura di u kernel Linux, allora hè impussibile di truvà in questu un quadru rispunsevuli di a sicurità cum'è tali. Induve si nasconde u sottosistema di sicurezza Linux è in chì consiste?

Sfondate nantu à i Moduli di Sicurezza Linux è SELinux

Security Enhanced Linux hè un inseme di regule è di meccanismi d'accessu basati nantu à mudelli d'accessu obbligatori è basati nantu à u rolu per prutege i sistemi Linux da i potenziali minacce è corregge i difetti di u Controlu di Accessu Discretionary (DAC), u sistema tradiziunale di sicurezza Unix. U prughjettu urigginatu in l'intestini di l'Agenzia di Sicurezza Naziunale di i Stati Uniti, è hè statu sviluppatu direttamente principalmente da i cuntratturi Secure Computing Corporation è MITRE, è ancu una quantità di laboratori di ricerca.

Sistemi di sicurezza Linux
Moduli di sicurezza Linux

Linus Torvalds hà fattu una quantità di cumenti nantu à i novi sviluppi NSA per pudè esse inclusi in u kernel Linux principale. Discriva un ambiente generale, cù un inseme di interceptors per cuntrullà l'operazioni cù l'uggetti è un settore di certi campi protettivi in ​​strutture di dati di kernel per almacenà l'attributi currispundenti. Questu ambiente pò esse adupratu da i moduli di kernel caricabili per implementà qualsiasi mudellu di sicurità desideratu. LSM hà intrutu cumplettamente in u kernel Linux v2.6 in 2003.

U quadru LSM include campi di guardia in strutture di dati è chjama à funzioni di intercettazione in punti critichi in u codice di u kernel per manipulà è eseguisce u cuntrollu di l'accessu. Aghjunghje ancu funziunalità per registrà moduli di sicurezza. L'interfaccia /sys/kernel/security/lsm cuntene una lista di moduli attivi in ​​u sistema. I ganci LSM sò almacenati in listi chì sò chjamati in l'ordine specificatu in CONFIG_LSM. A documentazione dettagliata nantu à i ganci hè inclusa in u file header include/linux/lsm_hooks.h.

U subsistema LSM hà permessu di cumplettà l'integrazione completa di SELinux cù a stessa versione di u kernel Linux stabile v2.6. Quasi subitu, SELinux hè diventatu u standard de facto per un ambiente Linux sicuru è hè stata inclusa in e distribuzioni più populari: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Glossariu SELinux

  • Identità - L'utilizatore SELinux ùn hè micca u listessu cum'è l'identificatore di usu Unix / Linux; ponu coesiste in u stessu sistema, ma sò completamente diffirenti in essenza. Ogni contu Linux standard pò currisponde à unu o più in SELinux. L'identità SELinux hè parti di u cuntestu generale di sicurezza, chì determina quale domini pudete è ùn pò micca unisce.
  • Domini - In SELinux, un duminiu hè u cuntestu di esecuzione di un sughjettu, vale à dì un prucessu. U duminiu determina direttamente l'accessu chì un prucessu hà. Un duminiu hè basicamente una lista di ciò chì i prucessi ponu fà o ciò chì un prucessu pò fà cù diversi tipi. Certi esempi di domini sò sysadm_t per l'amministrazione di u sistema, è user_t chì hè un duminiu d'utilizatore normale senza privilegiu. U sistema init corre in u duminiu init_t, è u prucessu chjamatu in u duminiu named_t.
  • Ruoli - Ciò chì serve cum'è intermediariu trà domini è utilizatori SELinux. I roli determinanu à quali domini un utilizatore pò appartene è chì tipi d'uggetti ponu accede. Stu mecanismu di cuntrollu di l'accessu impedisce a minaccia di attacchi di escalazione di privilegi. I roli sò scritti in u mudellu di sicurezza di u Controlu di Accessu Basatu in Role (RBAC) utilizatu in SELinux.
  • Tipi - Un attributu di a lista di Enforcement Type chì hè assignatu à un oggettu è determina quale pò accede. Simile à a definizione di duminiu, salvu chì u duminiu s'applica à un prucessu, è u tipu s'applica à l'uggetti cum'è cartulari, schedarii, sockets, etc.
  • Sugetti è ogetti - Prucessi sò sugetti è curriri in un cuntestu specifichi, o duminiu di sicurità. Risorse di u sistema upirativu: schedarii, cartulari, sockets, etc., sò ogetti chì sò attribuiti un certu tipu, in altri palori, un livellu di privacy.
  • Politiche SELinux - SELinux usa una varietà di pulitiche per prutege u sistema. A pulitica SELinux definisce l'accessu di l'utilizatori à i roles, roles à i duminii, è i duminii à i tipi. Prima, l'utilizatore hè autorizatu à ottene un rolu, dopu u rolu hè autorizatu à accede à i domini. Infine, un duminiu pò avè accessu solu à certi tipi di oggetti.

LSM è l'architettura SELinux

Malgradu u nome, LSM ùn sò micca generalmente moduli Linux caricabili. Tuttavia, cum'è SELinux, hè direttamente integratu in u kernel. Ogni cambiamentu di u codice fonte LSM richiede una nova compilazione di u kernel. L'opzione currispondente deve esse attivata in i paràmetri di u kernel, altrimenti u codice LSM ùn serà micca attivatu dopu à u boot. Ma ancu in questu casu, pò esse attivatu da l'opzione di bootloader OS.

Sistemi di sicurezza Linux
LSM check stack

LSM hè dotatu di ganci in funzioni core di u core chì ponu esse rilevanti per i cuntrolli. Una di e caratteristiche principali di LSM hè chì sò stacked. Cusì, i cuntrolli standard sò sempre realizati, è ogni strata di LSM aghjunghjenu solu cuntrolli è cuntrolli supplementari. Questu significa chì a pruibizione ùn pò micca esse ritruvata. Questu hè mostratu in a figura; se u risultatu di i cuntrolli di rutina DAC hè un fallimentu, allora a materia ùn ghjunghjerà mancu à i ganci LSM.

SELinux adopta l'architettura di sicurezza Flask di u sistema operatore di ricerca Fluke, in particulare u principiu di u minimu privilegiu. L'essenza di stu cuncettu, cum'è u so nome suggerisce, hè di cuncede à l'utilizatori o di processà solu quelli diritti chì sò necessarii per realizà l'azzioni previste. Stu principiu hè implementatu cù u typing d'accessu furzatu, cusì u cuntrollu di l'accessu in SELinux hè basatu annantu à u duminiu => mudellu di tipu.

Grazie à a scrittura d'accessu forzatu, SELinux hà capacità di cuntrollu di accessu assai più grande cà u mudellu DAC tradiziunale utilizatu in i sistemi operativi Unix / Linux. Per esempiu, pudete limità u numeru di u portu di a rete chì u servitore ftp hà da cunnette, permette di scrive è cambià i schedari in un certu cartulare, ma micca di sguassà.

I cumpunenti principali di SELinux sò:

  • Servitore per l'applicazione di a pulitica - U mecanismu principale per urganizà u cuntrollu di l'accessu.
  • basa di dati di pulitica di sicurità di u sistema.
  • Interazzione cù l'interceptor di l'eventi LSM.
  • Selinuxfs - Pseudo-FS, uguale à /proc è muntatu in /sys/fs/selinux. Populatu dinamicamente da u kernel Linux in runtime è chì cuntenenu i fugliali chì cuntenenu l'infurmazioni di status SELinux.
  • Accessu Vector Cache - Un mecanismu ausiliariu per aumentà a produtividade.

Sistemi di sicurezza Linux
Cumu funziona SELinux

Tuttu travaglia cusì.

  1. Un certu sughjettu, in termini SELinux, esegue una azzione permessa nantu à un ughjettu dopu un cuntrollu DAC, cum'è mostra in a stampa superiore. Questa dumanda per fà una operazione va à l'interceptor di eventi LSM.
  2. Da quì, a dumanda, inseme cù u sughjettu è u cuntestu di sicurità di l'ughjettu, hè passatu à u modulu SELinux Abstraction and Hook Logic, chì hè rispunsevule per interagisce cù u LSM.
  3. L'autorità di decisione nantu à l'accessu di un sughjettu à un ughjettu hè u Servitore di Enforcement Policy è riceve dati da SELinux AnHL.
  4. Per piglià decisioni nantu à l'accessu o a negazione, u Servitore di Enforcement di Politica si rivolge à u subsistema di cache di Access Vector Cache (AVC) per e regule più usate.
  5. Se una suluzione per a regula currispondente ùn hè micca truvata in u cache, a dumanda hè trasmessa à a basa di dati di pulitica di sicurità.
  6. U risultatu di ricerca da a basa di dati è AVC hè tornatu à u Servitore di Enforcement Policy.
  7. Se a pulitica truvata currisponde à l'azzione dumandata, l'operazione hè permessa. Altrimenti, l'operazione hè pruibita.

Gestisce i paràmetri SELinux

SELinux opera in unu di trè modi:

  • Esecuzione - Aderenza stretta à e pulitiche di sicurità.
  • Permissivu - A violazione di e restrizioni hè permessa; una nota currispondente hè fatta in u ghjurnale.
  • Disabilitatu - Politiche di sicurezza ùn sò micca in vigore.

Pudete vede in quale modu SELinux hè in u cumandimu seguitu.

[admin@server ~]$ getenforce
Permissive

Cambià u modu prima di rebooting, per esempiu, mette in rispettu, o 1. U paràmetru permissive currisponde à u codice numericu 0.

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

Pudete ancu cambià u modu editendu u schedariu:

[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=destinazione

A diferenza cù setenfoce hè chì quandu u sistema upirativu boots, u modu SELinux serà stabilitu in cunfurmità cù u valore di u paràmetru SELINUX in u schedariu di cunfigurazione. Inoltre, i cambiamenti à l'infurzazione di <=> disattivati ​​sò solu in effettu editendu u schedariu /etc/selinux/config è dopu un reboot.

Vede un brevi rapportu di statutu:

[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

Per vede l'attributi SELinux, certi utilità standard utilizanu u paràmetru -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

Comparatu à l'output normale di ls -l, ci sò parechji campi supplementari in u formatu seguente:

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

L'ultimu campu denota qualcosa cum'è una classificazione di sicurità è hè custituitu da una cumminazione di dui elementi:

  • s0 - significatu, scrittu ancu cum'è intervallu lowlevel-highlevel
  • c0, c1... c1023 - categuria.

Cambia a cunfigurazione di l'accessu

Aduprate semodule per carricà, aghjunghje è caccià i moduli SELinux.

[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 - удалить модуль

Prima squadra settimana di login cunnette l'utente SELinux à l'utilizatore di u sistema operatore, u sicondu mostra una lista. Infine, l'ultimu cumandamentu cù u cambiamentu -r sguassate u mapping di l'utilizatori SELinux à i cunti OS. Una spiegazione di a sintassi per i valori di MLS / MCS Range hè in a sezione precedente.

[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

squadra utilizatore di settimana utilizatu per gestisce i mappings trà utilizatori SELinux è roli.

[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 di cumandamentu:

  • -a aghjunghje una entrata di mappatura di rolu persunalizata;
  • -l lista d'utilizatori è roli currispondenti;
  • -d sguassate l'entrata di mappatura di u rolu di l'utilizatori;
  • -R lista di roli attaccati à l'utilizatore;

File, Ports è Valori Booleani

Ogni modulu SELinux furnisce un inseme di regule di tagging di file, ma pudete ancu aghjunghje e vostre regule se necessariu. Per esempiu, vulemu chì u servitore web hà diritti d'accessu à u cartulare /srv/www.

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

U primu cumandamentu registra novi règuli di marcatura, è u sicondu resetta, o piuttostu, i tipi di schedari in cunfurmità cù e regule attuali.

In listessu modu, i porti TCP / UDP sò marcati in modu chì solu i servizii apprupriati ponu sente nantu à elli. Per esempiu, per chì u servitore web sente à u portu 8080, avete bisognu di eseguisce u cumandamentu.

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

Un numeru significativu di moduli SELinux anu paràmetri chì ponu piglià valori booleani. A lista sana di tali parametri pò esse vistu cù getsebool -a. Pudete cambià i valori booleani cù 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

Workshop, accede à l'interfaccia Pgadmin-web

Fighjemu un esempiu praticu: avemu installatu pgadmin7.6-web in RHEL 4 per amministrari a basa di dati PostgreSQL. Andemu un pocu ricerca cù i paràmetri di pg_hba.conf, postgresql.conf è config_local.py, stabilisce i permessi di u cartulare, installate i moduli Python mancanti da pip. Tuttu hè prontu, lanciamu è ricevemu 500 Errore di u Servitore Internu.

Sistemi di sicurezza Linux

Cuminciamu cù i suspettati tipici, cuntrollanu /var/log/httpd/error_log. Ci sò alcune entrate interessanti quì.

[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.

À questu puntu, a maiò parte di l'amministratori di Linux seranu assai tentati di eseguisce setencorce 0, è questu serà a fine. Francamente, aghju fattu questu a prima volta. Questu hè di sicuru ancu una manera di esce, ma luntanu da u megliu.

Malgradu i disinni ingombranti, SELinux pò esse user-friendly. Basta à stallà u pacchettu setroubleshoot è vede u log di u sistema.

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

Per piacè nutate chì u serviziu di auditd deve esse riavviatu in questu modu, è micca usendu systemctl, malgradu a presenza di systemd in u SO. In u logu di u sistema serà indicatu micca solu u fattu di bluccà, ma dinù u mutivu è manera di superà a pruibizione.

Sistemi di sicurezza Linux

Eseguimu questi cumandamenti:

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

Cuntrollamu l'accessu à a pagina web pgadmin4-web, tuttu funziona.

Sistemi di sicurezza Linux

Sistemi di sicurezza Linux

Source: www.habr.com

Add a comment