Přeskočit na hlavní obsah

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…).

Kam dál

Zranitelnosti

Cheat sheety