2008-10-22 2 views
11

Я делаю клиент Twitter, и я оцениваю различные способы защиты информации входа пользователя.Защита паролей пользователей в настольных приложениях (Rev 2)

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

Уточнение: я спросил об этом раньше, не используя «важную» часть, но интерфейс пользователя stackoverflow не помогает с добавлением деталей позже в цепочке Q/A.

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

Любые идеи?

+0

Вы не упомянули никакого беспокойства о Man-In-The-cpедней атак. Для всех, кто в одной и той же подсети, тривиально выполнять ее и перехватывать все ваши сообщения. – hurst 2008-10-23 00:53:50

+0

Какое количество времени и усилий, наложенных на атаку, вы пытаетесь защитить? Нет совершенной безопасности. – 2008-10-22 14:05:13

+0

Я думаю, что вопрос универсален. Если самые популярные настольные почтовые клиенты, которые обращаются к gmail/hotmail, не могут его решить, у нас есть серьезная проблема. – KCorax 2008-10-22 14:11:27

ответ

13

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

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

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

2

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

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

5

Я думаю, что вам не хватает более широкую картину здесь:

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

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

2

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

5

Сохраните его в текстовом виде и дайте знать.

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

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

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

4

Если вы делаете то клиент твиттер использовать их API

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

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

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

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

Используйте брелку какого-то

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

Другие ограничения повреждения

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

EDIT (в ответ на finnw желаемого общего решение случая)

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

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

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

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

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

0

OSX: Используйте брелок

Окна: Использование CryptProtectData и CryptUnprotectData

Linux: Использование GNOME Keyring и KDE KWallet

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