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

68

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

Septagram
источник
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
MikeyB
источник
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)

Tacticus
источник
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 попыток взлома только за последнюю неделю. Как вы думаете, сколько тысяч случайных предположений потребуется, чтобы злоумышленник наткнулся на ваш пароль?

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

MikeMurko
источник
1

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

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

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

Pioz
источник
Разве 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
arganzheng
источник