Перейти к содержимому

Ssh fingerprint что это

  • автор:

Отпечатки ключей SSH на GitHub

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

These are GitHub’s public key fingerprints:

  • SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s (RSA)
  • SHA256:br9IjFspm1vxR3iA35FWE+4VTyz1hYVLIE2t1/CeyWQ (DSA — deprecated)
  • SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM (ECDSA)
  • SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU (Ed25519)

You can add the following ssh key entries to your ~/.ssh/known_hosts file to avoid manually verifying GitHub hosts:

github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= 

For more information, see «Meta.»

Работа с ssh-ключами

Как следует из названия — это ключ для ssh, т.е. используется программой ssh (или другим ssh-клиентом, в дальнейшем так и будем говорить: ssh-клиент) для авторизации на удаленном сервере через демон/сервис sshd (будем называть этот сервер ssh-сервером)

Если вы попали на эту страницу, значит в дальнейшем Вы таким способом будете (или от Вас требуют) авторизоваться (т.е. доказать, что это именно Вы) на каком-то unix-подобном сервере.

  • для работы на суперкомпьютере/суперкомпьютерах
  • для работы на сервере с вашим сайтом (на хостинге или выделенном)
  • и много где еще

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

  • публичная часть ключа (или публичный ключ)
  • приватная/закрытая часть ключа (или закрытый ключ)

Публичная часть — это замок, а приватная часть — это Ваш личный ключ. Именно публичная часть используется сервером для Вашей авторизации (сможете ли Вы открыть ключом шкатулку или нет).

Не компрометируйте свою закрытую часть ключа, что может произойти при:

  • передаче другому лицу (по аналогии: с железного ключа можно снять восковой отпечаток и отдать ключ обратно, копий ключа уже будет сколько угодно), примеры:
    • хранение на флешке ключа и передача флешки (даже на время) других людям (чтобы они на нее сохранили что-нибудь, например)
    • подключение флешки в сторонний компьютер
    • хранение ключа на компьютере в классе (администратор класса может получить к нему доступ)
    • хранение ключа в почте (аналогично: может получить доступ администратор почтового сервера)
  • посылке по открытым каналам (аналогично, копию снять ничего не стоит), пример:
    • посылка по электронной почте (даже себе)
  • и других обстоятельствах, когда доступ к закрытому ключу могут получить третие лица.

Более подробно о защите ssh-ключа

Чем это лучше использования пароля

Если Вы привыкли использовать системы с паролем, у Вас может возникнуть вопрос, почему администраторы сервера рекомендуют/заставляют Вас пользоваться ssh-ключами.

  • простой пароль могут подобрать;
  • сложный пароль пользователь может забыть;
  • пароль пользователя может перехватить программа-шпион;
  • пользователь может раскрыть свой сложный пароль путем записывания пароля в записной книжке, на столе и т.д.
  • Пользователь создает (если ключей еще нет) открытый и закрытый ключи
  • Открытый/публичный ключ копируется на удаленный ssh-сервер и кладется в специальный файл в директории того пользователя, в кого и надо залогиниться. Скорее всего будет использоваться файл ~/.ssh/authorized_keys.
  • ssh-клиент отправляет ssh-серверу свой публичный ключ (поэтому публичный ключ у Вас тоже должен быть).
  • Сервер проверяет файл ~/.ssh/authorized_keys на наличие присланного ключа, если он в файле найден, ssh-сервер отправляет клиенту сообщение, зашифрованное публичным ключом (шкатулку закрытую на замок)
  • Клиент должен расшифровать сообщение с помощью своего приватного ключа (открыть шкатулку), если приватный ключ защищен паролем, ssh-клиент попросит пользователя ввести пароль, чтобы сначала расшифровать сам ключ.
  • Если сообщение расшифровано (обратно прислана открытая шкатулка), то правильность закрытого и открытого ключей считается подтвержденной и пользователю предоставляется доступ на сервер.
  • для подбора надо не только подобрать очень большой открытый ключ (скажем при длине ключа в 2048 бит он сложнее пароля из 8 символов примерно в 10^500 раз), но и подобрать закрытую пару к подобранному открытому ключу (тоже очень сложная и дорогая задача)
  • несколько пользователей могут логиниться под одним логином на удаленном сервере не обмениваясь общими секретами, иными словами:
    • если требуется для работы групповой логин, то имея пользователей с разными ключами всегда можно определить тот набор из пользователей, которые смогут логиниться в данный момент времени под этим групповым логином

    Как установить ssh-клиент

    • *BSD (FreeBSD /NetBSD/OpenBSD):
      • ssh-клиент уже есть в системе
      • ssh-клиент уже есть в системе
      • в современных дистрибутивах должен быть, проверьте что есть команда ssh, если не работает:
        • Ubuntu/Debian: sudo apt-get install openssh-client в терминале. Или через центр приложений Ubuntu (как следует из названия, лишь в Ubuntu)
        • в остальных дистрибутивах: читайте документацию по своей системе
        • Если у вас Windows 10, можно воспользоваться прослойкой Windows Subsystem for Linux и получить Linux-подобное окружение. В нём справедливы инструкции для GNU/Linux выше, и команда ssh, скорее всего, уже будет присутствовать
        • Либо оконный клиент PuTTY:
          • ссылка на страницу скачивания, рекомендуется скачивать инсталятор
          • Инсталятор версии 0.63 (ссылка может устареть)
          • Либо два файла: сама программа, генератор ключей

          Кстати PuTTY есть и под Unix-системы.

          Как создать ssh-ключ

          1. Установить ssh-клиент (если еще не установили). По поводу установки смотри предыдущий раздел.
          2. Далее — в зависимости от предпочтений:
            • если вы предпочитаете ssh-клиент PuTTY (для Windows)
            • если вы предпочитаете ssh-клиент openssh (для *nix, WSL)

          Использование различных ключей в одном клиенте

          • разграничением ключей по серверам (скажем, на особо секретные сервера можно заходить по ключу с паролем, а на менее секретные — безпарольным ключом)
          • тем, что уже имеющийся ключ не подходит серверу (например BlueGene не принимает в данный момент ключи ECDSA) и надо создать другой ключ.
          • так сложилось
          • можно при запуске с помощью ключа -i указать нужный ключ (указывается закрытая часть ключа)
          • либо прописать настройку IdentityFile в конфигурационном файле (обычно ~/.ssh/config) для нужного сервера
          • более подробно — на странице про создание и использование ключей в openssh
          • putty сохраняет параметры ключа в параметрах сессии
          • более подробно — на странице про генерирование и использование ключей в PuTTY

          Зачем нужен отпечаток (fingerprint) ключа

          • посылаете письмо с открытым ssh-ключом
          • вводите текст открытого ssh-ключа через форму на сайте (через браузер)
          • например через бумагу с подписью:
            • Вы распечатываете отпечаток на бумаге,
            • заверяете его своей подписью,
            • преподаватель заверяет Вашу подпись и все это передает нам
            • администратор проверяет подпись преподавателя (поскольку преподавателей сильно меньше студентов и меняются они реже, это довольно простая операция)
            • администратор берет отпечаток от присланного другим способом публичного ключа и сверяет с тем, что принесли на бумаге
              • если все совпало, то помещает открытый ключ в Вашего пользователя
              • Если используете программу ssh для соединения, то:
                • для создания используйте программу ssh-keygen:
                  • ssh-keygen -l -f путь_к_публичному_ssh-ключу
                  • для нашего примера (RSA-ключ) можно использовать путь к закрытому ключу
                  • в результате будет что-то вида: 2048 4c:d1:96:6f:dd:e5:67:ce:55:8b:fb:38:b2:a2:63:c5 user@host (RSA)
                  • для создания используйте программу puttygen:
                    • puttygen -l путь_к_закрытому_ключу
                    • в результате будет что-то вида: ssh-rsa 2048 4c:d1:96:6f:dd:e5:67:ce:55:8b:fb:38:b2:a2:63:c5

                    SSH-ключи генерация и использование

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

                    Когда говорят о SSH-ключах, то имеется в виду пара ключей: приватный ключ и его так называемый «слепок» или «отпечаток» — публичный ключ, на английском упоминается как «fingerprint». Идея авторизации по SSH-ключам состоит в том, что с помощью публичного ключа, который должен храниться на удалённом узле (сервере SSH) информация зашифровывается, а приватным ключом, который должен быть доступен только его владельцу и только на клиентской машине — расшифровывается. А откуда же приватный ключ знает, что поступившую от сервера зашифрованную информацию он способен и должен расшифровать? Всё очень просто — публичный ключ, как отмечалось выше, является цифровым «слепком» или «отпечатком» приватного ключа. SSH-ключи создаются или правильнее сказать, генерируются в паре, один из которых всегда является «отпечатком» другого. Именно по этому отпечатку в присылаемом от сервера сообщении приватный ключ и распознаёт, что соединение устанавливается с узлом, на котором «свои», а не «чужаки». Для того, чтобы авторизация по ключам работала, необходимо публичный ключ (его содержимое) поместить в специально предназначенный файл на сервере — authorized_keys. Обычно этот файл расположен по адресу ~/.ssh/authorized_keys. Символ «~» означает домашний каталог пользователя.

                    Сгенерировать ключи можно при помощи утилиты PuTTYgen (Windows, Linux), входящей в комплект PuTTY, либо воспользоваться командой ssh-keygen в консоли Linux. В первом случае, как можно догадаться, всё выполняется посредством графического интерфейса. Также нужно заметить, что PuTTY генерирует ключи формата PPK, а команда ssh-keygen – в формате openSSH. Это необходимо учитывать при генерации ключей, поскольку не все клиенты, поддерживающие авторизацию по ключам поддерживают оба формата. Но даже если получилось так, что у имеющегося ключа формат не поддерживается клиентом, то можно воспользоваться инструментом импорта/экспорта, предоставляемый всё той же утилитой PuTTYgen, и который доступен в главном меню под пунктом «Conversions».

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

                    В Linux после ввода команды ssh-keygen в консоли, пользователю будет предложено указать место хранения ключей и здесь можно оставить предлагаемый по умолчанию вариант: ~/.ssh/. По умолчанию у публичного ключа будет имя id_rsa.pub, у приватного — id_rsa. Далее будет предложено ввести для приватного ключа парольную фразу. Это нужно для того, чтобы ключом мог воспользоваться только его владелец. Но эта опция необязательна, парольную фразу можно оставить пустой. Затем будет сгенерирована пара ключей, которые автоматически сохранятся в указанный каталог. Этот каталог не должен иметь прав на запись. Теперь, после размещения публичного ключа на сервере можно устанавливать SSH-соединение с авторизацией по ключу, выполнив команду ssh username@host, где «username» — имя пользователя для авторизации, а «host» — IP-адрес или имя узла/сервера. Утилита ssh сама найдёт в папке ~/.ssh/ (т. к. это каталог по-умолчанию) нужный ключ для авторизации.

                    При использовании SSH-клиентов в Windows во время создания/сохранения подключения нужно просто указать путь к ключу — это стандартная процедура для всех SSH-клиентов под Windows. Нужно помнить, что ключи форматов PPK и openSSH обратной совместимости не имеют. На сервере и у клиента должны быть ключи одного формата.

                    Комментарии

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

                    Популярные метки
                    • ASP.NET MVC (17)
                    • Windows Azure (15)
                    • Javascript (12)
                    • инвестирование (9)
                    • AngularJS (8)
                    • ASP.NET Web API (8)
                    • Работа (6)
                    • SimpleMembership (5)
                    • Angular (4)
                    • акции (4)
                    • Visual Studio (3)
                    • Razor (3)
                    • TypeScript (3)
                    • SEO (3)
                    • Version Control (3)
                    • Knockout (3)
                    • Безопасность (2)
                    • jQuery (2)
                    • Entity Framework (2)
                    • Git (2)

                    Кто потерял ключи: по следам SSH

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

                    Что такое отпечаток

                    SSH-отпечаток — это число, которое вычисляется от открытого ключа, который хранится по пути /etc/ssh в файле с разрешением pub. Когда вы впервые подключаетесь к узлу, вам предлагается его аутентифицировать. И в качестве валидатора выступает строка вида 56:ca:17:72:0b:d4:3c:fd:5e:23:fb:7b:9e:9a:c8:42 — MD5-сумма от открытого ключа.

                    The authenticity of host '192.168.100.124 (192.168.100.124)' can't be established. RSA key fingerprint is 56:ca:17:72:0b:d4:3c:fd:5e:23:fb:7b:9e:9a:c8:42. Are you sure you want to continue connecting (yes/no)?

                    Если вы впервые подключаетесь к узлу, то увидеть такое сообщение естественно. Но если вы уже аутентифицировали этот узел и подключались к нему прежде, то стоит задуматься: «Почему произошло изменение отпечатка?». Возможно, вы переустанавливали целевую систему или сгенерировали новый ключ? А может, вы подключаетесь совсем не к той машине, к которой собирались.

                    Как считается отпечаток

                    Итак, SSH-отпечаток — это хеш-сумма. В нашем случае это MD5-сумма от открытой части RSA-ключа.

                    Открытая часть ключа:

                    root@ubuntu:/etc/ssh# cat /etc/ssh/ssh_host_rsa_key.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrID5HFOZiQlq6DDUCsLOG5xJFOMbxtqPTtgL0BfEyRVQ1AGD9kwSWnAU7bm/uFmfkfG5ff/8S02PKaQo26sYIWi8/NyOGMyLNnCLpMJkJ+CT12qrqpD+3Q749DpVzBBbCUaYiDNg7RbKxbbnSZUe9k69P4FE0itS4MQDFAnD0XY78aQuxNpIQUexTIP0b4QuIaShV0c6FXmpHHqr85uZ9t1cTdLtl3Kphv3yu6Z+bkGBd+c80pdV+islTUGa+YJse0rvi/qP8AU67KNXscAc4UDe1yaMG5Y3eUshvt3OTCXliYQKw3NIw/KzXbbY6s/sB49LAvDOal4FK6ZAA+HUP root@ubuntu 

                    Декодируем строку AAAAB. A+HUP из base64 и подсчитаем MD5-сумму получившейся строки:

                    root@ubuntu:/etc/ssh# awk '' ssh_host_rsa_key.pub | base64 -d | md5sum 56ca17720bd43cfd5e23fb7b9e9ac842 

                    Мы получили исходный отпечаток.

                    В трафике ключ передается так:

                    Вместо RSA могут использоваться и другие ключи, например ECDSA, ED25519. При помощи утилиты ssh-keyscan мы можем получить открытую часть ключа SSH сервера целевой машины.

                    root@ubuntu:/etc/ssh# ssh-keyscan -t ED25519 192.168.100.124 # 192.168.100.124 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6 192.168.100.124 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF8GXOsOnWBf1NY6Px6upViTXX0ZOw9txOEjwxMORafZ 
                    root@ubuntu:/etc/ssh# ssh-keyscan -t RSA 192.168.100.124 # 192.168.100.124 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6 192.168.100.124 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrID5HFOZiQlq6DDUCsLOG5xJFOMbxtqPTtgL0BfEyRVQ1AGD9kwSWnAU7bm/uFmfkfG5ff/8S02PKaQo26sYIWi8/NyOGMyLNnCLpMJkJ+CT12qrqpD+3Q749DpVzBBbCUaYiDNg7RbKxbbnSZUe9k69P4FE0itS4MQDFAnD0XY78aQuxNpIQUexTIP0b4QuIaShV0c6FXmpHHqr85uZ9t1cTdLtl3Kphv3yu6Z+bkGBd+c80pdV+islTUGa+YJse0rvi/qP8AU67KNXscAc4UDe1yaMG5Y3eUshvt3OTCXliYQKw3NIw/KzXbbY6s/sB49LAvDOal4FK6ZAA+HUP 

                    Также мы можем видеть баннер, который сообщает нам версию сервера, номер протокола и версию ОС: # 192.168.100.124 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6 .

                    Поиск одинаковых отпечатков. Сравнение поисков

                    Сервис shodan.io уже собрал всю необходимую нам статистику. Shodan предлагает искать отпечатки так:

                    import shodan api = shodan.Shodan(YOUR_API_KEY) # Get the top 1,000 duplicated SSH fingerprints results = api.count('port:22', facets=[('ssh.fingerprint', 1000)]) for facet in results['facets']['ssh.fingerprint']: print '%s --> %s' % (facet['value'], facet['count']) 

                    Во время анализа отпечатков сервис вел себя нестабильно. Долгое время отсутствовала возможность фильтрации фасетов по стране. Не работала конструкция вида api.count(‘port:22 country:RU’, facets=[(‘ssh.fingerprint’, 20)]) . Как следствие, приходилось делать выборку через facets для конкретного отпечатка по топ-странам api.count(‘e2:40:24:40:b8:87:4e:41:1f:d4:68:69:67:b2:22:5d’, facets=[(‘country’, 20)]) .

                    Сравните результаты вывода:

                    fa = api.count('e2:40:24:40:b8:87:4e:41:1f:d4:68:69:67:b2:22:5d', facets=[('country', 20)]) for i in range(len(fa['facets']['country'])): if fa['facets']['country'][i]['value']=='RU': print fa['facets']['country'][i]
                    api.count('port:22 country:RU', facets=[('ssh.fingerprint', 10)])['facets']['ssh.fingerprint'][0]

                    Заметная разница в 14%.

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

                    Также можно искать отпечатки в лоб:

                    results = api.search('e2:40:24:40:b8:87:4e:41:1f:d4:68:69:67:b2:22:5d') results['total'] 

                    Есть ограничение выборки в 100 записей на страницу, но можно выбирать результаты по страницам:

                    api.search('e2:40:24:40:b8:87:4e:41:1f:d4:68:69:67:b2:22:5d', page=2) 

                    Интересно посмотреть на статистику распределения ключей по странам.

                    fp30 = <> for i in api.count('port:22', facets=[('ssh.fingerprint', 30)])['facets']['ssh.fingerprint']: fp=<> fp['count'] = i['count'] fp['country']= api.count(i['value'], facets=[('country', 100)])['facets']['country'] fp30[i['value']]=fp print fp30 

                    Сравним значения разных годов:

                    Топ-10 — 2015:

                    dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0, 321014 32:f9:38:a2:39:d0:c5:f5:ba:bd:b7:75:2b:00:f6:ab, 245499 d0:db:8a:cb:74:c8:37:e4:9e:71:fc:7a:eb:d6:40:81, 161471 34:47:0f:e9:1a:c2:eb:56:eb:cc:58:59:3a:02:80:b6, 149775 df:17:d6:57:7a:37:00:7a:87:5e:4e:ed:2f:a3:d5:dd, 105345 81:96:a6:8c:3a:75:f3:be:84:5e:cc:99:a7:ab:3e:d9, 97778 7c:a8:25:21:13:a2:eb:00:a6:c1:76:ca:6b:48:6e:bf, 93686 c2:77:c8:c5:72:17:e2:5b:4f:a2:4e:e3:04:0c:35:c9, 88393 1c:1e:29:43:d2:0c:c1:75:40:05:30:03:d4:02:d7:9b, 87218 03:56:e6:52:ee:d2:da:f0:73:b5:df:3d:09:08:54:b7, 64379
                    e7:86:c7:22:b3:08:af:c7:11:fb:a5:ff:9a:ae:38:e4, 343048 34:47:0f:e9:1a:c2:eb:56:eb:cc:58:59:3a:02:80:b6, 138495 dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0, 109869 32:f9:38:a2:39:d0:c5:f5:ba:bd:b7:75:2b:00:f6:ab, 46451 62:5e:b9:fd:3a:70:eb:37:99:e9:12:e3:d9:3f:4e:6c, 41578 d0:db:8a:cb:74:c8:37:e4:9e:71:fc:7a:eb:d6:40:81, 39126 7c:a8:25:21:13:a2:eb:00:a6:c1:76:ca:6b:48:6e:bf, 38816 8b:75:88:08:41:78:11:5b:49:68:11:42:64:12:6d:49, 34203 1c:1e:29:43:d2:0c:c1:75:40:05:30:03:d4:02:d7:9b, 32621 03:56:e6:52:ee:d2:da:f0:73:b5:df:3d:09:08:54:b7, 29249 c2:77:c8:c5:72:17:e2:5b:4f:a2:4e:e3:04:0c:35:c9, 28736 59:af:97:23:de:61:51:5a:43:16:c3:6c:47:5c:11:ee, 25110 7c:3e:bc:b9:4b:0d:29:91:ed:bd:6e:4c:6b:60:49:14, 22367

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

                    Карта отпечатков

                    Далее выведем на экран ключи и их статистику. Статистику собираем по 30 самым частым странам. Она содержит название страны в формате iso alpha2 (2-буквенное обозначение) и долю совпадений в общем числе нахождений отпечатка.

                    for i in fp30: print i, fp30[i]['count'] sum = fp30[i]['count'] for j in fp30[i]['country']: if 100*j['count']/sum > 0: print '%s: %s' % (j['value'], 100.0*j['count']/sum) 

                    Да, 146% процентов может получиться из-за того, что данные в базе неполностью индексированы.

                    За 2015 год:

                    dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0 332493 ES: 90.0605953479 TW: 3.56833133558 US: 2.1252561631 http://chartsbin.com/view/32232 
                    32:f9:38:a2:39:d0:c5:f5:ba:bd:b7:75:2b:00:f6:ab 254856 CN: 54.5263608791 TW: 41.3041225361 DO: 1.22736474116 US: 1.18763860965 
                    d0:db:8a:cb:74:c8:37:e4:9e:71:fc:7a:eb:d6:40:81 162800 US: 54.9035226422 JP: 45.0382223913 
                    34:47:0f:e9:1a:c2:eb:56:eb:cc:58:59:3a:02:80:b6 151027 DE: 69.7611572028 US: 27.9946735249 ES: 1.41647682396 
                    df:17:d6:57:7a:37:00:7a:87:5e:4e:ed:2f:a3:d5:dd 108057 CN: 99.7404030473 
                    81:96:a6:8c:3a:75:f3:be:84:5e:cc:99:a7:ab:3e:d9 101156 TW: 100.0 
                    8b:75:88:08:41:78:11:5b:49:68:11:42:64:12:6d:49 75760 PL: 100.0 
                    57:94:42:63:a1:91:0b:58:a6:33:cb:db:fe:b5:83:38 39167 IN: 38.2145131455 AU: 9.01840676835 US: 8.73335961428 TR: 6.34381538648 AE: 4.14531340025 ZA: 3.3538526852 SA: 3.15977802711 MX: 3.0384813658 GB: 2.80498529278 FR: 2.56542438669 IR: 2.5199381387 IT: 2.3440579798 TH: 2.32889589714 DE: 2.31676623101 BR: 2.19243715317 MY: 1.98623282894 NG: 1.47678685144 KE: 1.46465718531 TW: 1.14625344937 
                    e7:86:c7:22:b3:08:af:c7:11:fb:a5:ff:9a:ae:38:e4 343048 US: 99.9988339824 
                    34:47:0f:e9:1a:c2:eb:56:eb:cc:58:59:3a:02:80:b6 138495 DE: 54.827972129 US: 42.5546048594 GB: 1.33795443879 ES: 1.27946857287 
                    dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0 109869 ES: 88.2241578607 TW: 4.07485277922 US: 3.3376111551 DK: 1.1104133104 VC: 1.0594435191 
                    32:f9:38:a2:39:d0:c5:f5:ba:bd:b7:75:2b:00:f6:ab 46451 CN: 49.5188478181 TW: 44.5932272717 DO: 1.59738218768 US: 1.22494671805 
                    62:5e:b9:fd:3a:70:eb:37:99:e9:12:e3:d9:3f:4e:6c 41578 US: 84.3907835875 SG: 9.02881331473 NL: 6.58521333397 

                    Можно заметить, что есть отпечатки, которые встречаются только в одной стране или почти только в одной (90%).

                    81:96:a6:8c:3a:75:f3:be:84:5e:cc:99:a7:ab:3e:d9 TW: 100.0% 8b:75:88:08:41:78:11:5b:49:68:11:42:64:12:6d:49 PL: 100.0% df:17:d6:57:7a:37:00:7a:87:5e:4e:ed:2f:a3:d5:dd CN: 99.7404030473% 59:af:97:23:de:61:51:5a:43:16:c3:6c:47:5c:11:ee US: 99.9953928728% c2:52:47:0f:8b:82:b9:3c:74:ee:64:b5:35:f4:c5:c3 MY: 99.7626425793%

                    Возьмем, например, Польшу:

                    8b:75:88:08:41:78:11:5b:49:68:11:42:64:12:6d:49 PL: 100.0%

                    Статистика по баннерам, в которых присутствует отпечаток:

                    [('SSH-2.0-OpenSSH_5.9p1 Debian-8netart1\r\n', 37188), ('SSH-2.0-OpenSSH_6.2p2 Ubuntu-7netart1\r\n', 10390), ('SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-15netart2\nKey type: ssh-rsa\nKey: AAAAB3NzaC1yc2EAAAADAQABAAABAQCnt2+LOdS1Gy/47UXMfHDYQERQQR5M4/CYsfT7IE3FYQ/m\nwJO6rLKLcUo+q4U+0iIH6uBSXG5HNa4569rg2eWH5lUiJHEL1pPIA9wKKZ+MpMoE9nkr1xaXxVK5\nqO1gUfaYCo+VYre2CJDe3HIJlUht3PITdxmQTwnL/tJHHBkR8xrgEpjF+9FjFKwdE7ZCNObqvhK0\nPio/318DyUiRK/JaIqggL0K9KzoGytq7uKSkECFMYCDTqPmdDerCEiT+C5Lxy6ZOdp4yTyxjOM7E\nsr0C/ePzPvT8rCLayz3GzBnEwZ4QKlOxbZHl/48LxtWlY/vROkiLTuU3kcpFqvo0Uc/3\nFingerprint: 8b:75:88:08:41:78:11:5b:49:68:11:42:64:12:6d:49', 3421), ('SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-15netart2\nKey type: ssh-rsa\nKey: AAAAB3NzaC1yc2EAAAADAQABAAABAQCnt2+L', 3421), ('SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-15netart2\r\n', 2)]

                    Судя по торговой марке NetArt, это, скорее всего, nazwa.pl — польский хостинг.
                    Статистика для отпечатка dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0 показана в исходной статье. Это предустановленный ключ SSH-сервера Dropbear v0.46. Очень старый уязвимый SSH-сервер. Количество устройств с этим ключом до сих пор очень велико.

                    Статистика по России за 2015 год:

                    e2:40:24:40:b8:87:4e:41:1f:d4:68:69:67:b2:22:5d 50107 ------------------------------------- OJSC Rostelecom 49794 OJSC Rostelecom, Vladimir branch 160 OJSC RTComm.RU 46 OJSC Bashinformsvyaz 32 CJSC ER-Telecom Holding 11 1c:1e:29:43:d2:0c:c1:75:40:05:30:03:d4:02:d7:9b 26286 ------------------------------------- OJSC Rostelecom 19596 OJSC Bashinformsvyaz 1025 MTS OJSC 1024 CJSC Teleset-Service 645 VimpelCom 340 2d:7b:35:e5:33:66:d5:ee:0d:58:19:cb:ae:e7:90:ea 24036 ------------------------------------- National Cable Networks 14860 OJSC Rostelecom 8179 VimpelCom 214 Net By Net Holding LLC 101 CJSC ER-Telecom Holding 94 f5:50:8d:ca:f7:5a:07:41:08:81:65:2e:b3:a4:d6:48 14065 ------------------------------------- Net By Net Holding LLC 13923 OJSC Central telegraph 73 Optilink Ltd 29 Web Plus ZAO 23 Iskratelecom CJSC 10 
                    Выводы

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

                    Так чем опасны «дубли»? Допустим, злоумышленник скомпрометировал ключ, и теперь он знает соответствующий данному открытому ключу закрытый ключ. Вендорам оборудования и хостерам этот ключ уже известен, так как они причастны к его выпуску. В этом случае можно провести MitM-атаку, например ARP Spoofingили DNS Spoofing. Злоумышленник подменяет исходный сервер своим и ждет соединения, при этом жертва не получает сообщения о недоверенном сервере. Таким образом злоумышленник в состоянии узнать пароль жертвы.

                    Потенциальные жертвы подобной атаки — все пользователи предустановленного ПО. Например, готовых сборок, таких как Bitnami и TurnKey. Казалось бы, достаточно просто сменить пароль… но не все так просто. Не все меняют предустановленные пароли, что же говорить о выпуске новых ключей?

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

                    Будьте внимательны, вовремя обновляйте ПО.

                    Автор: Артур Гарипов, Positive Technologies

                    • ssh
                    • информационная безопасность

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *