OpenBSD

Transkrypt

OpenBSD
–
zapobieganie – autorzy OpenBSD stawiają sobie za cel nacisk na poprawianie w kodzie
pomyłek, jeszcze zanim (o ile w ogóle) zostanie znaleziony sposób na ich wykorzystanie w
celu dokonania ataku na system. Dzięki takiemu podejściu, w dyskusjach dotyczących
tropienia zagrożeń bezpieczeństwa można spotkać komentarze typu: “ten problem został
rozwiązany w OpenBSD pół roku temu”.
polityka jawności – w OpenBSD duży nacisk kładzie się na oficjalne ujawnianie odkrytych
pomyłek, wraz z publikacją poprawek (ich sprawna dystrybucja i stosowanie jest możliwe
dzięki “errata & patch page”, gdzie publikowane są poprawki dotyczące tak wspólnej dla
wszystkich architektur części kodu, jak i zagadnień specyficznych). Publicznie dostępna jest
też cała grupa list mailingowych, które powiadamiają o różnych rodzajach poprawek (o
różnych stopniach ważności) dotyczących O
–
–
Packet Filter – Od wersji 3.0 OpenBSD w głównej gałęzi projektu za bezpieczeństwo łączności
sieciowej systemu odpowiada Packet Filter, który jest zaawansowanym narzędziem
udostępniającym możliwość szczegółowej konfiguracji zachowania interfejsów sieciowych
(funkcje firewalla), priorytetów ruchu, ograniczeń pasma, itd. OpenBSD nie stawia – jak często
to robi konkurencja – na “łatwość” konfiguracji interfejsów sieciowych (np przy pomocy
narzędzi graficznych), lecz na elastyczność konfiguracji (np poprzez istnienie makr dla PF, itp).
Pseudo Random Number Generator – generowanie nieprzewidywalnych liczb pseudolosowych
jest ważnym zagadnieniem dla bezpieczeństwa. Jądro OpenBSD korzysta przy generowaniu
takich liczb z wielu źródeł entropii, takich jak czasy wystąpienia przerwania myszy, czasy
związane z nadejściem pakietów sieciowych, czasy naciskania klawiszy, itp.
Stosowanie uzyskanych w ten sposób pseudolosowych liczb w systemie operacyjnym jest istotne
dla bezpieczeństwa, i tak OpenBSD kładzie ogromny nacisk na używanie losowych PIDów,
losowych identyfikatorów datagramów IP, nazw plików tymczasowych, elementów losowości przy alokacji pamięci, itp, itd.
nowe funkcje kryptograficzne – oprócz klasycznych już dziś funkcji crypt oraz md5, OpenBSD może używać do haszowania
haseł także funkcji bcrypt, która korzysta z udoskonalonej wersji szyfru blowfish – tzw. eksblowfish (expensive key setup
blowfish). W przeciwieństwie do poprzedników, bcrypt pozwala na regulowanie “siły” zaszyfrowania hasła, tak by potrzebne do
jego rozgryzienia moce obliczeniowe mogły być zwiększane na bieżąco, wraz z wzrostem wydajności systemów
komputerowych. I tak, OpenBSD – na dzień dzisiejszy – przyjmuje dla standardowych użytkowników siłę kodowania hasła na
poziomie “szóstym”, zaś dla administratora – już na poziomie “ósmym”.
wsparcie hardware'owe – OpenBSD udostępnia możliwość korzystania ze sprzętowego wsparcia szyfrowania, głównie dzięki
obsłudze zewnętrznych generatorów liczb (pseudo)losowych, a także zastosowaniu kryptograficznych kart sieciowych.
Mechanizmy nieco bardziej “wewnętrzne”:
–
–
ProPolice – od wersji 3.3 OpenBSD wspiera mechanizm zapobiegania przepełnieniu
buforów, a właściwie zapobiegania wykorzystaniu przepełnienia buforów do
uruchomienia szkodliwego kodu. Aby skorzystać z tego udogodnienia, użytkownicy
powinni kompilować programy przy pomocy przygotowanego do skorzystania
z ProPolice kompilatora, lub korzystać z wersji binarnych dystrybuowanych
z OpenBSD, przygotowanych do tego rodzaju zabezpieczenia.
–
–
ulepszone koncepcje strcpy() i strcat() - częstym miejscem, w którym występują
problemy z przepełnieniem bufora, jest użycie jednej z tych funkcji – problematyczna
jest zawsze długość kopiowanego lub zlepianego łańcucha i występowanie znacznika
jego zakończenia. Programiści najczęściej usiłują radzić sobie z tym korzystając
z funkcji strncpy() oraz strncat(), które jako jeden z parametrów przyjmują ilość
znaków, na jakich ma być przeprowadzona operacja. Takie postępowanie wymaga
jednak pewnego nakładu pracy programistycznej, a ponadto te funkcje w niektórych
przypadkach znacząco spowalniają pracę systemu (z powodu zerowania wszystkich
niewykorzystanych miejsc w pamięci, a nie tylko ustawieniu znacznika końca
łańcucha). Kod używający tych funkcji wygląda czasem dość niezrozumiale, a jego
zrozumienie sprawia wrażenie zadania karkołomnego.
–
–
Aby poradzić sobie z tym problemem, zespół OpenBSD opracował funkcje strlcpy() oraz strlcat(), dobrze przemyślane pod
kątem uproszczenia programowania. Jako dodatkowy parametr przyjmują one rozmiar bufora, na którym chcemy operować
i zwalniają programistę z konieczności niezależnego dodania znacznika końca łańcucha już po wywołaniu funkcji na tym
łańcuchu operującej.
–
–
–
Więcej na ten temat w dokumencie http://www.openbsd.org/papers/strlcpy-paper.ps
–
–
bezpieczniejszy dostęp do pamięci – zabezpieczenia na poziomie stron (page-level memory permissions): dana strona może
zostać oznakowana jako wykonywalna lub zapisywalna, ale nigdy jedno i drugie jednocześnie. Dzięki temu potencjalny intruz
nie skorzysta już tak łatwo z możliwości zapisania, a następnie
uruchomienia szkodliwego kodu. To zabezpieczenie jest dostępne na
niektórych architekturach, na których działa OpenBSD.
–
–
szyfrowanie pamięci wirtualnej – przydatną z punktu widzenia
bezpieczeństwa danych funkcjonalnością udostępnianą przez OpenBSD
jest szyfrowanie pamięci wirtualnej. Cóż po zabezpieczeniu dysku przez
szyfrowanie systemu plików, gdyby istotne dane były ładowane do
niezabezpieczonej pamięci wirtualnej? Mogłyby zostać odczytane np po
wyłączeniu systemu. W pewnych przypadkach istotne dane z pamięci
witrualnej, jak hasła, itp, mogłyby przetrwać na dysku nawet restart
systemu. Nieszczęściom, które mogłyby wyniknąć z takiego przebiegu
spraw, zapobiegnie szyfrowanie pamięci wirtualnej. Ulotne klucze są
generowane dzięki sprawnym mechanizmom pseudolosowości,
i zapominane, kiedy tylko nie są potrzebne.
–
Szczegółową analizę zagadnienia można znaleźć w dokumencie
http://www.openbsd.org/papers/swapencrypt.ps

Podobne dokumenty