Cześć wszystkim.
Stworzyłem w API end point na który użytkownik przesyła zdjęcie swojego awatara. Plik ten będzie zapisywany w folderze na serwerze hostującym API. Zastanawiam się w jaki sposób mogę zabezpieczyć API przed potencjalnymi wirusami. Jakie są praktyki z tym związane?
Jak dana usługa jest poległa to zdjęcie może przejąc kontrolę nad urządzeniem, ale tak w większości nie jest, w obrazkach nie ma wirusów jak masz obraz, to komputer prasuje headery i jak są losowe dane czy coś to się wywali program, a jak będzie wirus w pixelach to wyświetli to jako kolor na ekranie.
To nie jest sprecyzowane nie ma wirusów w obrazach, jedynie jak masz obraz.png.exe to wtedy system odpali to jako binarną aplikację tak to wykorzysta jakiś program, który obsługuje dany format i ten program sprawdzi headery i inne potem będzie wiedział gdzie są pixele i jak jest zbugowany to exploit go wyłoży, ale ludzie łatają takie rzeczy i większość jest bezpieczna.
A jak dasz .zip to format jest czytany od tyłu strony czyli od końca do początku, czyli masz schizofreniczne pliki gdzie normalnie jest obraz, a jak innym programem odczytasz to jest archiwum :>
Ciężko mi powiedzieć, bo nie robiłem nigdy takich rzeczy, ale wydaje mi się że skorzystanie z konwertera formatu mogłoby wystarczyć. Tylko to musiałyby być niekompatybilne formaty, żeby nastąpiło ponowne enkodowanie.
Jednym z niewydajnych sposobów mogłoby być też próba narysowania obrazu na canvas, i zapisanie tego canvas. Wtedy miałbyś pewność że zapisujesz tylko bitmapę.
Po prostu odczytaj i zapisz (same dane bitmapy) jeszcze raz, najlepiej jako webp żeby oszczędzić miejsce, wszelkie exploity zostaną unieszkodliwione.
Przy okazji usunie to też metadane i oryginalną miniaturkę (która często trzyma wygląd oryginalnego zdjęcia przed cropem) żeby użytkownicy przypadkowo nie udostępnili więcej niż mieli w zamiarze.
No chyba że to exploit akurat wycelowany na program który by odczytywał te zdjęcia na serwerze, ale takie rzeczy się raczej już nie zdarzają. Na wszelki wypadek możesz mieć od tego osobny sandboksowany mikroserwis z minimalnymi uprawnieniami.
Zastanawiam się czy serwery hostujące mają swoje antywirusy. Być może opcja było by przechowywanie zdjęć w wydzielonym i odizolowanym folderze ale nie wiem czy tego typu praktyki są stosowane i zasadne
Hi_i_By napisał(a):
Zastanawiam się czy serwery hostujące mają swoje antywirusy. Być może opcja było by przechowywanie zdjęć w wydzielonym i odizolowanym folderze ale nie wiem czy tego typu praktyki są stosowane i zasadne
Ogólnie to takie rzeczy się nie zdarzają i nie zainfekują serwera, wirus nie zacznie nagle biegać po serwerze z samego faktu istnienia. Mogą zawierać jedynie exploity które się odpalają przy czytaniu tych plików przez konkretne programy (jak przeglądarka internetowa czy galeria obrazków w windowsie).
Takie exploity są raczej szybko łatane i ostatni (niegroźny) był lata temu w imagemagick https://nvd.nist.gov/vuln/detail/CVE-2022-44268 chyba że o czymś nowszym nie wiem lub zapomniałem.
Nie ma sensu osobny folder, bo nie ma znaczenia gdzie plik się znajduje tylko gdzie znajduje się program który czyta ten plik i jakie ma uprawnienia; ale ma ekonomiczny sens użycie osobnego serwera cdn.
Antywirusy raczej nie wykryją exploita 0-day i na nic się zdadzą, wystarczy często aktualizować programy na serwerze i najlepiej mieć jakiś automat monitorujący podatności.
Osobiście nie sprawdzam tak zdjęć. Po uploadzie zdjęć, jeszcze je konwertujemy i wrzucamy na azure storage lub od razu wrzucamy na storage(dotyczy to też inny plików).
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.