11.13.2007

СМС на шару. Как это было

Мысль о том, чтобы осуществить отправку смс через сервис "eSMS+eMMS" своими силами появилась сразу же, как попробовал "стандартную" отправку. И дело тут даже не в том, чтобы организовать спам-рассылку (причём абсолютно законную), а в том, чтобы сделать отправку просто более удобной (тут я сам себе протеворечу, т.к. давно считаю всякие GUI намного удобнее скриптов). Итак, вооружившись Wireshark, я начал своё исследование.
После первого же снифа отправки понял, что не всё так просто, как могло показаться - используется SSL. А это значит, что увидеть запрос не получится. Зато узнал, что все запросы идут на secure.esms-emms.kyivstar.net:443.
Немного помучав Гугл, начал открывать для себя дивный мир SSL и довольно быстро наткнулся на OpenSSL, который у меня уже был установлен. Команда openssl s_client -connect secure.esms-emms.kyivstar.net:443 выдала, что используется RC4-MD5 с ключём в 1024 bit. Надежда расшифровать запросы умерла окончательно...
Зато после ввода стандартного HTTP-запроса: GET / HTTP/1.0 надежда вновь посетила меня. Результат: meta content="TeleMessage... явно просился в Гугл :) Первая же ссылка приводит вас на сайт производителя, где, кроме всего прочего, есть примеры использования сервиса. Один из примеров, на php, я и решил использовать для отправки. Не знаю как вы, но я результатом остался доволен - всё работает :)
Итак, подведём итоги.
1. Имея минимальный опыт работы с SSL получилось найти "уязвимость" в коммерческой услуге.
2. После небольших экспериментов была обнаружена возможность подстановки любого адреса отправителя. Т.е. используя скрипт, вы можете отправлять смс от имени любого из абонентов любого оператора (alphanumeric тоже поддерживаются, но не успел протестировать кодировку). Платить (а в скором времени сервис будет платным), придётся вам, но это уже детали.
3. На всё про всё было потрачено 4 часа, хотя большая часть времени ушла на попытки написания скрипта на perl.
Можно ли было этого не допустить?
Да, можно! Поскольку сервис использует открытый API, то следовало как можно тщательнее скрыть название производителя. Это касается и меню помощь, в котором кое где упоминание о Telemessage присутствует, и всех интерфейсов (очистить тег META, как минимум). Не зная структуры XML-запроса, не имея возможности декодировать запросы от стандартных программ, послать собственный запрос было бы просто невозможно.
Огромный недочёт со стороны производителя это отсутствие проверки
адрес_отправителя =~ логин
Возможность подмены адреса отправителя грозит серьёзными злоупотреблениями со стороны продвинутых пользователей.

Что дальше?
1. Настроить отправку кириллицей.
2. Alphanumeric sender (пока не отключили). Неплохо бы обрадовать кого-то из знакомых смс-кой от Бога, например :)
3. Засечь время, пока возможность подмены адреса устранят.