Pull to refresh

Comments 96

UFO just landed and posted this here
Опасность в том что будет скомпрометирована база данных какого-то сервиса. Даже если сервис хранил пароли в виде хэша с солью, то пароли из приведенного списка будут без проблем подобраны офлайновым перебором. А дальше если пароль используется пользователем в других сервисах то есть вероятность что и логин будет или одинаковым или легко угадываемым.
UFO just landed and posted this here
Если вы глупы бесстрашны, то на той же странице можете ввести свой уникальный пароль и проверить его на наличие в базах, не скачивая их. Трой Хант обещает, что никак не будет использовать ваш пароль и его сервис абсолютно надёжен. «Не отправляйте свой активно используемый пароль ни на какой сервис — только на этот!», — убедительно заявляется на странице.

Новости через год: «Опубликована база с 500 млн уникальных паролей (8,5 ГБ)».
А ещё там написано, что на той же странице можно проверять по SHA1 хешу.
Подозреваемый обвиняется в 17 убийствах. После следственного эксперимента, он обвиняется в 34 убийствах…
Do not send any password you actively use to a third-party service — even this one!

Не отправляйте свой активно используемый пароль ни на какой сервис — только на этот!

Ализар такой Ализар.
UFO just landed and posted this here
О, спасибо, что заметили, поправил.
Перед хешированием все символы переведены в верхний регистр (прописные буквы) — не в ВЕРХНИЙ, а в нижний — я проверил.
Пока смотрю pwned-passwords-update-1.txt.7z: есть пароли в обоих и смешанных регистрах.
как вы это определили по хешам?
Очень же просто — брутфорс запустил.
Пароли есть и в верхнем и в нижнем регистре, пример для паролей «test» и «TEST:
test, SHA1: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 на 202168230 строчке в файле pwned-passwords-1.0
TEST, SHA1: 984816fd329622876e14907634264e6f332e9fb3 на 8131272 строчке в файле pwned-passwords-update-1
получилось 306 259 512 уникальных паролей. На следующий день он добавил ещё 13 675 934, опять из неизвестного источника — эти пароли распространяются отдельным файлом.
alizar

Изначально в базу было собрано 306М паролей без учета регистра. В update-1 добавлено еще 14М паролей с учетом регистра (как я понял, источники те же, поменялся лишь процессинг), а в update-2 (уже после публикации этой статьи) — пароли длиннее 40 символов, которые ранее по ошибке обрезались. Таким образом *-update-1 база регистрозависима.
Очень непоследовательное решение — позволить юзерам проверять свой пароль онлайн. Если объявляешь миру «вводить пароль на сторонних ресурсах опасно» — будь последователен и не реализуй на своём ресурсе именно эту возможность. Документация на API и обещание не передавать пароли третьим лицам не значат и не гарантируют ровно ничего.

Картинка на тему: https://pbs.twimg.com/media/Bu72nZSIEAAjWFF.jpg
Сложный пароль, использовал примерно год на почтовом ящике, недавно поменял, сейчас проверил — не скомпроментирован. Легкий пароль (существующее слово и три цирфы) используемый для единичной регистрации на всяких левых сайтах — не скомпроментирован…
Помониторьте через сколько он там появится
Ради этого и вбил, и даже поставил напоминалку :)
UFO just landed and posted this here
UFO just landed and posted this here
(вот такой он невезучий)
Вы уверены, что тут в невезении дело?
Как проверить свой пароль, если не знаю, что такое хеш?
UFO just landed and posted this here
Гугл довольно любопытные картинки предлагает начинающим криптоаналитикам.
Заголовок спойлера
hash
Самое время почитать что это такое.

В линуксе хеш пароля можно получить так
echo -n СВОЙПАРОЛЬ |sha1sum

полученное значение искать в скачанных файликах.
Не надо так делать, пароль осядет в .bash_history.

sha1sum без аргументов, вводим пароль, Return, Ctrl+D.
В ubuntu можно пробельчик перед командой поставить.
Хоть в Ubuntu Linux, хоть в OpenBSD. Фишка с пробелом перед командой — вопрос bash'а. Если он у вас стоит где угодно, да хоть в винде по дефолту команды начинающиеся с пробела он игнорирует, это настраиваемо через HISTCONTROL в bashrc.
Стоит помнить, что Return тоже воспринимается как отдельный символ и что 'qwerty' != 'qwerty\n'
Полученное значение необязательно искать в скачанных файликах — достаточно сгенерированный хеш вставить в поле пароля онлайн. Только что так нашел один из своих паролей (надо сказать довольно-таки кудрявый, с переменным регистром, цифрами и спец. символами и не имеющим логического смысла) в базе :(

Для проверки можете вставить хеш 5cec175b165e3d5e62c9e13ce848ef6feac81bff (что есть qwerty123).
Но все же лучше не вставлять и хеш ни в какие онлайн-формы третьих лиц. Особенно SHA1, которые скопом раскалываются ну очень легко на современных мощах.
(на правах шутки )
Лучше так:
curl -X "POST" "http://заройте-ваши-данные-заройте-в-землю-тут/post" -d 'сервис:логин:пароль'


Вводил в базу 20 паролей сгенеренных по дефолту командой pwgen — 8ми символьные пароли без спец. символов. В базе не оказалось ни одного из 20.
Туфта, а не база.
На каком основании эти пароли должны были присутствовать в базе?
(Поясняю: количество всех буквенно-цифровых паролей длины 8 = (26+10)^8 = число порядка 10^12.
Размер базы паролей — 320 млн — число порядка 10^8.

Вероятность с одной попытки попасть в подмножество размера 0.0001 от пространства исходов равна 0.0001.
Вероятность сделать это с 20 попыток равна 1-0.9999^20, что примерно равно 0,0019, т.е. порядка десятой доли процента.)
В большом файле присутствуют хеши, состоящие и заглавных букв, а не из строчных…
Вообще-то он написал в блоге, что первая версия действительно сводила P@55w0rd к p@55w0rd, а дополнительный апдейт на 13 миллионов потребовался ровно чтобы вернуть отфильтрованные ложные дубли.

And then I added another 13,675,934 the following day to bring the total to 319,935,446 (let's just call it 320 million). Whilst this increase is only 4%, it's important because the initial processing I performed caused only one version of multiple passwords with different cases to be loaded. For example, «p@55w0rd» was loaded but not «P@55w0rd» with a capital «p». I'll explain these concepts in full shortly, but the online system is now properly case sensitive and the downloadable passwords have their first incremental update so you'll see both the initial 306 million plus «Update 1».

dfiles.ru


Среднее время скачивания в обычном режиме: 2321 минута


Да вы смеётесь.

Еще и капчу с издевкой подсовывают.

image
Попробовал несколько словарных паролей (на популярном азиатском языке) в другом регистре (на не менее популярном европейском) совпадений нет…
… в общем я так понимаю, что настоящему индейцу, нет смысла тут искать свой пароль от помоечной почты.
а как вы их вводите не на своём компе, если прям вот приспичило по какой-то причине?
Странно, в онлайн базе нашло 3 старых пароля, в оффлайн(в обоих архивах) только 1
Никто не подскажет, как бы с кипасса автоматом захэшировать пароли в SHA1, чтобы проверить?
В оригинальной статье автор вроде как говорит — НЕ делайте так, не используйте свои активные пароли для проверки. А по вопросу — keepass умеет делать export текущей базы в нешифрованные форматы — экспортируйте в xml и можно использовать простой скрипт чтобы получить sha1. В целях безопасности — лучше это написать самому и проверить оффлайн, а не доверять стороннему плагину.
Я вроде для исследовательских целей спросил, а уже домыслы, что чёт взламывать решил, неплохо аудитория петушится на любой намек несанкционированного использования информации.
Видимо ваш коммент заминусили из-за того, что статья как-раз о том, что исследователь выложил эту базу в открытый доступ. Вы, видимо, забыли прочитать статью, прежде чем комментировать — отсюда и недовольство аудитории (лично я минус не ставил).
Полагаю, вопрос был про пароли в нехешированном виде:)
riartem, я уточнил по поводу открытых паролей, я понимаю, что пост не подразумевает ссылку на неё, но возможно у кого то она имеется, что бывает часто. И этот кто то мог бы поделиться, если не жалко. В целом 4umak всё верно подметил.
По этому, в неумении читать можно лишь обвинить минусующих, хотя я полагаю, что ребята петушатся всё таки по другому поводу.
а подскажите эффективный способ поиска по базе? grep?
Могу выложить свой перловый скрипт, если у вас есть Perl. Ищет за доли секунды.
я написал свой питон скрипт, но он медленный, зато позволяет искать сразу много паролей, и в разных регистрах.
поделитесь своим, я могу свой тоже показать если кому интересно
Пожалуйста
#!/usr/bin/perl

use strict;
use Digest::SHA1 qw(sha1_hex sha1_base64);

my @pass = ('passwords', 'for', 'geeks');
for my $data (@pass) {
    my $d = uc(sha1_hex($data));
    if (ff("pwned-passwords-1.0.txt", $d) || ff("pwned-passwords-update-1.txt ", $d)) {
       print sprintf("%15s\tFOUND\n", $data);
    }
}

sub ff {
    my ($fname, $data) = @_;
    my $fsize = -s $fname || die "File $fname not found";
    local *F;
    open(F, "< $fname");
    my $min = 0;
    my $max = $fsize / 42; 
    while (1) {
        my $pos = int( ($max + $min) / 2);
        seek(F, $pos * 42, 0);
        my $row = <F>;
	chomp($row); chomp($row);
        if ($row lt $data) {
            if ($min == $pos || $min >= $max) {
               close F; return 0;
            }
            $min = $pos;
        } elsif ($row gt $data) {
            if ($max == $pos || $max == 0) {
               close F; return 0;
            }
            $max = $pos;
        } else {
            close F; return 1;
        }
    }
    return 0;
}

позволяет искать сразу много паролей, и в разных регистрах.

>fgrep -inH -f hashes.txt pwned-passwords-1.0.txt pwned-passwords-update-1.txt
Так вот, откуда нам знать, какие пароли есть у злоумышленников? Благодаря специалисту по безопасности Трою Ханту можно проверить эти базы на актуальность. Более того, их можно скачать к себе на компьютер и использовать для брутфорса чего только можно.
UFO just landed and posted this here
не надо страничку, пожалуйста!
UFO just landed and posted this here
Всё равно не надо.
UFO just landed and posted this here
пароли не проверял, базы скачал, глянул… а там хэши. ну и как мне эти ваши хэши скормить джону, а?! нафига мне эти ваши хэши, давайте оригинальный файл и чтоб регистрозависимый, а не приведённый в верхний реест (или не приведённый, непонятно). посоветуйте ктонить ОГРОМНЫЙ wordlist с русскими паролями в английских раскладках, я устал брутфорсить.
Цель базы не помочь вам брутфорсить, а помочь обычным людям проверять утекшие пароли без внешнего сервиса.
вы считаете, что я говорю о цели? давайте я вам процитирую заголовок (желтый конечно же или у вас сомнения) — Опубликована база с 320 млн уникальных паролей (5,5 ГБ) — гдето в заголовке есть надпись хэш? может хэшированная есть слово? заметил, что 90% авторов гиктаймса и хабры — покусаны журналистами конечно же. ну, напиши ты, что хэшей паролей, это сложно да? но конечно же, кто же будет читать статью, качать… кому нафиг сдались хэши, конечно же.
UFO just landed and posted this here
Шикарная статья, давно об этом думал. Ведь собирают же злоумышленники, факт!
UFO just landed and posted this here
По-моему, он пароли к верхнему регистру не приводил, а просто пишет, что хэши у него в верхнем регистре. Вот цитата из его блога:

Also, just a quick note on the hashes: I processed all the passwords in a SQL Server DB then dumped out the hashes using the HASHBYTES function which represents them in uppercase. If you're comparing these to hashes on your end, make sure you either generate your hashes in uppercase or do a case insensitive comparison.
UFO just landed and posted this here
известная организация Cloudflare и предложила захостить файлы забесплатно

Так мило с их стороны. Такие няшки.
проверил несколько старых паролей, которые давно не использую, и которые 100% были слиты. В базе их не нашлось. Учитывая количество паролей в базе — довольно странно. Хотя не исключаю вариант что я попадаю под правило «неуловимого Джо».
Пока проверяется опубликованным здесь perl скриптом, никто ничего не найдёт.
Потому что он делает двоичный поиск из предположения, что файлы хэшей отсортированы,
а это так только для update-2.
Самый большой файл и update-1 несортированы, я для проверки этого программу на C написал.
Нужно делать линейный поиск, а это долго…
Программа на С — это прямо-таки «аргумент».
А вот как выглядит программа на Perl для проверки отсортированности по возрастанию.
local *F;
open(F, "< pwned-passwords-1.0.txt");
my $p = '';
while (my $s = <F>) {
    print "ERR:\n$p$s" if ($p gt $s);
    $p = $s;
}
close(F);

И согласно результатам ее работы — там все в порядке с сортировкой, но вы можете указать конкретные строки идущие не по порядку. Предположу, что вы несколько поторопились и приняли за нарушения сортировки одинаковые строки типа:
000D72C5C8DEB3547BCEFCD3DE73677BC3DC8519

> приняли за нарушения сортировки одинаковые строк

Ту вы правы — я допустил равные соседние строки и теперь все файлы
прошли проверку на сортированность.

А троллить перлом меня не надо, я его знаю и пользуюсь.
Но последовательно сканировать 12G данных построчным чтением… нет уж.
При таком чтении данные в памяти копируются два лишних раза — первый раз из буфера в ядре в буфер пространства пользователя
и ещё раз из буфера stdio в переменную пользователя.
Не знаю точно, как это организовано в перле, но одно лишнее копирование там точно есть.
Я же использую mmap и madvise.

А тот скрипт ни одного тестового пароля не нашёл,
хотя 'test' и '123' в тех файлах точно есть, я уже убедился.
УМВР.
my @pass = ('test', '123', '1234', '12345', 'd1f');
...
# perl finder.pl
           test FOUND
            123 FOUND
           1234 FOUND
          12345 FOUND
            d1f FOUND


Давайте посмотрим, почему у вас не работает. Вы ничего с файлами не делали, например, не превращали перевод строки \r\n в просто \n? А то я поленился проверять размер строки, может быть у вас он не 42 байта, а 41.
> УМВР

А у меня нет.

> Вы ничего с файлами не делали, например, не превращали перевод строки \r\n в просто \n?

Нет, не делал.

Но со скриптом делал — тестовые пароли с командной строки ввожу,
их ведь не жалко.
Боюсь, что скрипт не предназначен для работы с командной строкой — я не хотел бы, чтобы пароли оставались в истории. Внутри скрипта есть строчка для паролей:
my @pass = ('test', '123', '1234', '12345', 'd1f');

Если же вы хотите работать с командной строкой, то замените ее на:
my @pass = @ARGV;

или же в цикле ниже:
for my $data (@pass) {
на
for my $data (@ARGV) {

Перлу меня учить не надо.

Кстати, я доделал свою программу на C, теперь она ищет двоичным поиском.
mmap'ит файлы и bsearch().
А пароли вводятся с stdin.
Все стандартные 123… находятся, а моих паролей нет и я этим доволен.
Читать на каждом запуске 13 гигабайт с носителя? Да еще и загонять в память? Это довольно странный ход, с учетом того, что средний поиск пароля по файлу требует чтения ~32 блоков и выполняется за пол-миллисекунды даже на моем десктопе. Впрочем, каждый развлекается как ему нравится.
mmap — это не чтение/загоняние в память файла,
это чтение нужных страниц по обращению к адресу памяти.
А поскольку теперь двоичный поиск, то грузятся только те страницы,
в которых ключи, через которые поиск проходит, а это сильно меньше.

> выполняется за пол-миллисекунды даже на моем десктопе.

Зависит от параметров вашего десктопа, размера L3 кеша, размера ОЗУ
(сколько у вас GB? У меня 4).

real 0m2.256s
user 0m0.000s
sys 0m0.000s
У меня SSD, в данном случае это, видимо, играет определяющую роль.
UFO just landed and posted this here
Лучше в двоичное представление и в файл. Все-таки у СУБД избыточность велика. Я вот попробовал загнать в постгресс, получил скорость в 3 раза ниже, чем при работе с файлами и периодические провисания по 0.2 сек.

И размер базы в 40G вместо 10G (компрессия так себе, но все-таки).

Если тут кто-то разбирается в оптимизации СУБД, то я бы с интересом выслушал, как это оптимизировать.
На данный момент все выглядит так
# \d passhash
  Table "public.passhash"
 Column | Type  | Modifiers 
--------+-------+-----------
 sha1   | bytea | not null
Indexes:
    "passhash_pkey" PRIMARY KEY, btree (sha1)

# select count(*) from passhash;
   count   
-----------
 320294464
(1 row)

Функция для упрощения поиска:

# CREATE or REPLACE FUNCTION findpass(text) returns text
  AS $$ select ($1 || ' OK') from passhash where sha1=(select digest($1, 'sha1')) $$
  LANGUAGE SQL
  IMMUTABLE
  RETURNS NULL ON NULL INPUT;

# select findpass('justapass');
   findpass   
--------------
 justapass OK
(1 row)

Time: 3.247 ms
UFO just landed and posted this here
Без индексации поиск занимает вечность. Если заменить btree на hash, то результаты в среднем такие же, но индекс занимает не 24 гигабайта, а «всего» 13.
Линуксовый однострочник для быстрой проверки пароля на наличие в базе, без отправки его или его полного хэша на сервер:
echo -n "password" | sha1sum | awk '{prefix = substr($1,1,5); reminder = substr($1,6,35); res = system("curl -s https://api.pwnedpasswords.com/range/" prefix "| tr [A-Z] [a-z] | grep \"" reminder "\""); if(res) print "No answer" }'

Результат:

1e4c9b93f3f0682250b6cf8331b7ee68fd8:3533661

Значит пароль password «попался в сети» 3533661 раз.

Если же в ответ ничего не вывелось, значит пароля в базе нет. Если ответ «No answer», значит нет связи с сервером Троя.
В предыдущем однострочнике есть косяк, который приводит к тому, что если пароля нет в базе, то выводится сообщение 'No answer'. Ниже приведён улучшенный однострочник, с исправленной ошибкой:

echo -n 'password' | sha1sum | awk '{prefix=substr($1,1,5); reminder=substr($1,6,35); if(system("curl -s https://api.pwnedpasswords.com/range/" prefix "> ./pwhashes.txt")){print "Error"; exit} cmd="cat ./pwhashes.txt | tr [A-Z] [a-z] | grep \"" reminder "\""; cmd | getline result; close(cmd); split(result,arr,":"); if(!length(arr[2])) print "Password not found"; else print "Password found: " arr[2]}'

Если при запросе произошла какая-нибудь ошибка (неважно — какая), будет выведено сообщение «Error».
Если пароль «чистый», то есть не находится в базе, будет выведено сообщение «Password not found».
Если же пароль «засвечен» в базе, то будет выведено сообщение «Password found: NNN». Где NNN — количество аккаунтов в базе, имеющих данный пароль.
Sign up to leave a comment.

Articles