Dvostopenjska autentifikacija
Sve što ste pročitali o identifikaciji na osnovu onoga što zna tražilac. On zna svoju email adresu, zna kako da do nje pristupi (tj. zna svoju lozinku za email) i zna odgovore na tajna pitanja.
„Znanje“ se smatra jednim faktorom autentifikacije; druga dva uobičajena faktora su ono što imate, na primer, fizički uređaj, i ono što ste, na primer, otisci prstiju ili mrežnica oka.

U većini slučajeva, provođenje biološke identifikacije je malo izvodljivo, posebno kada govorimo o bezbednosti web aplikacija, stoga se pri dvostepenoj autentifikaciji (two factor authentication, 2FA) obično koristi drugi atribut — „ono što imate“. Jedna od popularnih opcija ovog drugog faktora je fizički token, na primer, :

Fizički token se često koristi za autentifikaciju u korporativnim VPN-ima i finansijskim servisima. Za autentifikaciju u servisu potrebno je koristiti i lozinku i kod sa tokena (koji se često menja) u kombinaciji sa PIN-om. Teoretski, za identifikaciju, napadač bi trebao znati lozinku, imati token i takođe znati PIN tokena. U scenariju resetovanja lozinke, sama lozinka očigledno nije poznata, ali posedovanje tokena se može koristiti za potvrdu prava na račun. Naravno, kao i kod svake implementacije zaštite, , ali definitivno povećava barijeru ulaska.
Jedan od glavnih problema ovog pristupa je trošak i logistika implementacije; govorimo o distribuciji fizičkih uređaja svakom klijentu i obuci njih za novi proces. Pored toga, korisnici moraju imati uređaj sa sobom, što u slučaju fizičkog tokena nije uvek moguće. Još jedna opcija je implementacija drugog faktora autentifikacije putem SMS-a, koji u slučaju 2FA može služiti kao potvrda da osoba koja prolazi kroz proces resetovanja ima mobilni telefon vlasnika računa. Ovako to radi Google:

Takođe je potrebno aktivirati , но это означает, что при следующем сбросе пароля ваш мобильный телефон может стать вторым фактором аутентификации. Позвольте мне продемонстрировать это на примере своего iPhone по причинам, которые скоро станут понятными:

После идентификации адреса электронной почты аккаунта Google определяет, что была включена 2FA и мы можем сбросить аккаунт с помощью верификации, которая передаётся через SMS на мобильный телефон владельца аккаунта:

Теперь нам нужно выбрать начало процесса сброса:

Это действие приводит к отправке электронного письма на зарегистрированный адрес:

Это письмо содержит URL сброса:

При выполнении доступа к URL сброса отправляется SMS и веб-сайт просит его ввести:

Вот это SMS:

После ввода его в браузер мы возвращаемся на территорию классического сброса пароля:

Вероятно, это кажется слегка многословным, и так и есть, но форма подтверждает, что выполняющий сброс человек имеет доступ к адресу электронной почты и мобильному телефону владельца аккаунта. Но это может быть в девять раз более безопасным, чем сброс пароля только через электронную почту. Однако существуют проблемы…
Проблема связана со смартфонами. Показанное ниже устройство может удостоверять только один фактор аутентификации — оно способно получать SMS, но не электронную почту:

Однако вот это устройство может получать SMS in получать письма о сбросе пароля:

Проблема в том, что мы рассматриваем электронную почту как первый фактор аутентификации, а SMS (или даже генерирующее токены приложение) как второй, но сегодня они объединены в одном устройстве. Разумеется, это означает, что если кто-то доберётся до вашего смартфона, то всё это удобство сведётся к тому, что мы снова вернулись к одному каналу; этот второй фактор «то, то у вас есть» означает, что у вас есть и первый фактор. И всё это защищено одним PIN из четырёх цифр… если у телефона вообще есть PIN in он был заблокирован.
Да, реализованная Google функция 2FA совершенно точно обеспечивает дополнительную защиту, но она не защищена «от дурака», и совершенно точно не зависит от двух полностью автономных каналов.
Сброс по имени пользователя против сброса по адресу электронной почты
Ali bi morali omogočiti ponastavitev gesla samo po e-poštnem naslovu? Ali naj bi uporabnik imel možnost ponastaviti geslo tudi po imenu? Težava pri ponastavitvi po uporabniškem imenu je, da ni mogoče obvestiti uporabnika o napačnem uporabniškem imenu, brez razkrivanja dejstva, da ima lahko nekdo drug račun s tem imenom. V prejšnjem razdelku je ponastavitev po elektronski pošti zagotavljala, da zakoniti lastnik te elektronske pošte vedno prejme povratne informacije brez javnega razkrivanja njegovega obstoja v sistemu. S samo uporabniškim imenom tega ni mogoče doseči.
Zato je odgovor kratek: samo elektronska pošta. Če poskušate izvesti ponastavitev le z imenom uporabnika, se bodo pojavili primeri, ko se uporabnik sprašuje, kaj se dogaja, ili razkrili boste obstoj računov. Da, to je le uporabniško ime, ne pa elektronski naslov, in ja, kdorkoli lahko izbere katerokoli (razpoložljivo) uporabniško ime, a kljub temu obstaja velika verjetnost, da boste posredno razkrili lastnike računov zaradi nagnjenja uporabnikov k večkratni uporabi istih imen.
Kaj se torej zgodi, ko nekdo pozabi svoje uporabniško ime? Če predpostavimo, da uporabniško ime ni takoj elektronski naslov (kar se pogosto dogaja), je postopek podoben tistemu, kako se začne ponastavitev gesla — vnesemo elektronski naslov in nato pošljemo sporočilo na ta naslov, ne da bi razkrili njegov obstoj. Edina razlika je v tem, da tokrat sporočilo vsebuje samo uporabniško ime, ne pa URL za ponastavitev gesla. Ali pa v elektronskem sporočilu piše, da za ta naslov ni računa.
Preverjanje identitete in natančnost elektronskih naslovov
Ključni vidik ponastavitve gesel in, verjetno, najbolj pomemben vidik je preverjanje identitete osebe, ki poskuša izvesti ponastavitev. Ali je to res zakoniti lastnik računa, ali pa nekdo poskuša vdreti vanj ali povzročiti nevšečnosti lastniku?
Očitno je, da je elektronska pošta najprimernejši in najrazširjenejši kanal za preverjanje identitete. Ni zaščitena pred nerodnim ravnanjem („od neumnosti“), in obstaja veliko primerov, ko preprosto prejemanje sporočil na naslov lastnika računa ni dovolj, če potrebujemo visoko stopnjo zaupanja pri identifikaciji (zato se uporablja 2FA), vendar skoraj vedno predstavlja začetno točko postopka ponastavitve.
Če bo elektronska pošta igrala vlogo pri zagotavljanju zaupanja, je najprej treba preveriti, ali je elektronski naslov resnično pravilen. Če je kdo naredil napako pri simbolu, potem se ponastavitev očitno ne bo začela. Postopek preverjanja elektronske pošte ob registraciji je zanesljiv način za preverjanje pravilnosti naslova. Vsi smo to videli v praksi: registrirate se, prejmete e-sporočilo z edinstveno URL povezavo, ki jo morate klikniti, kar potrjuje, da ste resnično lastnik tega elektronskega računa. Onemogočanje prijave v sistem, preden se ta postopek zaključi, zagotavlja motivacijo za potrditev naslova.
Kot pri mnogih drugih vidikih varnosti ta model zmanjšuje uporabnost v zameno za zagotavljanje višje stopnje varnosti glede identitete uporabnika. To je lahko sprejemljivo za spletno stran, na kateri je uporabniku visoko cenjena registracija in z veseljem doda še eno stopnjo postopku (plačljive storitve, bančništvo itd.), a takšne stvari lahko odvrnejo uporabnika, če ta račun dojema kot „enkratno uporabo“ in ga uporablja, na primer, samo kot sredstvo za komentiranje objave.
Identifikacija tistega, ki je sprožil postopek ponastavitve
Očitno so razlogi za zlonamensko uporabo funkcije ponastavitve, in napadalci jo lahko uporabijo na več različnih načinov. En preprost trik, ki ga lahko uporabimo za potrditev vira zahteve (ta trik običajno deluje) — je dodajanje IP-naslova tistega, ki zahteva, v sporočilo s predlogom za ponastavitev. To zagotavlja prejemniku nekatere informacije za identifikacijo vira zahteve.
Tukaj je primer funkcije ponastavitve, ki jo trenutno vgrajujem v ASafaWeb:

Povezava «find out more» («Izvedite več») uporabnika prenese na spletno stran , ki navaja informacije, kot so lokacija in organizacija, ki zahteva ponastavitev:

Seveda ima vsak, ki želi skriti svojo identiteto, številne načine za prikrivanje svojega pravega IP-naslova, vendar je to udoben način dodajanja delne identifikacije zahtevka, in v večine takih primerih vam to daje dovolj informacij o tem, kdo izvaja zahtevo za ponastavitev gesla.
Obvestilo o spremembah po e-pošti
Ta objava je prežeta z eno temo — komunikacijo; lastniku računa sporočite čim več o tem, kaj se dogaja na vsakem koraku postopka, ne da bi razkrili ničesar, kar bi lahko izkoristili z zlonamernim namenom. To velja tudi za situacijo, ko se je geslo dejansko spremenilo — obvestite lastnika!
Razlogi za spremembo gesla lahko izvirajo iz dveh virov:
- Sprememba gesla po prijavi, ker uporabnik želi novo geslo
- Ponastavitev gesla brez prijave, ker uporabnik gesla ne ve
Čeprav je ta objava predvsem osredotočena na ponastavitev, obvestilo v prvem primeru zmanjšuje tveganje, da bi nekdo spremenil geslo brez vednosti zakonitega lastnika. Kako se to lahko zgodi? Zelo razširjen scenarij je pridobitev gesla zakonitega lastnika (ponovno uporabljeno geslo, ki je uhajalo iz drugega vira; geslo, pridobljeno s keyloggingom; enostavno uganljivo geslo itd.), nato pa se zlonamerna oseba odloči, da ga spremeni in tako blokira lastnika. Brez obvestila po e-pošti zakoniti lastnik ne bo vedel o spremembi gesla.
Seveda, v primeru ponastavitve gesla bi moral lastnik že sam sprožiti postopek (ali zaobiti zgoraj opisane postopke preverjanja identitete), zato sprememba ne bi smela biti presenečenje zanj, vendar bo potrditev po e-pošti pozitivna povratna informacija in dodatna potrditev. Poleg tega to zagotavlja enotnost s prej opisanim scenarijem.
O, in v primeru, da to še ni očitno — ne pošiljajte novega gesla po e-pošti! Nekaterim se to lahko zdi smešno, vendar :

Zgledi, zgledi, zgledi in še malo zgledov
Funkcija ponastavitve gesla je privlačna za napadalce: napadalec želi dostopiti do računa druge osebe ali pa samo povzročiti nevšečnosti lastniku računa/sistema. Mnoge od zgoraj opisanih praks lahko zmanjšajo verjetnost zlorab, vendar jih ne preprečujejo, prav tako ne bodo odvrnile ljudi od poskusa uporabe funkcije na nepredviden način.
Za prepoznavanje zlonamernih vedenj je izjemno dragocena praksa beleženja, in imam v mislih zelo podrobno beleženje. Beležite neuspele poskuse prijave v sistem, ponastavitve gesel, spremembe gesel (tj. ko se je uporabnik že prijavil) in praktično vse, kar vam lahko pomaga razumeti, kaj se dogaja; to bo v prihodnosti zelo koristno. Beležite tudi posamezne dele procesa, na primer dobra funkcija ponastavitve mora vključevati iniciacijo ponastavitve prek spletnega mesta (beležite zahtevo in poskuse prijave za ponastavitev z napačnim uporabniškim imenom ali e-pošto), beležite obisk spletnega mesta po URL-ju za ponastavitev (vključno s poskusi uporabe napačnega žetona), nato pa zabeležite uspešnost ali neuspešnost odgovora na tajno vprašanje.
Ko govorim o beleženju, mislim ne le na zapis dejstva nalaganja strani, temveč tudi na zbiranje čim več informacij, če niso zaupne. Fantje, prosim, ne beležite gesel! V beležkah je treba registrirati identiteto avtoriciranega uporabnika (ta bo avtoriciran, če spremeni obstoječe geslo ali poskuša ponastaviti tuje geslo po prijavi v sistem), vse poskusne uporabniške imena ali e-poštne naslove ter vse žetone ponastavitve, ki jih poskuša uporabiti. Vendar pa je vredno beležiti tudi takšne vidike, kot so IP-naslovi in, če je mogoče, celo glave zahtev. To vam omogoča, da rekonstruirate ne le kaj uporabnik (ali napadalec) poskuša narediti, ampak tudi kdo
je on.
Če menite, da je vse to ogromna količina dela, niste edini. V resnici je zgraditi zanesljiv sistem za upravljanje računov zahtevna naloga. Ni, da bi bila tehnična težka, temveč vključuje številne posebnosti. Gre ne samo za ponastavitev, temveč za celoten postopek registracije, zanesljivo shranjevanje gesel, obravnavo več neuspešnih poskusov prijave itd. , vendar je potrebno še veliko ukreniti.
Danes obstaja veliko zunanjih ponudnikov, ki z veseljem prevzamejo vse te obremenitve in to abstrahirajo v en upravljan servis. Med takšnimi storitvami so OpenID, OAuth in celo Facebook. Nekateri ljudje (OpenID se je res izkazal za zelo uspešnega na Stack Overflow), toda drugi .
Brez dvoma storitev, kot je OpenID, rešuje številne težave razvijalcev, vendar je tudi nedvomno, da dodaja nove. Imajo kakšno vlogo? Da, vendar je očitno, da ne opazimo množičnega sprejemanja storitev ponudnikov avtentikacije. Banke, letalska podjetja in celo trgovine – vsi izvajajo svoj lasten mehanizem avtentikacije, in očitno obstajajo zelo resni razlogi za to.
Zlonamerna ponastavitev
Pomemben vidik vsakega od zgoraj predstavljenih primerov je, da je staro geslo dolžno postati neuporabno šele po potrditvi identitete lastnika računa.To je pomembno, ker bi, če bi bilo možno ponastaviti račun do brez preverjanja identitete, omogočilo različne zlonamerne aktivnosti.
Tukaj je primer: nekdo sodeluje na dražbi na spletni strani in proti koncu postopka dražbe blokira konkurente, tako da sproži postopek ponastavitve, kar jih odstrani iz dražbe. Očitno, če se slabo zasnovana funkcija ponastavitve lahko zlorabi, lahko to privede do resnih negativnih posledic. Vredno je omeniti, da je blokiranje računov zaradi več napačnih poskusov prijave podobna situacija, vendar je to že tema za drug prispevek.
Kot sem že omenil, če damo anonimnim uporabnikom možnost ponastaviti geslo katerega koli računa, preprosto tako, da poznajo njegov e-poštni naslov, potem lahko to privede do situacije Denial of Service. Morda to ni tisto, o čemer običajno govorimo, vendar ne obstaja hitrejši način, kako blokirati dostop do računa, kot z slabo premisljenim procesom za ponastavitev gesla. , o katerem smo vajeni govoriti, vendar ne obstaja hitrejši način, kako blokirati dostop do računa, kot z slabo zasnovano funkcijo ponastavitve gesla.
Najslabša povezava
Z vidika zaščite posameznega računa je vse, kar je bilo povedano zgoraj, odlično, vendar se morate vedno spomniti na ekosistem, ki obdaja račun, ki ga ščitite. Dovolite mi, da vam povem primer:
ASafaWeb se gosti na neverjetni storitvi, ki jo ponuja AppHarbor. Postopek ponastavitve računa gostovanja poteka tako:
Korak 1:

Korak 2:

Korak 3:

Korak 4:

Po pregledu vseh zgornjih informacij je enostavno razumeti, katere aspekte bi v idealnem svetu izvedli nekoliko drugače. Vendar tukaj želim omeniti, da če objavim spletno stran, podobno ASafaWeb, na storitvi AppHarbor, nato pa izumim odlična skrivna vprašanja in odgovore, dodam drugi faktor avtentikacije in naredim vse ostalo pravilno, to ne odpravlja dejstva, da bo najšibkejša točka celotnega procesa sposobna vse to razbiti. Če nekdo uspešno izvede avtentikacijo v AppHarbor, ob uporabi mojih podatkov, bo lahko hitro spremenil geslo za kateri koli račun ASafaWeb v tistega, ki ga želi!
Pomembno je, da se odpornost zaščitne implementacije obravnava celovito: treba je simulirati grožnje za vsako vstopno točko sistema, tudi če gre za površen proces, kot je prijava v AppHarbor. To mi mora dati dobro predstavo o tem, koliko truda moram vložiti v proces ponastavitve gesla za ASafaWeb.
Povezujemo vse skupaj
Ta objava vsebuje veliko informacij, zato želim te informacije strniti v preprost vizualni diagram:

Ne pozabite, da je treba za vsak od teh korakov izvajati čim bolj podrobno beleženje. To je to, preprosto je!
Zaključki
Moj objava se zdi celovita, vendar obstaja veliko dodatnih materialov, ki bi jih lahko vključiti v to, a sem se odločil, da zaradi kratkosti izpustim: vlogo naslova reševalnega elektronskega poštnega sporočila, situacijo, ko izgubite dostop do povezane elektronske pošte (na primer, ko ste prenehali delati) in tako naprej. Kot sem že omenil, funkcija ponastavitve ni tako zapletena, le da je veliko mnenj o njej.
Kljub temu, da ponastavitev ni tako težka, jo pogosto napačno izvajajo. Zgoraj smo videli nekaj primerov, kjer je bila implementacija lahko problematična, in obstaja mnogo več primerov, ko je napačna ponastavitev resnično povzročila težave. Nedavno je bilo ugotovljeno, da To je resen negativen rezultat!
Zato bodite previdni s svojimi funkcijami ponastavitve, na različnih točkah, in pri oblikovanju funkcije ne slecite svoje črne kape, saj obstaja velika verjetnost, da jo bo nosil kdo drug!
V okviru oglaševanja
VDSina ponuja cenovno ugodne s plačilom na dan, vsak strežnik je povezan na internetno povezavo s hitrostjo 500 megabitov in je brezplačno zaščiten pred DDoS napadi!
Izvor: habr.com
