Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.


26.10.2020

Nowa wersja nVision

Można już pobierać nową wersję nVision
26.10.2020

Monitorowanie infrastruktury

Vertiv Environet Alert
23.10.2020

Telefonia w chmurze

NFON Cloudya
23.10.2020

Nowości w EDR

Bitdefender GravityZone
23.10.2020

Wykrywanie anomalii

Flowmon ADS11
23.10.2020

Mobilny monitor

AOC 16T2
22.10.2020

HP Pavilion

HP zaprezentowało nowe laptopy z linii Pavilion.
22.10.2020

Inteligentny monitoring

WD Purple SC QD101
22.10.2020

Przełącznik 2,5GbE

QNAP QSW-1105-5T

SELinux – kontrola sieci

Data publikacji: 25-05-2017 Autor: Grzegorz Kuczyński

Poziom ochrony systemów Linux oferowany przez mechanizm bezpieczeństwa SELinux jest bardzo wysoki. Celem, jaki założyli sobie twórcy tego modułu, było spełnienie kryteriów często określanych jako Trusted System. Dodatkowo SELinux pozwala na kontrolę procesów komunikujących się również przez sieci.

Głównym zadaniem, nad którym skupia się polityka SELinux, jest separacja procesów. Mechanizm ten posiada bardzo rozbudowane możliwości wymuszonej kontroli (Mandatory Access Controls) w systemie operacyjnym. W jego architekturze podmiotem wykonującym działania zazwyczaj jest proces lub jądro systemu. Nawet jeżeli systemowe operacje będą wykonywane przez użytkownika, to i tak w systemie będzie reprezentował go proces (np. bash). SELinux przed każdym zadaniem będzie sprawdzał, czy dany proces ma prawo wykonywać określone operacje na docelowym obiekcie. Obiektem tym może być nie tylko zasób systemu, taki jak plik, kontrola może dotyczyć również interakcji z innymi procesami. Z uwagi na budowę systemu operacyjnego często zdarza się, że proces inicjujący daną akcję musi zmienić domenę TE (Type Enforcement), aby móc wykonać określone zadanie. Taki mechanizm nazywa się przejściem pomiędzy domenami (Domain Transition). W ten sposób SELinux ogranicza proces do przestrzeni systemowej opisanej w polityce danej domeny i izoluje go od innych domen TE. W zależności od polityki każda interakcja procesu z innymi elementami systemu może być kontrolowana, w wyniku czego można uzyskać niemal nieograniczoną kontrolę nad procesem w systemie.

> KOMUNIKACJA Z INNYMI HOSTAMI

Problem zaczyna się pojawiać, gdy interakcja procesu wykracza poza system operacyjny. Wbrew pozorom wcale nie jest to rzadki przypadek. System Linux jest zazwyczaj wykorzystywany w celu świadczenia usług sieciowych, a komunikacja z innymi hostami jest jednym z głównych powodów, dla których wykorzystuje się SELinux. W początkowej fazie wdrażania SELinux do Red Hat Enterprise Linux postawiono na politykę typu Targeted. W odróżnieniu od polityki Strict minimalizowała ona liczbę domen w systemie tylko do tych najbardziej niebezpiecznych. Zdecydowana większość tych procesów to demony sieciowe. W artykule rozważymy konfigurację, która wykorzystuje komunikację dwóch procesów znajdujących się na innych hostach połączonych przez sieć IP.

Coraz częściej oferowane usługi budowane są na bazie kilku systemów operacyjnych. Doskonałym przykładem jest tu witryna sieciowa i jej baza danych znajdująca się na zdalnym hoście. Dla przykładu PostgreSQL oferuje pełne wsparcie dla SELinux (zwane SE-PostgreSQL), dzięki któremu, za pomocą biblioteki libselinux, proces bazy danych może kontrolować interakcje innych procesów z poszczególnymi tabelami w bazie. Aby taka kontrola miała sens, komunikacja pomiędzy serwerem bazy danych a klientem musi zapewniać przekazywanie kontekstów w bezpieczny sposób. Mechanizmy realizujące takie zadania określa się jako Labeled Networks. Przenoszenie etykiet procesów w pakietach sieciowych jest częścią koncepcji Trusted Network, która z natury systemu operacyjnego jest częścią koncepcji Trusted System.

SELinux oferuje kilka sposobów na zapewnienie ochrony dla komunikacji sieciowej. W artykule przedstawimy zarówno podstawowe uprawnienia sieciowe oferowane przez SELinux, jak i zaawansowane mechanizmy pozwalające wiązać kontekst procesu z pakietami IP.

> KONTROLA SOCKETÓW

Wsparcie dla komunikacji sieciowej w SELinux zaczyna się od wewnętrznych struktur jądra, które je reprezentują, czyli tzw. socketów. Socket to deskryptor plikowy wskazujący na jeden z końcowych punktów połączenia. System Linux posiada wiele typów so­cketów, jednak najpopularniejsze w komunikacji sieciowej są protokoły TCP i UDP. W SELinux sockety są reprezentowane przez klasy tcp_socket i udp_so­cket. Serwer protokołu TCP do działania w systemie z SELinux potrzebuje minimum następujących uprawnień klasy
tcp_socket w przestrzeni własnej domeny: create, bind, listen, accept, write, read. Z kolei klient protokołu TCP musi mieć uprawnienia create, connect, write, read klasy tcp_socket dla własnej domeny.

> OBIEKTY SIECIOWE

Jak wiemy, w polityce SELinux poszczególne części systemu reprezentowane są przez obiekty podzielone na różne klasy. Wspomniane uprawnienia klasy tcp_socket mają znaczący wpływ na kontrolę przepływu danych w sieci, ale sockety nie są obiektami stricte sieciowymi. Socket należy rozumieć jako docelowe lub źródłowe miejsce dla danych przesyłanych przez sieć.

Pierwotnie w architekturze SELinux kontrola sieciowa miała obejmować następujące elementy systemu: interface, node i port. Pierwsza implementacja wykonana była w kodzie modułu SELinux, lecz z powodu małej elastyczności i wydajność kontrola tych elementów została przeniesiona do kodu frameworku Netfilter jako SECMARK (zadaniem mechanizmu SECMARK, który zostanie opisany w drugiej części artykułu, jest wykorzystanie możliwości frameworku netfilter do łączenia kontekstu SELinux z ruchem sieciowym).

[...]

Specjalista we Wrocławskim Centrum Sieciowo-Superkomputerowym zajmujący się administracją systemami IT oraz bezpieczeństwem usług sieciowych. Miłośnik defensywnego podejścia do cyberbezpieczeństwa. Niezależny konsultant i analityk cyberbezpieczeństwa.

Artykuł pochodzi z miesięcznika: IT Professional

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"