Otázka:
Bezpečnostní důsledky informování uživatele, že se nemůže přihlásit kvůli příliš mnoha pokusům z IP
Goose
2017-05-31 21:35:47 UTC
view on stackexchange narkive permalink

Při výměně zásobníku Kontrola kódu mi bylo v reakci na kód, který informuje uživatele, když jeho pokus o přihlášení selhal kvůli příliš velkému počtu pokusů o přihlášení z IP, řečeno

„Absolutně neposílejte zprávy koncovým uživatelům, kteří by jim řekli, proč se přihlášení nezdařilo. Poskytujete potenciálnímu útočníkovi důležité informace, které mu pomohou při útoku na vaši aplikaci. Zde poskytnete útočníkovi velmi přesné informace, aby obešel vaše omezení IP. "

https://codereview.stackexchange.com/a/164608/93616

Cvičím špatně? Měl bych vysvětlit nejasněji pojmy jako „Příliš mnoho pokusů o přihlášení“ nebo „Nemohli jste být přihlášeni“?

Aktualizovat : V případě nejasností je v současné době příliš mnoho logika pokusů a zpráva nezajímá, zda byly pokusy úspěšné nebo ne.

„Absolutně ne“ je příliš silné.Zabezpečení je kompromis s použitelností.Jako protiargument vám Google s radostí sdělí, kdy bylo na vaši IP adresu zadáno příliš mnoho podezřelých dotazů, a já jsem v mnoha případech zjistil, že je to velmi užitečná informace.Pokud to Google dokáže, můžete také vy, pokud máte pocit, že to vašim uživatelům pomůže více než útočníkům.Pokud ne, nedělejte to.
"Rozhodně neposílejte zprávy koncovým uživatelům, kteří by jim říkali, proč se přihlášení nezdařilo."- Myslím, že toto tvrzení je více zaměřeno na nevrácení informací jako „Tento účet v systému neexistuje“.Útočník může pomocí různých odpovědí na požadavky na přihlášení zjistit, zda v systému existuje konkrétní uživatelský účet.Jinými slovy, odpověď na přihlášení by měla být stejná bez ohledu na to, zda účet existuje nebo zda je zadané heslo nesprávné.
Použil bych anonymizační proxy, abych získal novou IP adresu při každém požadavku, tak jaký má smysl blokování pomocí IP?Blokovat byste měli nesprávným ověřením pomocí uživatelského jména
@NeilMcGuigan To blokuje útoky pouze v jedné dimenzi.Neblokuje se proti robotovi, který zkouší společné heslo napříč tisíci uživatelských jmen.
@Xander správné.Můžete také blokovat neúspěšná hesla
@NeilMcGuigan Ne, ne stejným způsobem, z několika důvodů.
Útočník to může stejně rychle zjistit, není to obrovské tajemství ...
@schroeder Vzhledem k tomu, že nemohu komentovat svou smazanou odpověď, abych udělal svůj případ, udělám to zde.Omlouvám se, že jsem neudělal dost dobře, když jsem odpověděl jasně.Určitě bylo zamýšleno odpovědět na otázku.Uváděl jsem několik konkrétních příkladů toho, kde by mohlo dojít k falešným pozitivům, což ostatní odpovědi ještě neudělaly, aby bylo jasné, jak běžné to pravděpodobně bude.Poté jsem to spojil s poslední větou odpovědi zpět na otázku - pokud odmítnete pokusy o přihlášení bez vysvětlení blokovaných IP adres, všechny tyto falešné pozitivy se budou divit, co se děje.
Pět odpovědi:
Arminius
2017-05-31 23:39:54 UTC
view on stackexchange narkive permalink

Rozhodně neposílejte zprávy koncovým uživatelům, kteří by jim říkali, proč se přihlášení nezdařilo. Poskytujete potenciálnímu útočníkovi kritické informace, které mu pomohou při útoku na vaši aplikaci.

Na druhou stranu neříkající uživateli, proč se jeho přihlášení nezdařilo, je potenciální katastrofou použitelnosti.

Pokud nevyjasníte, zda byla IP adresa uživatele zakázána, nebo zda uživatel místo toho použil nesprávné heslo, může panikařit, protože se mu zdá, že někdo přistoupil k jeho účtu a změnil heslo, aby jej uzamkl. Pokud moje přihlášení s předvyplněným heslem selže, první věc, na kterou myslím, je vloupání, spíše než blokování IP.

Také naivní mechanismus blokování IP může být neúčinný a zavést další problémy. Pro útočníka s dostatečnými prostředky je potenciálně triviální obejít a někdo, kdo sdílí IP adresu s jinými uživateli, by mohl zneužít zákaz IP k zablokování ostatních. Místo toho může být CAPTCHA po n neúspěšných pokusech na IP měkčí řešení a vhodnější pro vaši aplikaci.

Viz také:

mít hlas pro captcha "soft lock"
Jon Bentley
2017-05-31 22:28:29 UTC
view on stackexchange narkive permalink

Poskytování obecných zpráv, které zde nebyly zmíněny, má bezpečnostní výhodu.

Alice se pokouší hrubě vynutit účet na Bobově serveru. Při prvních několika pokusech Alice dostane zpět zprávu „Neúspěšný pokus o přihlášení“. Při dalším pokusu se jí zobrazí „Příliš mnoho pokusů o přihlášení z této adresy IP“. Nyní si je vědoma toho, že (a) všechna pověření, která vyzkoušela, až do tohoto okamžiku, jsou neplatná, a (b) musí před několika pokusy udělat něco jiného.

Ale co když se Bob nezmění zpráva? Alice bude pokračovat s hrubou silou a bude i nadále dostávat obecný „Neúspěšný pokus o přihlášení“ při každém pokusu i když jsou pověření správná . Pokud náhodou vyzkouší správná pověření, Bob pokus odmítne, protože byl překročen limit IP, ale Alice nebude vědět, že to je důvod, a bude s ním muset zacházet jako s nesprávným pokusem (pokud nemá nějaké jiné způsob, jak zjistit, co je nad rámec této otázky). Její jedinou možností je pokračovat v hledání, aniž by věděla, zda již vyhledala a přesunula správná pověření.

Všimněte si, že touto výhodou je zabezpečení prostřednictvím neznáma, protože spoléhá na to, že Alice nezná Bobovu politiku blokování IP adres. V závislosti na nastavení může být získání těchto informací triviální. Například pokud má Alice přístup k jinému účtu v systému (snadný, pokud přijímá registraci veřejného účtu), může pomocí pokusu a omylu zjistit, zda bude po příliš mnoha nesprávných pokusech nakonec odmítnut správný pokus.

Další odpovědi vysvětlily kompromis zabezpečení a použitelnosti, takže se nebudu obtěžovat to opakovat.

Všimněte si, že Alice nemůže přesně ověřit správné heslo, pokud ke kontrole hesla s návratovou zprávou nedojde před kontrolou „příliš mnoha pokusů“.Opačné pořadí poskytuje méně informací, pouze umožňuje Alici rozlišit „nesprávná“ hesla od „neznámých“ hesel.Stále to může být nežádoucí množství informací, které může útočník poskytnout.
Tato odpověď předpokládá „nesprávné heslo“, ale zpráva „neúspěšné přihlášení“ ve skutečnosti znamená pouze „nesprávné uživatelské jméno nebo nesprávné heslo pro toto uživatelské jméno“.(Může dojít k útoku postranního kanálu, pokud je nesprávné uživatelské jméno dříve odmítnuto, ale je dobře známo, že náhodně nastaví dobu čekání na neúspěšnou přihlašovací zprávu)
@MSalters Pravda, ale na moji odpověď to nemá vliv.V každém případě je účinek na útočníka hrubou silou stejný: s obecnou zprávou nemohou poznat rozdíl mezi správnými a nesprávnými pověřeními a musí s nimi zacházet stejně.Rozdíly mezi „nesprávným heslem“ a zprávou „neúspěšné přihlášení“ představují samostatný problém zabezpečení a použitelnosti.Upravím svou odpověď, aby byla jasnější.
Dan Landberg
2017-05-31 21:48:04 UTC
view on stackexchange narkive permalink

Ano, technicky vracíte informace, které by mohl útočník použít k doladění botnetu hrubou silou. Kromě toho si nejsem jistý, jak užitečná bude pro standardní uživatele chybová zpráva „K mnoha pokusům o přihlášení z této adresy IP“. Je třeba také poznamenat, že každý ostřílený útočník si začne všímat buď měnícího se typu odpovědi, nebo časového rozdílu, a pravděpodobně stejně přijde na to, co se děje.

Možná budete chtít zvážit použití služby, jako je CloudFlare. Mají skriptovatelné API, které může dynamicky vložit intersticiální stránku nebo aktualizovat pravidlo WAF za určitých scénářů. Troy Hunt má dobrý výukový program, kde to dělá pro Windows Azure pomocí Azure Functions.

Tato odpověď má smysl.Co mám uživateli říct, když dosáhne limitu?V tomto okamžiku bych se rád vyvaroval zapojení CloudFlare.
Doporučení také pochází od vývojářů, kteří nejsou vždy v souladu s chybami, které ukazují.Na to musíte být také opatrní.Například pokud se pokouším hrubou silou vynutit heslo uživatele a dostanu zprávy „Nesprávné informace o přihlášení“, ale pak se zobrazí chyba „Příliš mnoho pokusů z této adresy IP“.Budu vědět, že jsem jackpot s heslem trefil, i když jsem se nepřihlásil.
Velká část vašeho znění bude záviset na propracovanosti vašich uživatelů.Něco v duchu „Nelze se právě přihlásit. Zkuste prosím svůj požadavek znovu později.“Pokud chcete, aby to bylo nejbezpečnější, chtěli byste se vyhnout uvedení konkrétního časového limitu, protože útočník by po tomto časovém limitu své pokusy pouze restartoval. Upřímně řečeno, chytrý útočník přijde na to, co se děje.Opravdu bych doporučil použít službu třetí strany.Programováním opravy můžete strávit obrovské množství času a útočník najde způsob, jak systém zahrát.
@kotzu Nesleduji vaši logiku.„Příliš mnoho pokusů z této IP adresy“ znamená příliš mnoho * nesprávných * pokusů, nikoli „Měli jste několik nesprávných pokusů následovaných správným pokusem, ale zablokujeme vás, protože správný pokus vás dostal nad limit“.
@Jon Bentley - Ano, to je přesně můj názor.to, co říkáte, by byl správný způsob, jak ukázat zprávu.Ale občas jsem viděl aplikaci s chybnou logikou, která umožňovala útočníkovi vědět, když narazil na správné heslo tím, že byl v rozporu s chybovými zprávami.
@JonBentley Ale ujistěte se, že netestujete pouze nesprávné pokusy ... Jinak váš útočník hrubou silou dostane chybu limitu rychlosti, chybu limitu rychlosti, chybu limitu rychlosti, poté úspěšné přihlášení a nezíská žádné zabezpečenívůbec.
Cloudflare znamená rozloučenou bezpečnost.je to v zásadě * MitM jako služba. *
@SargeBorsch To opravdu záleží na vašem modelu ohrožení.Pokud se snažíte bránit proti útočníkům Nation State, ano, pravděpodobně vás to oslabuje.Pro většinu aplikací poskytuje významné zlepšení zabezpečení, pokud jde o prevenci DDoS, WAF a další funkce.
@user52472 Cloudflare je stejně nebezpečí, protože také prokázali svou nekompetentnost.(viz zakalená díra)
Kirill Sinitski
2017-05-31 22:04:31 UTC
view on stackexchange narkive permalink

V tomto případě jsou bezpečnost a použitelnost v rozporu s cíli. I když nejbezpečnější implementace by neposkytovala žádnou zpětnou vazbu, byla by také nejméně uživatelsky přívětivá. Musíte se rozhodnout, nakolik je váš systém náchylný na brutální vynucování přihlášení, jaké další zmírnění jsou zavedeny a jak efektivní je konkrétní zmírnění, když je vyhodnoceno proti nepohodlí uživatele.

Například kdybych navrhoval přihlášení pro spotřebitelské zařízení Udělal bych to co nejpříjemnější pro uživatele tím, že budu mít podrobnou zpětnou vazbu a zavedl další zmírnění kompenzace. Pokud bych navrhoval přihlášení HSM, nenabízel bych žádnou zpětnou vazbu a obtížné časové limity pro celé zařízení.

Serge Ballesta
2017-05-31 22:43:19 UTC
view on stackexchange narkive permalink

Vše záleží na tom, co stavíte. Pokud se jedná o blog nebo jakýkoli jiný oblíbený web, kde není opravdu důležité odmítnout legitimní pokusy a kde opravdu nedůvěřujete robustnosti aplikace, měli byste ji opravdu chránit před čímkoli, co by mohlo být útokem, a nikdy neříkejte proč odmítnete přihlášení.

Pokud vytváříte profesionální aplikaci a očekáváte profesionální přístupy, neomezujte přístupy z jedné IP, pokud je vaše aplikace dostatečně robustní. Pokud tak učiníte, nezapomeňte informovat uživatele o důvodu a zřídit přiměřeně responzivní horkou linku (maximálně 1 pracovní den, abyste si přečetli zprávu a porozuměli jí, a případně zahájili nápravná opatření ). Protože pro velké organizace je běžné nastavit jeden odchozí proxy server pro všechny své přístupy HTTP a HTTPS. Můžete mít tisíce zaměstnanců na různých místech v zemi, všichni používají zdánlivě stejnou IP adresu. Stačí bílý seznam umožňující neomezené připojení od známých serverů proxy, ale musíte být připraveni jej rychle změnit, pokud některý z vašich zákazníků způsobí, že se jeho síť bude vyvíjet, a změní svou adresu proxy.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...