Tworzenie bezpiecznego środowiska kont shellowych
Transkrypt
Tworzenie bezpiecznego środowiska kont shellowych
Tworzenie bezpiecznego środowiska kont shellowych Robert Jaroszuk <[email protected]> “Where you see a feature, I see a flaw...” TLUG Uniwersytet Gdański, 8 września 2007 1 Spis Treści Rozpoznanie zagrożeń Zapobieganie - prewencja Ochrona systemu SSH w chroot Wirtualne maszyny Rejestrowanie działań użytkowników Rozbudowa jądra o funkcje podnoszące poziom bezpieczeństwa Robert Jaroszuk <[email protected]> 2 Rozpoznanie zagrożeń Chcemy się bronić przed: Przejęciem kontroli nad kontem użytkownika, Uruchamianiem nieporządanych usług na kontach użytkowników, Nadużyciami ze strony użytkowników, Nadużyciami ze strony użytkowników, ale skierowanymi na inne systemy, Nieodpowiedzialnością naszych użytkowników Robert Jaroszuk <[email protected]> Zapobieganie - prewencja Dlatego musimy zapewnić: Poufność Integralność Dostępność Aby to zrobić: Tworzymy odpowiednie reguły i procedury dotyczące przetwarzania informacji – POLITYKĘ BEZPIECZEŃSTWA (oczywiście dla jednego serwera nikt tego nie robi, jednak w większych projektach jest to wskazane) Robert Jaroszuk <[email protected]> 3 Zapobieganie - prewencja Aby nasza (formalna czy też nie) polityka bezpieczeństwa funkcjonowała poprawnie, wymagane są pewne narzędzia: Dla weryfikacji integralności – Tripwire / bsign / AIDE Dla poufności – SSH / SSL / GPG / etc. Dla uwierzytelniania – PAM / polityka haseł, Czy to wszystko co można zrobić? Czy w pełni ufamy powyższym rozwiązaniom? Czy jesteśmy pewni że w 100% zabezpieczą nas przed atakiem? Robert Jaroszuk <[email protected]> 4 Zapobieganie - prewencja Co więcej można zrobić ? Izolowanie użytkowników w wirtualnym środowisku (chroot), Izolowanie użytkowników w wirtualnym systemie (VMware / Xen) Logowanie na zdalne maszyny w “bezpiecznej” sieci, Rejestrowanie działań użytkowników (logowanie exec*(), logowanie poleceń wpisanych w powłoce) Rozszerzenie zabezpieczeń jądra systemu (grsec / selinux) Robert Jaroszuk <[email protected]> 5 Ochrona systemu – SSH chroot Robert Jaroszuk <[email protected]> 6 Ochrona systemu – SSH chroot 7 Zalety: - prostota rozwiązania - dużo informacji (tutoriali) i narzędzi dostępnych w sieci Wady: - Ograniczamy jedynie dostęp do “głównego” systemu, a nie do zasobów systemowych (moc CPU, pamięć) Informacje na temat chroot dla SSH: http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.en.html http://chrootssh.sourceforge.net/ http://paradigma.pt/~gngs/sshjail Robert Jaroszuk <[email protected]> 8 Wirtualne maszyny Zalety: - izolujemy wirtualny system od “głównego systemu” - możemy ograniczać zasoby (CPU / RAM / dysk) - towrzymy kompletne wirtualne serwery Wady: - dużo więcej pracy niż w przypadku chroot Robert Jaroszuk <[email protected]> 9 Wirtualne maszyny Robert Jaroszuk <[email protected]> 10 Wirtualne maszyny Robert Jaroszuk <[email protected]> Rejestrowanie działań użytkowników Rejestrowanie wywołań funkcji exec*(): - Snoopy - http://sourceforge.net/projects/snoopylogger/ - LEL - http://zim.iq.pl/code/lel.tgz Modifkacja źródeł powłoki: - http://zim.iq.pl/code/bash-3.1-logexec.tgz Rejestrowanie zdarzeń systemowych na zdalnej maszynie - syslogd / syslog-ng Robert Jaroszuk <[email protected]> 11 Rozbudowa jądra o funkcje podnoszące poziom bezpieczeństwa Dlaczego musimy chronić kernel ? Co istotnego znajduje się w jądrze, że wymaga dodatkowej ochrony ? Co musimy chronić ? Pamięć – ICP, komunikacja sieciowa, RAM, reguły firewall Zasoby dyskowe – pliki, bootloadery, partycje Sprzęt – urządzenia (ioctl, surowy dostęp), EPROMy, konfigurowalne podzespoły serwera JAK chronić ? Zapytania (polecenia) muszą przechodzić przez kernel Syscalle, sysctl i sterowniki urządzeń powinny być miejscem w którym zapytania i polecenia są weryfikowane pod kątem bezpieczeństwa. Robert Jaroszuk <[email protected]> 12 Rozbudowa jądra o funkcje podnoszące poziom bezpieczeństwa 13 Openwall: Stworzony przez Solar Designera (Alexander Peslyak) w 1998 roku (jądro 2.0). - uniemożliwia wykonanie kodu na stosie procesu (ochrona przed niektórymi exploitami). - randomizuje adresy funkcji bibliotecznych (uniemożliwia return-into-libc). - ochrona /proc, ochrona deskryptorów 0 1 2, ochrona linków i FIFO w /tmp PaX i grsecurity: - PaX rozwijany od roku 2000 do 2005 przez zespół PaX. Od 2005 przez Bradleya Spenglera (Spender), autora grsec. - ochrona stosu oraz randomizacja pamięci. - zaawansowana ochrona chroot(); - ochrona /dev/mem, /dev/kmem, /dev/port - /proc/pid/ipaddr, - bogate rejestrowanie zdarzeń w systemie - UDEREF / MEMORY_SANTINIZE - RBAC Robert Jaroszuk <[email protected]> Rozbudowa jądra o funkcje podnoszące poziom bezpieczeństwa 14 LIDS (Linux Intrusion Detection System): - umożliwia nadawanie praw dostępu do zasobów systemowych (pliki, katalogi, funkcje sieciowe itp.) - SELinux (Security Enhanced Linux): - stworzony w roku 2000 przez NSA. Pierwotnie dodatek do jądra, ale od wersji 2.5 został z nim zintegrowany. - oparty o techniki FLASK – każdy podmiot (proces) obiekt (plik, urządzenie) w systemie ma przypisant kontekst (zbiór atrybutów bezpieczeństwa) i nie może wykraczać poza ten zbiór. - RSBAC (Rule Set Base Access Control) - bardzo rozbudowany projekt, stabilna wersja istnieje od 2000r. - informacje o użytkownikach (passwd / shadow) trzymane są w jądrze a nie w plikach (wymaga to wymiany modułów PAM i części bibliotek systemowych). - nakłada ograniczenia na funkcję setuid() - wymaga autoryzacji - listy kontroli dostępu oraz role - ochrona pamięci procesów (PaX), ochrona chroot(), ochrona zasobów, ochrona /proc oraz wiele innych. Robert Jaroszuk <[email protected]> 15 Koniec Dziękuję za uwagę. Pytania ? Prezentacja będzie dostępna pod adresem: http://linux.gda.pl/spotkania Robert Jaroszuk <[email protected]>