--=REKLAMA=--

Dyskusja

Bezpieczeństwo - lista kontrolna 1: Zanim rozpoczniesz

Z Joomla!WikiPL

Zanim zaczniesz

Nic za darmo!

Chociaż instalacja Joomla! jest łatwa, to utrzymanie i zabezpieczanie swojego portalu w internecie takim już nie jest. Dobry poziom bezpieczeństwa to stale zmieniające się wyzwania, które wymagają ciągłej uwagi. Aby skutecznie zabezpieczyć swoją stronę musisz albo zdobyć doświadczenie na własnych błędach (czasem bardzo gorzkich), albo skorzystać z wiedzy innych osób. Fora internetowe dotyczące spraw bezpieczeństwa wypełnione są postami o treści Pomocy! Zostałem zaatakowany pisanymi przez ludzi, którzy nie zadali sobie trudu, żeby zapoznać się z podstawowymi zasadami bezpieczeństwa. Poniższa lista ma na celu zaprezentowanie tych zasad i wskazanie szukającym właściwego kierunku:

Zaczynamy

Sprawdź czy potrafisz

Czy naprawdę chcesz i potrafisz administrować dynamiczną, opartą o bazy danych oraz indywidualne konta użytkowników interaktywną stroną? Czy posiadasz odpowiednią ilość wolnego czasu oraz możliwości reagowania na wiele poważnych problemów bezpieczeństwa, jakie napotkasz w Internecie?

Oto żartobliwa (a może i tragiczna) lista najczęściej spotykanych błędów bezpieczeństwa popełnianych przez administratorów. Nie sprawdzaj tego na własnej skórze.

Przekonaj się, czy Joomla! spełnia Twoje potrzeby

Developerzy dużych projektów mogą skorzystać z tego forum

Bądź na bieżąco z problematyką bezpieczeństwa

Sprawdzaj FAQ-i

Najważniejsze i najbardziej pomocne tematy z Forum Bezpieczeństwa Joomli (tak jak i inne źródła) zostało teraz przekonwertowane na Security FAQs na oficjalnej stronie Joomla!.

Ucz się od najlepszych

Szperaj w Forum dyskusyjnym Joomla! Znajdziesz tam wiele prawdziwych złotych porad, np. ten post autorstwa CirTap’a.

Wybierz odpowiedniego dostawcę usług internetowych

Wybór providera to jedna z najpoważniejszych decyzji, przed jaką staniesz. Z powodu szerokiego wachlarza dostępnych parametrów hostingu nie jest możliwe przygotowanie pełnej listy na każdą sytuację.

Jeśli musisz liczyć się z pieniędzmi - możesz po prostu wynająć miejsce na jednym z serwerów z niższej półki (albo darmowych - przyp. tłum), jednak musisz liczyć się z ryzykiem i wiedzieć, jak wybrać możliwie najbezpieczniejszego dostawcę usług internetowych.

Sprawdź też naszą listę polecanych dostawców.

Dla pełniejszego zrozumienia problemu wyboru odpowiedniego serwera (i dostawcy) polecamy przeczytać ten raport z około 11.000 stron, które pozwoliły Google na rozpoznanie typu systemu operacyjnego, serwera i innych ważnych informacji - wykorzystując funkcję phpinfo().

4. Budowanie witryny

  • Używaj Zintegrowanego środowiska projektowania (IDE - akronim od ang. Integrated Development Environment). FAQ
  • Testuj wszystkie poprawki i łatki (patche) najpierw na serwerze lokalnym/testowym - FAQ
  • Upewnij się, że będziesz mógł wrócić do poprzedniej wersji swojego serwisu, korzystając z systemów kontroli wersji, takich jak CVS czy Subversion.
  • Sprawdź Listę Społeczności Joomla! - Popularne programy i narzędzia developerskie.

5. Instalacja. Uaktualnienie i konfiguracja silnika Joomla! i serwera Apache

W trakcie procesu instalacji instalator zażąda od Ciebie usunięcia katalogu instalacyjnego oraz całej jego zawartości. Zrób to! Jeśli wgrywałeś na serwer Joomla! jako skompresowane archiwum (np. xxxx.zip), nie zapomnij usunąć po instalacji oryginalnego pliku archiwum. Ogólnie - nie pozostawiaj na serwerze żadnych zbędnych plików, skompresowanych czy nie - dopóki Twoja witryna nie będzie ich potrzebować do funkcjonowania.
  • Zwiększ poziom bezpieczeństwa swojej witryny przez umieszczenie/przeniesienie najważniejszego pliku - configuration.php poza katalog domowy Twojej strony
FAQ</a> (zwykle chodzi tu o ./public_html w katalogu użytkownika, który jest właścicielem witryny. Uwaga! - problem jest do rozwiązania tylko na serwerach, na których mamy dostęp do całego drzewka katalogów użytkownika, a nie tylko samego chrootowanego katalogu public_html. Niestety większość serwisów publicznie dostępnych - przyn. w Polsce - blokuje nam ten dostęp. przyp. tłum)
  • Koniecznie zmień nazwę użytkownika dla domyślnego administratora. W ten prosty sposób znacząco poprawisz bezpieczeństwo tego krytycznie ważnego konta.
FAQ
  • Zablokuj działanie typowych eksploitów, używając do tego poprawek w pliku .htaccess
FAQ
  • Zablokuj dostęp do kluczowych katalogów - takich jakadministrator - przez wprowadzenie haseł, używając do tego plików .htaccess
[FAQ
  • Zablokuj dostęp do kluczowych katalogów - jak administrator ze wszystkich innych adresów IP niż Twój - używając do tego plików .htaccess
[FAQ
Uwaga tłum. - jest to możliwe, o ile posiadamy stały, zewnętrzny adres IP, z którego się łączymy z naszą witryną. Możliwe jest też (dla bardziej zaawansowanych) ustawienie sobie serwera proxy ze stałym zewnętrznym IP i korzystanie tylko z niego przy łączeniu się z witryną.)
  • O ile twój serwer to umożliwia - powinieneś przejść na PHP5 zamiast używać PHP4.
[FAQ
Uwaga: Oczywiście, zmiany te wymagają dostępu do konfiguracji serwera Apache albo porozumienia się z jego administratorem (przyp.tłum.).
  • Upewnij się że konto(a) MySQL mają ograniczony dostęp (są zabezpieczone unikatowym hasłem - które znasz tylko Ty - administrator serwisu - przyp. tłum.). Standardowa instalacja MySQL ze względów wygody użytkowania jest skonfigurowana potencjalnie niebezpiecznie. Zalecane jest poczynienie paru zmian.
[http://dev.mysql.com/doc/refman/4.1/en/default-privileges.html Dokumentacja MySQL.
  • Na chwilę obecną obydwa języki PHP4 i PHP5 są rozwijane. Jednak zanim PHP4 stanie się przestarzały i wyjdzie całkowicie z użycia przepisz cały swój kod PHP do wersji PHP5. Nie obawiaj się. Cały silnik Joomla! jest obecnie kompatybilny z PHP5.
PHP News
  • Unikaj używania PHP safe_mode:
[FAQ
  • WYŁĄCZ funkcję Register Globals Emulation - edytując plik globals.php (plik znajduje się w katalogu głównym Twojej witryny). Chociaż funkcja emulacji register_globals w Joomli! jest bezpieczniejsza niż register_globals wykonywana przez PHP, znacznie bezpieczniej jest nie włączać register_globals w ogóle. Począwszy od PHP 6 nie będzie już dostępnej takiej opcji.
UWAGA! słabo napisany kod niektórych rozszerzeń do Joomli! może spowodować błędy w przypadku wyłączenia register_globals. Najlepszą radą jest - nie używać tych rozszerzeń! Poniżej jest zaprezentowane właściwe ustawienie zmiennej w pliku globals.php:
define( 'RG_EMULATION', 0 );
Pokrewny temat na forum
  • Upewnij się że wszystkie ścieżki do katalogów z uprawnieniami do zapisu (repozytorium dokumentów, galeria zdjęć i grafiki oraz cache) znajdują się poza katalogiem głównym strony. Sprawdź także rozszerzenia pochodzące od innych autorów, takie jak DOCMan czy Gallery2, dokonując niezbędnych poprawek ustawień. Niestety - jak na razie nie ma łatwego sposobu na migrację standardowego katalogu ze zdjęciami w Joomla!
  • Once your site is configured and stable, write-protect directories and files by changing directory permissions to 755, and file permissions to 644. There is a feature in Site --> Global Configuration --> Server to set all folder and file permissions at once. Test third party extensions afterwards. Note: You'll need to reset write permissions to install more extensions.
Post: Skrypt shellowy do zmiany uprawnień plików i katalogów
  • Usuń wszystkie projekty szablonów graficznych, których nie potrzebujesz. Nie zadawaj sobie trudu zabezpieczając ich.
Post: Sugerowana możliwość włączenia/wyłączenia zmian szablonów
  • Jeśli używasz VPS albo masz dedykowany serwer uruchom TripWire albo SAMHAIN (GNU/GPL). Programy te przygotują wyczerpujący raport na temat bezpieczeństwa plików i funkcjonalności systemu. Oba mogą być zainstalowane dyskretnie w celu ochrony na wypadek ewentualnych prób włamania.
  • Poszukaj porady u profesjonalnego konsultanta ds. bezpieczeństwa Joomla!

6. Instalacja, aktualizacja i konfiguracja rozszerzeń Joomla! (komponentów, modułów, botów i wtyczek)

6.1. PRZED instalacją nowego rozszerzenia wykonaj kopię zapasową witryny i kopię zapasową bazy danych.

6.2. PRZED instalacją rozszerzeń innych zespołów, sprawdź: Official List of Vulnerable 3rd Party/Non Joomla! Extensions

6.3.Pobieraj rozszerzenia tylko z zaufanych witryn. Jest jedna oficjalna definicja "zaufanej witryny": TY ufasz!

6.4: Użytkownik rozsądny (strzeżony, bezpieczny)! Rozszerzenia innych projektantów są różnej jakości, powstały w różnym czasie (starzeją się). Chociaż istnieją standardy kodowania w Joomla!, rozszerzenia umieszczane w katalogu zasobów na oficjalnej stronie Joomla! nie są przeglądane pod kątem zgodności ze standardami kodowania. Testuj każde rozszerzenie na testowej witrynie PRZED instalacją na witrynie produkcyjnej.

6.5: Najwięcej zagrożeń bezpieczeństwa niosą ze sobą rozszerzenia opracowane przez innych projektantów. Rzeczywiście, to fakt. Istnieje całe forum dedykowane temu tematowi. Zaprenumeruj je, kliknij przycisk Notify/Powiadomienia.

6.6 Usuwaj nieużywane rozszerzenia i dwukrotnie sprawdzaj, czy wszystkie foldery i pliki zostały usunięte po deinstalacji. Zauważ, że wiele rozszerzeń innych projektantów po odinstalowaniu pozostawia na Twoim serwerze dużą ilość plików i dużą ilość tabel w bazie danych. To jest albo zaleta, albo błąd - zależy od Twojego punktu widzenia!

6.7. Usuń lub napraw wszystkie rozszerzenia, które wymagają włączonych register_globals.

7. Konfigurowanie php.ini

7.1. Konfiguracja i mechanizmy php.ini są dobrze udokumentowane w pliku php.ini znajdującym się w każdej instalacji PHP.

7.2: Ważne jest dobre zrozumienie, jak posługiwać się i wykorzystywać mechanizmy zawarte wphp.ini.

7.3: Poszczególne mechanizmy i funkcje php.ini są opisane i udokumentowane na www.php.net. Przeanalizuj Official List of php.ini Directives na www.php.net.

7.4: Na wielu publicznych serwerach www nie masz dostępu do edycji głównego pliku php.ini, ale za to możesz dodać swój własny plik php.ini. W takim wypadku musisz skopiować ten plik do każdego podkatalogu, który będzie wymagać sprecyzowanych niestandardowych ustawień php.ini. Na szczęście są dostępne darmowe skrypty, które wykonają za Ciebie brudną robotę:

7.5: Przeczytaj post autorstwa Beat, Członka Grupy Q&T, w którym opisana jest lista metod php.ini uporządkowana pod względem ważności.

7.6. Ustaw register_globals na OFF. Ta dyrektywa decyduje, czy zmienne otrzymywane z formularzy, ciastek, sesji lub serwera będą traktowane jako zmienne globalne. Używając zmiennych globalnych, nie można stwierdzić, czy dana wartość pochodzi z sesji czy może została podana w URL-u metodą GET. W przypadku źle napisanych skryptów, można obejść zabezpieczenia. Dlatego ważne jest, aby wyłączyć rejestrowanie zmiennych globalnych. Jeśli nie masz dostępu do pliku php.ini, przełącz się na PHP5 i użyj techniki .htaccess omówionej powyżej.

7.7: Używaj funkcji disable_functions, żeby wyłączyć użycie potencjalnie niebezpiecznych funkcji PHP, które nie są wymagane bezpośrednio przez Twoją witrynę.

7.8: Wyłącz allow_url_fopen. Ta funkcja włącza dostęp do plików (wraper) na dysku lokalnym serwera bezpośrednio przez podanie adresu url. Standardowo wrapery używane są do uzyskiwania dostępu do plików z wykorzystaniem protokołów <acronym>http</acronym> i <acronym>ftp</acronym>, znajdujących się na zdalnych serwerach. Niektóre rozszerzenia takie jak np. zlib mogą dodawać swoje własne wrapery. UWAGA: ze względów bezpieczeństwa wyłączenie tej funkcji jest możliwe tylko w php.ini.

7.9: Poprawienie ustawienia magic_quotes_gpc jest konieczne dla Twojej witryny. Zalecanym ustawieniem dla Joomla 1.0.x jest ON, aby chronić przed źle napisanymi skryptami rozszerzeń. Joomla 1.5 ignoruje to ustawienie i działa poprawnie w każdym przypadku. [magic_quotes_gpc ustawia stan stan magic_quotes dla operacji GPC (Get/Post/Cookie). Jeśli jest włączona, wszystkie znaki ’ (apostrof), &quote (cudzysłów), \ (backslash) i znaki NULL są zamieniane na sekwencje escape przez dodanie przed te znaki znaku lewego ukośnika].

7.10: Funkcja open_basedir powinna być włączona i poprawnie skonfigurowana. Ogranicz dostęp do plików, które mogą być otwierane przez PHP tylko do określonego katalog(ów) (drzewka). Ta funkcja jest niezależna od ustawienia ON lub OFF PHP SafeMode. Nazwa katalogu podawana jako argument w funkcji open_basedir jest traktowana jako prefiks, a nie dokładna nazwa katalogu. I tak np. open_basedir /dir/incl pozwala na dostęp do katalogów /dir/include oraz /dir/incls o ile takie istnieją. Aby ograniczyć dostęp tylko do wybranego katalogu, należy zakończyć jego nazwę slashem ’/’:

7.11: Przykładowa konfiguracja [I]php.ini[/I] w odniesieniu do powyższych uwag sugestii

register_globals = 0 disable_functions = show_source, system, shell_exec, passthru,
     exec, phpinfo, popen, proc_open allow_url_fopen = 0 
magic_quotes_gpc = 1 
safe_mode = 1 
open_basedir = /dir/to/include/change/me 

8. Tuning Joomli! dla maksimum bezpieczeństwa

8.1: Nie używaj publicznych(/darmowych) serwerów. Niektórzy eksperci są tutaj innego zdania. Jakkolwiek byś uważał, niezależnie od konfiguracji serwera, istotne jest żebyś upewnił się, że fizyczny dostęp do Twojego serwisu masz wyłącznie Ty i administrator serwera.

8.2 Używaj protokołu SSL w celu zabezpieczenia połączeń z serwerem. Przeczytaj tę dyskusję na temat potrzeby używania SSL i tych momentów, kiedy bezpieczeństwo jest szczególnie istotne. (Joomla! w wersji 1.0.11 nie pozwala na przypisanie serwera SSL do poszczególnych katalogów. Czy ktoś wie, czy w 1.0.12 ma się to zmienić ?)

8.3: Dla dodatkowej ochrony zabezpieczonych hasłem newralgicznych katalogów używaj plików .htaccess.

9. Bieżąca administracja serwisem

9.1 Używaj tylko dobrych (odpowiednio skomplikowanych) haseł

zmieniaj je regularnie i trzymaj w tajemnicy. Przy generowaniu haseł używaj zawsze losowej kombinacji liter, cyfr i znaków specjalnych - unikając prostych nazw imion oraz słów ze słownika. Nigdy nie używaj imion czy nazwisk swoich krewnych, zwierząt itd. Wizzie napisał skrypt, który automatycznie zmienia hasła. To doskonałe narzędzie dla administratorów, którzy opiekują się wieloma naraz serwisami.

9.2: Używaj schematu haseł odpowiednich do wagi i ważności problemu. Innymi słowy: miej parę poziomów bezpieczeństwa i związanych z nim trudności haseł, które nie powinny być w żaden sposób ze sobą związane.

9.3: Konsekwentnie wykonuj kopie zapasowe swojej witryny.

Nigdy nie polegaj na tym, że "ktoś zrobi je za Ciebie" - sam bierz odpowiedzialność za Twoje dane! Wielu dostawców usług internetowych wprost zaznacza w umowach, że użytkownik nie ma prawa upominać się o backupy danych w razie ich własnej utraty.

9.4: Używaj automatycznych narzędzi do wykrywania ataków (IDS). Używaj profesjonalnego oprogramowania IDS do blokowania podejrzanych zapytań HTTP.

Uwaga od tłumacza: jednym z najlepszych, a do tego całkowicie darmowym systemem IDS jest SNORT. Duża część wysokopłatnych rozwiązań komercyjnych bazuje właśnie na tym silniku. Jednak jego skuteczne użycie wymaga:

  • dostępu do shella oraz
  • dość dużej wiedzy na temat zabezpieczeń oraz doświadczenia w pracy z sieciami.

9.5. Często dokonuj RĘCZNEJ kontroli serwisu na wypadek ataków. Regularnie sprawdzaj logi na wypadek pojawienia się w nich podejrzanych operacji. NIE POLEGAJ wyłącznie na zestawieniach zbiorczych ani wykresach! Pouczająca dyskusja na temat możliwości automatyzacji przeglądania logów znajduje się


9.10. Bądź ZAWSZE na bieżąco z aktualizacjami i poprawkami (patchami). Zawsze instaluj poprawki wypuszczone przez producenta ASAP (As Soon As Possible - Najszybciej, jak to tylko możliwe).

9.11. Samodzielnie wyszukuj wiadomości o nowych atakach i zagrożeniach. Regularnie sprawdzaj wiadomości w fachowych serwisach nt. bezpieczeństwa w Sieci:

UWAGA - jednymi z najlepszych serwisów odnośnie bezpieczeństwa w sieci są:

9.12: Samodzielnie wyszukuj wiadomości o nowych atakach SQL: Użyj automatycznych narzędzi takich jak Paros Proxy do przeprowadzenia automatycznych testów na wykorzystanie SQL Injection przez aplikacje PHP.

9.13. Używaj skryptów shellowych do automatyzacji pracy

Jeśli lubisz skrypty shellowe możesz spróbować poniższych, opublikowanych darmowo dla społeczności Joomla! przez Wizzie
Oczywiście wymaga to dostępu do shella (przyp. tłum.).

9.14. Czytaj, jak możesz najwięcej, odnośnie oprogramowania zabezpieczającego.

Niestety nie ma "jedynego i słusznego" programu, który zabezpieczyłby Twoją stronę. Zresztą gdyby takowy nawet istniał - musiałby być tak ogólny (z uwagi na zróżnicowane warunki i możliwe zagrożenia), że nie byłby przez to wiarygodny.

9.15. Jeśli jesteś programistą zainteresuj się i zaznajom z nadchodzącą wersją Jommli! 1.5 - najbardziej znaczącą pod względem zmian kodu Joomla!

10. Odtwarzanie witryny

10.1. Naucz się zabezpieczać serwis po włamaniu i przywracać mu pełną funkcjonalność:

10.2. Naucz się rozpoznawać próby wykorzystania eksploitów przy użyciu shelli *NIXowych:

11. Twój ruch…

11.1 Publikuj informacje o zauważonych/odkrytych przez Ciebie problemach z bezpieczeństwem dotyczących Joomla! tutaj.

11.2 Wszystkie uwagi, poprawki i komentarze dotyczące tego dokumentu, zgłaszaj tutaj.

Wybierz listę kontrolną

  1. Lista kontrolna 1: Zanim rozpoczniesz
  2. Lista kontrolna 2: Hosting i ustawienia serwera
  3. Lista kontrolna 3: Testowanie i rozbudowa
  4. Lista kontrolna 4: Konfiguracja Joomla!
  5. Lista kontrolna 5: Administrowanie witryną
  6. Lista kontrolna 6: Odtwarzanie witryny



Dziękujemy za wkład

» Stefan Wajda [zwiastun],