Xavfsizlik tizimlari Linux

Katta muvaffaqiyatning sabablaridan biri Linux O'rnatilgan, mobil qurilmalar va serverlardagi OT yadro, tegishli xizmatlar va ilovalar uchun ancha yuqori darajadagi xavfsizlikka ega. Lekin agar yaqinroq ko'rib chiqing yadro arxitekturasiga Linux, unda siz unda xavfsizlik uchun mas'ul bo'lgan katakchani topa olmaysiz. Xavfsizlik quyi tizimi qayerda yashiringan? Linux va u nimadan iborat?

Sana oldin Linux Xavfsizlik modullari va SELinux

Xavfsizlik kuchaytirildi Linux tizimlarni himoya qilish uchun majburiy va rolga asoslangan kirish modellariga asoslangan qoidalar va kirish mexanizmlari to'plamidir. Linux an'anaviy Unix xavfsizlik tizimi bo'lgan Diskretionary Access Control (DAC) ning potentsial tahdidlarga qarshi kurashish va kamchiliklarini tuzatish. Loyiha AQSh Milliy xavfsizlik agentligi doirasida boshlangan bo'lib, asosan Secure Computing Corporation va MITER pudratchilari, shuningdek, bir qator tadqiqot laboratoriyalari tomonidan ishlab chiqilgan.

Xavfsizlik tizimlari Linux
Linux Xavfsizlik modullari

Linus Torvalds NSA ning yangi ishlanmalari haqida bir qator izohlar berdi, shunda ular asosiy yadroga kiritilishi mumkin edi. LinuxU obyekt operatsiyalarini boshqarish uchun bir qator interceptorlar va tegishli atributlarni saqlash uchun yadro ma'lumotlar tuzilmalaridagi himoya maydonlari to'plamiga ega bo'lgan umumiy muhitni tasvirlab berdi. Keyin bu muhit yuklanadigan yadro modullari tomonidan istalgan xavfsizlik modelini amalga oshirish uchun ishlatilishi mumkin edi. LSM yadroga to'liq integratsiyalashgan. Linux 2003-yilda v2.6.

LSM ramkasi ma'lumotlar tuzilmalaridagi himoya maydonlarini va ularni boshqarish va kirishni boshqarish uchun yadro kodining muhim nuqtalarida ushlab turish funktsiyalariga qo'ng'iroqlarni o'z ichiga oladi. Shuningdek, u xavfsizlik modullarini ro'yxatdan o'tkazish uchun funksiyalarni qo'shadi. /sys/kernel/security/lsm interfeysi tizimdagi faol modullar ro'yxatini o'z ichiga oladi. LSM ilgaklari CONFIG_LSM da ko'rsatilgan tartibda chaqiriladigan ro'yxatlarda saqlanadi. Kancalar bo'yicha batafsil hujjatlar shu jumladan/linux/lsm_hooks.h sarlavha fayliga kiritilgan.

LSM quyi tizimi SE ning to'liq integratsiyasiga imkon berdiLinux barqaror yadroning bir xil versiyasi Linux v2.6. Darhol SELinux xavfsiz muhit uchun amalda standartga aylandi Linux va eng mashhur distribyutorlarning bir qismiga aylandi: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SE lug'atiLinux

  • Hisobga olish — SE foydalanuvchisiLinux odatiy Unix/ bilan bir xil emasLinux foydalanuvchi identifikatori, ular bir xil tizimda birga mavjud bo'lishi mumkin, ammo mohiyatan butunlay boshqacha. Har bir standart hisob Linux SE da bir yoki bir nechtasiga mos kelishi mumkinLinuxSE identifikatsiyasiLinux qaysi domenlarga kirish mumkin va qaysi domenlarga kirish mumkin emasligini belgilaydigan umumiy xavfsizlik kontekstining ajralmas qismidir.
  • Domenlar — Janubi-sharqdaLinux Domen - bu subyektning, ya'ni jarayonning bajarilish konteksti. Domen jarayonning kirish huquqini bevosita belgilaydi. Domen asosan jarayonning turli xil turlari bilan qanday jarayonlar bajarishi yoki qanday amallarni bajarishi mumkinligi ro'yxatidir. Domenlarning ba'zi misollari tizim boshqaruvi uchun sysadm_t va oddiy, imtiyozsiz foydalanuvchi domeni bo'lgan user_t. init tizimi init_t domenida, nomlangan jarayon esa named_t domenida ishlaydi.
  • Rollar — Domenlar va SE foydalanuvchilari o'rtasida vositachi bo'lib xizmat qiladigan narsaLinuxRollar foydalanuvchi qaysi domenlarga tegishli bo'lishi mumkinligini va qanday turdagi obyektlarga kirishi mumkinligini aniqlaydi. Ushbu kirishni boshqarish mexanizmi imtiyozlarni oshirish hujumlari tahdidining oldini oladi. Rollar SEda qo'llaniladigan Rolga asoslangan kirishni boshqarish (RBAC) xavfsizlik modeliga birlashtirilgan.Linux.
  • Turlari — Ob'ektga tayinlangan va unga kim kirishi mumkinligini aniqlaydigan Type Enforcement ro'yxati atributi. Domen ta'rifiga o'xshash, faqat domen jarayonga taalluqlidir va tur kataloglar, fayllar, rozetkalar va boshqalar kabi ob'ektlarga taalluqlidir.
  • Ob'ektlar va ob'ektlar - Jarayonlar sub'ektlardir va ma'lum bir kontekstda yoki xavfsizlik sohasida ishlaydi. Operatsion tizim resurslari: fayllar, kataloglar, rozetkalar va boshqalar ma'lum bir turdagi, boshqacha aytganda, maxfiylik darajasiga ega bo'lgan ob'ektlardir.
  • SE siyosatlariLinux - SE tizimini himoya qilish uchunLinux turli xil siyosatlardan foydalanadi. SE siyosatiLinux Foydalanuvchilarning rollarga, rollarga domenlarga va domenlarning turlarga kirishini belgilaydi. Avval foydalanuvchi rolga, keyin rolga domenlarga kirish huquqiga ega bo'ladi. Va nihoyat, domen faqat ma'lum obyekt turlariga kirish huquqiga ega bo'lishi mumkin.

LSM va SE arxitekturasiLinux

Nomiga qaramay, LSMlar aslida yuklanadigan modullar emas. LinuxBiroq, xuddi SE kabiLinux, u to'g'ridan-to'g'ri yadroga integratsiyalangan. LSM manba kodidagi har qanday o'zgarish yangi yadro kompilyatsiyasini talab qiladi. Tegishli parametr yadro sozlamalarida yoqilgan bo'lishi kerak, aks holda LSM kodi yuklashdan keyin faollashtirilmaydi. Biroq, bu holatda ham, uni OT yuklash vositasi opsiyasi orqali yoqish mumkin.

Xavfsizlik tizimlari Linux
LSM tekshirish to'plami

LSM yadro funktsiyalaridagi kancalar bilan jihozlangan bo'lib, ular tekshirish uchun tegishli bo'lishi mumkin. LSM larning asosiy xususiyatlaridan biri shundaki, ular stacked. Shunday qilib, standart tekshiruvlar hali ham bajariladi va LSM ning har bir qatlami faqat qo'shimcha boshqaruv va boshqaruv elementlarini qo'shadi. Bu shuni anglatadiki, taqiqni qaytarib bo'lmaydi. Bu rasmda ko'rsatilgan; agar muntazam DAC tekshiruvlari natijasi muvaffaqiyatsiz bo'lsa, u holda masala LSM ilgaklariga ham etib bormaydi.

SELinux Fluke tadqiqot operatsion tizimining Flask xavfsizlik arxitekturasini, xususan, eng kam imtiyoz tamoyilini qabul qildi. Ushbu kontseptsiyaning mohiyati, nomidan ko'rinib turibdiki, foydalanuvchiga yoki jarayonga faqat mo'ljallangan harakatni bajarish uchun zarur bo'lgan huquqlarni berishdir. Ushbu tamoyil majburiy kirishni yozish orqali amalga oshiriladi, shu bilan SEda kirish huquqlarini boshqaradi.Linux domen => tip modeliga asoslangan.

SE ga kirishni majburiy yozish tufayliLinux Unix OS/ da ishlatiladigan an'anaviy DAC modeliga qaraganda ancha muhimroq kirishni boshqarish imkoniyatlariga egaLinuxMasalan, siz FTP serveri tinglaydigan tarmoq port raqamini cheklashingiz mumkin, bu ma'lum bir papkadagi fayllarni yozish va o'zgartirishga ruxsat beradi, lekin ularni o'chirmaydi.

SE ning asosiy komponentlariLinux quyidagilar:

  • Siyosatni amalga oshirish serveri — Kirish nazoratini tashkil etishning asosiy mexanizmi.
  • Tizim xavfsizligi siyosati ma'lumotlar bazasi.
  • LSM hodisasi to'xtatuvchisi bilan o'zaro ta'sir.
  • Selinuxfs — /proc bilan bir xil va /sys/fs/selinux ichiga o'rnatilgan soxta FS. Yadro tomonidan dinamik ravishda to'ldirilgan. Linux ijro etish paytida va SE holati haqida ma'lumotga ega fayllarni o'z ichiga oladiLinux.
  • Vektor keshiga kirish — Hosildorlikni oshirishning yordamchi mexanizmi.

Xavfsizlik tizimlari Linux
SE operatsion sxemasiLinux

Hammasi shunday ishlaydi.

  1. SE nuqtai nazaridan ma'lum bir mavzuLinux, yuqoridagi rasmda ko'rsatilgandek, DAC tekshiruvidan so'ng obyektda ruxsat etilgan harakatni bajaradi. Operatsiyani bajarish uchun ushbu so'rov LSM hodisa tutuvchisiga uzatiladi.
  2. U yerdan so'rov, sub'ekt va obyektning xavfsizlik konteksti bilan birga, SE moduliga uzatiladi.Linux Abstraktsiya va Hook Logic, LSM bilan o'zaro ta'sir qilish uchun mas'ul.
  3. Ob'ektga sub'ektning kirish huquqi bo'yicha qaror qabul qilish vakolati Siyosatni amalga oshirish serveri bo'lib, u SE dan ma'lumotlarni oladi.Linux AnHL.
  4. Kirish yoki rad etish haqida qaror qabul qilish uchun Policy Enforment Server eng ko'p ishlatiladigan qoidalar uchun Access Vector Cache (AVC) keshlash quyi tizimiga murojaat qiladi.
  5. Agar keshda tegishli qoida uchun yechim topilmasa, so'rov xavfsizlik siyosati ma'lumotlar bazasiga o'tkaziladi.
  6. Ma'lumotlar bazasi va AVC qidiruv natijasi Policy Enforment Serverga qaytariladi.
  7. Agar topilgan siyosat so'ralgan amalga mos kelsa, operatsiyaga ruxsat beriladi. Aks holda, operatsiya taqiqlanadi.

SE sozlamalarini boshqarishLinux

SELinux uchta rejimdan birida ishlaydi:

  • Majburlash - xavfsizlik siyosatiga qat'iy rioya qilish.
  • Ruxsat beruvchi - cheklovlarni buzishga ruxsat beriladi, jurnalda tegishli yozuv qo'yiladi.
  • O'chirilgan - Xavfsizlik siyosatlari kuchga kirmaydi.

SE qaysi rejimda ekanligini ko'ringLinux Buni quyidagi buyruq bilan qilishingiz mumkin.

[admin@server ~]$ getenforce
Permissive

Qayta yuklashdan oldin rejimni o'zgartirish, masalan, uni majburlash yoki 1. Ruxsat beruvchi parametr 0 raqamli kodiga mos keladi.

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

Bundan tashqari, faylni tahrirlash orqali rejimni o'zgartirishingiz mumkin:

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

setenfoce bilan farqi shundaki, operatsion tizim ishga tushganda, SE rejimiLinux SELINUX konfiguratsiya fayli parametrining qiymatiga muvofiq o'rnatiladi. Bundan tashqari, <=> ni o'chirib qo'yishni amalga oshirishga kiritilgan o'zgarishlar faqat /etc/selinux/config faylini tahrirlagandan va qayta ishga tushirgandan so'ng kuchga kiradi.

Qisqa holat hisobotini ko'ring:

[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

SE atributlarini ko'rish uchunLinux Ba'zi standart yordamchi dasturlar -Z parametridan foydalanadi.

[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 ning oddiy chiqishi bilan taqqoslaganda, quyidagi formatda bir nechta qo'shimcha maydonlar mavjud:

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

Oxirgi maydon xavfsizlik tasnifi kabi narsani bildiradi va ikkita elementning kombinatsiyasidan iborat:

  • s0 - ahamiyatlilik, past-yuqori daraja oralig'i sifatida ham yoziladi
  • c0, c1… c1023 - toifa.

Kirish konfiguratsiyasini o'zgartirish

SE modullarini yuklash uchun semoduldan foydalaningLinux, ularni qo'shing va olib tashlang.

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

Birinchi jamoa semanage login SE foydalanuvchisini bog'laydiLinux operatsion tizim foydalanuvchisi bilan, ikkinchisi ro'yxatni ko'rsatadi. Nihoyat, -r tugmasi bilan oxirgi buyruq SE foydalanuvchi xaritasini olib tashlaydi.Linux OS hisoblariga. MLS/MCS diapazon qiymatlarining sintaksisi oldingi bo'limda tushuntirilgan.

[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

komanda semanage foydalanuvchisi foydalanuvchilar va SE rollari o'rtasidagi xaritalarni boshqarish uchun ishlatiladiLinux.

[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

Buyruq parametrlari:

  • -o'zgacha rollarni xaritalash yozuvini qo'shish;
  • -l mos keladigan foydalanuvchilar va rollar ro'yxati;
  • -d foydalanuvchi rolini xaritalash yozuvini o'chirish;
  • -R foydalanuvchiga biriktirilgan rollar ro'yxati;

Fayllar, portlar va mantiqiy qiymatlar

Har bir SE moduliLinux Fayllarni belgilash qoidalari to'plamini taqdim etadi, lekin agar kerak bo'lsa, o'z qoidalaringizni ham qo'shishingiz mumkin. Masalan, biz veb-serverga /srv/www papkasiga kirish huquqlarini bermoqchimiz.

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

Birinchi buyruq yangi belgilash qoidalarini qayd etadi, ikkinchisi esa amaldagi qoidalarga muvofiq fayl turlarini qayta o'rnatadi, to'g'rirog'i o'rnatadi.

Xuddi shunday, TCP/UDP portlari faqat tegishli xizmatlar ularni tinglashi mumkin bo'lgan tarzda belgilangan. Masalan, veb-server 8080 portni tinglashi uchun siz buyruqni bajarishingiz kerak.

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

SE modullarining sezilarli soniLinux Boolean qiymatlarini qabul qila oladigan parametrlarga ega. Bunday parametrlarning to'liq ro'yxatini getsebool -a yordamida ko'rish mumkin. Boolean qiymatlarini setsebool yordamida o'zgartirish mumkin.

[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

Seminar, Pgadmin-veb interfeysiga kirish

Amaliy misolni ko'rib chiqaylik: biz PostgreSQL ma'lumotlar bazasini boshqarish uchun RHEL 7.6 da pgadmin4-web o'rnatdik. Bir oz yurdik izlanish pg_hba.conf, postgresql.conf va config_local.py sozlamalari bilan papkaga ruxsatlarni o'rnating, pip-dan etishmayotgan Python modullarini o'rnating. Hammasi tayyor, biz ishga tushiramiz va qabul qilamiz 500 ichki server xatosi.

Xavfsizlik tizimlari Linux

Biz odatiy gumonlanuvchilardan boshlaymiz, /var/log/httpd/error_log. U erda qiziqarli yozuvlar mavjud.

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

Aksariyat administratorlar aynan shu yerda Linux setencorce 0 ni ishga tushirishga kuchli vasvasa bo'ladi va shu bilan hammasi tugaydi. Ochig'i, men birinchi marta shunday qildim. Bu, albatta, yechim, lekin eng yaxshi yechimdan yiroq.

SE dizaynlarining katta hajmliligiga qaramayLinux Bu foydalanuvchilarga qulay bo'lishi mumkin. Shunchaki setroubleshoot paketini o'rnating va tizim jurnalini ko'ring.

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

Esda tutingki, auditd xizmati shu tarzda qayta ishga tushirilishi kerak va OTda systemd mavjudligiga qaramay, systemctl dan foydalanmaslik kerak. Tizim jurnalida ko'rsatiladi nafaqat blokirovka qilish haqiqati, balki sabab va taqiqni yengish yo'li.

Xavfsizlik tizimlari Linux

Biz ushbu buyruqlarni bajaramiz:

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

Biz pgadmin4-web veb-sahifasiga kirishni tekshiramiz, hamma narsa ishlaydi.

Xavfsizlik tizimlari Linux

Xavfsizlik tizimlari Linux

Manba: www.habr.com

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster