Pull to refresh

Comments 94

Я надеюсь в скором времени написать:

UPD: Специалисты мегафона всё исправили.


Пока идут четвёртые сутки с момента обнаружения.
Не нужно капчу! У меня программка для разбора входящих смс :-)
Лучше пароли разные с Сервис Гидом и чтобы не пускало без подключенной услуги.
Сейчас сервис UMS от Мегафона это единственный способ приема входящих SMS без железа! По этому не хочется чтобы его задушили капчей, когда есть другие способы защиты.

Да, я понимаю что намного романтичнее Sim карту в Huawei модем, Huawei в сервер, сервер в интернет и в питание 24/7. Такие варианты уже описаны на хабре: SMS и SIP шлюз — Мультифон, Asterisk, Kannel, Приём и обработка SMS-сообщений на Linux-машине, Делаем VoIP GSM шлюз из Tp-link mr-3020 и Huawei E-171 — часть вторая — добавляем Siemens Gigaset c470IP и SMS
Но нет у меня такого сервера, как и у многих нет, зато есть надежный и бесплатный Google App Engine с проверкой SMS каждую минуту.

Свой номер телефона нужно держать в тайне, но сейчас почти все что есть в интернете хочет отправить SMS для регистрации или авторизации. Решение это UMS от Мегафона, позволяет пользоваться сразу несколькими номерами и не светить свой основной номер.
Ну, почему же единственный. Есть практически бесплатные сервисы (около доллара за 2 месяца), которые выделяют номер типа +7901 и позволяют пересылать полученные на него CMC на e-mail.

Но, раз уж вы написали :) — поделитесь, пожалуйста, кодом скрипта на GAE (python, надеюсь), который через этот сервис СМС забирает. Использую как backup решение. Спасибо заранее.
В общих чертах
главная функция ums
логинится, кэширует куки, разбирает смс от определенных получателей и сохраняет их в БД

Код
import webapp2, re, base64, Cookie
from google.appengine.api import memcache
from google.appengine.api import urlfetch
from google.appengine.ext import db
from xml.dom import minidom
from datetime import datetime, timedelta

url_login = "https://messages.megafon.ru/userjson/weblogin.do?webloginReq.user=%s&webloginReq.secinfo=%s&imageVerifyCode=&__checkbox_remember=false&__checkbox_keepmeloggedin=false"
url_chatlist = "https://messages.megafon.ru/onebox/getChatList.do?startNum=1&endNum=100&reFreshFlag=1&operation=1&chatMsgType=10100000000100000000000000000000"
url_messages = "https://messages.megafon.ru/onebox/oneboxList.do?umReq.ctlg=1%%2C2&umReq.mType=2053&umReq.bNum=1&umReq.eNum=20&umReq.snd=%s&umReq.rcv=7%s"

def ums(username, password, senders):
    try:
        total_result = True
        for sender in senders:
            session_id = memcache.get(username)
            action_result = None
            if session_id:
                action_result = messages(session_id, username, sender)
            if action_result is False or session_id is None:
                session_id = login(username, password)
                action_result = messages(session_id, username, sender)
            if action_result != True:
                total_result = False
        
        return total_result
    except:
        return

#get session id (cookie)
def login(login, password):
    try:
        result = urlfetch.fetch(url=url_login % (base64.b64encode(login), base64.b64encode(password)))
        if result.content != '{"returnFlg":true}':
            return False
        
        cookie = Cookie.SimpleCookie()
        cookie.load(result.headers.get('Set-Cookie'))
        
        memcache.set(login, cookie['JSESSIONID'].value)
        return cookie['JSESSIONID'].value
    
    except:
        return

#get and put to db messages from sender to username
def messages(session_id, username, sender):
    try:
        result = urlfetch.fetch(url=url_messages % (sender, username), follow_redirects=False,
                        headers={'Cookie': 'JSESSIONID=' + session_id})
                        
        if result.status_code == 302:
            return False
        xmldoc = minidom.parseString(result.content.replace("\r",'').replace("\n",''))
        msg_list = xmldoc.getElementsByTagName('uniMsg')
        for msg_element in msg_list:
            msgID = msg_element.getElementsByTagName('msgID')[0].firstChild.nodeValue
            msgText = msg_element.getElementsByTagName('ttl')[0].firstChild.nodeValue
            msgTime = msg_element.getElementsByTagName('t')[0].firstChild.nodeValue
            
            if sms.get_by_key_name(msgID) is None:
                sms(key_name=msgID,msgID=msgID,msgTime=datetime.strptime(msgTime,"%Y%m%d%H%M%S"),msgText=msgText)
                sms.put()

        return True
        
    except:
        return        

#get numbers and messages list (get xml for example)
def chatlist(session_id):
    try:
        result = urlfetch.fetch(url=url_chatlist,
                        headers={'Cookie': 'JSESSIONID=' + session_id})
        return result.content
    except:
        return

class sms(db.Model):
    msgID = db.StringProperty(required=True)
    msgTime = db.DateTimeProperty(required=True) #UTC
    msgText = db.TextProperty()

Четверо суток! Ужосссс!!!
Я поменял все пароли на 20значные на ЛК всей большой тройки)))
А может это типа такая фича…
В корпоративном хаосе, программные ошибки порою делаются не случайно.
Да, и надо быть к этому готовым. Были случаи подключения платного контента на SIM-картах в устройствах, на которых даже теоретически нельзя воспользоваться такими услугами и личный кабинет для которых не предусмотрен. Благо менеджеры без проблем делают возврат средств, но причину возникновения, как правило, не называют.
«Ждите! Вам ответит первый освободившийся инженер!» :))
Подобранный пароль к сервис-гиду, замечательно поможет отключить «бесплатную услугу „Стоп-контент“».
Вот круг и замкнулся :)
А также все уведомления о входе куда-либо.
UFO just landed and posted this here
Сотовой компании ресурс сети напрягать очевидно жалко. Другое дело поздравления всякие с праздниками или просто реклама…
UFO just landed and posted this here
Дело в том, что разработка всевозможных веб витрин, сервисов и тп. выполняется разными исполнителями (как внутренними так и внешними ), со стороны заказчика никакие движения не согласованны, нет единого отдела или группы у которой была бы полная информация о всех веб проектах и услугах которые они предоставляют через web. Зачастую ТЗ (исли оно есть) пишут не компетентные в этой области люди (продукт менеджеры например, так как архитектора тупо на проект не выбили ), а исполнитель (если он внешний) делает только то, что ему написали в ТЗ.
UFO just landed and posted this here
Нет, не замкнулся. Услугу Стоп-Контент можно отключить, только позвонив со своего номера в службу поддержки.
Пароль должен содержать от 6 до 20 цифр.

Красота…
пишем статью про уязвимость Яндекса?
О да! К тому же везде по разному, мне выдало «Пароль должен содержать от 3 до 128 цифр».
Имхо надо добавить об этом в пост.
Ха! Так то личный кабинет на сайте у сотового оператора. Мне было когда-то очень неприятно узнать, что интернет-сервис Альфа-банка не умеет спецсимволы в пароле.
А как-то отказаться от Сервис-гида нельзя?
UFO just landed and posted this here
Завтра тоже позвоню, пока что установил 88-значный пароль на Сервис-Гид.
Вроде если услуга UMS не активна войти на сайт messages.megafon.ru невозможно… Или можно?
Ан нет, и без UMS пускает и даже предлагает подключить эту услугу одной галочкой :-( Фигово
Платные услуги — это мелочи, абонент при этом рискует только счетом на телефоне. Возникает вопрос, в СервисГиде они могут отправлять сообщения от имени абонента? Если да, то под ударом всякие банки-онлайн и т.п. сервисы, в которых могут быть уже серьезные деньги.
Из Сервис Гида смс уходят с другого номера. А вот сайт messages.megafon.ru сделан чтобы писать смс со своего номера и принимать! входящие на свой номер. Ессно при входе в этот messages.megafon.ru приходит смс, но в настройках ее можно отключить.
UFO just landed and posted this here
Сам не проверял:
Отправка SMS через Сервис-Гид
SMS передается от имени отправителя
В сообщения не добавляется рекламная информация
Длина сообщения увеличилась до 160 символов
UFO just landed and posted this here
4. По подписке приходит SMS с кодом подтверждения

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

Вы уверены, что эти мошенники — не Мегафон?
Имели в виду это?
— Шеф! У нас дыра в безопасности!!!
— Слава богу, хоть что-то у нас в безопасности.
мм. поставить пароль из 128 цифр и никакого брутфорса.
UFO just landed and posted this here
что, там crc16 «хэш»?
Вы в этом ещё уверены? =)
так вот откуда ноги растут, а я думал что мегафон совсем совести потерял, когда дня 2 назад проснулся я и увидел СМС вы успешно подписаны на какую то муть МегафонПро
Интересно, а возможен ли вариант, что мегафоновцы сами втихаря подписывают абонентов на платные сервисы, оставив уязвимость для отмазки в случае чего…
Гугл: переписка МТС
Меня так еще в начале года ломали только с помощью СМС+.
Способ закрытия дырки простейщий — подключение подобных услуг с подтверждением по смс.
Там и есть с подтверждением по смс, только смс и посмотреть и отправить с сайта можно.
Так как его смотреть с сайта, если сервис еще не подключен. Я говорю чтобы первичное подключение сервиса было с подтверждением. Поставил в СГ галочку на UMS\СМС+ ввел код из смски и сервис подключился, только тогда можно видеть смс на сайте.
Аналогично со стопконтент(только там наоборот выключение с вводом смс кода) и вообще любыми критичными услугами.
Спасибо за пост, теперь знаю в чем дело. Мне уже 3 смс приходило с 4-го апреля «****** Никому не сообщайте свой персональный код », несмотря на то что сменил пароль после первого же смс.
Посмотрел исходный код страницы messages.megafon.ru и сразу стало все понятно — внимание на 3-йю, 624ую и 625ую строку (если честно там все пестрит подобным). Вот только вопрос серверную часть те же люди делали?
Для ленивых: начала кода ознаменовано гордой фразой:
< !-- JSTL标签 -->

Ну и не менее информативные записи на 624 и 625 строках
* 第一个参数表示将数据显示在哪个元素上
* 第二个参数表示获取到的时间

И все это на стартовой странице.
Для совсем ленивых :)

< !-- JSTL标签 -->
// перевод: <! — JSTL тег ->

* 第一个参数表示将数据显示在哪个元素上
// перевод: * Первый параметр представляет данные показывают, какие элементы

* 第二个参数表示获取到的时间
// перевод: * Второй параметр показывает время, чтобы добраться до
UFO just landed and posted this here
ну хоть не хинди
Спасибо, сменил пароль с одних цифр на другие цифры. Не знаю, насколько взломостойко устанавливать запрет на любые символы кроме цифр, но все же.
UFO just landed and posted this here
Поставить пароль в 120 символов и сохранить пароль у себя на компе.
Не вижу варианта лучше чем этот.
Кстати, когда был SMS+ прошлой версии — на него устанавливался отдельный пароль. После обновления на новую версию, пароль стал общим. Кто вообще придумал использовать пароль от сервис-гида для SMS+/UMS?
Уже год не заходил в сервис гид. Попробовал — пользователь заблокирован. Интересное кино.
О! Я даже знаю кто ломал.
Меня вот что интересует — а соблюдает ли МегаФон нормы ФЗ 152 о защите персональных данных?

Может хороший штраф охладит пыл их сайтотворчества.
Обновил статью.
Видимо, писать на Хабр эффективнее, чем сразу в Мегафон :)
Спасибо netAn за капчу!

Давай еще возьмем исходники AnyBalance и на каждую ссылку капчу поставим!

Вот самое простое для Столичного Мегафона:
moscowsg.megafon.ru/TRAY_INFO/TRAY_INFO?LOGIN=%НОМЕР%&PASSWORD=%ПАРОЛЬ%
или
moscowsg.megafon.ru/SESSION/GET_SESSION?MSISDN=%НОМЕР%&PASS=%ПАРОЛЬ%&CHANNEL=WWW

А с UMS пусть еще и клиента на Android с капчей перепишут, а то вдруг что.

Все как в бородатом анекдоте:
Хакер в столовой
День первый
Хакер приходит в общественную столовую и с возмущением обнаруживает, что солонку на столе может открутить кто попало и насыпать туда что угодно. Хакер приходит домой и пишет гневное письмо директору столовой: «Я, meG@Duc, обнаружил уязвимость солонки в Вашей столовой. Злоумышленник может вскрыть солонку и насыпать туда яду! Примите меры срочно!»

День второй
Директор среди прочих деловых писем, запросов о поставках еды и курьерских уведомлений получает письмо, и пожимает плечами: «Кому этот бред только в голову пришёл?»

День пятый
Хакер приходит в столовую, насыпает во все солонки яду. Погибает триста человек, директора три месяца таскают по судам и, в конце концов, оправдывают за отсутствием состава преступления. Хакер пишет письмо в стиле «ну что, видали?».

День 96-ой
Директор покупает специально спроектированные солонки с кодовым замком. Посетители столовой чувствуют, что они в этой жизни чего-то не понимают.

День 97-ой
Хакер обнаруживает, что дырки в солонках пропускают соль в обе стороны. И не только соль, а вообще всё, что угодно. Он пишет возмущенное письмо директору и ссыт во все солонки столовой. Триста человек перестают посещать эту столовую вообще, тридцать попадают в больницы с отравлением. Хакер вдогонку посылает директору смс-ку «Ну как вам?». Директора тем временем три месяца таскают по судам и дают год условно.

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

День 190-ый
Хакер тырит солонку из столовой и изучает дома её устройство. Пишет гневное письмо директору: «Я, meG@Duc, стырил солонку и нахожу этот факт возмутительным! Любой может стырить солонку из Вашей столовой!» До этого непьющий директор читает письмо, идет домой и выпивает водки.

День 193-ый
Хакер обнаруживает, что все солонки в столовой прибиты цепями к столам. Он приезжает на очередной хакерский СПРЫГ и докладывает о своих успехах, получая там заслуженную награду за защиту интересов общества и потребителя. К счастью, директор ничего про это не знает и не сопьется раньше времени.

День 194-ый
В рамках дьявольски гениально продуманной операции хакеры всем СПРЫГом вламываются в столовую и высыпают соль из всех солонок себе в карманы. Хакер meG@Duc пишет возмущенное письмо директору, намекая на то, что никакой заботы о посетителях в столовой нет и любой гад может лишить честных людей соли в одно мгновение. Дозатор соли с авторизацией необходим просто позарез.

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

День 200-ый
Посетители столовой с ужасом находят, что, чтобы насыпать соли, они должны подойти к официанту, предьявить паспорт, получить специальный 8-значный одноразовый код к солонке. Для получения перца процедуру следует повторить.
Там передача пароля от СервисГида в открытую, без шифрования в GET-запросе?
К передаче кредов (пароля, кода и прочее равное) для доступа к критичной информации, какой является СМС в наше время, должно относиться с повышенной осторожностью.

1. В открытом виде (HTTP вместо HTTPS) передавать нельзя!
2. В URL запроса (а не в теле запроса) передавать нельзя, чтобы избежать попадания в логи Web и прокси-серверов!

ОПСОС-ы и уважаемый Мегафон в частности, давно стали платформой для управления персональными данными пользователей — граждан РФ:
64 742 073 абонента в апреле
Если кто-то сомневается, то подумайте: как мы получаем коды подтверждения от банков, коды для восстановления паролей вконтакте, facebook, gmail…

Да, возможно Мегафон и Минкомсвязи не обнаружат персональных данных в ваших СМС, которые прочитал злоумышленник за чашечкой кофе, но речь идёт о доступе к персональным данным! Чёрт возьми, если злоумышленник увидит СМС с кодом сброса пароля к почте, то конечно же этот код не будет чьими-то персональными данными, но вот на почте… и не надо этого отрицать.

При всём при этом, сам факт возможности настолько древней и беззащитной авторизации к настолько ценным функциям указанной платформы вызывает шок. Как можно так безответственно относиться к 64 миллионам?!

Сколько ещё вы будете играть в игры со спичками на бензоколонке?
Страна непуганных идиотов

Это не новая дыра в безопасности, это роспись в несостоятельности, ИМХО!
А теперь давай добавим конструктива.
Как нельзя мы уже поняли. Напиши теперь, что нужно сделать.
Какие будут рекомендации?
Думаю, они будут касаться всей тройки.
Вот, немного чуть ниже.

1. Нужно разделять представление для человека и для машины

2. Для машины нужен API доступа к данным ОПСОСа

3. Все сервисы используют только этот API, никаких обходных путей нет

4. Для человека нужно сделать SSO, чтобы не было такого, что:
в одном месте есть капча, а в другом нет; кто-то говорит «от 6 до 20 цифр», а кто-то «от 3 до 128»
SSO сделает любую аутентификацию в одном месте и авторизацию доступа к API для разных дочерних сервисов контролируемой. Сервисы эти пароль ваш не спрашивают и не получают, а получают токен доступа OAuth v.2, через механизм п.5 и то только с вашего согласия

5. Добавляем OAuth v.2 к API и идентифицируем каждого клиента API (это и машины M2M и сервисы типа UMS и AnyBalance), тогда в «СервисГиде» можно будет отменить разрешение клиенту-сервису UMS на доступ к API чтения/создания СМС абонента

6. Когда всё вышесказанное будет сделано, нужно будет выделить два типа доступа к API: "в присутствии пользователя" и "в оффлайне (сервис ходит на API, даже тогда, когда пользователь отлогинен от сервера аутентификации)", и при выдаче токена доступа «СервисГид» должен человеку-клиенту сказать, какой тип доступа клиент-сервис запрашивает, чтобы человек сам решал — хочет ли он, чтобы какой-то сервер стороннего сервиса мог видеть его СМС в его отсутствии или нет (наример для AnyBalance хватит и первого типа доступа)

7. Теперь, когда сервер аутентификации один и пароль никому не раздаётся, ни в какие формы (кроме одной единственной на единственном сервере аутентификации) не вводится, можно отдаться целиком обезопасиванию аутентификации последней-единственной формы ввода пароля:

— сделать его передачу только по HTTPS и только в теле HTTP запроса
— сделать его запрос как можно редким (т.е. фактически сделать использование пароля максимально редким), поддерживая сессионные куки и контролируя постоянство условий среды при которых данный конкретно пользователь пользуется сессией (при изменении контролируемых условий — спрашивать подтверждение пароля у пользователя)

8. И несмотря на п.7, для изменения конфигурации в «СервисГид» (образно говоря, для выполнения операций «записи»), как то: подписка на сервисы, смена тарифного плана, смена типа уведомлений — для всего этого сделать повторную проверку пароля даже для действующей сессии. А для особенно критичных операций — подтверждение по паролю и по коду СМС.

Чем не конструктив? И да, это касается всей тройки.
Просто стоит писать в МегаФоне сразу людям, которые готовы эту информацию принять. Например, мне :)
На днях сидел спокойно на работе тут же приходит смс о том, что мне выслан какой-то код, тут же приходит следом смс что я подписан на какую-то услугу, звоню в суппорт где меня отключили от услуг и пообещали разобраться как так вышло, видимо на хабре выясняют это быстрее чем в мегафоне.
Мы благодарим вас за бдительность и внимание к вопросам информационной безопасности нашей компании. Выявленные нами факты подключения подписок на платные контент-услуги для абонентов со стороны третьих лиц локализованы и не имели массовый характер. Причиной послужили действия злоумышленников по подбору реквизитов доступа к сервису UMS и системы самообслуживания «Сервис Гид». В целях усиления безопасности наших абонентов, добавлен дополнительный уровень защиты на этапе авторизации в сервисе UMS.

Все возможные материальные потери предотвращены – в случаях, где выявлено подобное подключение подписок, возвращены денежные средства, независимо от обращений в «МегаФон». К контент-провайдерам применены жесткие санкции.

Уважаемые абоненты, обращаем ваше внимание на серьезность вопроса защиты персональной информации.
Не используйте элементарные цифровые пароли для доступа к сервисам самообслуживания. Не передавайте пароли третьим лицам. Ограничьте установку ПО, если у вас есть сомнения в его происхождении. Используйте антивирусное ПО.
В случае получения SMS-сообщений, содержание которых вызывает у вас вопросы, обращайтесь к оператору для уточнения информации.
Эти рекомендации позволят обезопасить себя от действия злоумышленников.
Молодцы. Хорошая реакция.
Хорошая реакция? Вы 4-дневную задержку (и неизвестно сколько ещё бы она была, если бы не пост), в течение которой у абонентов крадут деньги, всерьёз называете хорошей реакцией? Таких горе-специалистов гнать ссаными тряпками надо.
Чем крупнее организация, тем она неповоротливее. Для их размеров бизнеса это быстрая реакция.
закрыть вход до выпуска патча — это оперативная реакция
UFO just landed and posted this here
Уважаемый MegaFon, Ваш сервис UMS это технологический прорыв в будущее, такой прорыв как сервис Мультифон!
Я думаю МегаФон лучший оператор связи!

Пожалуйста, сделайте API для пользование сервисом UMS в автоматическом режиме.
Интересует получение (и отправка) SMS с номера абонента, разумеется с его согласия, без ввода капчи.

Номер телефона мой, и я хочу пользоваться им как мне удобно. Даже без сим карты.
МегаФон прогрессивный оператор и у Вас уже есть необходимые технологии. Откройте свои возможности для компьютерных гиков!
Если не откроют — обращайтесь ко мне, у меня есть API :-)
Тут должен быть OAuth v.2 и никакой капчи для API. Она останется только для человека, смотрите API того-же Гугла…
исправления внесли — это молодцы. Готовы вернуть потери — не сомневаюсь. А вот то что это получится сделать — есть реальные сомнения.

27.10.2012 20:04 заявка 195061863 — я сообщил о некорректно работающей процедуре списания средств. Был получен ответ что ошибка устранена,
12.11.2012 20:21 заявка 197551807 — я уточнил, будут ли возвращены некорректно списанные средства. Был получен ответ «Информация по данному вопросу зафиксирована и находится на рассмотрении. По результатам рассмотрения Вам поступит смс.»
03.12.2012 12:50 заявка 200798407 — я еще раз напомнил о себе. В ответ «Данная ситуация является массовой и коснулась многих номеров, чем обусловлено более длительное время возврата средств, т.к. средства возвращаются в процессе очереди обращения Клиентов.»
21.02.2013 21:37 заявка 214093502 — еще раз попробовал уточнить время решения, заодно и напомнить о себе. в ответ «На текущий момент точных сроков полного решения вопроса не обозначено, сроки уточняются. Приносим извинения за длительное время решения вопроса.»

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

Запрошу у коллег детали по вашему вопросу и доведем его до конца.
пишут, что кривожопо у вас по прежнему (оценочное суждение), дыра не закрыта.
А вот и первые результаты. Хакер разочарован и не может получить заказ на подбор пароля из-за введёной капчи:

image

ссылка
lada.mobile — это публичная тольяттинская группа Usenet (nntp)
там не хакеры, а балаболы большинство
подтверждение входа с помощью sms не спасёт — читай комментарии.
[12:11:14] сообщение от читателя из Волгограда:
Капча есть, но она ничего не защищает.
Если ввести неверный логин-пароль и любую капчу, то мы увидим сообщение «не верный логин/пароль».
А если мы напишем правильный логин-пароль и любую капчу, то увидим «не верная капча».
Таким образом, можно бесконечно по прежнему брутить форму.
А капча понадобится только при залогивании.
Для брута капча не помеха, можно писать 1111 в поле капчи всегда и нормально брутить.
Sign up to leave a comment.

Articles