Издано: апреля 23, 2009
Хранение открытых ключей SSH в DNS
Автор: Игорь Чубин
Написано на основе: http://www.debian-administration.org/articles/503
На этой странице описывается как организовать хранение открытых ключей
SSH в DNS и обеспечить дополнительную проверку подлинности удалённого
хоста с их помощью.
Описываемый способ повышения безопасности SSH является спорным. Если
кому-то удалось выполнить MITM-атаку и внедриться внутрь SSH-сеанса,
он точно также сможет выполнить и DNS-spoofing. Он будет намного
более ценным, когда будет доступна поддержка DNSSEC.
При подключении к очередному новому SSH серверу вам на экран выдаётся
приглашение с информацией об открытом ключе сервера. Тем самым сервер
пытается доказать вам свою подлинность.
Как вы проверяете, что этот сервер действительно тот, за кого себя
выдаёт? В идеале, вы должны знать отпечаток ключа сервера, который
можно получить с помощью команды ssh-keygen, находясь на самом
сервере.
Вы должны знать отпечатки ключей (key fingerprint) — записать их или
сохранить на каком-то носителе, который всегда с вами.
После первого подключения ключ сохраняется в файле ~/.ssh/known_hosts
(либо вместе с именем/адресов хоста, которому соответствует ключ,
либо, в более новых версиях, с хэшем этого адреса; если нужно хранить
адрес не в хэшированном виде, установите HashKnownHosts no в
/etc/ssh/ssh_config или в ~/.ssh/config). При последующих подключениях
сравнение происходит с этим ключом. Если замечены отличия, ssh сообщит
вам о них, и подключиться, в общем случае, уже не получится.
Наиболее небезопасным является именно момент первого подключения и
первого набора слова yes. Некоторые организации размещают свои ключи
на доступных по сети ресурсах, например, в Web, другие — полагаются
на то, что пользователь/администратор запомнит эти ключи сам. Как
правило, в последнем случае yes просто набирается вслепую.
Построение списка ключей
Клиент ssh помимо традиционно используемого пользовательского файла
~/.ssh/known_hosts в поиска отпечатков ключей может читать и
глобальный файл /etc/ssh/ssh_known_hosts, если он существует.
Создать такой файл, который будет содержать, например, ключи хостов в
локальной сети, можно с помощью программы ssh-keyscan.
или ещё проще
Обратите внимание, что для каждого хоста команда выполняется дважды: с
его коротким и длинным именем. Ключ ищется по имени, которое точно
соответствует имени, указанному при вызове ssh. При доступе по
IP-адресам в данном случае приглашение будет по-прежнему выводиться.
Хранение открытых ключей SSH в DNS
В современных версиях SSH-клиентов, есть возможность проверить ключ на
соответствие ключу, хранящемуся в DNS.
Эта возможность включается при помощи опции VerifyHostKeyDNS в
конфигурационном файле программы ssh.
Если ключ найден в DNS сообщение будет выглядеть так:
В противном слуае сообщение будет выглядеть иначе:
Создание записей DNS о ключах выполняется так:
Будет создана RR-запись на основе существующего файла.
Также можно использовать скрипт:
Пример вызова:
Полученная запись должна быть добавлена в файл соответствующей зоны
DNS.
Popularity: 9% [?]
Tagged with: cgi, debian, dns, HTTP