Sistemes de seguretat Linux

Una de les raons de l'enorme èxit del sistema operatiu Linux en dispositius i servidors mòbils incrustats és el grau de seguretat bastant alt del nucli, els serveis i les aplicacions relacionats. Però si fes una ullada més de prop a l'arquitectura del nucli Linux, llavors és impossible trobar-hi un quadrat responsable de la seguretat com a tal. On s'amaga el subsistema de seguretat de Linux i en què consisteix?

Antecedents sobre els mòduls de seguretat de Linux i SELinux

Security Enhanced Linux és un conjunt de regles i mecanismes d'accés basats en models d'accés obligatoris i basats en rols per protegir els sistemes Linux de possibles amenaces i corregir les deficiències del Control d'Accés Discrecional (DAC), el sistema de seguretat tradicional Unix. El projecte es va originar a les entranyes de l'Agència de Seguretat Nacional dels EUA, i va ser desenvolupat directament principalment pels contractistes Secure Computing Corporation i MITRE, així com diversos laboratoris d'investigació.

Sistemes de seguretat Linux
Mòduls de seguretat de Linux

Linus Torvalds va fer una sèrie de comentaris sobre nous desenvolupaments de la NSA perquè poguessin ser inclosos al nucli principal de Linux. Va descriure un entorn general, amb un conjunt d'interceptors per controlar les operacions amb objectes i un conjunt de determinats camps de protecció en estructures de dades del nucli per emmagatzemar els atributs corresponents. Aquest entorn pot ser utilitzat per mòduls del nucli carregables per implementar qualsevol model de seguretat desitjat. LSM va entrar completament al nucli Linux v2.6 el 2003.

El marc LSM inclou camps de guàrdia en estructures de dades i crides a funcions d'intercepció en punts crítics del codi del nucli per manipular-los i realitzar control d'accés. També afegeix una funcionalitat per registrar mòduls de seguretat. La interfície /sys/kernel/security/lsm conté una llista de mòduls actius al sistema. Els ganxos LSM s'emmagatzemen en llistes que es criden en l'ordre especificat a CONFIG_LSM. La documentació detallada sobre els ganxos s'inclou al fitxer de capçalera include/linux/lsm_hooks.h.

El subsistema LSM va permetre completar la integració completa de SELinux amb la mateixa versió del nucli de Linux estable v2.6. Gairebé immediatament, SELinux es va convertir en l'estàndard de facto per a un entorn Linux segur i es va incloure a les distribucions més populars: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Glossari SELinux

  • Identitat — L'usuari de SELinux no és el mateix que l'identificador d'usuari Unix/Linux habitual; poden coexistir al mateix sistema, però en essència són completament diferents. Cada compte estàndard de Linux pot correspondre a un o més a SELinux. La identitat de SELinux forma part del context de seguretat general, que determina a quins dominis podeu unir-vos i no.
  • dominis - A SELinux, un domini és el context d'execució d'un subjecte, és a dir, un procés. El domini determina directament l'accés que té un procés. Un domini és bàsicament una llista de què poden fer els processos o què pot fer un procés amb diferents tipus. Alguns exemples de dominis són sysadm_t per a l'administració del sistema i user_t, que és un domini d'usuari normal sense privilegis. El sistema init s'executa al domini init_t i el procés named s'executa al domini named_t.
  • Funcions — El que serveix d'intermediari entre dominis i usuaris de SELinux. Els rols determinen a quins dominis pot pertànyer un usuari i a quins tipus d'objectes pot accedir. Aquest mecanisme de control d'accés evita l'amenaça d'atacs d'escalada de privilegis. Els rols s'escriuen al model de seguretat de control d'accés basat en rols (RBAC) utilitzat a SELinux.
  • Tipus — Un atribut de llista d'aplicació de tipus que s'assigna a un objecte i determina qui hi pot accedir. Similar a la definició de domini, excepte que el domini s'aplica a un procés i el tipus s'aplica a objectes com ara directoris, fitxers, sòcols, etc.
  • Subjectes i objectes - Els processos són subjectes i s'executen en un context concret, o domini de seguretat. Els recursos del sistema operatiu: fitxers, directoris, sòcols, etc., són objectes als quals se'ls assigna un determinat tipus, és a dir, un nivell de privadesa.
  • Polítiques de SELinux — SELinux utilitza una varietat de polítiques per protegir el sistema. La política SELinux defineix l'accés dels usuaris als rols, els rols als dominis i els dominis als tipus. En primer lloc, l'usuari està autoritzat per obtenir un rol, després el rol està autoritzat per accedir als dominis. Finalment, un domini només pot tenir accés a determinats tipus d'objectes.

Arquitectura LSM i SELinux

Malgrat el nom, els LSM no solen ser mòduls de Linux carregables. Tanmateix, com SELinux, està directament integrat al nucli. Qualsevol canvi al codi font de LSM requereix una nova compilació del nucli. L'opció corresponent s'ha d'habilitar a la configuració del nucli, en cas contrari, el codi LSM no s'activarà després de l'arrencada. Però fins i tot en aquest cas, es pot activar mitjançant l'opció del carregador d'arrencada del sistema operatiu.

Sistemes de seguretat Linux
Pila de comprovació LSM

LSM està equipat amb ganxos a les funcions bàsiques del nucli que poden ser rellevants per a les comprovacions. Una de les característiques principals dels LSM és que estan apilats. Així, les comprovacions estàndard encara es realitzen i cada capa de LSM només afegeix controls i controls addicionals. Això vol dir que la prohibició no es pot revocar. Això es mostra a la figura; si el resultat de les comprovacions rutinàries de DAC és un error, la qüestió ni tan sols arribarà als ganxos LSM.

SELinux adopta l'arquitectura de seguretat Flask del sistema operatiu de recerca Fluke, en particular el principi de privilegis mínims. L'essència d'aquest concepte, com el seu nom indica, és concedir a l'usuari o tramitar només aquells drets que siguin necessaris per dur a terme les accions previstes. Aquest principi s'implementa mitjançant l'escriptura d'accés forçat, per tant el control d'accés a SELinux es basa en el model de domini => tipus.

Gràcies a l'escriptura d'accés forçat, SELinux té capacitats de control d'accés molt més grans que el model DAC tradicional utilitzat als sistemes operatius Unix/Linux. Per exemple, podeu limitar el número de port de xarxa al qual es connectarà el servidor ftp, permetre escriure i canviar fitxers en una carpeta determinada, però no eliminar-los.

Els components principals de SELinux són:

  • Servidor d'aplicació de polítiques — El mecanisme principal per organitzar el control d'accés.
  • Base de dades de polítiques de seguretat del sistema.
  • Interacció amb l'interceptor d'esdeveniments LSM.
  • Selinuxfs - Pseudo-FS, el mateix que /proc i muntat a /sys/fs/selinux. Emplenat dinàmicament pel nucli de Linux en temps d'execució i que contenen fitxers que contenen informació d'estat de SELinux.
  • Accediu a la memòria cau de vectors — Un mecanisme auxiliar per augmentar la productivitat.

Sistemes de seguretat Linux
Com funciona SELinux

Tot funciona així.

  1. Un determinat subjecte, en termes de SELinux, realitza una acció permesa sobre un objecte després d'una comprovació DAC, tal com es mostra a la imatge superior. Aquesta sol·licitud per realitzar una operació va a l'interceptor d'esdeveniments LSM.
  2. A partir d'aquí, la sol·licitud, juntament amb el context de seguretat del subjecte i l'objecte, es passa al mòdul SELinux Abstraction and Hook Logic, que s'encarrega d'interaccionar amb el LSM.
  3. L'autoritat de presa de decisions sobre l'accés d'un subjecte a un objecte és el Policy Enforcement Server i rep dades de SELinux AnHL.
  4. Per prendre decisions sobre l'accés o la denegació, Policy Enforcement Server recorre al subsistema de memòria cau Access Vector Cache (AVC) per obtenir les regles més utilitzades.
  5. Si no es troba una solució per a la regla corresponent a la memòria cau, la sol·licitud es passa a la base de dades de polítiques de seguretat.
  6. El resultat de la cerca de la base de dades i l'AVC es retorna al servidor d'aplicació de polítiques.
  7. Si la política trobada coincideix amb l'acció sol·licitada, l'operació està permesa. En cas contrari, l'operació està prohibida.

Gestió de la configuració de SELinux

SELinux funciona en un dels tres modes:

  • Compliment - Adhesió estricta a les polítiques de seguretat.
  • Permisiu: es permet la violació de les restriccions; es fa una nota corresponent al diari.
  • Desactivat: les polítiques de seguretat no estan vigents.

Podeu veure en quin mode es troba SELinux amb l'ordre següent.

[admin@server ~]$ getenforce
Permissive

Canviar el mode abans de reiniciar, per exemple, establir-lo a l'aplicació, o 1. El paràmetre permissiu correspon al codi numèric 0.

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

També podeu canviar el mode editant el fitxer:

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

La diferència amb setenfoce és que quan s'inicia el sistema operatiu, el mode SELinux s'establirà d'acord amb el valor del paràmetre SELINUX al fitxer de configuració. A més, els canvis a l'aplicació de <=> desactivats només tenen efecte editant el fitxer /etc/selinux/config i després d'un reinici.

Consulteu un breu informe d'estat:

[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 veure els atributs de SELinux, algunes utilitats estàndard utilitzen el paràmetre -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

En comparació amb la sortida normal de ls -l, hi ha diversos camps addicionals amb el format següent:

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

L'últim camp denota alguna cosa així com una classificació de seguretat i consta d'una combinació de dos elements:

  • s0 - significació, també escrit com a interval de nivell baix-nivell alt
  • c0, c1... c1023 - categoria.

Canvi de configuració d'accés

Utilitzeu el semòdul per carregar, afegir i eliminar mòduls 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 - удалить модуль

Primer equip sessió setmanal connecta l'usuari SELinux amb l'usuari del sistema operatiu, el segon mostra una llista. Finalment, l'última ordre amb l'interruptor -r elimina el mapatge dels usuaris de SELinux als comptes del sistema operatiu. A la secció anterior hi ha una explicació de la sintaxi dels valors de l'interval MLS/MCS.

[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

Equip usuari de setmana s'utilitza per gestionar mapes entre usuaris i rols de SELinux.

[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

Paràmetres de comanda:

  • -afegiu una entrada de mapatge de rol personalitzada;
  • -l llista d'usuaris i rols coincidents;
  • -d suprimeix l'entrada de mapatge de rols d'usuari;
  • -R llista de rols adjunts a l'usuari;

Fitxers, ports i valors booleans

Cada mòdul SELinux proporciona un conjunt de regles d'etiquetatge de fitxers, però també podeu afegir les vostres pròpies regles si cal. Per exemple, volem que el servidor web tingui drets d'accés a la carpeta /srv/www.

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

La primera ordre registra noves regles de marcatge, i la segona restableix, o més aviat estableix, els tipus de fitxer d'acord amb les regles actuals.

Així mateix, els ports TCP/UDP estan marcats de manera que només els puguin escoltar els serveis adequats. Per exemple, perquè el servidor web escolti al port 8080, heu d'executar l'ordre.

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

Un nombre important de mòduls SELinux tenen paràmetres que poden prendre valors booleans. La llista completa d'aquests paràmetres es pot veure amb getsebool -a. Podeu canviar els valors booleans mitjançant 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

Taller, accedeix a la interfície web de Pgadmin

Vegem un exemple pràctic: vam instal·lar pgadmin7.6-web a RHEL 4 per administrar la base de dades PostgreSQL. Vam caminar una mica Cerca amb la configuració de pg_hba.conf, postgresql.conf i config_local.py, establiu els permisos de la carpeta, instal·leu els mòduls Python que falten de pip. Tot a punt, llancem i rebem 500 Error intern del servidor.

Sistemes de seguretat Linux

Comencem amb els típics sospitosos, comprovant /var/log/httpd/error_log. Hi ha algunes entrades interessants.

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

En aquest punt, la majoria dels administradors de Linux tindran una forta temptació d'executar setencorce 0, i això serà el final. Francament, ho vaig fer la primera vegada. Per descomptat, aquesta també és una sortida, però lluny de ser la millor.

Malgrat els dissenys complicats, SELinux pot ser fàcil d'utilitzar. Només cal que instal·leu el paquet setroubleshoot i visualitzeu el registre del sistema.

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

Tingueu en compte que el servei auditd s'ha de reiniciar d'aquesta manera i no utilitzant systemctl, malgrat la presència de systemd al sistema operatiu. Al registre del sistema s'indicarà no només el fet de bloquejar, sinó també el motiu i manera de superar la prohibició.

Sistemes de seguretat Linux

Executem aquestes ordres:

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

Comprovem l'accés a la pàgina web pgadmin4-web, tot funciona.

Sistemes de seguretat Linux

Sistemes de seguretat Linux

Font: www.habr.com

Afegeix comentari