Pyssly

RobotterneTyvens eget kort

Tyvens liste

Hver dag spørger programmer Pyssly efter filer, vi aldrig har haft: adgangskoder, kildekode og sikkerhedskopier. Her er listen, hvor mange gange de har spurgt, hvorfor tyven vil have filerne, og hvordan du beskytter dit eget website.

En robot af papir med en tom sæk sniger sig hen mod et arkivskab.

Hvem er tyven?

Tyven er som regel ikke et menneske, der sidder og leder. Det er et program, der går fra website til website med den samme liste og spørger efter hver eneste fil.

Hvis et website svarer med filen, har tyven fået nøglen uden at bryde noget op. Pyssly har ingen af filerne, så tyven får en falsk side, og vi tæller spørgsmålet.

Har du en hjemmeside, et website eller en server: sørg for, at de her filer ikke kan hentes. Nederst står det, hvordan du tjekker.

Mest eftersøgt

Så mange gange har robotter spurgt Pyssly efter filerne.

Tæller …

Adgangskoder og nøgler

Den største skat: én enkelt fil med alt, der låser websitet op.

Sådan beskytter du dig

  • Læg aldrig hemmeligheder i den mappe, som webserveren viser frem. Læs dem i stedet fra miljøvariabler eller en hemmelighedstjeneste (secrets i Kubernetes, GitHub Actions eller skyen).
  • Spær alle filer og mapper, der starter med punktum, i webserveren, undtagen /.well-known/. Hvordan, står længere nede.
  • Læg aldrig en privat nøgle i webmappen, og hold dine egne loginnøgler for dig selv, beskyttet med en adgangsfrase.

Kildekoden

Hele websitets kode, med hver eneste ændring, der nogensinde er lavet.

Sådan beskytter du dig

  • Upload aldrig .git-mappen. Byg websitet og send kun det byggede, eller hold mappen ude med en .dockerignore.
  • Spær punktum-mapper i webserveren som en ekstra sikring.
  • Har en adgangskode nogensinde ligget i koden: skift den. Det er ikke nok at fjerne den i en ny ændring, for den findes stadig i historikken.

Databaser og sikkerhedskopier

Kopier, som nogen lagde på serveren for en stund og så glemte.

Sådan beskytter du dig

  • Gem sikkerhedskopier uden for webmappen, helst på en anden maskine.
  • Spær .sql, .bak, .zip og lignende i webserveren.
  • Redigér ikke filer direkte på serveren: editorer efterlader kopier som .swp og ~.

WordPress

WordPress driver en stor del af nettet, så tyven prøver altid dets døre, også hos websites uden WordPress, som Pyssly.

Sådan beskytter du dig

  • Opdatér WordPress, temaer og tilføjelser, og fjern tilføjelser, du ikke bruger.
  • Slå totrinslogin til, og luk xmlrpc.php, hvis du ikke har brug for den.
  • WordPress leder også efter wp-config.php én mappe over installationen. Flyt den kun derhen, hvis den mappe ikke selv vises på nettet, og efterlad aldrig kopier af filen.

Databaseværktøjer

Programmer, der lader en styre databasen fra en webside.

Sådan beskytter du dig

  • Læg ikke databaseværktøjer på det offentlige website. Kør dem på din egen computer, og nå databasen gennem en SSH-tunnel eller et VPN.
  • Skal de være der: lås dem bag et ekstra login eller en liste med tilladte adresser.

Fejlsøgningssider

Sider, som udviklere bruger til at kigge ind i et website, mens det kører. Gode på din egen computer, farlige på nettet.

Sådan beskytter du dig

  • Kør aldrig et website i fejlsøgningstilstand på nettet: APP_DEBUG=false, og intet udviklingsmiljø i drift.
  • Fjern phpinfo-filer og testværktøjer, før websitet går live (composer install --no-dev).
  • Lås driftssider som Actuator og server-status til din egen adresse eller et internt netværk.

Gamle døre

Programmer og sider, som serveren kører, når nogen spørger efter dem.

Sådan beskytter du dig

  • Fjern alt, serveren ikke behøver at køre: gamle scripts, testsider og mapper som cgi-bin.
  • Skift fabrikkens adgangskode på routere og kameraer, opdatér dem, og vis aldrig deres indstillingssider mod internettet.
  • Lad kun det køre, der skal køre: en uploadet fil må aldrig kunne køre som kode.

Butikker og phishingsider

To former for søgning, der ikke er et indbrud med det samme, men tæt på.

Sådan beskytter du dig

  • Det, en butik viser for alle, kan alle læse. Læg intet hemmeligt i varer eller produktfelter.
  • Ser du en mappe eller fil, du ikke kender, på din server, som lander/: nogen kan være brudt ind. Fjern den, skift alle adgangskoder, og opdatér alt.

Spær i webserveren

Den bedste beskyttelse er, at filerne aldrig findes på serveren. Spærringerne her er en ekstra sikring, hvis noget alligevel havner dér.

Alle lader /.well-known/ stå åben, for den skal bruges til for eksempel certifikater. Prøv på et testwebsite først.

nginx Først i websitets server-blok. nginx bruger den første regex-regel, der passer, og en location ^~ (for eksempel til /static/) springer dem helt over, så læg de samme regler ind i den også.
# 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 I websitets indstillinger eller i .htaccess (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 I websitets blok i Caddyfile.
# 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 Bestemmer, hvad der kommer med ind i imaget, når det bygges, i alle mapper. Det dækker ikke filer, der monteres ind, mens containeren kører, og er ingen spærring i Traefik: spærringen hører hjemme i appen eller webserveren.
**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvars

Sådan tjekker du

Fem minutter i en terminal. Skift example.com ud med din egen adresse.

Tjek kun dit eget website. At lede efter andres filer er præcis det, tyven gør.

  1. Spørg efter .env

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

    Kig på både svaret og indholdet. 404 eller 403 er godt. Kommer dine indstillinger med, er filen offentlig. (Svarer websitet 200 på alt, som mange apps gør, skal indholdet være din almindelige side.)

  2. Spørg efter .git

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

    Ser du en linje som ref: refs/heads/main, ligger hele kildekoden ude. En fejlside eller din almindelige side er godt.

  3. Prøv under andre mapper

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

    En spærring kan mangle i mapper, der vises direkte, som /static/ eller /assets/. Prøv der, og prøv flere filer fra listen, som en .sql eller en gammel kopi af en indstillingsfil. Det, der tæller, er om indholdet kan ses.

  4. Kig i loggen

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

    Spørgsmålene kommer hver dag, så det er ikke mærkeligt, at de kan ses. Et 200 i loggen beviser ikke et læk, for mange apps svarer 200 med deres almindelige side. Ser du 200 på .env eller .git/HEAD, så hent adressen som ovenfor og kig på indholdet.

Hvis en fil kom frem

  • Fjern filen, og spær adressen.
  • Skift hver adgangskode og nøgle, der stod i den: databasen, e-mailen, betalingstjenester og skykontoen. Gå ud fra, at tyven allerede har dem.
  • Kig i loggen efter, hvem der hentede filen, og om der er sket noget med kontoerne siden.

Mere om tyve og andre slags robotter i Sådan virker robotterne.