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


68

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


2
Пароли являются однофакторной аутентификацией, которую можно прослушивать, угадывать и воспроизводить. Ключи (возможно) двухфакторные. Возможность входа в систему из любого места с одним фактором недопустима в некоторых системах.
— Алекс Холст

Ответы:


25

Есть плюсы и минусы для pw или аутентификации на основе ключей.

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

Все сводится к следующему: когда вы выполняете аутентификацию на основе ключей, вы должны защитить свой ключ парольной фразой. Если у вас не запущен ssh-agent (ssh-agent освобождает вас от необходимости вводить вашу фразу-пароль каждый раз), вы ничего не получили в плане удобства. Безопасность спорна: вектор атаки теперь сместился с сервера на ВАС, или на Вашу учетную запись, или на Ваш персональный компьютер (...) - их может быть, а может и не быть легче сломать.

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

редактировать: О, только что увидел, что вы говорите о домашнем сервере. Я был в той же ситуации, «пароль» или «флешка с ключом на нем» всегда со мной? Я выбрал первый, но изменил порт прослушивания SSH на что-то отличное от 22. Это останавливает всех этих грубых злоумышленников, перебирающих зверства, форсирующих целые диапазоны сети.


Во многих случаях изменение SSH-порта с 22 может быть не очень хорошей идеей. adayinthelifeof.nl/2012/03/12/…
— Tymek

75

Использование ключей SSH имеет одну уникальную особенность по сравнению с паролем: вы можете указать разрешенные команды. Это можно сделать, изменив ~/.ssh/authorized_keysфайл на сервере.

Например,

command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

разрешит только команду `/usr/local/bin/your_backup_script.sh" с этим конкретным ключом.

Вы также можете указать разрешенные хосты для ключа:

from="yourclient,yourotherclient", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

Или объединить два:

from="yourbackupserver", command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

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


Очень очень полезный совет.
— Сачин Дивекарь

3
В дополнение к этому использование Keys похоже на длинный 2000-символьный пароль (что технически еще более надежно) по сравнению с тем, что вы можете
— ввести

3
Два очень полезных совета об аутентификации SSH, но на самом деле не отвечает на этот вопрос для меня ...
— MikeMurko

Если вы хотите заставить пользователя, прошедшего проверку паролем, выполнить определенную команду, измените его оболочку входа. Кроме того, «предоставление временного доступа без раскрытия пароля» - очень плохая идея. Существуют сотни различных способов сохранить доступ на потом.
— b0fh

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

48

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

PasswordAuthentication no
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes

7

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

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


4
96-битная энтропия означает 80-символьный пароль, если он написан на английском языке; 15 символов, если это случайная тарабарщина из набора печатных символов. Вы уверены, что ваши пароли SSH такие длинные / надежные?
— MadHatter

3
Если у вас есть несколько паролей с 96-битной энтропией, которые не будут уязвимы для атак по словарю, вам, вероятно, все равно придется использовать какое-то программное обеспечение для управления паролями, так что вы фактически потеряете доступный везде элемент использования паролей. ,
— Ник Даунтон

5
@SachinDivekar - это 96 битов энтропии, только если используются случайные пароли из набора [a-zA-Z], а не если это английские слова.
— Яап Старейшина

16
@NickDownton - Вы можете иметь хороший длинный пароль, не прибегая к программному обеспечению Keypass. Нечто подобное mywifesnameisangelaandshehasanicebuttнеуязвимо для атак по словарю, очень сильно и очень просто для запоминания, но невозможно угадать. И это идет с бонусом, если брауни набирает очки, если вам когда-нибудь нужно будет сообщить пароль своей жене.
— Марк Хендерсон

7
Извини, Марк, но это не так. Заданная вами парольная фраза имеет 37 символов и, следовательно, примерно 44 бита энтропии, что слабее, чем 7 случайных печатных символов, и в высшей степени подвержено атакам. Прочитайте статью Википедии о работе Клода Шеннона для деталей, но в результате письменный английский очень предсказуем - например, после «mywifesname» слово «is» почти гарантировано. Для надежных паролей, включающих слова, четыре случайных слова, соединенные вместе из словаря, дадут вам около 10 ** 23 возможностей, что составляет около 77 бит энтропии; все еще не большой, но не плохой.
— MadHatter

7

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


2
Это особенно актуально при подключении к неправильному серверу из-за опечатки. Например, в какой-то момент времени .cg был подстановочным знаком, указывающим на одну машину с включенным ssh. Каждый раз, когда вы набираете .cg для .ch, вы в итоге подключаетесь к этому ящику и
— теряете

@ b0fh действительно. Насколько я могу судить, это единственная реальная уязвимость, представленная использованием паролей с помощью ssh. Если кто-то уже владеет сервером, к которому вы подключаетесь, или может подделать IP-адреса, к которым вы подключаетесь (MITM), вы уже потеряли.
— варят

6

Ключи ssh предотвращают атаки человека по середине на ваш пароль.

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

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

с паролем они будут иметь ваши учетные данные.

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

хотя установка программного обеспечения для монтирования является проблемой (truecrypt)


1
Это не верно. Как только вы узнаете открытый ключ сервера (что вы делаете, если вы добавили его в свой кэш и не получили MITM при первом соединении), вы становитесь неуязвимыми для атак MITM. Аутентификация по ключу / паролю не имеет к этому никакого отношения. Пароль никогда не передается в открытом виде по проводам, безопасное соединение при проверке подлинности на уровне компьютера (каков ваш / мой открытый ключ) всегда устанавливается перед проверкой подлинности на уровне пользователя (каков ваш пароль / докажите мне, что этот открытый ключ принадлежит вам) ,
— Томас

3
Томас, на самом деле многие люди игнорируют предупреждение об изменении отпечатка пальца. Аутентификация Pubkey гарантирует защиту MITM даже в том случае, если закрытый ключ сервера каким-то образом скомпрометирован или человек безучастно набирает «да»: злоумышленнику приходится выбирать между невозможностью видеть трафик и отправкой открытого ключа, который не будет входить в систему, что является выиграть.
— Score_Under

5
И ответчику: вам не нужно использовать truecrypt, закрытые ключи openssh поставляются с собственным необязательным шифрованием на основе пароля.
— Score_Under

5

Это компромисс, как говорит @MartinVejmelka.

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

Пароль имеет следующие проблемы:

  • Если оно короткое, оно может быть грубо вынуждено
  • Если это долго, это легко забыто
  • Это может быть серфингом

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


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

1
в этот момент потерянный ключ может быть удален, а новый ключ добавлен. С паролями (особенно паролями общего пользования) это может быть БОЛЬШОЙ болью и включает в себя много стонов.
— SplinterReality

Один из моих (недавно вышедших на пенсию) пароли: 08Forging2?seminal*^Rajas-(Posed/|. Это генерируется случайным образом, но у меня нет проблем с запоминанием. И удачи в серфинге на плечах или грубой силе.
— Finnw

1
@finnw Исправить скобы батареи для лошадей :-) security.stackexchange.com/q/6095/485
— Рори Олсоп,

2

Хорошие моменты, упомянутые здесь уже.

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

Недавно я был предупрежден Нортоном о загрузке установщика Zombee Mod (не jar, установщик) для добавления полета к банке Minecraft. Я посмотрел на детали, и Нортон перечислил много утилит на этом сайте, которые были помечены как содержащие троян. Я не знаю, правильно это или нет, но это было довольно специфично с именами файлов. Известно также, что трояны помещаются в (некоторые) хранилища до их распространения.


2

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

Я нахожу лучший ответ на вопрос, почему руководства пользователя часто рекомендуют аутентификацию SSH по паролю, взяты из руководства по Ubuntu для SSHOpenSSHKeys. Я цитирую,

Если вы не думаете, что это важно, попробуйте зарегистрировать все попытки злонамеренного входа в систему, которые вы получите на следующей неделе. На моем компьютере - совершенно обычном настольном ПК - было более 4000 попыток угадать мой пароль и почти 2500 попыток взлома только за последнюю неделю. Как вы думаете, сколько тысяч случайных предположений потребуется, чтобы злоумышленник наткнулся на ваш пароль?

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


1

Passwd auth метод действительно небезопасен (imho). С помощью этого механизма пароль будет передаваться на сервер sshd (как уже сказал @ramon). Это означает, что некоторые пользователи могут изменить сервер sshd для получения пароля. С атакой «человек посередине» это очень легко осуществить в локальной сети.

Вы можете просто установить исправление на сервере sshd, установив это исправление ( https://github.com/jtesta/ssh-mitm ). Используйте arpspoofи, iptablesчтобы поместить ваш пропатченный сервер между клиентом и аутентичным сервером sshd.

Пожалуйста, отключите аутентификацию пароля: откройте файл конфигурации /etc/ssh/ssh_configи добавьте строку PasswordAuthentication no.


Разве SSH-клиент не проверяет сервер на наличие отпечатков пальцев RSA? После того, как вы хотя бы раз вышли на этот конкретный сервер, его отпечаток запомнится, поэтому в случае возможных атак MITM SSH выдаст предупреждение, не так ли?
— Септаграмма

1
Да уж. Предупреждение появляется, но в 99% случаев это происходит из-за переустановки операционной системы, изменения конфигурации и т.д., большинство пользователей игнорируют предупреждение и продолжают работу.
— Pioz

@Septagram Многие поставщики учетных записей оболочки не имеют привычки публиковать текущий отпечаток ключа сервера для новых подписчиков, для миграции учетных записей пользователей на новые серверы и т. Д.
— Дамиан Йеррик,

-2

Вы можете обойти с -o StrictHostKeyChecking=noопцией. Это очень полезно при использовании ssh в сценарии оболочки.

ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o PasswordAuthentication=no -o ConnectionAttempts=5 xxUser@xxxHost
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.