Ех тези пароли...
"След 20 години усилия успешно научихме потребителите да ползват трудни за запомняне пароли, но лесни за "разбиване" от съвременните компютри." zxcvbn
В последно време и разбира се в контекста на изтеклите 773 милиона акаунта с Йордан Йорданов от БАРЗИКТ често дискутирахме възможностите за "password-less" автентикация, които все още не са масово прилагани.
Веднага след като Трой Хънт публикува данните за "Collection #1" в медиите и интернет се разрази поредната вълна от коментари, публикации и анализи на причините за изтичането на тези акаунти и използваните от тях пароли. Има вероятност много скоро тази вълна да прерасне в цунами, когато се публикуват и Collections #2-5. Повечето потребители и дори специалисти в областта на ИТ разчитат на пароли за да подсигурят достъп до услуги и да защитят информацията си. Замислете се, на колко места използвате именно този подход, в моето ежедневие аз се сещам за достъпа до AD, няколко сайта за електронна поща, социални мрежи, шифрирани дискове, мениджъра на пароли (тук бих ви препоръчал KeePass), Smart Home системата ми, WLAN, VPN и др.
Ясно се вижда, че паролите са от ключово значение за компаниите от частния и държавния сектор, домашните потребители и почти всички, които използват модерните комуникационни технологии, но това е нещо, което се надявам в близкото бъдеще да се промени из основи в положителна посока, но към това ще се върна малко по-късно.
NIST обновиха публикуваните от тях "Digital Identity Guidelines" (NIST Special Publication 800-63B) и включиха нови изисквания и препоръки към паролите. Въпреки, че някои първоначално звучат странно, когато се замислите ще видите, че те определено водят до по-висока степен на защита, например:
- Паролите, създадени от потребителите трябва да имат минимална дължина от 8 символа, а автоматично генерираните - 6 символа. И двете пароли могат да съдържат само цифри. Ако дадена парола бъде отхвърлена, поради нейното откриване в списък със забранени или "изтекли", то потребителят следва да създаде нова. Не бива да се правят никакви други препоръки за вида на паролата. Да 8 символа, може да звучи прекалено малко, но са разрешени не само "Printing ASCII", но и Unicode. Тук е мястото и за малко математика. Броят на "Printable ASCII" символите е 94. Определянето на броят на UNICODE символите е по-трудно, защото във версия 11 са включени 137374 отделни символа, но някои от тях се групират за да се създаде един. Нека да приемем, че за примера ще използваме само групата "Common", съдържаща 7591 символа. Азбуката, от която може да се генерира паролата е 94+7591=7685 символа. Възможните стрингове с 8 символа, генерирани от тази азбука са 7685^8=12166088593885041707832000390625. Ако приемем, че знаем хеша и можем да тестваме по 1000 пароли в секунда, то ще ни трябват около 385784138568145665519 години за да се проверят всички комбинации. Тук мисля, че числата говорят достатъчно (но да не забравяме социалното инженерство).
- Извършва се проверка, дали паролата е открита в база данни с "изтекли" пароли, намира ли се в речник, съдържа ли повтарящи се символи и в определени случаи, до колко е свързана с името на услугата и/или потребителя. Определено за потребителите тези ограничения са по-леки от изискването за малки и главни букви, символи, цифри и ... египетско проклятие (б.а. - последното е от един виц).
- Не се изисква потребителите периодично да променят своята парола. Честата смяна може да звучи като много добра практика, повишаваща сигурността, но реалността показва, че потребителите често пъти се отегчават след 4тата или 5тата промяна и започват да използват или стара парола (ако системата го допуска) или да добавят или променят по един символ в края. Сигурен, съм че сте виждали една сравнително стара снимка, която въпреки, че е в кръга на шегата описва ситуация, докарала до гняв не един потребител:
4. Като цяло паролите трябва да са "user-friendly". Не се използват т.нар. "Passwords Hints", което има редица предимства. Именно това за мен е най-важната промяна. Целта е потребителят да създаде надеждна парола, която лесно да запомни.
Мерките показват, че разбирането ни за надеждна парола се е променило и вече поставяме в центъра не ентропията на стринга, а потребителя, например паролата "peshoнехаресваkiselozele!" се явява по-надеждна от "[`h7}$jB&r".
password: [`h7}$jB&r
guesses_log10: 10
score: 3 / 4
function runtime (ms): 1
guess times:
100 / hour: centuries (throttled online attack)
10 / second: 31 years (unthrottled online attack)
10k / second: 12 days (offline attack, slow hash, many cores)
10B / second: 1 second (offline attack, fast hash, many cores)
match sequence:
'[`h7}$jB&r' pattern: bruteforce guesses_log10: 10
password: peshoнехаресваkiselozele!
guesses_log10: 25
score: 4 / 4
function runtime (ms): 7
guess times:
100 / hour: centuries (throttled online attack)
10 / second: centuries (unthrottled online attack)
10k / second: centuries (offline attack, slow hash, many cores)
10B / second: centuries (offline attack, fast hash, many cores)
match sequence:
'peshoнехаресваkiselozele!' pattern: bruteforce guesses_log10: 25
Виждаме, че разбирането ни за паролите се променя (развива), но въпреки това все по-често за подобряване на сигурността използваме средства като биометрия, двуфакторна автентикация и други подходи.
Интересна е концепцията на Microsoft за многофакторна автентикация без пароли - "Secure multi-factor authentication methods for your business". При нея се акцентира на четири подхода - Windows Hello, Microsoft Authenticator, FIDO2 Security Keys и ... Microsoft Edge. От тези технологии използвам Windows Hello, но имах възможността да тествам YubiKey, работещ по стандарта FIDO2.
Хардуерните ключове не са нещо ново. Спомням си някои от старите i386 и i486 системи, с които работих. Те имаха механична ключалка на предния панел, а при някои модели и на задната страна, блокираща сигнала от клавиатурата и отварянето на кутията (тук няма как да не се сетя за аналогия с "бойлера с копче").
Нека да се върнем на YubiKey, който определено ми допадна. Предполагам, че се замисляте, какво би станало, ако загубите ключа и не разполагате с втори. Тук решението зависи от използваната услуга и начина за достъп до нея с цел деасоцииране на ключа. Разбира, се един от подходите е ... да използвате парола за автентикация.
Ако си поставим въпроса "Не дали, а кога ще спрем да използваме пароли?" трудно ще можем да дадем еднозначен отговор. В момента разполагаме с необходимите средства да заменим тази технология за автентикация, но това трябва да се случи на изключително много места - от домашната WiFi мрежа, през множество Web сайтове до корпоративните информационни системи.
Сигурен съм, че още дълго време ще се налага (по-лесно) да помним пароли, но силно ви препоръчвам там където е възможно да използвате двуфакторна автентикация или биометрия.
Както споменах в началото, според мен преминаването от пароли като основен механизъм за автентикация към хардуерни ключове, биометрия и други "password-less" подходи определено е стъпка в правилната посока от гледна точка на киберсигурността.