2007 02 SELinux – bardziej bezpieczny Linux [Bezpieczenstwo]

background image

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

52

luty 2007

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

53

www.lpmagazine.org

a

ut

or

zy

@

lpm

ag

az

ine

.o

rg

SELinux – bardziej

bezpieczny Linux

Czy system Linux oraz inne systemy uniksowe są bezpiecznymi systemami. Jeśli w odpowiedzi,
uwzględnimy np.: tylko samo jadro systemu to istotnie tak jest. Jest to bezpośrednia konsekwencja
faktu iż, wielu programistów szczególnie, w przypadku systemów o otwartym kodzie źródłowym,
każdego dnia stara sie naprawiać istniejące błędy, a liczna społeczność użytkowników owe błędy
wyłapuje. Co ogólnie poprawia szeroko rozumiane bezpieczeństwo.

Marek Sawerwain

Z

teoretycznego punktu widzenia może sie wy-
dawać, że trzy podstawowe prawa systemów
uniksowych: prawo czytania, zapisywania
oraz prawo wykonywania (tzw. prawa rwx)

odpowiednio zastosowane, mogą wystarczyć do stwo-
rzenia środowiska, które będzie bezpieczne i nie narazi
na utratę danych użytkowników tego środowiska.

Jednak z drugiej strony, system operacyjny dla zwy-

kłego użytkownika to nie tylko jadro systemu, lecz cały ze-
staw aplikacji stosowanych w codziennej pracy. Niestety,
wiele aplikacji posiada istotne uchybienia, co może naru-
szać bezpieczeństwo całego systemu. Źle napisana aplika-
cja sieciowa, uruchomiona nawet na poziomie konta zwy-
kłego użytkownika, może być źródłem wielu kłopotów.
I niestety, nie pomogą tu prawa dostępu bądź odpowied-
nia hierarchia użytkowników. Czy istnieje zatem sposób,
aby np.: zablokować uruchamianie pewnych programów,
jednak nie odbierając samych praw. Odpowiedź jest natu-
ralnie twierdząca, a jest nim zestaw specjalnych rozszerzeń
o nazwie SELinux. Sposób działania tego systemu można
porównać do ściany ogniowej, lecz tym razem jest to zapo-
ra dla aplikacji.

Czym jest SELinux ?

Najkrócej o projekcie SELinux można powiedzieć iż jest
to „łatka” na standardowe jądro Linuxa. W jądrze, funk-
cjonuje bowiem mechanizm o nazwie Linux Security Mo-
dule
(w skrócie LSM), czyli jest to część jądra Linuxa która
oferuje możliwość implementacji różnych dodatkowych
mechanizmów bezpieczeństwa. SELinux jest elementem
który pojawia się właśnie jako moduł LSM. Jednak, naj-
nowsze jądra z serii 2.6.x oferują już na stałe mechani-
zmy SELinuxa, toteż od tej serii jąder SELinux jest natu-
ralną częścią jądra Linuxa. Obecnie, w większości waż-
niejszych dystrybucji przedstawiane mechanizmy są już
obecne.

Jednak, oprócz samych modyfikacji jądra, istotnym

elementem są nowe wersje programów, które korzystają
z możliwości SELinuxa. Szczególnie ważne są kluczo-
we programy dla bezpieczeństwa systemu jak ssh, ls, ps
czy np: login. Te programy zostały dopasowane do no-
wych zabezpieczeń. Choć warto dopowiedzieć iż nowe
rozszerzenia zostały tak opracowane, iż nie ma potrze-
by aby modyfikować istniejące oprogramowanie. Jeśli,
dany program wymaga specjalnych uprawnień, wystar-

background image

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

52

luty 2007

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

53

www.lpmagazine.org

czy utworzyć odpowiednie zasady. Wspom-
niane zasady (ang. policy) także są nieod-
łącznym elementem bezpieczeństwa. To one
decydują który użytkownik ma dostęp do
urządzeń czy plików. Domyślny, zbiór re-
guł zapewnia wysoki poziom bezpieczeń-
stwa. Naturalnie, administrator może zmie-
nić reguły bądź utworzyć nowe aby dopa-
sować system do własnych specyficznych
potrzeb.

Toteż zadaniem opisywanych rozsze-

rzeń jest zwiększenie bezpieczeństwa, po-
przez wprowadzenie nowych ograniczeń
bardziej szczegółowych niż typowe prawa
rwx. Użytkownicy są przypisywani do wcześ-
niej określonych ról. Pozwala to na wpro-
wadzanie ograniczeń w dostępie do urzą-
dzeń i plików. Co ważne SELinux rozsze-
rza istniejące prawa dostępu, co oznacza iż
w przypadku złej konfiguracji nowych roz-
szerzeń, nie naruszamy istniejących typo-
wych mechanizmów bezpieczeństwa. Dla-
czego tak jest? Jak już to zostało powiedzia-
no, nowe prawa ograniczają istniejące, nie
są to bowiem zupełnie nowe prawa. To-
też, jeśli nastąpi naruszenie praw SELinu-
x'a, nadal w mocy pozostaną aktualne stan-
dardowe prawa Linuxa.

Nieco teorii o nowych

rozszerzeniach

Najważniejszym elementem SELinuxa jest
wprowadzenie bardzo silnej kontroli dostę-
pu (ang. Mandatory Access Control – MAC).
Ogólnie mówiąc, jest to rozszerzenie stan-
dardowych mechanizmów praw dostępu do
plików oraz grup i użytkowników. Kontro-
la odbywa się na poziomie procesu który po-
wstał w wyniku działań użytkownika. Pro-
ces otrzymuje tzw. kontekst bezpieczeństwa,
Mechanizmy kontroli MAC sprawdzają rów-
nież kontekst bezpieczeństwa obiektu na
którym dany proces ma pracować. Po wery-
fikacji, czy dany proces z otrzymanym kon-
tekstem może wykonać czynności do któ-
rych został powołany następuje odmowa
lub zgoda na wykonanie zadania jakie re-
alizuje proces.

Istnieje jedna zasadnicza różnica pomię-

dzy mechanizmami MAC, a standardowy-
mi rozwiązaniami dostępnymi w Linuxie.

W przypadku SELinuxa tylko administra-
tor systemu może określać nowe prawa do-
stępu. Jest to zupełnie odmienne podejście
w porównaniu do tradycyjnego rozwiązania,
gdzie każdy użytkownik może zarządzać
prawami, choć tylko we własnym otoczeniu.
W przypadku SELinuxa, tak nie jest, gdyż
prawa są przydzielane tylko przez admini-
stratora.

Drugim, wbrew pozorom nie zupełnie

nowym mechanizmem jest wprowadzenie
systemu kontroli opartego o role. System RB-
AC (jest to skrót od ang. Role Based Access Con-
trol
) oferuje możliwość przypisywania specy-
ficznej roli poszczególnym użytkowników.
W taki sposób funkcjonuje standardowy me-
chanizm użytkowników, mamy przecież użyt-
kowników systemowych, standardowych czy
wręcz dedykowanych do pewnym wybra-
nych zadań np.: do obsługi serwera WWW.
Jednak, RBAC zmienia nieco ten schemat,
ponieważ prawa nie są przydzielane bezpo-
średnio do użytkowników lecz do ról. Co wię-
cej, w jednej chwili użytkownik, może peł-
nić tylko jedną rolę, co ogranicza potencjal-
ne szkody. Jest to naturalnie mniej wygod-
nie, ponieważ należy się przełączać pomię-
dzy rolami ale podnosi w znaczący sposób
bezpieczeństwo.

Uzyskanie dostępu do pewnej roli ozna-

cza iż użytkownik będzie korzystać z pew-
nych obiektów, czyli z plików, katalogów
oraz innych urządzeń. W roli, prawa są przy-
dzielone, jednak do pewnych typów. Naj-
ważniejszym ograniczeniem jest fakt iż tyl-
ko administrator może tworzyć nowe typy
i przydzielać je do obiektów. Ten mecha-
nizm nazywany jest najczęściej jako system
kontroli dostępu w ramach domeny. (ang.
Dynamically Typed Access Control – DTAC),
lepiej jednak mówić o tym systemie jako

o mechanizmie definiowania reguł dostępo-
wych.

Choć ilość typów jest nieograniczona to

jednak nadmierna ilość różnych typów
wprowadza tylko dodatkowe zmieszanie,
więc najlepiej nie przesadzać z ilością ty-
pów. Tym bardziej iż w typowej instalacji
SELinux, istnieją nie setki ale tysiące tego
rodzaju reguł (zwykle około 100 000). Regu-
ły te pozwalają na bardzo precyzyjne okre-
ślanie, jakie szczegółowe prawa są przy-
dzielane do obiektów.

Odrobina szczegółów

Użytkownik który pracuje w danym sys-
temie, naraz może korzystać z tylko jednej
roli, naturalnie istnieje rola domyślna. W ra-
mach każdej roli, mamy dostęp tylko do wcześ-
niej określonych obiektów poprzez dome-
ny. Podobnie jak w przypadku roli możemy
znajdować się naraz tylko w jednej domenie.
Jednak, nasze rzeczywiste możliwości są wy-
znaczanie na podstawie typu obiektu na któ-
rym działamy, bowiem reguły o których była
mowa w poprzednim punkcie określą nam
możliwe interakcje pomiędzy domeną a ty-
pem obiektu. Najczęściej tworzone są nastę-
pujące reguły:

• określanie dopuszczalnych operacji jak

czytanie, pisanie, tworzenie,

• dopuszczalne zmiany roli,
• możliwe zmiany domeny,
• określenie automatycznych zmian do-

meny oraz roli w przypadku zajścia jakiś
konkretnych okoliczności.

W SELinuxie każdy proces oraz użytkownik
posiada tzw. kontekst bezpieczeństwa. Ogól-
nie na kontekst składają się trzy elemen-
ty a są to:

użytkownik:rola:domena

. Jeśli,

Rysunek 1.

Ogólny schemat systemu SELinux,

przedstawia podział na trzy części, użytkowników,
role i typy

Rysunek 2.

Dokładniejsze przedstawienie struktury nowych rozwiązań dostępnych w SELinuxie

background image

54

luty 2007

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

55

www.lpmagazine.org

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

użytkownik o nazwie np.: dorota zaloguje
się do typowego systemu, gdzie istnieje SE-
Linux, to dorota zazwyczaj otrzyma nastę-
pujący kontekst:

dorota:user_r:user_t

,

gdzie

user_r

to domyślna rola a

user_t

to

domyślna domena. Aktualny kontekst mo-
żemy sprawdzić za pomocą polecenia

id

a jeszcze lepiej

id -Z

. W efekcie otrzymamy

następującą odpowiedź (np.: dla dystrybu-
cji Fedora Core 6):

user_u:system_r:unconfined_t

Jak widać mamy tu jeszcze większe ograni-
czenie, gdyż domyślnym określeniem użyt-
kownika dorota jest

user_r

.

Inne przykłady kontekstów są następu-

jące dla plików wykonywalnych po wykona-
niu

ls -alZ

:

-rwxr-xr-x root root system_u:
object_r:bin_t /usr/bin/gcalctool
-rwxr-xr-x root root system_u:
object_r:bin_t /usr/bin/gcc
-rwxr-xr-x root root system_u:
object_r:java_exec_t /usr/bin/
gcj-dbtool

Na przykładzie tych plików widać iż kon-
tekst dla zwykłych typów kończy się typem

bin_t

lecz program dla Javy jest specjalnie

traktowany

java_exec_t

. W podobny spo-

sób możemy sprawdzić kontekst bezpieczeń-
stwa dla procesów poleceniem

ps -eZ

:

system_u:system_r:init_t 1 ?
00:00:00 init
system_u:system_r:kernel_t 2 ?
00:00:00 migration/0
system_u:system_r:udev_t:System
Low-SystemHigh 441 ? 00:00:00 udevd
system_u:system_r:xfs_t 2190 ?
00:00:00 xfs
system_u:system_r:getty_t 2368
tty4 00:00:00 mingetty
user_u:system_r:unconfined_t 2515
tty2 00:00:00 bash
root:system_r:unconfined_t:System
Low-SystemHigh 2544 tty1 00:00:00 ps

Tym razem poszczególne usługi systemowe
mają przydzielone różne typy, mamy spe-
cjalny typ

init_t

dla pierwszego procesu

w systemie, a usługi działające na poziomie
jądra posiadają własne typy. Typowe proce-
sy użytkownika posiadają kontekst:

user_u:

system_r:unconfined_t

.

Przykład typu dla Javy pokazuje iż od-

powiednie określenie typów i praw daje na
wiele możliwości w ochronie systemu. Przy-
kładem który zazwyczaj się pokazuje jest do-
mena

user_irc_t

. Stowarzyszona jak poda-

je nazwa z klientami do sieci IRC. Plik wyko-
nywalny klienta IRC posiada także swój typ o
nazwie

irc_exec_t

, po uruchomieniu przez

użytkownika klienta IRC następuje zmiana
domeny w następujący sposób:

user:user_r:user_t

zmiana do

user:user_r:user_irc_t

Domena

user_irc_t

posiada liczne ogranicze-

nia, domyślnie w jej ramach program może za-
pisywać informacje do logów bądź korzystać
z podstawowych plików konfiguracyjnych.
Ewentualne włamanie się przez klienta, nie za-
grozi nawet jego własnym plikom, ponieważ
klient IRC jest uruchamiany w innej domenie.

Odrobina praktyki

Gdy chcemy wprowadzić do systemu nadzo-
rowanego przez SELinux nowego użytkowni-
ka, to pierwszą czynnością jaką trzeba wyko-
nać, jest zmiana aktualnej roli użytkownika za
pomocą polecenia newrole. Ponieważ chcemy

Rysunek 3.

Konfiguracja SELinuxa za pomocą narzędzia graficznego w dystrybucji Fedora Core 6

Pierwsze rozwiązania jakie stały się podsta-
wą dla SELinux powstały już w roku 1992
dla jądra MACH, gdzie pojawiły się bardzo
rozbudowane mechanizmy kontroli dostę-
pu. Pierwsze publiczne udostępnienie kodu
nastąpiło w 2000 roku. Od roku 2003 SELi-
nux jest łączony z kodem jądra w wersji 2.6.
Dlatego, aktualnie SELinux jest silnie zin-
tegrowanym z jądrem, właśnie dla tej wer-
sji i jest rozwijany przez firmę Secure Com-
puting Corportaion
którą finansowo od po-
czątku wspiera amerykańska agencja bez-
pieczeństwa narodowego (NSA – Natio-
nal Security Agency). SELinux jest dostęp-
ny w najnowszych dystrybucjach Fedo-
ra Core, specjalnej dystrybucji dla serwe-
rów Gentoo Hardend. SELinux oferuje tak-
że Debian oraz SuSE, istnieje także port dla
FreeBSD.

Choć można się doszukiwać w udo-

stępnieniu mechanizmów SELinuxa szero-
kiej społeczności, spiskowej teorii dziejów,
to jednak warto pamiętać iż Linux staje się
coraz bardziej popularny, i w grę wchodzą
aspekty ekonomiczne. Liczba strat jakie
powstają w wyniku błędnych zabezpieczeń
systemów komputerowych jest coraz więk-
sza, więc to ostatecznie zwykły rachunek
ekonomiczny przemawia za udostępnie-
niem SELinux społeczności OpenSource,
jak przecież wiadomo siła leży w grupie.

Historia projektu SELinux

background image

54

luty 2007

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

55

www.lpmagazine.org

bezpieczeństwo

SELinux – bardziej bezpieczny Linux

wykonywać czynności administracyjne, więc
przełączamy się do roli o nazwie

sysadm_r

:

newrole -r sysadm_r

Zostaniemy poproszeni o podanie hasła dla
administratora. Następnie za pomocą dwóch
typowych poleceń adduser oraz passwd, two-
rzymy nowego użytkownika oraz określamy
jego domyślne hasło. W ten sposób, do syste-
mu został dodany nowy użytkownik. Jednak,
nie posiada on żadnych praw w SELinux'ie.
Dlatego, w pierwszej kolejności trzeba okre-
ślić jego rolę. Pliki związane z regułami mo-
gą znajdować się w wielu miejscach choć naj-
częściej są to katalogi /etc/security/selinux albo
/etc/selinux. Plik z informacjami o użytkow-
nikach może znajdować się np.: w katalogu
/etc/selinux/users. Należy, na samym końcu
dodać nową regułę np.:

user dorota roles { user_r };

W ten sposób użytkownik dorota przez nowe
mechanizmy bezpieczeństwa będzie postrze-
gany jako typowy użytkownik. Jeśli chcemy
zwiększyć prawa użytkownika, poprzez do-
pisanie go do różnych ról pomiędzy którymi
może się on przełączać np.: chcemy dać możli-
wość administracji systemem to reguła przed-
stawia się bardzo prosto:

user dorota roles { user_r sysadm_r };

Użytkownik dorota może korzystać z dwóch
ról

user_r

bądź

sysadm_r

. Niestety, po wpro-

wadzeniu zmian do pliku /etc/selinux/users nie
są one domyślnie wprowadzane do systemu.
Należy za pomocą dodatkowego polecenia do-
konać kompilacji wszystkich reguł. W przy-
padku typowej instalacji nowych rozszerzeń
wykonujemy polecenie:

make -C /etc/selinux load

Ponieważ reguł jest wiele, więc kompilacja mo-
że zabrać sporo czasu. Możemy teraz dokład-
nie określić jakie programy mogą być urucha-
miane przez poszczególnych użytkowników,
definiując w szczegółowy sposób rolę dla użyt-
kownika:

role user_r types { user_t
user_firefox_t user_irc_t };

Przydzielona rola

user_r

oznacza iż użyt-

kownik z tej roli może korzystać z obiektów
ogólnego typu

user_t

np.: pliki z doku-

mentami, ale z drugiej strony może urucha-

miać tylko obiekty związane z przeglądarką
internetową

user_firefox_t

oraz omawiany

już klient do sieci IRC

user_irc_t

. Tworząc

własne role, może ściśle przydzielać dostęp
do odpowiednich programów definiując od-
powiednie typy.

Informacje o typach plików są zgromadzo-

ne w pliku file_context oraz w plikach o rozsze-
rzeniu *.fc. Dobrym przykładem może być opis
katalogu domowego np.:

/home system_u:object_r:home_root_t

Natomiast poszczególne pliki mogą być okre-
ślone jako:

/home/[^/]+/.+ system_u:object_r:
user_home_t

Jeśli administratorowi systemu zależy na
większej prywatności może jawnie rozdzielić
typy na poszczególnych użytkowników:

/home/dorota/[^/]+/.+ system_u:
object_r:user_dorota_home_t

Powracając do przykładu z klientem do sieci
irc możemy określić zachowanie się obiektów
które są plikami tymczasowymi:

allow user_irc_t irc_tmp_t:file {
create read write getattr setattr
link unlink rename };

Taka deklaracja nazywana jest także wek-
torem dostępu, ponieważ określamy jakie
czynności mogą być wykonywane na danym
pliku. Oczywiście SELinux, pozwoli na przy-
dzielenie określonych praw jednemu określo-
nemu plikowi, które może działać w jednej
domenie. Nie ma przeszkód aby istniał tylko
jeden użytkownik który może modyfikować
ten plik. Jednak, jak to już wcześniej powie-
dziono regułami zarządza administrator i to
tylko on może podjąć decyzję o takim postę-
powaniu.

Można przytoczyć jeszcze wiele przykła-

dów reguł np.: dla serwera Apache dostęp do
gniazdka sieciowego jest określony w nastę-
pujący sposób:

allow httpd_suexec_t self:unix_stream_
socket create_socket_perms;

Ponieważ, obostrzenia na pliki są mimo
wszystko dodatkowym elementem w syste-
mie plików, wymienione rodzaje praw nie
są nadawane za pomocą standardowego po-
lecenia chmod, toteż niezbędne jest etykieto-

wanie systemy pliku za pomocą polecenia
o postaci np.:

make -C /etc/selinux/policy relabel

W ten sposób, poszczególne pliki w systemie
otrzymają zdefiniowane przez nas nowe ty-
py. To polecenie, podobnie jak load również
może zabrać sporo czasu.

Podsumowanie

Mam nadzieję iż udało się mi zachęcić do dal-
szych poszukiwań informacji na temat SE-
Linuxa. Projekt ten jest świetnym przykła-
dem iż Linux może być systemem o wyso-
kim stopniu bezpieczeństwa. Naturalnie, ten
artykuł to tylko wprowadzenie do tematyki
systemu SELinux. I wiele elementów zostało
pominiętych. Jednakże, w ramach uzupełnie-
nia, warto wspomnieć o teście, jaki przepro-
wadził jakiś czas temu Russel Coker. Udostęp-
nił on komputer z zainstalowanym SELinu-
xem, wraz ze standardowymi ustawieniami.
Udostępnił także hasło roota do tej maszyny,
jak się okazało nikt nic istotnego nie zdołał
zepsuć. Co jest znakomitym przykładem jako-
ści SELinuxa. Jego zaletą jest także zgodność
z normą POSIX.6 (system MAC jest przykła-
dem techniki zgodnej z tą normą). Wadą jest
niewątpliwie problematyczna konfiguracja
szczególnie dla początkujących użytkowni-
ków, sprawia wiele kłopotów. Drugą istotną
wadą jest także obniżenie wydajności syste-
mu, szczególnie, jeśli zbiór reguł jest bardzo
rozbudowany. Jednak zalet jest więcej, dlatego
warto sprawdzić, czy nasza ulubiona dystry-
bucja zawiera wsparcie dla SELinuxa?

Autor zajmuje się tworzeniem oprogramo-
wania dla Linuksa oraz WIN32. Zaintereso-
wania: teoria języków programowania oraz
dobra literatura.
Kontakt z autorem: msawe@go.onet.pl

O Autorze

• Strona domowa NSA poświęcona

projektowi SELinux:

http://www.nsa.gov/selinux

• Lista najczęściej zadawanych pytań:

http://www.nsa.gov/selinux/info/
faq.cfm

• Podstawowe informacje o SELinuxie:

http://en.wikipedia.org/wiki/Selinux

W Sieci


Wyszukiwarka

Podobne podstrony:
2007 02 Bezpieczne SSH [Bezpieczenstwo]
2007 02 14 Ustawa o ujawnianiu informacji o współpracy z organami bezpieczeństwa tekst pełny
2007 02 14 Ustawa o ujawnianiu informacji o współpracy z organami bezpieczeństwa
Polityka bezp. Wykład 20.02.2011r, Sudia - Bezpieczeństwo Wewnętrzne, Semestr II, Polityka Bezpiecze
20 02 Zbiorowe siatki bezpieczenstwa
19 02 2012 Techniczne bezpieczeństwo pracyid 18220
Bądź bardziej bezpieczny
2007 07 Jądro nieprzewidywalności [Bezpieczenstwo]
Polityka bezp. Ćwiczenia 26.02.2011r, Sudia - Bezpieczeństwo Wewnętrzne, Semestr II, Polityka Bezpie
r-02.05, ## Documents ##, Bezpieczeństwo w Windows 2000. Czarna księga
18 02 2012 Techniczne bezpieczeństwo pracyid 17681
hajduk egzamin test 14 06 2007 - Kopia, AM SZCZECIN, BEZPIECZEŃSTWO STATKU, TESTY hajduk
Dz.U.02.70.650 bezpieczeństwo i higiena pracy przy użytkowaniu wózków jezdniowych z napędem silni
2007 04 Tworzenie kopii bezpieczeństwa danych [Administracja]
Bądź bardziej bezpieczny
2008 02 KGP Razem bezpieczniej sprawozdanie za 2007rid 26445
02 06 Standard bezpiecznej pracy na dachach
Polityka bezp. Wykład 20.02.2011r, Sudia - Bezpieczeństwo Wewnętrzne, Semestr II, Polityka Bezpiecze

więcej podobnych podstron