2012-06-12 2 views
9

У меня есть веб-приложение, и мне поручено добавить безопасный вход для повышения безопасности, сродни тому, что Google добавил в аккаунты Google.Авторизация компьютера для доступа к веб-приложению

Use Case

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

Нам требуется очень легкое касание (это означает, что установка на стороне клиента не требуется) и работает с Safari, Chrome, Firefox и IE 7+ (к сожалению). Мы предложим безопасность x509, обеспечивающую адекватную безопасность, но нам все еще нужно решение для клиентов, которые не могут или не будут использовать x509.

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

На первый взгляд

Initial secure sign-on sequence diagram Гусеницы два отдельных значения (локальные данные или печенье): хэш, представляющий маркер, а также маркер устройства безопасного входа. Оба значения управляются (и записываются) веб-приложением и продиктованы клиенту. Ток SSO зависит от устройства, а также от порядкового номера. Это эффективно позволяет устройствам деавторизоваться (все токены SSO становятся недействительными) и смягчает повтор (неэффективно, хотя именно поэтому я задаю этот вопрос) с использованием порядкового номера и использует nonce.

Проблема

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

Мне кажется, что использование HMAC было бы лучше. Отслеживайте устройство, последовательность, создавайте nonce, timestamp и hash с закрытым ключом, затем отправляйте хеш и эти значения в виде обычного текста. Сервер делает то же самое (в дополнение к проверке устройства и последовательности) и сравнивает. Это кажется намного проще и надежнее .... предполагая, что мы можем безопасно вести переговоры, обмениваться и хранить секретные ключи.

Вопрос

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

ответ

5

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

Иными словами, в системе, как вы описали ее, вы поручаете и доверяете веб-браузеру клиента предоставлять свой токен устройства и токен SSO. Правильно? Если да, то как вы можете предотвратить перемещение этих токенов на другие устройства? (См стратегии смягчения, ниже.)

Теперь, чтобы ответить на ваши вопросы в лоб с этим в виду:

«Итак, как я могу безопасно вести переговоры закрытый ключ для уполномоченного устройства, а также то безопасно сохранить этот ключ? "

Это не помешает сделать это, но это не поможет, как я объясняю выше.

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

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

«Или есть что-то я могу сделать, чтобы мой первоначальный проект, чтобы смягчить уязвимость Я описываю? »

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

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

Вот некоторые идеи:

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

  • Вы можете попытаться запутать или скрыть локальные копии этих токенов, но это похоже на безопасность только через неизвестность.

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

  • Вы можете попытаться потребовать использования определенных настраиваемых браузеров, которые «блокируют» доступ к этим маркерам. Это всего лишь идея; Я не знаю, насколько это практично.

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

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

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

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

Надеюсь, это поможет. Я не считаю себя экспертом по безопасности, но мне нравится думать о проблемах дизайна. Вы можете получить более качественные ответы, если вы спросите у https://security.stackexchange.com/)

+0

Мы будем использовать одноразовый пароль для «непризнанных» машин или тех, чьи претензии терпят неудачу. Что касается других предложений, как я упоминал в вопросе, я должен реализовать «легкое прикосновение» (это означает, что он не требует дополнительного программного обеспечения), иначе я бы пошел по этому пути. Мое первоначальное решение предлагает «лучшее усилие» в свете того факта, что, как вы сказали, я не могу контролировать клиента, учитывая ограничения, которые мне даны, где, если все остальное не удается, мы отмечаем учетную запись и требуем проверки 1TP. – HackedByChinese

+0

Однако вы указываете на то, что система переместилась. Я думал об использовании geo IP API для записи приблизительного города пользователей. Расширяясь на этом, возможно, я могу использовать эвристику по IP-адресу клиента, чтобы попытаться обнаружить странное поведение, вернувшись к проверке 1TP, когда обнаружено что-то не в своем роде. Для действительно мобильных клиентов нам может потребоваться только x509 auth или установка клиентского программного обеспечения. В любом случае, спасибо, что задумались об этом. – HackedByChinese

+0

Рад помочь. Я только что нашел два других релевантных вопроса SO, которые могут дать вам некоторые идеи: [уникально идентифицировать компьютер] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- компьютер/671914 # 671914) и [отпечаток устройства для безопасного доступа клиента по сети] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network). –

1

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

Getting MAC address on a web page using a Java applet

Глядя онлайн Есть несколько способов, чтобы захватить MAC-адрес с помощью веб-страниц и апплетов.

+0

Если бы я должен был запускать Java-апплет, я бы подумал, что он будет надежно защищать частный/открытый ключ от ОС, а затем использовать HMAC. Использование Java-апплетов - интересная идея, но в основном она относится к категории «требуемого клиентского программного обеспечения». Может быть, я передумаю. Благодарю. – HackedByChinese

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