SkypeKit вылечен от жадности

в 18:38, , рубрики: reverse engineering, skype, skype api, skypekit, метки: , ,

image

Есть такая замечательная штука как Skypekit. В двух словах это полноценный Skype без GUI, обёртку для которого предполагается написать самому.

Теоретически на основе Skypekit можно было бы:

  • Создавать полноценные Skype-клиенты под все платформы
  • Добавить поддержку Skype в мультипротокольные клиенты
  • Запускать Skype на сервере для интеграции с SIP/Flash

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

Но благодаря целебному воздействию реверс-инжиниринга этот недуг удалось вылечить.

Преамбула

Подробно о том как распространяется Skypekit можно прочитать здесь habrahabr.ru/post/124321/

Каждый runtime компилируется индивидуально и отождествлен с вашей зарегистрированной организацией. Ему присваивается уникальный номер версии и ключ. Впоследствии, авторизовываться через этот runtime можно будет только с помощью выданного специально для него ключа. На время разработки выдается Developer ключ, с помощью которого можно авторизовываться только аккаунтам состоящим в вашей организации.

Ключи бывают двух типов:
Developer — можно логиниться только с аккаунтов состоящих в группе разрабочиков (действует 60 дней)
Distribution — можно логиниться всем.

Доступ к API происходит через TCP-сокет на локалхосте. Для этого открывается SSL-тоннель, который шифруется с помощью выданного ключа.

image

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

Рантайм может понять (расшифровать) SSL только зашифрованный ключом из своей организации. Отдельно рантайм и ключ из разных организаций бесполезны.

Поэтому ценность представляют пара ключ и runtime.

Если в какой-то момент компания Skype решит, что вы более не достойны использовать Skypekit (например, совершили страшное преступление — публикацию исходников своей программы), ключ может быть отозван в одностороннем порядке и через вашу программу нельзя будет авторизоваться в сети Skype.

Чудесное исцеление

По обыкновению все программы от Skype имеют защиту от реверс инженеринга: код обфусцирован, используются ловушки для препятствия дизассемблированию. Skypekit не исключение.

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

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

Оказалось, что выдаваемый ключ участвует только в создании локального SSL-тоннеля для доступа враппера к API рантайма, а на сервер авторизации отправляется лишь строка версии, содержащая отпечаток ключа:

image

Такое окно можно вызвать в Windows версии во время голосового звонка в меню Звонок => Тех. информация о звонке .

По этому отпечатку сервер авторизации определяет какой используется ключ и на основании этого решает можно ли авторизовывать клиента.
Экспериментально было установлено, что можно подставить в эту строку отпечаток одного ключа, а подключаться к рантайму с помощью другого. Сервер авторизации реагирует согласно тому ключу, который передается в строке версии.
Например, используя для локального SSL-тоннеля Developer ключ, а в строке версии посылая фингерпринт от Distribution ключа, удалось авторизоваться аккаунтом не состоящим в организации.

Оказалось, что если подменить строку версии, указав версию от обычного десктопного клиента, никакой проверки происходит не будет вовсе.

Это наглядная иллюстрация несостоятельности модели Security through obscurity.

FAQ

1. Какие изменения были произведены, в чем отличия от оригинального рантайма?

  • Была снята обфускация и ловушки (деобфусцированная версия занимает на ~60% меньше памяти). Программу можно запускать в отладчике, редактировать HEX-редактором.
  • Были удалены все персонифицирующие метки: уникальный номер версии, время сборки и т.д.
  • Заменена строка версии, в ней не передается фингерпринт ключа, рантайм представляется как десктопный клиент.
  • Было убрано шифрование отладочной информации (Изначально логи пишуться зашифрованными, для расшифровки их нужно посылать скайпу, где их вручную обработают убрав оттуда секреты и потом только покажут)
  • Сертификат взят от скайпкита из Trillian.

Больше ничего.

2. Какой сертификат, разве он не удален?

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

3. Насколько это легально/безопасно?

Не легально, не безопасно.

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

По поводу легальности — это стопроцентный варез со всеми вытекающими.

4. Как легально добавить поддержку Skype в свою программу?

Запрещено распространять сам runtime, сертификат и SDK.

Свой собственный код для работы со Skypekit распростронять можно. При этом происхождение рантайма и сертификата может быть любым, никто не запрещает пользователю купить рантайм за 5$ и выписывать себе 60-дневные Developer-сертификаты для личного использования.

Например популярная программа Audacity при установке сообщает что для поддержки mp3 нужно самостоятельно найти библиотеку LAME. Такой подход вполне легален.

5. Под какие платформы есть рантайм?

Вылеченный рантайм пока есть под Windows и x86_Linux.

Существует вероятность что чудесное исцеление постигнет и версию под Mac и ARM Linux

6. Чем это отличается от запущенного в фоне обычного Скайпа?

  • Через Desktop API нельзя авторизоваться
  • Через Desktop API нельзя перенаправлять аудио/видео
  • API Skypekit более функционально чем Desktop API
  • Десктопный клиент нельзя полностью скрыть из виду
  • Запущенный деобфусцированный runtime на Linux занимает меньше 10мб памяти
  • Для голосового звонка достаточно 200 Мгц процессора
  • В Linux для запуска не нужен X-сервер
  • Версия Skypekit для Linux намного функциональней существующего десктопного клиента (например умеет групповые видеозвонки). Активно развивается, на данный момент наиболее продвинутая из всех платформ

7.Завтра Skype чуть-чуть изменит протокол и вся работа насмарку!

Skypekit в основном предназначен для интеграции в устройства.
Например телевизоры, приставки, стационарные телефоны.
Эти устройства уже лицензированы и продаются. Изменение протокола поломает их все. Поэтому вероятность того, что Skype это сделает в обозримом будущем, крайне мала.

8. Сейчас все наделают ботов и будут спамить!

Спамить можно было и раньше через Desktop API.
По дефолту настройками приватности запрещено принимать сообщения и звонки от неавторизованных контактов. Поэтому, как и раньше, спамить можно только запросами авторизации с сопроводительным текстом.

9. Где скачать?

Точно не знаю, но есть какая-то намагниченная ссылка

magnet:?xt=urn:btih:3da068082f6ec70be379d4046e4c77bc4578f751&dn=SkypeKit_sdk%2Bruntimes_370_412.zip&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80

Итог

Конечно это не полноценное решение, всё равно остается неведомый бинарный проприетарный Skype.

Если есть желание способствовать по-настоящему благородному делу — созданию открытой реализации протокола Skype можно донатить сюда skype-open-source.blogspot.com/p/donate.html

В пост призываются разработчики.
SDK есть для:

Все возникающие вопросы можно задать в конференции skypeopensource@conference.jabber.ru

Автор: zhovner

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js