💣 Сравнение различных форматов отпечатков (фингерпринтов) SSH на Linux |

💣 Сравнение различных форматов отпечатков (фингерпринтов) SSH на Linux

Статьи

Обзор

Secure Shell (SSH) – это фундаментальный инструмент для удаленного администрирования систем и безопасного обмена данными в среде Linux.

Одним из важнейших аспектов безопасности SSH является проверка подлинности серверов по фингерпритам.

Фингерприты SSH служат уникальными идентификаторами, которые позволяют нам подтверждать подлинность удаленных серверов перед установлением соединения, тем самым предотвращая атаки типа «человек посередине».

В этом уроке мы рассмотрим концепцию отпечатков SSH и их различные форматы в Linux.

Сначала мы рассмотрим распространенные форматы MD5 и SHA-256, а также способы получения отпечатков SSH.

После этого мы углубимся в их идентификацию и подтверждение. И наконец, мы расскажем о лучших практиках управления отпечатками SSH.

Что такое фигерпринт SSH?

Отпечаток SSH – это криптографическое хэш-значение, которое однозначно идентифицирует SSH-сервер.

По сути, он служит цифровой подписью, которая помогает проверить подлинность и целостность удаленного сервера перед установкой SSH-соединения.

Как создаются фингерприты SSH

При настройке SSH-сервера генерируется пара криптографических ключей: открытый ключ и закрытый ключ.

Открытый ключ используется для генерации фингерпринта, который является уникальным представлением идентификационных данных сервера.

Этот отпечаток может быть получен и сравнен в процессе SSH-соединения, чтобы убедиться в подлинности сервера.

Как получить фингерприты SSH

Чтобы получить фингерприты SSH, мы можем использовать команду ssh-keygen, после которой следует опция -l для вывода списка отпечатков пальцев файла открытого ключа и -f для указания имени файла ключа:

ssh-keygen -lf ~/.ssh/id_rsa.pub
3072 SHA256:2H3LNvKaYyuMheDJ1geii/G5A9+7wxF2pU/FIxrJyFI username@hostname (RSA) [simterm]
SHA-256 -- это хэш-алгоритм по умолчанию для генерации фингерпринтов ключей SSH в новых версиях ssh-keygen, хотя существуют и более старые алгоритмы, такие как MD5 и SHA-1.
Определение различных форматов фингерпринтов  SSH
Фингерпринты SSH могут быть представлены в различных форматах.
В каждом из них для вычисления используется свой хэш-алгоритм.
Рассмотрим три широко используемых формата SSH: MD5, SHA-1 и SHA-256.
Формат MD5
Формат MD5, Message Digest Algorithm 5, вычисляет 128-битное хэш-значение, часто представляемое в виде 32-символьного шестнадцатеричного числа:
[simterm]$ ssh-keygen -lf ~/.ssh/id_rsa.pub -E MD5
3072 MD5:61:cb:3e:0e:5a:51:50:b9:10:2b:3d:52:3a:58:12:c4 username@hostname (RSA)

MD5 обеспечивает простые и быстрые вычисления и пользуется широкой поддержкой для совместимости со старыми системами.

Однако у него есть существенные недостатки, в том числе уязвимость к атакам на столкновения.

Поэтому он считается слабым и небезопасным для криптографических целей.

Формат SHA-1

Формат SHA-1, Secure Hash Algorithm 1, вычисляет 160-битное хэш-значение, представленное в виде строки, закодированной в base64:

ssh-keygen -lf ~/.ssh/id_rsa.pub -E SHA1
3072 SHA1:51kuIF7NQ5O9zZsj6YDjnQj+Khg username@hostname (RSA)

SHA-1 также обеспечивает более быстрые вычисления по сравнению с SHA-256 и совместим со старыми системами.

Однако он уязвим к атакам коллизии, что делает его слабым и менее безопасным для использования в криптографии.

Формат SHA256

Формат SHA-256, Secure Hash Algorithm 256-bit, вычисляет 256-битное хэш-значение.

Аналогичным образом оно представляется в виде 64-символьного шестнадцатеричного числа:

ssh-keygen -lf ~/.ssh/id_rsa.pub -E SHA256
3072 SHA256:2H3LNvKaYyuMheDJ1geii/G5A9+7wxF2pU/FIxrJyFI username@hostname (RSA)

Мы выяснили, что в новых версиях ssh-keygen по умолчанию используется хэш-алгоритм SHA-256.

Он обеспечивает высокую криптографическую безопасность и устойчив к атакам на коллизии.

Однако он имеет более медленное время вычисления по сравнению с MD5 и SHA-1 и может не поддерживаться на очень старых системах.

Устаревшие сетевые команды Linux и их замены

Сравнение

Давайте еще раз рассмотрим три формата в таблице:

Хеш-алгоритм Длина Уровень безопасности Скорость Совместимость
MD5 128-bit Слабый Быстрый Высокая
SHA-1 160-bit Слабый Умеренный Высокая
SHA-256 256-bit Сильный Медленный Умеренная (современные системы)

Сравнение фингерпринтов в разных форматах

Проверка фингерпринтов SSH – важный шаг в обеспечении безопасности SSH-соединений.

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

Этот процесс проверки помогает защитить конфиденциальные данные и предотвратить несанкционированный доступ к удаленным системам.

Сравнение одинаковых форматов

Если оба формата используют один и тот же хэш-алгоритм, мы можем сравнить их вручную.

Для успешного соединения необходимо, чтобы все строки символов в обоих отпечатках совпадали.

В качестве альтернативы можно автоматизировать сравнение строк с помощью простого скрипта:

cat compare_fingerprints.sh
!/bin/bash
Assign the content of the files to variables
trusted_fingerprint=$(cat "$1")
server_fingerprint=$(cat "$2")
Perform the comparison
if [[ "$server_fingerprint" == "$trusted_fingerprint" ]]; then
echo "Fingerprints match!"
else
echo "Fingerprints differ!"
fi[simterm]
Скрипт сравнивает отпечаток сервера с отпечатком доверенного лица с помощью сравнения строк (==).
Предположим, что у нас уже есть оба отпечатка, хранящиеся в отдельных файлах, давайте запустим скрипт:
[simterm]$ bash compare_fingerprints.sh trusted_server.fingerprint server_fingerprint.txt
Fingerprints match!

Если ключи совпадают, можно смело продолжать соединение.

Сравнение различных форматов

И наоборот, мы не можем напрямую сравнивать отпечатки в разных форматах

Сначала нам нужно получить фингерпринт в нужном формате с помощью опции -E, которую мы использовали ранее, или опции -o в ssh:

ssh -o "FingerprintHash sha256" testhost
The authenticity of host 'testhost (102.88.82.213)' can't be established.
ECDSA key fingerprint is SHA256:2H3LNvKaYyuMheDJ1geii/G5A9+7wxF2pU/FIxrJyFI.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Аналогичным образом мы можем запросить md5:

ssh -o "FingerprintHash md5" testhost
The authenticity of host 'testhost (102.88.82.213)' can't be established.
ECDSA key fingerprint is MD5:61:cb:3e:0e:5a:51:50:b9:10:2b:3d:52:3a:58:12:c4.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

После этого мы можем использовать тот же скрипт, который мы создали ранее, чтобы сравнить два отпечатка.

Более продвинутый подход предполагает загрузку открытого ключа в систему, поддерживающую различные форматы хэшей:

ssh-keyscan testhost >testhost.ssh-keyscan
testhost:22 SSH-2.0-OpenSSH_9.3p2 Debian-1
testhost:22 SSH-2.0-OpenSSH_9.3p2 Debian-1
testhost:22 SSH-2.0-OpenSSH_9.3p2 Debian-1
testhost:22 SSH-2.0-OpenSSH_9.3p2 Debian-1

Эта команда загружает информацию об открытом ключе для сервера testhost и сохраняет ее в файле testhost.ssh-keyscan.

Далее мы можем отобразить сохраненные ключи:

cat testhost.ssh-keyscan
testhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqdlbQeE1VnEmQ...
testhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYA...
testhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFkDA9bw6BDTByni...

На выходе получаем необработанные данные открытого ключа, которые пригодятся для различных целей, в том числе для заполнения файла known_hosts или проверки подлинности сервера.

После этого мы анализируем ключи, хранящиеся в testhost.ssh-keyscan, и получаем их отпечатки тем же методом, что и раньше:

ssh-keygen -lf testhost.ssh-keyscan -E sha256
3072 SHA256:+dB/HijG7O0jB5cmzcgp5xK3ZkA3d295Zl+2Bo+gKhk testhost (RSA)
256 SHA256:2H3LNvKaYyuMheDJ1geii/G5A9+7wxF2pU/FIxrJyFI testhost (ECDSA)
256 SHA256:4zT4lmi0U8DWX1+HfDPa9g2z0nuo+/3carB4lxusq1U testhost (ED25519)

Система отобразит информацию о ключе вместе с его отпечатком SHA-256.

Наконец, мы можем сравнить отпечатки с помощью скрипта compare_fingerprints.sh, который мы создали ранее.

Лучшие практики и соображения

Проверка отпечатков SSH – важный шаг в защите удаленных соединений.

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

Получение доверенных фингерпринтов

Важно получать доверенные отпечатки из надежных источников.

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

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

Проверка совпадений отпечатков

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

Даже одна опечатка или несовпадение символов может стать тревожным сигналом.

Если фингерпринты не совпадают, следует проявить осторожность.

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

Настройка SSH-клиента

Кроме того, некоторые SSH-клиенты позволяют настроить более строгие параметры проверки хоста.

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

Этот процесс повышает безопасность, хотя может быть неудобен для часто посещаемых серверов.

Заключение

В этой статье мы узнали, что отпечатки SSH генерируются с помощью различных криптографических алгоритмов, таких как MD5, SHA-1 и SHA-256, каждый из которых имеет свои преимущества и потенциальные уязвимости.

Хотя MD5 и SHA-1 широко поддерживаются и работают быстро, они считаются менее безопасными и постепенно отходят на второй план, уступая место SHA-256 и другим усовершенствованным алгоритмам.

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

Наконец, использование таких команд, как ssh-keygen с опцией -E или ssh-keyscan, поможет получить и сравнить отпечатки различных форматов, что гарантирует, что мы подключаемся к нужному серверу.

см. также:

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий