Защита паролей пользователей в настольных приложениях (Rev 2) - PullRequest
11 голосов
/ 22 октября 2008

Я делаю клиент для Твиттера и оцениваю различные способы защиты информации для входа пользователя.

ВАЖНО: мне нужно защитить данные пользователя от других приложений. Например, представьте, что произойдет, если бот начнет воровать пароли Twhirl или Hotmail / GMail / Yahoo / Paypal из приложений, которые запускаются на рабочем столе пользователя.

Разъяснение: я спрашивал об этом раньше без "важной" части, но пользовательский интерфейс stackoverflow не помогает с добавлением деталей позже в диалоге Q / A.

  • Хеширование, очевидно, не делает этого
  • Обфусцирование обратимым образом похоже на попытку спрятаться за моим пальцем
  • Простой текст звучит и, вероятно, неразборчиво
  • Требование от пользователя вводить пароль каждый раз делает приложение утомительным

Есть идеи?

Ответы [ 7 ]

13 голосов
/ 22 октября 2008

Это уловка-22. Либо вы заставляете пользователя каждый раз вводить свой пароль, либо храните его небезопасно (запутанно, зашифровано и т. Д.).

Способ исправить это - в большем количестве операционных систем встроить встроенные менеджеры паролей - например, в брелок OS X. Таким образом, вы просто сохраняете свой пароль в связке ключей, ОС сохраняет его в безопасности, и пользователь должен ввести только 1 мастер-пароль. Многие приложения (такие как Skype) в OS X используют Keychain, чтобы делать именно то, что вы описываете.

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

5 голосов
/ 26 мая 2009

Сохраните его в виде обычного текста и сообщите пользователю .

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

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

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

5 голосов
/ 23 октября 2008

Я думаю, что вам не хватает общей картины:

Если рабочий стол скомпрометирован, вы F # *% ED!

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

4 голосов
/ 29 октября 2012

Если вы делаете клиент для Твиттера, используйте его API

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

xAuth позволяет настольным и мобильным приложениям обмениваться имя пользователя и пароль для токена доступа OAuth. Однажды токен доступа разработчики с поддержкой xAuth должны избавиться от имени входа и пароль, соответствующий пользователю.

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

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

Использовать какую-нибудь цепочку для ключей

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

Другие ограничения урона

Могут быть вещи, которые я пропустил, взять Google за «лучшие практики безопасности» и начать читать то, что может иметь отношение.

РЕДАКТИРОВАТЬ (в ответ на желаемое общее решение случая)

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

Я никогда не использовал OSX Keychain, поэтому сейчас я расскажу о SELinux. В SELinux вы также можете гарантировать, что эти учетные данные будут предоставлены только вашей программе. И если мы продолжим работу на уровне ОС, вы также можете подписать все процессы от загрузки до криптографии, чтобы быть уверенным, что никакая другая программа не может имитировать вашу программу. Это все за пределами типичной пользовательской системы, и, учитывая этот уровень настройки, вы можете быть уверены, что пользователь недостаточно наивен, чтобы быть скомпрометированным, или системный администратор достаточно соблюдает требования. На этом уровне мы могли бы защитить эти полномочия.

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

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

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

2 голосов
/ 23 октября 2008

Я не понимаю ... почему шифрование не годится? Используйте большой ключ и сохраните ключ в хранилище ключей компьютера (в предположении Windows). Готово и готово.

2 голосов
/ 22 октября 2008

При дальнейшем созерцании я думаю, что нашел способ. Я буду использовать аутентификацию ASP.net для настольного приложения своего приложения, хранить их учетные данные в Интернете и позволять диспетчеру паролей Internet Explorer обрабатывать локальное кэширование этой дополнительной пары или учетных данных для меня.

Мне нужно будет только, чтобы они проходили аутентификацию через форму Facebook-API во время первого входа в систему.

0 голосов
/ 14 июня 2014

OSX: используйте связку ключей

Windows: используйте CryptProtectData и CryptUnprotectData

Linux: используйте GNOME Keyring и KDE KWallet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...