Linux қауіпсіздік жүйелері

Енгізілген, мобильді құрылғылар мен серверлердегі Linux ОЖ-нің орасан зор табысқа жетуінің себептерінің бірі ядроның, тиісті қызметтер мен қосымшалардың қауіпсіздігінің айтарлықтай жоғары деңгейі болып табылады. Бірақ егер жақынырақ қараңыз Linux ядросының архитектурасына сәйкес келсе, онда қауіпсіздікке жауапты шаршыны табу мүмкін емес. Linux қауіпсіздік ішкі жүйесі қайда жасырылады және ол неден тұрады?

Linux қауіпсіздік модульдері мен SELinux туралы фон

Security Enhanced Linux — Linux жүйелерін ықтимал қауіптерден қорғауға және дәстүрлі Unix қауіпсіздік жүйесі дискрециялық қатынасты басқарудың (DAC) кемшіліктерін түзету үшін міндетті және рөлге негізделген қол жеткізу үлгілеріне негізделген ережелер мен қатынасу механизмдерінің жиынтығы. Жоба АҚШ-тың Ұлттық қауіпсіздік агенттігінде пайда болды және оны негізінен Secure Computing Corporation және MITER мердігерлері, сондай-ақ бірқатар зерттеу зертханалары тікелей әзірледі.

Linux қауіпсіздік жүйелері
Linux қауіпсіздік модульдері

Линус Торвальдс негізгі Linux ядросына қосылуы үшін жаңа NSA әзірлемелеріне қатысты бірқатар түсініктемелер жасады. Ол объектілермен операцияларды басқаруға арналған интерцепторлар жиынтығы және сәйкес атрибуттарды сақтау үшін ядро ​​деректерінің құрылымдарындағы белгілі бір қорғаныс өрістерінің жиынтығы бар жалпы ортаны сипаттады. Бұл ортаны кез келген қажетті қауіпсіздік үлгісін іске асыру үшін жүктелетін ядро ​​модульдері пайдалана алады. LSM Linux ядросының v2.6 нұсқасына 2003 жылы толығымен кірді.

LSM құрылымы деректер құрылымдарындағы қорғау өрістерін және оларды манипуляциялау және қол жеткізуді басқаруды орындау үшін ядро ​​кодының маңызды нүктелеріндегі ұстау функцияларына шақыруды қамтиды. Ол сондай-ақ қауіпсіздік модульдерін тіркеуге арналған функцияларды қосады. /sys/kernel/security/lsm интерфейсі жүйедегі белсенді модульдердің тізімін қамтиды. LSM ілмектері CONFIG_LSM ішінде көрсетілген ретпен шақырылатын тізімдерде сақталады. Ілмектерге қатысты толық құжаттама include/linux/lsm_hooks.h тақырып файлында қамтылған.

LSM ішкі жүйесі тұрақты Linux ядросының v2.6 нұсқасымен SELinux толық интеграциясын аяқтауға мүмкіндік берді. Бірден дерлік SELinux қауіпсіз Linux ортасының іс жүзінде стандарты болды және ең танымал дистрибутивтерге қосылды: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux глоссарийі

  • Идентификация — SELinux пайдаланушысы әдеттегі Unix/Linux пайдаланушы идентификаторымен бірдей емес; олар бір жүйеде бірге өмір сүре алады, бірақ мәні бойынша мүлдем басқа. Әрбір стандартты Linux тіркелгісі SELinux жүйесінде біреуіне немесе бірнешеуіне сәйкес келуі мүмкін. SELinux идентификациясы жалпы қауіпсіздік контекстінің бөлігі болып табылады, ол қай домендерге қосыла алатыныңызды және қосыла алмайтыныңызды анықтайды.
  • Домендер - SELinux-те домен субъектінің, яғни процестің орындау контексі болып табылады. Домен процеске қол жеткізуді тікелей анықтайды. Домен негізінен не істей алатын процестердің немесе процесс әртүрлі түрлермен не істей алатынының тізімі болып табылады. Домендердің кейбір мысалдары жүйе әкімшілігіне арналған sysadm_t және қалыпты артықшылықсыз пайдаланушы домені болып табылатын user_t болып табылады. Init жүйесі init_t доменінде жұмыс істейді, ал аталған процесс name_t доменінде жұмыс істейді.
  • Рөлдер — Домендер мен SELinux пайдаланушылары арасында делдал ретінде қызмет етеді. Рөлдер пайдаланушының қандай домендерге жататынын және қандай нысандар түрлеріне қол жеткізе алатынын анықтайды. Бұл қол жеткізуді басқару механизмі артықшылықты күшейту шабуылдарының қаупін болдырмайды. Рөлдер SELinux жүйесінде қолданылатын рөлге негізделген қатынасты басқару (RBAC) қауіпсіздік үлгісіне жазылған.
  • Түрлері — Нысанға тағайындалған және оған кім қол жеткізе алатынын анықтайтын Type Enforcement тізімінің төлсипаты. Домен анықтамасына ұқсас, тек домен процеске қолданылады және түрі каталогтар, файлдар, ұялар және т.б. сияқты нысандарға қолданылады.
  • Субъектілер мен объектілер - Процестер субъектілер болып табылады және белгілі бір контексте немесе қауіпсіздік доменінде орындалады. Операциялық жүйе ресурстары: файлдар, каталогтар, розеткалар және т.б. белгілі бір типке, басқаша айтқанда, құпиялылық деңгейіне тағайындалған объектілер болып табылады.
  • SELinux саясаттары — SELinux жүйені қорғау үшін әртүрлі саясаттарды пайдаланады. SELinux саясаты пайдаланушылардың рөлдерге, рөлдердің домендерге және домендердің түрлерге қатынасын анықтайды. Біріншіден, пайдаланушы рөлді алуға рұқсат алады, содан кейін рөлге домендерге кіру рұқсаты беріледі. Соңында, домен тек белгілі бір нысандар түрлеріне қол жеткізе алады.

LSM және SELinux архитектурасы

Атауға қарамастан, LSMs әдетте жүктелетін Linux модульдері емес. Дегенмен, SELinux сияқты, ол тікелей ядроға біріктірілген. LSM бастапқы кодына кез келген өзгерту ядроның жаңа компиляциясын қажет етеді. Ядро параметрлерінде сәйкес опцияны қосу керек, әйтпесе LSM коды жүктелгеннен кейін белсендірілмейді. Бірақ бұл жағдайда да оны OS жүктеуші опциясы қосуға болады.

Linux қауіпсіздік жүйелері
LSM тексеру стегі

LSM негізгі ядро ​​функцияларындағы ілмектермен жабдықталған, олар тексеруге қатысты болуы мүмкін. LSM-тің негізгі ерекшеліктерінің бірі - олардың жинақталған болуы. Осылайша, стандартты тексерулер әлі де орындалады және LSM әрбір қабаты тек қосымша басқару элементтері мен басқару элементтерін қосады. Бұл тыйымды кері қайтару мүмкін емес дегенді білдіреді. Бұл суретте көрсетілген; егер әдеттегі DAC тексерулерінің нәтижесі сәтсіз болса, онда мәселе LSM ілмектеріне де жетпейді.

SELinux Fluke зерттеу операциялық жүйесінің Flask қауіпсіздік архитектурасын, атап айтқанда, ең аз артықшылықтар принципін қабылдайды. Бұл концепцияның мәні, аты айтып тұрғандай, пайдаланушыға көзделген әрекеттерді орындау үшін қажетті құқықтарды ғана беру немесе өңдеу болып табылады. Бұл принцип мәжбүрлеп қол жеткізуді теру арқылы жүзеге асырылады, осылайша SELinux жүйесіндегі қатынасты басқару => типті домен үлгісіне негізделген.

Мәжбүрлеп қол жеткізуді терудің арқасында SELinux жүйесінде Unix/Linux операциялық жүйелерінде қолданылатын дәстүрлі DAC үлгісіне қарағанда әлдеқайда үлкен қол жеткізуді басқару мүмкіндіктері бар. Мысалы, ftp сервері қосылатын желі портының нөмірін шектей аласыз, белгілі бір қалтадағы файлдарды жазуға және өзгертуге рұқсат бере аласыз, бірақ оларды жоймайсыз.

SELinux негізгі компоненттері:

  • Саясатты орындау сервері — Қол жеткізуді басқаруды ұйымдастырудың негізгі механизмі.
  • Жүйелік қауіпсіздік саясатының деректер базасы.
  • LSM оқиғасының интерцепторымен әрекеттесу.
  • Selinuxfs - Pseudo-FS, /proc сияқты және /sys/fs/selinux ішінде орнатылған. Орындалу уақытында Linux ядросымен динамикалық түрде толтырылған және құрамында SELinux күй ақпараты бар файлдар бар.
  • Векторлық кэшке кіру — Еңбек өнімділігін арттырудың қосалқы механизмі.

Linux қауіпсіздік жүйелері
SELinux қалай жұмыс істейді

Мұның бәрі осылай жұмыс істейді.

  1. Белгілі бір субъект, SELinux терминдерінде, жоғарғы суретте көрсетілгендей, DAC тексеруінен кейін нысанда рұқсат етілген әрекетті орындайды. Бұл әрекетті орындауға сұрау LSM оқиғасын ұстағышқа өтеді.
  2. Сол жерден сұрау тақырып пен нысанның қауіпсіздік контекстімен бірге LSM-мен әрекеттесу үшін жауап беретін SELinux абстракция және ілмек логикалық модуліне жіберіледі.
  3. Субъектінің объектіге қол жеткізуіне қатысты шешім қабылдау органы саясатты орындау сервері болып табылады және ол SELinux AnHL деректерін алады.
  4. Қол жеткізу немесе бас тарту туралы шешім қабылдау үшін Саясатты орындау сервері жиі қолданылатын ережелер үшін Access Vector Cache (AVC) кэштеу ішкі жүйесіне жүгінеді.
  5. Сәйкес ереженің шешімі кэште табылмаса, сұрау қауіпсіздік саясатының дерекқорына жіберіледі.
  6. Дерекқордан және AVC іздеу нәтижесі саясатты орындау серверіне қайтарылады.
  7. Табылған саясат сұралған әрекетке сәйкес келсе, операцияға рұқсат етіледі. Әйтпесе, операцияға тыйым салынады.

SELinux параметрлерін басқару

SELinux үш режимнің бірінде жұмыс істейді:

  • Күштеу - қауіпсіздік саясаттарын қатаң сақтау.
  • Рұқсат етуші - шектеулерді бұзуға жол беріледі, журналда тиісті жазба жасалады.
  • Өшірілген — қауіпсіздік саясаттары күшінде емес.

SELinux қандай режимде екенін келесі пәрмен арқылы көруге болады.

[admin@server ~]$ getenforce
Permissive

Қайта жүктеу алдында режимді өзгерту, мысалы, оны орындауға орнату немесе 1. Рұқсат етуші параметр 0 сандық кодына сәйкес келеді.

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

Сондай-ақ, файлды өңдеу арқылы режимді өзгертуге болады:

[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=мақсат

setenfoce айырмашылығы операциялық жүйе жүктелген кезде SELinux режимі конфигурация файлындағы SELINUX параметрінің мәніне сәйкес орнатылады. Оған қоса, <=> өшірілген күшіне енгізуге өзгертулер /etc/selinux/config файлын өңдеу және қайта жүктеуден кейін ғана күшіне енеді.

Қысқаша күй есебін көру:

[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

SELinux атрибуттарын көру үшін кейбір стандартты утилиталар -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

ls -l қалыпты шығысымен салыстырғанда келесі пішімде бірнеше қосымша өрістер бар:

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

Соңғы өріс қауіпсіздік классификациясы сияқты нәрсені білдіреді және екі элементтің комбинациясынан тұрады:

  • s0 – мәнділік, сонымен қатар төменгі-жоғары деңгей аралығы ретінде жазылады
  • c0, c1… c1023 - санаты.

Қол жеткізу конфигурациясын өзгерту

SELinux модульдерін жүктеу, қосу және жою үшін semodule пайдаланыңыз.

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

Бірінші команда логинді басқару SELinux пайдаланушысын операциялық жүйе пайдаланушысына қосады, екіншісі тізімді көрсетеді. Соңында, -r қосқышы бар соңғы пәрмен SELinux пайдаланушыларының ОЖ тіркелгілерімен салыстыруын жояды. 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

команда semanage пайдаланушысы 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

Команда параметрлері:

  • - теңшелетін рөлді салыстыру жазбасын қосу;
  • -l сәйкес пайдаланушылар мен рөлдердің тізімі;
  • -d пайдаланушы рөлін салыстыру жазбасын жою;
  • -R пайдаланушыға тіркелген рөлдердің тізімі;

Файлдар, порттар және логикалық мәндер

Әрбір SELinux модулі файлдарды белгілеу ережелерінің жинағын қамтамасыз етеді, бірақ қажет болса, өз ережелеріңізді де қоса аласыз. Мысалы, веб-сервердің /srv/www қалтасына қатынасу құқығы болуын қалаймыз.

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

Бірінші пәрмен жаңа таңбалау ережелерін тіркейді, ал екіншісі ағымдағы ережелерге сәйкес файл түрлерін қалпына келтіреді, дәлірек айтсақ орнатады.

Сол сияқты, TCP/UDP порттары тек тиісті қызметтер оларды тыңдай алатындай етіп белгіленеді. Мысалы, веб-сервер 8080 портында тыңдау үшін пәрменді орындау керек.

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

SELinux модульдерінің айтарлықтай саны логикалық мәндерді қабылдай алатын параметрлерге ие. Мұндай параметрлердің толық тізімін getsebool -a көмегімен көруге болады. Логикалық мәндерді 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

Семинар, Pgadmin-веб интерфейсіне қол жеткізіңіз

Практикалық мысалды қарастырайық: PostgreSQL дерекқорын басқару үшін RHEL 7.6 жүйесінде pgadmin4-web орнаттық. Біз аздап жүрдік іздеу pg_hba.conf, postgresql.conf және config_local.py параметрлерімен қалта рұқсаттарын орнатыңыз, пиптен жетіспейтін Python модульдерін орнатыңыз. Барлығы дайын, біз іске қосамыз және қабылдаймыз 500 Ішкі сервер қатесі.

Linux қауіпсіздік жүйелері

Біз /var/log/httpd/error_log тексеретін әдеттегі күдіктілерден бастаймыз. Онда қызықты жазбалар бар.

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

Осы кезде көптеген Linux әкімшілері setencorce 0 іске қосуға қатты құмар болады және бұл оның соңы болады. Шынымды айтсам, мен мұны бірінші рет жасадым. Бұл, әрине, шығудың жолы, бірақ ең жақсыдан алыс.

Қолайсыз дизайнға қарамастан, SELinux пайдаланушыға ыңғайлы болуы мүмкін. Тек ақаулықтарды жою бумасын орнатып, жүйе журналын қараңыз.

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

Операциялық жүйеде systemd бар болғанына қарамастан, auditd қызметін systemctl қолданбай, осылай қайта іске қосу керек екенін ескеріңіз. Жүйе журналында көрсетіледі блоктау фактісі ғана емес, себебі және тыйымды жеңу жолы.

Linux қауіпсіздік жүйелері

Біз мына командаларды орындаймыз:

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

Біз pgadmin4-web веб-бетіне кіруді тексереміз, бәрі жұмыс істейді.

Linux қауіпсіздік жүйелері

Linux қауіпсіздік жүйелері

Ақпарат көзі: www.habr.com

пікір қалдыру