Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Статьи и новости каталога сети Kamako: Безопасная авторизация через cookies


Безопасная авторизация через cookies



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

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

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

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

Какие данные вы храните в COOKIES для того, чтобы распознать пользователя при входе на сайт? Большинство наверняка ответит, что это всякие хэши секретных слов в коде, md5 хэши тех же паролей и т.п. Проблема в том, что все эти данные хранятся в открытом виде на стороне сервера и взломщику не составит труда сформировать полностью идентичную копию COOKIES, зайти на сайт и автоматически авторизоваться под тем пользователем, данные которого он получил. Обратите внимание, взломщику даже не обязательно знать реальный пароль пользователя, достаточно знать его хэш. Ниже приведен пример атаки с использованием этой уязвимости.

В качестве примера скрипта возьмем движок всем известного форума phpBB с www.phpBB.com . Исходные коды форума может изучить любой желающий, и как следствие этого, сайты по безопасности, например www.securityfocus.com , содержат обширные базы со списками уязвимостей. От версии к версии список ошибок, позволяющих исполнить удаленный PHP код или вставить свой SQL запрос уменьшается. Тем не менее, к сожалению, даже в самых последних версиях присутствуют ошибки, позволяющие взломщику добыть данные, расположенные в базе данных форума. Практически всегда можно извлечь идентификатор и md5 хэш пароль любого зарегистрированного в форуме пользователя. О том, как это делается, в этой статье не будет рассказано. Все желающие могут изучить списки уязвимостей этого форума на сайтах по безопасности.

Механизм авторизации в phpBB устроен таким образом, что для входа на сайт под именем какого-либо пользователя достаточно знать его идентификатор и md5 хэш пароля, больше никаких данных не нужно! COOKIES, которые записываются скриптом в браузер пользователя есть сериализация следующего массива,

<?

$sessiondata = Array();

$sessiondata['autologinid']='2f9hd6494hdf928339ddakc6e9uae2fb';
$sessiondata['userid']='2';

?>

где в качестве $sessiondata['autologinid'] идет как раз md5 хэш пароля пользователя.

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

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

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

1. Операционная система
2. Браузер
3. Установленные приложения
4. Другая информация, которая вряд ли поменяется у пользователя при его следующем посещении

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

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

Внимательный читатель, возможно, задаст вопрос: "Зачем нам манипуляции с COOKIES, раз мы и так получили доступ к базе?". Дело в том, что как правило в отлаженных приложениях, основанных на MySQL базе данных очень сложно выполнить несанкционированный "UPDATE …" запрос, но зато гораздо более легче выполнить запрос "SELECT ….", что связано с технологией вставки SQL запроса в скрипт(SQL injection). Поэтому мы рассматривали те ситуации, когда взломщик на первоначальном этапе может только посмотреть данные. Если скрипт написан таким образом, что узнав данные из базы можно очень просто подделать COOKIES администратора, то взломщик очень легко получит административный доступ со всеми вытекающими последствиями.

Автор: Дмитрий Филатов, ООО "БизнесМедиа"

читать другие статьи от Kamako.info



В избранное