WordPressin tiedostorakenteen kovennus kokonaisuutena
WordPressin tietoturva mielletään usein lisäosiksi, palomuureiksi ja kirjautumissuojauksiksi. Todellisuudessa yksi tärkeimmistä, mutta vähiten näkyvistä turvakerroksista on tiedostorakenne ja sen oikea kovennus. Jos hyökkääjä pääsee kirjoittamaan tai lukemaan vääriä tiedostoja, peli on usein jo hävitty – riippumatta siitä, kuinka monta turvalisäosaa on asennettu.
Tiedostorakenteen hardening ei ole temppu tai yksittäinen asetus. Se on joukko periaatteita, joilla WordPressin ajonaikainen hyökkäyspinta minimoidaan.
Miksi tiedostorakenne on kriittinen hyökkäyspinta
WordPress on kirjoitettava sovellus
WordPress tarvitsee kirjoitusoikeuksia:
-
mediakirjastoon
-
välimuistiin
-
päivityksiä varten
Tämä tarkoittaa, että osa tiedostojärjestelmästä on pakko olla kirjoitettavissa. Kovennuksen idea ei ole estää kirjoittamista kokonaan, vaan rajata se minimiin.
Suurin osa hyökkäyksistä on tiedostopohjaisia
Tyypilliset hyökkäykset pyrkivät:
-
lisäämään PHP-tiedostoja uploads-kansioon
-
muokkaamaan wp-config.php:tä
-
injektoimaan koodia teema- tai lisäosatiedostoihin
-
lukemaan arkaluonteisia konfiguraatiotiedostoja
Hyvin kovennettu tiedostorakenne estää nämä ennen kuin ne edes pääsevät WordPress-tasolle.
Perusperiaate: vähimmät oikeudet
Mitä WordPress oikeasti tarvitsee
WordPress ei tarvitse:
-
kirjoitusoikeutta core-tiedostoihin ajon aikana
-
kirjoitusoikeutta lisäosiin tai teemoihin normaalissa käytössä
-
pääsyä järjestelmän muihin hakemistoihin
Suurin osa WordPressin tiedostoista on staattisia. Kun ne ovat oikein suojattuja, hyökkääjän liikkumavara kapenee dramaattisesti.
wp-config.php: tärkein yksittäinen tiedosto
Sijainti ja näkyvyys
wp-config.php sisältää:
-
tietokantatunnukset
-
salausavaimet
-
ympäristöasetukset
Ensimmäinen kovennusaskel on siirtää wp-config.php webrootin yläpuolelle, jos palvelinympäristö sallii sen. WordPress osaa lukea sen sieltä automaattisesti.
Jos tämä ei ole mahdollista, tiedoston oikeudet ja suojaus ovat kriittisiä.
Oikeudet ja suojaus
wp-config.php:
-
ei saa olla kirjoitettavissa web-käyttäjälle
-
ei saa olla ladattavissa selaimen kautta
-
ei saa sisältää ylimääräisiä debug-asetuksia tuotannossa
Yksi vuotanut wp-config.php tarkoittaa koko sivuston haltuunottoa.
wp-content: joustava mutta vaarallinen
uploads-kansio on korkean riskin alue
wp-content/uploads on tarkoitettu käyttäjien lataamalle sisällölle. Se ei ole tarkoitettu PHP-koodille.
Kovennuksen perusperiaate:
-
uploads-kansiossa ei ajeta PHP:tä
Tämä estää tehokkaasti suuren osan web shell -hyökkäyksistä.
Lisäosat ja teemat
Lisäosien ja teemojen hakemistoihin:
-
kirjoitetaan vain päivitysten aikana
-
ei ajeta dynaamista tiedostonluontia
Tuotantoympäristössä nämä hakemistot tulisi lukita kirjoitussuojatuiksi ja avata vain päivityshetkellä.
WordPress core -tiedostot
Core ei muutu ajossa
WordPressin ydintiedostot eivät muutu normaalissa käytössä. Jos ne muuttuvat, kyseessä on joko:
-
päivitys
-
virheellinen konfiguraatio
-
tietoturvaloukkaus
Kovennuksessa core-hakemistot tehdään read-only web-käyttäjälle.
Core-modifikaatiot ovat riski
Jos corea on muokattu käsin, kovennus vaikeutuu merkittävästi. Tämä on yksi vahvimmista syistä välttää core-hackeja kokonaan.
Tiedosto-oikeudet ja omistajuus
Oikeudet eivät ole yksi numero
Yleinen virhe on etsiä “oikeaa chmod-arvoa”. Todellisuudessa tärkeämpää on:
-
kuka omistaa tiedostot
-
mikä käyttäjä ajaa PHP:tä
-
kuka saa kirjoittaa ja milloin
Kovennus perustuu rooleihin, ei taulukoihin.
Web-käyttäjä ei ole ylläpitäjä
Web-palvelimen käyttäjän ei pitäisi:
-
omistaa WordPress-tiedostoja
-
voida muokata koodia
-
voida luoda uusia PHP-tiedostoja vapaasti
Tämä erottaa hyökkäyksen sivuston kaatumisesta täyteen haltuunottoon.
Tiedostojen listaus ja metatiedot
Directory listing pois päältä
Jos hakemistolistaus on päällä, hyökkääjä näkee:
-
tiedostojen nimet
-
rakenteen
-
mahdolliset varmuuskopiot
Hakemistolistaus ei ole koskaan hyödyllinen WordPress-tuotannossa.
Varmuuskopiot ja väliaikaiset tiedostot
Usein unohtuvat riskit:
-
.zip- ja .sql-varmuuskopiot
-
editorien temp-tiedostot
-
vanhat config-versiot
Kovennus tarkoittaa myös siisteyttä.
PHP:n ajokohdan rajaaminen
Kaikkialla ei tarvitse ajaa PHP:tä
WordPress tarvitsee PHP:tä tietyissä hakemistoissa. Muualla se on riski.
Hyvä periaate:
-
PHP sallittu vain siellä missä sitä tarvitaan
-
media- ja asset-hakemistot vain staattista sisältöä
Tämä rajaa hyökkäyksen leviämistä merkittävästi.
Automaattiset päivitykset ja kovennus
Päivitykset vs kirjoitusoikeudet
Automaattiset päivitykset vaativat kirjoitusoikeuksia. Tämä on tietoinen kompromissi.
Yleisiä malleja:
-
väliaikainen kirjoitusoikeus päivityksen aikana
-
CI/CD-pohjainen päivitys ilman web-kirjoitusoikeuksia
Jälkimmäinen on turvallisempi, mutta vaatii enemmän prosessia.
Kovennus ei saa rikkoa ylläpitoa
Liian tiukka suojaus on myös riski
Jos kovennus estää:
-
päivitykset
-
varmuuskopioinnin
-
virheiden korjaamisen
sivusto jää haavoittuvaksi toisella tavalla. Turvallisuus ei ole maksimaalinen lukitus, vaan hallittu tasapaino.
Miten tiedostorakenteen kovennus näkyy käytännössä
Hyvin kovennettu WordPress:
-
ei salli PHP-tiedostojen lataamista väärään paikkaan
-
ei paljasta arkaluonteisia tiedostoja
-
ei muutu ajon aikana yllättäen
-
reagoi hyökkäyksiin rajatusti
Usein paras merkki onnistuneesta kovennuksesta on se, ettei siitä tarvitse ajatella päivittäin.
Lopuksi: kovennus on passiivista puolustusta
WordPressin tiedostorakenteen hardening ei pysäytä kaikkia hyökkäyksiä. Se pysäyttää helpoimmat, yleisimmät ja vaarallisimmat.
Kun tiedostojärjestelmä on lukittu oikein, hyökkääjän täytyy murtaa useampi kerros. Ja jokainen lisäkerros lisää aikaa, vaivaa ja todennäköisyyttä, että hyökkäys epäonnistuu tai havaitaan ajoissa.
Tiedostorakenteen kovennus ei ole näyttävää. Juuri siksi se on yksi tehokkaimmista tietoturvatoimista WordPressissä.
