Varkaan lista
Joka päivä ohjelmat kysyvät Pysslyltä tiedostoja, joita meillä ei ole koskaan ollut: salasanoja, lähdekoodia ja varmuuskopioita. Tässä on lista, kuinka monta kertaa niitä on kysytty, miksi varas haluaa tiedostot ja miten suojaat oman sivustosi.

Kuka on varas?
Varas ei yleensä ole ihminen, joka istuu ja etsii. Se on ohjelma, joka kulkee sivustolta toiselle samalla listalla ja kysyy jokaista tiedostoa.
Jos sivusto vastaa tiedostolla, varas on saanut avaimen murtamatta mitään. Pysslyllä ei ole yhtäkään näistä tiedostoista, joten varas saa tekaistun sivun ja me laskemme kysymyksen.
Jos sinulla on kotisivu, sivusto tai palvelin: varmista, ettei näitä tiedostoja voi ladata. Alaosassa kerrotaan, miten tarkistat.
Eniten haluttu
Näin monta kertaa robotit ovat kysyneet Pysslyltä näitä tiedostoja.
Lasketaan …
Salasanat ja avaimet
Suurin aarre: yksi tiedosto, jossa on kaikki, millä sivusto avataan.
/.envLasketaan …Mikä se on? Pieni tekstitiedosto, johon moni sivusto tallentaa salaisuutensa: tietokannan salasanan, maksupalvelujen ja sähköpostin avaimet sekä avaimen, joka pitää kirjautumiset turvassa. Myös muunnelmat, kuten .env.production ja env.js.
Miksi varas haluaa sen? Sillä varas voi kirjautua tietokantaan, lähettää sähköpostia sivuston nimissä tai käyttää sivuston tilejä muissa palveluissa.
/config.jsonLasketaan …Mikä se on? Asetustiedostot: config.json, settings.py, web.config, docker-compose.yml, appsettings.json, credentials.json, pilvitilin service-account.json ja Terraformin terraform.tfvars.
Miksi varas haluaa sen? Niissä on usein samat salaisuudet kuin .env-tiedostossa, ja lisäksi tieto siitä, missä tietokanta ja palvelimet ovat. Service-account.json tai tfvars-tiedosto voi antaa koko pilvitilin.
/id_rsaLasketaan …Mikä se on? SSH-avain: avaimen salainen puolikas, jolla voi kirjautua palvelimelle ilman salasanaa.
Miksi varas haluaa sen? Jos tiedosto on käsissäsi, pääset usein suoraan palvelimelle, aivan kuin omistaja itse.
/.htaccessLasketaan …Mikä se on? Muut tiedostot, joiden nimi alkaa pisteellä, kuten .htaccess, .htpasswd, .DS_Store ja .bash_history. Piste tarkoittaa tietokoneella piilotettua, mutta ei verkossa.
Miksi varas haluaa sen? Ne näyttävät, miten palvelin on asetettu ja mitä tiedostoja siellä on, ja joskus salasanoja (.htpasswd) tai komentoja, joita joku on kirjoittanut.
Näin suojaudut
- Älä koskaan laita salaisuuksia kansioon, jonka verkkopalvelin näyttää kaikille. Lue ne ympäristömuuttujista tai salaisuuspalvelusta (Kubernetesin secrets, GitHub Actions tai pilvi).
- Estä verkkopalvelimessa kaikki pisteellä alkavat tiedostot ja kansiot, paitsi /.well-known/. Miten, kerrotaan alempana.
- Älä koskaan laita yksityistä avainta verkkokansioon, ja pidä omat kirjautumisavaimesi omana tietonasi, salalauseella suojattuna.
Lähdekoodi
Sivuston koko koodi ja jokainen muutos, joka siihen on koskaan tehty.
/.git/Lasketaan …Mikä se on? Kansio, johon Git tallentaa projektin koko historian. Jos se on palvelimella, kuka tahansa voi ladata koko koodin tiedosto kerrallaan.
Miksi varas haluaa sen? Koodista varas etsii salasanoja, jotka joku on kerran laittanut sinne ja sitten poistanut (ne ovat yhä historiassa), sekä hyödynnettäviä vikoja.
/.svn/Lasketaan …Mikä se on? Sama vanhemmille versionhallintaohjelmille: Subversion (.svn), Mercurial (.hg), Bazaar ja CVS.
Miksi varas haluaa sen? Aivan kuten .git: lähdekoodia ja vanhoja salaisuuksia.
Näin suojaudut
- Älä koskaan lataa .git-kansiota palvelimelle. Rakenna sivusto ja lähetä vain valmis versio, tai pidä kansio poissa .dockerignore-tiedostolla.
- Estä pistekansiot verkkopalvelimessa lisäturvana.
- Jos salasana on joskus ollut koodissa: vaihda se. Sen poistaminen uudessa muutoksessa ei riitä, se on yhä historiassa.
Tietokannat ja varmuuskopiot
Kopioita, jotka joku jätti palvelimelle hetkeksi ja unohti.
*.sqlLasketaan …Mikä se on? Tietokantavedos: koko tietokanta yhtenä tiedostona, esimerkiksi backup.sql tai db.sql.gz.
Miksi varas haluaa sen? Siinä on kaikki, mitä sivusto tietää: käyttäjät, sähköpostiosoitteet, salasanat (toivottavasti tiivisteinä) ja tilaukset. Tietovuoto kerralla.
*.bakLasketaan …Mikä se on? Varmuuskopiot ja vanhat versiot: .bak, .old, .orig, .swp sekä arkistot, kuten site.zip tai backup.tar.gz.
Miksi varas haluaa sen? Wp-config.php.bak näytetään tekstinä sen sijaan, että se ajettaisiin, joten salasanat ovat selkokielisinä. Zip-arkisto voi olla koko sivusto.
Näin suojaudut
- Tallenna varmuuskopiot verkkokansion ulkopuolelle, mieluiten toiselle koneelle.
- Estä .sql, .bak, .zip ja vastaavat verkkopalvelimessa.
- Älä muokkaa tiedostoja suoraan palvelimella: editorit jättävät jälkeensä kopioita, kuten .swp ja ~.
WordPress
WordPress pyörittää isoa osaa verkkoa, joten varas kokeilee sen ovia aina, myös sivustoilla, joilla ei ole WordPressiä, kuten Pysslyllä.
/wp-login.phpLasketaan …Mikä se on? WordPressin kirjautumissivu.
Miksi varas haluaa sen? Varas kokeilee yleisiä käyttäjänimiä ja salasanoja yhä uudelleen, toivoen että jokin osuu.
/wp-admin/Lasketaan …Mikä se on? WordPressin ylläpitopaneelin kansio, jossa on myös asennussivu.
Miksi varas haluaa sen? Puolivalmiin asennuksen varas voi viimeistellä itse ja tulla ylläpitäjäksi. Muuten se on sama ovi kuin kirjautuminen.
/xmlrpc.phpLasketaan …Mikä se on? WordPressin vanha rajapinta, jolla julkaistaan muista ohjelmista.
Miksi varas haluaa sen? Vanhoissa versioissa varas pystyi kokeilemaan satoja salasanoja yhdellä kutsulla. Se on yhä ovi salasanojen arvaamiseen, ja pingbackien avulla sivusto voidaan saada lähettämään liikennettä muille sivustoille.
/wp-content/Lasketaan …Mikä se on? Kansio, jossa on lisäosat, teemat ja ladatut tiedostot.
Miksi varas haluaa sen? Varas etsii vanhoja lisäosia, joissa on tunnettuja turva-aukkoja, ja lisäosien sinne jättämiä varmuuskopioita.
/wp-includes/Lasketaan …Mikä se on? WordPressin omat ohjelmatiedostot.
Miksi varas haluaa sen? Ne paljastavat, mitä versiota sivusto ajaa, ja siten mitä tunnettuja aukkoja siinä voi olla.
/wp-json/Lasketaan …Mikä se on? WordPressin REST-rajapinta.
Miksi varas haluaa sen? Se voi luetella sivuston käyttäjänimet, joten varas tietää, mille tileille kannattaa kokeilla salasanoja.
/wp-config.phpLasketaan …Mikä se on? WordPressin asetustiedosto, jossa on tietokannan salasana ja sivuston salaiset avaimet.
Miksi varas haluaa sen? Kun PHP toimii oikein, kukaan ei näe sisältöä, mutta kopio (wp-config.php.bak, wp-config.php~) tai rikkinäinen palvelin näyttää kaiken.
Näin suojaudut
- Päivitä WordPress, teemat ja lisäosat, ja poista lisäosat, joita et käytä.
- Ota kaksivaiheinen kirjautuminen käyttöön ja sulje xmlrpc.php, jos et tarvitse sitä.
- WordPress etsii wp-config.php-tiedostoa myös asennuskansiota ylemmästä kansiosta. Siirrä se sinne vain, jos sitä kansiota ei itse näytetä verkossa, äläkä koskaan jätä tiedostosta kopioita.
Tietokantatyökalut
Ohjelmat, joilla tietokantaa hoidetaan verkkosivulta.
/phpmyadmin/Lasketaan …Mikä se on? phpMyAdmin, yleinen työkalu MySQL-tietokantojen hoitoon selaimessa.
Miksi varas haluaa sen? Jos varas löytää sen, se kokeilee salasanoja tai vanhojen versioiden tunnettuja aukkoja. Jos pääsee sisään, sillä on koko tietokanta.
/adminer.phpLasketaan …Mikä se on? Adminer, samanlainen työkalu yhdessä tiedostossa, joka usein ladataan hetkeksi ja unohdetaan.
Miksi varas haluaa sen? Sama kuin phpMyAdmin: kirjautuminen suoraan tietokantaan.
Näin suojaudut
- Älä laita tietokantatyökaluja julkiselle sivustolle. Aja ne omalla koneellasi ja pääse tietokantaan SSH-tunnelin tai VPN:n kautta.
- Jos niiden on pakko olla siellä: lukitse ne ylimääräisen kirjautumisen tai sallittujen osoitteiden listan taakse.
Vianetsintäsivut
Sivut, joilla kehittäjät katsovat sivuston sisään sen pyöriessä. Hyviä omalla koneella, vaarallisia verkossa.
/phpinfo.phpLasketaan …Mikä se on? Sivu, joka näyttää kaikki PHP:n asetukset, myös ympäristömuuttujat.
Miksi varas haluaa sen? Siellä on usein salasanoja ja avaimia, polkuja ja tarkat versiot: kartta palvelimesta.
/vendor/phpunit/Lasketaan …Mikä se on? PHP:n testityökalu, joka joskus päätyy palvelimelle vendor-kansiossa.
Miksi varas haluaa sen? Vanhoissa versioissa on aukko, jonka avulla kuka tahansa voi ajaa omaa koodia palvelimella.
/actuator/Lasketaan …Mikä se on? Spring Bootin ylläpitosivut Java-sovelluksille.
Miksi varas haluaa sen? Osa niistä näyttää ympäristömuuttujat, asetukset tai muistivedoksen, jossa on salasanoja.
/server-statusLasketaan …Mikä se on? Apachen tilasivu, joka näyttää, mitä palvelin tekee juuri nyt.
Miksi varas haluaa sen? Se näyttää, mitä osoitteita kaikki kävijät kysyvät, joskus salaisine linkkeineen ja avaimineen.
/_ignition/Lasketaan …Mikä se on? Ignition, Laravelin vianetsintäsivu.
Miksi varas haluaa sen? Vanhoissa versioissa on aukko, jonka avulla varas voi ajaa omaa koodia, ja virhesivu paljastaa usein asetukset.
/_profiler/Lasketaan …Mikä se on? Symfonyn profiloija, joka tallentaa jokaisen kutsun kaikkine sisältöineen.
Miksi varas haluaa sen? Se näyttää jokaisen vierailun kirjautumiset, istunnot ja asetukset, myös muiden.
Näin suojaudut
- Älä koskaan aja sivustoa vianetsintätilassa verkossa: APP_DEBUG=false, eikä kehitysympäristöä tuotannossa.
- Poista phpinfo-tiedostot ja testityökalut ennen kuin sivusto julkaistaan (composer install --no-dev).
- Lukitse ylläpitosivut, kuten Actuator ja server-status, omaan osoitteeseesi tai sisäverkkoon.
Vanhat ovet
Ohjelmat ja sivut, joita palvelin ajaa, kun joku kysyy niitä.
/cgi-bin/Lasketaan …Mikä se on? Kansio vanhoille skripteille, joita palvelin ajaa, usein Perlillä tai komentotulkilla.
Miksi varas haluaa sen? Vanhoissa skripteissä on tunnettuja aukkoja, kuten Shellshock, joiden avulla varas voi ajaa komentoja palvelimella.
/boaform/Lasketaan …Mikä se on? Reitittimien ja kameroiden asetussivut (boaform, HNAP1).
Miksi varas haluaa sen? Varas etsii laitteita, jotka voi ottaa haltuun vanhoilla aukoilla tai tehdassalasanoilla, käytettäväksi botnetissä.
*.phpLasketaan …Mikä se on? Mikä tahansa PHP-tiedosto, esimerkiksi shell.php tai tiedosto, jolla on outo nimi.
Miksi varas haluaa sen? Usein varas etsii takaovea (web shell), jonka joku muu on jo laittanut sivustolle, ottaakseen sen haltuun.
*.aspLasketaan …Mikä se on? Muilla kielillä kirjoitetut ohjelmat, joita palvelin ajaa: .asp, .aspx, .jsp ja .cgi.
Miksi varas haluaa sen? Sama kuin PHP:ssä: vanhojen sivujen tunnetut aukot tai takaovi, joka on jo olemassa.
Näin suojaudut
- Poista kaikki, mitä palvelimen ei tarvitse ajaa: vanhat skriptit, testisivut ja kansiot, kuten cgi-bin.
- Vaihda reitittimien ja kameroiden tehdassalasanat, päivitä ne äläkä näytä niiden asetussivuja internetiin.
- Anna ajaa vain se, minkä kuuluu ajaa: ladattua tiedostoa ei saa koskaan voida ajaa koodina.
Kaupat ja kalastelusivut
Kaksi etsintätapaa, jotka eivät ole heti murto, mutta lähellä sitä.
/cart.jsLasketaan …Mikä se on? Tiedostot, jotka jokaisella Shopify-kaupalla on, kuten cart.js ja products.json.
Miksi varas haluaa sen? Niiden avulla ohjelma löytää kauppoja ja lukee tuotteet ja hinnat, usein kopioidakseen ne huijauskauppoihin.
/lander/Lasketaan …Mikä se on? Kalastelupaketin jäänteet: laskeutumissivut ja skriptit, jotka jäljittelevät pankkia tai pakettipalvelua.
Miksi varas haluaa sen? Kysyjä etsii sivustoja, joille joku on jo laittanut tällaisen paketin: murrettuja sivustoja uudelleenkäytettäviksi.
Näin suojaudut
- Minkä kauppa näyttää kaikille, sen kaikki voivat lukea. Älä laita mitään salaista tuotteisiin tai tuotekenttiin.
- Jos näet palvelimellasi kansion tai tiedoston, jota et tunne, kuten lander/: joku on voinut murtautua sisään. Poista se, vaihda kaikki salasanat ja päivitä kaikki.
Estä verkkopalvelimessa
Paras suoja on, ettei tiedostoja ole palvelimella lainkaan. Tässä olevat estot ovat lisäturva, jos jotain silti päätyy sinne.
Kaikki jättävät /.well-known/ auki, koska sitä tarvitaan esimerkiksi varmenteisiin. Kokeile ensin testisivustolla.
# First in the server block: nginx takes the first regex location that matches,
# and a location ^~ (such as /static/) skips them, so repeat these inside it.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
location ~ /\.(?!well-known/) {
return 404;
}
# Databases, backups and old copies
location ~* \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$ {
return 404;
}# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
RedirectMatch 404 "/\.(?!well-known/)"
# Databases, backups and old copies
<FilesMatch "\.(sql|bak|old|orig|swp|zip|tar|gz|7z)$">
Require all denied
</FilesMatch># Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
@hidden {
path_regexp /\.
not path_regexp ^/\.well-known/([^./][^/]*/?)*$
}
respond @hidden 404
# Databases, backups and old copies, /.well-known/ included
@copies path_regexp \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$
respond @copies 404**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvarsNäin tarkistat
Viisi minuuttia päätteessä. Vaihda example.com omaan osoitteeseesi.
Tarkista vain oma sivustosi. Toisten tiedostojen etsiminen on juuri sitä, mitä varas tekee.
Kysy .env-tiedostoa
curl -sS -i https://example.com/.envKatso sekä vastausta että sisältöä. 404 tai 403 on hyvä. Jos asetuksesi tulevat mukana, tiedosto on julkinen. (Jos sivusto vastaa 200 kaikkeen, kuten monet sovellukset, sisällön pitäisi olla tavallinen sivusi.)
Kysy .git-kansiota
curl -sS -i https://example.com/.git/HEADJos näet rivin, kuten ref: refs/heads/main, koko lähdekoodi on esillä. Virhesivu tai tavallinen sivusi on hyvä.
Kokeile muiden kansioiden alta
curl -sS -i https://example.com/static/.envEsto voi jäädä puuttumaan kansioista, jotka näytetään suoraan, kuten /static/ tai /assets/. Kokeile niissä, ja kokeile lisää tiedostoja listalta, kuten .sql-tiedostoa tai asetustiedoston vanhaa kopiota. Ratkaisevaa on, näkyykö sisältö.
Katso lokia
grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.logKyselyjä tulee joka päivä, joten niiden näkyminen ei ole outoa. 200 lokissa ei todista vuotoa, sillä monet sovellukset vastaavat 200 tavallisella sivullaan. Jos näet 200 tiedostolle .env tai .git/HEAD, hae osoite kuten yllä ja katso, mitä tulee takaisin.
Jos tiedosto pääsi ulos
- Poista tiedosto ja estä osoite.
- Vaihda jokainen salasana ja avain, joka siinä oli: tietokanta, sähköposti, maksupalvelut ja pilvitili. Oleta, että varkaalla ne jo ovat.
- Katso lokista, kuka haki tiedoston ja onko tileille sen jälkeen tapahtunut jotain.
Lisää varkaista ja muunlaisista roboteista kohdassa Näin robotit toimivat.