Bezpieczeństwo webowego systemu PetroManager

By zdecydować się na rozwiązania webowe należy mieć pewność, że nasze dane są w pełni bezpieczne. Zawsze warto sprawdzić w jaki sposób są one chronione, czy firma za nie odpowiedzialna robi to z należytą starannością i z odpowiednim zaangażowaniem oraz z wykorzystaniem najnowszych technologii. Zapraszamy Państwa do zapoznania się z opisem sposobu zabezpieczania systemów webowych, jakie stosujemy w PetroConsulting.

bezpieczeństwo danychBezpieczeństwo systemu PetroManager jest zapewniane na wiele sposobów i dotyczy wielu aspektów jego działania. Jego najbardziej widocznym dla użytkowników elementem są hasła. Muszą one składać się z co najmniej sześciu znaków. W momencie ustawiania haseł ich jakość jest sprawdzana i prezentowana w prostej, graficznej formie, lecz jeśli użytkownik chce ustawić sobie proste hasło, oczywiście ma taką możliwość.

System PetroManager zawsze wymusza korzystanie z szyfrowanych połączeń HTTPS, dzięki czemu hasła i loginy użytkowników na żadnym etapie nie są przesyłane niezabezpieczone. Wyjątek stanowi sytuacja, gdy system działa w infrastrukturze informatycznej klienta, wówczas to od jego decyzji zależy czy szyfrowanie połączeń będzie wymuszane. W przypadku użytku wyłącznie w wewnętrznej sieci przedsiębiorstwa, bez dostępu z Internetu, można zdecydować się na nieszyfrowane połączenia. Z kolei w bazie danych hasła nigdy nie są przechowywane bezpośrednio, a jedynie w formie bezpiecznego, kryptograficznego skrótu (SHA-256) utworzonego dodatkowo z użyciem losowej soli. Jest ona specjalnym ciągiem znaków tworzonym z wykorzystaniem znacznika czasowego oraz danych użytkownika, co zapewnia jej odpowiednią unikalność. Celem jej stosowania jest utrudnienie ataków wykorzystujących kolizje funkcji skrótu. Dodatkowo wydłuża ona pozornie hasło, co utrudnia inne formy ataku.

Etap logowania do systemu występuje również w przypadku używania dostępu poprzez interfejs programowy typu REST. Każda sesja komunikacyjna musi rozpocząć się od żądania uwierzytelniającego zawierającego login i hasło użytkownika systemu. Wówczas serwer generuje specjalny losowy ciąg danych, tzw. access token, który służy uwierzytelnianiu kolejnych żądań. Jest on unikalny dla każdej sesji komunikacyjnej i ważny jedynie 30 minut pomiędzy kolejnymi żądaniami.

Gdy użytkownik jest już zalogowany do systemu, ma dostęp jedynie do tych jego części i funkcji, na które zezwalają jego uprawnienia. Dzięki temu można ograniczyć dostęp do wrażliwych danych jedynie do użytkowników dla których jest to niezbędne. Oznacza to zastosowanie dobrej praktyki nazywanej zasadą minimalnych uprawnień – każdy użytkownik ma wyłącznie takie uprawnienia, które są mu niezbędne do wykonania jego zadań i nic ponadto.

Wszystkie przesyłane do systemu dane są dwukrotnie sprawdzane, zarówno po stronie przeglądarki, jak i na samym serwerze po przesłaniu. Walidacja ta obejmuje zarówno ochronę przed atakami SQL Injection, XSS (Cross-Site Sripting) i pochodnymi, a także sprawdzenie czy format tych danych pasuje do pola formularza do którego je wprowadzono. System PetroManager wykorzystuje do połączeń z bazą danych warstwę translacji ORM dostarczaną przez framework Yii, dzięki czemu dane trafiające do bazy danych są jeszcze raz sprawdzane na etapie przygotowywania zapytań. Stanowi to kolejną przeszkodę dla ataków typu SQL Injection.

Posiadamy również zabezpieczenia przed atakami CSRF (Cross-Site Request Forgery), polegającymi na fałszowaniu żądań do serwera z użyciem wcześniej przechwyconej prawidłowej komunikacji. Przy każdym wyświetleniu formularza w interfejsie systemu generowany jest jednorazowy kod weryfikacyjny, który pozwala na jednokrotne jego zatwierdzenie. Uniemożliwia to ataki poprzez ponowne przesłanie przechwyconej, poprawnej komunikacji między klientem a serwerem. Niezależnie od powyższego stosowanie szyfrowania komunikacji (HTTPS) wymuszane przez system PetroManager, również znakomicie utrudnia ataki typu CSRF.

W przeważającej większości przypadków nie ma potrzeby udostępniania dostępu do bazy danych dla połączeń zewnętrznych wobec serwera, dlatego też domyślnie do baz danych dostęp jest jedynie z sieci wewnętrznej klastra. Stąd też skuteczne ich zaatakowanie wymaga wpierw, de facto przejęcia kontroli nad całym klastrem serwerów. Zdarzają się jednak przypadki, gdy klienci życzą sobie mieć taki dostęp. Wówczas bazy danych przechowujące dane systemu PetroManager mogą komunikować się jedynie z bezpośrednio zdefiniowanymi w polityce dostępu adresami IP, co zdecydowanie ogranicza możliwości ataku. Ograniczenia te są definiowane dla par użytkownik – adres. Oczywiście nie chroni to w przypadku zastosowania IP Spoofingu, lub podobnych technik podszywania się pod inne adresy. Powoduje jednak, że atakujący musi zaangażować więcej środków w celu zorganizowania skutecznego ataku, który w kolejnym etapie musi i tak sforsować długie, silne hasło użytkownika bazy danych. Dodatkowo atakujący musi się jakoś wcześniej dowiedzieć pod jaki adres IP musi się podszyć dla konkretnej bazy danych.

Ponadto bezpośredni dostęp do serwerów, na których działa system PetroManager, jest możliwy jedynie z użyciem kryptograficznych kluczy dostępowych, które są ściśle strzeżone. Natomiast same serwery działają w zintegrowanym klastrze obliczeniowym, który wewnętrznie chroni dane przez ich replikację w czasie rzeczywistym na wszystkie węzły klastra oraz przeprowadza pełny backup baz danych regularnie co 6 godzin. Logicznie struktura klastra jest podzielona funkcjonalnie na oddzielne komponenty zamknięte w kontenerach za pomocą technologii LXC. Powoduje to, że nawet jeśli atakujący przykładowo przejąłby kontrolę nad procesem serwera WWW, to jest całkowicie odcięty od bazy danych, którą musiałby zaatakować niezależnie.

Oczywiście powyższy artykuł przedstawia jedynie najistotniejsze punkty bezpieczeństwa naszego systemu, bez podawania szczegółów. Ma to na celu, przedstawienie Państwu skali naszego zaangażowania i profesjonalnego podejścia do kwestii ochrony Waszych danych, która obok funkcjonalności systemu, jest dla nas priorytetem.

Natomiast osobną kwestią, jest profesjonalne podejście do komunikacji z innymi systemami i programami. W tym celu opracowaliśmy odpowiedni Web Service, który opisaliśmy w załączonym API. Prezentuje on w przejrzysty sposób, jak zbudować interfejs komunikacyjny do PetroManagera NET.

 

1