Почему я должен использовать аутентификацию с открытым ключом для SSH?

26

Я использую SSH-сервер и все еще использую простую аутентификацию по паролю. Везде, где я читаю о безопасности, мне рекомендуется использовать Аутентификацию с открытым ключом. Но я не получаю преимущества. Использовать их, на мой взгляд, небезопасно или очень удобно.

Конечно, если кто-то попытается взломать логин на моем SSH-сервере, Public-Key будет намного сильнее любого пароля. Но кроме этого, это совершенно небезопасно.

Консультанты в основном утверждают, что вам не нужно запоминать пароль. Насколько это небезопасно? Так что, если кто-то взломает мой компьютер, он получит не только мой компьютер, но и мой сервер? Если я использую SSH от разных клиентов, я должен хранить открытые ключи по одному для каждого из них, что увеличивает вероятность того, что они попадут в ложные руки. Я мог бы сохранить их на USB-флешке, которую я ношу с собой, но это может быть потеряно, и искатель имеет доступ к моему серверу.

Возможно, мне лучше работать с двухфакторной аутентификацией.

Есть ли какой-то аргумент, который я пропускаю? Каков лучший способ для меня?

Aravor
источник
10
Если все сделано правильно, аутентификация с открытым ключом является формой 2FA с чем-то, что вы знаете (парольная фраза для закрытого ключа) и чем-то, что у вас есть (закрытый ключ).
Свен
1
@EEAA Почему это важно, если он есть у вашего закрытого ключа?
user253751
6
С помощью закрытого ключа, если я заставлю вас подключиться к неправильному серверу по ошибке, вы не введете свой пароль на моем сервере.
user253751
1
Многие организации должны (по любой причине) требовать двухфакторной аутентификации. Это невозможно сделать, полагаясь на зашифрованные закрытые ключи.
EEAA
6
Что бы это ни стоило, я глубоко не согласен со Свеном в отношении классификации закрытого ключа как того, что у вас есть . Он не проходит фундаментальную проверку того, что у вас есть , потому что оно воспроизводимо произвольно, будучи просто цифровыми данными. Аутентификация с открытым ключом сама по себе не является 2FA; если вы говорите себе, что это так, вы дурачите себя из-за своей безопасности.
MadHatter поддерживает Монику

Ответы:

32

если кто-то взломает мой компьютер, он получит не только мой компьютер, но и мой сервер?

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

Но есть 3 преимущества для ключей:

1) Кэшируемая аутентификация. Введите ваш пароль один раз, выполните несколько команд SSH. Это очень полезно, если вы используете что-то, что использует ssh в качестве транспорта, например scp, rsync или git.

2) Масштабируемая аутентификация. Введите ваш пароль один раз, войдите в несколько машин . Чем больше у вас машин, тем полезнее это. Если у вас есть 100 машин, что вы делаете? Вы не можете использовать один и тот же пароль (если это не ферма клонов), и вы не можете вспомнить столько же. Таким образом, вам придется использовать менеджер паролей, и вы вернетесь к единой точке компромисса. По сути, ключевой парольной фразой является ваш менеджер паролей.

2b) Он масштабируется другим способом, если у вас есть несколько администраторов, использующих одни и те же системы, потому что вы можете отозвать ключи у пользователя A, не сообщая B, C, D, E, F ..., что пароль изменился.

(Это также может быть сделано с отдельными учетными записями и sudo, но тогда вам нужно как-то подготовить эти учетные записи)

3) Автоматизация и частичное делегирование. Вы можете настроить SSH для запуска определенной команды при подключении ключа . Это позволяет автоматизированному процессу в системе A что-то делать в системе B без полного доверия без пароля между ними.

(Это замена для rlogin / rsh, который был крайне небезопасен)

Изменить: еще одним преимуществом открытых ключей, а не паролей, является распространенный сценарий, когда сервер подвергается риску из-за уязвимости. В этом случае вход в систему с паролем немедленно компрометирует пароль. Войти с помощью ключа не! Я бы сказал, что это чаще, чем исходный рабочий стол администратора подвергается риску.

pjc50
источник
2
очень важно. авторизованные ключи легко управляются централизованно, изменение пароля и его распространение среди всех пользователей требует дополнительной работы.
Йонас Шефер
Какие существуют методы централизованного управления авторизованными ключами? (Я знаком с размещением файлов авторизованных
ключей
1
В тот момент, когда у вас есть несколько десятков или сотен серверов, вы, вероятно, используете Chef, Ansible, Puppet, Holo или что-то вроде того, что управляет ими. Или у вас есть авторизованные ключи в LDAP или другой базе данных.
Йонас Шефер
1
Не забывайте переадресацию агентов: вы можете войти в систему ssh -Aи оттуда, войти на машины, которые разрешают общедоступность вашего исходного хоста.
Halfgaar
@Halfgaar ... без особых изменений на хосте, с которого вы подключаетесь. Я только что изучил эту функцию, и мне это нравится!
Канадец Люк восстановит Монику
12

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

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

Есть похожие посты:

  1. Сообщение от serverfault .
  2. Почта из стека обмена безопасности .
  3. Пост от суперпользователя .
Халед
источник
2
Ключевая фраза является обязательным ИМХО. При использовании ssh-agent обратите внимание на опцию -t ssh-add, чтобы через некоторое время выгрузить ключи.
фуэрос
12

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

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

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

При аутентификации с открытым ключом клиент в основном подписывает некоторые данные, известные как серверу, так и клиенту, чтобы доказать, что он владеет закрытым ключом, и отправляет подпись на сервер. Эти подписанные данные включают в себя идентификатор сеанса, который зависит от случайных чисел, выбранных как клиентом, так и сервером, и, таким образом, отличается для каждого сеанса. Если MitM открывает свое собственное SSH-соединение с реальным сервером, у него будет другой ID сеанса, и, таким образом, подпись, предоставленная клиентом, там не будет работать.

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

Пауло Эберманн
источник
2

OpenSSH может иметь свой собственный CA для управления ключами хоста и клиента SSH и использовать списки отзыва на них. Это может повысить безопасность, обеспечиваемую аутентификацией на основе ключей.

фуэрос
источник
2

Вы правы в отношении претензии "вам не нужен пароль". Это действительно небезопасно на стороне клиента.

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

Для безопасности на стороне клиента вы должны защитить закрытый ключ с хорошей парольной фразой. Конечно, теперь подключение к серверу более громоздко, чем с паролем. Чтобы преодолеть это, вы можете использовать ssh-агент для хранения закрытого ключа в памяти, если вы собираетесь подключаться к серверу несколько раз подряд. Хорошей практикой является ограничение времени, в течение которого ключ должен храниться в памяти.

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

Возможно, мне лучше работать с двухфакторной аутентификацией.

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

Я верю, что что-то в этом роде AuthenticationMethods publickey,keyboard-interactiveможет быть добавлено к /etc/ssh/sshd_configэтой работе.

В более общем плане, проблема заключается в том, что пароли (сами по себе) не являются хорошим методом аутентификации, поскольку они часто имеют сомнительное качество. Очень простой «аргумент» для ключей против паролей заключается в том, что ключ, как правило, будет по крайней мере 2048 бит, а часто и больше (для ключей EC это будет эффективная сила, а не фактический размер). Эти биты также генерируются криптологически безопасным (или соответствующим) механизмом.

Пароль часто составляет менее 2048 бит и часто не получен из криптографически безопасного источника.

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

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

iwaseatenbyagrue
источник