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



17.09.2019

PLNOG23 czyli sieci 5G,...

Największa polska konferencja telekomunikacyjna powraca do Krakowa! Wśród nowości ścieżka...
05.09.2019

Cloudya – nowa usługa NFON

Po ponad dekadzie ciągłego rozwoju technologii Cloudya, swobodna i niczym nie ograniczona...
02.09.2019

Na dużą skalę

Kaspersky Hybrid Cloud Security
02.09.2019

Bezpieczny brzeg sieci

Fortinet Secure SD-Branch
02.09.2019

Nowoczesne centra danych

AMD EPYC
30.08.2019

Dostęp do AI i ML

VMware Cloud Foundation
30.08.2019

Lekkość i moc

Toshiba Portégé A30-E
30.08.2019

Bez przestojów

APC Easy UPS On-Line
29.08.2019

Duże moce

Lenovo ThinkSystem SR635 i SR655

Izolacja serwera Apache HTTP

Data publikacji: 18-04-2019 Autor: Konrad Kubecki

Istnieje wiele recept na hardening serwera webowego Apache HTTP. Zazwyczaj dotyczą one konfiguracji samej usługi oraz wybranych obszarów systemu operacyjnego. Wielu administratorów pomija jednak możliwość izolacji serwera webowego za pomocą mechanizmów SELinux, uznając, że najlepszym pomysłem jest... wyłączenie tej ochrony.

 

SELinux to zbiór narzędzi pozwalających na ograniczanie uprawnień serwera Apache do absolutnego minimum, wymaganego do poprawnego działania usługi. Za jego pomocą możliwe jest udaremnianie prób ataków na serwer webowy, a także minimalizowanie ich skutków, gdy intruzowi uda się uzyskać kontrolę nad usługą. W niniejszym artykule przedstawiamy najważniejsze aspekty ochrony Apache'a za pomocą SELinuksa oraz przybliżamy metodę optymalizacji polegającą na zidentyfikowaniu i wyłączeniu zbędnych modułów serwera webowego.

> TYPY PLIKÓW

Aby ograniczyć dostęp serwerowi Apache do zasobów, stworzono w SELinuksie domenę o nazwie httpd_t, w której ramach mieszczą się m.in. typy dla plików i katalogów. Typy te przeznaczone są dla różnych kategorii plików i definiują poziomy dostępu serwera Apache do nich. Dzięki temu określa się inne zakresy uprawnień serwera webowego do plików logów, inne do zawartości statycznej i dynamicznej, a jeszcze inne do plików konfiguracyjnych. Uprawnienia narzucone przez SELinuksa mają wyższy priorytet niż uprawnienia systemu plików, dzięki czemu narzucony w ten sposób np. wybrany tryb read-only pozwala Apache'owi jedynie na odczyt, nawet jeśli konfiguracja w systemie plików dopuszcza modyfikację. SELinux i domena httpd_t nie dają serwerowi webowemu uprawnień do plików należących do innych usług. Jest to mechanizm izolacji, który zamyka serwer webowy w wąskich, niezbędnych do działania ramach.

Wśród typów ograniczających uprawnienia serwera webowego do plików i/lub katalogów najważniejsze to:

 

  • httpc_sys_content_t – typ plików zawartości statycznej. Katalogi oraz znajdujące się wewnątrz nich pliki oznaczone tym typem są dostępne dla Apache'a w trybie tylko do odczytu, bez możliwości modyfikacji. Przykładowa lokalizacja z takimi plikami to: /var/www/html (lub po prostu katalog oznaczony jako DocumentRoot).
  • httpd_user_content_t – typ dla plików udostępnianych przez użytkowników za pośrednictwem serwera webowego pod adresami zgodnymi ze schematem: http://nazwa_serwera/~nazwa_usera. Przykładowy katalog oznaczony tym typem plików to:  /home/user/public_html.
  • httpd_config_t – kontekst dla plików konfiguracyjnych, z których serwer odczytuje ustawienia. Są to lokalizacje takie jak: /etc/httpd/conf, /etc/httpd/conf.d/, /etc/httpd/conf.modules.d.
  • httpd_sys_script_exec_t – typ do opisywania skryptów CGI. Tylko pliki posiadające ten typ mogą być przez serwer webowy traktowane jako skrypty CGI i przez niego uruchamiane. Ten typ plików jest ściśle powiązany ze zmienną httpd_enable_cgi, która musi być aktywna, aby uruchamianie skryptów było możliwe.
  • httpd_sys_rw_content_t – pozwala modyfikować zawartość katalogów i plików oznaczonych tym typem. Modyfikacje mogą wykonywać tylko te skrypty, których typ to httpd_sys_script_exec_t.
  • httpd_unconfined_script_exec_t – specjalny tryb stworzony dla skryptów, których złożoność powoduje problemy z dostosowaniem ochrony SELinuksa. Jeżeli żaden inny typ plików nie pozwala na prawidłową pracę skryptu, to ostatnim rozwiązaniem jest oznaczenie go typem unconfined. W rzeczywistości oznacza to wyłączenie mechanizmów SELinuksa dla wybranego skryptu.
  • httpd_log_t – przeznaczony do etykietowania logów. W katalogach posiadających tę etykietę serwer może tworzyć nowe pliki oraz dopisywać zdarzenia do plików już tam istniejących. Przykładem jest katalog /var/log/httpd.


Zrozumienie typów plików domeny httpd_t ma szczególne znaczenie, gdy zachodzi potrzeba zmiany domyślnych lokalizacji dla dowolnej z opisanych powyżej kategorii plików (plików stron, użytkowników, logów, konfiguracyjnych itp.). Sama zmiana konfiguracji serwera webowego to nie wszystko. Potrzebne jest także nadanie odpowiedniego typu katalogom i plikom w ich nowej lokalizacji – bez tego Apache nie będzie miał możliwości ich obsługi, a w logach pojawią się komunikaty opisujące problemy z prawidłowym uruchomieniem i działaniem Apache'a.

Przykładowo omówmy zmianę lokalizacji strony głównej, widocznej pod adresem http://nazwa_serwera/. W systemie operacyjnym jest to zawartość /var/www/html/. Po zmianie tej ścieżki w konfiguracji serwera webowego i przeniesieniu plików do nowego katalogu należy zmodyfikować konfigurację SELinuksa. Nowa lokalizacja musi mieć typ httpd_sys_content_t. Jeśli przewidziano katalog cgi-bin na skrypty, to jego typ także musi zostać odpowiednio zmieniony. Można to wykonać za pomocą poleceń:

 

 

Dzięki powyższym działaniom Apache będzie mógł odczytać zawartość strony oraz obsłużyć skrypty. Na tym etapie warto przyjrzeć się komendzie semanage z jeszcze jednego względu – jej działanie polega na ustawieniu docelowego typu na wybranym katalogu. To samo można wykonać poleceniem chcon. Różnica pomiędzy nimi polega na tym, że efekty komendy semanage przetrwają operację ponownego etykietowania całej zawartości dysku (funkcja relabeling). Zmiany wprowadzone za pomocą chcon nie zostaną po takiej operacji zachowane.

 

> ZMIENNE TYPU LOGICZNEGO

SELinux posiada wiele zmiennych typu boolean, które wprowadzają dodatkową ochronę dla serwera Apache. Są to zmienne umożliwiające użycie różnych funkcji serwera lub blokujące je. SELinux zachowuje się zgodnie z ustawieniami tych zmiennych, bez względu na zawartość plików konfiguracyjnych serwera webowego. Jest to zatem ochrona przed sytuacjami, w których intruz zmusi serwer Apache do określonego zachowania, jednak finalnie nie dojdzie ono do skutku, gdyż odpowiednie ustawienia SELinuksa zabronią wykonania danej czynności. Książkowym przykładem jest prezentowanie zawartości katalogu public_html znajdującego się w katalogach domowych. Jeśli konfiguracja Apache'a pozwala na to, zawartość katalogów /home/uzytkownik/public_html jest widoczna pod adresami http://nazwa_serwera/~uzytkownik.

 

W SELinuksie znajdziemy zmienną httpd_enable_homedirs, która reguluje dostęp do wspomnianych katalogów. Domyślne ustawienie off zabrania dostępu, nawet jeśli konfiguracja Apache'a wskazuje inaczej. Próba żądania dostępu do takiej strony zakończy się uzyskaniem błędu 403 Forbidden, a w logu SELinuksa /var/log/audit/audity.log znajdzie się wpis opisujący to zdarzenie. Wylistowanie tego pliku nie dostarczy jednak bezpośrednio informacji – do przetłumaczenia zawartości na czytelny komunikat potrzebny będzie program sealert. Jeżeli nie znajduje się on w systemie operacyjnym, konieczna jest instalacja pakietu setroubleshoot-server, którego jednym ze składników jest właśnie polecenie sealert.

 

[...]

 

Specjalista ds. utrzymania infrastruktury i operacji. Zajmuje się problematyką budowy i utrzymania centrów przetwarzania danych oraz zarządzania nimi i koordynowaniem zmian dotyczących krytycznej infrastruktury IT. 

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"