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
- 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)
- 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)
- 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.
- Zacházejte s daty jako s nedůvěryhodnými
- 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)
- Zvažte, zda aplikace může odesílat data bez vyrovnávací paměti na
stdout
- 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
- 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ů
- Nevystavujte logy na web nebo k nim omezte přístup
- Nakonfigurujte je jako prostý text (ne HTML)
- 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
- 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
- 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
- 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ů
- 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í...)
- 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
- 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í
- 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é
- 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ů
- Nezaznamenávejte následující informace nebo je zamaskujte, sanitizujte či zaheslujte / zašifrujte
- Zdrojový kód aplikace
- Session ID hodnoty
- 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)
- 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í)
- 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í
- Nastavte a použijte logování přímo ve frameworku, pokud ho podporuje
- Zdokumentujte požadavky na klasifikaci a syntaxi popisu událostí
- Vytvořte log handler jako standardní modul, který lze důkladně otestovat a nasadit do více aplikací, pokud je to možné
- Zvalidujte vstupní data událostí a ujistěte se, že jsou ve správném formátu
- Zvažte možnost upozornění, pokud dojde k selhání validace
- Sanitizujte všechna data událostí, abyste zabránili log injection útokům
- Správně kódujte data pro výstupní formát logů
- Přečtěte si a pochopte SQL injection, pokud logy zapisujete do databáze
- Zajistěte, aby selhání logování nebránilo běhu aplikace nebo neumožňovalo únik informací
- Synchronizujte čas na všech serverech a zařízeních
- Zaznamenejte časový posun, pokud synchronizace času není možná
- 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í
- Zkontrolujte, zda logování funguje správně podle zadání
- Zkontrolujte, zda jsou události důsledně klasifikovány a správně definovány podle dohodnutého standardu
- 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
- Otestujte, zda nejsou mechanismy náchylné k injection útokům
- Zajistěte, aby při logování nedocházelo k nežádoucím vedlejším účinkům
- Zkontrolujte vliv na logování při ztrátě připojení k vnější síti (pokud je vyžadováno)
- 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
- Otestujte vliv selhání logování na aplikaci (simulovaná ztráta připojení k DB, chybějící oprávnění k zápisu)
- Ověřte řízení přístupu k datům logovaných událostí
- Zajistěte, aby údaje nemohly být použity k DoS (zablokování účtu nebo přístupu)
Nasazení a provoz
Release
- Zaneste informaci o konfiguraci zabezpečení a další podrobnosti do dokumentace
- Informujte vlastníka aplikace o logovacích mechanismech
- Zajistěte, aby výstupní monitorování bylo integrováno s procesy reakce na incidenty
Provoz
- 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í
- Zvažte, zda některá data vyloučit, zamaskovat, upravit, zašifrovat nebo zaheslovat
- V klidovém stavu
- Integrujte detekci neoprávněného zásahu, aby se dalo zjistit, zda byl záznam změněn nebo odstraněn
- Uložte a zkopírujte logy na médium určené pouze ke čtení
- Zaznamenejte a monitorujte veškeré přístupy k logům
- Omezte oprávnění ke čtení dat logů a pravidelně je kontrolujte
- Logy “na cestě”
- Použijte zabezpečený přenosový protokol, pokud jsou data odesílána přes nedůvěryhodné sítě
- Zvažte, zda je potřeba ověřit původ údajů o události
- 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
- Zaveďte procesy pro monitorování, upozorňování a podávání zpráv
- Začleňte logování do stávajících systémů / infrastruktury pro správu logů
- Zajistěte, aby informace byly k dispozici příslušným týmům
- Povolte upozorňování a informování odpovědných týmů o závažnějších událostech
- 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