Wytyczne dla uzyskania wysokiego poziomu bezpieczeństwa serwera aplikacyjnego
W zakresie bezpieczeństwa aplikacji webowych korzystamy z naszego kilkunastoletniego doświadczenia w tworzeniu aplikacji webowych (jako firma BetaSoft na rynku aplikacji webowych od 2003 r.), a kompetencje naszych pracowników potwierdzone są indywidualnymi certyfikatami uzyskiwanymi podczas szkoleń m.in. współpraca z firmą Niebezpiecznik.pl i konferencji (od początku powstania jesteśmy corocznym sponsorem PHPCon - największej konferencji poświęconej PHP).
Wdrożenia realizowane przez naszą firmę objęte są udokumentowanymi metodykami Agile i Prince, a pracownicy je wykonujący posiadają odpowiednie certyfikaty: Agile / Prince Foundation / Practitioner. Dzięki temu jesteśmy w stanie zachować najwyższe standardy bezpieczeństwa, nie tylko w odniesieniu do aplikacji i systemu operacyjnego, ale również w zakresie realizowanych usług. Potwierdzeniem naszych kompetencji są udane i referencyjne wdrożenia w wymagającym pod tym względem sektorze publicznym i obronnym.
W celu zapewnienia bezpieczeństwa i ciągłości działania systemu eDokumenty, w tym udostępnienie usługi w sieci publicznej, zalecane jest wprowadzenie poniższych zasad.
1. Bezpieczeństwo fizyczne (nie dotyczy wirtualnych maszyn)
- Dostęp do BIOS'u (Basic Input/Output System) serwera powinien być zabezpieczony hasłem.
- Możliwość uruchamiania systemu z urządzeń innych niż wewnętrzny dysk twardy (np. USB, CD-ROM, floppy drive) powinna być zablokowana.
- Bootloader systemu powinien być zabezpieczony hasłem (np. GRUB).
2. Bezpieczeństwo systemu operacyjnego Linux
- W systemie operacyjnym powinno być zainstalowane tylko niezbędne oprogramowanie wymagane do działania systemu.
- Niepotrzebne usługi powinny być wyłączone, a oprogramowanie odinstalowane (np. xserver, udostępnianie systemów plików NFS/SMB, narzędzia do kompilacji gcc/g++ itp.).
- Dla punktów montowań takich jak: /, /var, /var/log, /usr, /tmp, /home powinny być stworzone osobne systemy plików.
Systemy plików powinny być montowane z odpowiednimi opcjami (np. dla /tmp nodev,nosuid,noexec). - System operacyjny powinien być na bieżąco aktualizowany (szczególnie dotyczy to aktualizacji bezpieczeństwa).
- Dostęp do Cron'a dla nieuprzywilejowanych użytkowników powinien być ograniczony (/etc/cron.allow, cron.deny).
- Wiadomość powitalna wyświetlana przy próbie logowania powinna jednoznacznie informować, że dostęp od serwera jest dozwolony tylko dla autoryzowanych osób.
3. Polityka haseł
- Hasła użytkowników systemu powinny być silne tzn. nie powinno być krótsze niż 10 znaków, zawierać duże i małe litery oraz cyfry i znaki specjalne.
Wymagania dotyczące haseł powinny być weryfikowane przez biblioteki takie jak libpam-cracklib i/lub libpam-pwquality. - Hasła powinny być regularnie zmieniane (np. co 90 dni).
4. Zabezpieczenia sieci
4.1 Firewall
- Dostęp do serwera przez sieć powinien być zabezpieczony firewall'em, jeśli to możliwe serwer powinien znajdować się w DMZ
- Usługa SSH powinna być dostępna tylko dla ograniczonej liczby adresów IP lub wyłącznie dla połączeń VPN.
- Dostęp do HTTPS powinien być ograniczony dla wybranych prefiksów adresów IP (geolokalizacja adresów IP).
- Protokół IPv6 jeśli nie jest używany powinien być wyłączny.
- Przekazywanie pakietów między interfejsami sieciowymi powinno być wyłączone (IP forwarding).
4.2 Zdalny dostęp przez SSH
- Domyślny port 22 powinien być zmieniony na inny np. 2134.
- Logowanie jako użytkownik root powinno być zablokowane.
- Autentykacja powinna być dokonywana z użyciem pary kluczy (public/private).
- Usługa SSH powinna być zabezpieczona przed atakami typu brute-force (np. przez wykorzystanie aplikacji fail2ban).
5. Logowanie zdarzeń
- Informacje pochodzące ze standardowych źródeł powinny być rejestrowane za pomocą programu syslog.
Zalecane jest logowanie na zdalny serwer logów. - Logi powinny być na bieżącą przeglądane w celu wykrycia potencjalnych problemów (logwatch, swatch).
- Zegar systemowy powinien być prawidłowo ustawiony (zalecane jest używanie protokołu NTP).
6. Kopie bezpieczeństwa
- Kopie baz danych powinny być robione za pomocą dedykowanych narzędzi. W przypadku kopiowania danych serwera wymagane jest kopiowanie katalogu /home/edokumenty oraz kopii bazy znajdującej się w np. /home/edokumenty/backup_sql
- W przypadku serwerów wirtualnych najlepszym rozwiązaniem jest wykonywanie kopii całej maszyny np aplikacją Veem
- Kopie system operacyjnego powinny być robione na zdalne host lub zewnętrzne nośniki.
7. Dodatkowe zabezpieczenia
- System operacyjny powinien być zabezpieczony mechanizmami typu Mandatory Access Control (MAC) (np. AppArmor).
- Zalecane jest uszczelnienie słabych punktów systemu za pomocą narzędzi z pakietu Bastille Linux.
- Zaleca się dokonywanie testów integralności plików systemu za pomocą narzędzi takich jak AIDE, Tripwire.
- Komunikacja sieciowa serwera może być dodatkowo zabezpieczona za pomocą systemów IPS/IDS (np. Snort).
8. Zabezpieczenie oprogramowania serwera aplikacyjnego
- Apache
- conf-enabled/security.conf
- conf-enabled/security.conf
ServerSignature Off
Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"
Header always set Referrer-Policy "same-origin"
9. Zabezpieczenia aplikacji eDokumenty/Ready_™
- Opcje do włączenia/sprawdzenia w config.inc
- define('CRAZY_ABOUT_SECURITY_MODE', TRUE); - sprawdzanie sesji, ip
- define('PARTIAL_PASSWORD_VISIBLE_CHARACTERS', TRUE); Dla trybu logowania poprzez losowe znaki z hasła. Stała określająca ile znaków z hasła musi podać użytkownik
- define('CSP_HEADER', => 'obrazki.moja_domena.pl'?); Definiowanie dodatkowych opcji w nagłówku Content-Security-Policy, dodatkowe adresy odzielamy spacją
- Określenie własnej polityki haseł
10. Weryfikacja checklisty OWASP
Kluczowe wytyczne standardu bezpieczeństwa OWASP zostały zebrane są w formie checklisty, wg której weryfikowane są tworzone komponenty systemu. Checklista w swoim zakresie w większości odpowiada obecnemu standardowi OWASP Level 2.
Przydatne linki
Zabezpieczanie serwera - wybrane skrypty
Określanie polityki hasła