Безопасность при авторизации на сайтах по OpenID

в 11:52, , рубрики: IT-стандарты, OpenID, авторизация без паролей, авторизация на сайт, информационная безопасность, метки: , ,

OpenID это популярная в последнее время технология в сети Интернет, предназначенная для упрощения процедуры авторизации на сайтах. Если полноценная работа с WEB сайтом предполагает авторизацию пользователя, то у владельца WEB сайта возможны следующие пути:
1) Использовать стандартную регистрацию через ввод email и заполнения необходимых данных
2) Использовать авторизацию через указание личного идентификатора OpenID провайдера

Использование второго способа значительно увеличивает вероятность авторизации на сайте. Кроме того, этот способ зачастую дает владельцу сайта инфомацию о пользователе.

1) Цель использования OpenID авторизации

Основная цель – это упрощение авторизации. Упрощение достигается в децентрализованной системе единого входа, которая позволяет использовать один логин и пароль на большом количестве сайтов. На сайтах, поддерживающих OpenID, пользователям не приходится каждый раз регистрироваться и помнить данные для каждого сайта. Вместо этого им достаточно быть зарегистрированными на сайте «провайдера идентификации» OpenID (предоставляющего идентификатор). Так как технология OpenID децентрализованная, то любой сайт может использовать программное обеспечение OpenID в качестве средства входа. Удобство OpenID также заключается в том, что при авторизации по OpenID, посещаемому сайту сразу могут передаваться личные данные пользователя (email, Имя, пол, дата рождения и др) и ему не придется каждый раз вводить данную информацию — достаточно это сделать один раз на сайте OpenID провайдера.

2) Принцип работы OpenID авторизации

Принцип работы OpenID авторизации рассмотрим на примере.
Пользователь через WEB браузер заходит на некоторый интересующий его сайт(по официальной терминологии в OpenID — Relying Party, RP). Предположим, что далее пользователь хочет оставить комментарий на одном из блогов сайта. Без поддержки сайтом технологии OpenID пользователю будет предложено зарегистрироваться, что подразумевает создание или получение очередного логина и пароля. Если сайт поддерживает технологию OpenID, то рядом с полем регистрации будет обозначен входа по OpenID (чаще всего обозначено логотипом OpenID ). Далее пользователь может ввести OpenID-адрес — адрес персональной страницы пользователя на сервере OpenID провайдера (OP). Для примера, если пользователь получил свой OpenID на сайте Яндекса, то этот OpenID имеет вид username.ya.ru («username» — это логин пользователя на yandex.ru). Дальнейший процесс авторизации показан на диаграмме ниже.
Безопасность при авторизации на сайтах по OpenID

Ниже показаны скриншоты при авторизации на сайте www.livejournal.com при помощи OpenID идентификатора, выданным OpenID провайдером vkontakte.ru
a. Пользователь хочет написать комментарий на сайте www.livejournal.com. При этом он еще не регистрировался на сайте, но имеет OpenID идентификатор у провайдера vkontakte.ru, иными словами у него есть своя страница на сайте www.vkontakte.ru
b. Пользователь открывает сайт www.livejournal.com
c. Далее пользователь выбирает способ авторизации через OpenID и авторизуется на сайте провайдера OpenID.
Безопасность при авторизации на сайтах по OpenID

Безопасность при авторизации на сайтах по OpenID

d) OpenID провайдер предлагает авторизоваться, мы рассмотрим ниже на какие особенности надо обращать пользователю на этом шаге. Пока красным выделены места в URL, важные при авторизации.
Безопасность при авторизации на сайтах по OpenID

e) пользователь вводит свой логин и пароль OpenID провайдера, далее OpenID провайдер запрашивает, можно ли передавать дополнительные сведения сайту www.livejournal.com.
Безопасность при авторизации на сайтах по OpenID

f) через мгновение, в браузере появляется сайт www.livejournal.com, где пользователь уже авторизован и может писать комментарии.

Безопасность при авторизации на сайтах по OpenID

3) Аналоги OpenID

Кроме OpenID существуют и другие способы авторизации единым аккаунтом.
a) Прежде всего OpenID стоит сравнить с концепцией единого входа «Single sign on». Технологии очень похожи по принципу работы, но есть некоторые отличия:
— Если на веб-портале существует несколько обширных независимых разделов (форум, чат, блог и т. д.), то пройдя процедуру аутентификации по технологии Single sign on в одном из сервисов, человек автоматически получает доступ ко всем остальным, что избавляет его от многократного ввода данных своей учетной записи. Здесь функции OpenID и Single sign on похожи.
— «Single sign on», в отличии от OpenID, является централизованной, что подразумевает возможность использования аккаунта только внутри некой системы, например, внутри корпоративной сети. Например, пользователь водит логин и пароль и аутентификация проходит в неком доверенном корпоративном ресурсе (например, Active Directory). Далее, возможна автоматическая авторизация во многих приложениях и программах данной корпоративной сети (в том числе и в IE). Если пользователя покидает корпоративную сеть, то пользоваться Single sign on аккаунтом он уже не сможет.
— OpenID поддерживает передачу данных из профайла другим сайтам, а в «Single sign on» это не предусмотрено, так как вся информация профиля доступна только в пределах доверенной среды. Таким образом OpenID удобно для массовых пользователей, а «Single sign on» удобно применять внутри корпоративной сети
b) У компания Microsoft есть технология единой авторизации по LiveID и до недавнего времени данный аккаунт можно было использовать для единой авторизации на различных сервисах от Microsoft (MSN, Windows Live Hotmail, MSNBC и др). С 27 октября 2008 года Microsoft стал OpenID провайдером и LiveID можно использовать для авторизации на любых сайтах с поддержкой OpenID.

4) Крупные OpenID провайдеры и написание свого OpenID сервера

Некоторые список OpenID провайдеров приведен на сайте openid.net/get-an-openid/, но список далеко не полный, поэтому его стоит дополнить популярными в России и в мире OpenID провайдерами: vkontakte.ru, twitter.com, mail.ru, facebook.com. При выборе OpenID провайдера пользователю нужно быть осторожным, так как не факт, что мелкий провайдер не будет распространять во вне данные пользователя и что данный провайдер не закроется через год, что приведет к необходимости создания нового OpenID идентификатора уже у другого провайдера.
Для продвинутых пользователей существует возможность авторизации по OpenID с указанием URL своего сайта (например, www.ivan-petrov.ru), который, в свою очередь, будет пересылать запрос на авторизацию на тот OP (OpenID provider), который указан в HTML заголовке. В этом случае, при смене OpenID провайдера достаточно поменять код своей заглавной HTML страницы, а URL для авторизации по OpenID остается тот же – в нашем примере, www.ivan-petrov.ru. Использование своего сайта как идентификатора OpenID возможно на тех сайтах, которые предлагаю авторизоваться, указав URL OpenID. На LiveJournal.com это возможно.
Если пользователь вообще не доверяет сторонним OpenID провайдерам, то при небольших навыках программирования он может написать свой собственный OpenID сервер и использовать его как для своей авторизации так и для раздачи OpenID идентификаторов другим пользователям (см пример на www.opennet.ru/base/dev/openid_server.txt.html).

5) Анализ безопасности OpenID

К сожалению, спецификация на технологию OpenID (в данный момент OpenID Authentication 2.0) не описывает каким образом обеспечивается безопасность авторизации при использовании OpenID.
В связи с этим, в интернете ведутся длительные дискуссии по способам получения злоумышленниками конфиденциальных данных пользователя (например, пароля к своему OpenID аккаунту). Ben Laurie описал простой сценарий, при котором ваши login/пароль к OpenID-провайдеру (OP), например, LiveJournal, могут стать легкой добычей фишеров если не проявлять осторожность. В общих чертах, сценарий такой:
a) Пользователь заходит на некий сайт, например, для просмотра фотографий. Если пользователь хочет оставить комментарий под фотографией, то единственное что просит сайт — это зарегистрироваться или авторизоваться по OpenID. Пользователь выбирает OpenID, пишет туда, например, user_xxx.livejournal.com, и отправляет форму.
b) По общему принципу работы OpenID, пользователя теперь должны отправить на www.livejournal.com/openid/server.bml. Если пользователь уже аутентифицирован в livejournal.com, то сайту с фотографиями будет возращен признак успешной авторизации и высланы дополнительные параметры. Если же нет — LiveJournal попросит прежде ввести login/пароль. Это в теории. На практике, сайт с фотографиями может принадлежать злоумышленникам, и вместо OP endpoint может отправить пользователя на свой прокси, замаскировав url соотвествующим образом, например www.livejournal.com/openid/server.bml?lot_of_junk@evilcats.example.com. Пользователь увидит перед собой ту же страницу с livejournal.com, на которой нужно ввести свои данные, только показана она будет через прокси evilcats.example.com и login/пароль к livejournal.com останутся в логах прокси сервера.
Таким образом, если пользователь не будет внимательно следить за тем на какой странице он вводит свой логин и пароль, то существует вероятность получения этих данных злоумышленниками. Этот факт является сдерживающим фактором быстрого распространения технологии OpenID. Некоторые пользователи, ведущие блоги по OpenID активно обсуждают как можно избежать указанного выше сценария. Например, предлагается следующие способы защиты
a) Вариант генерации разового пароля:
— организация SSL канала между пользователем из OpenID провайдером
— наличие на ПК пользователя специальной cookie, которая записывается при первом обращении на сайт OpenID провайдера
— Cookie пересылается пользователю при подтверждении пароля, высланного на его емайл OpenID провайдером. Также Cookie храниться на стороне OpenID провайдера, и которая должна совпадать.
— Cookie высылается по SSL на ПК пользователя только после корректного ввода пароля
— При последующих авторизациях по OpenID на различных сайтах, OpenID провайдер сверяет Cookie с той что получена от ПК и далее выводит специальную картинку, которую знает только пользователь и которая загружена на сервере OpenID провайдера. Если пользователь не видит данную картинку, значит реального общения с OpenID сервером не происходит.
Данный метод позволяет улучшить авторизацию по OpenID, но требует включенных cookie в браузере, также появляется дополнительное звено в виде пароля на email.

b) Другим, более универсальным способом повышения безопасности при использовании OpenID является появление специальных плагинов в браузере пользователя. Без данного плагина вводить OpenID пароль пользователю не рекомендуется. Однако не факт, что данные плагины будут делать все основные разработчики браузеров.

c) И третий способ, это использование SSL сертификатов при авторизации у OpenID провайдера. Данный способ, с одной стороны повышает безопасность и облегчает авторизацию, так как пользователю не нужно вводить пароль. С другой стороны, сертификат может быть получен злоумышленником через трояны. Кроме того, поддержка SSL сертификатов есть только у крупных OpenID провайдеров, например myopenid.com.

Также надо отметить, что некоторые OP не принимают OpenID, зарегистрированный у другого OP и это несколько меняет определение ЕДИНОГО OpenID идентификатора.

6) Стандарты

— OpenID Authentication 2.0
openid.net/specs/openid-authentication-2_0.html

— OpenID Attribute Exchange 1.0
openid.net/specs/openid-attribute-exchange-1_0.html

— OpenID Simple Registration Extension 1.0
openid.net/specs/openid-simple-registration-extension-1_0.html

— Yadis Discovery Protocol (Developed separately from OpenID)
svn.infogrid.org/infogrid/docs/yadis/yadis-v1.0.pdf

Выводы

1. Технология OpenID является удобным способом авторизации на сайтах, поддерживающих данную технологию.
2. Владельцу OpenID не нужно хранить множество паролей для различных сайтов и предоставлять свой email адрес, ему нужно только знать URL на свой OpenID аккаунт и пароль к нему.
3. При авторизации и поддержании активной сессии на сайте OpenID провайдера, авторизация на других сайтах по OpenID будет проходить без ввода пароля, только путем указания URL своего OpenID.
4. Спецификацией версии 2.0 не обеспечивается должный уровень безопасности при использовании OpenID. Возможно улучшение безопасности в новых версиях спецификаций или при разработке и использовании специальных плагинов для Web браузеров (для ПК/PDA/Mobile browsers). Пока, для повышения безопасности опытным пользователям можно посоветовать регистрацию у OpenID провайдеров, предоставляющих SSL сертификаты.
5. Разработчики WEB сайтов и сервисов без труда могут добавить функционал авторизации по OpenID, так как все необходимые для этого библиотеки свободно предоставляются. Поддержка авторизации по OpenID существенно повышает usability сайта, что является предпосылкой к развитию данной концепции.

Автор: albion8

Поделиться

* - обязательные к заполнению поля