Функция "Запомнить меня" как угроза безопасности.

TheWanderer

Новичок
Функция "Запомнить меня" как угроза безопасности.

На одном из западных форумов по безопасности в PHP я видел точно такую же тему. Ссылку сейчас привести не могу, да и не важно это - найти-то я ее найду, но хотелось бы обсудить эту же тему так сказать в русскоязычном сообществе. Ведь не опытом западных гуру единым жив человек ;)
Поясню проблему. Например, злоумышленник получил хэш от пароля администратора. Как - неважно. Важно, что если он даже и может заменить его на свой, то делать этого не хочет - засекут, в итоге потеряет систему. Проблема вот в чем. Без функции "Запомнить меня", он этот хэш фактически никак применить не сможет. В конце-концов, именно хэш как правило хранят в кукишах для функции "Запомнить меня". Возможны вариации, вроде хэша от хэша плюс какой-то персональный идентификатор сайта (по-моему, такое я видел в e107). Но в итоге это помогает помогает слабо. Пойдем дальше. Пусть salt генерируется для каждого пользователя отдельно. Но его нужно где-то хранить. Просто ради интереса предположим, что хакер имеет доступ и к нему (или у него полностью готовый кукиш администратора). В итоге - успешная атака, хакер в системе, админ может об этом даже не подозревать.
Итак, теперь извечный вопрос: "Что делать?" Мне на ум приходит только повторный запрос пароля для любых административных действий. Возможно, у вас есть какие-то другие идеи. Интересно бы было выслушать.

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

ЗЫ. админку тоже отключи. Ты не представляешь, какая это угроза, если хакер раздобудет пароль.
 
И сайт лучше тоже отключить. Запустить на локалхосте и тихонько смоотреть в одиночку - там неугомонный хакер только один и ничего страшного он с сайтом не сделает. :)
 
гы...
есть есть вход, то всегда есть вероятность что хакнут. так что это паранойей отдает. хотя как говорил эйрел форкосиган: "паранойя - залог здаровья". Просто одно дело хак теоритический, другое дело практический. Если уж так боишься, то административная часть вообще не должна быть в нете.
 
В основе треда лежит порочное предположение, что код, используемый для реализации долговременной сессии ("запомни меня") обязательно должен совпадать с хэшем пароля.
 
Автор оригинала: Crazy
В основе треда лежит порочное предположение, что код, используемый для реализации долговременной сессии ("запомни меня") обязательно должен совпадать с хэшем пароля.
Согласен.
При логине по паролю генерим UID в мд5, пишем в куку, а в базу, допустим (или в файл) кладем md5($cookie_uid$ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ).
а если кука стоит при входе на сайт, скрипт уже плюсует какой-либо идентификатор и сверяет с имеющимся в базе.
 
Автор оригинала: Crazy
В основе треда лежит порочное предположение, что код, используемый для реализации долговременной сессии ("запомни меня") обязательно должен совпадать с хэшем пароля.
И, как следствие, то предположение, что идентификатор этой долговременной сессии нельзя изменять во времени.
 
=) Веселая угроза безопасности. От не чего делать,
мог бы и подумать как это все подставить практически.
И действительно в некоторых системах в куки записывается вовсе не хеш пароля, а бывает записывается и IP адрес тоже...
 
Ладно, друзья-товарищи. Тему я действительно создал, не подумав. В этом, признаю, моя главная ошибка. Как говорится, семь раз отмерь... Впрочем, такой реакции я тоже ожидал едва ли. Тему, думаю, можно закрывать. Я что касается реальности всего этого - проверено собственноручно и неоднакратно. :-) Наверное, стоит говорить не о какой-то функции как угрозе безопасности сайта (по сути само нахождение сайта в сети - угроза его безопасности), а о плохом дизайне приложений и нерадивых программистах как о угрозе безопасности. Впрочем, кое-что интересное из этой темы я почерпнул, спасибо.
 
Вот тебе безопасная относительно безопасный механизм авторизации:

Спрашиваем у пользователя логин и пароль, после чего заводим сессию, записываем в неё uid юзера и ip-адрес клиента (откуда работает браузер). А на стороне клиента в куку кладем id сессии и более ничего.
При дальнейшем соединении клиент передает серверу id сессии, беря его из куки. Тот, сверяется, соответствует ли ip клиента тому, что указан в этой самой сессии. Если да - берет из неё uid.
Вот такая система.
 
Krishna, Относительно безопасной может быть автоматическая авторизация по одноразовому идентификатору, меняющемуся при каждой авторизации. Но даже при этом доступ к опасным функциональным возможностям должен производиться только после полной авторизации.
 
TheWandererФункцию "запомнить меня" следует избегать, если мало знаком с информационной безопасностью и не представляешь, каким образом можно скомпрометировать систему, в которой используется данная функция.

Главная угроза при использовании данной функции не в том, что злоумышленник сможет перехватить или украсть пользовательские куки, а в том, что злоумышленник может выполнить любые действия от имени авторизованного в системе пользователя. Для этого ему не обязательно знать содержимое кук - необходимо лишь заставить пользователя зайти на специально созданную страницу, содержащую автоматически отправляемую форму, предварительно заполненную необходимыми злоумышленнику данными. Более подробно об этом можно почитать по следующим ссылкам:
http://phpclub.ru/talk/showthread.php?postid=419896#post419896
http://phpclub.ru/talk/showthread.php?threadid=54160
 
valyala Ну если взять твой пример приведенный во втором абзаце, то чтобы этот злоумышленик не смог Отправить эту форму, можно просто сделать проверку, чтобы система не принимала формы с других ресурсов, а принимала только "свои" формы.
 
> можно просто сделать проверку, чтобы система не принимала формы с других ресурсов, а принимала только "свои" формы.
Можно. Но REFERER'а может и не быть вообще - так что хз, откуда оно на самом деле пришло.
 
SiMM

ну опять же в скрытом поле давать md5 строку а потом ее проверять - впечатывание туда левой строки по идее должно отсечь форму
 
Латал я тут недавно один форум, на который влезли через "запомнить пароль". Так там для взлома использовался не браузер, а php-скрипт, открывающий сокетное соединение с сайтом и отсылающий все нужные хакеру запросы.

Это по поводу чужих форм и пр.

p.s. там, правда, была mysql-injection через перебор кук. Авторы форума и не подумали, что куки тоже подделать можно, записав туда от себя что угодно.
 
Сверху