Remote wipe на Android и Exchange ActiveSync

Однажды наш администратор Microsoft Exchange упомянул о функциональности полной очистки любого устройства по своему усмотрению (будь то iPhone, или девайс на основе BlackBerry или Android), получающих почту по протоколу Exchange ActiveSync. Девайс рапортует серверу, доступен ли ему функционал wipe, а администратор может запретить передачу почты на устройства, не поддерживающие wipe.

Сначала я не поверил: как так, безобидная настройка почтового аккаунта даёт администратору почты столько полномочий на моём личном устройстве. Сделав полный бэкап SD-карточки и всей внутренней памяти, предложил эксперимент. И чудо — пришло push-уведомление, телефон подзавис, через некоторое время перезагрузился и я остался с заводскими настройками. А SD-карта вообще не подавала признаков жизни.



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



Первым делом надо было посмотреть, что случилось с SD-картой. Телефон считал, что она отсутствует и я вставил её в кард-ридер. Просмотр в HEX-редакторе показал, что таблица разделов (MBR) затёрта, но сами разделы (FAT32 и Linux swap) вполне нормальны. Замечательной утилитой TestDisk я моментально восстановил содержимое карточки к состоянию до очистки (вот вам и Full Wipe)

Затем просмотрел исходники Android, поискав по ключевым словам wipe, clear, factory settings. Код самоуничтожения располагается в модуле /system/framework/services.jar и представляет собой некий BroadcastReceiver, ожидающий запроса на уничтожение данных (исходник этого класса)

Приложение Settings.apk, входящее в состав open-source пакета Android, вызывает его следующим способом:
sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));

От несанкционированного вызова он якобы защищён
It can only be granted to apps signed with the platform key, or installed on the system partition.

Но, как мы увидим ниже, обычное приложение может обойти эту защиту.

Поискав, другие способы запуска очистки, на Stackoverflow я нашёл рецепт, как обычное приложение (без специальных permissions) может попросить Settings.apk показать страницу управления очисткой, где пользователь сам нажмёт «Очистить» на странице доверенного приложения.
Context ctx = createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
Class<?> mc = ctx.getClassLoader().loadClass("com.android.settings.MasterClear");
startActivity(new Intent(ctx, mc));


Пока всё под контролем пользователя…

Далее я декомпилировал все приложения из стандартной прошивки Gingerbread 2.42 (HTC Sense) для Desire Z, и поискал в исходниках обращения к android.intent.action.MASTER_CLEAR, либо к com.android.settings.MasterClear.

Всего таких приложения нашлось четыре:
CheckinProvider.apk
MyHTC.apk
Settings.apk
Mail.apk


Первые два — функционал блокировки потерянного устройства от онлайн-сервисов Google и HTC, далее — очистка девайса по запросу пользователя из страницы настроек и виновник расследования, почтовый клиент.

Почтовик вызывает очистку таким кодом:
    Intent i = new Intent("android.intent.action.MAIN");
    i.setClassName("com.android.settings", "com.android.settings.MasterClear");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra("EASRemoteWipe", true);
    this.mContext.startActivity(i);

То есть, от предыдущего примера он пошёл немного дальше и вызывает не activity с кнопкой, которую может нажать юзер, а activity, которая запускается после нажатия кнопки.

У меня есть подозрение, что для выполнения этого кода не нужны особые разрешения (не могу проверить, т.к. не установлены ни java-IDE, ни Android SDK).

На этом моё любопытство было удовлетворено. Исправив в дизасм-листинге строку MasterClear на MasterXlear, я пересобрал Mail.apk, залил его на устройство и проверил, что команда wipe от exchange больше не имеет власти над телефоном (при попытке синхронизировать почту, появляется ошибка синхронизации, пока «потерянный» телефон не будет отвязан от учётной записи exchange, после чего на следующей синхронизации вся почта заливается заново, как на новый девайс, и продолжает нормально работать)

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

1. Подпись пересобранного приложения.

Любое Android-приложение должно быть подписано личным сертификатом разработчика, иначе оно не запустится. Бесплатный сертификат можно получить из программы openssl, если попросить её об этом так:
openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -out request.pem
openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

В результате мы получим вожделенные certificate.pem, key.pem и key.pk8, которыми подпишем пересобранный Mail.apk с помощью утилиты signapk.jar:
java -jar signapk.jar certificate.pem key.pk8 Mail-unsigned.apk Mail-signed.apk


2. Dalvik cache

У каждого приложения есть кеш JIT-компиляции, чтобы не проводить компиляцию каждый запуск. При установке apk обычным способом кеш очищается, но при копировании приложения (в системный раздел /system/app) его нужно очистить самостоятельно:
rm /data/dalvik-cache/*@Mail.apk@*


3. Глюки apktool

Утилита apktool, которой я проводил дизассемблирование и пересборку приложения, упорно создавала неработоспособный файл. Внутри apk находятся ресурсы, собранные в бинарный файл resources.arsc (например, xml-ресурсы в этом файле переведены в бинарный вид, скорее всего для удобной навигации по xml-дереву) и код, собранный в classes.dex. Поскольку править мне надо только код, при декомпиляции я задал опцию -r (Do not decode resources) и после компиляции исправленной требухи обратно в apk-файл он наконец-то запустился.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 55

    +1
    Результат мощный, пожалуй, следует запретить использование android на exchange.
    Кстати, другие клиенты поступают интереснее — они реализуют обязательный функционал клиента, но в рамках приложения, что гораздо удобнее. В качестве примера (не рекламного) — touchdown, он требует установить пароль на себя, и вайпит, если что, тоже себя.
    • UFO just landed and posted this here
        +3
        Отсутствие поддержки некоторых политик. Такой поддержки, как у WinMobile, нет ни у одного клиента ни под одну платформу. Учитывая, что вы вряд ли сможете такими же хаками «добавлять» поддержку нужных политик, вышеуказанная таблица — мощное средство для ограничения доступа недоверенных устройств.
        Ну или по старинке, EAS выпилить, оставить BES, и жить на ежевике.
          0
          Справедливости ради надо сказать что сам софт в WindowsPhone довольно урезан в своей функциональности. Если мне не изменяет память то например календарь в актуальной версии Windows Phone умеет в разы меньше чем его ежевичный собрат (или андроидовский — кому как).
            +4
            Справедливости ради стоит сказать, что я и не про Windows Phone говорил. У актуальной версии WP в вышеуказанной таблице пробелов больше, чем у iOS.
            Нам много чего наобещали в WP8, посмотрим, когда обновят табличку, но пока WP — однозначно не корпоративная платформа. И глупо ее сравнивать с ежевикой — там система политик не хуже, чем в EAS, работает как часы, и только это ежевику до сих пор на плаву и держит.
            А андроид, после этого топика, имхо, должен держаться в изоляции от EAS. Учитывая, что андроид и так не поддерживает вайп по неправильному device password, подобные хаки вообще исключают возможность удаления конфиденциальной информации в случае банально забытого в такси телефона. Это просто ни в какие ворота.
              +1
              Да, вы действительно говорили только о WinMobile — про WinPhone я как то сам додумал. Интересно насколько ещё жив WinMobile в корпоративной среде, я забыл про эту платформу после выхода первых устройств «под пальцы».
              Насчёт андроида, тут вы правы. Мы для этого на все корпоративные телефоны ставим специальный софт с помощью которого мы можем в любой момент «брикнуть» весь девайс.
                +1
                Дело не в адроиде, а в рутованном девайсе. никто не мешает повторить сей трюк с Windows Mobile или iPhone. Декомпилятор в руки — и вперёд.

                Во времена WM6 по просьбе одного участника с 4pda я снимал блокировку на загрузку девайса Loox C550. на форме ввода пароля было банальное переполнение — при вводе слишком длинной строки (16K знаков) локер банально падал, открывая рабочий стол. системный апплет смены пароля я подхачил, чтобы при старте он не спрашивал старый пароль, и можно было поставить новый или снять, не зная старого

                Трюки с исправлением системных приложений делались ещё в школе, когда администратор в политиках запрещал запуск на компах Regedit, но правкой одного байта эта проверка шла лесом. Безопасность не может полагаться на клиентский код.
                  +1
                  Рутованный телефон с разблокированным загрузчиком не спасут никакие вайпы и девайс пасворды. А в нерутованном и неразблокированном так просто Mail.apk не заменишь.

          0
            0
            там немного другое. моды на xda-developers исправляют принудительный ввод пароля при запуске почты, а блокировку wipe я нигде не видел.
            +3
            Запустил этот код на эмуляторе, открылась та самая activity с кнопкой:
            cs403016.userapi.com/v403016231/1a3f/TH91dBxcHI4.jpg
            На ICS оно вообще упало, т.к. там такой activity нету.
              0
              О! Спасибо за интересную статью. Я как раз недавно настраивал свой андроид планшет для корпоративной почты и был удивлён обилием прав которые от меня требует наш exchange. Если ему эти права не дать то отказывает в соединении. Собственно с правами всё ясно — во-первых нефиг на частном девайсе почту фирмы настраивать, во-вторых если девайс будет потерян то его можно будет вайпнуть. Правда я не знал что это действительно работает. Не могли бы вы осветить вайп со стороны exchange? Где собственно спрятаны опции для вайпа?
                +1
                В политиках EAS. Создаете профайл доступа, и указываете в нем, какие политики должны быть включены на устройстве для подключения. Список актуальных политик есть в моем комментарии чуть-чуть повыше.
                Каст магического заклинания на вычистку устройства немного разнится в разных версиях EXS, для актуальной, например, есть инструкция на technet, а все остальное без труда гуглится.
                  0
                  Большое спасибо!
                –4
                Мне одно непонятно — кто вообще додумался добавить такой функционал в ActiveSync? Как это вообще пропустили?
                  +3
                  Нормальный, полезный функционал.
                    +5
                    Функционал совершенно нормальный, ориентированный в первую очередь на корпоративные девайсы.
                    Ну вот представьте, что Вы — топ-менеджер какой-нибудь крупной компании, какого-нибудь газпрома или там лукойла. У Вас в почте — конфиденциальная переписка стоимостью миллионы баксов.
                    А тут Вы потеряли планшет. Или у Вас его украли.

                    Вот тут как раз remote wipe и пригодится — администратор безопасности нажимает кнопочку и потенциальные злоумышленники остаются с носом.
                      +2
                      Да даже и не топ-менеджер… вы представляете сколько всего интересного можно найти в корпоративной почте даже простого сотрудника какой-нибудь мегакорпорации?
                        –4
                        Простым сотрудникам я бы доступ к корпоративной почте извне не давал вообще. Если вдуматься — то людей, которым это действительно необходимо, в «мегакорпорации» не так уж и много.
                          +3
                          Почта извне нужна любому человеку, периодически ездящему в командировки.
                            –1
                            Все верно. А много ли таких людей из не-управленческого звена, скажем, в крупном банке? Отвечу — практически нет. За исключением департамента, ответственного за работу с филиалами — эти да, катаются постоянно.
                            А бухгалтера, кассиры, операционисты? Вот им — зачем?
                              0
                              Корпоративные рассылки и новости получать, например. Или прочую, более полезную информацию. Меня вот сама постановка вопроса удивляет — что значит зачем? Просто удобное средство коммуникации, повышающее производительность труда, между прочим. Для передачи информации иногда удобнее телефон, иногда IM, иногда почта.
                                0
                                Как выше сказал товарищ sigizmund, «сколько всего интересного можно найти в корпоративной почте даже простого cотрудника».
                                На одной чаше весов — «удобное средство», на другой — корпоративная безопасность.
                                0
                                А, пропустил нюанс — вы имеете в виду доступ к почте _извне_.
                                  0
                                  Именно так.
                              +3
                              Да, да! Всех согнать в офисы и посажать за десктопы!
                                –1
                                … и отобрать админские права на машину.
                                  +1
                                  И вот встречайте — самый эффективный сотрудник по мнению 90% менеджеров!
                                    +1
                                    Никогда не видели программиста в банке, втыкающего в свою машину (в банковской сети) свисток от Yota, потому что ему так показалось удобнее? А заодно отключающего сервис виндовых апдейтов, а то перезагружаться лень? Я видел. Кроме шуток.
                                      +1
                                      Большая часть админов это видела, вы не одиноки. Когда-то я работал в компании, где никто не заморачивался правами, и я так задолбался регулярно вычищать там троянов с машин, что с тех пор чётко понял, что пользователям в массе админские права не нужны. Это не говоря уже про выкрутасы с системой отдельных продвинутых товарищей, и последующие фразы типа «оно само сломалось» и «мне работать надо».
                                  +1
                                  Ооо, что вы говорите? Вы такой умный, вы, наверное, сисадмин? А расскажите пожалуйста про ваши критерии необходимости?
                                    0
                                    Если бизнес-задачи человека подразумевают его удаленную работу — значит, ему это надо. Если нет — значит, нет.
                                    Зачем доступ к почте снаружи для девочки-операционистки в банке? Или для тетеньки-бухгалтера? (не имею в виду главбуха — в банке главбух это второе по значимости лицо и назначается специальным приказом центробанка).
                                    +1
                                    «Эффективные манагеры» не одобряют.

                                    Зачем упускать прибыль. Вот стоит сотрудник в пробке, в очереди. По привычке глянул в почту, увидел проблему и мозг начал работать над её решением пользу компании, мозг ведь не выключишь. Пришёл на рабочее место с готовым решением и думает над следующей проблемой.

                                    В тему:
                                    habrahabr.ru/post/135236/
                                      0
                                      Это справедливо для Вас. А нужен ли внешний доступ, скажем, для девочки-операционистки в банке? Какие такие проблемы она будет обдумывать в очереди в маникюрный салон?
                                        +1
                                        Продажник: «А не позвонить ли сейчас клиенту по поводу его последнего письма? Всё равно в пробке стою»
                                        Бухгалтер: «Что там писала налоговая? Попалась на глаза бумажка»
                                        Операционистка: «Мне там таких котят вчера присылали, ня» :-)
                                +3
                                Это основной функционал, без которого нормальные ИТ безопасники никогда не разрешат использование корпоративной почты на мобильных устройствах.
                                  +4
                                  Это совсем немного повышает безопасность.

                                  В случае кражи с целью доступа к данным в первую очередь злоумышленник извлечёт батарею, затем получит доступ к памяти без загрузки ОС (почти у каждой модели телефона есть режимы recovery, bootloader, или и то, и другое).

                                  В случае кражи с целью продать девайс, злоумышленник в первую очередь сам сделает wipe.
                                  То есть, функционал защищает только от случайных незадачливых воришек.

                                  Любопытно, что блокировка девайса на сервере не предотвращает доступ к данным. Все реквизиты доступа, в том числе свой доменный пароль, я обнаружил в файле
                                  /data/data/com.htc.android.mail/shared_prefs/EASSetupWizard.xml

                                  Узнав пароль, злоумышленник может заходить на корпоративную почту через OWA, или настроив ящик на другом устройстве, не забаненном.

                                  Андроид вообще в этом смысле не пытается делать security through obscurity. Например, пароли всех WiFi точек тоже лежат открыто.
                                    0
                                    Не знаю, как с этим у RIM, iOS и WinMobile/WinPhone, но хороший аргумент не юзать Android.
                                      0
                                      Минуточку, а причём здесь андроид? Если протокол требует знания пароля от клиента, то как ни шифруй его, всё равно где-то он появится в открытом виде. Другое дело, если бы EAS мог на основании пароля выдавать девайсу уникальный токен, а потом пароль больше не требовался и удалялся из памяти в любом виде. То, что в винде пароль зашифрован каким-нибудь примитивным XOR-ом (или AES256, не суть, при наличии ключа на том же девайсе) даёт ложное чувство защищённости
                                      0
                                      При обнулении устройства также меняют и пароль, что не мешает обнулению.
                                        0
                                        вопрос в том, разрешено ли работнику выбирать себе пароль самостоятельно (т.е. менять его на своё усмотрение).

                                        тыщу раз сталкивался: если первый пароль был mypassword, то при энфорсинге политики смены пароля работники ставят mypassword1, далее mypassword2 и т.д…

                                        т.е. получить начальный пароль весьма интересно злоумышленнику
                                          0
                                          Человеческий фактор можно обсуждать бесконечно.
                                      0
                                      Угу. А если получить доступ к серверу, слить данные, стереть оригинал и разослать всем клиентам wipe? Эффект будет гораздо веселее одного утерянного устройства.
                                        +2
                                        тем более, что wipe скриптуется через PowerShell :)
                                          +1
                                          Если получить доступ к серверу и слить данные, то даже без рассылки всем клиентам wipe эффект будет обхохочешься.
                                            0
                                            Ассанж, вы?
                                      0
                                      Буквально 10 минут назад решил прикрутить корпоративный аккаунт exchange к andoid. В итоге он запросил разрешения на блокировку камеры, удаления всех данных с телефона и тд… Решил что почты через браузер достаточно (:
                                        0
                                        OWA?
                                        +1
                                        Адроид до сих пор не умеет работать с почтой MS Exchange используя сертификат и вообще не используя пароль. Все программы требуют пароля, хотя Exchange может требовать персональный сертификат пользователя без логина и пароля.
                                          0
                                          Moxier умеет.
                                            +1
                                            Он умеет, если у пользователя есть пароль. В нашей компании политика безопасности такая, что пароля нет и для аутентификации используется персональный сертификат. Moxier без ввода пароля вообще не пускает.
                                              0
                                              Забавная политика :) У нас 2х факторная.
                                          0
                                          К слову, Lotus Traveler также умеет делать remote wipe. В свое время удивился, увидев в администраторах устройства Lotus Traveler Security.
                                            0
                                            Не очень секьюрно. Функционал нужно использовать с чем-то вроде Afaria, которая делает нормальный вайп вместо обнуления таблицы разделов.
                                              0
                                              После того, как меня неделю назад вайпнули, начал копать в направлении автоматизации данного патча.
                                              И вот что нарыл:
                                              forum.xda-developers.com/showthread.php?t=1117452
                                              Может, кому будет полезно
                                              После некоторых танцев с бубном получилось даже на Sony Xperia Arc ICS 4.0.4

                                              Only users with full accounts can post comments. Log in, please.