LabbCybersäkerhet · Etisk hackning
0/0
Laboration

Härdning av konfiguration

Mål: Täppa till de svagheter som inte beror på kod utan på hur systemet är uppsatt.

Observera

Gå igenom din labbapplikations svarshuvuden och felsidor. Mycket information läcker ofta utan att någon avsett det: versionsnummer på server och ramverk, fullständiga sökvägar, databasfel, stackspårningar, interna IP-adresser och testkonton som glömts kvar.

curl -I http://localhost:8080
Vad koden gör — förklaring rad för rad

Hämtar svarshuvudena från en tjänst som körs lokalt, för att se vad den berättar om sig själv.

localhost
Namnet för "den här maskinen". Anropet lämnar aldrig datorn.
:8080
Portnumret efter kolon. Här körs tjänsten på port 8080 i stället för den vanliga 80.

Analysera

Grundorsaken är nästan alltid att utvecklingsinställningar följt med till drift. Felsökningsläge som visar detaljerade fel är en fördel under utveckling och ett problem i produktion. Standardlösenord och exempelkonton följer med från installationen. Tjänster som ingen använder står kvar och lyssnar.

Bygg försvaret

1. Säkerhetshuvuden — en fullständig uppsättning för nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; object-src 'none'; frame-ancestors 'none'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always;

# Dölj versionsinformation
server_tokens off;
Vad koden gör — förklaring rad för rad

Den fullständiga uppsättningen säkerhetshuvuden för nginx. Varje rad stänger en egen liten lucka; tillsammans utgör de en baslinje.

Strict-Transport-Security
Tvingar HTTPS i fortsättningen (se Lab 1).
Content-Security-Policy
Begränsar vad webbläsaren får köra (se Lab 4).
X-Content-Type-Options "nosniff"
Hindrar webbläsaren från att gissa filtyp. Utan den kan en uppladdad bild tolkas som ett skript.
Referrer-Policy
Styr hur mycket av din adress som skickas vidare när en besökare klickar sig till en annan sajt.
Permissions-Policy
Stänger av webbläsarfunktioner sidan inte behöver — här plats, kamera och mikrofon.
server_tokens off;
Döljer serverns versionsnummer, som annars står i varje svar.

2. Stäng av felsökningsläge i produktion. I Django: DEBUG = False och en korrekt ifylld ALLOWED_HOSTS. I de flesta ramverk styrs detta av en miljövariabel — se till att produktionsmiljön faktiskt har rätt värde satt, och att det inte går att råka starta i fel läge.

3. Generiska felsidor utåt, detaljerade loggar inåt. Användaren ska se "Ett fel uppstod, referens ABC-123". Loggen ska innehålla hela stackspårningen kopplad till samma referens.

4. Inventera och minimera. Lista vilka tjänster som lyssnar och stäng av det som inte behövs:

ss -tulpn          # vilka portar lyssnar, och vilken process
systemctl list-units --type=service --state=running
Vad koden gör — förklaring rad för rad

Två kommandon för att se vad som faktiskt körs på maskinen. Du kan inte stänga av det du inte vet finns.

ss -tulpn
Listar vilka portar som lyssnar och vilken process som äger dem. Bokstäverna är flaggor: t och u för de två vanliga protokollen, l för lyssnande, p för process, n för att visa nummer i stället för namn.
systemctl list-units --type=service --state=running
Listar alla tjänster som är igång just nu. Allt som inte behövs bör stängas av.

5. Byt alla standarduppgifter och ta bort exempel- och testkonton. Detta gäller även databaser, administrationsgränssnitt, utskriftsservrar och nätverksutrustning.

6. Patchhantering som rutin. Ha en bestämd kadens för uppdateringar och automatiserad beroendekontroll i byggkedjan (npm audit, pip-audit, Dependabot eller motsvarande).

Verifiera

# Kontrollera att huvudena levereras
curl -I https://exempel.se

# Kontrollera att felsidor inte läcker detaljer
curl https://exempel.se/finns-inte-12345
Vad koden gör — förklaring rad för rad

Två kontroller efter härdningen: att huvudena verkligen levereras, och att felsidor inte avslöjar för mycket.

curl -I https://exempel.se
Visa svarshuvudena och leta efter de rader du lagt till.
curl https://exempel.se/finns-inte-12345
Begär medvetet en sida som inte finns. Svaret ska vara kortfattat, inte en stackspårning med sökvägar och versionsnummer.

Dokumentera

Skapa en härdningschecklista som kan återanvändas vid varje driftsättning. En checklista som faktiskt används är mer värd än en omfattande policy som ingen läser.


Kunskapskontroll

Välj ett svar per fråga. Du får återkoppling direkt, och avsnittet markeras som klart när alla frågor är besvarade.

1Vad är risken med att lämna felsökningsläge (DEBUG) påslaget i produktion?

2Vad gör inställningen `server_tokens off;` i nginx?

3Hur bör ett serverfel presenteras?