Как извлечь приватные ключи из ssh-агента?

ssh-add -l показывает, что к моему агенту SSH добавлено 3 ключа RSA.

ssh-add -L отображает эти открытые ключи.

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

Можно ли попросить ssh-agent выполнить операции с использованием закрытого ключа? Как я могу попросить его зашифровать / расшифровать номер для меня?

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

6 ответов

Решение

Получить закрытый ключ или выполнить шифрование по протоколу между ssh и ssh-agent невозможно, но получить закрытый ключ можно, выгрузив память ssh-agent. В Linux вы должны быть пользователем root, чтобы сделать дамп памяти.

Я только что нашел очень хорошее объяснение о том, как работает ssh-agent: http://www.unixwiz.net/techtips/ssh-agent-forwarding.html. Это частично отвечает на некоторые мои вопросы.

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

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

Таким образом, протокол между SSH-клиентом и ssh-agent не предоставляет SSH1 или SSH2 никакой возможности получить закрытые ключи от ssh-agent.

Однако в качестве пользователя root вы можете получить дамп памяти ssh-agent и попытаться извлечь секретный ключ оттуда. https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory делает именно это, и есть другие части программного обеспечения, упомянутые в разделе комментариев этой страницы. Тем не менее, программное обеспечение на этой странице не работает для меня на Debian Buster: дамп памяти не содержит никаких ключей, хотя ssh-add -l отобразил ключ RSA.

TLDR:Используя инструмент, вы можете автоматизировать извлечение закрытых ключей SSH из дампа памяти агента SSH (от имени пользователя root).

Этот инструмент может одновременно извлечь несколько закрытых ключей SSH из ssh-агента. Он поддерживает типы закрытых ключей SSH RSA и SSH ED25519.

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

Закрытые ключи, полученные с помощью этого инструмента, не зашифрованы и могут использоваться непосредственно для подключения к вашим серверам.

Дополнительную информацию см. в файле README проекта.

этотhttps://github.com/Kracken256/ssh-keyfinder

Раскрытие информации: я являюсь автором этого инструмента.

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

Если в Windows 10, очевидно, метод, описанный в в этом сообщенииблоге, работал в 2018 году. Автор ссылается на контрольный код на github:

tl;dr

Закрытые ключи защищены DPAPI и хранятся в кусте реестра HKCU. Я выпустил здесь код PoC, чтобы извлечь и восстановить закрытый ключ RSA из реестра.

Это скорее вопрос системного администратора, но просто посмотрите в ~/.ssh/id_rsa или id_dsa секретные ключи. Они должны были войти в ssh-agent в первую очередь...

Вам, вероятно, не нужно. Скорее всего, вы просто хотите открытый ключ:

ssh-add -L > ~/.ssh/id_rsa.pub
Другие вопросы по тегам