Перейдем непосредственно к приложениям и начнем с того, как они работают и на чем пишутся. Windows Phone 7 основана на Windows СЕ, а все WP7 — приложения работают на модифицированной версии.NET Compact Framework. Это специальная версия.NET — фреймворка, в которую Microsoft добавила Silverlight UI и Silverlight API. В WP7 разработчики могли писать приложения только с использованием управляемого кода. Как упоминалось ранее, есть и возможность интеропа, позволяющая выполнять нативный код, однако Microsoft не разрешает использовать ее обычным разработчикам. В Windows Phone Store всего около 50 приложений, написанных с использованием нативного кода, —их разработчики имеют специальное разрешение от Microsoft.

В Windows Phone 8 есть значительные отличия в плане разработки приложений. Во-первых, сама операционная система имеет общее ядро с Windows 8 —тот же набор базовых компонентов, что и десктопная винда. Во-вторых, приложения работают на «взрослой» версии.NET — фреймворка под названием CoreCLR. Это та же самая версия CLR, на которой работают обычные Silverlight — приложения.

В Windows Phone 8 сохранился весь старый API, так что функции Windows Phone 7 полностью совместимы с новой платформой и продолжают работать. Более того, Microsoft добавила множество новых фич для разработчиков приложений. Они поддерживаются новым API самого.NET — фреймворка, а также в WinPhoneRT и DirectX API. WinPhoneRT является подмножеством WinRT —нового API для приложений, который Microsoft позиционирует как замену старому Win32 API.

С появлением Windows Phone 8 разработчики могут писать приложения на C/C++. Однако использование этих языков ограничено написанием кода, который работает с WinPhoneRT или DirectX, а также с другими нативными библиотеками. Код, который не подходит под эти требования, и весь пользовательский интерфейс по-прежнему должны быть написаны с использованием управляемых языков.

Нас не может не радовать наличие нативного кода: говорим «привет» таким багам, как Buffer overflow, use — after — free и подобные.

Внутренности wp — приложения

Что же представляют собой Windows Phone приложения? Готовое приложение —это файл с расширением ХАР (аналогично Silverlight — приложениям). Внутри находятся сборки, ресурсы и несколько специальных файлов манифестов. Манифест приложения аналогичен такому же файлу в Sifverlight — приложениях. Манифест приложения Windows Phone содержит специфичную информацию, например включает в себя список возможностей. Файловая структура приложения Сборка приложения Ресурсы

AppManifest.xaml WMAppManifest.xml WMInteropManifest.xml

—опционален в WP7, отсутствует в WP8

Попадаем в магазин

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

В конце сертификации Microsoft подписывает все сборки, потом подписывается ХАР — файл (добавляется файл с подобием контрольной суммы), а затем изменяется формат самого ХАР — файла таким образом, что он не может быть открыт на просмотр.

Попадаем на устройство

Когда ты устанавливаешь приложение, ХАР — файл распаковывается и все его содержимое сохраняется в отдельную папку приложения. Вот как приложения хранятся на устройстве. В корне диска существует папка Applications. Внутри нее есть папка Install, которая содержит папки для каждого приложения. Название каждой папки —это уникальный идентификатор приложения в Windows Phone Store, который берется из манифест — файла. Как мы упоминали выше, каждое приложение имеет свое собственное изолированное хранилище. Они хранятся в папке Data, которая также содержит отдельные папки под каждое приложение. Вот так выглядит распакованное приложение на Windows Phone 7 устройстве.

\Applications..

\Install\<ProductID>VInstall\Содержимое из ХАР

— WMAppPRHeader.xml (подпись) \Data\<ProductID>\Data\IsolatedStorage

Пути в Windows Phone 8 отличаются —они больше похожи на обычные виндовые пути (C:\Data\Programs\<ProductlD>\ lnstall\), но общая идея раздельного хранения приложений и хранилищ остается.

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

При анализе безопасности мобильного приложения можно выделить три основных этапа. Подготовка окружения заключается в получении приложения и его распаковке (как в случае с WP — приложением) или дешифровании (как в случае с iOS — приложениями). Также необходима настройка рабочего окружения — это может быть эмулятор или устройство. Затем можно перейти к статическому анализу кода, который заключается в анализе параметров компиляции (таких как DEP, ASLR, stack cookie), просмотре файлов метаданных (в них, как правило, содержится описание возможностей приложений и их настройки типа регистрируемых URI) и, наконец, анализе самого кода приложения (анализ используемых API, просмотр используемых констант и строк и так далее). И динамический анализ — мы смотрим, как приложение взаимодействует с сервером по сети, как взаимодействует с файловой системой, и производим runtime code analysis.

Подготовка окружения:

получение приложения (распаковка/расшифровка);

•настройка устройства/эмулятора.

Статический анализ:

•анализ свойств сборки; анализ метаданных;

•анализ кода.

Динамический анализ:

•как приложение взаимодействует с ФС и сетью;

•анализ кода в процессе выполнения.

Все, кто так или иначе занимается безопасностью мобильных приложений, знают об OWASP Тор 10 Mobile Risks. Данный список применим к любой мобильной платформе и. можно сказать, содержит в себе все классические уязвимости, то есть то, что не касается специфики самой платформы. Например, все приложения могут хранить критичные данные в открытом виде или неправильно использовать криптографию. Данный список можно применить и к приложениям для Windows Phone — исключением он не является. Большинство из проблем, перечисленных в этом Тор — 10, можно достаточно просто идентифицировать, используя статический анализ и анализ потоков данных. Поэтому здесь не хотелось бы останавливаться, так как искать опасные API — вызовы и отсутствие защитных механизмов умеют все.

Как исследователь безопасности, я люблю больше другие баги — логические. Я люблю исследовать недра программы и полностью разбираться в принципах и механизмах ее работы, восстанавливать алгоритмы и так далее. Как правило, искать логические баги намного сложнее, но эксплуатируются они намного проще — с ними нет никаких игр с низкоуровневой работой с памятью (как при buffer overflow) и нет никаких защитных механизмов (как при фильтрации символов от XSS или SQLi). А искать сложнее, потому что во время аудита за ограниченное время надо понять, как работает программа — какой логикой руководствуется при различных ситуациях. И естественно, для анализа приложения и для поиска уязвимостей нужен софт… Давай посмотрим, что у нас на сегодняшний день есть для анализа Windows Phone приложений и что нам поможет искать баги из OWASP Тор 10 Mobile Risks, а что — логические баги.