Cloak and Dagger: дыра во всех версиях Android

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

Cloak and Dagger: дыра во всех версиях Android

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

Атаку, получившую название Cloak and Dagger (Плащ и Кинжал — видимо, в честь героев комиксов Marvel), продемонстрировали сотрудники технологического университета Джорджии и университета Калифорнии. Они трижды пытались обратить внимание Google на проблему, но Google каждый раз отвечала, что все работает так, как и задумано. Исследователям не оставалось ничего, кроме как опубликовать свои открытия — для этого они даже сделали отдельный сайт cloak-and-dagger.org.

В чем заключается атака Cloak and Dagger

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

Это оказывается возможным потому, что при установке приложений из Google Play от пользователя не требуют в явном виде разрешать приложениям доступ к функциям SYSTEM_ALERT_WINDOW, а разрешение на доступ к ACCESSIBILITY_SERVICE (A11Y) получить довольно легко.

Что это за разрешения? Первое из них позволяет выводить интерфейс приложения поверх любого другого приложения, а второе дает доступ к набору функций для людей с ограниченными возможностями. Доступ к Accessibility Service — весьма опасная штука, поскольку эта функция позволяет приложению не только отслеживать, что происходит в других приложениях, но и взаимодействовать с ними от лица пользователя.

Казалось бы, ну что может пойти не так?

Невидимый слой

Суть атак с использованием первого разрешения, SYSTEM_ALERT_WINDOW, примерно такова. Это разрешение, которое Google Play выдает фактически по умолчанию, дает приложению возможность показывать что угодно поверх любых других приложений. При этом выводимые окна могут быть произвольной формы, в том числе с дырками, а также они могут либо фиксировать нажатия, либо пропускать их — так, чтобы их учитывало приложение, находящееся уровнем ниже.

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

Вообще, SYSTEM_ALERT_WINDOW — тоже довольно опасное разрешение, и Google сама полагает, что оно будет использоваться в малом количестве приложений. Но, поскольку оно нужно таким популярным программам, как Facebook Messenger (да-да, круглые портреты, которые выводятся поверх всего остального — это оно), Skype и Twitter, в Google, видимо, решили, что пользователям будет проще, если Google Play будет выдавать данное разрешение без явного вопроса пользователю. Простота и безопасность, к сожалению, довольно часто противоречат друг другу.

Чем опасны «Специальные возможности»

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

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

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

Проблема в том, что, используя первое разрешение, SYSTEM_ALERT_WINDOW, и умело выводя окна, которые закрывают большую часть экрана, кроме кнопки OK, атакующие могут убедить пользователя, что соглашается он на что-то абсолютно безопасное, в то время как на самом деле он своими руками выдаст приложению доступ к Accessibility.

Ну а дальше, поскольку Accessibility умеет воспринимать контекст, действовать от лица пользователя и, в том числе, покупать приложения в магазине Google Play, атакующим не составит труда скачать из Google Play приложение-шпион с доступами к чему угодно и дать ему все мыслимые разрешения. При этом делать это можно даже при выключенном экране или, скажем, показывая поверх всего происходящего видеоролик — так, что пользователь ничего не заподозрит.

Идеальный фишинг

Также доступ к SYSTEM_ALERT_WINDOW и ACCESSIBILITY_SERVICE позволяет злоумышленникам проводить фишинговые атаки так, что пользователь о них никогда не догадается.

Например, когда пользователь открывает приложение Facebook и пытается ввести туда логин и пароль, другое приложение с доступом к Accessibility может это отследить. А дальше, воспользовавшись SYSTEM_ALERT_WINDOW и возможностью выводить слои поверх остальных, оно может показать пользователю покрашенное в цвета «Фейсбука» фишинговое окно, в которое ничего не подозревающий пользователь и введет логин и пароль от своей учетной записи.

Знание контекста в данном случае позволяет разработчикам выводить фишинговое окно именно тогда, когда пользователь собирается вводить пароль, и именно там, где надо. Ну а поскольку после ввода пароля пользователь, как он и ожидал, попадет в Facebook, у него не появляется даже намека на подозрения, что что-то произошло.

Послесловие

На самом деле все это называется общим словом tapjacking и первый раз подобная атака была продемонстрирована не вчера и не позавчера. Однако разработчики, в принципе, могут защищать свои приложения от такого рода атак, проверяя, не перекрыто ли их приложение чем-нибудь. Если перекрыто – приложение может не разрешать выполнять какие-либо действия.

Ответственные разработчики так и делают, поэтому, например, во многих банковских программах атака с tapjaсking не сработает. Если же вы не уверены в том, что какое-то из приложений, которое вы используете, защищено от атак вроде Cloak and Dagger, вы всегда можете написать его разработчикам и узнать, благо такая функциональность реализована во всех без исключения программах, которые попадают в Google Play.

Как защититься от плаща и кинжала

Авторы исследования протестировали атаку на трех самых популярных версиях Android — 5, 6 и 7, на которые в сумме приходится более 70% всех Android-устройств. Выяснилось, что все три версии уязвимы к этой атаке, и, скорее всего, более ранние версии также уязвимы. То есть, вероятнее всего, если у вас есть устройство на Android, то вас это тоже касается.

Так что вот наш главный совет:

1. Старайтесь не ставить неизвестные вам приложения из Google Play и других магазинов. Особенно бесплатные. Если вы не ставили и не запускали никаких сомнительных приложений, то и атаковать вас нечему. Правда, остается открытым вопрос, как отличить сомнительное приложение от безвредного.

2. Периодически проверяйте, к чему имеют доступ приложения на вашем устройстве и отзывайте лишние разрешения. О том, как это сделать, можно прочитать здесь.

Не забывайте про установку защитных решений на Android-устройства. Существует бесплатная версия Kaspersky для Android, и если у вас нет защитного решения на телефоне или планшете, настоятельно рекомендуем поставить как минимум ее.

Советы