LabbCybersäkerhet · Etisk hackning
0/0
Laboration

Upptäckt — loggning och övervakning

Mål: Växla till försvararens perspektiv och se hur aktiviteten från tidigare laborationer ser ut i loggarna.

Observera

Gå tillbaka till din labbmiljö och gör om momenten från Lab 1, 3 och 5 — men titta den här gången i serverns loggar i stället för i webbläsaren:

tail -f /var/log/nginx/access.log
tail -f /var/log/auth.log
Vad koden gör — förklaring rad för rad

Två kommandon som visar loggarna medan de skrivs, så att du ser dina egna försök dyka upp i realtid.

tail
Visar slutet av en fil — de senaste raderna.
-f
Follow. Fortsätt visa nya rader allteftersom de skrivs, i stället för att avsluta. Avbryt med Ctrl+C.
/var/log/nginx/access.log
Webbserverns logg över varje begäran som kommit in.
/var/log/auth.log
Systemets logg över inloggningar och behörighetshändelser.

Insikten som ska landa: angreppsförsök ser ut som något i loggarna. Upprepade 401-svar, ovanligt många 404:or i följd, långa eller märkliga parametrar, förfrågningar utan normal User-Agent, åtkomst vid udda tidpunkter.

Analysera

De flesta organisationer loggar tillräckligt men granskar för lite. Skillnaden mellan en incident som upptäcks på några timmar och en som upptäcks efter månader ligger sällan i loggningen i sig, utan i att någon eller något faktiskt tittar.

Bygg försvaret

1. Logga rätt saker. Autentiseringshändelser (både lyckade och misslyckade), behörighetsnekanden, ändringar av konton och roller, administrativa åtgärder, samt fel på serversidan. Varje post bör innehålla tidsstämpel med tidszon, källadress, användaridentitet, åtgärd och resultat.

2. Logga aldrig lösenord, sessionstoken, personnummer eller kortuppgifter. Loggar sprids ofta vidare till system med lägre skyddsnivå.

3. Strukturerad loggning gör det möjligt att söka maskinellt:

logger.info("auth_failure", extra={
    "anvandare": anvandarnamn,
    "kall_ip": request.META["REMOTE_ADDR"],
    "resultat": "nekad",
    "orsak": "felaktigt_losenord",
})
Vad koden gör — förklaring rad för rad

Strukturerad loggning i Python. Skillnaden mot en vanlig textrad är att varje uppgift ligger i ett eget namngivet fält, vilket gör loggen sökbar maskinellt.

logger.info(
Skriv en loggpost på nivån info. Andra nivåer är bland annat warning och error.
"auth_failure"
Ett kort, fast händelsenamn. Samma namn varje gång gör det enkelt att räkna och larma på.
extra={...}
De strukturerade fälten. Klammerparenteserna håller en uppsättning nyckel–värde-par.
"kall_ip": request.META["REMOTE_ADDR"]
Hämtar avsändarens adress ur anropet och sparar den under ett eget fältnamn.
"resultat": "nekad"
Utfallet som eget fält, så att en larmregel kan räkna antalet nekade försök per konto utan att läsa fritext.

4. Centralisera och skrivskydda. Loggar som bara ligger på den komprometterade maskinen kan ändras. Skicka dem vidare till en separat logginsamlare.

5. Skriv larmregler. Börja enkelt och förfina:

  • Fler än tio misslyckade inloggningar mot samma konto inom fem minuter.
  • Lyckad inloggning från ett land verksamheten inte verkar i.
  • Nytt konto som tilldelas administratörsroll.
  • Serverfel (5xx) som ökar kraftigt jämfört med normalläget.

6. Bestäm lagringstid i förväg. Trettio dagar räcker sällan för att utreda en incident som upptäcks sent; sex till tolv månader är vanligt, men det styrs också av vilka personuppgifter som finns i loggarna och vad GDPR tillåter.

Verifiera

Testa varje larmregel i labbet genom att framkalla det beteende den ska fånga. En larmregel som aldrig testats är en gissning.

Dokumentera

Skriv en kort "detection runbook": för varje larm, vad betyder det, vilka steg tar man först, och när eskalerar man?

Reflektionsfrågor: Varför är falsklarm ett verkligt problem och inte bara en olägenhet? Hur balanserar man känslighet mot användbarhet?


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.

1Var brister de flesta organisationer när det gäller loggning?

2Vilket av följande får aldrig skrivas till en logg?

3Vad är en larmregel som aldrig har testats?