Еще в 1981 году Лесли Лампорт в книге «Password Authentication with Insecure Communication» перечислил три способа выяснения чужого пароля: получение доступа к системе, «прослушка» и преднамеренное или случайное его раскрытие самим владельцем. За прошедшее время многое изменилось, но в целом список Лампорта по-прежнему справедлив.
Пароли остаются самым распространенным способом аутентификации. Процесс их использования прошел через много трансформаций по мере того, как появлялись все новые способы взлома и усиления механизмов, лежащих в основе парольного доступа. Внутренние механизмы защиты систем стали более устойчивыми, а линии связи более защищенными от перехвата и доступными более широкому кругу пользователей. Можно ли за счет усовершенствования внутренних механизмов защиты сетей ослабить строгость требований к паролям, которые пользователи вынуждены сегодня ежедневно создавать в больших количествах?
Проблемы с длиной пароля
В ранние годы Интернета считалось, что длина пароля в 6–8 символов достаточна, однако сегодня во многих случаях требуется пароль из 12–14 символов. Сложность пароля увеличивается не только за счет большей длины, но и за счет символьного состава. Раньше допускалось наличие лишь символов верхнего или нижнего регистра, а теперь часто требуется использовать одновременно символы обоих регистров, цифры и специальные символы. Однако пользователи редко выполняют требование создания пароля в виде случайной последовательности символов — такие последовательности труднее запомнить, а набор их может быть затруднен и чреват опечатками. А если определенное число раз ошибиться, то вас могут не пустить в систему и понадобится смена пароля посредством процедуры восстановления. Поскольку это обычно занимает какое-то время, то пользователь часто на скорую руку создает пароль, отвечающий лишь минимальным требованиям надежности аутентификационной системы. Кроме того, людей нередко раздражает, что вводимый пароль не отображается, чтобы его не видели посторонние, хотя именно пользователей часто критикуют за создание слишком слабых паролей.
У офисных работников, которым приходится создавать сильные пароли для доступа к многочисленным корпоративным системам, обычно есть еще несколько личных аккаунтов электронной почты, социальных сетей, онлайн-банков и т. д. В 2007 году Динеи Флоренсио и Конрад Эрли провели исследование и выяснили, что посетители Web-ресурсов в среднем имеют по 25 аккаунтов и пользуются ежедневно примерно восемью паролями для доступа к ним («A Large-Scale Study of Web Password Habits», Proc. 16th Int’l Conf., ACM, 2007).
Эксперты по безопасности, которым обычно необходим доступ к большему числу аккаунтов, чем рядовым пользователям, признаются, что нередко имеют по три – пять групп паролей для разных применений, каждый из которых они используют одновременно на многих сайтах. В последнее время управлять множеством паролей стало сложнее: тем, кто часто переключается между компьютером, смартфоном и планшетом, приходится каждый раз заново вводить пароли с помощью клавиатур или сенсорных экранов разного формата.
На страже паролей
Аутентификация пользователей по паролю — технология старая и достаточно удобная, однако в процедуру проверки может вмешаться злоумышленник, особенно при аутентификации по сети, поэтому основные усилия разработчиков систем проверки паролей направлены сегодня на максимальное приближение этой процедуры к пользователю. Следует отметить, что даже при наличии криптографических сертификатов и одноразовых паролей каждый раз пользователю приходится вводить и дополнительный секрет — PIN, гарантирующий, что доступ к системе получил легальный пользователь, а не посторонний, который нашел или украл устройство. Пароль в открытом виде должен существовать максимально короткое время, а основные усилия разработчиков направлены на усложнение перехвата паролей, от которого не спасают длинные и уникальные последовательности. Вероятность перехвата можно уменьшить, сократив количество ввода с клавиатуры или организовав ввод пароля в защищенной среде, где не могут работать перехватчики.
Для сокращения количества вводов секретной информации была предложена схема единократного входа (Single Sign-On, SSO), позволяющая с помощью одного пароля получить доступ к нескольким системам. Однако эта технология должна быть поддержана приложениями, поэтому ее использование ограниченно, хотя имеются реализации, в которых специальное приложение сохраняет пароли в своей шифрованной базе данных и каждый раз эмулирует процесс аутентификации пользователя, подставляя пароли из базы. Пользователь же вводит при старте приложения только пароль для дешифрования базы, причем эта операция проводится локально. Подобные системы обычно присваивают пользователю некий случайный идентификационный код, который и проверяется вместо пароля. Например, в веб-приложениях используются так называемые «печеньки» (cookies), которые хранятся в браузере и передаются на сервер с каждым запросом. Перехват этого временного идентификатора позволяет злоумышленнику некоторое время работать от имени легального пользователя, поэтому использование технологий однократной аутентификации может привести к появлению новых угроз.
Еще одним способом сокращения числа ввода пароля является федеративный доступ, при котором один сервер доверяет процедуре аутентификации другого. Такой доступ предусмотрен в наборе стандартов для веб-сервисов, в частности, можно использовать федеративный доступ для аутентификации посетителей сайтов с помощью технологии OpenID. В этом случае веб-сервер получает возможность проверить временный идентификатор социальной сети. Данный метод позволяет сократить количество паролей от приложений, которые нужно запомнить пользователю, — достаточно знать один пароль от социальной сети, чтобы аутентифицироваться на разнообразных веб-ресурсах.
Для защиты от перехвата паролей разработаны различные криптографические системы выработки общего секрета, которые основаны либо на асимметричном шифровании, либо на хеш-функциях. Они предполагают наличие некоего первоначального секрета, который знают обе стороны и который в дальнейшем используется для защиты пароля от перехвата. Часто для хранения первоначального секрета применяются специальные аппаратные устройства: USB-ключи для хранения сертификатов открытых ключей или специальные токены для хранения вектора инициализации при использовании хеш-функций, однако для доступа к этим устройствам все равно приходится помнить PIN-код. Все эти устройства неудобны — их нужно носить с собой, помнить PIN, устанавливать специальные драйверы для чтения и соблюдать другие регламенты. При этом PIN может быть подсмотрен, устройство украдено или потеряно, а программное обеспечение, установленное на компьютер, может быть перехвачено троянской программой.
Одна из возможных технологий защиты использует мобильные телефоны — общим секретом является номер телефона, который регистрируется за пользователем. Для доступа к системе посетитель сайта вводит свое имя и номер телефона, и если они совпадают с данными из базы сервера, то на телефон приходит SMS с одноразовым паролем.
Практически во всех технологиях защиты пароля пользователь должен помнить PIN-код, однако этот код, как правило, состоит из небольшого набора цифр и является слабым с точки зрения перебора. В то же время само устройство обеспечивает защиту от перебора, блокируясь при небольшом количестве ошибок. В результате общая вероятность обхода такой парольной защиты может оказаться ниже, чем для длинного и сложного пароля.
— Валерий Коржов (oskar@osp.ru) — обозреватель «Computerworld Россия» (Москва).
Циклы смены паролей
На пользователей также возлагается задача смены паролей с определенной частотой. В случае одного пароля больших усилий не требуется, но когда паролей много, то становится гораздо сложнее. Пользователю с 20 аккаунтами, для каждого из которых нужно менять пароль раз в полтора месяца, придется выбирать новый каждые пять дней. Нередко при замене множества паролей пользователь применяет один и тот же пароль или группу похожих.
Некоторые организации потратили немало времени и сил на то, чтобы дать пользователям возможность получать доступ к множеству систем с помощью единственного пароля, но в таких случаях выбор доступных систем может быть ограниченным, так как нужна возможность соединения друг с другом их механизмов аутентификации. Системы единовременного входа могут существенно уменьшить число паролей, которые нужно запоминать пользователям, и упростить понимание потребности в сильных, защищенных паролях. Однако похоже, что в большинстве организаций системы единого пароля не используются.
Требование о смене пароля каждые 90 дней выглядит разумным, но каково же его обоснование? Как объясняют Филип Инглесант и Анджела Cассе («The True Cost of Unusable Password Policies: Password Use in the Wild», Proc. 28th Int’l Conf. Human Factors in Computing Systems), смена паролей обеспечивает некоторую защиту против фишинга и перехвата нажатий на клавиши. Такую же роль играет использование сильных паролей.
Возможно, более целесообразным было бы совершенствовать сами механизмы аутентификации по паролю, одновременно приучая пользователей брать на себя больше ответственности за управление паролями.
Цена сильных паролей
Сложные манипуляции по поддержке надежности паролей отнимают время у пользователя, однако, как правило, это не рассматривается в качестве издержек при работе с системой. Конрад Эрли подсчитал, что цена создания паролей составляет около 90 долл. на пользователя в год без учета стоимости возможного инструктажа по составлению надежных паролей. Таким образом, для системы из 2 тыс. пользователей может оказаться неучтенным ежегодный расход в более чем 170 тыс. долл. К тому же, как полагает Эрли, сами пользователи редко выигрывают от того, что выполняют требование создавать более сложные пароли, а необходимость делать это не только отрицательно сказывается на продуктивности, но и мешает ее объективной оценке.
Эрли также указывает, что обычно пользователи не несут ответственности в суде, если они не являются исполнителями компьютерного преступления, и расплачиваться за потери приходится владельцу системы.
Наконец, в большинстве случаев даже более сильные пароли не мешают атакующему получить доступ к системе путем угадывания. Сегодня в системах, как правило, предусмотрено определенное число попыток, прежде чем аккаунт блокируется — этот принцип, по мнению Флоренсио и Эрли, более эффективен, чем сильный пароль. В системе с блокировкой аккаунта после некоторого числа вводов неверного пароля атака на перебор пароля, имеющего более шести символов, вряд ли будет успешной. Поэтому есть сомнения в нужности более сильных паролей.
Проблемы с именем пользователя
В крупных системах угадывать или собирать имена пользователей обычно несложно. Возможность накапливать имена представляет собой трудную в устранении уязвимость — атакующему проще и безопаснее попробовать отвечающий требованиям системы единственный пароль с большим числом имен пользователей, чем, наоборот, перепробовать множество паролей с одним именем пользователя. Когда источников атаки несколько, ей может быть трудно дать отпор, особенно в случае широкого географического разброса пользователей.
Легко угадываемые имена пользователей труднее защитить. Источником уязвимости часто становится принятый в ряде компаний структурированный принцип записи пользовательских имен, например требующий наличия фамилии и инициала имени. В случае крупных структурированных систем атакующие могут легко собирать имена пользователей из опубликованной информации — например, из списков контактов с адресами электронной почты. В некоторых системах можно уточнить список реальных пользовательских имен, поскольку нередко в механизмах входа исполняется различный код в зависимости от того, было ли введено действительное или недействительное имя пользователя. Скрипт атакующего может определить различия в поведении системы по разнице времени отклика.
Атаковать крупную систему можно путем подбора пароля, предположительно используемого сразу во многих аккаунтах. Такой пароль выбирается с учетом минимальных требований системы. После этого можно попытаться найти имя пользователя, которое сработает с этим паролем. Собрав миллион имен пользователей, атакующий получает миллион попыток проверить, с каким из них сработает пароль.
Более сильные пароли усложняют поиск подходящего к какому-либо из имен пользователей, однако эффективнее было бы составлять сами имена так, чтобы их нельзя было легко выявить или протестировать с паролем. Один из вариантов — использовать случайную последовательность символов в качестве имени пользователя. Самому пользователю можно не запоминать сложный логин — его можно куда-либо записать, но для успеха атаки в этом случае потребуется гораздо больше усилий.
***
Здесь не ставилась цель предложить решение проблемы паролей для больших систем — важно было показать, что вместо усиления паролей разумнее совершенствовать сам механизм аутентификации. Разработчикам таких механизмов необходимо найти решения, которые снизят нагрузку на пользователей.
Ким Шаффер ( kim.schaffer@nist.gov ) — специалист отдела компьютерной безопасности Национального института стандартов и технологий США.