Хеш-функция, что это такое?
Сегодня я хотел бы рассказать о том, что из себя представляет хеш-функция, коснуться её основных свойств, привести примеры использования и в общих чертах разобрать современный алгоритм хеширования SHA-3, который был опубликован в качестве Федерального Стандарта Обработки Информации США в 2015 году.
Общие сведения
Криптографическая хеш-функция — это математический алгоритм, который отображает данные произвольного размера в битовый массив фиксированного размера.
Результат, производимый хеш-функцией, называется «хеш-суммой» или же просто «хешем», а входные данные часто называют «сообщением».
Для идеальной хеш-функции выполняются следующие условия:
а) хеш-функция является детерминированной, то есть одно и то же сообщение приводит к одному и тому же хеш-значению
b) значение хеш-функции быстро вычисляется для любого сообщения
c) невозможно найти сообщение, которое дает заданное хеш-значение
d) невозможно найти два разных сообщения с одинаковым хеш-значением
e) небольшое изменение в сообщении изменяет хеш настолько сильно, что новое и старое значения кажутся некоррелирующими
Давайте сразу рассмотрим пример воздействия хеш-функции SHA3-256.
Число 256 в названии алгоритма означает, что на выходе мы получим строку фиксированной длины 256 бит независимо от того, какие данные поступят на вход.
На рисунке ниже видно, что на выходе функции мы имеем 64 цифры шестнадцатеричной системы счисления. Переводя это в двоичную систему, получаем желанные 256 бит.
Любой заинтересованный читатель задаст себе вопрос: «А что будет, если на вход подать данные, бинарный код которых во много раз превосходит 256 бит?»
Ответ таков: на выходе получим все те же 256 бит!
Дело в том, что 256 бит — это соответствий, то есть различных входов имеют свой уникальный хеш.
Чтобы прикинуть, насколько велико это значение, запишем его следующим образом:
Надеюсь, теперь нет сомнений в том, что это очень внушительное число!
Поэтому ничего не мешает нам сопоставлять длинному входному массиву данных массив фиксированной длины.
Свойства
Криптографическая хеш-функция должна уметь противостоять всем известным типам криптоаналитических атак.
В теоретической криптографии уровень безопасности хеш-функции определяется с использованием следующих свойств:
Pre-image resistance
Имея заданное значение h, должно быть сложно найти любое сообщение m такое, что
Second pre-image resistance
Имея заданное входное значение , должно быть сложно найти другое входное значение такое, что
Collision resistance
Должно быть сложно найти два различных сообщения и таких, что
Такая пара сообщений и называется коллизией хеш-функции
Давайте чуть более подробно поговорим о каждом из перечисленных свойств.
Collision resistance. Как уже упоминалось ранее, коллизия происходит, когда разные входные данные производят одинаковый хеш. Таким образом, хеш-функция считается устойчивой к коллизиям до того момента, пока не будет обнаружена пара сообщений, дающая одинаковый выход. Стоит отметить, что коллизии всегда будут существовать для любой хеш-функции по той причине, что возможные входы бесконечны, а количество выходов конечно. Хеш-функция считается устойчивой к коллизиям, когда вероятность обнаружения коллизии настолько мала, что для этого потребуются миллионы лет вычислений.
Несмотря на то, что хеш-функций без коллизий не существует, некоторые из них достаточно надежны и считаются устойчивыми к коллизиям.
Pre-image resistance. Это свойство называют сопротивлением прообразу. Хеш-функция считается защищенной от нахождения прообраза, если существует очень низкая вероятность того, что злоумышленник найдет сообщение, которое сгенерировало заданный хеш. Это свойство является важным для защиты данных, поскольку хеш сообщения может доказать его подлинность без необходимости раскрытия информации. Далее будет приведён простой пример и вы поймете смысл предыдущего предложения.
Second pre-image resistance. Это свойство называют сопротивлением второму прообразу. Для упрощения можно сказать, что это свойство находится где-то посередине между двумя предыдущими. Атака по нахождению второго прообраза происходит, когда злоумышленник находит определенный вход, который генерирует тот же хеш, что и другой вход, который ему уже известен. Другими словами, злоумышленник, зная, что пытается найти такое, что
Отсюда становится ясно, что атака по нахождению второго прообраза включает в себя поиск коллизии. Поэтому любая хеш-функция, устойчивая к коллизиям, также устойчива к атакам по поиску второго прообраза.
Неформально все эти свойства означают, что злоумышленник не сможет заменить или изменить входные данные, не меняя их хеша.
Таким образом, если два сообщения имеют одинаковый хеш, то можно быть уверенным, что они одинаковые.
В частности, хеш-функция должна вести себя как можно более похоже на случайную функцию, оставаясь при этом детерминированной и эффективно вычислимой.
Применение хеш-функций
Рассмотрим несколько достаточно простых примеров применения хеш-функций:
• Проверка целостности сообщений и файлов
Сравнивая хеш-значения сообщений, вычисленные до и после передачи, можно определить, были ли внесены какие-либо изменения в сообщение или файл.
• Верификация пароля
Проверка пароля обычно использует криптографические хеши. Хранение всех паролей пользователей в виде открытого текста может привести к массовому нарушению безопасности, если файл паролей будет скомпрометирован. Одним из способов уменьшения этой опасности является хранение в базе данных не самих паролей, а их хешей. При выполнении хеширования исходные пароли не могут быть восстановлены из сохраненных хеш-значений, поэтому если вы забыли свой пароль вам предложат сбросить его и придумать новый.
• Цифровая подпись
Подписываемые документы имеют различный объем, поэтому зачастую в схемах ЭП подпись ставится не на сам документ, а на его хеш. Вычисление хеша позволяет выявить малейшие изменения в документе при проверке подписи. Хеширование не входит в состав алгоритма ЭП, поэтому в схеме может быть применена любая надежная хеш-функция.
Предлагаю также рассмотреть следующий бытовой пример:
Алиса ставит перед Бобом сложную математическую задачу и утверждает, что она ее решила. Боб хотел бы попробовать решить задачу сам, но все же хотел бы быть уверенным, что Алиса не блефует. Поэтому Алиса записывает свое решение, вычисляет его хеш и сообщает Бобу (сохраняя решение в секрете). Затем, когда Боб сам придумает решение, Алиса может доказать, что она получила решение раньше Боба. Для этого ей нужно попросить Боба хешировать его решение и проверить, соответствует ли оно хеш-значению, которое она предоставила ему раньше.
Теперь давайте поговорим о SHA-3.
SHA-3
Национальный институт стандартов и технологий (NIST) в течение 2007—2012 провёл конкурс на новую криптографическую хеш-функцию, предназначенную для замены SHA-1 и SHA-2.
Организаторами были опубликованы некоторые критерии, на которых основывался выбор финалистов:
Способность противостоять атакам злоумышленников
• Производительность и стоимость
Вычислительная эффективность алгоритма и требования к оперативной памяти для программных реализаций, а также количество элементов для аппаратных реализаций
• Гибкость и простота дизайна
Гибкость в эффективной работе на самых разных платформах, гибкость в использовании параллелизма или расширений ISA для достижения более высокой производительности
В финальный тур попали всего 5 алгоритмов:
Победителем и новым SHA-3 стал алгоритм Keccak.
Давайте рассмотрим Keccak более подробно.
Keccak
Хеш-функции семейства Keccak построены на основе конструкции криптографической губки, в которой данные сначала «впитываются» в губку, а затем результат Z «отжимается» из губки.
Любая губчатая функция Keccak использует одну из семи перестановок которая обозначается , где
перестановки представляют собой итерационные конструкции, состоящие из последовательности почти одинаковых раундов. Число раундов зависит от ширины перестановки и задаётся как где
В качестве стандарта SHA-3 была выбрана перестановка Keccak-f[1600], для неё количество раундов
Далее будем рассматривать
Давайте сразу введем понятие строки состояния, которая играет важную роль в алгоритме.
Строка состояния представляет собой строку длины 1600 бит, которая делится на и части, которые называются скоростью и ёмкостью состояния соотвественно.
Соотношение деления зависит от конкретного алгоритма семейства, например, для SHA3-256
В SHA-3 строка состояния S представлена в виде массива слов длины бит, всего бит. В Keccak также могут использоваться слова длины , равные меньшим степеням 2.
Алгоритм получения хеш-функции можно разделить на несколько этапов:
• С помощью функции дополнения исходное сообщение M дополняется до строки P длины кратной r
• Строка P делится на n блоков длины
• «Впитывание»: каждый блок дополняется нулями до строки длиной бит (b = r+c) и суммируется по модулю 2 со строкой состояния , далее результат суммирования подаётся в функцию перестановки и получается новая строка состояния , которая опять суммируется по модулю 2 с блоком и дальше опять подаётся в функцию перестановки . Перед началом работы криптографической губки все элементыравны 0.
• «Отжимание»: пока длина результата меньше чем , где — количество бит в выходном массиве хеш-функции, первых бит строки состояния добавляется к результату . После каждой такой операции к строке состояния применяется функция перестановок и данные продолжают «отжиматься» дальше, пока не будет достигнуто значение длины выходных данных .
Все сразу станет понятно, когда вы посмотрите на картинку ниже:
Функция дополнения
В SHA-3 используется следующий шаблон дополнения 10. 1: к сообщению добавляется 1, после него от 0 до r — 1 нулевых бит и в конце добавляется 1.
r — 1 нулевых бит может быть добавлено, когда последний блок сообщения имеет длину r — 1 бит. В этом случае последний блок дополняется единицей и к нему добавляется блок, состоящий из r — 1 нулевых бит и единицы в конце.
Если длина исходного сообщения M делится на r, то в этом случае к сообщению добавляется блок, начинающийся и оканчивающийся единицами, между которыми находятся r — 2 нулевых бит. Это делается для того, чтобы для сообщения, оканчивающегося последовательностью бит как в функции дополнения, и для сообщения без этих бит значения хеш-функции были различны.
Первый единичный бит в функции дополнения нужен, чтобы результаты хеш-функции от сообщений, отличающихся несколькими нулевыми битами в конце, были различны.
Функция перестановок
Базовая функция перестановки состоит из раундов по пять шагов:
Тета, Ро, Пи, Хи, Йота
Далее будем использовать следующие обозначения:
Так как состояние имеет форму массива , то мы можем обозначить каждый бит состояния как
Обозначим результат преобразования состояния функцией перестановки
Также обозначим функцию, которая выполняет следующее соответствие:
— обычная функция трансляции, которая сопоставляет биту бит ,
где — длина слова (64 бит в нашем случае)
Я хочу вкратце описать каждый шаг функции перестановок, не вдаваясь в математические свойства каждого.
Шаг
Эффект отображения можно описать следующим образом: оно добавляет к каждому биту побитовую сумму двух столбцов и
Схематическое представление функции:
Шаг
Отображение направлено на трансляции внутри слов (вдоль оси z).
Проще всего его описать псевдокодом и схематическим рисунком:
Шаг
Шаг представляется псевдокодом и схематическим рисунком:
Шаг
Шаг является единственный нелинейным преобразованием в
Псевдокод и схематическое представление:
Шаг
Отображение состоит из сложения с раундовыми константами и направлено на нарушение симметрии. Без него все раунды были бы эквивалентными, что делало бы его подверженным атакам, использующим симметрию. По мере увеличения раундовые константы добавляют все больше и больше асимметрии.
Ниже приведена таблица раундовых констант для бит
Все шаги можно объединить вместе и тогда мы получим следующее:
Где константы являются циклическими сдвигами и задаются таблицей:
Итоги
В данной статье я постарался объяснить, что такое хеш-функция и зачем она нужна
Также в общих чертах мной был разобран принцип работы алгоритма SHA-3 Keccak, который является последним стандартизированным алгоритмом семейства Secure Hash Algorithm
Надеюсь, все было понятно и интересно
Всем спасибо за внимание!
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей Автор: Kody Хэши обычно используются для хранения конфиденциальной информации, как, например, учетных записей, которые не должны находиться в открытом виде. При помощи утилит наподобие Hashcat мы можем взломать эти хэши однако только в случае, если знаем алгоритм генерации. Используя инструменты навроде скрипта hash-identifier, можно легко определить тип любых хэшей, чтобы затем указать правильный режим при работе с Hashcat. Помимо взлома хэшей hash-identifier также полезен для идентификации алгоритма, используемого при выдаче контрольной суммы для загрузки файлов. Кроме того, этот скрипт помогает определить, к какому приложению относится хэшированный файл или значение (например, SQL базе или какому-либо другому формату, специфичному для конкретного поставщика). Что такое хэш и как расшифровать пароль? Как было сказано ранее, пароли, извлекаемые из базы данных или компьютера, обычно хранятся в виде хэшей, а не в открытом виде. Функция хэширования преобразует пароли в хаотичный набор символов и чисел, которые не должны быть обратимы обратно в пароль. Однако два или более одинаковых пароля, при использовании одной и той же функции, будут иметь один и тот же хэш. Соответственно, при помощи этой функции можно получить набор хэшей для списка паролей, а затем использовать этот перечень для обнаружения подходящего пароля. Подобным образом работает множество утилит для взлома. Хотя хранение пароля в виде хэша лучше, чем в открытом виде, вероятность взлома все равно остается, если у злоумышленника хороший набор правил или словарь, которые можно использовать в Hashcat или другой подобной программе. https://www.youtube.com/watch?v=aC7Pjjr6NcM&feature=emb_title Если вы много работаете с хэшами, то легко увидите разницу между разными и часто используемыми типами. Например, сможете ли вы на глаз определить, к какому типу относятся хэши, указанные ниже?
8743b52063cd84097a65d1633f5c74f5 b89eaac7e61417341b710b727768294d0e6a277b
Хотя вы могли видеть и тот и другой хэш ранее, ответ на вопрос, какой хэш — MD5, а какой — SHA1, не столь очевиден. Еще большая путаница может возникнуть со схожими типами хэшей, относящиеся к разным режимам в Hashcat. В случае с хэшами, приведенными выше, этот факт имеет чрезвычайно важное значение. При использовании Hashcat для взлома этого хэша мы должны установить опцию –m с целью работы в нужном режиме. Для взлома хэша MD5 мы бы указали режим 0.
~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force hashcat (v4.0.1) starting. OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU 8743b52063cd84097a65d1633f5c74f5:hashcat
В итоге, установив нужный алгоритм и используя хороший словарь, после расшифровки хэша мы получили слово «hashcat». Какие хэши поддерживаются? На данный момент Hashcat в состоянии расшифровать большое количество хэшей. В репозитории на GitHub для утилиты hash-identifier список поддерживаемых хэшей очень внушителен:
ADLER-32 CRC-16 CRC-16-CCITT CRC-32 CRC-32B DES (Unix) Domain Cached Credentials FCS-16 GHash-32-3 GHash-32-5 GOST R 34.11-94 Haval-128 Haval-160 Haval-192 110080 Haval-224 114080 Haval-256 Lineage II C4 MD2 MD4 MD5 MD5 ($pass.$salt) - Joomla MD5 (APR) MD5 (Half) MD5 (HMAC(WordPress)) MD5 (Middle) MD5 (phpBB3) MD5 (Unix) MD5 (WordPress) MySQL MySQL 160bit - SHA-1(SHA-1($pass)) MySQL5 - SHA-1(SHA-1($pass)) NTLM RAdmin v2.x RipeMD-128 RipeMD-160 RipeMD-256 RipeMD-320 SAM - (LM_hash:NT_hash) SHA-1 SHA-1 (Django) SHA-1 (MaNGOS) SHA-224 SHA-256 SHA-256 (Django) SHA-384 SHA-384 (Django) SHA-512 SNEFRU-128 SNEFRU-256 Tiger-128 Tiger-160 Tiger-192 XOR-32 Whirlpool
и другие… Что понадобится Для начала нужно установить Python3 на вашем компьютере (есть версии для разных платформ). Кроме того, вам понадобится утилита Hashcat, которую можно загрузить, используя команду apt install hashcat, после обновления системы при помощи команд apt update и apt upgrade. Если вы хотите сгенерировать ваши собственные хэши для тестового взлома, то можете воспользоваться командой в формате echo —n PLAINTEXT | (HASHTYPE)sum. Например, при создании хэша SHA1 для слова «nullbyte» я запустил следующую команду:
~$ echo -n nullbyte | sha1sum 32c0ced56f1fe08583bdb079d85a35a81995018c -
Шаг 1. Загрузка и установка Hash-Identifier Установить скрипт, написанный на Python, – очень просто. Откройте терминал и запустите следующую команду:
~$ git clone https://github.com/blackploit/hash-identifier.git Cloning into 'hash-identifier'. remote: Enumerating objects: 21, done. remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21 Unpacking objects: 100% (21/21), done.
Затем посмотрите содержимое директории hash-identifier:
~$ cd hash-identifier ~/hash-identifier$ ls hash-id.py README.md screenshots
Вы должны обнаружить файл hash—id.py, который можно запустить при помощи команды ниже:
~/hash-identifier$ python3 hash-id.py ######################################################################### # __ __ __ ______ _____ # # /\ \/\ \ /\ \ /\__ _\ /\ _ `\ # # \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ # # \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ # # \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ # # \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ # # \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 # # By Zion3R # # www.Blackploit.com # # Root@Blackploit.com # ######################################################################### -------------------------------------------------- HASH:
Шаг 2. Идентификация неизвестных хэшей В качестве пробного подхода при помощи hash-identifier попробуем опознать следующие пять неизвестных хэшей:
Hash 1: 7196759210defdc0 Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256) Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1) Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512) Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)
Для начала в командной строке вводим первую строку и быстро получаем результат, что скорее всего имеем дело с хэшем, используемым в MySQL, который попробуем взломать чуть позже.
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Второй хэш, показанный ниже, опознается как SHA256. Другой вероятный вариант — Haval256.
HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d Possible Hashs: [+] SHA-256 [+] Haval-256 Least Possible Hashs: [+] GOST R 34.11-94 [+] RipeMD-256 [+] SNEFRU-256 [+] SHA-256(HMAC) [+] Haval-256(HMAC) [+] RipeMD-256(HMAC) [+] SNEFRU-256(HMAC) [+] SHA-256(md5($pass)) [+] SHA-256(sha1($pass))
Третий хэш опознается как SHA1:
HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Четвертый хэш опознается как SHA512:
HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 Possible Hashs: [+] SHA-512 [+] Whirlpool Least Possible Hashs: [+] SHA-512(HMAC) [+] Whirlpool(HMAC)
Наконец, пятый и последний хэш опознается как MD5:
HASH: 5f804b61f8dcf70044ad8c1385e946a8 Possible Hashs: [+] MD5 [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username))) Least Possible Hashs: [+] RAdmin v2.x [+] NTLM [+] MD4 [+] MD2 [+] MD5(HMAC) [+] MD4(HMAC) [+] MD2(HMAC) [+] MD5(HMAC(WordPress)) [+] Haval-128 [+] Haval-128(HMAC) [+] RipeMD-128 [+] RipeMD-128(HMAC) [+] SNEFRU-128 [+] SNEFRU-128(HMAC) [+] Tiger-128 [+] Tiger-128(HMAC) [+] md5($pass.$salt) [+] md5($salt.$pass) [+] md5($salt.$pass.$salt) [+] md5($salt.$pass.$username) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($salt.$pass)) [+] md5($salt.md5(md5($pass).$salt)) [+] md5($username.0.$pass) [+] md5($username.LF.$pass) [+] md5($username.md5($pass).$salt) [+] md5(md5($pass)) [+] md5(md5($pass).$salt) [+] md5(md5($pass).md5($salt)) [+] md5(md5($salt).$pass) [+] md5(md5($salt).md5($pass)) [+] md5(md5($username.$pass).$salt) [+] md5(md5(md5($pass))) [+] md5(md5(md5(md5($pass)))) [+] md5(md5(md5(md5(md5($pass))))) [+] md5(sha1($pass)) [+] md5(sha1(md5($pass))) [+] md5(sha1(md5(sha1($pass)))) [+] md5(strtoupper(md5($pass)))
Все прошло без особых проблем. Следующий шаг – поиск нужного режима, соответствующего обнаруженному типу, который будет указываться в Hashcat во время взлома. Шаг 3. Подбор режима в Hashcat При поиске нужного режима мы можем взглянуть на огромный список хэшей, поддерживаемых в Hashcat. Сокращенный вариант с наиболее популярными типами приведен ниже:
Hash-Mode Hash-Name Example 0 MD5 8743b52063cd84097a65d1633f5c74f5 10 md5($pass.$salt) 01dfae6e5d4d90d9892622325959afbe:7050461 20 md5($salt.$pass) f0fda58630310a6dd91a7d8f0a4ceda2:4225637426 30 md5(utf16le($pass).$salt) b31d032cfdcf47a399990a71e43c5d2a:144816 40 md5($salt.utf16le($pass)) d63d0e21fdc05f618d55ef306c54af82:13288442151473 50 HMAC-MD5 (key = $pass) fc741db0a2968c39d9c2a5cc75b05370:1234 60 HMAC-MD5 (key = $salt) bfd280436f45fa38eaacac3b00518f29:1234 100 SHA1 b89eaac7e61417341b710b727768294d0e6a277b 110 sha1($pass.$salt) 2fc5a684737ce1bf7b3b239df432416e0dd07357:2014 120 sha1($salt.$pass) cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024 130 sha1(utf16le($pass).$salt) c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225 140 sha1($salt.utf16le($pass)) 5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872 150 HMAC-SHA1 (key = $pass) c898896f3f70f61bc3fb19bef222aa860e5ea717:1234 160 HMAC-SHA1 (key = $salt) d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234 200 MySQL323 1EAFFED54F552AA5 300 MySQL4.1/MySQL5 fcf7c1b8749cf99d88e5f34271d636178fb5d130
В списке выше есть два примера, которые могут соответствовать первому хэшу (7196759210defdc0), рассмотренному нами в предыдущем шаге. На первый взгляд, режим 200 «MySQL323» наиболее соответствует. Подтвердить гипотезу можно при помощи проверки тестового хэша в hash-identifier.
HASH: 1EAFFED54F552AA5 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Точное совпадение с нужным хэшем:
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Если мы попробуем другой тип (300), то увидим, что результаты не совпадают.
HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130 Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Соответственно, еще раз убеждаемся, что режим 200 выбран правильно. Шаг 4. Расшифровка хэша при помощи Hashcat После идентификации типа хэша и подбора нужно режима можно приступать к расшифровке пароля в Hashcat. Вначале нужно создать словарь с паролями, который будет использоваться в Hashcat для атаки на хэш. В сети есть много доступных списков, например, RockYou, но в нашем случае мы будем создавать тестовый словарь example.dict с несколькими паролями. Если вы все еще находитесь внутри скрипта hash-identifier, нажмите Ctrl—C, а затем откройте файл в текстовом редакторе nano, запустив следующую команду:
~/hash-identifier$ nano example.dict
После добавления нескольких предполагаемых паролей, один из которых – «hashcat», нажимаем Ctrl—X для выхода из редактора и вводим Y, чтобы сохранить изменения в файле. Теперь мы можем использовать этот файл в качестве словаря вместе с ранее выбранным режимом для взлома хэша. Базовая команда выглядит примерно так:
sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict
Вместо значения HASH_VALUE указываем хэш 7196759210defdc0, вместо MODE_NUMBER – подобранный ранее режим 200. Результат работы показан ниже. Если у вас старая система, как в моем случае – нужно указать параметр –force.
~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force hashcat (v5.1.0) starting. OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU /usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 1 Applicable optimizers: * Optimized-Kernel * Zero-Byte * Not-Iterated * Single-Hash * Single-Salt Password length minimum: 0 Password length maximum: 31 Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. Watchdog: Temperature retain trigger disabled. * Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll' * Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while. Dictionary cache hit: * Filename. example.dict * Passwords.: 17 * Bytes. 76 * Keyspace. 17 - Device #1: autotuned kernel-accel to 1024 - Device #1: autotuned kernel-loops to 1 [s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small. This means that hashcat cannot use the full parallel power of your device(s). Unless you supply more work, your cracking speed will drop. For tips on supplying more work, see: https://hashcat.net/faq/morework Approaching final keyspace - workload adjusted. 7196759210defdc0:hashcat Session. hashcat Status. Cracked Hash.Type. MySQL323 Hash.Target. 7196759210defdc0 Time.Started. Mon Dec 9 17:00:25 2019 (0 secs) Time.Estimated. Mon Dec 9 17:00:25 2019 (0 secs) Guess.Base. File (example.dict) Guess.Queue. 1/1 (100.00%) Speed.Dev.#1. 0 H/s (0.03ms) Recovered. 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress. 17/17 (100.00%) Rejected. 0/17 (0.00%) Restore.Point. 0/17 (0.00%) Candidates.#1. wow -> again HWMon.Dev.#1. N/A Started: Mon Dec 9 17:00:17 2019 Stopped: Mon Dec 9 17:00:27 2019
В результате мы получили 7196759210defdc0:hashcat и смогли расшифровать хэш посредством сравнения с элементами словаря из файла example.dict. Заключение Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа. Хотя скрипт hash-identifier – не идеален, но позволяет без особых проблем опознать наиболее распространённые хэши и отличить разные типа хэшей, которые выглядят одинаково, но требуют разных режим работы в Hashcat. Даже если hash-identifier не уверен, с каким типом вы имеете дело, сравнение с результатами примеров с сайта Hashcat, может помочь в идентификации. Надеюсь это руководство, посвященное опознанию неизвестных хэшей, вам понравилось.
Управление паролями
Разбираемся, как правильно шифровать пароли и обеспечивать их безопасное хранение.
12 min read
Jun 6, 2019
Внимание! Данная статья является переводом самых полезных и интересных (на мой взгляд) моментов из этой публикации. Если понравится моя версия, очень рекомендую изучить оригинал!
Введение
Разработчикам приложений часто приходится заниматься разработкой систем учетных записей пользователей. Самый важный аспект системы учетных записей — защита паролей пользователей. Взлом баз данных — не самое редкое явление, поэтому нужно что-то предпринимать, чтобы обеспечить защиту личных данных пользователей, в том числе паролей, в подобных случаях. Самый лучший способ обеспечения безопасности паролей — их хеширование с использованием соли. (Или, как любят выражаться в русскоязычном сообществе — засаливание паролей.) В этой статье рассказывается, как делать это правильно, ведь простого хеширования в большинстве случаев не достаточно.
По интернету гуляет множество противоположных мнений о том, как правильно хешировать пароли. Многие из этих мнений ошибочны и их изъяны могут быть обнаружены только после нескольких лет спокойствий — до первой атаки, когда ваш проект наберет популярность и привлечет к себе внимание плохих ребят.
По своей природе идея хеширования паролей проста до ужаса. Но так много разработчиков допускают ошибки… Я не только расскажу, как правильно обеспечить безопасность, но и почему тот или иной подход плох/хорош.
Важное замечание! Если вы задумываетесь о том, чтобы изобрести собственную хеш-функцию, пожалуйста, не делайте этого! Подобные самописные решения очень легко взламываются. Тот курс криптографии, который вы прошли в университете, вряд ли поможет вам в разработке устойчивого алгоритма. Проблема надежного хеширования паролей была решена задолго до вас: обратите внимание на phpass, defuse/password-hashing и libsodium, если не верите.
Если по некоторым причинам вы пропустили предупреждение, которое я так старался сделать максимально заметным, вернитесь и ознакомьтесь с ним. Оно сэкономит вам и вашей команде много времени и сил. Если вы не верите моим словам и все же хотите написать собственную библиотеку для шифрования паролей, вам придется поискать какой-нибудь другой источник, ибо эта статья не об этом.
Вы еще тут? Рад, что вы приняли мой совет. Продолжаем.
Хеширование паролей… Что это за зверь такой?
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542
Хеширование — процесс необратимый. Это означает, что, имея хеш некоторой сущности, невозможно восстановить саму сущность. Или простым языком: нельзя получить исходный пароль при наличии его хеша.
Алгоритм хеширования превращает исходную строку в другую строку фиксированного размера, которую можно рассматривать как ее “отпечаток пальца” — единственный и неповторимый, принадлежащий только это строке. Это отличная защита для паролей. Даже если база данных с паролями вдруг будет взломана, злоумышленник не сможет заполучить сами пароли: ему будут доступны только хешы, с которыми далеко не уедешь.
Но как же нашему приложению авторизовать пользователя, если мы знаем только хеш пароля? Вот стандартные действия при регистрации/аутентификации:
- Пользователь создает аккаунт.
- Пароль проходит через хеш-функцию и записывается в базу данных.
- Когда пользователь пытается залогиниться, введенный ним пароль проходит через хеш-функцию и сравнивается с хешем, сохраненным в базе данных.
- Если хеши совпадают, пользователь получает доступ к защищенным разделам. В противном случае система запрашивает авторизационные данные снова.
- Шаги 3 и 4 повторяются каждый раз, когда пользователь проходит авторизацию.
В шаге 4 ни в коем случае нельзя сообщать пользователю, что было введено неверно: логин или пароль. Нужно отображать сообщение общего характера, например: “Неверные данные”. Эта маленькая предосторожность не даст злоумышленникам возможность извлечь существующие логины.
Если вы изучали структуры данных, вы должны помнить, что структура данных может быть хешируемой и нехешируемой. В данном случае понятие “хеш” не имеет никакого отношения к шифрованию паролей.
Примеры распространенных хеш-функций, используемых для хеширования паролей: SHA256, SHA512, RipeMD, WHIRLPOOL.
Вы должны знать, что недостаточно “прогонять” пароли через хеш-функции, чтобы обеспечить достаточную защиту пользователей приложения. Существует множество способов извлечения паролей из хешей. Существует несколько простых техник, которые помогают защититься от большинства атак. Невозможно защититься на все 100%, но каждый уровень защиты — дополнительная преграда для хакера.
Чтобы сподвигнуть вас на использование дополнительных техник защиты, я приглашаю вас посетить эту страницу, на которой вы сможете убедиться, как легко взламываются хеши. Пару секунд, и готово! Не отдавайте ваших посетителей в грязные руки взломщиков…
Давайте же разберемся, как взламывать хеши. Это знание позволит нам ближе подобраться к ответу, как от этих взломов защититься.
Как взламывают хеши
Словарные атаки и брутфорс
Вот самый простой способ взломать хеш. Берем комбинацию, которая может оказаться паролем, хешируем ее и сравниваем с хешем, который хотим расшифровать. И так до тех пор, пока не будет найдено совпадение.
Существует несколько вариантов реализовать описанный подход. Самые часто используемые: словарная атака (Dictionary Attack) и брутфорс (“метод грубой силы”, Brute Force).
Словарные атаки основаны на файлах, в которых содержатся некоторые слова, фразы, возможно даже распространенные пароли и много всякой всячины, которая претендует быть паролем. Для каждой комбинации уже подобран хеш, который сравнивается с хешем, который нужно хакнуть. Многие словари построены на основе реальных баз данных с паролями пользователей, что повышает эффективность взлома. Некоторые словарные атаки являются “умными” и для каждой существующей комбинации формируют набор производных комбинаций, которые могут также оказаться искомым паролем.
В процессе брутфорс-атаки “пробуются” произвольные комбинации на роль искомого пароля. Эти атаки очень дороги в плане вычислительных ресурсов и не столь эффективны, как другие виды атак, но ними очень активно пользуются (особенно начинающие хакеры). Если набраться терпения, можно взломать все, что угодно. Но в большинстве случаев придется очень долго ждать… особенно если у жертвы длинный пароль, состоящий из цифр и букв верхнего и нижнего регистра.
Плохая новость: предотвратить эти атаки никак не получится.
Хорошая новость: эффективность этих атак можно свести к минимуму, если организовать правильное управление паролями.
Таблицы поиска
Таблицы поиска (Lookup Tables) — невероятно эффективный метод взлома хешей одного и того же типа. В основе метода лежит идея подготовки возможных паролей и соответствующих им хешей и их хранение в некой таблице (например, в какой-нибудь структуре данных). Лучшие реализации таблиц поиска способны обрабатывать сотни комбинаций в секунду, тогда как их общее количество может насчитывать несколько миллиардов!
Чтобы получить хорошее представление о таблицах поиска, попробуйте взломать представленные ниже SHA256-хеши с помощью этого сайта.
c11083b4b0a7743af748c85d343dfee9fbb8b2576c05f3a7f0d632b0926aadfc
08eac03b80adc33dc7d8fbe44b7c7b05d3a2c511166bdb43fcb710b03ba919e7
e4ba5cbd251c98e6cd1c23f126a3b81d8d8328abc95387229850952b3ef9f904
5206b8b8a996cf5320cb12ca91c7b790fba9f030408efe83ebb83548dc3007bd
Обратные таблицы поиска
Обратные таблицы поиска (Reverse Lookup Tables) позволяют хакерам запускать словарные и брутфорс-атаки одновременно для нескольких хешей без необходимости предварительной подготовки таблицы поиска.
Эта атака основана на интересном факте: многие пользователи имеют одинаковые пароли. Злоумышленник берет взломанную базу данных с хешами паролей пользователей, находит группы одинаковых хешей и направляет на них атаку. Очень эффективный подход!
Радужные таблицы
Радужные таблицы (Rainbow Tables) основаны на т.н. компромиссе между временем поиска по таблице и занимаемой памятью. [В оригинале: time-memory trade-off.] Согласен, трудно представить… Эти таблицы чем-то напоминают таблицы поиска, в которых пожертвовали скоростью в пользу количества подготовленных комбинаций. Если вам нужно больше подробностей, отсылаю вас на Википедию.
Существуют радужные таблицы, способные взломать MD5-хеш пароля длиной до 8 символов.
Далее мы разберемся, как сделать описанные атаки бесполезными.
Соль — дополнительная преграда
Описанные выше атаки работают только потому, что все пароли хешируются одним и тем же способом. Если у нескольких пользователей один и тот же пароль, хеши их паролей также одинаковы. “Грубые атаки” можно лишить эффективности, если внести в каждый хеш что-то уникальное; в таком случае одинаковые хеши исключаются в корне. (Даже если попадаются одинаковые хеши, это совершенно не означает, что они соответствуют одному и тому же паролю. Почему? Читайте дальше.)
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226abhash("hello" + "YYLmfY6IehjZMQ") = a49670c3c18b9e079b9cfaf51634f563dc8ae3070db2c4a8544305df1b60f007
Можно рандомизировать хеши, прибавляя к паролям (спереди или сзади) некоторую строку, называемую солью, перед передачей в хеш-функцию. Как показано выше в сниппете, один и тот же пароль в каждом случае соответствует уникальному хешу, если соль уникальна. Для проверки корректности пароля на этапе авторизации нужно располагать солью, поэтому обычно она хранится в базе данных рядом с хешем пароля, или же как часть хеша.
Соль не обязательно должна быть секретной. Ее задача: сделать брутфорс-атаки, таблицы поиска, радужные таблицы, словарные атаки и другие “грубые методы” неэффективными. Хакер не может заранее знать соль для конкретного хеша, поэтому у него нет возможности подготовиться к атаке.
Запомните! Главное, чтобы у каждого пользователя была его личная соль.
Как не нужно хешировать
Самые распространенные ошибки: использование глобальной или слишком короткой соли.
Повторное использование соли
Решили захардкодить соль в конфиге? Нельзя! Такое встречается довольно часто, что хакерам только на руку! Это не эффективно, и вот почему. Если у пользователей одинаковые пароли, и используется одна и та же соль, хеши также будут одинаковыми. У хакера остается возможность применить обратную таблицу поиска и извлечь все пароли. Представьте, как вам будет стыдно, когда станет известно, что вы захардкодили соль в конфиге. Конец карьере программиста…
Соль должна создаваться/обновляться для каждого пользователя отдельно в таких случаях:
- создание аккаунта;
- изменение пароля.
Короткая соль
Если соль слишком короткая, не составляет труда применить таблицу поиска к самой соли. Например, если соль состоит из трех ASCII-символов, будет существовать всего 95×95×95=857375 вариантов. Думаете, что это много? Ничего подобного! Для профессионального хакера, располагающего необходимыми средствами, не составит труда обнаружить соль и потом с ее помощью расшифровать пароли всех ваших пользователей.
Из этих же соображений нельзя в качестве соли использовать имя пользователя или логин. Имена могут повторяться в пределах одного приложения, а одни и те же логины могут использоваться тем же пользователем в разных приложениях. У хакеров уже давным-давно готовы таблицы поиска для распространенных имен и логинов.
Чтобы усложнить хакеру задачу, соль должна быть длинной. Существует хорошее правило, надежность которого испытана временем: соль должна быть той же длины, что и получаемый в результате хеш. Например, результатом функции SHA256 является 256-битная строка (32 байта); значит и соль должна состоять из 32-х рандомных байтов.
Двойное хеширование и прочие заблуждения
Очень легко войти в азарт а начать чудить без баяна. Часто вижу, как программисты, в надежде обеспечить супер-пупер защиту, начинают комбинировать различные хеш-функции. Это совершенно бесполезно и иногда даже ослабляет защиту. Некоторые начнут защищаться, мол, нагромождение хеш-функций увеличивает время вычисления хеша, что, соответственно, увеличивает время взлома. В этом есть доля правды, но существуют более элегантные способы увеличения времени взлома без нанесения ущерба производительности приложения.
Вот антипримеры, которые я откопал на форумах; авторы постов на полном серьезе предлагают использовать эти ужасные решения:
md5(sha1(password))md5(md5(salt) + md5(password))sha1(sha1(password))sha1(str_rot13(password + salt))md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))
Никогда не используйте ничего подобного!
Примечание автора. Нагромождение хеш-функций — очень спорный вопрос. Я получил много сообщений, в которых указывалось, что такой подход действительно приносит пользу: взломщик заранее не знает, какая комбинация хеш-функций используется, поэтому не имеет возможности подготовить таблицу поиска. Снова поднимался вопрос о скорости вычисления хеша, что замедляет процесс взлома…
Примечание переводчика. Правильное использование соли исключает возможность подготовки таблицы поиска, поэтому нет необходимости в нагромождении хеш-функций.
Также не нужно изобретать собственные хеш-функции. Используйте средства, разработанные профессионалами и проверенные временем. Очевидно, что хакер не имеет возможности взломать хеш, если ему не известен алгоритм. Но не стоит забывать о принципе Керкгоффса, который гласит, что нужно предполагать, что взломщик имеет доступ к алгоритму шифрования (что неизбежно, если речь одет об опенсорс-продукте).
Коллизии хешей
Хеш-функция принимает строку произвольной длины и на выходе выдает строку фиксированной длины. Это наводит на мысль, что могут существовать различные комбинации, которые приводят к одинаковым хешам. Криптографические хеш-функции разрабатываются таким образом, чтобы свести такие коллизии к минимуму, поэтому обнаружить их крайне трудно. Как бы там ни было, хакеры находят закономерности, которые позволяют проводить более эффективные атаки.
Самый яркий пример — MD5, для которого уже найдены закономерности коллизий. Но нахождение этих коллизий требует внушительных вычислительных мощностей. Вряд ли рядовая атака будет основываться на поиске коллизий, уж слишком дорого она обойдется.
Хеш пароля, полученный с помощью MD5 и уникальной соли, вполне себе безопасен. Тем не менее использование более надежных алгоритмов пойдет только на пользу: SHA256, SHA512, RipeMD, WHIRLPOOL.
Как нужно хешировать
В этом разделе рассказывается о правильном подходе к хешированию паролей. В первом подразделе описаны основы, обойтись без которых невозможно. Остальные подразделы содержат информацию об улучшениях основных методов, которые сделают взлом приложения куда более сложным.
Основы: хеширование с солью
Внимание! Недостаточно просто читать. Если хотите вполне понять, о чем идет речь, вам нужно реализовать описываемые подходы на практике.
Мы уже разобрались, как злоумышленники расшифровывают пароли при помощи таблиц поиска и других хитроумных приемов. Также мы узнали, что лучшая защита от “грубой силы” — хеширование с применением соли, уникальной для каждого пользователя. Но вопрос, как генерировать эту соль, остается открытым.
Соль нужно генерировать криптографически стойким генератором псевдослучайных чисел (Cryptographically Secure Pseudo-Random Number Generator, CSPRNG). Подобный генератор — не просто генератор псевдослучайного числа, такой как “rand()” в языке C. Как и подразумевает название, CSPRNG является криптографически безопасным и обеспечивает высокую степень непредсказуемости. Мы не желаем, чтобы наша соль была предсказуемой, поэтому нужно использовать CSPRNG.
Вот список безопасных генераторов для некоторых популярных языков программирования:
Соль должна быть уникальной для каждого пользователя, каждого пароля. Каждый раз, когда пользователь создает аккаунт или изменяет пароль, пароль должен быть захеширован с использованием рандомной соли. Длина соли не должна быть меньше длины зашифрованного пароля. В большинстве случаев соль сохраняют в базе данных рядом с паролем.
Чтобы сохранить пароль, нужно:
- Сгенерировать рандомную соль, используя CSPRNG.
- Прибавить соль к паролю (к началу или концу) и пропустить получившуюся строку через стандартную хеш-функцию, такую как Argon2, bcrypt, scrypt, PBKDF2 или какую-нибудь другую.
- Сохранить соль и пароль в базе данных.
Для валидации пароля нужно:
- Извлечь соль и хеш пароля из базы данных.
- Прибавить соль к полученному от пользователя паролю (к началу или концу) и пропустить полученную строку через соответствующую хеш-функцию.
- Сравнить полученный хеш с валидным хешем, взятым из базы данных. Если эти хеши совпадают, значит пароль верный.
Если это возможно, хешируйте на сервере
Если вы разрабатываете веб-приложение, имеет значение, где будет генерироваться хеш. Как правильно: создавать хеш на клиентской стороне (например, при помощи JavaScript) или отправлять пароль на сервер в чистом виде и хешировать его где-то там?
Если вы хешируете пароль на клиентской стороне, он все равно должен быть повторно захеширован на сервере.
Представьте веб-приложение, которое хеширует пароль в браузере и и отправляет его впоследствии на сервер, где не происходит очередного хеширования. Для аутентификации сервер сравнивает полученный хеш со значением, сохраненным в базе данных. На первый взгляд этот подход кажется безопасным, но это далеко не так.
Проблема заключается в том, что хеш, сгенерированный на клиенте, по сути выступает в роли реального пароля пользователя. Т.е. все, что нужно для авторизации: передать серверу хеш пароля. Если хакер узнает пароль пользователя (или хеш), он сможет без затруднений пройти авторизацию! Более печальный вариант: хакер каким-то хитрым способом получает базу данных с хешами паролей пользователей и получает доступ ко всем аккаунтам.
Это не говорит о том, что хеширование на клиенте является плохой идеей. Но мораль такова: хешировать на сервере нужно всегда.
Хеширование на клиенте — штука полезная. Вот некоторые скользкие моменты, о которых не стоит забывать:
- Хеширование на клиенте — не замена для HTTPS (SSL/TLS). Если соединение между клиентом и сервером не защищено, злоумышленник может подменить механизм обмена данными и нанести приложению непоправимый ущерб.
- Не все браузеры поддерживают JavaScript, некоторые пользователи отключают его поддержку умышленно. Приложение должно определять, поддерживает ли браузер JavaScript, и при необходимости эмулировать клиентское хеширование на сервере.
- Хеш, формируемый на клиентской стороне, также должен быть “засоленным”. Тут есть соблазн запрашивать соль с сервера, но это плохая идея: таким образом злоумышленник сможет извлечь реальные логины пользователей (если сервер возвращает соль клиенту в случае валидного логина). Если на сервере происходит правильное хеширование, которое мы уже обсудили, на клиенте будет достаточно реализовать упрощенный вариант получения хеша, например, со строкой логин + домен в качестве соли.
Медленные хеш-функции
Соль —гарантия того, что хакер не сможет взломать пароли с помощью таблиц поиска (и других видов “табличных” атак). Но соль не оказывает никакой защиты перед методами грубой силы: брутфорсом и словарной атакой. Современные видеокарты (GPU) и специализированное оборудование способны рассчитывать миллиарды хешей в секунду, что делает подобные виды атак вполне себе эффективными. Чтобы сделать эти атаки менее эффективными, можно прибегнуть к технике стретчинга (key stretching).
Идея заключается в том, чтобы сделать хеш-функцию очень медленной; при таком раскладе современные видеокарты и специальные хакерские компьютеры со всей своей супер-скоростью становятся очень неэффективными. Но нужно иметь меру, чтобы очень медленная функция хеширования не оказала влияние на скорость работы всего приложения.
Стретчинг реализован в некоторых специальных хеш-функциях. (Поэтому не нужно писать собственную хеш функцию, даже если вам очень-очень хочется.) Вот стандартные решения, которых вам будет предостаточно для обеспечения медленного хеширования: PBKDF2, bcrypt. Реализацию PBKDF2 для PHP можно найти тут.
Представленные выше алгоритмы принимают в качестве дополнительного параметра т.н. фактор безопасности — количество итераций. Это значение характеризует, насколько медленной будет функция. Чтобы определить оптимальное значение этого параметра для настольных и мобильных приложений, достаточно запустить простые бенчмарки и добиться скорости ответа функции примерно в полсекунды; в таком случае приложение будет защищено, и не будет заметного влияния на производительность.
Если вы планируете использовать стретчинг в веб-приложении, знайте, что вам могут понадобиться дополнительные вычислительные ресурсы для обработки большого количества запросов на авторизацию. Эта мера защиты, к сожалению, облегчает злоумышленникам задачу по запуску DoS-атак; чтобы оградиться от этого, просто используйте капчу.
Дополнительные меры защиты
Хеширование обеспечивает защиту паролей в том случае, когда ваша система безопасности дает сбой. Это не делает приложение в целом более безопасным. Чтобы пароли не были скомпрометированы, придется изрядно попыхтеть!
Никогда не поздно изучить вопросы безопасности, даже если вы разработчик со стажем. Вот парочка достойных источников:
- OWASP Top Ten Vulnerability List
- The Open Web Application Security Project (OWASP)
Прежде чем приступать к разработке приложения, у которого высокие требования к безопасности, не помешало бы разобраться с информацией, предоставленной по этим ссылкам. В таком случае в вашей команде не будет лишним эксперт по безопасности, который сможет выявить прорехи на раннем этапе и поможет их быстро устранить.
На этом все. Если вам понравилась статья, очень рекомендую изучить оригинал: в нем вы найдете более подробное описание изложенных идей.
Давайте общаться! Я в соц. сетях:
Хеш пароль что это означает простыми словами
Сколько я не писал как расшифровывать хэши все без толоку…. Одни и те же унылые вопросы. Так что я поднапрягся и нарыл ужасно точный мануал. Приступим.
Для начала, термины
1. Хеш (Hash), Хеширование (hashing) — преобразование входного массива данных произвольной длины в выходную битовую строку фиксированной длины.
2. Брутить, брутфорс (brute force) — перебор всех (или частичных) возможных вариантов.
Определения типа хеша
Многие опытные хешеры могут определить тип на глаз, в этом нет не чего сложного,
особенно определить очевидные хеши как md5, mysql, crc32.
Определить Хэш можно тут ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Брут хеша
Определили тип хеша, теперь брутим его
Для брута хеша есть не мало программ, но мы рассмотрим конкретную ‘PasswordsPro’,
в сети можно найти кряк на неё.
Программа выглядит так:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Допустим у нас есть md5 хеш b0d21ab22bda655044d1b259df1eeaca и нам надо его подобрать.
В программе PasswordsPro есть несколько видов атаки на хеш:
1. Предварительная атака — быстрая проверка хэшей на простые пароли — «123», «qwerty», «99999» и на уже найденные пароли.
2. Атака полным перебором — перебор всех возможных вариантов паролей.
3. Атака по маске — используется, если известна какая-либо информация о пароле, например: Первые 4 символа пароля — цифры, остальные — латинские буквы.
4. Простая атака по словарям — проверка хэшей на пароли из текстовых файлов (словарей).
5. Комбинированная атака по словарям — пароли формируются из нескольких слов, взятых из разных словарей.
6. Гибридная атака по словарям — изменяет пароли из словарей, добавляет символы(цифры) к паролям
7. Атака по предварительно рассчитанным таблицам — использует предварительно рассчитанные Rainbow-таблицы.
Для обучения, мы рассмотрим два способа атаки, это атака по словарю и полным перебором.
Для атаки по словарю нам нужно создать или скачать словарь паролей.
У нас например будет такой:
Код:
admin
ololo
1312321
22334342
2222221
55465645
Напоминаю, мы брутим md5 хеш b0d21ab22bda655044d1b259df1eeaca.
Что бы добавить хеш в программу, нажмите правой кнопочкой на пустое поле в таблице
и выберите пункт ‘Добавить’.
Перед нами окно:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Введите хеш, выберите тип md5 и нажмите добавить.
После того как окно закроется, вы увидите что наш хеш был добавлен.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь надо добавить наш словарь, для этого в меню Сервис — Настройки — Словари, нажмите правой кнопкой на пустое поле и выберите ‘Добавить’.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
После этого у нас будет добавлен словарь, возвращаемся обратно в программу.
Выбираем тип атаки, в меню Аудит — Простая атака по словарю.
У нас всё готово, теперь в меню выбираем, Аудит — Начать атаку (Или жмём F4)
Вот и всё, если вы сделали всё правильно, то пароль должен был быть найден.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Это мы рассмотрели способ атаки по словарю, теперь рассмотрим способ полного перебора.
Дл этого мы удалим старый хеш и добавим новый, так же как и до этого, новый хеш 9cdfb439c7876e703e307864c9167a15.
Зайдём в настройки, что бы дать диапазон перебора, для этого в меню Сервис — Настройки — Атака полным перебором, ставим мин. и макс. длину пароля, а так же его символы и цифры.
Для нашего хеша поставим такие значения:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Важно: Что не надо ставить длину пароля сразу 50 ))) Т.к длина больше 6 будет подбираться очень медленно,
поэтому выставление параметров очень важный этап, надо продумать какой длины будет пароль и его символы, или
брутить несколькими заходами по слабым параметрам.
После того как мы выставили параметры, жмём ‘Ок’.
Теперь запустим перебор, для этого опять в меню Аудит — Начать атаку.
Пароль должен быть сразу найден
Вот в принципе и всё, потом вы уже сами разберётесь в остальных типах атаки.
Дам ещё пару советов по полному подбору:
1. Подумайте о том каким может быть пароль, если в системе (от куда хеш), стоит ограничение не менее 4
символов, то и значит что пароль будет не меньше 4 !! По этому надо сразу ставить мин. длину 4.
2. Я совету атаковать в таком порядке, Предварительная атака — Простая атака по словарю — Атака полным перебором.
3. Иногда лучше атаковать полным перебором волнами, то есть сначала поставим мин. длину 3 а макс. 8(или 9),
а символы поставим только цифры. И если пароль только из цифр то мы его подберём быстро, но помните, что иногда паролем ставят свой сотовый телефон
4. Помните что чем больше длина пароля для перебора, тем он дольше будет перебирать и на много дольше.
Литература:
Капелька вики, столовая ложка PasswordsPro FAQ и ведро опыта.
Еще немного по паспро вы найдете тут ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
(с) ArxWolf
Редакция by Glavos
10.01.2010, 06:39
А тут оказывается и видос есть. Из любопытства попробовал поперебирать пароли. Взял базу л2шиллен (тут недавно выкладывали, темки не нашел), то ли бразилия, то ли испания, дык 75% хешей с ходу раздуплилось. Мде, с фантазией у них ****овато.
25.02.2010, 21:02
при загрузки словаря с хешами, загружаеться токо 1 хеш (ето первый в списке) чё делать?
LostHorror
26.02.2010, 10:32
при загрузки словаря с хешами, загружаеться токо 1 хеш (ето первый в списке) чё делать?
PasswordPro незарегестрированная версия, найди в инете крякнутую и используй.
п.с. — вот допустим мой — [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Там файл из папки ***** PasswordsPro.key засунь в папку с прогой и добавь в реестр.
26.02.2010, 12:14
Спасибо за мануал. Но есть вопросы. Для того чтобы найти пароли 7-12 символов сколько потребуется времени? И какая программа самая быстрая для брута хэша?
26.02.2010, 14:52
Спасибо за мануал. Но есть вопросы. Для того чтобы найти пароли 7-12 символов сколько потребуется времени? И какая программа самая быстрая для брута хэша?
Ну начать с того что это не брут хэшей а перебор. Это одна из лучших програм. 7 — 12 символов это большой диапазон, время зависит от вашей базы словарей ну и естественно если у вас «дореволюционный» компьютер то процесс затянится.
28.02.2010, 06:53
чёт у меня пасворд про по 100 п/с перебирает. както маловато
F4ll3nL0rD
28.02.2010, 20:30
Подскажите как извлечь словарик на 28гб если у меня на Диске С с виндой всего 15 гб.
28.02.2010, 20:33
Ты скинь на диск Д(или что там) или по частям разбей на диски. Так же вариант держать в архива неиспользуемые ибо словари оч хорошо архивируются
F4ll3nL0rD
28.02.2010, 20:40
Разбивать не пришлось.
Сделал так:
Зашел в архив>Параметры>Установки>И там нужно поменять папку для временных файлов(Стандартом C:\Windows).
Я просто указал другой локальный диск где есть место под словарик.
02.03.2010, 03:23
а у меня вопрос вообще нубский, немогу понять можноли вставлять в PasswordsPro файлы txt. с содержанием login:hash . чтобы не вставлять в таблицу программы по одному хэшу. так надоедает..
02.03.2010, 04:03
а у меня вопрос вообще нубский, немогу понять можноли вставлять в PasswordsPro файлы txt. с содержанием login:hash . чтобы не вставлять в таблицу программы по одному хэшу. так надоедает..
можно канешн там файл/загрузить и нажимаеш текс документ.. если загружаеться по 1му логу с хешом то у тя пасвордпро некрякннутый и скачай крякнутую версию
02.03.2010, 14:17
нефига всёравно не выходит. Качнул со второго поста этой темы крякнутую прогу, нажимаю Файл/открыть там в типе файлов указывать .txt нельзя, только .hashes
02.03.2010, 17:19
Спасибо, стоящая программа и мануал.
ЕСть словари ?
02.03.2010, 18:02
Спасибо, стоящая программа и мануал.
ЕСть словари ?
Учимся читать и юзать поиск. Надоело приносить все готовое на блюдечке!
02.03.2010, 20:27
Ребят, объясните плиз кто-нить скорость 13 п/с может быть из за того что к одному паролю у мну находится по 70-100 логов?
02.03.2010, 20:50
Ребят, объясните плиз кто-нить скорость 13 п/с может быть из за того что к одному паролю у мну находится по 70-100 логов?
Ты чё, гонишь?! У меня стоит 1 пароль в 2-3 секунды, что бы бан не схлопотать и что бы валидные акки записывались в файл.
03.03.2010, 17:33
Чет я затупил немного,а как определять то тип хеша?
bLAQQ9FceDMdEa+YEf+pY++2L+Y=
например это какой тип?
и скажите как определили)
03.03.2010, 19:02
Чет я затупил немного,а как определять то тип хеша?
bLAQQ9FceDMdEa+YEf+pY++2L+Y=
например это какой тип?
и скажите как определили)
Вот тут есть почти все виды хешей. [Ссылки могут видеть только зарегистрированные и активированные пользователи]
опять же если хеш с базы L2сервера то там будет, Sha61(base64)
04.03.2010, 04:23
При том, что брут (brute force) дословно переводится как грубая сила, и употребляется как полный перебор (как посимвольный, так и по словарям). Перебор паролей к хешу — ничто иное, как брут.
11.03.2010, 10:42
блин 1 глупый вопрос:
а айпи сервера и порт вводить не нада??
11.03.2010, 11:09
блин 1 глупый вопрос:
а айпи сервера и порт вводить не нада??
11.03.2010, 13:38
Извините за нубство сразу)
У меня такой вопрос:
Я знаю первые 4 буквы от лога человека и первые 4 цифры от пароля этого же человека. Могу ли я подобрать его пароль и оставшуюся часть лога с помощью этой программы. )
И как определить какой тип у него хэша?:eek:
З.Ы.В игре Perfect World надо. )
23.03.2010, 03:51
ребят кто может подсказать какова типа етот хеш (( а то голову сломал почти уже. И весь инет перерил:cry:
01.04.2010, 18:02
ребят кто может подсказать какова типа етот хеш (( а то голову сломал почти уже. И весь инет перерил:cry:
Почитайте внимательнее в начале темы — Определения типа хеша
там есть ссылочка где вы смотрите на который из хэшей более всего похож ваш и подбераете.
13.04.2010, 14:37
ребят кто может подсказать какова типа етот хеш (( а то голову сломал почти уже. И весь инет перерил:cry:
pass_hash=0225035e0fec4d4b39759ad37a42312b
pass_salt=c46.5
Тип хеша md5 (md5($salt).md5($pass)) [PHP]
15.04.2010, 15:41
Может глупый вопрос но как узнать хеш конкретного сервера?что вводить в строке salt username password куда вводить адрес хеша или сайт
меня интересует конкретный сервер [Ссылки могут видеть только зарегистрированные и активированные пользователи] как ето сделать?
15.04.2010, 16:19
Может глупый вопрос но как узнать хеш конкретного сервера?что вводить в строке salt username password куда вводить адрес хеша или сайт
меня интересует конкретный сервер [Ссылки могут видеть только зарегистрированные и активированные пользователи] как ето сделать?
Гг вы хоть читаете что прога делает? она не ламает сервера л2)
все сервера используют кодировку Sha 61(base 64) у С4 идет другая. В 1 строке выбираете тип хеша, во 2 по умолчанию, и грузите БД формата логин: хеш.
Ломать она ничего не будет(типо ввел адрес сайта и пошла жара. )
Для даной прги надо уже заранье подготовленную база, так как тут [Ссылки могут видеть только зарегистрированные и активированные пользователи] , для проги не имеет значения рейтинг сервера в л2топе и количество онлайна))))
Сам удивляюсь какой народ . уже не один просил в асе помочь ломануть серв через PaswordPro.
16.04.2010, 20:33
Программа обновилась до 3.0. Тема в darkweb ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
17.04.2010, 23:28
куда или на подобии, на основе куда есть прога что брутила whirlpool ?
18.04.2010, 00:04
Я думаю если купишь лицензию InsidePro EGB, то он для тебя напишет любой модуль который есть в PPro. В бесплатном распространении не встречал таких программ пока.
ЗЫ НАфиг удалили вкладку с брутом. Он полезный!
21.04.2010, 06:17
ЗЫ НАфиг удалили вкладку с брутом. Он полезный!
Не удалили
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
06.05.2010, 14:28
Там мертвые ссылки + нету модуля Sha-1(Base64)
30.05.2010, 21:50
Народ Возник вопрос: Можете Обьяснить Остальные типы атаки(Кроме атака по маске)?
Добавлено через 17 часов 55 минут
Вот ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) Новая Версия Пассворд Про, Уже крякнутая..Качаем
09.06.2010, 12:29
Проблема такая, загружаю словари и выбираю простую Атаку по Словарю, Вылетает сразу окно с текстом «Простая атака Завершена» хотя ниодного пасса небыло. Подскажите плизз
09.06.2010, 12:42
Значит словари какие-то кривые, или в настройках выбери расскладку словарей
10.06.2010, 13:16
можно впрос?только сразу прошу не кидаться таками в чайник=(
Как определить хэш юкоз сайта?, MD5(Unix)-тип хэша юкоз сайта если не ошибаюсь, а вот сам хэш убейте ненайду,хотя и переходил по ссылоке для определения хеша,тоже недало результатов
может кто подскажет как его определить? или желательно поможет с определением- [Ссылки могут видеть только зарегистрированные и активированные пользователи] сайтик хеш которого на данный момент нужен.
зарание благодарен
29.07.2010, 16:43
Обновление программы:
В новой версии:
— Существенно увеличена скорость атак, когда используется преобразование паролей в Unicode.
— На 5. 20% увеличена скорость работы тех алгоритмов хэширования, в которых соль хранится вместе с хэшем.
— Существенно увеличена скорость быстрой проверки паролей (по F2), а также верификации хэшей с паролями, что особенно заметно на больших списках хэшей.
— Добавлена возможность проверять пароли из буфера обмена на всех хэшах в списке («горячая» клавиша Ctrl+F2).
— Исправлена ошибка с добавлением соли через диалоговое окно, если в ней был символ ‘:’.
— Удалены модули «md5($hex_salt.$pass.$hex_salt).dll», «md5($hex_salt.$pass).dll» и «sha1($hex_salt.$pass).dll». Вместо них в настройки программы добавлена возможность задавать cоль и имя пользователя в шестнадцатеричном виде для всех типов хэшей.
— Модуль хэширования «MD5_HMAC($salt,MD5_HMAC($salt,$pass)).dll» переименован в «MD5(HMAC(WordPress)).dll».
— Добавлен новый модуль хэширования NTLM.dll. Также добавлены модули для работы с контрольными суммами: CRC-16, CRC-16-CCITT, CRC-32, CRC-32B, FCS-16, FCS-32, GHash-32-3 и GHash-32-5.
— Удалены модули хэширования md5($const_salt.md5($pass)).dll и md5(md5($pass).$const_salt).dll — теперь программа сама анализирует соли и имена пользователей у всех хэшей для атаки и если они одинаковые, то автоматически включается такой режим атаки, при котором скорость практически не зависит от количества хэшей. Примечание: эта возможность доступна для всех алгоритмов — от DES до Joomla-хэшей.
— Исправлена ошибка, возникающая при работе с Rainbow-таблицами для тех типов хэшей, где используется преобразование паролей в Unicode (NTLM и Domains Cached Credentials).
— В архив с программой добавлен файл PasswordsPro.ini с настройками для плагинов и модулей хэширования.
— Modules API обновлен до версии 1.5.
— Обновлен плагин «Парсер SQL-дампов»
— Обновлен плагин «Генератор хэшей»
— Обновлен плагин «Поиск NTLM-пароля»
— Обновлен плагин «Конвертер текста»
— Обновлен плагин «Информация о системе»
— Обновлен плагин «Генератор словарей»
Сайт программы: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Обсуждение релиза: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Скачать с офф сайта: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Отчет VT:
AhnLab-V3 2010.07.29.00 2010.07.28 —
AntiVir 8.2.4.26 2010.07.29 —
Antiy-AVL 2.0.3.7 2010.07.29 —
Authentium 5.2.0.5 2010.07.29 —
Avast 4.8.1351.0 2010.07.29 —
Avast5 5.0.332.0 2010.07.29 —
AVG 9.0.0.851 2010.07.28 —
BitDefender 7.2 2010.07.29 —
CAT-QuickHeal 11.00 2010.07.29 (Suspicious) — DNAScan
ClamAV 0.96.0.3-git 2010.07.29 PUA.Packed.ASPack
Comodo 5578 2010.07.29 —
DrWeb 5.0.2.03300 2010.07.29 —
Emsisoft 5.0.0.34 2010.07.29 —
eSafe 7.0.17.0 2010.07.27 —
eTrust-Vet 36.1.7748 2010.07.29 —
F-Prot 4.6.1.107 2010.07.29 —
F-Secure 9.0.15370.0 2010.07.29 —
Fortinet 4.1.143.0 2010.07.29 —
GData 21 2010.07.29 —
Ikarus T3.1.1.84.0 2010.07.29 —
Jiangmin 13.0.900 2010.07.29 —
Kaspersky 7.0.0.125 2010.07.29 —
McAfee 5.400.0.1158 2010.07.29 —
McAfee-GW-Edition 2010.1 2010.07.29 —
Microsoft 1.6004 2010.07.29 —
NOD32 5322 2010.07.29 —
Norman 6.05.11 2010.07.29 —
nProtect 2010-07-29.01 2010.07.29 —
Panda 10.0.2.7 2010.07.28 —
PCTools 7.0.3.5 2010.07.29 —
Prevx 3.0 2010.07.29 —
Rising 22.58.03.04 2010.07.29 —
Sophos 4.55.0 2010.07.29 —
Sunbelt 6658 2010.07.29 —
SUPERAntiSpyware 4.40.0.1006 2010.07.29 —
Symantec 20101.1.1.7 2010.07.29 —
TheHacker 6.5.2.1.326 2010.07.27 —
TrendMicro 9.120.0.1004 2010.07.29 —
TrendMicro-HouseCall 9.120.0.1004 2010.07.29 —
VBA32 3.12.12.6 2010.07.28 —
ViRobot 2010.7.29.3962 2010.07.29 —
VirusBuster 5.0.27.0 2010.07.29 —
P.S. за кряком в аську:notme: (по правилам форума нельзя выкладывать крякнутые проги)
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
30.07.2010, 00:53
Для ленивых:
Вот passwordspro — [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Отчёт с [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Антивирус Версия Обновление Результат
AhnLab-V3 2010.07.29.00 2010.07.28 —
AntiVir 8.2.4.32 2010.07.29 HEUR/Malware
Antiy-AVL 2.0.3.7 2010.07.29 —
Authentium 5.2.0.5 2010.07.29 —
Avast 4.8.1351.0 2010.07.29 —
Avast5 5.0.332.0 2010.07.29 —
AVG 9.0.0.851 2010.07.29 —
BitDefender 7.2 2010.07.29 —
CAT-QuickHeal 11.00 2010.07.29 (Suspicious) — DNAScan
ClamAV 0.96.0.3-git 2010.07.29 PUA.Packed.ASPack
Comodo 5582 2010.07.29 Heur.Suspicious
DrWeb 5.0.2.03300 2010.07.29 —
Emsisoft 5.0.0.34 2010.07.29 —
eSafe 7.0.17.0 2010.07.29 Win32.HEURMalware
eTrust-Vet 36.1.7748 2010.07.29 —
F-Prot 4.6.1.107 2010.07.29 —
F-Secure 9.0.15370.0 2010.07.29 —
Fortinet 4.1.143.0 2010.07.29 —
GData 21 2010.07.29 —
Ikarus T3.1.1.84.0 2010.07.29 —
Jiangmin 13.0.900 2010.07.29 —
Kaspersky 7.0.0.125 2010.07.29 —
McAfee 5.400.0.1158 2010.07.29 —
McAfee-GW-Edition 2010.1 2010.07.29 —
Microsoft 1.6004 2010.07.29 —
NOD32 5324 2010.07.29 —
Norman 6.05.11 2010.07.29 —
nProtect 2010-07-29.01 2010.07.29 —
Panda 10.0.2.7 2010.07.29 Suspicious file
PCTools 7.0.3.5 2010.07.29 —
Prevx 3.0 2010.07.29 —
Rising 22.58.03.04 2010.07.29 —
Sophos 4.55.0 2010.07.29 —
Sunbelt 6660 2010.07.29 —
Symantec 20101.1.1.7 2010.07.29 WS.Reputation.1
TheHacker 6.5.2.1.326 2010.07.27 —
TrendMicro 9.120.0.1004 2010.07.29 —
TrendMicro-HouseCall 9.120.0.1004 2010.07.29 —
VBA32 3.12.12.6 2010.07.28 —
ViRobot 2010.7.29.3963 2010.07.29 —
VirusBuster 5.0.27.0 2010.07.29 —
03.08.2010, 22:04
Может кто объяснить как пользоваться rainbow-таблицами, а то вот скачал для sha-1: sha1_mixalpha-numeric#1-7_0_4500x40000000_all
Но что-то ничего не получается
12.08.2010, 12:05
Предварительная атака – это быстрая проверка хэшей пользователей на простые пароли типа «123», «qwerty», «99999» и другие, а также на пароли, ранее найденные программой.
Атака полным перебором – это полный перебор всех возможных паролей в каком-либо диапазоне, к примеру – «aaaaaa». «zzzzzz».
Атака по маске – эта атака используется, если известна какая-либо информация о пароле. Для использования атаки в ее настройках необходимо указать маску для каждого символа в пароле, который требуется восстановить. При этом в качестве символов маски используются условные обозначения стандартных или пользовательских наборов символов – ?u, ?d, ?2 и т.д. (см. настройки программы, закладка «Наборы символов»).
Простая атака по словарям – в этой атаке происходит простая проверка хэшей на пароли из словарей.
Комбинированная атака по словарям – в этой атаке пароли формируются из нескольких слов, взятых из разных словарей, что позволяет восстанавливать сложные пароли вида «superadmin», «admin*admin» и др.
Гибридная атака по словарям – эта атака позволяет изменять пароли из словарей (к примеру, перевести пароль в верхний регистр, добавить в конце пароля символ ‘1’ и т.д.) и проверять их в качестве паролей пользователей. Действия, применяемые к исходным паролям, называются «правилами» и их полный список приведен в файле «Rules.txt» из дистрибутива программы.
Атака по Rainbow-таблицам – эта атака использует поиск пароля по предварительно рассчитанным Rainbow-таблицам.
PS: Атака полным перебором и простая атака по словарям была рассмотрена Glavos.
Этот вид атаки особенно полезен, если есть какая-либо информация о пароле — к примеру, он начинается на «123456», а дальше идет комбинация латинских заглавных и строчных букв или же пароль имеет длину 10-11 символов и содержит в себе слово «master», остальные символы неизвестны. Также этот вид атаки дает неплохой результат на больших массивах хэшей, когда пользователь последовательно перебирает маски для весьма вероятных паролей — admin?*?*?*, pass?d?d?d?d?d?d и т.д. Скорее всего, в одной из следующих версий PasswordsPro эта атака будет усовершенствована и пользователь сможет однократно составить свой список масок для вероятных паролей, после чего программа будет перебирать пароли, последовательно перебирая эти маски из списка, что немало упростит работу.
Например, тебе известны 2 первых символа в пароле. пароль например — zzwedr
Хеш — 54ef23c7879516d8c74159160afc6588
Заходишь в настройки —> атака по маске —> ставишь например маску zz?l?l?l?l
?l — нижний регистр латинских букв
?d — цифра
?u — верхний регистр латинских букв
?s — спец.знаки.
Продолжаем. указав маску ты еще должен указать длину пароля, минимальную и максимальную, но так как по маске у нас пароль максимум шестизначный, значит указываем 6 в графе «Максимальная длина паролей».
Например если пароль adh5we, и мы знаем, что 3-ий символ в пароле это буква «h», а 4-ый это цифра 5
Хеш — bc9e9b90b3a95432e6154a320b758db4
Указываем маску, например такую — ?l?lh5?l?l
Проблема в том, что тебе нужно знать где какой тип символа стоит. кол-во масок может быть огромное множество под один и тот же пароль, ведь нам, предположим, не известна длина пароля, или неизвестно какие типы символов в пароле еще представлены. маской может быть например такой — ?l?uh5?d?s?l?l?d?u
То есть вероятность того, что ты сбрутишь хеш, не зная наверняка где какой тип символа представлен и какова длина пароля, очень мала.
1) ?d — для чисел
2) ?u — для больших букв
3) ?s — для символов
4) ?| — для маленьких букв
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Комбинированная атака по словарям
Ну тут всё просто.
Мощная атака, позволяющая быстро найти длинные пароли типа «ilovemercedes», «finalfantasy», «masterblaster» и др. — на практике, кстати, таких паролей немало, т.к. они легко запоминаются и с точки зрения пользователя вполне надежны, т.к. длинные, а значит — сложные для восстановления.
В PasswordsPro она реализована крайне просто — загружаем один словарь в первый набор словарей, другой (к примеру, все цифры от 0 до 99999) — во второй, ставим очередность формирования слов: «Набор словарей 1», «Набор словарей 2» и запускаем атаку. Весьма эффективно комбинировать хороший словарь с самим собой. В дистрибутиве PasswordsPro находится словарь «InsidePro.dic», в котором находятся часто употребляемые слова и части слов, и комбинируя слова из него друг с другом, можно восстановить немало 10. 16-символьных «зубров».
Гибридная атака по словарям
Итак, гибридка — без сомнений, основной помощник при аудите паролей. Это именно та атака, которая за небольшое время находит такие сложные пароли, как «P@$$w0rd», «m@st3r», «h4cky0u», «forum+forum», «-lancer-«, «h1a2c3k4e5r», «f.o.r.u.m.», «Mr.Johnson», «12345123451234512345», «CrIsTiNa» и многие другие. Поверьте — другими видами атак такие пароли восстановить в принципе невозможно.
Основная идея этой атаки в том, что пользователь берет какое-то известное ему слово, немного видоизменяет его по каким-то своим правилам и использует результат в качестве пароля. Этих правил — огромное количество, но есть среди них те, которые встречаются чаще других — заменить в пароле одни символы другими, напечатать одно и то же слово много раз, поочередно использовать разные регистры символов и т.д. Если «натравить» эту атаку на большой список хэшей из среднестатистических паролей, да еще и с мощным словарем, то вы будете приятно удивлены, глядя, как PasswordsPro щелкает пароли как семечки. Эта атака даже в одиночку может восстановить существенную часть списка хэшей.
Программа поддерживает множество правил, а также имеет в своем составе уже готовый файл с комбинациями этих правил (файл «Rules.txt»), который можно весьма успешно использовать как базовый набор, со временем расширяя его новыми комбинациями. Также удобно и то, что программа поддерживает список файлов с правилами, а значит можно создать несколько разных файлов «под себя» и использовать их с разными наборами словарей.
Перефразируя известное выражение — «кто больше знает таких правил, тот владеет миром», в смысле — доступом. И это факт. Чем больше будет известно таких правил переборщику паролей, тем эффективней будет его работа. Поэтому, поиск новых правил — задача, которую приходится выполнять регулярно. Именно с этой целью на сервисе База хэшей была организована очередь хэшей, пароли к которым не найдены в базе. Эта очередь из тысяч хэшей доступна всем и любой желающий может попробовать восстановить к ним пароли. Активные пользователи сервиса помогли восстановить уже многие тысячи паролей, которые в дальнейшем были опубликованы на форуме, и списки таких паролей — кладезь ценнейшей информации, позволяющая «брать на вооружение» все новые и новые правила, повышая эффективность этой атаки. Также для поиска новых правил полезно делать анализ словарей, состоящих из ранее восстановленных паролей.
Есть и еще одна приятная возможность, доступная в этой атаке — таблицы замены символов в паролях, особенно эффективные в не-англоязычных странах, где клавиатура имеет две раскладки, как, к примеру, у нас в России. Эти таблицы «на лету» подменяют символы в паролях, формируя вместо «привет» пароль «privet» или «ghbdtn». К примеру, пароль «fktrcfylh2008» без использования таких таблиц восстановить любыми видами атак практически нереально. А с таблицами атака на него займет несколько минут, т.к. это не что иное, как пароль «александр2008», набранный в английской раскладке клавиатуры.
Атака по Rainbow-таблицам
Это еще одна очень эффективная атака (разумеется, если у вас имеются таблицы для нужного алгоритма и «success rate» этих таблиц не ниже 95. 98%). Тут все просто — в настройках программы загружаем таблицы, отмечаем нужные хэши и нажимаем «Старт».
В этой атаке проявляется еще одна уникальная особенность PasswordsPro — умение работать с таблицами для любых алгоритмов, таблицы для которых сгенерированы в формате программы rtgen.exe v1.2. К примеру, «штатная» утилита r*****.exe для брута по таблицам поддерживает лишь два алгоритма — MD5 и LM. Для поддержки других алгоритмов ее нужно перекомпилировать. А с PasswordsPro ничего перекомпилировать не надо — генерируйте таблицы хоть для MD2, хоть для SHA-512, хоть для RipeMD-128, затем добавляйте их в программу и спокойно ищите по ним свои пароли — главное, чтобы в наличии был нужный DLL-модуль хэширования.
Таблицы для Rainbow-атаки можно взять Здесь ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Атаки в действии
Итак, в качестве примера для аудита паролей пользователей популярного форума мы загрузили в PasswordsPro список из 15-20 тысяч MD5-хэшей. Как нам за меньшее время найти большее число паролей? Вот рекомендуемый алгоритм работы с программой (с использованием «штатного» дистрибутива PasswordsPro):
1. Предварительная атака со всеми возможными проверками (см. настройки программы).
2. Полный перебор по алфавиту 0. 9 + a. z на глубину 1-6 символов.
3. Полный перебор по алфавиту 0. 9 + abcdef на глубину 7-8 символов.
4. Загружаем словарь «InsidePro.dic» из дистрибутива программы в набор словарей 1, а все остальные словари из того же каталога («All_1-2.dic», «Numbers_1-4.dic» и т.д.) — в набор словарей 2 и запускаем гибридную атаку с набором правил по умолчанию (файл «Rules.txt» в архиве программы) сначала по второму набору словарей, затем — по первому.
5. Запускаем комбинированную атаку, указав очередность формирования слов: «Набор словарей 1», «Набор словарей 2».
6. Запускаем комбинированную атаку, указав очередность формирования слов: «Набор словарей 1», «Набор словарей 1».
7. Запускаем комбинированную атаку, указав очередность формирования слов: «Набор словарей 2», «Набор словарей 1».
8. Полный перебор по алфавиту 0. 9 + a. z на глубину 7-7 символов.
9. Полный перебор по алфавиту 0. 9 на глубину 9-11 символов.
На компьютере с хорошим процессором вся эта работа займет около суток и последние пункты (особенно 8 и 9) лучше оставлять на ночь.
Разумеется, все эти действия можно распараллелить на разных компьютерах или же запустить две копии программы на компьютере с двухъядерным процессором (одна копия брутит по словарям, другая в это время — по цифрам). Также при наличии у вас своих словарей (или Rainbow-таблиц) необходимо включать и их в работу.
В результате этих действий мы восстановим большую часть паролей из списка — на практике успех может доходить и до 90%, а может ограничиться и 20. 30% — это зависит от множества факторов, к примеру — в какой доменной зоне находится форум (т.е. много паролей в нем может быть на национальном языке), какова тематика форума (понятно, что в форумах на компьютерные темы общаются более подготовленные прользователи, имеющие в среднем более сложные пароли) и т.д.
12.08.2010, 14:54
подскажите плиз тип хеша и как такое расшифровывать. с меня спасибки. честно- разобраться пытался.. но их там такое кол-во =\рпросто решил сам расшифровать базу.
вот кусок хеша
000001 FffxMfilkBD0wRLDBUKlmudqZ/Q= [Ссылки могут видеть только зарегистрированные и активированные пользователи] 618126374b5af006957721b0967554a4 1267956060387 0 81.88.222.101 1 ‘);
12.08.2010, 15:02
Zheludd хеш только FffxMfilkBD0wRLDBUKlmudqZ/Q= сказать какой это тип хеша?? это SHA-1(base64) так же дальше идет мыло и как я понял хеш от мыла 618126374b5af006957721b0967554a4 этот тип хеша MD5
15.08.2010, 16:29
Ребят подскажите, вроде опредилил тип хеша.Добафил базу которую надо расшифровывать. Добавил словарь(вида только одни пароли).Жму начать, а мне сразу же пишет «Простая атака по словарям закончена» не прогоняя ни 1 хеша.Вчем может быть проблема?
16.08.2010, 15:23
народ не могу разобраться как определить хеш, смотрел на этом сайте
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
ни че не понял, как определять то?
и каково типа этот хеш qDfk6kSUFLmAEwWNtOhBoq+qgIA=
16.08.2010, 19:46
Вопрос такой:начинаю брутить хеши, мне определяет пароли от некоторых хешей, но как только пытаюсь зайти в ЛК то мне пишет «Такой аккаунт не существует, либо Вы ввели неверный пароль». В чем проблема? Может я тип хеша неправилно определил?
Добавлено через 24 минуты
Вопрос такой:начинаю брутить хеши, мне определяет пароли от некоторых хешей, но как только пытаюсь зайти в ЛК то мне пишет «Такой аккаунт не существует, либо Вы ввели неверный пароль». В чем проблема? Может я тип хеша неправилно определил?
Сори затупак я.Мне же потом найденными брутить надо.Подскажите в каком файлике найденые логин пароли сохраняются или мне их вручную надо сохранять?
16.08.2010, 21:27
у меня такая проблема скачал словари,но почему то после выбора атаки словарем,через 1 секунду пишет что атака закончена,но пароля не находит.я уж видел такие вопросы на форуме но не кто толком не ответил! еше 1 вопрос обычно у хешов от л2 серверов какой тип?
Excellent18rus
16.08.2010, 21:29
значит из словарей не подходит ни 1 пароль.. используй атаку полным перебором
у хешей ла2 тип Sha1(base64)