2016-08-31 5 views
0

Я знаю, что «как безопасно хранить пароль?» вопросы были заданы много раз здесь; и я знаю, что ответ всегда «Никогда не делай этого! Храните хэши, никогда не храните пароли! Используйте bcrypt!»Лучшая практика хранения паролей для автоматизации

Но как насчет того, когда вы не можете использовать хэш для аутентификации? Например: автоматизированные процессы. Скажем, я написал приложение автоматизации, которое должно войти в SFTP-сайт или какую-то внешнюю службу, для которой требуется имя пользователя/пароль. Я не могу использовать хеш для аутентификации с помощью внешней службы, так что я должен делать?

Я отметил этот вопрос C# и ASP.NET, поскольку это две области, к которым этот вопрос относится конкретно к моей ситуации.

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

+3

Зависит ли вам пароль, хранящийся на одной машине или хранящийся в базе данных, поэтому любой компьютер в кластере мог бы использовать его? Кроме того, вам нужна модель угрозы, вам нужно четко указать, кто вы пытаетесь запретить чтение пароля. Это кто-то, кто получил базу данных базы данных? Дамп базы данных + источник, но нет способа выполнить код на сервере? Злоумышленник, который может выполнять код в том же контексте, что и IIS? Злоумышленник, имеющий стандартные права пользователя? Злоумышленник, у которого есть права администратора на машине? Мы не можем рассказать вам о лучшей практике, не зная, в какой ситуации вы находитесь. –

+0

@ScottChamberlain Спасибо за ваш комментарий. Я думаю, что лучший случай - это хранить его там, где любой компьютер в кластере может получить к нему доступ, поскольку автоматизированные приложения распространяются на разных машинах. Что касается вопросов модели угрозы, почему бы вам не попытаться защитить от всего вышеперечисленного? Я бы не хотел, чтобы пароли были скомпрометированы в любой из этих ситуаций ... –

+0

Поскольку «злоумышленник, у которого есть права администратора на машине», невозможно выполнить, они могут просто запустить Wireshark, установить поддельный сертификат SSL, который подменяет сайт вы входите в систему и смотрите, как пароль будет передаваться на сервер, и расшифровать его и зафиксировать его таким образом. Или, если это не SSL или каким-то образом защищено от этого, они могут вставлять DLL, которая печатает пароль в файл журнала, когда он отправляется на вызов API, который его использует. –

ответ

1

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

вариант (1): Использование базы данных с модулем HSM

Вы можете хранить пароли в зашифрованном виде в базе данных и выгоды от функции в SQL 2016 года "Всегда Encrypted (Database Engine)". Always Encrypted позволяет клиентам шифровать конфиденциальные данные внутри клиентских приложений и никогда не раскрывать ключи шифрования для механизма базы данных (SQL Database или SQL Server).

Вы можете использовать модули безопасности оборудования (HSM) с всегда зашифрованными.

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

Когда вы получаете HSM, вы также получаете библиотеки программного обеспечения, реализующие общие API-интерфейсы, такие как API Microsoft Crypto и API криптографии. Эти API называются Cryptographic Service Provider (CSP) и Cryptography API: поставщики CNG следующего поколения.

Ваши приложения могут связываться с HSM с использованием этих API.

Для дополнительной защиты модуля HSM вы можете: - связать HSM с сервером баз данных. - связать HSM с вашим администратором на сервере операционной системы.

для более подробной информации:

Always Encrypted (Database Engine) Using Hardware Security Modules with Always Encrypted

Кроме того, Oracle базы данных и другой двигатель может обеспечить шифрование с HSM

Securing Stored Data Using Transparent Data Encryption

Option (2): Сохранить пароль в файлах в защищенном хранилище с использованием модуля HSM:

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

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

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

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

Смежные вопросы