Есть ли безопасный способ хранения паролей, используемых для ssh скриптом?

16

Итак, во-первых, я знаю, что я должен использовать ключ аутентификации с SSH. Не надо мне это объяснять.

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

Я использую аутентификацию по ключу всякий раз, когда могу, но это не возможно на каждом сервере (я не контролирую это). Так что SSH с логином или иногда телнетом.

Так что для некоторых я просто храню пароли в БД, и мой сценарий беру их при необходимости. Проблема в том, что это не выглядит безопасным. Есть ли способ сделать его немного безопаснее?

Как какой-то конкретный способ хранения?

wokati
источник
1
Переменные Env. Дубликат SO: stackoverflow.com/a/4410137/2579527
Трэвис Столл
4
@TravisStoll Переменные среды не защищены.
Дженни Д
Я боюсь, что для вашей настройки хранение паролей в БД примерно настолько же безопасно, насколько это возможно. Вы можете сделать это зашифрованной БД, как файл keepass (я думаю, что есть по крайней мере модуль perl для доступа к db keepass), но тогда вам все равно придется где-то хранить пароль к базе данных, если вы не хотите вводить это каждый раз, когда вы вызываете свой скрипт. Может быть, немного лучше, если IFF вы вводите просто мастер-пароль каждый раз, когда вы вызываете свой скрипт.
Исаак
1
Даже если вы используете ключи аутентификации SSH вместо паролей, это гарантия безопасности - любой, кто может украсть вашу базу паролей, может просто украсть ваш личный ключ. Вы можете зашифровать свой закрытый ключ так же, как вы могли бы зашифровать свою базу паролей, но поскольку ваш сценарий должен разблокировать ключ (или базу паролей), он все еще уязвим для злоумышленника. Использование паролей вместо ключей немного увеличивает вашу уязвимость, поскольку открывает больше возможностей для кражи пароля, но даже использование ключей вместо паролей не является идеальной безопасностью.
Джонни
1
"иногда telnet", по-видимому, подразумевает, что пароль иногда даже будет передаваться в открытом виде по проводам ...?
Хаген фон Айцен

Ответы:

24

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

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

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

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

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


Теперь давайте на время обработать пароли как общедоступные . Что вы можете сделать, чтобы уменьшить ущерб?

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

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

Монитор . Всегда следите за доступом к серверам. Желательно, чтобы протокол аутентификации и команды выполнялись только для добавления в журнал . Не забудьте, например, следить за изменениями файла скрипта auditd.


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

goncalopp
источник
14

Короткий ответ - нет.

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

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

Дженни Д
источник
1
Я не уверен, что это категорическое НЕТ. Его сессия безопасна; файловая система может быть безопасной с установленными соответствующими разрешениями; так что если он может получить данные из файловой системы (сохраненный пароль) и передать их через stdin команде ssh, он должен быть в порядке, не так ли? Пожалуйста, смотрите ссылки, которые я дал на другой комментарий выше. Как вы думаете?
РРР
Если он действительно передает их через стандартный ввод, значит, есть уязвимость. С вашими предложениями это будет более безопасно, но не будет полностью так. Особенно с учетом того, что некоторые из сессий прошли через телнет.
Дженни Д
0

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

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

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

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

Дженс Тиммерман
источник