UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci



Podobne dokumenty
Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Projekt TrustedBSD jako klucz do bezpieczeństwa systemu FreeBSD

Tworzenie bezpiecznego środowiska kont shellowych

(Pluggable Authentication Modules). Wyjaśnienie technologii.

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Przepełnienie bufora. SQL Injection Załączenie zewnętrznego kodu XSS. Nabycie uprawnień innego użytkownika/klienta/administratora

Bezpieczeństwo systemów komputerowych

CONFidence 13/05/2006. Jarosław Sajko, PCSS

Wstęp do Informatyki. Klasyfikacja oprogramowania

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Działanie systemu operacyjnego

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Monitor maszyn wirtualnych

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

4. Procesy pojęcia podstawowe

Działanie systemu operacyjnego

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Linux Contextualization

Historia modeli programowania

Portal Security - ModSec Enterprise

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Struktury systemów operacyjnych

Uniwersytet Mikołaja Kopernika. Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej

Linux -- u mnie działa!

Działanie systemu operacyjnego

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

4. Procesy pojęcia podstawowe

Podstawy informatyki. System operacyjny. dr inż. Adam Klimowicz

System komputerowy. System komputerowy

Komputery przemysłowe i systemy wbudowane

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Warstwy systemu Windows 2000

Działanie systemu operacyjnego

Definicja systemu operacyjnego (1) Definicja systemu operacyjnego (2) Miejsce systemu operacyjnego w architekturze systemu komputerowego

Fuzzing OWASP The OWASP Foundation Piotr Łaskawiec J2EE Developer/Pentester

Tworzenie sterowników dla FreeBSD. Michał Hajduk

OSGi Agata Hejmej

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

KOŁO NAUKOWE INFORMATYKÓW SYSTEMY KONTROLI WERSJI CZ.1 16 XII 2009 OPRACOWAŁ: PRZEMYSŁAW PARDEL

Web Application Firewall - potrzeba, rozwiązania, kryteria ewaluacji.

Uniwersytet Mikołaja Kopernika w Toruniu. Profilowanie ruchu sieciowego w systemie GNU/Linux

Q E M U.

Virtual Grid Resource Management System with Virtualization Technology

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

1.1 Definicja procesu

Podstawy programowania

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Projektowani Systemów Inf.

System operacyjny MACH

Tworzenie maszyn wirtualnych przy pomocy systemu FAI

Programowanie Komponentowe WebAPI

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Zwiększanie bezpieczeństwa usług sieciowych poprzez wirtualizację systemu operacyjnego

System operacyjny System operacyjny

Podział obowiązków, a kontrola dostępu centralne zarządzanie użytkownikami i ich uprawnieniami.

Kernel Kompilacja jądra

Netgraph w systemie FreeBSD. Wojciech A. Koszek MeetBSD 2005 Kraków

EXSO-CORE - specyfikacja

Komunikacja i wymiana danych

Roger Access Control System. Aplikacja RCP Point. Wersja oprogramowania : 1.0.x Wersja dokumentu: Rev. C

WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski. 12 listopada 2007 WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski

76.Struktura oprogramowania rozproszonego.

Projekt i implementacja filtra dzeń Pocket PC

Systemy operacyjne. Paweł Pełczyński

Zaawansowane programowanie w języku C++

Prezentacja systemu RTLinux

Kurs Certyfikowany Inżynier Sieci PROFIBUS DP. Spis treści. Dzień 1

Wykorzystanie regionalnej biblioteki cyfrowej do tworzenia repozytorium instytucjonalnego

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia

Wirtualizacja. Metody, zastosowania, przykłady

TECHNOLOGIE INFORMACYJNE

Procesowa specyfikacja systemów IT

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Zasady organizacji projektów informatycznych

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source

4. Procesy pojęcia podstawowe

Architektura bezpiecznych aplikacji internetowych na platformie Java Enterprise Edition. Jakub Grabowski Warszawa,

Użytkownicy I. Użytkownik. Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień.

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Systemy rozproszone. na użytkownikach systemu rozproszonego wrażenie pojedynczego i zintegrowanego systemu.

OfficeObjects e-forms

Sieciowa instalacja Sekafi 3 SQL

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Jednolity Plik Kontrolny

Jadro monolityczne vs. mikrojadro. Mikrojadro. Olga Kowalczuk. 9 grudnia 2008

Systemy operacyjne III

Kurs Projektowanie i programowanie z Distributed Safety. Spis treści. Dzień 1. I Bezpieczeństwo funkcjonalne - wprowadzenie (wersja 1212)

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier

Transkrypt:

UNIX: architektura i implementacja mechanizmów bezpieczeństwa Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci

Plan prezentacji: Wprowadzenie do struktury systemów rodziny UNIX Prezentacja funkcjonalności wraz z mechanizmami kontroli uprawnień System z punktu widzenia osoby zainteresowanej atakiem na system (bądź obroną poprzez audyt) Podsumowanie: możliwe drogi zapobiegania ewentualnym skutkom wykorzystania błędów w oprogramowaniu

UNIX: Aplikacje Jeden z możliwy podziałów aplikacji: skrypty powłoki: #!/path/to/shell pliki binarne (prawie zawsze w formacie ELF): nagłówki z informacjami dotyczącymi architektury, odpowiednich struktur (informacje o stosie, stercie), informacje do debuggingu, informacje dotyczące bibliotek funkcji właściwa zawartość w postaci instrukcji procesora Po uruchomieniu widziane jako procesy

Aplikacje: kontrola uprawnień Dostęp realizowany z wykorzystaniem testów bazujących na standardowym mechaniźmie uprawnień: UID GID System plików: atrybuty plików (odczyt, zapis, wykonywanie)

UNIX: Przestrzeń jadra Dostęp do wszystkich zasobów komputera Posiada globalny obraz pamięci maszyny: to tutaj odbywa się właściwa alokacja zasobów, manipulacja strukturami procesów, wątków, scheduling, mapowanie deskryptorów plików na właściwe obiekty Musi udźwignąć ciężar całej funkcjonalności systemu udostępniając najbardziej podstawowe mechanizmy

Przestrzeń jądra: kontrola uprawnień Podłożem do kotroli uprawnień jest sprzętowa architektura sprzętu: Tryby pracy procesora W warstwach wyższych interpretacja znanych uprawnień: UID GID Inne

Przestrzeń użytkownika Wykorzystuje funkcjonalność jądra tworząc właściwe środowisko użytkowe: komunikacja poprzez wywołania systemowe (ang. syscall) większość wywołań są celem samym w sobie: read()/write() itd. Inne są uniwersalnym sposobem na interakcję z systemem np.: ioctl(2), sysctl(3)

Kontrola wywołań systemowych: Niektóre niedostępne dla zwykłego użytkownika: ładowanie modułów jądra, ustalanie nazwy maszyny Inne dostępny w przypadku poprawnych argumentów: kill(2) Inne dostępne w zależności od kontekstu: ioctl(2)

Wywołania uniwersalne : ioctl(2) Poprzez operację na dostarczonym deskryptorze możliwe jest: Przekazanie do jądra unikalnego identyfikatora żądania oraz argumentów w postaci bufora danych Odebranie z przekazanego bufora danych pochodzących z przestrzeni jądra Niemożliwe jest bezpośrednie sięganie do danych wskazywanych przez wskaźniki w buforze: Potrzebne są operacje kopiowania między jądrem i użytkownikiem: copyin(9)/copyout(9)

Cechy wspólne wspomnianych mechanizmów: Ograniczają się do testów na identyfikatorze użytkownika wykonującego daną akcję Wszystkie zawierały w swojej historii błędy umożliwiające dokonanie ataku na aplikację i system: interpretacja binariów, brak kontroli argumentów przekazywanych z przestrzeni jądra do użytkownika, problemy z operacjami dotyczącymi deskryptorów, sygnałów, procesów

Przykłady niebezpiecznych zależności w obrębie systemu: Funkcja<->funkcja: Znane przez wszystkich buffer overflow, format strings Aplikacja<->aplikacja: Wymagany jednolity format komunikacji (np.: dane przesyłane w postaci protokołu) Aplikacja<->system: Zmienne środowiskowe, wartości parametrów globalnych dla całego systemu

Przykłady błędów mających wpływ na bezpieczeństwo: ifconf() if_clone_list() PECOFF: Brak kontroli wartości zmiennej przekazanego w strukturze będącej argumentem. Przekazanie wartości ujemnej to DoS (Denial of Service) Spreparowanie pliku w odpowiedni sposób powoduje w przestrzeni jądra uzyskanie ujemnej wartości zmiennej. Rezultat: Denial of Service

Główne powody problemów: Złożoność wewnętrznych struktur danych jest ogromna, a ich analiza trudna Rosnące wymagania stawiene systemowi UNIX (wsparcie dla SMP, przenośność, kompatybilność z innymi systemami) spowodowały, iż kontrola bazująca na UID/GID jest niewystarczająca Błędy nieuważnych programistów: nie wolno ufać danym przekazywanym do systemu bądź aplikacji!

Jak strzec się przed problemami z bezpieczeństwem? Poprzez tworzenie bezpiecznego oprogramowania Przez audyt bezpieczeństwa oprogramowania Poprzez wykorzystanie zaawansowanych możliwości nowoczesnych systemów operacyjnych zastosowania metod minimalizujących straty w przypadku pomyślnego ataku

Audyt: cechy wspólne ataków Wykorzystanie niepoprawnej (braku) kontroli typów i wartości zmiennych Przekazanie wartości nieprzewidzianych przez programistę danego oprogramowania Spowodowanie niespotykanego przepływu instrukcji w oprogramowaniu: Interaktywne interfejsy często mogą zostać wykorzystanie nieinteraktywnie

Metodologie audytowania Typowe podejście do problemu audytu bezpieczeństwa oprogramowania: Analiza kodu binarnego aplikacji Analiza kodów źródłowych aplikacji Podejście mniej popularne, aczkolwiek skuteczne: analiza typu brute-force

Zaawansowane mechanizmy bezpieczeństwa: Dodatkowa kontrola w warstwie jądra systemu Możliwość tworzenia polityk koniecznych do wykonania ściśle określonego zadania Możliwość limitowania zasobów dostępnych dla aplikacji

Minimalizacja uprawnień Capabilities/Privileges: Zminimalizowanie uprawnień koniecznych do wykonania uprzywilejowanej akcji: Wymagana funkcjonalność nie wymusza na administratorze uruchamiania aplikacji z UID == 0 Access Control Lists Szczegółowe określenie praw dostępu do plików

Kryteria kontroli Testy w oparciu o GID/UID przestały wystarczać Systemy muszą posiadać dodatkowe informacje poddawane kontroli: Rozszerzone atrybuty w warstwie procesów i systemie plików

Przykłady dostępnych rozwiązań: FreeBSD TrustedBSD GNU/Linux SELinux Solaris (OpenSolaris)

Mechanizmy kotroli mają pewne wady: Konfiguracja bywa pracochłonna: Łatwość i wygoda administracji systemem maleje wraz ze wzrostem bezpieczeństwa Wdrożenie do powszechnego użycia nawet w obrębie jednej maszyny nie zawsze jest łatwe Nie wszystko da się kontrolować: system to jedna całość

Podejście alternatywne: separacja i wirtualizacja Zamiast modyfikować działanie aplikacji, możliwe staje się zmodyfikowanie środowiska, w którym aplikacja pracuje: chroot(2) (UNIX) jail(2) (FreeBSD) Zones (Solaris) Wirtualizacja systemu operacyjnego: Xen

Dziękuję za uwagę Wojciech A. Koszek dunstan@freebsd.czest.pl