Jak zapobiegać lukom w przesyłaniu plików

Jak zapobiegać lukom w przesyłaniu plików

Moduły przesyłania plików to jedno z najsłabszych ogniw aplikacji webowych. Wszelkie popełnione błędy, nawet te, które uważasz za drobne, mogą spowodować, że kontrola nad serwerem wpadnie bezpośrednio w ręce cyberatakującego. Z tego powodu twórcy oprogramowania muszą znać najczęstsze błędy i niektóre metody ataków, które mogą wystąpić.

Czym jest manipulacja po stronie klienta? Jak możesz z tym walczyć, aby zapewnić bezpieczeństwo swoim witrynom i użytkownikom?

Czym jest manipulacja po stronie klienta?

Manipulowanie po stronie klienta jest podstawową koncepcją ataków na aplikacje internetowe jako całości. Mówiąc najprościej, oznacza to, że nie możesz już ufać żadnym danym, które wysyłasz do użytkownika. Ponadto manipulowanie po stronie klienta jest jednym z fundamentów bezpiecznego tworzenia aplikacji. Jeśli sprawdzisz moduł przesyłania plików, z którym masz do czynienia i rozważysz manipulację po stronie klienta, dane, którym nie możesz ufać, obejmują:

  • Nazwa przesłanego pliku.
  • Content-Type przesłanego pliku.

Dzięki tym dwóm elementom masz możliwość umieszczenia na białej liście jako programista. Dane nazwy przesłanego pliku mogą zawierać wszystko, co jest modyfikowane po stronie klienta. Z danymi Content-Type przesłanego pliku, nawet jeśli atakujący przesyła plik . exe, plik ten może pojawić się w systemie jako obraz/jpeg.

Rozszerzenie pliku i biała lista

Sprawdzanie rozszerzeń plików przesłanych do systemu

Podczas opracowywania modułów przesyłania plików pierwszą rzeczą do zrobienia jest proces umieszczania na białej liście dla rozszerzenia pliku. Na przykład użytkownik chce przesłać plik o nazwie „muo.jpeg”. Musisz upewnić się, że to rozszerzenie pliku, które użytkownik chce przesłać, to . jpg. W tym celu system powinien sprawdzić przesłany plik i sprawdzić, czy ma on jedno z dozwolonych rozszerzeń plików. Aby zrozumieć, jak to zrobić, przeanalizuj następujący prosty kod PHP:

$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
break;

case "bat": // Or exe, dll, so, etc.
break;


case "":
case NULL: // No file extension
break;
}

Możesz to zrobić za pomocą bloku kodu podobnego do powyższego lub możesz użyć klas i funkcji zapewnianych przez używany framework.

Co to jest informacja o typie zawartości?

Informacje o typie zawartości to informacje wysyłane w żądaniu HTTP dla każdego przesłanego pliku. Przeglądarka internetowa wykrywa te informacje i dodaje je do wysłanego żądania. Osoba atakująca może próbować zmienić informacje, manipulując po stronie klienta i omijając sprawdzanie poprawności po stronie serwera. Na tym etapie programiści potrzebują mechanizmu kontrolnego do sprawdzania poprawności informacji typu Content-Type. Samo to nie wystarczy; mimo to jest to ważna kwestia, na którą deweloperzy powinni zwrócić uwagę.

Załóżmy, że kodujesz mechanizm, aby poprawnie sprawdzać rozszerzenie pliku, i akceptujesz tylko pliki z rozszerzeniem . rozszerzenie JPEG. Oprócz tego mechanizmu zapobiegawczego możesz na wszelki wypadek sprawdzić informacje o typie zawartości i akceptować tylko pliki z informacjami o obrazie/jpeg, co stanowi dodatkowy poziom ochrony przed cyberatakami

Pliki Flash SWF i kroki ataku

Rozszerzenie pliku i dane Content-Type nie mają znaczenia dla przeglądarek internetowych obsługujących wtyczki, takie jak Adobe Flash Player. Chociaż wsparcie dla tego odtwarzacza nie jest już dostępne, nadal można zainstalować te powiązane pliki w wielu systemach, mimo że Flash nadal stanowi zagrożenie dla bezpieczeństwa. W systemie, który nie podjął odpowiednich środków ostrożności, możliwe jest wywołanie pliku Flash ze znacznikiem <object>, niezależnie od jego rozszerzenia. Spowoduje to kolejny poważny problem z bezpieczeństwem.

porada dotycząca wtyczki do końca życia

Aby podjąć działania, programiści muszą znać ścieżki, którymi mogą podążać cyberprzestępcy. Oto jak to się może stać:

  1. Złośliwy atakujący przesyła plik SWF (format pliku Adobe Flash) o nazwie „image.jpeg” do witryny docelowej. Podczas procesu wysyłania sprawdzana jest weryfikacja białej listy, że plik przesłany przez atakującego ma rozszerzenie . rozszerzenie JPEG. Weryfikacja typu zawartości jest pomijana przez manipulowanie po stronie klienta. Wyobraź sobie, że ten plik przesłany przez cyberprzestępcę trafia do „www(dot)target-site(dot)com/images/images.jpeg”.
  2. Załóżmy, że osoba atakująca ma witrynę internetową o nazwie attacker(dot)com. Atakujący wywołuje plik image.jpeg przesłany do docelowej witryny na tej stronie, używając znacznika <object> z przypisaniem typu application/x-shockwave-flash.
  3. Niewinny użytkownik loguje się do atakującego(dot)com. Witryna ta wywołuje plik SWF pod adresem www(dot)target-site(dot)com/images/image.jpeg i wykonuje polecenia przekazane SWF.
  4. Dzięki temu cyberatakujący może tworzyć działania żądania HTTP dla adresu docelowego (dot)com bez zauważenia zwykłych użytkowników. W przypadku tych żądań atakujący użyje sesji niewinnego użytkownika i ominie kontrolę CSRF.

Aby lepiej zrozumieć ten scenariusz ataku, weź pod uwagę, że następujący kod znajduje się w treści HTML <object> wysyłanej do użytkownika przez atakującego (dot)com:

style="height:1px;width:1px;" data="www.target-site.com/images/image.jpeg" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=read&u=somethings"

Jednym z najlepszych rozwiązań jest dostęp do przesłanych plików za pomocą przesyłania plików przez inną subdomenę. W powyższym scenariuszu dostęp do plików statycznych można uzyskać nie z tej samej domeny, ale z innej subdomeny w następujący sposób: „http(colon)//file.target-site(dot)com/images/image.jpeg”.

Innym rozwiązaniem jest dodanie informacji Content-Disposition: załącznik do odpowiedzi HTTP, gdy otrzymasz prośbę o dostęp do plików, które chcesz przesłać.

Zachowaj środki ostrożności w przypadku luk w przesyłaniu plików

Każde przesyłanie plików, które użytkownicy mogą wykonać na stronie internetowej, jest niebezpieczne, więc jest to jedna z kwestii, na którą programiści powinni zwrócić największą uwagę. Jeśli atakujący odkryją taką lukę, mogą otworzyć powłokę w witrynie i łatwo wykorzystać informacje na serwerze. Niezwykle ważne jest kontrolowanie wszystkich plików przesyłanych przez użytkowników, stosowanie metod białej listy i ukrywanie lokalizacji przesłanego katalogu, jeśli to możliwe.

I oczywiście jest wiele innych dodatkowych kroków, które musisz podjąć, aby chronić swoją witrynę, nawet jeśli zastosujesz wszystkie zalecane środki ostrożności podczas przesyłania modułów plików. Jednym z takich kroków, które możesz wykonać, jest użycie nagłówków bezpieczeństwa HTTP.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *