zxcvbn и изтеклите пароли от България в Collection #1
Съжаляваме, но вашата парола трябва да съдържа главни букви, две цифри, символ, йероглиф, име на герой от турски сериал и кръв от индийски прилеп...
Според мен този виц описва общата представа, че използваните от нас пароли трябва да са сложна комбинация от символи, лишени от смисъл и да имат сравнително голяма дължина. Замислете се, според вас, коя от трите пароли е най-сигурна:
- P@ssw0rd
- qazwsx123!@#
- chocolatebulbpowercat
Предполагам, че избрахте "qazwsx123!@#", но това не е най-сигурната парола. Погледнете клавиатурата и ще видите последователността от символи и използването на SHIFT.
Съществуват различни методи за изчисляване на надеждността и ентропията на пароли, но този, който аз често използвам е zxcvbn. Именно този алгоритъм се прилага и от Dropbox.
zxcvbn
zxcvbn е алгоритъм за изчисляване на сложността на пароли, вдъхновен от специалните инструменти за анализ на този тип данни. Използва се търсене на съвпадащи последователности от символи, 30 000 често срещани пароли, имена и фамилии (на английски език), често използвани английски думи (от Wikipedia, филми и телевизионни сериали), дати, повторения на един и същи символ, последователност от клавиши (например qazwsx) и l33t.
Нека да направим бърза проверка на горните три пароли с zxcvbn. За "P@ssw0rd" са получени следните резултати (обърнете внимание, че времето, необходимо за откриване на паролата е по-малко от секунда).
Необходимото време за успешна атака на "qazwsx123!@#" е около 2 дни.
Както бях написал в началото на публикацията, най-сигурната и в същото време лесна за помнене парола от трите примерни е "chocolatebulbpowercat".
Няма да разглеждам в подробности zxcvbn, но ви препоръчвам да прочетете статията "zxcvbn: realistic password strength estimation".
Изтеклите пароли от България в Collection #1
Преди да анализираме част от изтеклите пароли в Collection #1 бих искал да обърна внимание на потребителя, използвал паролата "nikoganqmadaznaesh", че вече я знаем.
В Collection #1 има данни за няколко български сайта, от които има изтичане на информация, а най-големия файл включва 221587 хеша (акаунта). Тук искам да благодаря на екипа на ASOC на Telelink Business Services (Борис Маринов, Симеон Бунчев и Илия Дафчев) за усилията при откриването на първоизточника.
От всички 221587 хеша има "разбити" 199971 пароли, а описателната статистика за тяхната ентропия (спрямо zxcvbn) показва:
> describe(pass_DS$Entropy)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 1999701 22.85 8.41 21.16 22.13 8.77 0 136.86 136.86 0.84 1.07 0.02
Хистограма на ентропията на паролите изглежда по следния начин:
Какви изводи може да наравим от горните данни:
- Средната стойност (22.85) и медианата (21.16) са близки, което показва, че няма нетипичност (outliers), но тук трябва да се вземе под внимание и размерът на извадката;
- Ентропия 0 ясно показва, че използваната парола е речникова дума или изключително прост стринг. Такива са - "Pasw0rd", "abcd", "m1cha3l", "as", "1234567", "0123456" и други;
- От графиката отчетливо се виждат 3 върха - има сравнително голям брой пароли с близка ентропия в дадения интервал и те могат да бъдат обект на допълнителни анализи, например, какво е общото между тях, дали са използвани едни и също последователности от цифри и символи (спрямо клавиатурната подредба) и други.
Друга оценка на паролата, генерирана от zxcvbn е т.нар. "score", която е в интервала 0 (най-ниска сложност на паролата) до 4 (максимална сложност, без кръв от египетски прилеп). Хистограмата на параметъра "score" за разглежданите пароли е:
Числените стойности от горната графика са:
- С оценка 0 има 98789 пароли;
- С оценка 1 има 49918 пароли;
- С оценка 2 има 32946 пароли;
- С оценка 3 има 11228 пароли;
- С оценка 4 има 7090 пароли;
Ако приемем, че сайта е използвал zxcvbn и е разрешавал единствено пароли с оценка по-голяма от 2 (3 или 4) вероятността за толкова голямо изтичане на данни би била значително по-малка.
Ето и няколко други интересни факта, свързани с разглеждания списък с пароли:
- Част от паролите са e-mail адреси;
- Като части от пароли "cska" се среща 101 пъти, "levski" - 82, "sex" - 136, ".bg" - 78, "abv.bg" - 43, "sofia" - 123, "parola" - 166;
- Пароли, които ме накараха да се посмея са "grani4arskoprase", "masalce", "boza", "mucinka", "nadejdnaparola", "trudnaparola", "novaparola", "nemaparola", "batman", "idiotko", "poluidiot" и много други;
- Определен брой пароли изглеждат като случайно генерирани (еднаква дължина и комбинация от малки и главни букви ), което показва, че най-вероятно те не са били променени от потребителя, след служебното им създаване по време на регистрация за системата;
- Има пароли, съвпадащи с телефонни номера;
- Откриват се пароли, включващи валидни ЕГН.
С анализът може да се продължи още много, но предполагам, че вече става ясно, колко е важно да използваме надеждни пароли, които да сменяме често, както и да се вземат необходимите предпазни мерки срещу изтичане на данни от Web системи, поне докато не намерим начин да добавим и египетския прилеп.