it-swarm-eu.dev

Zapomenuté heslo nebo resetovací odkaz, který je bezpečnější pro e-mail?

Původně jsem to zveřejnil jako odpověď zde v tomto vlákně , ale nedostal jsem na to moc zpětné vazby, a teď jsem zvědavý, co si ostatní myslí, že je nejlepší přístup, nebo jestli existuje nějaký rozdíl mezi těmito dvěma přístupy.

Původním bodem bylo, zda bylo bezpečnější poslat odkaz na resetování hesla, když uživatel zapomene své heslo na web, nebo zda poslat původní heslo nezašifrované v e-mailu.

Nyní není solení a šifrování hesla špatné, protože když je databáze nakonec ukradena z webu, útočník bude mít všechna hesla jasná jako den. Dobře, chápu to.

Pokud však ignorujeme možnost odcizení databáze a podíváme se pouze na uživatele, který zapomněl heslo a prošel „kroky zapomenutého hesla“; je to víc, stejné nebo méně bezpečné poslat resetovací odkaz přes heslo prostého textu v e-mailu?

Myslím, že je to stejné. Protože má-li útočník přístup k vaší e-mailové adrese jakýmkoli způsobem (zná vaše přihlašovací údaje k e-mailu nebo někde snoopuje provoz), má proto přístup k prostému textovému heslu, které je odesláno, nebo k resetovacímu odkazu - i když je to omezená doba odkaz.

Útočník by mohl resetovat vaše heslo dříve, než budete vědět, že máte e-mail.

Je moje myšlení zde chybné?

23
fwgx

Je mnohem jednodušší získat přístup k existujícímu korpusu e-mailu než získat přístup k příchozímu proudu. Například získání pár minut přístupu do něčího systému umožňuje snadné vyhledávání prostřednictvím jejich e-mailu. V případě, že má útočník přístup ke staré poště, ale nikoli do proudu nové, příchozí pošty:

Spoléháte se na to, že uživatel změní své heslo poté, co jej obdrží (nepravděpodobné, vzhledem k tomu, že jste mu řekli, co to je), nebo odstraníte (natrvalo, ne archivaci nebo přesunutí do složky „koše“, také nepravděpodobné) připomenutí zpráva.

Pokud k tomu nedojde, pak, pokud dostanu přístup k uživatelskému e-mailovému účtu o něco později, pak (omezený čas/omezené použití, možná i omezený tak, že jej útočník nemůže snadno použít) resetovací odkaz nebude žádný použít pro mě, ale mít (s největší pravděpodobností stále platné) heslo určitě je.

Navíc mi zasláním hesla prostého textu prokazujete, že toto heslo máte někde přístupné. Ve většině případů to není nutné, protože nemusíte šifrovat heslo (a sůl/pepř), stačí ho hashovat. Pokud je šifrováno, může kdokoli s přístupem do databáze a dešifrovacím klíčem (např. Pravděpodobně většina zaměstnanců nebo kdokoli, kdo ukradne kód spolu s databází), získat heslo prostého textu. Pokud je to hash, měli byste to dostat ještě předtím, než dojde k hašování (např. Během přihlašovací relace).

Navíc, i když by to lidé neměli, je velmi běžné používat stejné heslo (nebo velmi podobná hesla) na více webech. To znamená, že spíše než poskytováním způsobu, jak se dostat do pouze jednoho účtu, poskytujete způsob, jak se dostat do mnoha.

V opačném případě, kdy má útočník přístup ke všem příchozím e-mailům (potenciálně i možnost odebrat příchozí e-maily dříve, než to uživatel uvidí), žádná z nich není bezpečná. E-mailový účet je vysoce rizikový , protože pokud máte takový přístup, můžete pravděpodobně jít na všechny stránky, se kterými má uživatel účet, a vygenerovat reset hesla. Abyste tomu zabránili, potřebujete k získání přístupu použít něco jiného než (nebo také) svůj e-mailový účet, například dvoufaktorové ověření.

Upozorňujeme, že i v druhém případě je resetovací odkaz stále lepší: pokud útočník změní heslo uživatele pomocí resetovacího odkazu, pak když se uživatel pokusí přihlásit, zjistí, že něco není v pořádku (příliš pozdě, ale alespoň vědí). Pokud pouze zadáváte heslo, uživatel netuší, že útočník tiše získal přístup.

40
Tony Meyer

Dobře, ignorujíc skutečnost, že hesla jsou uložena v prostém textu a potápějí se přímo do otázky:. Heslo je pověření, které má dlouhou platnost, zatímco odkaz na resetování hesla lze určit různými způsoby:

  1. Platí pouze na krátkou dobu
  2. Platí pouze od určitého ip
    • Výhodně stejná IP, ze které byla žádost o heslo odeslána.
  3. Platí pouze v rámci relace uživatele
    • Když uživatel zadá do webového formuláře podrobnosti a požádá o nové heslo, vydá uživateli soubor cookie (zahájení relace). Ověření hesla pro resetování hesla závisí na něčem v této relaci, a proto bude funkce ověření neúspěšná, pokud je požadavek zadán bez cookie.

Je třeba také poznamenat, že staré heslo, které již nemusí platit na stránkách vaše, může být pro zákazníka stále velmi citlivé, protože lidé opakovaně používají hesla ve všech druzích služeb.

Z tohoto hlediska by bylo možné považovat vkládání hesel do e-mailových schránek lidí za hrubé.

22
mhswende

Za zmínku stojí, že pokud posíláte heslo uživatele prostým způsobem, můžete poslat heslo, které také používají na jiných webech - i když vynutíte, aby uživatel změnil heslo na vašem webu při příštím přihlášení, neudělali jste jim žádnou laskavost vůbec.

9
Tom Newton

Je neetické ukládat hesla v prostém textu, pokud máte o své uživatele nejmenší zájem. Měli byste ukládat bezpečné solené hashe. Odeslání hesla prostého textu může způsobit, že uživatelé s vědomím bezpečnosti přestanou používat vaši službu (přestože uživatelé s vědomím zabezpečení nepoužívají hesla znovu; prostě nemají rádi podpůrné služby, které jsou očividně bezbranně vědomi).

Jak implementovat resetování hesla; obecně pro středně zabezpečený web (řekněme kreditní kartu) je třeba, aby odpovídali na některé základní bezpečnostní otázky (např. rodné jméno matky) a ověřili, že mají kontrolu nad svým e-mailovým účtem nebo telefonním číslem, jako forma dvoufaktorové autentizace. Odkaz by měl být platný pouze v krátkém časovém okně (hodiny až dny) a platný pouze jednou (např. Obsahuje náhodně vytvořený token, který vyprší po prvním použití a po určitém časovém období).

Také jim oznámíte, že heslo bylo resetováno (a to i v případě, že byl jejich e-mail ohrožen; najdou důkazy o útočníkovi, když se již nebudou moci přihlásit pomocí svého starého hesla). Odeslání hesla (beze změny) znamená, že tento útok lze provést tajně, aniž by to uživatel kdy věděl (pokud byly e-maily odstraněny).

9
dr jimbob

Je lepší poslat odkaz na resetování hesla.

Některé weby mají formulář pro zapomenuté heslo okamžitě resetovat heslo na náhodnou hodnotu, a to je e-mailem uživateli. To má chybu v odmítnutí služby - někdo, kdo není vlastníkem účtu, může způsobit resetování hesla. Odkaz na resetování hesla se tomu vyhne, protože heslo je resetováno pouze jednou, když uživatel klikne na odkaz - a musí mít přístup k e-mailové adrese, aby to mohl udělat.

Pokud chcete trochu zabezpečení proti útočníkovi, který má přístup k e-mailu uživatele, je obvyklé mít také bezpečnostní otázky. Jedná se o otázky jako „Jaké bylo křestní jméno vašeho domácího mazlíčka“. A čas na to se zeptat je poté, co uživatel klikne na odkaz pro resetování hesla v e-mailu.

Několik dobrých rad zde: https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

3
paj28

Je lepší poslat resetovací odkaz.

Kromě důvodů uvedených v @Tony Meyer a @mhswende může stránka na resetovacím odkazu vyžadovat další ověření. Mnoho webů vyžaduje, aby uživatelé přesně za tímto účelem odpovídali na „bezpečnostní otázky“ (starý standard před počítačem vyžaduje rodné jméno vaší matky). Weby, které mají vaše telefonní číslo, mohou na své stránce pro resetování hesla vyžadovat zadání kódu, který zasílají pomocí SMS. Finanční instituce mohou klást otázky týkající se starých finančních záznamů (minulá morg napětí atd.).

Není triviální přijít s dobrým mechanismem sekundární autentizace, ale jakýkoli postup pro resetování hesla (nebo obnovení), který není dostatečně zranitelný, bych jej nazval nedbalý.

2
ShadSterling