Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zawirusowane zdjęcia
Paladyn
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Ostatnio zapytano mnie co zrobić w wypadku, gdy użytkownik będzie próbował uploadować zawirusowane zdjęcie na serwer (poprzez funkcję move_uploaded_file() lub copy() ). Szczerze mówiąc nigdy wcześniej nie przyszła mi taka ewentualność do głowy.
Czy rzeczywiście jest to realne zagrożenie? A jeśli tak jakie są możliwości zabezpieczenie strony/serwera przed taką sytuacją?
Go to the top of the page
+Quote Post
Blame
post
Post #2





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Hmm... nie wydaje mi się aby było możliwe umieszczenie wirusa w obrazku. Co prawda istnieją pewne metody "chowania" danych w plikach graficznych ale w tedy mogą mieć one co najwyżej nazwę obrazek.jpg.EXE(!) więc wydaje mi się, że wystarczy sprawdzać rozszerzenie uploadowanego pliku za pomocą funkcji pathinfo i tyle. Oczywiście zaznaczam, że nie jestem żadnym specjalistą i mogę się milić.

Ten post edytował Blame 18.11.2009, 15:58:30
Go to the top of the page
+Quote Post
misieqq
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 8.11.2009

Ostrzeżenie: (0%)
-----


zdjęcia nie da sie zawirusować. plik wykonywalny musi miec rozszerzenie: *.exe, *.msi, *.com. oczywiscie uzytkownik może zamienic 'exe' na -> 'jpg' ale wtedy "wirus" sie nie uruchomi tylko wyskoczy komunikat w stylu "zdjecie jest uszkodzone"
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy rzeczywiście jest to realne zagrożenie? A jeśli tak jakie są możliwości zabezpieczenie strony/serwera przed taką sytuacją?

Była dziura w SMF 1.1.8, która umożliwiała wykonanie kodu wstrzykniętego w metadane obrazka.

Jak zabezpieczyć? Wycinać metadane na serwerze. Wystarczy ImageMagick, dowolne polecenie i pewien parametr, na który na pewno trafisz. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
seth-kk
post
Post #5





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

Ostrzeżenie: (0%)
-----


dodatkowa kompresja na serwerze powinna usunac potencjalne smieci
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Da się wrzucić wirka do zdjęcia. To kwestia wpisania odpowiednich danych do struktury pliku. Najczęściej komentarzy zdjęcia w EXIF. Oczywiście nie mówię nawet o sytuacji, gdy zapisuje się skrypt cały po prostu zmieniając mu rozszerzenie na jpg czy gif (IMG:style_emoticons/default/smile.gif) A jak można się tego "pozbyć"? Choćby wczytując plik przez biblioteki do obróbki zdjęć jak ImageMagick lub GD i zapisując je ponownie. Większość z danych wtedy ulega utracie i na dodatek można wykryć, czy rzeczywiście mamy do czynienia ze zdjęciem czy może tylko z "podróbką".
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
dodatkowa kompresja na serwerze powinna usunac potencjalne smieci

I po co sobie pogarszać jakość zwiększając dodatkowo rozmiar pliku?

Są funkcję do usuwania metadanych z obrazów, to trzeba z nich korzystać, a nie szukać rozwiązań (obejść).
Go to the top of the page
+Quote Post
seth-kk
post
Post #8





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

Ostrzeżenie: (0%)
-----


Cytat(erix @ 18.11.2009, 20:59:50 ) *
I po co sobie pogarszać jakość zwiększając dodatkowo rozmiar pliku?

bardziej chodzilo mi o "kompresje" bez pogarszania parametrow grafiki (w stylu: te same wymiary 100% dla jpg, ta sama liczba kolorow itp)
thek lepiej to ujal (wczytanie i zapis)
Go to the top of the page
+Quote Post
MWL
post
Post #9





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


Hej. Ja prowadzę (udanie) hosting zdjęć ifotos.pl. Już 2 dnia ktoś włamał mi się na serwer, miałem wtedy tylko sprawdzany mime type. Dziś mam sprawdzanie mime-type, rozszerzenie i to wszystko. Przez ponad rok serwis nie został popsuty (IMG:style_emoticons/default/smile.gif) Polecam więc sprawdzanie zarówno rozszerzenia jak i typu pliku (mime type)
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
bardziej chodzilo mi o "kompresje" bez pogarszania parametrow grafiki (w stylu: te same wymiary 100% dla jpg, ta sama liczba kolorow itp)

Muszę Cię rozczarować - spowoduje to właśnie pogorszenie jakości. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
MWL
post
Post #11





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


sory za lekki spam, ale erix ma rację, z resztą nie kłuć się z osobą posiadającą certyfikat zenda (szacun (IMG:style_emoticons/default/haha.gif) ). Ale tak przy okazji, jeśli erix mówisz o funkcji usuwania meta tagów to jaka to funkcja (IMG:style_emoticons/default/winksmiley.jpg) co? powiedz (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
l0ud
post
Post #12





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Jak mniemam kod PHP można umieścić i bezpośrednio w obrazku - co prawda nie będzie już działał, ale bez weryfikacji poprawności i tak przejdzie. Muszę zerknąć do źródeł funkcji getimagesize() - bo nie sądzę żeby samo jej stosowanie (a tak chyba jest w wielu przypadkach) wystarczyło. Niemniej nawet posiadając kod w obrazku zupełnie nic nie możemy z nim zrobić - potrzebna jest dużo poważniejsza dziura typu local file inclusion.
Go to the top of the page
+Quote Post
MWL
post
Post #13





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


kod PHP możesz umieścić (ale tylko kiedy masz tak ustawione na serwerze) standardowo żaden kod (poza plikami .php) nie jest wykonywany.
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~MWL, papier to nie wyznacznik. (IMG:style_emoticons/default/tongue.gif)

A wracając do tematu - kiedyś robiłem ciut głębsze badanie na temat tej przypadłości. getimagesize nie sprawdza, czy są doklejone do pliku jakieś dane. Wynika to z tego, że w GIF/PNG wymiary są zapisane bodajże w nagłówku i po prostu dalsza część pliku nie jest potrzebna. Jeśli chodzi o JPG, jest to związane z konkretnymi blokami i dalej plik nie jest już czytany. W zasadzie wystarczy pierwsze pół kilobajta pliku (nawet uciętego), aby getimagesize nie zwróciło błędu.

Jeśli chodzi o możliwość wykorzystania tego kodu - była swego czasu luka w SMF, która zamieniała serwery w istne armaty do spamowania (tak nawiasem, pliki maskowały się w katalogach TinyMCE (IMG:style_emoticons/default/winksmiley.jpg) ). O ile w sytuacji, gdy obrazki są tylko dla nas, to nie ma ryzyka (zakładam, że nie będzie wykorzystywane PHP do ich wyświetlania), to w przypadku, gdy coś z nimi robimy (wyświetlanie przez readfile i pochodne) już stwarzało problemy.

Nie mam 100% pewności, ale na atak narażone są konfiguracje, w których PHP działa jako aplikacja (Fast)CGI.

Cytat
standardowo żaden kod (poza plikami .php) nie jest wykonywany.

No i tu jest pies pogrzebany - niestety nie masz racji. Serwer nie sprawdza (to jest jedna z głównych przypadłości bezpieczeństwa wykonania skryptów interpretera PHP), jakie rozszerzenie jest wykonywane. Wystarczy nadpisać tablicę MIME i nawet ten spreparowany obrazek się wykona jako skrypt.

Cytat
Ale tak przy okazji, jeśli erix mówisz o funkcji usuwania meta tagów to jaka to funkcja co? powiedz

ImageMagick, dowolne polecenie, parametr -strip: http://www.imagemagick.org/script/command-...tions.php#strip
Go to the top of the page
+Quote Post
l0ud
post
Post #15





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Cytat
No i tu jest pies pogrzebany - niestety nie masz racji. Serwer nie sprawdza (to jest jedna z głównych przypadłości bezpieczeństwa wykonania skryptów interpretera PHP), jakie rozszerzenie jest wykonywane. Wystarczy nadpisać tablicę MIME i nawet ten spreparowany obrazek się wykona jako skrypt.


W jaki sposób nadpisać tablicę MIME za pomocą spreparowanego obrazka? (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie pamiętam już, na czym konkretnie polegał ten bug, ale AFAIR był on powiązany z tą przypadłością (brakiem sprawdzania rozszerzenia wykonywanego skryptu).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 17:00