Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

Varmuuskopiotiedostot verkkojuuressa: .zip, .sql ja .bak

Miksi tietokantavedokset, arkistot ja varmuuskopiot julkisessa hakemistossa kuuluvat yleisimpiin tietovuotoihin, miten ne löydetään ja estetään ja miten selvitetään, onko niitä haettu.

Tilanne Lukuaika 4 minTurvallinen kehitys

Lyhyesti: Varmuuskopiotiedostot verkkojuuressa eli tietokantavedokset (.sql), arkistot (.zip, .tar.gz) ja varmuuskopiot (.bak, .old, ~) voi ladata kuka tahansa, joka tietää tiedostonimen tai arvaa sen. Etsikää tällaisia tiedostoja säännöllisesti komennolla find, siirtäkää varmuuskopiot julkisen hakemiston ulkopuolelle, estäkää tyypilliset päätteet verkkopalvelimessa ja tarkistakaa käyttölokeista, onko niitä jo haettu.

Varmuuskopio, josta tulee vuoto

Juuri ennen päivitystä joku luo vielä nopeasti varmuuskopion: backup.zip pääkansioon, sen viereen datenbank.sql. Päivitys onnistuu, tiedostot jäävät paikalleen. Kuukausia myöhemmin ne ovat yhä siellä, koko koodin, kaikkien asiakastietojen ja verkkosivuston tunnusten kanssa.

Tämä malli kuuluu verkkopalvelinten tarkistusten yleisimpiin havaintoihin. Se ei tarvitse hyökkäystä eikä aukkoa PHP:ssä. Verkkopalvelin tarjoilee verkkojuuresta sen, mitä siellä on, eikä se suorita arkistoja tai SQL-tiedostoja vaan tarjoaa ne ladattavaksi.

Verkkosivuston arkisto sisältää paitsi tietoja myös koodin konfiguraatioineen. Joka lataa sen, voi rauhassa etsiä heikkouksia ja tuntee tietokannan tunnukset.

Automaattiset skannerit etsivät kohdennetusti tyypillisiä nimiä kuten backup.zip, site.tar.gz tai dump.sql, usein yhdistettynä verkkotunnukseen tai päivämäärään. Joka luulee epätavallisen tiedostonimen suojaavan, aliarvioi, kuinka järjestelmällisesti tätä etsintää tehdään.

Mitä tiedostoja tarkoitetaan

Varmuuskopiotiedostoja verkkojuuressa esiintyy useassa muodossa:

Laji Tyypilliset päätteet Mitä sisällä on
Tietokantavedokset .sql, .sql.gz, .dump asiakastiedot, tilaukset, salasanatiivisteet, asetukset
Verkkosivuston arkistot .zip, .tar, .tar.gz, .tgz, .rar, .7z koko koodi, konfiguraatio, uploadit
Yksittäisten tiedostojen kopiot .bak, .old, .orig, .save, .php~, .copy usein asetustiedostoja tunnuksineen
Editorin jäänteet .swp, .swo, ~ lopussa parhaillaan muokattujen tiedostojen osia
Laajennusten varmuuskopiot CMS:n omat alikansiot täydelliset varmuuskopiot, osin arvattavilla nimillä

Erityisen arkaluonteisia ovat asetustiedostojen kopiot. Alkuperäisen tiedoston config.php palvelin suorittaa, ja sen sisältö pysyy piilossa. Kopion config.php.bak se tarjoilee tekstinä tietokannan salasanoineen.

Varmuuskopioiden löytäminen verkkojuuresta: haku palvelimella

Seuraava haku luettelee epäilyttävät tiedostot verkkojuurten alla päivämäärineen ja kokoineen. Mukauttakaa polut palvelimeenne:

find /var/www /srv/www -type f \( \
  -iname '*.sql' -o -iname '*.sql.gz' -o -iname '*.dump' -o \
  -iname '*.zip' -o -iname '*.tar' -o -iname '*.tar.gz' -o -iname '*.tgz' -o \
  -iname '*.rar' -o -iname '*.7z' -o \
  -iname '*.bak' -o -iname '*.old' -o -iname '*.orig' -o -iname '*.save' -o \
  -iname '*~' -o -iname '*.swp' \) \
  -printf '%TY-%Tm-%Td  %10s  %p\n' 2>/dev/null | sort

Kaikki osumat eivät ole ongelma. Jotkin arkistot on tarkoituksella tarjottu ladattaviksi, esimerkiksi käsikirjat. Jokainen tiedosto ansaitsee kuitenkin tietoisen päätöksen. Kiinnittäkää erityistä huomiota suuriin tiedostoihin ja varmuuskopiolaajennusten kansioihin. Jaetussa hostingissa ilman shell-pääsyä auttaa hosting-paneelin tiedostoyleiskatsaus tai haku SFTP:llä.

Toimi heti

Jos löydätte verkkojuuresta tietokantavedoksen, jossa on asiakastietoja, siirtäkää se heti pois julkisesta hakemistosta ja varmistakaa käyttölokit, ennen kuin ne kierrätetään. Vasta sen jälkeen selvitätte, onko tiedostoa haettu.

Onko tiedosto jo ladattu?

Vastaus on verkkopalvelimen käyttölokeissa. Etsittäviä ovat onnistuneet haut eli tila 200 löydetyistä tiedostoista:

# Tyypillisten varmuuskopiopäätteiden onnistuneet haut (Combined-lokimuoto)
zgrep -hE '\.(sql|sql\.gz|zip|tar|tgz|gz|bak|old|7z|rar)[ ?]' /var/log/nginx/access.log* \
  | awk '$9 == 200 {print $4, $1, $7, $10}'

Tuloste näyttää ajankohdan, osoitteen, polun ja vastauksen koon. Jos siirretty koko vastaa tiedoston kokoa, tiedosto on ladattu kokonaan. Kuinka kauas lokit ulottuvat, riippuu kierrätyksestä. Jos ne eivät ulotu tiedoston luontipäivään asti, aiempaa hakua ei voida sulkea pois. Tarkemmin sen kuvaa Verkkopalvelimen lokien analysointi hyökkäyksen jälkeen. Jos teillä ei ole pääsyä raakalokeihin, esimerkiksi jaetussa hostingissa, kysykää hosting-palveluntarjoajalta kyseisen ajanjakson lokeja.

Jos henkilötietoja sisältävä vedos on haettu tai sitä ei voida sulkea pois, ilmoitusvelvollisuuden arviointi alkaa. Perusteet kokoaa GDPR-ilmoitusvelvollisuus: 72 tuntia tapahtuman jälkeen; yksittäistapauksen arviointi kuuluu tietosuojavastaavallenne. Haettujen tiedostojen tunnukset vaihdatte joka tapauksessa.

Varmuuskopiolaajennukset, paneelit ja muutot

Monet löydöt johtuvat CMS-järjestelmien ja verkkokauppojen varmuuskopiolaajennuksista. Ne tallentavat varmuuskopiot usein verkkojuuren alikansioon, osin päivämäärästä ja verkkotunnuksesta muodostetuilla nimillä, jotka voi arvata. Tarkistakaa jokaisesta laajennuksesta kolme asetusta: Minne varmuuskopioidaan? Poistetaanko paikalliset kopiot, kun ne on ladattu ulkoiseen kohteeseen? Onko paikallinen kansio suojattu suoralta haulta?

Hosting-paneelien varmuuskopiot sijaitsevat yleensä verkkojuuren ulkopuolella, esimerkiksi kotihakemistossa. Ongelmalliseksi tilanne muuttuu, jos joku kopioi tällaisen varmuuskopion verkkojuureen, koska lataus selaimella on kätevämpi kuin SFTP:llä. Muutoissa pätee siksi: siirto SFTP:llä tai suoraan palvelinten välillä, ei koskaan julkisen linkin kautta.

Jos virastot tai palveluntarjoajat huoltavat verkkosivustojanne, tämän säännön pitäisi olla myös sopimuksessa, samoin velvollisuus siivota huoltotöiden jälkeen. Vihjeitä antaa IT-palveluntarjoajasopimukset: tietoturvavelvoitteet selkeiksi.

Pysyvä ennaltaehkäisy: säilytyspaikka ja estot

Jotta ongelma ei toistu, tarvitaan kaksi tasoa. Ensimmäinen on organisatorinen: varmuuskopioilla on kiinteä paikka verkkojuuren ulkopuolella ja lisäksi palvelimen ulkopuolella. Millainen kestävä varmuuskopio on, kuvaa opas Varmuuskopiot 3-2-1-säännön mukaan.

Toinen taso on tekninen: verkkopalvelin kieltäytyy periaatteessa tyypillisistä varmuuskopiopäätteistä, vaikka tiedosto joskus jäisikin paikalleen.

location ~* \.(sql|sql\.gz|dump|bak|old|orig|save|swp|swo)$ {
    return 404;
}
location ~ ~$ {
    return 404;
}

Arkistot kuten .zip estätte vain, jos verkkosivustonne ei tarjoa lataamista tässä muodossa, tai kohdennetusti hakemistoissa, joissa ei ole latauksia. Lisäksi auttavat säännöllinen automaattinen haku ilmoituksineen ja lyhyt sääntö tiimissä: ei varmuuskopioita eikä kopioita verkkojuuressa, ei edes viideksi minuutiksi. Vastaavia tapauksia kuten piilotetut asetustiedostot käsittelee Tunnusten ja .env-tiedostojen oikea suojaus.

Miten PHP SOS auttaa konkreettisesti?

  • Käymme verkkojuurenne läpi vedosten, arkistojen, kopioiden ja laajennusten varmuuskopioiden varalta ja arvioimme jokaisen löydön.
  • Tarkistamme käyttölokien perusteella, onko tiedostoja haettu, ja dokumentoimme tuloksen tietosuoja-arviointianne varten.
  • Otamme käyttöön verkkopalvelimen estot ja säännöllisen automaattisen haun.
  • Siirrämme varmuuskopiot suojattuun paikkaan verkkojuuren ulkopuolelle.

Nämä työt kuuluvat PHP-verkkopalvelinten koventamiseemme.

Usein kysytyt kysymykset

Miksi varmuuskopiot päätyvät ylipäätään verkkojuureen?

Yleensä mukavuudenhalusta: vedos luodaan muuttoa varten, laajennus tallentaa varmuuskopiot omaan kansioonsa tai ennen muutosta luodaan nopeasti tiedoston kopio päätteellä .bak. Sen jälkeen tiedosto unohtuu.

Kuinka vaarallinen on tiedosto kuten config.php.bak?

Erittäin. Päätteellä .php oleva tiedosto suoritetaan palvelimella, ja sen sisältö pysyy piilossa. Kopion, jolla on toinen pääte, palvelin sen sijaan tarjoilee yleensä tekstinä tietokannan salasanoineen ja avaimineen.

Onko julkisesti haettavissa oleva tietokantavedos tietosuojaloukkaus?

Jos se sisältää henkilötietoja ja sitä on haettu tai hakua ei voida sulkea pois, GDPR:n mukainen ilmoitusvelvollisuus tulee kyseeseen. Yksittäistapauksen arvioinnin hoitaa tietosuojavastaavanne tai oikeudellinen neuvonantajanne.

Missä varmuuskopioiden pitäisi sen sijaan olla?

Verkkojuuren ulkopuolella ja lisäksi palvelimen ulkopuolella, 3-2-1-säännön mukaan. Vähintään yksi kopio tulisi tallentaa niin, ettei verkkopalvelin itse voi poistaa tai muuttaa sitä.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu