Přeskočit na hlavní obsah

Logování

  • Logování vlastních aplikačních událostí v systémech často chybí, nebo je špatně naimplementováno či nakonfigurováno
  • Logování by mělo být konzistentní napříč portfoliem aplikací
  • Mělo by využívat oborové standardy, aby bylo možné logovaná data využívat, analyzovat a spravovat

Účel

  1. Zahrňte logování do všech událostí souvisejících se zabezpečením, pomůže to s
    • poskytováním informací o problémech a neobvyklých stavech
    • obranou proti zneužití zranitelností prostřednictvím detekce útoků
    • sledovováním porušování zásad
    • identifikací bezpečnostních incidentů
    • vyšetřováním incidentů
    • stanovením referenčních hodnot
    • kontrolou nepopiratelnosti (non-repudiation)
  • Logování lze použít k záznamu dalších typů událostí
    • Bezpečnostní události
    • Monitoring byznys procesů (transakce, připojení)
    • Monitorování proti automatizaci
    • Auditní záznamy (přidávání, mazání, úpravy nebo exporty dat)
    • Sledování výkonu (doba načítání, výpadky stránek)
    • Kontrola dodržování předpisů
    • Údaje o následné žádosti o informace (soudní spory, policejní a regulační vyšetřování)
    • Zákonem povolený odposlech dat
    • Specifické byznys požadavky
  • Logy pro monitoring procesů, auditů a transakcí se shromažďují za jiným účelem než události zabezpečení → měly by být vedeny odděleně
  • Záznamů nesmí být příliš mnoho, ani příliš málo
  • Znalost zamýšlených účelů slouží jako vodítko pro to co, kdy a v jakém množství logovat

Návrh, implementace a testování

Zdroje dat o událostech

  • Aplikace má přístup k široké škále informačních událostí
  • Ty by měly být použity k vytváření logů
  • Primárním zdrojem dat o událostech je kód aplikace
  • Aplikace má nejvíce informací o uživateli (identita, role, oprávnění) a kontextu události (cíl, akce, výsledky)
  1. Zvažte logování dalších zdrojů informací:
    • Klientský software (desktopová a mobilní zařízení, prohlížeč)
    • Síťové firewally
    • Systémy detekce narušení sítě a hostitele (NIDS, HIDS)
    • Úzce související aplikace (filtry zabudované do softwaru)
    • Aplikační firewally (filtry, XML gateway, WAF)
    • Databázové aplikace (automatické auditní záznamy, trigger akce)
    • Monitoring reputace (sledování doby provozu nebo malwaru)
    • Další aplikace (CRM)
    • Operační systém (mobilní platforma)
  2. Zvažte stupeň důvěryhodnosti informací o událostech
    • Data mohou chybět, mohou být upravena, zfalšována, mohou být škodlivá atd.
  3. Zacházejte s daty jako s nedůvěryhodnými
  4. Zamyslete se, jak lze ověřit zdroj a jak zajistit integritu a nepopiratelnost

Kam údaje zaznamenávat

  • Aplikace logy běžně zapisují do souboru nebo databáze
  • Aplikace nainstalované na PC a mobilech mohou používat lokální úložiště a databáze, mohou ale také data odesílat do vzdáleného úložiště
  • Můžete se setkat s centralizovaným systémem sběru a správy logů (SIEM, SEM)
  1. Zvažte, zda aplikace může odesílat data bez vyrovnávací paměti na stdout
  2. Používejte separátní oddíl od oddílů používaných operačním systémem při používání souborového systému
  3. Použijte přísná oprávnění týkající se uživatelů, kteří mají přístup k adresářům a souborům pro logy ukládané do souborů
  4. Nevystavujte logy na web nebo k nim omezte přístup
    1. Nakonfigurujte je jako prostý text (ne HTML)
  5. Použijte samostatný databázový účet, který se používá pro zápis dat a který má omezená oprávnění k databázi, tabulkám, funkcím a příkazům při ukládání logů do databáze
  6. Použijte standardní formáty pro ukládání logů (Common Log File System, Common Event Format), syslog
    • Ty usnadňují integraci s dalšími logovacími službami
  7. Zvažte samostatné soubory / tabulky pro další informace o událostech (stack traces, HTTP request / response hlavičky, tělo odpovědí)

Které události logovat

  1. Stanovte úroveň a obsah bezpečnostního monitorování, výstrah a hlášení už ve fázi požadavků a návrhu projektu
  • Na základě toho je možné definovat, co by mělo být logováno
  • Neexistuje žádné univerzální řešení nebo přístup
    • Takový přístup může vést k poplašným zprávám a neodhalení skutečných problémů
  1. Pokud je to možné, vždy logujte
    • selhání validace vstupů (nepřijatelné kódování, neplatné názvy nebo hodnoty)
    • selhání výstupní validace (neshoda záznamů v databázi, neplatné kódování dat)
    • úspěšné a neúspěšné přihlášení
    • selhání autorizace (řízení přístupu)
    • selhání správy session (změna identifikační hodnoty)
    • aplikační chyby a systémové události (problémy s připojením, výkonem, chyby třetích stran, změny konfigurace)
    • spouštění a vypínání aplikací a souvisejících systémů
    • používání funkcí s vyšším rizikem (připojení k síti, mazání uživatelů, změny oprávnění, přiřazování tokenů, změny klíčů)
    • právní a jiné souhlasy (podmínky používání, souhlas s používáním osobních údajů, souhlas se zasíláním marketingových sdělení...)
  2. Volitelně zvažte logování následujících událostí
    • Selhání sekvencování
    • Nadměrné používání
    • Změny údajů
    • Podvody a další trestná činnost
    • Podezřelé, nepřijatelné nebo neočekávané chování
    • Úpravy konfigurace
    • Změny kódu aplikace nebo paměti

Atributy událostí

  • Každý záznam musí obsahovat dostatečné informace pro následné monitorování a analýzu
  • Může se jednat o údaje s úplným obsahem, ale pravděpodobně půjde o výpis souhrnných vlastností
  • V lozích musí být vždy zaznamenáno kdy, kde, kdo a co
  • Tyto vlastnosti se liší v závislosti na architektuře, aplikaci, systému, zařízení, atd.

Kdy

  • Datum a čas logování v mezinárodním formátu
  • Datum a čas události (čas události se může lišit od času logování) v mezinárodním formátu
  • Identifikátor interakce (metoda propojení všech relevantních událostí pro jednu interakci uživatele)
    • Např. schopnost propojení všech událostí souvisejících s kliknutím na tlačítko

Kde

  • Identifikátor aplikace (název a verze)
  • Adresa aplikace (cluster, číslo portu, IPv4, IPv6)
  • Služba (název a protokol)
  • Geolokace
  • Okno / formulář / stránka (URL vstupního bodu, HTTP metoda, název dialogového okna)
  • Umístění v kódu (název skriptu, název modulu)

Kdo (člověk nebo stroj)

  • Zdrojová adresa (ID zařízení uživatele, IP adresa, telefonní číslo)
  • Identita uživatele (primární klíč z databáze, jméno, číslo licence)

Co

  • Typ události
  • Závažnost události (debug, info, critical)
  • Příznak události související se zabezpečením
  • Popis
  1. Zvažte také logování
    • Sekundární zdroj času (GPS)
    • Akce - původní účel požadavku (přihlášení, odhlášení, aktualizace profilu)
    • Objekt (komponenta, uživatelský účet, soubor, URL)
    • Stav výsledku (úspěšné, neúspěšné, odložené)
    • Důvod, proč došlo k výše uvedenému stavu (nedostatečná oprávnění)
    • HTTP status kód (200, 301)
    • HTTP hlavičky nebo HTTP user agent
    • Klasifikace typu uživatele (veřejnost, vyhledávač, CMS uživatel, admin, tester)
    • Analytická důvěra v detekci události (nízká, střední, vysoká)
    • Podrobnosti (stack trace, chybové zprávy systému, tělo požadavku)
    • Interní klasifikace (odpovědnost, odkazy na dodržování předpisů)
    • Externí klasifikace (NIST security, SCAP, CAPEC)

Data k vyloučení

  1. Nikdy nelogujte data, pokud to není povoleno zákonem
    • Například sledování zaměstnanců, shromažďování některých údajů bez souhlasu atp. mohou být nezákonné
  2. Nikdy nevylučujte události od “známých” uživatelů, “důvěryhodné” třetí strany, robotů, pen testerů, auditorů, vzdáleného monitorování, procesních systémů
  3. Nezaznamenávejte následující informace nebo je zamaskujte, sanitizujte či zaheslujte / zašifrujte
    • Zdrojový kód aplikace
    • Session ID hodnoty
      1. Nahraďte zahashovanou hodnotou v případě potřeby
    • Access token
    • Citlivé osobní údaje a některé formy osobních údajů (PII) (zdravotní záznamy, vládní identifikátory)
    • Uživatelská hesla
    • Údaje pro přihlášení k databázi
    • Šifrovací klíče a další secrets
    • Údaje o bankovním účtu nebo platební kartě
    • Data s vyšším stupněm utajení
    • Obchodní citlivé údaje
    • Informace, jejichž shromažďování je v příslušných jurisdikcích nezákonné
    • Informace, jejichž shromažďování uživatel odmítl nebo s nimiž nesouhlasil
  • Některé údaje mohou být užitečné pro vyšetřování, ale před jejich zalogováním je potřeba s nimi zacházet opatrněji
    • Cesty k souborům
    • Connection string pro připojení k databázi
    • Názvy a adresy interních sítí
    • Necitlivé osobní údaje (jména, telefonní čísla, emailové adresy)
  1. Zvažte použití technik deidentifikace osobních údajů (vymazání, zakódování nebo pseudoanonymizace identifikátorů)

Přizpůsobitelné logování

  • Občas je žádoucí měnit úroveň logování (podle závažnosti nebo úrovně ohrožení)
  1. V takovém případě zajistěte následující:
    • Výchozí úroveň musí být dostatečně podrobná pro byznys potřeby
    • Logování by nemělo být možné deaktivovat
    • Změny úrovně logování musí aplikace provádět automaticky, nebo se musí řídit procesy pro řízení změn (konfigurace, úprava zdrojového kódu)
    • Úroveň logování je potřeba pravidelně ověřovat

Kolekce událostí

  1. Nastavte a použijte logování přímo ve frameworku, pokud ho podporuje
  2. Zdokumentujte požadavky na klasifikaci a syntaxi popisu událostí
  3. Vytvořte log handler jako standardní modul, který lze důkladně otestovat a nasadit do více aplikací, pokud je to možné
  4. Zvalidujte vstupní data událostí a ujistěte se, že jsou ve správném formátu
    1. Zvažte možnost upozornění, pokud dojde k selhání validace
  5. Sanitizujte všechna data událostí, abyste zabránili log injection útokům
  6. Správně kódujte data pro výstupní formát logů
  7. Přečtěte si a pochopte SQL injection, pokud logy zapisujete do databáze
  8. Zajistěte, aby selhání logování nebránilo běhu aplikace nebo neumožňovalo únik informací
  9. Synchronizujte čas na všech serverech a zařízeních
    1. Zaznamenejte časový posun, pokud synchronizace času není možná
  10. Zaznamenejte data ve standardním formátu nebo zajistěte, aby je bylo možné exportovat pomocí standardního formátu

Ověřování

  • Logovací funkce a systémy musí být zahrnuty do code review procesu, testování a ověřování zabezpečení
  1. Zkontrolujte, zda logování funguje správně podle zadání
  2. Zkontrolujte, zda jsou události důsledně klasifikovány a správně definovány podle dohodnutého standardu
  3. Zajistěte implementaci a povolení logování během testování zabezpečení, fuzz testování, penetračního testování a testování výkonu
  4. Otestujte, zda nejsou mechanismy náchylné k injection útokům
  5. Zajistěte, aby při logování nedocházelo k nežádoucím vedlejším účinkům
  6. Zkontrolujte vliv na logování při ztrátě připojení k vnější síti (pokud je vyžadováno)
  7. Zajistěte, aby logování nebylo použito k vyčerpání systémových prostředků (zaplnění místa, překročení prostoru v DB transakci), což vede k DoS
  8. Otestujte vliv selhání logování na aplikaci (simulovaná ztráta připojení k DB, chybějící oprávnění k zápisu)
  9. Ověřte řízení přístupu k datům logovaných událostí
  10. Zajistěte, aby údaje nemohly být použity k DoS (zablokování účtu nebo přístupu)

Nasazení a provoz

Release

  1. Zaneste informaci o konfiguraci zabezpečení a další podrobnosti do dokumentace
  2. Informujte vlastníka aplikace o logovacích mechanismech
  3. Zajistěte, aby výstupní monitorování bylo integrováno s procesy reakce na incidenty

Provoz

  1. Umožněte procesům zjistit, zda bylo logování zastaveno, a identifikovat neoprávněnou manipulaci nebo přístup

Ochrana

  • Logy mohou obsahovat osobní a citlivé informace nebo informace s obchodní hodnotou
  • Logování a údaje o událostech musí být chráněny před zneužitím a neoprávněnou manipulací
  1. Zvažte, zda některá data vyloučit, zamaskovat, upravit, zašifrovat nebo zaheslovat
  • V klidovém stavu
    1. Integrujte detekci neoprávněného zásahu, aby se dalo zjistit, zda byl záznam změněn nebo odstraněn
    2. Uložte a zkopírujte logy na médium určené pouze ke čtení
    3. Zaznamenejte a monitorujte veškeré přístupy k logům
    4. Omezte oprávnění ke čtení dat logů a pravidelně je kontrolujte
  • Logy “na cestě”
    1. Použijte zabezpečený přenosový protokol, pokud jsou data odesílána přes nedůvěryhodné sítě
    2. Zvažte, zda je potřeba ověřit původ údajů o události
    3. Proveďte kontrolu před odesláním údajů o událostech třetím stranám (regulační a bezpečnostní)

Monitoring událostí

  • Údaje o událostech musí být k dispozici pro kontrolu
  1. Zaveďte procesy pro monitorování, upozorňování a podávání zpráv
  2. Začleňte logování do stávajících systémů / infrastruktury pro správu logů
  3. Zajistěte, aby informace byly k dispozici příslušným týmům
  4. Povolte upozorňování a informování odpovědných týmů o závažnějších událostech
  5. Sdílejte relevantní informace o událostech s ostatními detekčními systémy, organizacemi a centralizovanými systémy

Likvidace logů

  • Logy nesmí být zničeny před uplynutím požadované doby uchování dat a nesmí být uchovávány po uplynutí této doby
  • Na tato období mohou mít vliv právní, regulační a smluvní povinnosti

Útoky na logování

  • Vzhledem k tomu, že jsou logy užitečné jako obrana, mohou se stát terčem útoků

Důvěryhodnost

  • Kdo by měl mít možnost “co” číst?
  • Útok umožňuje druhé straně přístup k citlivým údajům uložených v lozích
  • Útočníci shromažďují secrets (hesla), osobní údaje a pak je zveřejní nebo použijí jako odrazový můstek pro další útoky uživatele nebo aplikaci

Integrita

  • Které informace by měl mít “kdo” možnost upravit?
  • Útočník s přístupem ke čtení logu může zjistit secrets
  • Útok využívá například odeslání payload přes syslog s cílem způsobit out-of-bounds zápis

Dostupnost

  • Jaký downtime je přijatelný?
  • Útočník zahltí soubory a vyčerpá místo na disku
  • Útočník použije jeden záznam ke zničení dalších záznamů
  • Útočník využije špatný výkon logovacího kódu ke snížení výkonu aplikace

Odpovědnost

  • Kdo je odpovědný za škodu?
  • Útočník zabrání logování nebo jeho poškození, aby zahladil stopy
  • Útočník způsobí zalogování nesprávné identity, aby se skryl

Kam dál

Zranitelnosti

Checklisty