[Перевод] DEFCON 17. Взлом 400 000 паролей, или как объяснить соседу по комнате, почему счёт за электричество увеличился. Часть 2

DEFCON 17. Взлом 400 000 паролей, или как объяснить соседу по комнате, почему счёт за электричество увеличился. Часть 1

Если вы не придерживаетесь никаких правил создания паролей, то пароль может выглядеть как простой список PHP. Люди ненавидят правила, ненавидят словосочетания и не хотят их использовать. Если дать им волю, они напечатают любой пустяковый пароль и будут считать, что дело сделано. В этом случае безопаснее, если они не будут использовать простые базовые слова, поэтому лучше использовать большие входные словари.

wxafib1nwypfm2nhb97dhhvngtg.jpeg

Наибольший вклад в создание входных словарей внёс Себастьян Раво — он создал огромные списки слов из каждой статьи, содержащейся в Википедии, а также из аналогичных проектов. Если вы знаете какое-то слово, то вы создаёте для него статью в Википедии. Но то, что хорошо для Википедии, не всегда хорошо для создания безопасных паролей, поэтому если словарь действительно огромный, к нему невозможно применить множество различных правил. Вы можете ознакомиться со списком слов из Википедии в его блоге http://blog.sebastien.raveau.name/.

Если имеется политика создания паролей, то следует руководствоваться такими правилами:
лучше использовать в словарях небольшие тематические, специализированные списки слов,
лучшие словари основаны на ранее взломанных паролях.

Из соображений конфиденциальности я не могу предоставить вам список взломанных паролей, но поверьте, так же, как богатый становится ещё богаче, так и взломанный пароль становится сильнее, если вы видите, где была допущена ошибка при его создании и исправляете её.

Существуют списки таких паролей, и мы можем видеть, что в этих списках повторяются одни и те же пользователи, потому что они всюду использовали один и тот же пароль.

Будет полезно, если вы сможете извлечь основу из таких паролей. Например, пароль «TigerWoods1982» не должен быть слишком распространённым, зато люди постоянно используют пароль «TigerWoods». Поэтому вы можете извлечь это основное словосочетание «TigerWoods», чтобы создать на его основе надёжный пароль. На моём компакт-диске размещены некоторые инструменты, которые помогут вам сделать это намного легче.

Правила создания слов для паролей очень просты:

  • научитесь создавать новые слова на основе взломанных ранее паролей;
  • JtR хорошо взламывает только слабые пароли, именно для этого он разработан, но со сложными паролями он справляется хуже. Я сделал доступными для загрузки несколько моих правил создания паролей на основе JtR;
  • Minga также размещает ряд удобных онлайн инструментов для создания паролей: http://marc.info/? l=john-users&m=123820850908275&w=2, http://marc.info/? l=john-users&m=124053430313891&w=2


Однако вы должны будете разработать свои собственные правила, если хотите взламывать действительно сильные пароли. На моём CD имеется ещё один инструмент, который позволяет разбирать пароли на 2 разных набора.

Первый — это пароли, про которые мы знаем, как они были созданы, например, password123, и второй — это пароли, принцип создания которых нам не известен. Это очень хорошо, потому что вам не нужно перебирать 200 тысяч паролей типа password123 и потом пытаться придумать новые правила для их использования. Вы получите небольшой список, из которого увидите, например, что люди используют эмодзи для создания паролей, вставляя в слова смайлики. Вы узнаете новые комбинации клавиш, и это поможет вам создавать надёжные пароли намного легче.

Как я уже говорил, я решил отойти от встроенных правил JtR и разработал свой собственный способ генерации «отгадок». Хорошие результаты приносит метод «вероятностного взламывания паролей», probabilistic cracking. Я уже говорил, что наши реакции универсальны: мы пробегаем нечто глазами, киваем, говорим, что оно выглядит отлично, а про себя думаем: «что за академическая фигня»! Но я хочу сказать, что мы действительно хотели научиться создавать наиболее стойкие к взлому пароли, поэтому старались сделать всё наилучшим образом.

Известно, что некоторые слова нравятся людям больше других, например, password, monkey, football. Известно также, что люди предпочитают определённые правила «коверкания» паролей, добавляя 123, 007, $$$ или заглавные первые буквы слов. Чтобы усилить стойкость, мы должны оптимизировать правила образования паролей нетипичным способом. Это достаточно трудоёмкий процесс. Из электронной рассылки John the Ripper я узнал о человеке, который создал 10 или 12 тысяч файлов конфигурации правил JtR, стараясь извлечь из этого максимальные преимущества.

_ws1u9mo23l4d1_nw6aep6fepa8.jpeg

Я намного ленивее его, поэтому не стал этим заниматься. Я просто постарался сделать более простую оптимизацию процесса создания паролей и автоматизировать процесс. Мы обрабатываем всю информацию и определяем вероятность использования определённых слов и комбинаций, то есть ранжируем пароли по вероятности угадывания. А затем мы используем для создания пароля наименее вероятную комбинацию слов и «коверканий». Итак, вот что мы должны попробовать, чтобы сделать наши пароли сильнее:

  • использовать распространённое слово с нераспространённым способом искажения пароля, например 13! password13!;
  • использовать редкое слово с распространённым «коверканием», например, zibra123.


С этим способом мы достигли успеха. Если вы не можете разбить пароли на два набора по оговоренным выше признакам, у нас имеется программа-трейнер, которая автоматически анализирует список известных паролей и генерирует то, что мы называем «грамматика». В этой «грамматике» содержится вся необходимая информация, так что мы используем две таких «грамматики» для исследования возможностей взлома паролей.

Благодаря этому мы определяем вероятность использования всего, что у нас есть: слов в словарях, правил «коверкания» слов в паролях, алгоритмов расположения символов типа «две цифры в конце пароля 12», в противовес которому можно использовать правило «две цифры в конце пароля 21», и тому подобное.

Я могу продолжать говорить об этом, но лучше покажу наглядный пример того, как это работает. Я не жду, что вы прочитаете всё изображенное на слайде, поэтому расскажу, что собираюсь сделать. Я собираюсь запустить наш вероятностный взломщик паролей и «скормить» ему два разных входных словаря. Фактически он поддерживает до 10 словарей, но лучше не сходить с ума.

wuhrojnlqjqm5tgqrm0mtkrnuyw.jpeg

Один входной словарь содержит самые распространённые пароли, поэтому обладает высокой вероятностью угадывания. Второй словарь содержит наименее распространённые слова, и взломщик паролей будет переключаться между этими двумя словарями. После этого я «солью» результат прямо в John the Ripper, потому что, как я уже сказал, хочу создать свой собственный алгоритм хеширования паролей.

К сожалению, мы не можем использовать здесь список PHP, опять-таки по причине конфиденциальности, потому что нельзя демонстрировать взлом паролей перед всеми, наш институт не признает это законным. Поэтому я продемонстрирую работу взломщика на примере списка MySpace, который был раскрыт 2 года назад. Все пароли в нём были представлены в виде обычного текста, так что вы сможете их прочесть, и эта операция не представляет дополнительной опасности.

Мы использовали хеширование MD5, это точно такой же алгоритм хеширования, что используется для списка phpbb, так что здесь в значительной мере имитируется атака на phpbb. Сюда загружено около 17000 хешей паролей без «изюминок», и мы фактически разделили их списки на несколько разных частей для типичного машинного обучения.

Прямо сейчас на экране вы видите, с какой скоростью происходит взлом паролей, поэтому, вероятно, следует использовать алгоритм более медленного хеширования. Здесь ещё и происходит переключение между разными правилами, так что это не просто попытки типа «попробуйте 1 цифру, попробуйте 2 цифры» и так далее.

Вы видите, что пароли имеют разный размер, обычно люди используют длину от 6 до 8 символов и иногда встречаются восклицательные знаки в конце пароля.

Есть ещё несколько видов оптимизации, которые мы пытаемся встроить в этот алгоритм, потому что наша работа ещё продолжается. Одна из таких вещей — это включение в процесс целевых атак, когда вместо взлома какого-то большого старого пароля программа пытается взломать пароль конкретного пользователя.

reekhzsx_uvj2hih65wnpsa-hhe.jpeg

Всё, что вам требуется для целевой атаки, это использовать другой входной словарь, например, имена детей, дни рождения, почтовые индексы и так далее.

Вы видите, что процесс взлома на экране немного замедлился, это особенности дизайна, если взлом происходит достаточно просто, то процесс ускоряется. Но так как он основан на вероятностной модели, то быстрее угадываются пароли с наибольшей вероятностью, а пароли с наименьшей вероятностью взламываются немного медленнее, так здесь используется большее число «отгадок».

Вы также заметили, что в данном списке в основном довольно слабые пароли. Это объясняется тем, что мы как раз начинаем сессию взлома паролей и не хотим использовать слишком сложные или расширенные пароли.

Если у вас имеется стратегия взлома, в которой вы собираете атаковать только надежные пароли, вам нужно создать соответствующий список на основе таких паролей и начинать сессию со взлома только сильных паролей.

Итак, наша программа закончила свою работу. Процесс взлома занял 2 минуты 30 секунд, за это время было взломано, или угадано 5586 паролей, что составляет немногим более 30% всего имеющегося количества.

Существует сотня причин, почему я считаю, что политику создания паролей необходимо изменить, не потому, что само использование паролей является чем-то отсталым и глупым. Просто я на самом деле считаю, что они наносят нашей безопасности больше вреда, чем пользы. Особенно если мы говорим об оффлайн атаках, которым нельзя противостоять, если не изменять свой пароль каждые 2 минуты.

А сейчас я хочу поговорить о технике атак Brute Force. Эти атаки действительно могут нанести большой ущерб, если вы не позаботитесь о защите.

Они довольно мощные, но противостоять им можно, нужно просто использовать свои мозги. Для этого нужно сделать анализ частоты применения букв и символов, чтобы узнать, какие буквы или символы используются в паролях относительно редко.

r4m8mwaccfmodlrrgfqkbp2t4xg.jpeg

Наверняка вы все слышали об этом, поэтому попробуйте, например, чаще использовать букву Q, которая встречается в паролях довольно редко. Ваш алгоритм взлома не должен стремиться взломать все пароли, нужно сосредоточиться на наиболее вероятных.

Более «продвинутым» вариантом является модель Маркова. Она основана на условной вероятности букв, например, если у вас имеются подряд две буквы Q, вы более защищены, чем когда в вашем наборе букв имеется U, потому что U обычно следует в словах за буквой Q. Она также предполагает, что пароль создан в «человеческой» манере, то есть если некая буква расположена в этом месте слова, то за ней следует другая буква, которая чаще всего используется именно в таком буквенном сочетании. Модель Маркова используется алгоритмом взлома JtR, который учитывает, что за буквой Q в «человеческих словах» обычно следует U или W, но не S или Z. Не подумайте, что я изо всех сил пытаюсь сосватать тут вам «Джона Потрошителя», но это действительно хорошая программа.

Мы можем ещё более углубить логику Brute Force, применив целевые атаки. Они основаны на использовании таких принципов создания паролей:

  • люди склонны начинать пароль с большой буквы;
  • обычно они добавляют цифры в конце пароля;
  • по этой же причине они любят использовать в паролях сочетания php или phpbb.

Эти же принципы можно использовать для «словарных атак». Есть очень хороший инструмент для проверки эффективности атак под названием «Crunch», его можно найти на форуме программистов remote-exploit.com.

Хочу привести вам пример взлома «сильного» пароля с помощью атаки Brute Force. Для этого я сначала запускаю JtR и он начинает генерировать «догадки», основанные на строчных буквах, используя модель Маркова.

bet_lguu4sb9aek6s25-zowdrry.jpeg

Вы видите, что в этом списке много реальных слов, таких как dog, starless, marine, которые имеются во входном словаре. Но благодаря модели Маркова он также генерирует слова, которые там отсутствуют, например, stech. Но так как мы разгадываем сильный пароль, необходимо применить некоторую дополнительную логику. Поэтому я использую скрипты, которые предусматривают заглавную букву в начале слова, а также добавляют специальные символы и цифры в конце слова.

_o-ofl_htdnyjftkcydejeq3rt4.jpeg

Как вы видите, эти «отгадки» выглядят как настоящий надёжный пароль. Теперь, когда вы знаете о политике создания паролей, вам следует нажать на кнопку «выключить лень» и потратить 5 минут, чтобы придать этим словам определённый размер, так как они выглядят слишком короткими.

Мы также можем попробовать «закачать» всё обратно в JtR и попробовать взломать хеши.

nl4yheplmm0aw-jqfujjs7j2zm4.jpeg

В начале презентации я подробно рассказал о взломе списка паролей пользователей сайта phpbb.com, а теперь хочу поговорить немного о взломе списка Web Hosting Talk.

etgn7i1njngn6812w-df4vbnale.jpeg

Его взломали 21 марта 2009 года, по крайней мере, в это время в сети был опубликован список, и нападавший оказался реальным подлецом, потому что разместил в открытом доступе около 200 тысяч логинов и паролей и другую конфиденциальную информацию пользователей. Он украл хеши, а затем удалил сам сайт и все резервные копии. Это было огромным ударом для системного администратора.

ynluisbkbt-jfrkpi7hi_r1f7rc.jpeg

После этого владельцы сайта сообщили, что их взломали, но пользователям не стоит волноваться, потому что теперь они в безопасности. При этом они высказали одну мысль, которая в действительности была обманчива и опасна, цитирую слова координатора iNET сообщества: «Пароли имеют «изюминки», и будет беспрецедентным событием, если кто-то сможет их перепроектировать. Я периодически меняю свой пароль, так что, возможно, сегодня удачный день для этого».

Это выглядит так, как будто я говорю: «привет, ребята, вы знаете, копировальная комната горит, но не волнуйтесь, там ведь есть система пожаротушения, поэтому совершенно невозможно, чтобы это здание сгорело дотла. Но иногда мне нравится выходить на улицу в обеденный перерыв, так что вы тоже можете пока погулять снаружи, если захотите». Это одна из причин, почему я решил взломать здесь этот список.

Далее координатор опубликовал такое высказывание: «Ни одна кредитная карта пользователей или аккаунт PayPay не были взломаны». Вероятно, только потому, что хакеру этого не понадобилось. А дальше случился новый провал — этот же самый сайт был повторно взломан этим же хакером 7 апреля, и на этот раз он опубликовал в сети примерно 202 тысячи хешей паролей и номера 2218 кредитных карт.

Я никогда не зайду на сайт, администрация которого заявляет: «да, у нас украли номера двух тысяч кредитных карт, но остальные-то номера в безопасности»!

Хочу немного прояснить ситуацию. Людей взламывают, это факт, и я не хочу винить в этом Web Hosting Talk. Попытаться спасти и вытащить что-то из вашей системы сразу после того, как она была взломана — сложная проблема, особенно если пользователи неоднократно взывали к вам по поводу необходимости делать резервные копии системы. Поэтому я считаю главной проблемой Web Hosting Talk то, что они преуменьшали риски, с которыми столкнулись их пользователи. И вести себя так с их стороны было очень опасно.

Потому что вы, по крайней мере, должны предоставить пользователям что-то вроде тикающих часов, которые указывали бы на необходимость зайти и изменить свой пароль, и не только для данного сайта, но и для всех остальных сайтов, так быстро, как только возможно. Это очень важно, потому что вскоре я что обнаружил интересный факт по поводу этого сайта: после первой атаки свои пароли изменили 1348 пользователей, что составило всего 0,6% от общего числа зарегистрированных на сайте!

Вот почему хакер имел прекрасную возможность вернуться и повторно взломать сайт, используя те же самые неизменённые учётные данные пользователей, или даже использовать их для взлома других сайтов, где они тоже были зарегистрированы.

Я хотел выяснить, был ли хеш этого сайта действительно настолько слабым, и обратился к Google, чтобы узнать, какой ПО использует данный сайт. Оказалось, что это форумный движок vBulletin, написанный на языке PHP и использующий для ведения своей базы данных сервер MySQL. «Гугл» также ответил на вопрос, какой алгоритм хеширования использует данный сайт — это двойное хеширование типа MD5 (MD5(Password).salt). То есть вы берёте пароль пользователя, хешируете его с помощью MD5 и ещё раз хешируете полученный хеш пароля с помощью того же MD5. Я не знал, как «Джон Потрошитель» справится с таким хешированием, поэтому написал свой собственный «взломщик». Но я не пытался взломать настоящие пароли этого сайта, так как это заняло бы не несколько недель, а просто решил протестировать в списке наличие пароля «password» и тут же взломал 1109 человек, которые использовали в качестве пароля слово «пароль».

nwjrlpix4wwewvzcmac8cscqzc4.jpeg

Я хочу сказать, что «изюминка» в пароле действительно становится проблемой для атакующего и потому важна для пользователя. Я продолжаю «рекламировать» пароли с разными «изюминками» потому, что для взломщика это означало бы необходимость проверять «догадками» хеш каждого пароля для каждого отдельного пользователя. Если взять для примера сайт phpbb, где использовалось одностадийное хеширование MD5, то хакер потратил на его взлом списка паролей около 1 часа. Для подобной атаки на список паролей Web Hosting Talk, если бы они были защищены «изюминками», понадобилось бы 200 тысяч часов.

Что ещё нужно сказать? Как вы знаете, я потратил со своим компьютером «Dell» почти неделю на взлом 34% хешей 200 тысяч пользователей phpbb. Причём большая часть этих паролей содержалась в списке уже взломанных паролей с других сайтов, и для них не использовалось «коверкание». Скажите, вам известны люди, которые используют один и тот же пароль более чем на одном сайте? Думаю, что да.

Нужно объяснить людям, что «изюминки» не защитят индивидуальных пользователей, если какой-то идиот из их коллег опубликует в интернете хеш своего пароля, заявляя, что его невозможно взломать, потому что в нём есть «изюминка». Потому что хакер, получив эту информацию, не станет пытаться взламывать каждый из 200 паролей, а возьмётся за взлом одного этого хеша. При этом станет возможно организовать целевую атаку на конкретных пользователей, у которых в адресе электронной почты содержатся слова «admin» или «webmaster».

Хакер попробует атаковать этих пользователей, потому что есть хороший шанс, что эти люди используют такой пароль для своего сайта. Так что помните, что, даже создав пароль с «изюминкой», не стоит считать, что вы полностью обезопасили себя от взлома.

Благодарю за внимание, свои вопросы вы можете присылать мне на почту weir@cs.fsu.edu

Далее следуют несколько слайдов с компакт-диска докладчика, которые не были включены в видеопрезентацию по причине нехватки времени.

Взлом проходных фраз: проблема состоит в том, что обычно у нас нет достаточно примеров проходных фраз типа «It«s fun to try the impossible»! Поэтому рекомендуется использовать входной словарь проходных фраз такого вида:»! It«s fun to try the impossible!» или »! ifttti!».

При создании проходных фраз используйте подход, который предлагает игра Mad Libs, то есть формируйте неожиданные словосочетания.

Взлом графических паролей: пользователи иногда используют в качестве паролей кодировку ASCII, например:


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5–2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

VPS (KVM) E5–2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.

Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5–2650v4 128GB DDR4 6×480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5–2650 v4 стоимостью 9000 евро за копейки?

© Habrahabr.ru