TvÄfaktorsautentisering
Allt som ni har lÀst i handlade om identifiering baserat pÄ vad den som begÀr kÀnner till. De vet sin e-postadress, vet hur man fÄr Ätkomst till den (d.v.s. vet sitt e-postlösenord) och kÀnner till svaren pÄ hemliga frÄgor.
«KÀnnedom» betraktas som en autentiseringsfaktor; tvÄ andra vanliga faktorer Àr vad ni har, till exempel en fysisk enhet, och vem ni Àr, till exempel fingeravtryck eller nÀthinna.

I de flesta fall Ă€r det svĂ„rt att genomföra biologisk identifiering, sĂ€rskilt nĂ€r vi pratar om sĂ€kerheten för webbapplikationer, dĂ€rför anvĂ€nds vanligtvis den andra attributet i tvĂ„faktorsautentisering (two factor authentication, 2FA) â "vad ni har". En populĂ€r variant av denna andra faktor Ă€r en fysisk token, till exempel, :

En fysisk token anvÀnds ofta för autentisering i företags VPN och finansiella tjÀnster. För autentisering i tjÀnsten mÄste ni anvÀnda bÄde lösenord och koden pÄ token (som ofta Àndras) i kombination med en PIN-kod. Teoretiskt sett, för att identifiera en angripare mÄste denne veta lösenordet, ha token och ocksÄ kÀnna till tokenens PIN-kod. I ett scenario för ÄterstÀllning av lösenord Àr sjÀlva lösenordet uppenbarligen okÀnt, men innehav av token kan anvÀndas för att bekrÀfta Àgarskapet av kontot. SjÀlvklart erbjuder detta, som med alla skyddsmekanismer, , men ökar definitivt intrÀdesbarriÀren.
Ett av de frÀmsta problemen med denna metod Àr kostnaden och logistiken för att genomföra; vi talar om att ge fysiska enheter till varje kund och utbilda dem i den nya processen. Dessutom mÄste anvÀndarna ha enheten med sig, vilket i fallet med en fysisk token inte alltid Àr möjligt. Ett annat alternativ Àr att genomföra den andra autentiseringsfaktorn med hjÀlp av SMS, som i fallet med 2FA kan fungera som bekrÀftelse pÄ att den som genomför ÄterstÀllningsprocessen har Àgarens mobiltelefon. SÄ hÀr gör Google:

Det Àr ocksÄ nödvÀndigt att aktivera , men det innebÀr att din mobiltelefon vid nÀsta ÄterstÀllning av lösenordet kan bli en andra autentiseringsfaktor. LÄt mig demonstrera detta med min iPhone av skÀl som snart kommer att bli uppenbara:

Efter att e-postadressen till Google-kontot har identifierats upptÀcker systemet att 2FA har aktiverats och vi kan ÄterstÀlla kontot genom en verifiering som skickas via SMS till kontoinnehavarens mobiltelefon:

Nu behöver vi vÀlja att pÄbörja ÄterstÀllningsprocessen:

Denna ÄtgÀrd leder till att ett e-postmeddelande skickas till den registrerade adressen:

Detta meddelande innehÄller en ÄterstÀllnings-URL:

Vid Ätkomst av ÄterstÀllnings-URL:en skickas ett SMS och webbplatsen ber om att det ska anges:

HÀr Àr detta SMS:

NÀr vi anger det i webblÀsaren ÄtervÀnder vi till den klassiska ÄterstÀllningen av lösenord:

Det verkar kanske nÄgot omstÀndligt, och det Àr det, men formulÀret bekrÀftar att den som ÄterstÀller har tillgÄng till bÄde kontoinnehavarens e-postadress och mobiltelefon. Men detta kan vara nio gÄnger sÀkrare Àn att bara ÄterstÀlla lösenordet via e-post. Det finns dock problem...
Problemet rör smartphones. Enheten som visas nedan kan verifiera endast en autentiseringsfaktor â den kan ta emot SMS, men inte e-post:

Men denna enhet kan ta emot SMS och ta emot e-postmeddelanden om ÄterstÀllning av lösenord:

Problemet Ă€r att vi betraktar e-posten som den första autentiseringsfaktorn, och SMS (eller till och med en app som genererar tokens) som den andra, men idag Ă€r de sammanslagna i en enhet. Det betyder naturligtvis att om nĂ„gon fĂ„r tag pĂ„ din smartphone, sĂ„ minimeras allt detta bekvĂ€mlighet till att vi Ă„ter Ă€r tillbaka till en kanal; den andra faktorn ânĂ„got du harâ innebĂ€r att du ocksĂ„ har den första faktorn. Och allt detta skyddas av en fyrsiffrig PIN-kod⊠om telefonen ens har en PIN-kod och den var lĂ„st.
Ja, den implementerade Google-funktionen 2FA ger helt klart ett ytterligare skydd, men den skyddar inte mot 'dumheter', och den beror absolut inte pÄ tvÄ helt fristÄende kanaler.
à terstÀllning via anvÀndarnamn mot ÄterstÀllning via e-postadress
Ska man tillÄta ÄterstÀllning endast via e-postadress? Eller ska anvÀndaren kunna ÄterstÀlla Àven med anvÀndarnamn? Problemet med att ÄterstÀlla med anvÀndarnamn Àr att det inte finns nÄgot sÀtt att informera anvÀndaren om ett felaktigt anvÀndarnamn, utan att avslöja att nÄgon annan kan ha ett konto med det namnet. I föregÄende avsnitt garanterade ÄterstÀllning via e-post att den legitima Àgaren av denna e-post alltid skulle fÄ feedback utan att offentligt avslöja sin existens i systemet. Med hjÀlp av endast anvÀndarnamnet Àr detta omöjligt.
SÄ svaret Àr enkelt: endast e-post. Om du försöker ÄterstÀlla endast med hjÀlp av anvÀndarnamn, kommer det att uppstÄ situationer dÀr anvÀndaren undrar vad som har hÀnt, eller du kommer att avslöja existensen av konton. Ja, det Àr bara ett anvÀndarnamn, inte en e-postadress och ja, vem som helst kan vÀlja vilket (tillgÀngligt) anvÀndarnamn som helst, men det finns fortfarande en stor risk att du indirekt avslöjar kontoinnehavarna pÄ grund av anvÀndarnas benÀgenhet att ÄteranvÀnda namn.
Vad hÀnder dÄ nÀr nÄgon glömmer sitt anvÀndarnamn? Om vi antar att anvÀndarnamnet inte Àr samma som e-postadress (vilket ofta Àr fallet), sÄ liknar processen hur ÄterstÀllning av lösenord börjar - vi anger e-postadressen och skickar sedan ett meddelande till denna adress utan att avslöja dess existens. Den enda skillnaden Àr att detta meddelande bara innehÄller anvÀndarnamnet, inte en URL för ÄterstÀllning av lösenord. Antingen det, eller sÄ stÄr det i e-postmeddelandet att det inte finns nÄgot konto för denna adress.
Identitetsverifiering och noggrannhet av e-postadresser
En avgörande aspekt av lösenordsĂ„terstĂ€llningar, och kanske den mest avgörande aspekten Ă€r verifiering av identiteten hos personen som försöker Ă„terstĂ€lla. Ăr det verkligen den legitima Ă€garen av kontot, eller Ă€r det nĂ„gon som försöker hacka eller orsaka besvĂ€r för Ă€garen?
Det Àr uppenbart att e-post Àr den mest bekvÀma och vanligaste kanalen för identitetsverifiering. Den Àr inte skyddad mot klumpigt handhavande ("frÄn en idiot"), och det finns mÄnga fall dÀr den enkla möjligheten att ta emot mejl pÄ en kontoinnehavares adress inte Àr tillrÀcklig, om en hög grad av sÀkerhet i identifieringen krÀvs (dÀrför anvÀnds 2FA). Men nÀstan alltid Àr det en utgÄngspunkt för ÄterstÀllningsprocessen.
Om e-post ska spela en roll för att sÀkerstÀlla tillfredsstÀllelse, Àr det första steget att se till att e-postadressen faktiskt Àr korrekt. Om nÄgon gör ett fel tecken, kommer ÄterstÀllning uppenbarligen inte att pÄbörjas. Processen för verifiering av e-post vid registrering Àr ett tillförlitligt sÀtt att kontrollera att adressen Àr korrekt. Vi har alla sett det i praktiken: du registrerar dig, ett mejl med en unik URL skickas till dig, som du mÄste klicka pÄ, vilket bekrÀftar att du verkligen Àr Àgaren av den hÀr e-postadressen. OförmÄga att logga in förrÀn denna process Àr slutförd garanterar att det finns motivation för att bekrÀfta adressen.
Som med mÄnga andra aspekter av sÀkerhet, minskar en sÄdan modell anvÀndarvÀnligheten för att sÀkerstÀlla en högre grad av sÀkerhet angÄende anvÀndarens identitet. Detta kan vara acceptabelt för en webbplats dÀr anvÀndaren vÀrdesÀtter registreringen högt och gÀrna lÀgger till ytterligare ett steg i processen (betjÀnade tjÀnster, bankverksamhet, etc.), men sÄdana ÄtgÀrder kan avskrÀcka anvÀndaren om de ser sitt konto som "engÄngs" och till exempel bara anvÀnder det som ett sÀtt att kommentera ett inlÀgg.
Identifiering av vem som initierade ÄterstÀllningsprocessen
Det Àr uppenbart att det finns skÀl till skadlig anvÀndning av ÄterstÀllningsfunktionen, och angripare kan anvÀnda den pÄ mÄnga olika sÀtt. Ett enkelt trick som vi kan anvÀnda för att hjÀlpa till att bekrÀfta kÀllan till begÀran (detta trick fungerar vanligtvis och gÄr ut pÄ) att inkludera IP-adressen för den som begÀrde i mejlet med ÄterstÀllningserbjudandet. Detta ger mottagaren en viss information för att identifiera kÀllan till begÀran.
HÀr Àr ett exempel frÄn en ÄterstÀllningsfunktion som jag för nÀrvarande integrerar i ASafaWeb:

LÀnken "find out more" ("LÀs mer") tar anvÀndaren till webbplatsen , som ger information som plats och organisation av den som begÀr omstÀllning:

Naturligtvis har alla som vill dölja sin identitet mÄnga sÀtt att maskera sin verkliga IP-adress, men detta Àr ett praktiskt sÀtt att lÀgga till delvis identifiering av den som begÀr, och i de flesta mÄnga fall kommer det att ge dig en bra uppfattning om vem som gör begÀran om lösenordsÄterstÀllning.
E-postavisering om Àndringar
Detta inlĂ€gg genomsyras av ett tema â kommunikation; informera kontoinnehavaren sĂ„ mycket som möjligt om vad som hĂ€nder i varje steg av processen, utan att avslöja nĂ„got som kan anvĂ€ndas i ond tro. Detta gĂ€ller Ă€ven situationen nĂ€r lösenordet faktiskt har Ă€ndrats â informera kontoinnehavaren om detta!
Orsakerna till att byta lösenord kan komma frÄn tvÄ kÀllor:
- Byte av lösenord efter inloggning eftersom anvÀndaren vill ha ett nytt lösenord
- à terstÀllning av lösenord utan inloggning eftersom anvÀndaren har glömt det
Ăven om detta inlĂ€gg huvudsakligen handlar om Ă„terstĂ€llning, minskar aviseringen i det första fallet risken för att nĂ„gon Ă€ndrar lösenordet utan att den legitima Ă€garen Ă€r medveten om det. Hur kan detta hĂ€nda? Ett mycket vanligt scenario Ă€r att en illvillig aktör fĂ„r tag pĂ„ Ă€garens lösenord (ett Ă„teranvĂ€nt lösenord som lĂ€ckt frĂ„n en annan kĂ€lla; ett lösenord som fĂ„ngats av tangentbordslogger; ett lĂ€tt gissat lösenord etc.), och dĂ„ bestĂ€mmer sig för att Ă€ndra det, vilket lĂ„ser Ă€garen ute. Utan e-postavisering kommer den verkliga Ă€garen inte att veta om lösenordsbytet.
SjÀlvklart, i hÀndelse av en lösenordsÄterstÀllning bör Àgaren redan ha initierat processen sjÀlv (eller kringgÄtt de nÀmnda identitetskontrollmetoderna), sÄ bytet bör inte vara en överraskning för honom, men en bekrÀftelse via e-post skulle vara positiv feedback och en extra kontroll. Dessutom sÀkerstÀller detta konsistens med det tidigare beskrivna scenariot.
Och för att det inte ska vara otydligt â skicka inte det nya lösenordet via e-post! Detta kan fĂ„ nĂ„gon att skratta, men :

Loggar, loggar, loggar och lite mer loggar
Funktionen för ÄterstÀllning av lösenord Àr attraktiva för illvilliga aktörer: en angripare vill ha Ätkomst till nÄgon annans konto, eller sÄ vill de helt enkelt orsaka besvÀr för kontoinnehavaren/systemet. MÄnga av de ovan beskrivna metoderna kan minska risken för missbruk, men de förhindrar dem inte, och de kommer definitivt inte att stoppa folk frÄn att försöka anvÀnda funktionen pÄ ett otillÄtet sÀtt.
En ovÀrderlig praxis för att upptÀcka illvilligt beteende Àr loggning, och jag menar mycket detaljerad loggning. Logga misslyckade inloggningsförsök, ÄterstÀllningar av lösenord, Àndringar av lösenord (d.v.s. nÀr anvÀndaren redan Àr inloggad) och praktiskt taget allt som kan hjÀlpa dig att förstÄ vad som hÀnder; detta kommer att vara mycket anvÀndbart i framtiden. Logga Àven individuella delar av processen, exempelvis bör en bra ÄterstÀllningsfunktion inkludera initiering av ÄterstÀllning via webbplatsen (logga begÀran och inloggningsförsök för ÄterstÀllning med felaktigt anvÀndarnamn eller e-post), logga besök pÄ webbsidan enligt URL:en för ÄterstÀllning (inklusive försök att anvÀnda en ogiltig token), och sedan logga om svar pÄ sÀkerhetsfrÄgan var korrekt eller inte.
NÀr jag pratar om loggning menar jag inte bara registreringen av att en sida har laddats, utan att samla sÄ mycket information som möjligt, om den inte Àr konfidentiell. Hörni, vÀnligen skriv inte ner lösenord i loggar! I loggarna bör identiteten pÄ den inloggade anvÀndaren registreras (han kommer att vara inloggad om han Àndrar ett befintligt lösenord eller försöker ÄterstÀlla nÄgon annans lösenord efter inloggning), alla anvÀndarnamn eller e-postadresser som han försöker samt vilka ÄterstÀllningstoken han försöker anvÀnda. Men det kan ocksÄ vara nyttigt att logga sÄdana aspekter som IP-adresser och, om möjligt, Àven begÀrhuvuden. Detta gör att du kan Äterskapa inte bara vad vad anvÀndaren (eller angriparen) försöker göra, utan Àven vem vem han Àr.
Delegation av ansvar till andra aktörer
Om du tycker att allt detta verkar vara en enorm mÀngd arbete, sÄ Àr du inte ensam. Att bygga ett pÄlitligt system för kontohantering Àr faktiskt en tuff uppgift. Det handlar inte bara om den tekniska svÄrigheten, utan det finns mÄnga aspekter att ta hÀnsyn till. Det handlar inte bara om att ÄterstÀlla, det finns en hel process för registrering, sÀker lagring av lösenord, hantering av flera misslyckade inloggningsförsök osv. , men det finns fortfarande mycket mer att göra.
Idag finns det mÄnga tredjepartsleverantörer som gÀrna tar pÄ sig allt besvÀr och abstraherar allt detta till en hanterad tjÀnst. Bland sÄdana tjÀnster finns OpenID, OAuth och till och med Facebook. Vissa mÀnniskor (OpenID har faktiskt visat sig vara vÀldigt framgÄngsrik pÄ Stack Overflow), men andra .
Utan tvekan löser tjĂ€nster som OpenID mĂ„nga problem för utvecklare, men det Ă€r ocksĂ„ uppenbart att de tillför nya. Har de nĂ„gon betydelse? Ja, men det Ă€r tydligt att vi inte ser massanvĂ€ndning av autentiseringstjĂ€nster. Banker, flygbolag och till och med butiker â alla implementerar sina egna autentiseringsmekanismer, vilket uppenbarligen har mycket starka skĂ€l.
Skadlig ÄterstÀllning
En viktig aspekt av varje av de tidigare nÀmnda exemplen Àr att det gamla lösenordet betraktas som vÀrdelöst först efter att identiteten hos kontoinnehavaren har bekrÀftats. Detta Àr viktigt eftersom om ett konto kunde ÄterstÀllas till utan identitetsverifiering, skulle det möjliggöra alla möjliga skadliga handlingar.
HÀr Àr ett exempel: nÄgon deltar i budgivning pÄ en auktionssajt, och nÀr budgivningen börjar nÀrma sig sitt slut blockerar de sina konkurrenter genom att pÄbörja ÄterstÀllningsprocessen, vilket pÄ sÄ sÀtt eliminerar dem frÄn budgivningen. Uppenbart, om en dÄligt utformad ÄterstÀllningsfunktion kan utnyttjas pÄ fel sÀtt, kan det leda till allvarliga negativa konsekvenser. Det bör noteras att kontoblockering genom flera misslyckade inloggningsförsök Àr en liknande situation, men det Àr ett Àmne för ett annat inlÀgg.
Som jag nÀmnde tidigare, om man ger anonyma anvÀndare möjlighet att ÄterstÀlla lösenord för vilken konto som helst bara genom att kÀnna till e-postadressen, sÄ Àr det en perfekt situation för en "överbelastningsattack". Det hÀr kanske inte Àr den , som vi Àr vana vid att diskutera, men det finns inget snabbare sÀtt att blockera Ätkomsten till ett konto Àn med en dÄligt tÀnkt ÄterstÀllningsfunktion.
Den svagaste lÀnken
Ur perspektivet av att skydda ett konto Àr allt ovanstÄende utmÀrkt, men man mÄste alltid tÀnka pÄ ekosystemet som omger det skyddade kontot. LÄt mig ge ett exempel:
ASafaWeb Àr vÀrd pÄ en fantastisk tjÀnst som tillhandahÄlls av AppHarbor. à terstÀllningsprocessen för kontot i hostingtjÀnsten gÄr till sÄ hÀr:
Steg 1:

Steg 2:

Steg 3:

Steg 4:

Efter att ha lÀst all tidigare information Àr det redan lÀtt att förstÄ vilka aspekter som vi skulle genomföra annorlunda i en perfekt vÀrld. Men hÀr vill jag sÀga att om jag skulle publicera en webbplats liknande ASafaWeb pÄ AppHarbor och sedan komma pÄ utmÀrkta hemliga frÄgor och svar, lÀgga till tvÄfaktorsautentisering och göra allt annat enligt reglerna, sÄ avskaffar det inte det faktum att den svagaste lÀnken i hela processen fortfarande kan bryta ner allt detta. Om nÄgon framgÄngsrikt autentiserar sig pÄ AppHarbor med min information, sÄ kan de Àndra lösenordet för vilket konto som helst pÄ ASafaWeb!
PoÀngen Àr att robustheten i sÀkerhetsimplementeringen bör betraktas helhetsmÀssigt: man mÄste modellera hoten frÄn varje ingÄngspunkt till systemet, Àven om det Àr en ytlig process som att logga in pÄ AppHarbor. Detta bör ge mig en god uppfattning om hur mycket arbete jag behöver lÀgga ner i ÄterstÀllningsprocessen för lösenordet pÄ ASafaWeb.
Sammanfoga allt
Detta inlÀgg innehÄller mycket information, sÄ jag vill sammanfatta det i ett enkelt visuellt schema:

Kom ihÄg att man bör utföra sÄ detaljerad loggning som möjligt av var och en av dessa punkter. Det Àr allt, det Àr enkelt!
Sammanfattning
Mitt inlÀgg verkar vara omfattande, men det finns mÄnga ytterligare material som jag skulle kunna inkludera det, men beslutade att avstÄ frÄn detta för korthetens skull: rollen av adressen för rÀddande e-post, en situation dÀr du förlorar tillgÄng till den e-post som Àr kopplad till kontot (till exempel om du slutade pÄ jobbet) och sÄ vidare. Som jag sa tidigare, Àr ÄterstÀllningsfunktionen inte sÄ komplicerad, det finns bara mÄnga synpunkter pÄ den.
Trots att Ă„terstĂ€llningen inte Ă€r sĂ„ svĂ„r, implementeras den ofta felaktigt. Ovan sĂ„g vi ett par exempel pĂ„ nĂ€r implementeringen hantera plötsliga kraschar och visa anvĂ€ndbara detaljer för felsökning, som stacktrace. Att skicka felmeddelanden har förenklats â det rĂ€cker att klicka pĂ„ lĂ€nken. ledde till problem, och det finns mycket fler exempel dĂ€r felaktig Ă„terstĂ€llning verkligen orsakade problem. Nyligen avslöjades det att Det hĂ€r Ă€r ett allvarligt negativt resultat!
DÀrför, var försiktig med dina ÄterstÀllningsfunktioner, pÄ olika punkter, och nÀr du designar funktionen, ta inte av din svarta hatt, för det finns en stor sannolikhet att nÄgon annan kommer att ta pÄ sig den!
I reklamens namn
VDSina erbjuder prisvÀrda med daglig betalning, varje server Àr ansluten till en internetkanal pÄ 500 Megabit och Àr gratis skyddad mot DDoS-attacker!
KĂ€lla: habr.com
