Lyhyesti: Joka koventaa palvelimensa PHP:lle, huolehtii siitä, ettei yksittäinen haavoittuvuus avaa koko palvelinta. Erotamme verkkosivustot toisistaan, asetamme PHP:n ja verkkopalvelimen turvallisiksi, rajoitamme oikeuksia ja pääsyjä ja dokumentoimme jokaisen muutoksen. Näin vahinko jää pienemmäksi, jos jotain kuitenkin tapahtuu.
Miksi koventaminen on tullut tärkeämmäksi PHP2Shellin jälkeen
PHP2Shell on osoittanut, kuinka nopeasti haavoittuvuus itse PHP:ssä muuttuu ongelmaksi kaikille palvelimen verkkosivustoille. Haavoittuvuuksien CVE-2026-109618 ja CVE-2026-109619 kautta hyökkääjät voivat suorittaa koodia ilman kirjautumista. Korjaus sulkee tämän oven. Koventaminen vastaa eri kysymykseen: mitä voi tehdä se, joka silti pääsee sisään, tämän tai seuraavan haavoittuvuuden kautta?
Koventamattomalla palvelimella kaikki verkkosivustot toimivat usein saman käyttäjän alla, PHP saa suorittaa järjestelmäkomentoja ja tunnukset ovat kaikkien prosessien luettavissa. Murto pieneen sivusivustoon yltää silloin verkkokauppaan asti. Hyvä koventaminen erottaa nämä alueet toisistaan. Se ei ole kertatoimi vaan perustila, joka on säilytettävä jokaisen uuden verkkosivuston ja versionvaihdon yhteydessä.
Palvelimen koventaminen PHP:lle: mitä konkreettisesti muutamme
Sivustokohtainen eristys
Jokainen verkkosivusto saa oman järjestelmäkäyttäjän ja oman PHP-FPM-poolin. Asetuksella open_basedir ja sopivilla tiedosto-oikeuksilla sovellus näkee vain oman hakemistonsa. Lisää aiheesta sivulla open_basedir ja sivustokohtainen eristys.
Turvallinen PHP-konfiguraatio
Asetamme php.ini:n ja poolin konfiguraation niin, etteivät sovellukset voi ylikirjoittaa turvallisuuden kannalta tärkeitä arvoja itse. Ote siitä, miltä se voi näyttää FPM-poolissa:
; Määritä arvot kiinteästi FPM-poolissa, ei muutettavissa ini_set()-funktiolla
php_admin_flag[expose_php] = off
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[open_basedir] = /var/www/kunde1/:/tmp/
php_admin_flag[session.upload_progress.enabled] = off
php_admin_flag[allow_url_include] = off
Mitä funktioita voi lisäksi estää, riippuu sovelluksesta. Vihjeitä löytyy sivuilta php.ini:n turvallinen konfigurointi ja disable_functions oikein käytettynä.
Tiedosto-oikeudet ja kirjoitusoikeus
Verkkopalvelin saa kirjoittaa vain siellä, missä se on tarpeen, esimerkiksi latauskansiossa. Latauskansioissa PHP:n suoritus estetään. Ohjelmakoodin omistaa eri käyttäjä kuin se, jonka alla PHP toimii. Periaatteet selittää sivu Tiedosto-oikeudet verkkopalvelimella.
Pääsyt, palvelut ja lokit
SSH vain avaimella, ylläpitokäyttöliittymät kaksivaiheisella tunnistautumisella, tarpeettomat palvelut ja portit suljettuina. Lokit säilytetään ja turvataan niin, että ne ovat vielä olemassa poikkeaman jälkeen. Varmuuskopioiden palautettavuus tarkistetaan.
Verkkopalvelin ja tietoturvaotsakkeet
Myös verkkopalvelin itse kuuluu koventamiseen: versiotietojen piilotus, hakemistolistausten poisto, pääsyn esto asetus-, varmuuskopio- ja versionhallintatiedostoihin sekä ylläpitoalueiden lisäsuojaus, esimerkiksi IP-sallinnalla. Tietoturvaotsakkeet, kuten Content-Security-Policy tai HSTS, suojaavat verkkosivustonne kävijöitä selaimessa.
Mitä löydämme kartoituksessa usein
Moni heikkous toistuu palvelimelta toiselle. Tyypillisiä ovat useat verkkosivustot yhteisen käyttäjän alla, julkisesti tavoitettavat tietokantojen käyttöliittymät, vanhat testiasennukset alikansioissa, unohtuneet PHP-versiot nykyisen rinnalla sekä varmuuskopiot, jotka ovat verkkohakemistossa ladattavissa. Usein puuttuu myös kirjautumisten lokitus tai lokit poistetaan muutaman päivän kuluttua.
Mikään näistä ei ole yksinään dramaattinen. Yhdessä ne ratkaisevat, jääkö murto yhteen verkkosivustoon vai koskeeko se koko palvelinta.
Miten PHP SOS auttaa konkreettisesti?
- Kartoitus: Kokoamme käyttöjärjestelmän, verkkopalvelimen, PHP-versiot, verkkosivustot, käyttäjät, avoimet palvelut ja olemassa olevat varmuuskopiot.
- Toimenpidesuunnitelma: Saatte tärkeysjärjestykseen asetetun luettelon, jossa on kunkin kohdan työmäärä ja mahdolliset vaikutukset. Te päätätte, mitä toteutetaan.
- Toteutus vaiheittain: Muutamme konfiguraatioita sopimuksen mukaan, testaamme verkkosivustot jokaisen vaiheen jälkeen ja kirjaamme, miten kukin muutos voidaan perua.
- Tarkistus: Toteutuksen jälkeen tarkistamme vaikutuksen, esimerkiksi ettei verkkosivusto todella enää pysty lukemaan vieraita hakemistoja.
- Luovutus: Saatte uuden tilan dokumentaation, jonka myös hosting-yrityksenne tai toimistonne voi ymmärtää.
Mitä saatte ja mitä tarvitsemme
Saatte koventamisraportin, jossa on lähtötilanne, toteutetut toimenpiteet, tietoisesti avoimiksi jätetyt kohdat perusteluineen ja suositus säännölliseen tarkistukseen. Konfiguraatiotiedostojen muutokset on dokumentoitu jäljitettävästi.
Tarvitsemme teiltä:
- root- tai ylläpitäjätunnukset palvelimelle, paneeleissa lisäksi paneelitunnukset
- luettelon sovelluksista ja niiden erityispiirteistä, esimerkiksi lataukset, rajapinnat, cron-tehtävät
- teknisen yhteyshenkilön, joka voi vahvistaa toiminnot muutosten jälkeen
- huoltoikkunat uudelleenkäynnistyksille
- ajantasaisen varmuuskopion tai toimeksiannon luoda sellainen ensin
Mitä emme lupaa
Koventaminen ei tee palvelimesta haavoittumatonta. Se pienentää hyökkäyspinta-alaa ja rajoittaa vahinkoja, mutta ei korvaa päivityksiä eikä valvontaa. Korjaamaton PHP-versio pysyy haavoittuvana riippumatta siitä, kuinka hyvin muu on asetettu. Siksi yhdistämme koventamisen PHP-korjauspalveluun ja suosittelemme sen jälkeen jatkuvaa huoltoa tietoturvahuoltosopimuksella.
Jaetussa hostingissa moni asia ei ole säädettävissä, koska hosting-yritys määrää konfiguraation. Silloin näytämme, mikä on mahdollista pakettinne puitteissa ja missä siirtyminen omaan tai hallinnoituun palvelimeen olisi järkevää.
Usein kysytyt kysymykset
Mitä palvelimen koventaminen tarkoittaa?
Koventaminen tarkoittaa sellaisen poistamista käytöstä tai rajoittamista, mikä ei ole käytön kannalta tarpeellista. Siihen kuuluvat tarpeettomat palvelut, liian laajat oikeudet, avoimet portit ja turvattomat oletusasetukset. Tavoitteena on, ettei yksittäinen virhe avaa koko palvelinta.
Olisiko koventaminen estänyt PHP2Shellin?
Ei, itse PHP:n haavoittuvuutta vastaan auttaa vain korjaus. Koventaminen kuitenkin rajoittaa, mitä hyökkääjä voi onnistuneen murron jälkeen saavuttaa, esimerkiksi pääseekö hän käsiksi muihin verkkosivustoihin tai tunnuksiin.
Rikkoutuuko verkkosivustoni koventamisessa?
Riski on olemassa, jos asetuksia muutetaan ilman testausta. Teemme muutokset vaiheittain, tarkistamme toiminnot jokaisen vaiheen jälkeen ja kirjaamme, miten kukin muutos voidaan perua.
Kuinka usein koventaminen kannattaa tarkistaa?
Viimeistään suurempien päivitysten, PHP-version vaihdon tai uusien sovellusten jälkeen. Järkevää on säännöllinen tarkistus osana jatkuvaa ylläpitoa.