Niedopatrzenie i niewiedza

Osoby szukające pracy wysyłają CV do organizacji, ufając, że plik posłuży tylko do rekrutacji. Tymczasem cały zbiór wielu dokumentów może być publicznie dostępny.

Ostatnim takim przypadkiem było zaindeksowanie przez Google kilkunastu tysięcy życiorysów składowanych na serwerach dwóch agencji pośrednictwa pracy (terazpraca.pl/data/pliki/ oraz loccoevent.pl/cv/). Dokumenty te były dostępne praktycznie dla wszystkich użytkowników Internetu, gdyż składowano je w oczywistych miejscach, bez żadnych zabezpieczeń. Do zapoznania się z ich treścią wystarczyło kliknąć link w wyszukiwarce internetowej. Nie jest to pierwszy przypadek naruszenia dobra osób trzecich przez niedopatrzenie fatalnie zabezpieczonych zasobów - trzy lata temu serwery agencji dokonującej rekrutacji pracowników na potrzeby banku PEKO SA (towarzyszyła temu akcja marketingowa "zainwestuj w przyszłość") zawierały wszystkie przesłane dotąd CV w niechronionym katalogu /files/0/. Podobny błąd był przyczyną wycieku pełnych danych ponad tysiąca firm, będących klientami banku PKO BP, a których dane umieszczono w pliku XLS, znajdującym się w publicznie dostępnym katalogu. Przyczyną wszystkich wymienionych naruszeń bezpieczeństwa danych była niewiedza oraz niechlujstwo przy tworzeniu, wdrożeniu i eksploatacji aplikacji webowej.

Jak na tacy

Serwery WWW mają mechanizm automatycznego tworzenia katalogu plików znajdujących się w danej lokalizacji. Katalog ten jest stroną WWW zawierającą linki do tych plików i jest tworzony dynamicznie na podstawie zawartości foldera. Za włączenie funkcjonalności odpowiada opcja Indexes w konfiguracji dostępu do katalogu (.htaccess) lub serwera. Wyłączenie automatycznego indeksowania folderu zmniejsza prawdopodobieństwo pozyskania przez osoby postronne kompletu plików składowanych w danym miejscu drzewa katalogów, ale w dalszym ciągu nie zapewni to nawet minimalnego poziomu bezpieczeństwa plikom, które są do danego portalu przesyłane. Wynika to stąd, że znając nazwę pliku, można w dalszym ciągu się do niego odwołać - zatem aplikacja webowa umieszczająca przesyłane pliki nie powinna im nadawać nowych nazw w sposób sekwencyjny, kolejnymi liczbami. Nie należy się przy tym łudzić, że szybkie wyłączenie dostępu zablokuje odtworzenie treści - jeśli zasoby zostały zaindeksowane przez wyszukiwarkę, można do nich dotrzeć za pomocą przeglądania cache wyszukiwarki (w tym celu nawet powstały specjalne rozszerzenia, takie jak Google Cache Continue, powszechnie stosuje się też stopniowe odzyskiwanie treści za pomocą cache sliding).

Losowa nazwa nie zawsze pomaga

Wiele aplikacji przechowuje pliki w ten sposób, że do katalogu "upload" są one kopiowane przy jednoczesnej zmianie nazwy na losowo wybrany ciąg znaków. Jeśli tylko serwer WWW nie tworzy automatycznego indeksu do danego katalogu, to taka metoda może się sprawdzić w przypadku mało ważnych informacji, które nie zawierają danych osobowych.

Należy jednak pamiętać o dostatecznym zabezpieczeniu aplikacji webowej przed atakami SQL Injection, które mogą umożliwić odczytanie nazw plików z bazy danych. Dotyczy to nie tylko galerii zdjęć, w której niektóre fotografie są oznaczane jako prywatne, ale także obejmuje systemy obiegu dokumentów, narzędzia do archiwizacji plików lub wszelkie aplikacje webowe, które przechowują dokumenty dostarczane z zewnątrz. Błędy SQL Injection są obecnie jednym z najpoważniejszych zagrożeń bezpieczeństwa aplikacji, mimo że ochrona przed nimi należy do zestawu dobrych praktyk wszystkich programistów, a najpopularniejsze języki programowania mają wbudowane narzędzia do zabezpieczenia przed niekontrolowanym przesłaniem wprost do bazy danych informacji od użytkownika.

Wrzucane pod kontrolą

Nawet jeśli aplikacja nie ma błędu, który można wykorzystać do wstrzyknięcia kodu, należy zwrócić uwagę, jakie pliki mogą być umieszczone w danym katalogu. Jeśli napastnik może umieścić w katalogu plik zawierający kod , być może uda mu się przejąć kontrolę nad zawartością serwera. Należy zatem wprowadzić rygorystyczne filtry typu pliku, jego nazwy i wielkości. Ponadto w konfiguracji dostępu do katalogu (lub w konfiguracji serwera) należy wyłączyć obsługę PHP dla danego katalogu za pomocą opcji RemoveHandler, Remove Type i php_flag engine off.

Odłożyć na bok

Jeśli serwis webowy przyjmuje wysyłane pliki, które następnie nie powinny być publicznie udostępniane, należy opracować sposób umieszczenia ich poza drzewem serwera WWW. W tym celu powinno się odpowiednio ustawić uprawnienia do plików, odłożone w katalogu, do którego serwis webowy je zapisuje. Następnie trzeba uruchomić periodycznie wykonywany skrypt, który bezpiecznie przeniesie pliki poza zasób WWW Root (czyli poza drzewo katalogów, wewnątrz którego znajdują się pliki serwisu WWW). Metoda ta sprawia, że w najgorszym wypadku pliki mogą być pobrane zaledwie przez kilka minut od wysłania (do czasu najbliższego wykonania danego skryptu), ponadto losowa nazwa pliku i ochrona katalogu przed automatycznym katalogowaniem zawartości sprawia, że przechwycenie pliku w tym czasie staje się trudne.


IBM Think Digital Summit Poland, 16-17 września 2020
TOP 200