Wydawnictwo Helion
ul. Koœciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
125 sposobów na
bezpieczeñstwo sieci.
Wydanie II
Autor: Andrew Lockhart
T³umaczenie: Leszek Sagalara na podstawie
„
100 sposobów
na bezpieczeñstwo sieci
”
w t³umaczeniu Witolda Zio³o
ISBN: 978-83-246-0986-4
Tytu³ orygina³u:
Network Security Hacks: Tips & Tools for
Protecting Your Privacy
Format: B5, stron: 440
Praktyczny przewodnik po technikach zabezpieczania sieci komputerowych
•
Jak sprawnie zabezpieczyæ system?
•
Jak zapewniæ sobie prywatnoœæ w internecie?
•
Jak skutecznie walczyæ z sieciowymi w³amywaczami?
W naszych domach montujemy solidne zamki i drzwi, chronimy samochody
wymyœlnymi alarmami, w firmach zak³adamy systemy monitoringu, jednak nadal wiele
osób nie zwraca wystarczaj¹cej uwagi na bezpieczeñstwo komputerów w sieciach
domowych oraz korporacyjnych. Luki w systemach informatycznych powoduj¹ ka¿dego
roku straty rzêdu miliardów dolarów, a przecie¿ dostêpnych jest wiele narzêdzi
i technik, które pozwalaj¹ skutecznie zabezpieczyæ komputery przed atakami
crackerów.
„
125 sposobów na bezpieczeñstwo w sieci. Wydanie II
”
to zaktualizowany
i rozbudowany zbiór praktycznych porad dotycz¹cych zabezpieczania systemów
informatycznych przed atakami. Dziêki wskazówkom przygotowanym przez cenionych
profesjonalistów dowiesz siê, jak stosowaæ najnowsze narzêdzia systemowe
i niezale¿ne programy do zabezpieczania systemów i danych, ochrony w³asnej
prywatnoœci w sieci czy bezpiecznego ³¹czenia zdalnych maszyn. Nauczysz siê tak¿e
zastawiaæ pu³apki na sieciowych napastników, wykrywaæ ich obecnoœæ w sieci i szybko
przywracaæ normalne funkcjonowanie systemu po ewentualnym ataku.
•
Zabezpieczanie systemów Windows i uniksowych
•
Zapewnianie prywatnoœci w internecie
•
Konfigurowanie i testowanie zapór sieciowych
•
Bezpieczne korzystanie z us³ug
•
Zabezpieczanie sieci przewodowych i bezprzewodowych
•
Monitorowanie dzia³ania sieci
•
Stosowanie silnego szyfrowania i uwierzytelniania
•
Wykrywanie w³amañ i przywracanie dzia³ania sieci
Stosuj sprawdzone sposoby zapewniania bezpieczeñstwa w sieci
Spis tre
ğci _
3
Spis tre
ğci
Twórcy ksi
Ćīki ................................................................................................................................7
Wst
ċp .............................................................................................................................................11
Rozdzia
â 1. Bezpieczeĕstwo systemu Unix ................................................................................17
1. Zabezpieczenie punktów montowania ........................................................................ 17
2. Wynajdywanie programów z ustawionymi bitami SUID i SGID ........................... 19
3. Wynajdywanie udostöpnionych katalogów ................................................................ 20
4. Tworzenie elastycznych hierarchii uprawnieþ
za pomocñ list ACL standardu POSIX ....................................................................... 21
5. Zabezpieczenie dzienników zdarzeþ przed modyfikacjñ ......................................... 24
6. Podziaä zadaþ administracyjnych ................................................................................. 26
7. Automatyczna kryptograficzna weryfikacja sygnatury ............................................ 28
8. Odnalezienie nasäuchujñcych usäug .............................................................................. 30
9. Zapobieganie wiñzaniu siö usäug z interfejsami ......................................................... 33
10. Ograniczenie usäug do Ĉrodowiska sandbox .............................................................. 34
11. UĔycie serwera proftp z MySQL jako Ēródäem danych uwierzytelniajñcych ....... 38
12. Zabezpieczenie siö przed atakami rozbicia stosu ....................................................... 41
13. grsecurity — zabezpieczenie na poziomie jñdra ........................................................ 43
14. Ograniczanie aplikacji za pomocñ äatki grsecurity ..................................................... 48
15. Ograniczanie wywoäaþ systemowych za pomocñ mechanizmu systrace .............. 50
16. Automatyczne tworzenie zasad mechanizmu systrace ............................................. 54
17. Kontrola logowania za pomocñ moduäów PAM ........................................................ 56
18. Ograniczenie uĔytkownikom usäug przesyäania plików do SCP i SFTP ............... 60
19. Uwierzytelnianie za pomocñ haseä jednorazowych ................................................... 63
20. ćrodowiska ograniczonych powäok .............................................................................. 66
21. Ograniczenie uĔytkownikom i grupom uĔycia zasobów ......................................... 67
22. Automatyczne uaktualnianie systemu ......................................................................... 69
Rozdzia
â 2. Bezpieczeĕstwo systemu Windows ........................................................................71
23. Kontrola zainstalowanych poprawek ........................................................................... 72
24. Konfiguracja aktualizacji automatycznych
za pomocñ przystawki Zasady grupy ........................................................................ 76
4
_ Spis treğci
25. Lista otwartych plików oraz procesów, które ich uĔywajñ ...................................... 79
26. Lista dziaäajñcych usäug i otwartych portów .............................................................. 81
27. Uruchomienie inspekcji .................................................................................................. 82
28. Zdobywanie informacji o programach uruchamianych automatycznie ................ 83
29. Zabezpieczenie dzienników zdarzeþ ........................................................................... 85
30. Zmiana maksymalnej wielkoĈci dzienników zdarzeþ .............................................. 85
31. Archiwizacja i czyszczenie dzienników zdarzeþ ....................................................... 87
32. Wyäñczenie udziaäów domyĈlnych ............................................................................... 89
33. Zaszyfrowanie folderu Temp ........................................................................................ 91
34. Tworzenie kopii zapasowej klucza EFS ....................................................................... 92
35. Czyszczenie pliku stronicowania podcza zamykania systemu ............................... 98
36. Wyszukiwanie haseä, których waĔnoĈè nigdy nie wygasa ..................................... 100
Rozdzia
â 3. Ochrona prywatnoğci i anonimowoğý ..................................................................103
37. Ochrona przed analizñ ruchu ...................................................................................... 103
38. Tunelowanie SSH za pomocñ programu Tor ............................................................ 107
39. Bezproblemowe szyfrowanie plików ......................................................................... 108
40. Ochrona przed wyäudzaniem danych ........................................................................ 112
41. Mniej haseä na stronach WWW ................................................................................... 116
42. Szyfrowanie poczty w programie Thunderbird ....................................................... 118
43. Szyfrowanie poczty w systemie Mac OS X ............................................................... 123
Rozdzia
â 4. Zapory sieciowe ......................................................................................................127
44. Zapora sieciowa Netfilter ............................................................................................. 127
45. Zapora sieciowa PacketFilter systemu OpenBSD .................................................... 131
46. Ochrona komputera za pomocñ Zapory systemu Windows ................................. 138
47. Zamykanie otwartych portów i blokowanie protokoäów ....................................... 146
48. Zastöpujemy Zaporö systemu Windows ................................................................... 148
49. Tworzenie bramy uwierzytelniajñcej ......................................................................... 155
50. Sieè z ograniczeniem na wyjĈciu ................................................................................. 158
51. Testowanie zapory sieciowej ....................................................................................... 159
52. Filtrowanie adresów MAC za pomocñ zapory sieciowej Netfilter ....................... 162
53. Blokowanie Tora ............................................................................................................ 163
Rozdzia
â 5. Szyfrowanie i zabezpieczanie usâug ......................................................................167
54. Szyfrowanie usäug IMAP i POP za pomocñ SSL ...................................................... 167
55. Konfiguracja serwera SMTP Sendmail wykorzystujñcego szyfrowanie TLS ...... 170
56. Konfiguracja serwera SMTP Qmail wykorzystujñcego szyfrowanie TLS ............ 172
57. Instalacja serwera Apache z rozszerzeniem SSL i z trybem suEXEC ................... 173
58. Zabezpieczenie serwera BIND .................................................................................... 178
Spis tre
ğci _
5
59. Konfiguracja prostego i bezpiecznego serwera DNS ............................................... 181
60. Zabezpieczenie bazy danych MySQL ........................................................................ 184
61. Bezpieczne udostöpnianie plików w systemie Unix ................................................ 187
Rozdzia
â 6. Bezpieczeĕstwo sieci ..............................................................................................191
62. Wykrywanie faäszowania odpowiedzi ARP ............................................................. 191
63. Tworzenie statycznych tablic ARP ............................................................................. 194
64. Ochrona SSH przed atakami typu brute-force ......................................................... 196
65. Wprowadzanie w bäñd programów identyfikujñcych systemy operacyjne ......... 198
66. Inwentaryzacja sieci ....................................................................................................... 201
67. Wyszukiwanie säabych punktów sieci ....................................................................... 204
68. Synchronizacja zegarów serwerów ............................................................................. 213
69. Tworzenie wäasnego oĈrodka certyfikacyjnego ........................................................ 215
70. Rozpowszechnienie certyfikatu CA wĈród klientów ............................................... 218
71. Tworzenie i przywracanie kopii zapasowej oĈrodka certyfikacji
za pomocñ Usäug certyfikatów .................................................................................. 219
72. Wykrywanie programów nasäuchujñcych w sieci Ethernet ................................... 226
73. Pomoc w Ĉledzeniu napastników ................................................................................ 232
74. Wykrywanie wirusów w serwerach uniksowych .................................................... 234
75. ćledzenie luk w zabezpieczeniach .............................................................................. 238
Rozdzia
â 7. Bezpieczeĕstwo sieci bezprzewodowych .............................................................241
76. Zmiana routera w zawansowanñ platformö bezpieczeþstwa ................................ 241
77. Szczegóäowe uwierzytelnianie w sieci bezprzewodowej ........................................ 245
78. Portal przechwytujñcy ................................................................................................... 248
Rozdzia
â 8. Rejestracja zdarzeĕ .................................................................................................255
79. Centralny serwer rejestracji zdarzeþ (syslog) ........................................................... 256
80. Konfigurowanie rejestracji zdarzeþ ............................................................................ 257
81. Wäñczenie systemu Windows w infrastrukturö syslog ........................................... 259
82. Automatyczne streszczanie dzienników zdarzeþ .................................................... 266
83. Automatyczne monitorowanie dzienników zdarzeþ .............................................. 268
84. Zbieranie informacji o zdarzeniach ze zdalnych oĈrodków ................................... 271
85. Rejestracja dziaäaþ uĔytkowników za pomocñ systemu rozliczeþ ........................ 276
86. Centralne monitorowanie stanu bezpieczeþstwa serwerów .................................. 278
Rozdzia
â 9. Monitorowanie i wyznaczanie trendów .................................................................287
87. Monitorowanie dostöpnoĈci usäug .............................................................................. 288
88. KreĈlenie trendów .......................................................................................................... 295
89. ntop — statystyki sieci w czasie rzeczywistym ........................................................ 298
90. Gromadzenie statystyk za pomocñ reguä zapory sieciowej .................................... 300
91. Zdalne nasäuchiwanie ruchu sieciowego ................................................................... 301
6
_ Spis treğci
Rozdzia
â 10. Bezpieczne tunele .................................................................................................305
92. Konfiguracja protokoäu IPsec w systemie Linux ...................................................... 305
93. Konfiguracja protokoäu IPsec w systemie FreeBSD ................................................. 309
94. Konfiguracja protokoäu IPsec w systemie OpenBSD ............................................... 313
95. Szyfrowanie oportunistyczne za pomocñ Openswan ............................................. 317
96. Przekazywanie i szyfrowanie ruchu za pomocñ protokoäu SSH .......................... 319
97. Szybkie logowanie za pomocñ kluczy klienta SSH .................................................. 321
98. Proxy Squid w poäñczeniu SSH ................................................................................... 323
99. UĔycie SSH jako proxy SOCKS 4 ................................................................................ 325
100. Szyfrowanie i tunelowanie ruchu za pomocñ SSL ................................................... 328
101. Tunelowanie poäñczeþ wewnñtrz HTTP ................................................................... 330
102. Tworzenie tunelu za pomocñ VTun i SSH ................................................................ 332
103. Generator plików vtund.conf ...................................................................................... 337
104. Tworzenie sieci VPN äñczñcych róĔne platformy systemowe ................................ 341
105. Tunelowanie PPP ........................................................................................................... 347
Rozdzia
â 11. Wykrywanie wâamaĕ do sieci ...............................................................................349
106. Wykrywanie wäamaþ za pomocñ programu Snort .................................................. 350
107. ćledzenie alarmów ........................................................................................................ 354
108. Monitorowanie w czasie rzeczywistym ..................................................................... 357
109. Zarzñdzanie sieciñ sensorów ....................................................................................... 363
110. Pisanie wäasnych reguä programu Snort ................................................................... 370
111. Zapobieganie wäamaniom za pomocñ programu Snort_inline ............................. 376
112. Sterowanie zaporñ sieciowñ za pomocñ programu SnortSam ............................... 379
113. Wykrywanie nietypowego zachowania ..................................................................... 383
114. Automatyczne uaktualnianie reguä programu Snort .............................................. 384
115. Budowa sieci niewidzialnych sensorów .................................................................... 386
116. UĔycie programu Snort w wysoko wydajnych Ĉrodowiskach sieciowych .......... 387
117. Wykrywanie i zapobieganie atakom na aplikacje WWW ...................................... 391
118. Wykrywanie wirusów w ruchu sieciowym .............................................................. 395
119. Symulacja sieci niezabezpieczonych komputerów .................................................. 399
120. Rejestracja aktywnoĈci komputera-puäapki .............................................................. 405
Rozdzia
â 12. Powrót do dziaâania i reakcja ...............................................................................411
121. Tworzenie obrazu systemu plików ............................................................................ 411
122. Weryfikacja integralnoĈci plików ............................................................................... 413
123. Wykrywanie zmodyfikowanych plików za pomocñ pakietów RPM ................... 418
124. Poszukiwanie zainstalowanych zestawów rootkit .................................................. 420
125. Poszukiwanie wäaĈciciela sieci .................................................................................... 422
Skorowidz .................................................................................................................................. 425
Zabezpieczenie punktów montowania
SPOSÓB
1.
Bezpiecze
ĕstwo systemu Unix _
17
R O Z D Z I A
á P I E R W S Z Y
Bezpiecze
ĕstwo
systemu Unix
Sposoby 1. – 22.
Budowa sieci polega na äñczeniu komputerów, co oznacza, Ĕe sieè komputerowa nie jest
bardziej bezpieczna niĔ komputery, z których siö skäada. Jeden niezabezpieczony kom-
puter stanowi zagroĔenie dla caäej sieci, gdyĔ gdy tylko dostanie siö w niepowoäane röce,
moĔe zostaè wykorzystany jako narzödzie rekonesansu lub platforma prowadzenia ata-
ku. Gdy w którymĈ z serwerów dziaäajñ äatwe do zawäadniöcia usäugi, zapory sieciowe
(ang. firewall), systemy wykrywania wäamaþ i inne Ĉrodki bezpieczeþstwa stajñ siö bez-
radne. Przed zabezpieczeniem samej sieci, naleĔy najpierw w dostatecznym stopniu za-
bezpieczyè komputery tej sieci.
W rozdziale przedstawiono wiele sposobów zmniejszenia ryzyka zwiñzanego z dziaäa-
niem usäug systemu uniksowego. Mimo Ĕe kaĔde zaprezentowanie tu rozwiñzanie sta-
nowi zamkniötñ caäoĈè, warto zapoznaè siö z resztñ rozdziaäu. Stosujñc Ĉrodki obronne
tylko jednego rodzaju, ryzykuje siö, Ĕe wszelkie starania pójdñ na marne, gdy tylko wäa-
mywacz odkryje jak je obejĈè. Skarbiec na Wawelu nie jest chroniony jedynie drzwiami
z käódkñ, podobnie Ĕadne pojedyncze rozwiñzanie nie moĔe skutecznie zabezpieczyè Ĕad-
nego serwera, a liczba potrzebnych Ĉrodków bezpieczeþstwa roĈnie wraz z wartoĈciñ chro-
nionych zasobów.
Zapewnienie bezpieczeþstwa jest staäym procesem, który musi trwaè i musi byè doglñdany.
Nie ma, poza odäñczeniem komputera od sieci, Ĕadnego innego pojedynczego sposobu jego
zabezpieczenia. Pamiötajñc o tym, moĔna przystñpiè do budowy bezpiecznego serwera za-
spokajajñcego okreĈlone potrzeby.
S P O S Ó B
1.
Zabezpieczenie punktów montowania
Za pomoc
ą opcji montowania moĪna ograniczyü dziaáania wáamywacza.
Z Uniksa korzysta siö przewaĔnie przez jego system plików. Dlatego warto ograniczyè to,
co z plikami moĔe zrobiè wäamywacz po przedostaniu siö do systemu. Jednym ze sposobów
na to jest uĔycie ograniczajñcych opcji montowania.
SPOSÓB
1.
Zabezpieczenie punktów montowania
18
_ Bezpieczeĕstwo systemu Unix
Opcja montowania decyduje o sposobie dostöpu do systemu plików. Przekazywana jest do
jñdra systemu operacyjnego w czasie uruchamiania systemu plików. Opcje montowania
moĔna wykorzystaè, by uniemoĔliwiè traktowanie plików jako urzñdzeþ, wykonywanie
programów binarnych oraz wykorzystanie bitu SUID. W tym celu uĔywa siö parametrów
odpowiednio nodev, noexec i nosuid. System plików moĔna równieĔ za pomocñ opcji
ro
zamontowaè w trybie „tylko do odczytu”.
Parametry te podaje siö wierszu poleceþ, wydajñc polecenie mount z opcjñ -o. Przezna-
czywszy na przykäad dla katalogu /tmp oddzielnñ partycjö, bödñcñ trzeciñ partycjñ pierw-
szego dysku IDE systemu, moĔna zamontowaè jñ za pomocñ parametrów nodev, noexec
i nosuid za pomocñ poniĔszego polecenia:
#
mount -o nodev,noexec,nosuid /dev/hda3 /tmp
Poleceniu temu odpowiada zapis w pliku /etc/fstab:
/dev/hda3 /tmp ext3 defaults,nodev,noexec,nosuid 1 2
Po starannym przeanalizowaniu swoich potrzeb i podzieleniu dysku na kilka systemów
plików moĔna za pomocñ opcji montowania zwiökszyè trudnoĈci, jakie napotka wäamy-
wacz, próbujñc gäöbiej wniknñè do systemu. Najlepiej to zrobiè, dzielñc drzewo katalogów
na obszary, w których do poprawnego dziaäania systemu musi istnieè moĔliwoĈè zapi-
sywania oraz na takie, w których taka moĔliwoĈè nie jest konieczna. Opcjö „tylko do od-
czytu” moĔna zastosowaè we wszystkich czöĈciach systemu plików, których zawartoĈè nie
zmienia siö czösto. Dobrym kandydatem do uĔycia tej opcji moĔe byè na przykäad katalog
/usr, ale zaleĔy to od czöstotliwoĈci uaktualniania oprogramowania systemowego.
OczywiĈcie wiele katalogów (na przykäad /home) musi byè montowanych w trybie „do
odczytu i do zapisu”. Mimo to jest bardzo maäo prawdopodobne, by uĔytkownicy trady-
cyjnego systemu wielodostöpnego musieli uruchamiaè w swoich katalogach macierzystych
programy binarne z bitem SUID, lub by musieli w nich tworzyè pliki urzñdzeþ. Dlatego
katalogi macierzyste uĔytkowników mo
Ĕna przechowywaè w oddzielnym systemie plików
zamontowanym z opcjami nodev i nosuid. Dodatkowo, jeĔeli dojdzie siö do wniosku, Ĕe
uĔytkownicy nie muszñ uruchamiaè programów przechowywanych w swych katalogach
macierzystych, moĔna teĔ uĔyè opcji montowania noexec. Podobna sytuacja ma miejsce
w przypadku katalogów /tmp i /var, w których prawdopodobieþstwo, by jakiĈ proces miaä
uzasadnione powody wykonywania programów binarnych z bitem SUID, lub bez niego,
albo korzystaä z plików urzñdzeþ jest bardzo maäe. Tego rodzaju zabezpieczenie zapo-
biega pozostawieniu przez wäamywacza trojana na przykäad w katalogu /tmp lub w katalo-
gu któregoĈ uĔytkownika. W takim przypadku wäamywaczowi uda siö zainstalowaè pro-
gram, ale nie bödzie mógä go juĔ uruchomiè, bez wzglödu na bity chmod programu.
NaleĔy zauwaĔyè, Ĕe usäugi dziaäajñce w Ĉrodowisku chroot() [Sposób 10.]
mogñ nie dziaäaè, gdy opcja nodev zostanie uĔyta do systemu plików dziaäajñcym
w tym Ĉrodowisku. Wynika to z tego, Ĕe urzñdzenia takie jak /dev/log czy
/dev/null muszñ byè dostöpne w Ĉrodowisku chroot().
Wynajdywanie programów z ustawionymi bitami SUID i SGID
SPOSÓB
2.
Bezpiecze
ĕstwo systemu Unix _
19
Istnieje kilka sposobów, za pomocñ których wäamywacz moĔe obejĈè ograniczenia punk-
tów montowania. W Linuksie dziaäanie opcji noexec moĔna ominñè, uruchamiajñc pro-
gramy binarne znajdujñce siö w takim systemie plików za pomocñ biblioteki /lib/ld-linux.so.
Na pierwszy rzut oka wydaje siö, Ĕe moĔna temu zaradziè uniemoĔliwiajñc uruchomienie
biblioteki ld-linux.so, ale to uniemoĔliwiäoby równieĔ wykonywanie siö wszystkich pro-
gramów korzystajñcych z bibliotek doäñczanych dynamicznie.
Zatem jeĔeli wszystkie uĔywane programy nie sñ poäñczone z bibliotekami statycznie (a naj-
prawdopodobniej nie sñ), uĔycie opcji noexec w Linuksie ma niewielkie znaczenie. Poza
tym, wäamywacz, który zdobyä uprawnienia uĔytkownika root nie bödzie zbyt dotkliwie
ograniczony zamontowaniem systemu plików ze specjalnymi opcjami, gdyĔ moĔe on
rozmontowaè go i zamontowaè ponownie za pomocñ opcji -o remount. Jednak stosujñc
opcje montowania, mo
Ĕna z äatwoĈciñ ograniczyè moĔliwoĈè dziaäania wäamywacza, zanim
ten posiñdzie uprawnienia uĔytkownika root.
S P O S Ó B
2.
Wynajdywanie programów z ustawionymi bitami SUID i SGID
Szybki sposób wykrycia programów, które mog
ą umoĪliwiü uzyskanie uprawnieĔ uĪytkownika root
oraz programów otwieraj
ących tylne wejĞcia.
Jedna z moĔliwoĈci zwiökszenia przez uĔytkownika swoich uprawnieþ w systemie polega
na wykorzystaniu säaboĈci programu opatrzonego bitem SUID lub SGID. Bity SUID i SGID
säuĔñ do uzyskania przez program specjalnych uprawnieþ, wyĔszych od posiadanych przez
uruchamiajñcego go uĔytkownika. Jednym z takich programów jest passwd. Pozwolenie
uĔytkownikowi na zmianö hasäa, przy jednoczesnym uniemoĔliwieniu mu modyfikowania
systemowego pliku haseä oznacza, Ĕe program passwd musi dziaäaè z uprawnieniami uĔyt-
kownika root. Dlatego program ten ma ustawiony bit SUID, który powoduje, Ĕe program
wykonywany jest z uprawnieniami jego wäaĈciciela. Podobnie, gdy ustawiony jest bit
SGID, program wykonuje siö z uprawnieniami grupy bödñcej wäaĈcicielem pliku.
Wynik dziaäania polecenia ls -l na programie binarnym majñcym ustawiony bit SUID
wyglñda nastöpujñco:
-r-s--x--x 1 root root 16336 Feb 13 2003 /usr/bin/passwd
Zamiast bitu wykonania (x), w grupie bitów wäaĈciciela pliku programu wystöpuje bit s,
który oznacza, Ĕe program posiada ustawiony bit SUID.
Niestety, Ēle napisany program binarny posiadajñcy ustawiony bit SUID lub SGID moĔe
posäuĔyè do szybkiego i stosunkowo äatwego podniesienia uprawnieþ uĔytkownika. Poza
tym wäamywacz, który juĔ zdobyä uprawnienia uĔytkownika root, moĔe ukryè w systemie
programy binarne SUID, by otworzyè sobie tylne wejĈcie do systemu. Z tych powodów
naleĔy odnaleĒè w systemie wszystkie programy binarne SUID i SGID. Jest to prosta czyn-
noĈè, którñ moĔna wykonaè za pomocñ polecenia:
#
find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -la {} \;
WaĔnñ rzeczñ, którñ naleĔy stwierdziè, jest to czy program SUID jest skryptem powäoki,
czy plikiem binarnym, gdyĔ niezwykle äatwo jest zmieniè potencjalnie nieszkodliwy skrypt
w tylne wejĈcie do systemu. Na szczöĈcie wiökszoĈè systemów operacyjnych ignoruje bity
SPOSÓB
3.
Wynajdywanie udost
Ċpnionych katalogów
20
_ Bezpieczeĕstwo systemu Unix
SUID i SGID skryptów powäoki. Chcñc odnaleĒè wszystkie skrypty z ustawionymi bitami
SUID lub SGID, naleĔy zmieniè argument opcji -exec ostatniego polecenia i dodaè do
niego potok:
#
find / \( -perm -4000 -o -perm -2000 \) \
-type f -exec file {} \; | grep -v ELF
W tym przypadku, po odkryciu pliku z ustawionym bitem SUID lub SGID uruchomiony
zostanie program file, który sprawdzi, jakiego rodzaju jest badany plik. JeĔeli jest to plik
wykonywalny, program grep odfiltruje go. W przeciwnym razie informacje o pliku pojawiñ
siö na ekranie.
W wiökszoĈci systemów operacyjnych pliki wykonywalne zapisane sñ w formacie ELF.
W przypadku systemów operacyjnych nie korzystajñcych z tego formatu (starsze wersje
Linuksa uĔywaäy formatu a.out, a AIX uĔywa XCOFF), naleĔy w poleceniu grep zastñpiè
typ ELF typem formatu binarnego uĔywanego w danym systemie operacyjnym. W przy-
padku wñtpliwoĈci, jaki format jest uĔywany w danym systemie, program file naleĔy wyko-
naè na dowolnym programie binarnym, w wyniku czego na ekranie pojawi siö poszuki-
wany äaþcuch znaków.
Oto przykäad uĔycia programu file na pliku binarnym systemu Mac OS X:
$
file /bin/sh
/bin/sh: Mach-O executable ppc
MoĔna jeszcze pójĈè dalej i za pomocñ programu cron uruchamiaè polecenie wyszukujñ-
ce programy SUID codziennie, a wynik jego dziaäania zapisywaè do pliku. Na przykäad
poniĔszy zapis znajdujñcy siö w pliku crontab säuĔy do wyszukiwania plików z ustawio-
nym bitem SUID lub SGID i do porównania aktualnych wyników poszukiwaþ z wynikami
z dnia poprzedniego, a nastöpnie wysyäania wyników poprzez email (wszystkie polecenia
naleĔy wpisaè w jednym wierszu):
0 4 * * * find / \( -perm -4000 -o -perm -2000 \) -type f \
> /var/log/sidlog.new &&
diff /var/log/sidlog.new /var/log/sidlog &&
mv /var/log/sidlog.new /var/log/sidlog
Aktualna lista plików SUID i SGID zostanie zapisana do pliku /var/log/sidlog.
S P O S Ó B
3.
Wynajdywanie udost
ċpnionych katalogów
Szybki sposób wykrycia niezabezpieczonych katalogów.
Katalogi, w których mogñ zapisywaè wszyscy (ang. world-writable) lub czäonkowie grup,
stanowiñ z punktu widzenia bezpieczeþstwa powaĔny problem. JeĔeli maski umask sñ
niepoprawne, uĔytkownicy mogñ nieĈwiadomie tworzyè niebezpieczne pliki, nie zdajñc
sobie przy tym sprawy z wynikajñcych z tego konsekwencji. Majñc to na uwadze, naleĔy
odszukaè w systemie wszystkie katalogi o rozluĒnionych uprawnieniach. Podobnie jak
w poprzednim przypadku [Sposób 2.], moĔna to zrobiè za pomocñ programu find:
#
find / -type d \( -perm -g+w -o -perm -o+w \) -exec ls -lad {} \;
Tworzenie elastycznych hierarchii uprawnie
Ĕ za pomocą list ACL standardu POSIX
SPOSÓB
4.
Bezpiecze
ĕstwo systemu Unix _
21
Wszystkie katalogi, których nazwy pojawiñ siö w wyniku dziaäania tego polecenia, powinny
mieè ustawiony w uprawnieniach „lepki” bit reprezentowany przez literö t. Ustawienie
„lepkiego” bitu w uprawnieniach do katalogu, w którym zapisywaè mogñ wszyscy po-
woduje, Ĕe mimo Ĕe wszyscy mogñ tworzyè w nim pliki, to jednak nikt nie moĔe usuwaè
ani modyfikowaè plików innych uĔytkowników.
Dostrzegajñc w wyniku dziaäania powyĔszego polecenia katalog nie zawierajñcy „lep-
kiego” bitu naleĔy siö zastanowiè, czy rzeczywiĈcie uprawnienia do zapisu w tym kata-
logu muszñ mieè wszyscy, czy moĔe lepiej jest zastosowaè w nim uprawnienia grupowe
lub listy ACL [Sposób 4.]. JeĔeli uprawnienia do zapisywania w katalogu muszñ mieè
rzeczywiĈcie wszyscy, naleĔy za pomocñ polecenia chmod +t ustawiè w nim „lepki” bit.
Aby uzyskaè listö katalogów, które nie majñ ustawionego „lepkiego” bitu, naleĔy wydaè
polecenie:
#
find / -type d \( -perm -g+w -o -perm -o+w \) \
-not -perm -a+t -exec ls -lad {} \;
W przypadku systemów, które dla kaĔdego uĔytkownika tworzñ oddzielnñ grupö (na
przykäad przy tworzeniu uĔytkownika andrew tworzona jest równoczeĈnie jego podstawo-
wa grupa o tej samej nazwie), naleĔy zmodyfikowaè poprzednie polecenie, by nie poszu-
kiwaäo katalogów zapisywalnych przez grupy. W przeciwnym razie na ekranie pojawi siö
wiele nieistotnych informacji. W tym celu z polecenia naleĔy usunñè czäon -perm -g+w.
S P O S Ó B
4.
Tworzenie elastycznych hierarchii uprawnie
ĕ
za pomoc
Ć list ACL standardu POSIX
Tam, gdzie tradycyjne uniksowe uprawnienia nie wystarcz
ą, naleĪy wykorzystaü listy ACL.
W wiökszoĈci przypadków tradycyjny system uprawnieþ systemu Unix sprawdza siö zna-
komicie. Jednak w Ĉrodowiskach wielu wspóäpracujñcych ze sobñ uĔytkowników wyma-
gajñcych dostöpu do róĔnych plików, system ten staje siö nieporöczny. Listy kontroli dostö-
pu ACL (ang. Access Control List) sñ czymĈ stosunkowo nowym w systemach uniksowych,
ale od jakiegoĈ czasu sñ wykorzystywane w ich komercyjnych odpowiednikach. Listy
ACL co prawda nie zwiökszajñ bezpieczeþstwa systemu, za to zmniejszajñ zäoĔonoĈè
zarzñdzania uprawnieniami. List ACL sñ nowym sposobem nadawania uprawnieþ do
plików i katalogów, nie wymagajñcym tworzenia niepotrzebnych grup.
Listy ACL przechowywane sñ w postaci rozszerzonych atrybutów w metadanych systemu
plików. Jak sama nazwa wskazuje, säuĔñ do przyznawania lub odmawiania dostöpu do
danego pliku na podstawie zdefiniowanych kryteriów. Listy ACL nie polegajñ jednak na
caäkowitej rezygnacji z tradycyjnego systemu uprawnieþ. Listy ACL moĔna definiowaè
zarówno dla uĔytkowników, jak i grup, i wciñĔ zwiñzane sñ z dost
öpem do odczytu, do
zapisu i do wykonania. Dodatkowo listö kontroli dostöpu moĔna zdefiniowaè dla dowol-
nego uĔytkownika lub grupy, którym nie zostaäa przypisana Ĕadna inna lista ACL, co ma
podobne znaczenie jak bity „pozostali” w uprawnieniach do pliku.
SPOSÓB
4.
Tworzenie elastycznych hierarchii uprawnie
Ĕ za pomocą list ACL standardu POSIX
22
_ Bezpieczeĕstwo systemu Unix
System list kontroli dostöpu uĔywa teĔ tak zwanych masek ACL, filtrujñcych uprawnienia
wszystkich list ACL dotyczñcych okreĈlonych uĔytkowników lub grupy. Dziaäanie masek
ACL jest podobne do dziaäania polecenia umask, choè nie do koþca. Gdy na przykäad
maska ACL przyjmuje wartoĈè r--, dowolna lista ACL odnoszñca siö do okreĈlonego uĔyt-
kownika lub grupy, która pozwala na wiöcej (na przykäad rw-), zostaje w rezultacie ograni-
czona do r--. Katalogi mogñ zawieraè domyĈlne listy ACL, które definiujñ poczñtkowe listy
ACL tworzonych w nich plików i podkatalogów.
Aktywacja list kontroli dost
ċpu
WiökszoĈè stosowanych obecnie systemów plików w Linuksie (Ext2/3, ReiserFS, JFS i XFS)
potrafi obsäugiwaè listy ACL. W przypadku korzystania z systemu Linux naleĔy spraw-
dziè, czy ustawiona zostaäa jedna z poniĔszych opcji konfiguracyjnych jñdra, odpowiednio
do uĔywanego systemu plików:
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
Aby aktywowaè listy ACL w systemie FreeBSD, naleĔy zamontowaè dowolny system
plików z opcjñ montowania acls:
#
mount -o acls -u /usr
#
mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1f on /usr (ufs, local, soft-updates, acls)
/dev/ad0s1d on /var (ufs, local, soft-updates)
Opcja -u powoduje aktualizacjö montowania, co umoĔliwia zmianö opcji montowania
dla aktualnie zamontowanego systemu plików. W celu cofniöcia operacji moĔna wyäñczyè
listy ACL, uĔywajñc opcji noacls. Aby automatycznie wäñczyè listy ACL wraz ze startem
systemu, naleĔy w nastöpujñcy sposób zmodyfikowaè wpis w pliku /etc/fstab:
/dev/ad0s1f /usr ufs rw,acls 2 2
Zarz
Ćdzanie listami ACL
Listy ACL modyfikuje siö i usuwa za pomocñ programu setfacl. Aby zmodyfikowaè listö
ACL, naleĔy posäuĔyè siö opcjñ -m, po której naleĔy podaè listö ACL oraz nazwö lub nazwy
plików. Aby usunñè listö ACL, naleĔy posäuĔyè siö opcjñ -x, po której naleĔy podaè listö
lub listy ACL.
Istniejñ trzy ogólne postacie list ACL — listy uĔytkownika, grupy i pozostaäych. Przyjrzyjmy
siö im bliĔej:
# Lista ACL uĔytkownika
u:[uĪytkownik]:<tryb_dostĊpu>
# Lista ACL grupy
Tworzenie elastycznych hierarchii uprawnie
Ĕ za pomocą list ACL standardu POSIX
SPOSÓB
4.
Bezpiecze
ĕstwo systemu Unix _
23
g:[grupa]:<tryb_dostĊpu>
# Lista ACL pozostaäych
o:<tryb_dostĊpu>
NaleĔy zauwaĔyè, Ĕe w listach ACL uĔytkownika i grupy nazwy uĔytkowników i grup,
których dotyczñ listy ACL, nie sñ wymagane. JeĔeli nazwy te zostanñ pominiöte, ozna-
cza to, Ĕe lista ACL zostanie zastosowana do bazowej listy ACL uzyskanej z bitów trybu
dostöpu do pliku. Dlatego, jeĔeli zostanie ona zmieniona, zmianie ulegnñ równieĔ bity
trybu dostöpu, i odwrotnie.
Dziaäanie list ACL najlepiej poznaè wäasnoröcznie na przykäadzie, tworzñc plik i mody-
fikujñc jego bazowñ listö ACL:
$
touch mojplik
$
ls -l mojplik
-rw-rw-r-- 1 andrew andrew 0 Oct 13 15:57 mojplik
$
setfacl -m u::---,g::---,o:--- mojplik
$
ls -l mojplik
---------- 1 andrew andrew 0 Oct 13 15:57 mojplik
Z przykäadu wynika równieĔ, Ĕe w jednym poleceniu moĔna podaè naraz kilka list ACL,
oddzielajñc je od siebie przecinkami.
Listy ACL moĔna definiowaè dla dowolnej liczby grup i uĔytkowników:
$
touch costam
$
setfacl -m u:jlope:rwx,g:wine:rwx ,o:--- costam
$
getfacl costam
# file: costam
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx
group::---
group:wine:rwx
mask::rwx
other::---
JeĔeli zmieni siö maskö ACL na r--, lista ACL uĔytkownika jlope i grupy wine zostanie
w efekcie ograniczona do r--:
$
setfacl -m m:r-- costam
$
getfacl costam
# file: costam
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #effective:r--
group::---
group:wine:rwx #effective:r--
mask::r--
other::---
Jak powiedziano wczeĈniej, do plików tworzonych w katalogach stosowane sñ domyĈlne
listy ACL katalogów. DomyĈlne listy ACL tworzy siö, poprzedzajñc listö ACL znakami d::
$
mkdir mojkatalog
$
setfacl -m d:u:jlope:rwx mojkatalog
$
getfacl mojkatalog
# file: mojkatalog
SPOSÓB
5.
Zabezpieczenie dzienników zdarze
Ĕ przed modyfikacją
24
_ Bezpieczeĕstwo systemu Unix
# owner: andrew
# group: andrew
user::rwx
group::---
other::---
default:user::rwx
default:user:jlope:rwx
default:group::---
default:mask::rwx
default:other::---
$
touch mojkatalog/nowyplik
$
getfacl mojkatalog/nowyplik
# file: mojkatalog/nowyplik
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #effective:rw-
group::---
mask::rw-
other::---
Jak äatwo zauwaĔyè w powyĔszych przykäadach, zawartoĈè list ACL moĔna uzyskaè za
pomocñ programu getfacl. Jest to prosty program posiadajñcy jedynie kilka opcji, z których
najczöĈciej uĔywanñ jest opcja -R, umoĔliwiajñca rekursywne przeglñdanie list ACL, dzia-
äajñca bardzo podobnie do polecenia ls -R.
S P O S Ó B
5.
Zabezpieczenie dzienników zdarze
ĕ przed modyfikacjĆ
Za pomoc
ą atrybutów plików moĪna uniemoĪliwiü intruzom zatarcie Ğladów wáamania.
Jest praktycznie pewne, Ĕe wäamanie do systemu zostanie odnotowane w wielu róĔnych
systemowych dziennikach zdarzeþ. Jest to bardzo wartoĈciowy Ĉlad, który naleĔy dobrze
chroniè. Bez wiarygodnych dzienników zdarzeþ, odkrycie, w jaki sposób wäamywacz
przedostaä siö do systemu lub skñd zostaä przeprowadzony atak, moĔe byè bardzo trudne.
Tego rodzaju informacje sñ absolutnie niezbödne do przeprowadzenia wäaĈciwej analizy
caäego incydentu, a nastöpnie do podjöcia stosownej reakcji na incydent, na przykäad przez
skontaktowanie siö z zamieszanymi w to stronami [Sposób 125.]. JeĔeli wäamanie powie-
dzie siö i wäamywacz uzyska uprawnienia uĔytkownika root, czy jest coĈ, co moĔe po-
wstrzymaè go przed usuniöciem Ĉladów wäamania?
W takim przypadku z pomocñ przychodzñ atrybuty plików. Zarówno systemy linuksowe,
jak i systemy BSD przydzielajñ plikom i katalogom dodatkowe atrybuty, wykraczajñce
poza standardowy uniksowy system zabezpieczeþ, w którym atrybuty plików dotyczñ
w jednakowym stopniu wszystkich uĔytkowników systemu. Dodatkowe atrybuty decy-
dujñ o dostöpie do plików w znacznie wiökszym stopniu niĔ uprawnienia do plików czy
listy ACL [Sposób 4.]. W Linuksie atrybuty plików moĔna przeglñdaè lub ustawiaè za
pomocñ programów lsattr i chattr. Aby przejrzeè atrybuty w systemach BSD, naleĔy wydaè
polecenie ls -lo, a Ĕeby je ustawiè — polecenie chflags.
Jednym z bardziej przydatnych atrybutów jest atrybut „tylko do dopisywania” (ang.
append-only). Gdy atrybut ten jest ustawiony, pliku nie moĔna usunñè, a zapis do pliku jest
moĔliwy tylko na jego koþcu.
Zabezpieczenie dzienników zdarze
Ĕ przed modyfikacją
SPOSÓB
5.
Bezpiecze
ĕstwo systemu Unix _
25
Aby w systemie Linux ustawiè atrybut „tylko do dopisywania”, naleĔy wydaè nastöpujñce
polecenie:
#
chattr +a nazwa_pliku
W systemie BSD naleĔy wydaè polecenie:
#
chflags sappnd nazwa_pliku
ēeby przekonaè siö, jak dziaäa atrybut +a, naleĔy utworzyè plik i ustawiè w nim ten atrybut:
#
touch /var/log/logfile
#
echo "atrybut tylko do dopisywania nie jest ustawiony" > /var/log/logfile
#
chattr +a /var/log/logfile
#
echo "atrybut tylko do dopisywania jest ustawiony" > /var/log/logfile
bash: /var/log/logfile: Operation not permitted
Druga próba zapisu zakoþczyäa siö niepowodzeniem, gdyĔ nie moĔna nadpisaè pliku.
Jednak dopisywanie na koþcu pliku jest moĔliwe:
#
echo "dopisywanie do pliku" >> /var/log/logfile
#
cat /var/log/logfile
atrybut tylko do dopisywania nie jest ustawiony
dopisywanie do pliku
OczywiĈcie wäamywacz, który zdobyä uprawnienia uĔytkownika root, moĔe odkryè, Ĕe
w systemie wykorzystywane sñ atrybuty plików i za pomocñ polecenia chattr -a usu-
nñè zastosowany do plików dzienników zdarzeþ atrybut „tylko do dopisywania”. Aby
temu zapobiec, naleĔy wyäñczyè moĔliwoĈè usuwania atrybutu „tylko do dopisywania”.
W tym celu, w Linuksie naleĔy skorzystaè z jego mechanizmu moĔliwoĈci, a w systemach
BSD skorzystaè z funkcji poziomu bezpieczeþstwa (ang. securelevel).
Model moĔliwoĈci systemu Linux dzieli wszystkie przywileje dane uĔytkownikowi root i
umoĔliwia selektywne wyäñczanie niektórych z nich. Aby uniemoĔliwiè uĔytkownikowi
usuniöcie z pliku atrybutu „tylko do dopisywania”, naleĔy pozbyè siö moĔliwoĈci
CAP_LINUX_IMMUTABLE
. Zmian moĔliwoĈci systemu moĔna dokonaè za pomocñ pro-
stego programu lcap (http://snort-wireless.org/other/lcap-0.0.6.tar.bz2).
PoniĔsze polecenie rozpakuje i skompiluje program:
#
tar xvfj lcap-0.0.6.tar.bz2 && cd lcap-0.0.6 && make
Aby uniemoĔliwiè modyfikacjö atrybutu „tylko do dopisywania”, naleĔy wykonaè nastö-
pujñce polecenia:
#
./lcap CAP_LINUX_IMMUTABLE
#
./lcap CAP_SYS_RAWIO
Pierwsze polecenie wyäñcza moĔliwoĈè zmiany atrybutu „tylko do dopisywania”, nato-
miast drugie wyäñcza moĔliwoĈè wykonywania pierwotnych operacji wejĈcia-wyjĈcia. Jest
to konieczne po to, Ĕeby nie byäo moĔliwoĈci zmodyfikowania chronionego pliku poprzez
dostöp do urzñdzenia blokowego, na którym siö on znajduje. Zabezpiecza to równieĔ przed
dostöpem do urzñdzeþ /dev/mem i /dev/kmem, który mógäby stwarzaè wäamywaczowi moĔ-
liwoĈè ponownego wäñczenia moĔliwoĈci CAP_LINUX_IMMUTABLE.