Как определить тип хеша без гадания на кофейной гуще: обзор инструментов и рабочих приёмов

Как определить тип хеша без гадания на кофейной гуще: обзор инструментов и рабочих приёмов

Иногда к вам прилетает загадочная строка из букв и цифр и все спрашивают что это за хеш. Вариантов сотни от древнего MD5 до модных парольных схем вроде bcrypt, scrypt и Argon2id. Хорошая новость распознать тип чаще всего можно без шаманства если смотреть на длину, алфавит, характерные префиксы и контекст системы а потом подтвердить догадки инструментами. Ниже собрал рабочий алгоритм и обзор утилит которые экономят часы жизни и нервы.

С чего начинать быстрый разбор

Прежде чем тянуться к «магии» есть три простых проверки которые удивляют своей эффективностью. Они не требуют сети и ставят на место 70 процентов случаев.

  • Длина посчитайте символы. 32 часто MD5 или NTLM 40 похоже на SHA-1 64 указывает на SHA-256 128 намекает на SHA-512. Если длина нечетная или странно короткая возможно это не криптографический хеш а например CRC32 или просто Base64 от чего-то.
  • Алфавит шестерки [0-9a-f] говорят о hex. Наличие ./$ и + часто указывает на Base64 или «модульные» форматы файловых/системных хешей.
  • Префиксы модульные форматы любят представляться. $1$ это md5crypt $5$ sha256crypt $6$ sha512crypt $2a$/$2b$/$2y$ это bcrypt $argon2id$ говорит сам за себя $pbkdf2-sha256$ встречается у веб-фреймворков. У PostgreSQL пароль начинается с md5 у MySQL часто * + 40 hex заглавными.

Памятка по длинам и подсказкам

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

Признак Кандидаты Подсказки
32 hex MD5, NTLM, LM NTLM обычно в верхнем регистре, без соли; LM часто содержит aad3b435b51404eeaad3b435b51404ee в половине пары
40 hex SHA-1, MySQL старые схемы MySQL: * + 40 HEX; Apache {SHA} — Base64 от SHA-1
64 hex SHA-256 Если есть $5$ — это уже sha256crypt
128 hex SHA-512 $6$ — sha512crypt
60 символов bcrypt Всегда начинается с $2a$/$2b$/$2y$ далее «стоимость» например $12$
Модульный префикс md5/sha256/sha512-crypt, PBKDF2, scrypt, Argon2 $1$, $5$, $6$, $pbkdf2-sha256$, $scrypt$, $argon2id$
Base64 с фигурными скобками Apache {SHA}, {SSHA} Часто в .htpasswd
md5 + 32 hex PostgreSQL Формат md5<md5(password+username)>
Начинается с $argon2id$ Argon2id Параметры v, m, t, p прямо в строке

Инструменты которые реально помогают

Дальше подключаем арсенал. Лучше иметь и локальные и облачные варианты для перекрёстной проверки. Ниже ссылки на проверенные проекты.

1. Name-That-Hash CLI

Открытый инструмент от сообщества HashPals который пытается «угадать» тип по сигнатурам, длинам, префиксам и контексту. Работает офлайн, даёт список кандидатов с рейтингами и сразу подсказывает режимы для взломщиков вроде hashcat и John.

  • Репозиторий: GitHub
  • Установка: pip install name-that-hash или pipx install name-that-hash
  • Примеры:
    # одиночная строка
     nth --text "5f4dcc3b5aa765d61d8327deb882cf99"
     
     # из файла
     nth --file hashes.txt
     
     # вывод только лучших гипотез
     nth --text "$2b$12$4u2mQJ7..." --most-likely

2. hashID

Классика на Python. Использует набор регулярных выражений и эвристик. Да, иногда даёт «многовато кандидатов», но как быстрый фильтр годится.

  • Репозиторий: GitHub
  • Запуск:
    python hashid.py 5baa61e4c9b93f3f0682250b6cf8331b
     python hashid.py -m "$6$rounds=5000$salt$..."   # показать хеш-моды

3. hash-identifier

Ещё один лёгкий идентификатор на Python. Заменяемый на hashID но у многих он уже в наборе на пентест -машине.

  • Репозиторий: GitHub
  • Запуск:
    python hash-identifier.py

4. CyberChef

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

  • Онлайн-версия: CyberChef
  • Совет попробуйте цепочку: декодирование Base64 → проверка длины → вычисление хеша от тестовой строки «password» и сравнение.

5. Онлайн-идентификаторы

Когда интернет под рукой, можно кросс-проверить гипотезы в онлайн-сервисах. Они удобны для «второго мнения», но не сливайте туда чувствительные данные.

  • hashes.com быстрая идентификация и примеры форматов
  • TunnelsUp наглядный анализатор с подсказками

6. Справочник режимов hashcat

Да, это не «идентификатор», но когда уже есть догадка, список режимов и примеры форматов спасают от ошибок в параметрах. Часто именно он ставит точку в споре.

Пошаговый алгоритм распознавания

Чтобы не превращать процесс в бесконечные «а вдруг», держите короткий сценарий. Он хорошо работает и на форензике и в багбаунти.

  1. Соберите контекст откуда строка взялась база, логи, веб-приложение, ОС. Фреймворки любят свои форматы например Django pbkdf2_sha256$ или Joomla с $P$.
  2. Посчитайте длину и алфавит зафиксируйте «сухие» факты длина, набор символов, есть ли префикс.
  3. Посмотрите на префиксы всё, что начинается с $, почти всегда саморассказывается.
  4. Прогон через локальные утилиты сначала nth, затем hashID. Сравните топ-кандидатов.
  5. Кросс-проверка онлайн тот же хеш в hashes.com или TunnelsUp. Если совпало у трёх источников вероятно это он.
  6. Проверка на тестовой строке возьмите «password» или «123456», посчитайте кандидатов в CyberChef и сравните формат и длину.
  7. Заведите «боевой» справочник запишите явные признаки вики вашей команды чтобы не искать их заново на третьем проекте.

Частые ловушки и как их обходить

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

  • MD5 и NTLM одинаковой длины оба 32 hex. Спасает контекст и регистр. NTLM обычно заглавными. Плюс NTLM считается от UTF-16LE.
  • «Это Base64 а не хеш» наличие = на конце и символов +/ намекают на кодировку. Декодируйте и посмотрите что внутри.
  • Соль меняет длину md5crypt/sha*crypt, PBKDF2, bcrypt, scrypt и Argon2 вносят соль и параметры прямо в строку. Никогда не пытайтесь «взломать как MD5» то, что имеет вид $6$....
  • Онлайн-сервисы и конфиденциальность не отправляйте реальные пользовательские хеши в чужие формы. Либо анонимизируйте соль, либо используйте офлайн-утилиты.
  • CRC и контрольные суммы короткие 8-символьные строки часто CRC32, не криптостойкая история. Не путайте с «хешем пароля».

Мини-шпаргалка по регуляркам

Если приходится быстро фильтровать логи на лету, такие RegEx-маски помогают выделить кандидатов на хеши. Они не идеальны, но практичны.

# 32 hex (MD5/NTLM/LM)
 b[a-f0-9]{32}b
 
 # 40 hex (SHA-1)
 b[a-f0-9]{40}b
 
 # bcrypt
 $2[aby]$d{2}$[./A-Za-z0-9]{53}
 
 # sha256/512-crypt
 $(5|6)$[./A-Za-z0-9]+$[./A-Za-z0-9]+b
 
 # Argon2 (id/i/d)
 $argon2(id|i|d)$v=d+$.*$.+

Практические примеры

Ниже пара «живых» сценок с тем как мыслить по шагам.

Пример 1 короткая строка из восьми символов

9e107d9d

Это подозрительно коротко для криптохеша. Проверяем в CyberChef как CRC32 от «fox» и понимаем что это контрольная сумма. Делать из неё «взлом пароля» бессмысленно.

Пример 2 60 символов с префиксом

$2b$12$LzQ1kZs7QFQv4Q5kE3Z3Se0xXGxHk1Y7oS2Gx3hVZ0QJX7FJrHq5e

Это bcrypt. Видим $2b$ и «стоимость» $12$. Для атак понадобится соответствующий режим в hashcat. Дальше вопрос не «что это» а «какие параметры подать в словарь и маску».

Пример 3 32 hex в верхнем регистре

32ED87BDB5FDC5E9CBA88547376818D4

Похоже на NTLM. Подтверждаем в nth и сверяемся с example hashes. Если это дамп Windows — почти наверняка так и есть.

Интеграция в рабочий процесс

Чтобы распознавание не превращалось в «раз в полгода вспоминаем как это делали», автоматизируйте рутину.

  • Склеить мини-обёртку простая оболочка над nth + hashID которая принимает строку, выдаёт пересечение топ-кандидатов и сразу печатает режимы hashcat.
  • Вики команды страница с таблицей префиксов и типовых форматов из справочника . Обновляйте туда же заметки по вашим продуктам.
  • Политика по данным жёсткое правило «реальные хеши — только офлайн». Для демо и тикетов используйте синтетические примеры.

Короткий чек-лист

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

Полезные ссылки

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

P. S. Если остались сомнения попробуйте создать такой же хеш от «password» и сравнить формат и длину. Ничто так не отрезвляет как эксперимент на вкусном тестовом образце.


Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Онлайн-митап Positive Technologies по сетевой безопасности.

16 сентября специалисты по ИБ поделятся честным опытом работы с PT Sandbox и PT NAD.

Реклама. 18+ АО «Позитив Текнолоджиз», ИНН 7718668887


Юрий Кочетов

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