Home
dump -0f - /dev/mind
Баечки о мобильной связи (GSM, CDMA) и IT индустрии
SMS Fraud: часть 1/X 
5th-Feb-2008 01:58 am
Сегодня я внезапно понял, что написать что-то очень хочется, и хочется уже очень давно, да все как-то не хватает времени на то, чтобы сесть и в спокойной обстановке что-то написать. Но совсем не писать тоже ж нельзя - бороду-то я, допустим, сбрею, а умище мысли для постов куда девать прикажете?

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

Начнем с того, что рассмотрим, каким же путем доставляется обычный SMS с мобильного А на мобильный B.

Для начала - необходимая оговорка. Вместо навевающих депрессию пассажей вида:"мобильный телефон, в который вставлена SIM-карта, в учетной записи которой в соответствующем HLR присутствует сервис "телефония", которому назначен MSISDN A" я буду писать просто: "мобильный с телефоном А", или даже еще проще: "мобильный А". Ну, а вы уже сами в голове достраивайте весь этот дом-который-построил-Джек, ок?

Вторая необходимая оговорка заключается вот в чем: если излагать устройство SMS в деталях и подробностях, придется пересказать половину стандартов GSM, и получится книга в 400 страниц толщиной. Чтобы этого не получилось, я все буду сильно-сильно упрощать, стараясь не растерять по пути важные детали. Я знаю, что меня читают несколько спецов по контентным услугам, програмисты SIM Toolkit-ов и прочие люди, для которых все это - ежедневный хлеб насущный. Убедительная просьба - не судите строго, и ткните пальцем, если я где-то пропущу что-то важное.


mobile-to-mobile SMS
Впрочем, вернемся к SMS-ам. На картинке схематически представлен процесс прохождения SMS-а с мобильного на мобильный. Дальше следует детальное описание каждого пункта.
  1. Итак, с мобильного А отправляется SMS на номер B. Телефон договаривается с базовой о том, что неплохо было бы передать SMS, и довольно скоро SMS долетает по эфиру до базовой, оттуда - до контроллера базовой, а оттуда уже рукой подать до коммутатора (MSC). Как видно, в заголовке SMS указывается, через какой центр обработки SMS (так называемый SMSC) мы хотим отправить SMS. Нужный центр указывается своим адресом, который для всех практических целей выглядит точно так же, как и обычный номер телефона.
  2. Коммутатор, который обслуживает абонента A, получает SMS и стремится побыстрее сбыть его с рук. Для этого он посылает указанному SMS сообщение forwardSMS, передавая в нем SMS в точности в том же виде, в котором он его получил. Обратите внимание, что при этом MSC указывает свой адрес.
  3. SMSC получает сообщение и сохраняет его у себя в очереди. На практике, если абонент B доступен, то SMS в очередь не ставится и сразу происходит его доставка получателю. Однако мы не ищем простых путей и предположим, что абонент B  в это время спустился в железобетонный подвал, чтобы проверить срок годности на запасах консервов, которые он хранит на случай ядерной войны. Адресованный ему SMS оседает в очереди SMSC. При этом SMSC отправляет сообщение в HLR абонента B о том, что SMSC не против будет узнать, когда абонент B снова появится в сети.
  4. Идут годы SMS хранится в очереди SMSC, и занимает тем самым ценные ресурсы дорогостоящего оборудования. У SMSC есть два варианта - выкинуть сообщение или же доставить его. Выкинуть сообщение можно в том случае, если истекло максимальное время ожидание (конфигурируется на SMSC и указывается отправителем, не может быть больше 5 дней). Доставить же SMS можно тогда, когда абонент B появится в сети и будет морально и технически готов этот SMS принять - у него будет свободное место в памяти телефона или SIM-карты, уверенный прием в зоне радиопокрытия и т.п. Попытки доставить SMS происходят либо тогда, когда абонент B регистрируется в сети (HLR абонента B пошлет SMSC нотификацию, о которой тот просил в конце шага 3), либо по истечении определенного промежутка времени. Временные паузы между попытками доставки постепенно возрастают, чтобы не насиловать зря сигнальную сеть
  5. Ура! Абонент B вылез из железобетонного подвала, и SMS может быть ему доставлен. Для этого SMSC надо узнать адрес доставки.
  6. Последнее известное местоположение абонента хранится в его записи в HLR, и именно туда и обращается SMSC, посылая сообщение sendRoutingInfoFor(B).
  7. В ответ HLR сообщает адрес коммутатора, который в настоящее время обслуживает абонента B. 
  8. Радостный SMSC сбывает с рук SMS, отправляя коммутатору сообщение forwardSMS, При этом SMSC сообщает свой адрес (почему эта техническая подробность важна - я объясню позже).
  9. Коммутатор, обслуживающий абонента B, запрашивает в своем VLR более точный адрес абонента B - location area и номер соты в ее пределах.
  10. VLR сообщает информацию, переданную телефоном B во время последнего location update
  11. Коммутатор проводит ковровое бомбометание пейджинг в указанном районе, "будит" телефон абонента B и доставляет ему SMS
Если бы вместо абонента A сообщение отправляла бы какая-то информационная система, то схема, вобщем-то, осталась бы такой же. Единственное отличие - процесс бы начался с шага "2" и сообщение forwardSMS отправляла бы информационная система, а не коммутатор.

Если вы знакомы с тем. как устроен протокол SMTP, то вы наверняка увидите в этой схеме мого общего с тем, как путешествует обычный email. Вместо поиска MX через систему DNS тут используется жестко заданый адрес SMSC. Механизмы sendRoutingInfoFor и getLocationFor напоминают работу протоколов роутинга IP. Слово "адрес" в моем тексте по смыслу очень похоже на "IP адрес" или "доменное имя".

На этом на сегодня всё, а в следующей серии - рассказ про то,  как посылаются SMS-ы от имени "чужого" номера.

Вопросы? (если вы не читали мои старые посты по теме и не знаете смысла некоторых терминов - JFGI или же обратитесь к коллекции моих старых постов на сайте "Про GSM")
Comments 
5th-Feb-2008 12:14 am (UTC)
"Для этого он посылает указанному SMS сообщение forwardSMS, передавая в нем SMS в точности в том же виде, в котором он его получил.
Может быть, "указанному SMSC"?"
5th-Feb-2008 03:21 am (UTC)
>>При этом SMSC сообщает свой адрес (почему эта техническая подробность важна - я объясню позже).
А он перезаписывает адрес MSC A или же еще раз заворачивает смску в дополнительный "конверт"? Т.е. можно ли на MSC B, скажем, получить адреса SMSC и MSC A? Или только последний узел, через который проходила смска?
5th-Feb-2008 04:08 am (UTC)
на обывательском уровне ожидал после шага 11 увидеть обратный путь уведомления о доставке SMS до SMSC (по той же цепочке), с целью удаления оного из очереди. или после шага 8 сообщение сразу удаляется?? тогда непонятно - как обеспечивается достоверность доставки SMS как таковая?
5th-Feb-2008 07:11 am (UTC)
Я по части между MSC B и абонентом Б ничего не скажу, однако, когда коммутатор сообщение доставил абоненту он отправляет обратно на SMSC сообщение ForwardSM_RSP, в котором если чего пошло не так, указывает номер ошибки, типа Subscriber Busy for MT-SMS или SM Delivery Failure. Если ошибки не было, то SMSC удаляет сообщение из базы и генерирует delivery reciept для абонента А, если такой был заказан.
В случае ошибок SMSC может вести себя по разному - зависит от ошибки. Либо сразу удалит, либо отложит доставку.
5th-Feb-2008 04:37 am (UTC) - С чужого номера?
А вот это действительно интересно, особенно если сие будет подкреплено практическими советами по применению ))

Да и немного оффтопный вопрос:
мне вчера звякнули с такого интересного номера - +7 918 879 287 !! (ни одну цифру я не пропустил, именно так всё и есть), а поскольку таких номеров вроде как быть не должно, то значит... можно и номер для АОН прорисовывать произвольный... ? так?
5th-Feb-2008 05:49 am (UTC) - Re: С чужого номера?
можно. можно хоть 01 нарисовать там, если есть доступ к какому-нибудь SMSC.
5th-Feb-2008 05:54 pm (UTC) - Re: С чужого номера?
что-то сомневаюсь, что у того чурки, что лопотал что-то там на проводе был доступ "к какому-нибудь SMSC"
13th-Feb-2008 09:50 pm (UTC) - Re: С чужого номера?
918 - это код Крымска, однако там номера 7-значные.
Это просто результат беглого просмотра в подтверждение одной нехитрой догадки, что Вам звонили из другого города.
5th-Feb-2008 08:43 am (UTC) - Re: С чужого номера?
а что, собственно, с номером не так?

Что касается АОН - то да, в общем случае, модификация А-номера возможна на IN-платформе или на коммутаторе.
5th-Feb-2008 05:55 pm (UTC) - что не так?
ну самое очевидное, что в нём циферки не хватает. Да и 918 какой-то сомнительный оператор, ни к кого в мск такого сочетания нет
5th-Feb-2008 06:32 pm (UTC) - циферки не хватает
Всего там хватает

мск - это надо понимать Россия? :-)
5th-Feb-2008 06:35 pm (UTC) - Re: циферки не хватает
ага, до 10-ти сосчитайте...

мск - это надо понимать центр России :-)
5th-Feb-2008 06:55 pm (UTC) - Re: циферки не хватает
беру назад слова насчет "всего хватает"

продолжаю допускать, что это из россии, и это какой-то глюк
5th-Feb-2008 08:52 pm (UTC) - Re: что не так?
На счет "циферки не хватает" - это по номеру сказать нельзя.
В соответствии с ITU-T e.164, телефонный номер может иметь до 15 знаков, однако минимальная длина не ограничена.
Учитывая специфику российской нумерации - может чего-то и не хватает.

Однако, скажу из практики - скорее всего +7 добавил провайдер международной связи(ростелеком или как там его) по ошибке или с какой-то задумкой, а реально номер должен был быть +918. Какой-нибудь *стан.
5th-Feb-2008 11:50 am (UTC) - Re: С чужого номера?
Это звонок из России, не пугайтесь :-)

+1 - из штатов

За подробностями пожалуйте на сайт укртелекома
5th-Feb-2008 08:40 am (UTC)
Как уточнение:

- sendRoutingInfoFor правильней называть sendRoutingInfoForSM, дабы не путать с другой операцией sendRoutingInfo, совсем другой функции

- хотя судя по текстовому описанию процедуры абонент B сидел в подвале, на диаграмме этого не видно. На практике, кроме постановки в очередь на SMS-C, должен быть диалог SRI-SM/SRI-SM-reject(reason), а потом MSC, при появлении абонента выполняет операцию AlertServiceCenter, информируя SMS-C о том, что абонент снова в сети. Кроме того, SMS-C будет повторять попытки SRI-SM через заданный таймаут.

5th-Feb-2008 08:47 am (UTC)
По второму пункту не факт. Можно настроить центр так, что он будет ждать AlertServiceCenter, без по попыток повторной доставки.
5th-Feb-2008 08:53 am (UTC)
Да, можно. Я же написал "заданный параметр".
5th-Feb-2008 08:44 am (UTC)
Достоточно важно, что на каждом этапе шлется подтверждение об успешной операции. Хотя бы уже после шага 2, после которого моб.А получает "Сообщение отправленно". И после шага 11, чтобы центр мог удалить сообщение из базы.
5th-Feb-2008 09:14 am (UTC)
ох, помню как развлекался на SMSC одного украинского оператора, рассылая друзьям смски вида "выехали, ждите" с номера +3804403 или "борщ готов, ждем" с номера домашнего телефона на ДШ АТС :)) Это было семь или восемь лет назад ))
5th-Feb-2008 09:40 am (UTC)
А что бывает когда "сообщение не может быть отправлено" ещё для абонента А?
5th-Feb-2008 10:10 am (UTC)
для этого есть множество причин. Проще всего попробовать позже :)
5th-Feb-2008 10:21 am (UTC)
:) Это то ясно... Я имею в виду что происходит вообще, SMS не добралось до комутатора или уже попозже проблемы.
5th-Feb-2008 10:41 am (UTC)
По одному ответу "сообщение не отправлено" однозначно сказать нельзя. Может быть оно не дошло до коммутатора, а может быть и проблемы в центре. Например если отправлять сообщение на короткий номер, то сообщение может дойти до центра, но соответствующая аппликация к нему не подключена, в этом случае будет такой-же ответ.
Такой ответ может быть даже если нету денег на счету.
5th-Feb-2008 10:49 am (UTC)
т.е. в случае любой ошибки ответом будет: сообщение не отправлено.
Теперь понятно. Спасибо.
5th-Mar-2008 07:58 am (UTC)
Если "нет аннтенки":) на момент отправки, то будет появляться что-то типа "ошибка отправки".
В остальных случаях - ага.
5th-Feb-2008 11:26 am (UTC)
. Для этого он посылает указанному SMS сообщение forwardSMS,
SMSC?
5th-Feb-2008 12:02 pm (UTC) - Неясны следующие моменты:
- кто как и куда отправляет подтверждение о доставке?
- на каком этапе MSC и SMSC дропают сообщения из очереди?
- кстати, формируется ли очередь в MSC?
- что произойдет, если телефон абонента B скоропостижно скончается после того, как SMSC его сбудет с рук MSC И

По сути, все вопросы упираются в один: кто кому что подверждает, когда и каким образом?
5th-Feb-2008 12:04 pm (UTC) - Re: Неясны следующие моменты:
имелось ввиду:

скоропостижно скончается покинет зону покрытия или выключится
5th-Feb-2008 12:24 pm (UTC) - Re: Неясны следующие моменты:
В плане SMSC он ждет подтверждение о доставке от MSC. Сообщение будет удалено из очереди в таких случаях:
- Когда прийдет подтверждение о доставке от MSC - благоприятный исход
- Когда закончится validity period (максимальное время нахождения сообщения в центре)
- при некоторых ошибках, которые возвращаются от MSC. Например, если такой абонент вообще не существует
- в случаях специфического retry профиля. Например после определенного количества попыток.
Строго говоря, последний и предпоследний пункты, это одно и тоже.
5th-Feb-2008 04:27 pm (UTC) - Re: Неясны следующие моменты:
Правильно ли я понимаю:

Если MSC абонента B не может доставить смс абоненту B, он его тут же дропает? SMSC об этом узнает?
5th-Feb-2008 07:54 pm (UTC) - Re: Неясны следующие моменты:
SMSC получит от MSC B сообщение MT-ForwardSM-RSP с кодом ошибки. В зависимости от ошибки, будет либо задействован retry profile, либо сообщение будет убито. Это в общих чертах.
6th-Feb-2008 08:07 am (UTC) - Re: Неясны следующие моменты:
Именно. SMSC получит код ошибки от MSC B. И в зависимости от этого задействует нужный retry профиль.
5th-Feb-2008 12:33 pm (UTC)
Мелочная придирка: на картинке (в чём она, кстати, рисовалась?) было бы неплохо заменить recepient на recipient.
7th-Feb-2008 11:23 pm (UTC)
Рисовалась она flow2dot (http://users.livejournal.com/_adept_/74318.html)

А recepient - это одна из моих "любимых" ошибок :(

Спасибо, исправлю.
5th-Feb-2008 10:41 pm (UTC) - вопрос вдогонку про delivery report
Дима, а кто является источником отчета о доставке в случае с двумя операторами/разными региональными SMSC - SMSC отправителя, после того как сбагрил сообщение SMSC получателя, или MSC (->SMSC) получателя?
6th-Feb-2008 08:11 am (UTC) - Re: вопрос вдогонку про delivery report
Проясните суть вопроса, что значит два SMSC? И о каком отчете идет речь, о финальном , когда сообщение доставлено абоненту, или о каком?
6th-Feb-2008 08:46 am (UTC) - Re: вопрос вдогонку про delivery report
поясняю: интересно, как генерируется отчет о доставке (возможно, вопрос ламерский, но непонятно как это работает)

допустим абонент МегаФона отправляет сообщение абоненту Vodafone. Получается что сообщение проходит путь от отправителя на SMSC Мегафона, оттуда уходит на SMSC Vodafone (?) и через MSC доставляется получателю.

внимание, вопрос: на каком этапе, точнее после завершения какой операции, формируется отчет о доставке, который приходит на терминал отправителя?
6th-Feb-2008 09:33 am (UTC) - Re: вопрос вдогонку про delivery report
Сообщение не проходит через два СМС-центра. А только через один, который прописан в вашем телефоне. Сначала, когда сообщение поступает на центр вы получаете "Message send". Потом (упрощенно) сообщение уходит на MSC, оттуда к абоненту. Если у абонента все в порядке, то отсылается подтверждение обратно MSC (или сообщение об ошибке), оттуда на центр. По подтверждению центр либо удаляет сообщение из базы и формирует (если надо) нотификацию о доставке, или действует в соответствии с retry профилем.
6th-Feb-2008 10:03 am (UTC) - Re: вопрос вдогонку про delivery report
а разве у каждого провайдера не свой SMSC?

по Вашим словам выходит (упрощаю), что SMSC одного провайдера, работающий на одной аппаратно-программной платформе, имеет возможность прямой коммуникации с коммутаторами другого провайдера, работающими, возможно, на другой аппаратно-программной платформе (даже невзирая на единые спецификации, стандарты и т.д.)??

зы: вы мне который раз повторяете то, что уже очень доходчиво рассказал, и даже нарисовал, Дима.))) но у него пример в рамках сети одного провайдера.
а мой вопрос - про формирование delivery report для sms, идущих из одной сети в другую
6th-Feb-2008 10:20 am (UTC) - Re: вопрос вдогонку про delivery report
Да, SMSC одного провайдера свободно общается с коммутаторами другого провайдера. Не зависимо от программно-аппаратной платформы. Лишь бы они договорились с протоколом. MAP v.2, v.3.
Работа между разными операторами существенно не отличается от работы в одной сети. Ведь вы продолжаете работать со своим "родным" центром.
5th-Mar-2008 07:53 am (UTC)
Вот пользительный документ, в плане того что делает MSC с SM для желающих углубить знания.

http://www.3gpp2.org/public_html/specs/X.S0004-641-E_v1.0_051003.pdf
This page was loaded May 22nd 2008, 6:47 pm GMT.