Pyssly

RobotitVarkaan oma kortti

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.

Paperirobotti tyhjä säkki mukanaan hiipii kohti arkistokaappia.

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.

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.

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.

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ä.

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.

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.

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ä.

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ä.

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.

nginx Sivuston server-lohkon alkuun. nginx käyttää ensimmäistä sopivaa regex-sääntöä, ja location ^~ (esimerkiksi /static/-kansiolle) ohittaa ne kokonaan, joten laita samat säännöt myös sen sisään.
# 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;
}
Apache Sivuston asetuksissa tai .htaccess-tiedostossa (Apache 2.4).
# 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>
Caddy Sivuston lohkossa Caddyfilessa.
# 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
.dockerignore Päättää, mitä levykuvaan tulee mukaan, kun se rakennetaan, kaikista kansioista. Se ei koske tiedostoja, jotka liitetään konttiin sen käydessä, eikä se ole esto Traefikissa: esto kuuluu sovellukseen tai verkkopalvelimeen.
**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvars

Näin tarkistat

Viisi minuuttia päätteessä. Vaihda example.com omaan osoitteeseesi.

Tarkista vain oma sivustosi. Toisten tiedostojen etsiminen on juuri sitä, mitä varas tekee.

  1. Kysy .env-tiedostoa

    curl -sS -i https://example.com/.env

    Katso 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.)

  2. Kysy .git-kansiota

    curl -sS -i https://example.com/.git/HEAD

    Jos näet rivin, kuten ref: refs/heads/main, koko lähdekoodi on esillä. Virhesivu tai tavallinen sivusi on hyvä.

  3. Kokeile muiden kansioiden alta

    curl -sS -i https://example.com/static/.env

    Esto 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ö.

  4. Katso lokia

    grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.log

    Kyselyjä 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.