Autentizace
- Proces ověření identity - zda je dotyčný opravdu ten, za koho se vydává.
- Checklist pomáhá s ověřením autentizačního mechanismu aplikace jako je architektura, bezpečnost hesel, správa credentials a další.
Architektura autentizace
-
Všechny autentizační cesty musí být stejně bezpečné.
- Je jedno, pokud mám 2FA a silný hardware, pokud může útočník resetovat heslo zavoláním na call centrum nebo zodpovězením běžných bezpečnostních otázek.
-
Ověřte použití jedinečného nebo speciálního účtu operačního systému s nízkými právy pro všechny aplikace, komponenty, služby a servery.
-
Ověřte, zda je komunikace mezi částmi aplikace (API, datové vrstvy…) ověřená.
-
Ověřte, zda mají komponenty nejmenší potřebná oprávnění (least privilege).
-
Ověřte, zda aplikace používá jediný ověřený mechanismus ověřování, o kterém je známo, že je bezpečný, že jej lze rozšířit a že má dostatečné logování a monitorování pro odhalení zneužití nebo narušení účtu.
-
Ověřte, zda všechny cesty ověřování a API rozhraní pro správu identit implementují konzistentní sílu kontroly zabezpečení ověřování tak, aby bylo zajištěno, že neexistují slabší alternativy.
Architektura kryptografie
- Ověřte existenci explicitní politiky pro správu kryptografických klíčů a zda se životní cyklus kryptografických klíčů řídí standardem pro správu klíčů, jako je např. NIST SP 800-57.
- Ověřte, zda uživatelé kryptografických služeb chrání klíče a další secrets pomocí trezorů nebo alternativ založených na API.
- Ověřte, zda jsou všechny klíče a hesla vyměnitelná a zda jsou součástí dobře definovaného procesu opětovného šifrování citlivých dat.
- Ověřte, zda architektura považuje secrets na straně klienta (symetrické klíče, hesla, API tokeny…) za nezabezpečené a nikdy je nepoužívá k ochraně nebo přístupu k citlivým datům.
Obecný checklist
- Ověřte, zda jsou kontroly proti automatizaci účinné (brute force, account lockout…). Blokujte nejčastěji prolamovaná hesla, zaveďte rate limiting, CAPTCHu atd.
- Ověřte, že na jednom účtu není možné provést více ne ž 100 neúspěšných pokusů za hodinu.
- Ověřte omezení používání slabých ověřovacích prostředků (SMS, email…) na sekundární ověření (2FA / MFA).
- Ověřte, zda jsou silnější metody nabízeny před slabšími a zda jsou si uživatelé vědomi rizik.
- Ověřte, zda jsou uživatelům zasílány notifikace po aktualizacích přihlašovacích údajů (reset hesla, změna emailu…). Upřednostněte push notifikaci před SMS a dalšími.
- Ověřte odolnost proti phishingu (pomocí vícefaktorového přihlášení…).
- Ověřte, zda tam, kde jsou autentizace a credential service provider odděleny, je zavedeno vzájemně ověřené TLS.
- Ověřte odolnost proti opakování pomocí povinného používání jednorázových hesel (OTP), kryptografických autentizátorů nebo lookup kódů.
Bezpečnost hesel
- Ověřte, zda jsou uživatelská hesla alepoň 12 znaků dlouhá.
- Ověřte, zda jsou povolena hesla o délce 64 znaků a více, ale nesmí být delší než 128 znaků.
- Ověřte, zda se neprovádí zkracování hesel (po sobě jdoucí mezery jsou nahrazeny jednou…).
- Ověřte, zda jsou povoleny všechny tisknutelné znaky, včetně jazykově neutrálních znaků (mezery, emoji…).
- Ověřte, zda si uživatel může změnit heslo.
- Ověřte, zda funkcionalita změny hesla vyžaduje uživatelovo staré a nové heslo.
- Ověřte, zda jsou hesla při registraci účtu, přihlašování a změně hesla porovnávána se sadou uniklých hesel. Požadujte nastavení nového hesla, pokud je prolomeno.
- Ověřte, zda je k dispozici měřič síly hesla, který uživatelům pomůže nastavit silnější heslo.
- Ověřte, zda neexistují pravidla pro složení hesla omezující typ povolených znaků. Neměly by existovat žádné požadavky na velká a malá písmena, speciální znaky atp.
- Ověřte, zda neexistují požadavky na pravidelnou rotaci credentials nebo historii hesel.
- Ověřte povolení funkce “vložit” a podpory doplňování hesla přes správce hesel atp.
- Ověřte, zda si uživatel může zvolit dočasné zobrazení celého maskovaného hesla nebo dočasné zobrazení posledního zadaného znaku hesla na platformách, které tuto funkci nemají zabudovanou.
Životní cyklus
- Ověřte, zda jsou systémem generovaná počáteční hesla nebo aktivační kódy náhodně generované (CSPRNG), mají alespoň 6 znaků a jejich platnost po krátké době vyprší.
- Nesmí se stát dlouhodobým heslem.
- Ověřte, zda jsou pokyny k obnovení zasílány s dostatečným časovým předstihem.
Ukládání credentials
- Ověřte, zda jsou hesla uložena ve formě, která je odolná proti offline útokům.
- Ověřte, zda má sůl délku alespoň 32 bitů a zda je zvolena libovolně, aby se minimalizovaly kolize hodnot soli mezi uloženými hashi.
- Pro každé heslo se uloží jedinečná hodnota soli a výsledný hash.
- Ověřte, zda je při použití
PBKDF2
počet iterací alespoň 100.000. - Ověřte, zda je při použití
bcrypt
work factor alespoň 13. - Generujte hodnotu soli pomocí schváleného generátoru náhodných bitů (SP 800-90Ar1) a zajistěte minimální sílu zabezpečení uvedenou v nejnovější revizi SP 800-131A.
- Tajná hodnota soli musí být uložena odděleně od zahashovaných hesel.
Obnovení credentials
- Ověřte, zda systémem vygenerované počáteční aktivační nebo obnovovací secret není uživateli odesláno v plain textu.
- Ověřte, zda nejsou přítomny nápovědy k heslům nebo ověřování založené na znalostech (”tajné otázky”…).
- Ověřte, zda funkcionalita obnovení hesla neprozrazuje aktuální heslo.
- Ověřte, zda nejsou přítomny sdílené nebo výchozí účty (root, admin…).
- Ověřte, zda je v případě změny nebo nahrazení autentizačního faktoru uživatel o této události informován.
- Ověřte, zda zapomenuté heslo a další cesty obnovení hesla používají bezpečný mechanismus ověření (OTP…).
- Ověřte, že pokud dojde ke ztrátě OTP faktorů nebo vícefaktorového ověřování, bude provedeno prokázání totožnosti na stejné úrovni jako při registraci.
Jednorázové ověřování
- Ověřte, že časové OTP mají definovanou dobu platnosti před vypršením.
- Ověřte, zda jsou symetrické klíče používané k ověření předložených OTP vysoce chráněné (HW modul, úložiště klíčů…).
- Ověřte, zda se při generování, nasazování a ověřování OTP používají schválené kryptografické algoritmy.
- Ověřte, zda lze OTP založené na čase použít pouze jednou během doby platnosti.
- Ověřte, že pokud je časový vícefaktorový OTP token během doby platnosti použit opakovaně, je zaznamenán, odmítnut a držiteli zařízení jsou zaslána oznámení.
- Ověřte, že fyzický jednofaktorový OTP generátor lze v případě krádeže nebo jeho ztráty revokovat.
- Zajistěte, aby bylo revokování okamžitě účinné ve všech přihlášených relacích bez ohledu na umístění.
- Ověřte, že biometrické autentizátory jsou omezeny na použití pouze jako sekundární faktory ve spojení s něčím, co uživatel má nebo zná.
Ověřování kryptografie a zařízení
- Ověřte, zda jsou kryptografické klíče používané při ověřování bezpečně uloženy a chráněny proti úniku (TPM, HSM…).
- Ověřte, že nonce má délku alespoň 64 bitů a je statisticky jedinečná nebo unikátní po celou dobu životnosti kryptografického zařízení.
- Ověřte, zda se při generování, nasazování a ověřování používají schválené kryptografické algoritmy.
Ověřování služby
- Ověřte, zda secrets uvnitř služby nespoléhají na neměnné credentials (hesla, API klíče …).
- Ověřte, že pokud jsou pro ověření služby vyžadována hesla, není použitý výchozí účet služby (root/root, admin/admin…).
- Ověřte, zda jsou hesla uložena s dostatečnou ochranou.
- Ověřte, zda jsou hesla, integrace s databázemi a systémy třetích stran, seedy, interní secrets a další spravovány bezpečně a zda nejsou uloženy v úložištích zdrojového kódu.
- Použijte bezpečné úložiště klíčů TPM nebo HSM.
Out of band ověřování
- Ověřte, zda nejsou ve výchozím nastavení nabízeny čistě textové ověřovací prostředky mimo pásmo (SMS, PSTN…) a zda jsou nejdříve nabízeny silnější alternativy (push notifikace…).
- Ověřte, zda platnost kódů nebo tokenů vyprší po 10 minutách.
- Ověřte, zda jsou požadavky na ověření použitelné pouze jednou a pouze pro původní požadavek na ověření.
- Ověřte, zda komunikace probíhá po zabezpečeném nezávislém kanálu.
- Ověřte, zda se uchovává pouze zahashovaná verze ověřovacího kódu.
- Ověřte, zda je počáteční ověřovací kód generován bezpečným generátorem náhodných čísel, který obsahuje alespoň 20 bitů entropy (obvykle 6-ciferné náhodné číslo).
Ověřování lookup secrets
- Ověřte, zda lze secret použít pouze jednou.
- Ověřte, zda mají lookup secrets dostatečnou náhodnost (112 bitů entropy) nebo, pokud je entropy menší než 112 bitů, zda jsou solena jedinečnou 32 bitovou solí a zahashována.
- Ověřte, zda jsou lookup secrets odolná proti offline útokům (předvídatelné hodnoty…).