Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Kuvaan piilotettu koodi

Sivun loppuun

JuustoPala [30.07.2013 14:43:18]

#

Sivulleni voi ladata kuvia, joiden koko ja pääte (.jpg tms.)tarkastetaan.

Sivulleni on tullut mainostuksen jälkeen virheellisiä kuvia, jotka luultavasti sisältävät jotain haitallista, esim. viruksia tms.

Miten saan tehtyä PHP-koodin, joka tunnistaa nämä "feikki"-kuvat, ja ei päästä niitä palvelimelle?

fergusq [30.07.2013 14:51:11]

#

Tarkista että kuva sisältää oikean headerin. Wikipedian mukaan JPG-kuvat alkavat aina tavuilla ff d8, joten jos nuo tavut löytyvät tiedostosta niin se on todennäköisesti JPEG-kuva.

Toinen vaihtoehto on tarkistaa, että headerit eivät ole suoritettavien tiedostojen yms. headereita.

Lisäys: Exejen headeri on 4d 5a. Skriptit alkavat usein merkeillä #! -joten niitä kannattaa myös varoa.

JuustoPala [30.07.2013 15:31:14]

#

Miten headeri tarkistetaan?

Googletin jo, ja en löytänyt vastausta.

fergusq [30.07.2013 15:37:54]

#

PHP-metodi fread lukee tiedostosta tietyn määrän tavuja.

$handle = fopen($file_name, 'r');
$header = fread($handle, 2);
fclose($handle);

if ($header=="\xff\xd8") {
	// jpg
}
if ($header=="\x4d\x5a") {
	// exe
}
if ($header=="#!") {
	// skripti
}

Olli [30.07.2013 19:57:01]

#

Kokeile tätä:
https://www.ohjelmointiputka.net/koodivinkit/24212-php-tiedoston-lähetys-upload

-tossu- [30.07.2013 20:33:17]

#

Jos joku jaksaa piilottaa haittaohjelman .jpg-tiedostoon, headerin tarkistaminen tuskin muuttaa mitään. Haitallinen koodi ei tee mitään ennen kuin se ajetaan, joka edellyttää käytännössä tiedostopäätteen vaihtamista, executable-oikeuksia tai haavoittuvuutta ohjelmassa, joka kuvan näyttää.

Lähes varma tapa olisi koko tiedoston validointi, mutta en tiedä, onko siihen valmiita kirjastoja.

Lähtisin kuitenkin liikkeelle virheellisten tiedostojen analysoinnista ja suunnittelisin tarkistuksia vasta sitten.

JaskaP [30.07.2013 22:39:37]

#

-tossu- kirjoitti:

Lähes varma tapa olisi koko tiedoston validointi, mutta en tiedä, onko siihen valmiita kirjastoja.

On ainakin vanha kunnon ImageMagick ja identify-komento

Koska on komentoriviohjelma, niin siitä vaan system-funktiolla (vai-mikä-se-on-PHP:ssä). Pitää tietysti muistaa tarkistaa ettei tiedostonimi sisällä haittakoodia, johon PHP:ssa on varmaan valmis funktio.

Ai niin, onhan sille tietenkin myös läjä kirjastoja, myös PHP:lle.

Php.net tarjoaa näköjään tota opasta

JuustoPala [31.07.2013 17:14:31]

#

Onko se oikeasti näin vaikeaa, tehdä kuvan-laataamis-ominaisuuden sisältävä sivu tietoturvavakaaksi?

--

Kertokaa nyt se varmin tapa, ja selkeästi :).
Mieluiten myös ette linkkaa englanninkielisiä oppaita (en ymmärrä niistä mitään).
Tarvitsen apua pikaisesti, sivusto on tämän takia tauolla.

Olisin kiitollinen myös jostain koodipätkästä, joka tutkii kuvan toimivuuden tms.

fergusq [31.07.2013 18:00:42]

#

Jos puhutaan tietoturvasta, niin ei ole mitään huolta jos kohtelet tiedostoja kuvina. Jos ne eivät ole kuvia, tulee korkeintaan virheitä, ei mitään haitallista. Ei kuvankatseluohjelma tai nettiselain osaa etsiä kuvista koodia ja suorittaa sitä. Voit manuaalisesti poistaa kuvat, jotka eivät toimi. Jos niitä tulee niin paljon, että syntyy ongelma, tarkista headerit tai käytä jotain JaskaP:n mainitsemaa ohjelmaa tunnistamaan virheelliset kuvat.

JuustoPala [31.07.2013 20:23:35]

#

Miten sitten Norton havaitsi sivula uhan? Pelkkää sattumaa?

Tyhjät kuvathan eivät haittaa, mutta jos niissä on minkäänlaista tietoturvariskiä, pitäisi ongelma korjata.

fergusq [31.07.2013 20:45:24]

#

Ei paha koodi haittaa, jos sitä ei suoriteta. Nortinit yms. etsivät pahaa koodia kaikista tiedostoista, koska on mahdollista, että ne suoritetaan myöhemmin. Jos tätä ei kuitenkaan koskaan tapahdu (eikä sitä tapahdu jos koodaat PHP-ohjelmasi huolella), mitään vaaraa ei ole.

Muista, vaikka kirjoitan tähän <script>alert("Hahaa!"); doSomethingEvil();</script>, ei se tarkoita, että mitään tapahtuu. Sama on kuvissa. Jos et niitä suorita, eivät ne tee mitään.

Poista ne kuvat nettisivultasi ja tee suodatin edellämainituilla tavoilla jos niitä tulee lisää.

JuustoPala [31.07.2013 22:33:35]

#

Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?

Tarkoittaako se kuvan sivulle tulostamista, vai jollain ohjelmalla sen sisältämän koodin suorittamista? Vai mitä?

Grez [31.07.2013 22:38:44]

#

Jossain vaiheessahan selaimissa oli tunnettuja bugeja kuvankäsitelyssä, jolloin esim. sopivalla puskuriylivuodolla saattoi saada haittakoodia suoritettua.

Tällä hetkellä voisi ainakin toivoa ettei enää sellaisia selaimia olisi kellään käytössä.

fergusq [01.08.2013 11:38:57]

#

JuustoPala kirjoitti:

Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?

Ei kuvan tulostamista ainakaan. Sen pitäisi olla nykypäivän ohjelmilla turvallista.

Kuvan suorittaminen tarkoittaa, että vihamielinen koodi etsitään toisella ohjelmalla (kuten tulkilla) kuvasta, ja suoritetaan.

Deffi [01.08.2013 13:21:39]

#

JuustoPala kirjoitti:

Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?

Tällä tarkoitetaan kuvan suorittamista koodina. Tällaista on esimerkiksi kuvan ajaminen PHP-tulkin läpi include-komennolla, jolloin kuvan mahdollisesti sisältämä haitallinen PHP-koodi suoritetaan. Toinen esimerkki on kuvan tallentaminen työpöydälle, nimeäminen .exe-päätteiseksi ja tuplaklikkaaminen.

Tiedostot voivat sisältää mitä tahansa haitallista koodia, mutta sillä ei ole mitään väliä, niin kauan kuin sitä ei suoriteta. Eivätkä tiedostot suorita itse itseään, ellet käske. Joitain erittäin harvinaisia poikkeutapauksia on olemassa, mistä Grez mainitsi, mutta niistä sinun on turha välittää.

JuustoPala [01.08.2013 15:16:52]

#

Onneksi huolen aiheeni oli turha!

Kiitos!

jukkah [01.08.2013 15:23:25]

#

Toisaalta, jos pyörität softaasi kaupallisessa pilvessä, jossa on tappiin asti viritetyt viruksentorjuntaohjelmistot yms. suojaukset, haitallinen kuva jää kiinni johonkin seulaan (esim. palomuuriin), eikä lataudu perille asti ollenkaan.

JaskaP [01.08.2013 17:59:35]

#

Grez kirjoitti:

Jossain vaiheessahan selaimissa oli tunnettuja bugeja kuvankäsitelyssä, jolloin esim. sopivalla puskuriylivuodolla saattoi saada haittakoodia suoritettua.

Josta tuli mieleen, että ImageMagick on C:llä tehty, joten puskurinylivuotohyökkäys on mahdollinen...

jukkah kirjoitti:

Toisaalta, jos pyörität softaasi kaupallisessa pilvessä, jossa on tappiin asti viritetyt viruksentorjuntaohjelmistot yms. suojaukset, haitallinen kuva jää kiinni johonkin seulaan (esim. palomuuriin), eikä lataudu perille asti ollenkaan.

Näköjään pääsevät kerran JuustoPala on ne huomannut, voivat toki olla pelkästään korruptoituneita, eikä siis haittakoodia. (JuustoPala voisi laittaa linkin vialliseen kuvatiedostoon, niin voisi ihmetellä.)

JuustoPala kirjoitti:

Onneksi huolen aiheeni oli turha!

Ehkä, mutta pitäisihän ne vialliset kuvat blokata tai jotain, eikös?

The Alchemist [01.08.2013 18:21:23]

#

Mun mielestä se ei ole niin kovin kriittistä varmistua siitä, että ladattu tiedosto on oikeasti väitettyä muotoa, mikäli se ei itsessään aiheuta tietoturvariskiä eikä esimerkiksi järjestelmävirhettä.

P.S. Mikäli syötät kuvat selaimelle php:n kautta tai manipuloit niitä uploadaamisen yhteydessä, niin vika voi myös skriptissäsi. Tiedostojen lataaminen voi epäonnistua myös tiedostojen enimmäiskoon ylittymisen takia.

JaskaP [01.08.2013 19:11:28]

#

The Alchemist kirjoitti:

Mun mielestä se ei ole niin kovin kriittistä varmistua siitä, että ladattu tiedosto on oikeasti väitettyä muotoa, mikäli se ei itsessään aiheuta tietoturvariskiä eikä esimerkiksi järjestelmävirhettä.

Joo, mutta esimerkiksi selaimen oman "rikki"-kuvakkeen näyttäminen kuvan paikalla ei voi olla sivustolle eduksi. Tarttis varmaan jotain ööh... prosessoida.

The Alchemist [01.08.2013 20:07:51]

#

Kuvanhan voi validoida muodollisesti vaikka getimagesize-funktiolla, kun tarkistaa, että se palauttaa kelvolliset mitat. Silloin kuva näkyy selaimessa ainakin jossain muodossa, vaikka voihan se edelleen olla osin korruptoitunut tai sisältää jotain ylimääräistäkin tavaraa kuten laukaisua odottavan viruksen.

p99o [18.08.2013 17:24:46]

#

http://nullcandy.com/php-image-upload-security-how-not-to-do-it/

laitan tämän vain tänne.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta