Я обещал написать обстоятельный пост о событиях и проблемах последних дней.
По факту произошло продолжение июньских и июльских событий: известный нам злоумышленник обнаружил ещё одну уязвимость десятилетней давности, относящуюся к классу SQL-инъекций. Уязвимость была в скрипте Second-Hand’а, практически в неизменном виде существовавшем с 2006 года.
На этот раз использование уязвимости было довольно оперативно замечено и, чтобы избежать повторения августовской проблемы с несанкционированным доступом к другим персонажам, были предприняты следующие шаги:
- Игра была приостановлена на технические работы при первой же возможности
- Были аннулированы все пароли персонажей и изменён метод их шифрования
- Заодно (что тоже давно пора было сделать, но руки не доходили) авторизация была переведена на защищённый протокол HTTPS
- Был изменён метод восстановления пароля: теперь для непосредственной смены пароля необходимо иметь доступ к почте персонажа.
- Был изменён алгоритм генерации пароля (при регистрации и восстановлении): изначальная длина пароля изменилась с 8 до 12 символов и расширен алфавит используемых для генерации символов.
- Были убраны все ограничения на пользовательские пароли, кроме минимальной длины (осталось так же 6 символов).
Что касается пункта 2 — это, пожалуй, самое важное из произошедших изменений. И, как выяснилось впоследствии, самое проблемное.
Дальше будут технические детали, поэтому те, кто не знают и не хочет попытаться понять, что такое MySQL и хэширование, под кат могут не заглядывать. Ну либо пропустите первый абзац после ката — дальше объясняются проблемы с доставкой электронной почты.
Как вы, вероятно, знаете, пароли никогда не хранятся в открытом виде — для того, чтобы потенциальный злоумышленник, получивший доступ к базе данных, не смог получить пароли в явном виде. В этих целях пароли необратимо шифруются, при помощи так называемых хэш-функций. По трагическому стечению обстоятельств (отчасти, по принципу «if it ain’t broke, don’t fix it», отчасти — по принципу «гром не грянет…») с момента запуска игры и до самого момента технических работ использовался старая функция OLD_PASSWORD()
, использовавшаяся в MySQL версий младше 4.1. Проблема в том, что даже при небольших вычислительных мощностях брутфорсом подобрать пароль по известному хэшу не составляет большого труда. Этим умудрялся баловаться ещё некто fioru в 2006-ом году, а в 2013-ом году это и вовсе не представляет большой проблемы. Теперь же пароли шифруются с помощью алгоритма, более стойкого к перебору и значительно более медленного (достаточно быстрого для одноразовой проверки пароля, но достаточно медленного, чтобы брутфорс адекватного пароля затянулся на веки; и нет, «123456» — не есть адекватный пароль).
Но на этом злоключения не закончились 🙂 После того, как я включил игру, пользователи начали массово восстанавливать пароли, а затем менять их. После первых нескольких сотен игроков, восстановивших пароль, наш почтовый SMTP-сервер (а мы отправляли почту через сервера Google) наложил на нас санкции, сочтя письма излишне похожими на спам. Это по закону подлости произошло вечером во вторник, когда в зоне досягаемости гейм-мастеров не было никакого компьютера (один стоял в пробке посреди путепровода, а второй ехал домой в метро). Тем не менее, мы довольно оперативно перенаправили письма через другой почтовый сервер (на этот раз — через сервера Яндекса). Но днём в среду и Яндекс стал отклонять наши письма с ошибкой «Message rejected under suspicion of SPAM» 🙁 Мы вновь перенастроили отправку корреспонденции, она снова начала успешно отправляться, но получателям приходит с задержкой в 0.5-3 часа. На данный момент мы предпринимаем комплекс мер по восстановлению нормального обращения корреспонденции от нашего проекта, но теперь всё зависит, к сожалению, не только и не столько от нас.
Большая просьба — запастись терпением и не терять самообладания в общении с нашей командой поддержки по почте support@mafiaweb.ru. И на хамство не переходите. Будет сделано всё, что возможно, чтобы игроки в кратчайшие сроки смогли вернуться в игру, но вместе с тем вы должны понимать, что мы не можем отдать доступ к персонажу по первому требованию с незнакомого адреса электропочты. Также прошу по всем вопросам, связанным с восстановлением доступа к игре, писать ТОЛЬКО на почту support@mafiaweb.ru. Бессмысленно и бесперспективно по этим вопросам писать гейм-мастерам в скайп, в icq, в личные сообщения в соцсетях, в SMS, WhatsApp и Viber; столь же бессмысленно по этим вопросам писать Авторитетам любого ранга — ни у одного из них на данный момент полномочий восстановить доступ к персонажу, утратившему доступ к электронной почте.
Принимая во внимание возможные проблемы с восстановлением паролей, все платные услуги, срок которых истекал после 8-го сентября, продлены на неделю.
P.S. Чтобы в дальнейшем не создавать проблем и лишних сложностей ни себе, ни руководству проекта — пожалуйста, следите за актуальностью почтового ящика в профиле.
задам глупый вопрос: хэш соленный? иначе восстановление пароля возможно по радужным таблицам.
Сейчас — да, солёный. Очень крепко солёный 😉
если соль едина для всех, то это тоже не спасет от доступа к учетке другого игрока. Схема проста: выставляем себе легкий пароль, выбираем всех игроков с таким же хешом. Profit.
Для каждого своя.
а я то думаю чего хокинг забанился и не появляется
Он появляется, но, к сожалению, не ради игры.
гиде герои и упоменания о них?)
«Безумству храбрых поем мы славу. Безумство храбрых — вот мудрость жизни!»
Уменя пишет сообщение не отправлено для регистрации что делать?
Напишите на support@mafiaweb.ru, укажите, с какой почты пытаетесь зарегистрироваться.