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.
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.
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ů.
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.
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.
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ěř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.
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…).