December 24, 2018

Конференция BLACK HAT. Как сделать шпионский телефон. Часть 2

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

Итак, мы начнём с самого кода, и именно с кода директории smali. Если вы посмотрите на дерево каталогов Angry Birds, то увидите множество папок, содержащих различные компоненты, упорядоченные в виде подкаталогов.

Я даже не знаю, какие из этих вещей мне реально нужны и что они делают, но это мне и не нужно. Сейчас я сделаю техническую вещь потрясающей сложности – скопирую каталог droidwhisperer отсюда, из директории SearchableDictionary, сюда, в поддиректорию com/burstly/example/android директории smali. Вот и всё, надеюсь, вы поняли, в чём тут смысл.

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

Итак, обновление манифеста нужно, чтобы включить в работу приложения внедрённый шпионский сервис и его разрешения. Оно состоит из таких шагов:

— запоминание названия оригинального приложения на потом,

— определение сервиса Droidwhisperer

– определение разрешений, необходимых для работы Droidwhisperer.

Поэтому я беру этот манифест и перетаскиваю его в блокнот. Первое, что я делаю в приложении, это определяю наш сервис. Для этого я нахожу в манифесте функцию onCreate в основном действии целевого приложения. В случае Angry Birds это был com/rovio/ka3d/App. После этого вырезаю часть кода, выделенную желтым цветом, и помещаю его сразу после вызова involk-super в onCreate.

Таким образом мы оговорили в манифесте, что у нас будет сервис Droidwhisperer, который должен запуститься сразу же после того, как станет доступен. Вот зачем нам понадобилось имя оригинального приложения com.rovio.ka3d.App, мы используем его для ввода нового имени нашего приложения com.rovio.ka3d. service.Droidwhisperer.

Далее я копирую и вставляю в соответствующее место манифеста разрешения для нашего шпионского приложения – это строки, выделенные зелёным цветом.

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

В Android необходима некая вещь, которая запускает приложения, поэтому в приложении Angry Birds должен содержаться код, который запустит мой шпионский сервис, как только будет запущена оригинальная игра. Сейчас я захожу в каталог игры и нахожу там папку ka3d, открываю её и копирую в блокнот содержащийся там файл App. Это код smali, представляющий собой версию кода на языке Ассемблер для Dalvik. Мы используем содержащуюся в «Андроид» функцию под названием onCreate. Я использую поиск по блокноту, чтобы найти месторасположение этой функции. Здесь понадобится немного знаний о том, как работает ОС Android – так, функция onCreate используется для вызова супер-класов, то есть для создания или перезапуска активности приложений. Именно сюда я вставляю свой код, который должен инициировать запуск шпионского сервиса. Я возвращаюсь к своей шпаргалке, копирую оттуда нужные строки и вставляю сюда.

Как я узнал, какой именно код необходимо сюда вставить? Я просто скопировал его из оригинального приложения, которое я написал. Я говорил, что имеется отличная документация для smali, поэтому вам не нужно особо во всё вникать, чтобы проделать подобное.

Как раз недавно были анонсированы некоторые «связующие» наборы, которые позволяют вам автоматизировать получение необходимого кода. Буквально несколько недель назад были выпущены такие наборы инструментов разработчика Android, позволяющие создать любой сервис и внедрить его в существующее приложение. Всё это можно сделать вручную.

Итак, как только будет вызвана функция onCreate, она активирует наш сервис. Не стоит забывать, что после этого нужно сохранить модифицированный файл. Итак, после того, как мы провели соответствующую техническую подготовку, нам необходимо собрать наше модифицированное приложение. Поэтому я возвращаюсь к Apk_tool и собираю части из каталога Angry Birds в каталог birds.apk. Итак, мы перестроили оригинальное приложение, внеся в него необходимые изменения, и разместили новую сборку в файле под названием birds.apk.

Если попытаться установить это модифицированное приложение на телефон «Андроид» прямо сейчас, он сообщит, что данное приложение не подписано, поэтому нам необходимо его подписать. Для этого я создаю самозаверенный цифровой сертификат с соответствующим открытым ключом, и сохраняю его в моем рабочем каталоге inject. Это файл под названием keys.

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

jarsigner -verbose -keystore keys birds.apk alias_name

Чтобы ничего не напутать, я просто вырежу её и вставлю в нужное место. Так я собираюсь подписать файл birds.apk своим собственным ключом, это довольно просто. Затем я даю команду и подписываю все компоненты приложения этим цифровым ключом. Теперь я могу разместить его в AppStore, на Google Play – где угодно.

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

Итак, модифицированная версия Angry Birds выглядит точно так же, как и оригинальная игра и точно так же функционирует, за исключением того, что в ней содержится мой шпионский код. Сейчас вы видите на экране цифровые подписи, сделанные Кевином Макнами из Kindsite.

Еще одна интересная вещь, которую я вам покажу, вернувшись немного назад. Посмотрим на оригинальное приложение – оно подписано Rovio Mobile Ltd, Посмотрите на дату подписи – этот цифровой сертификат действует до 26 августа 2010 года, но приложение устанавливается на телефон без вопросов. Таким образом, даже если ваш цифровой сертификат превратился в мусор, он всё равно даёт право на установку приложения, то есть его никто не проверяет. Я думаю, что это одна из вещей, которая является одним из серьезных недостатков модели безопасности Android.

Дело в том, что нет никакой строгой проверки используемых цифровых сертификатов. Решить эту проблему можно, обязав регистрироваться тех, кто хочет получить цифровой сертификат. Итак, вернёмся к нашей презентации. Хочу ещё раз остановиться на цифровых подписях.

Все приложения должны быть подписаны. Любая старая подпись остаётся действительной, если она самозаверена. Наличие подписи проверяется только при установке приложения. То есть я могу изменить любой уже установленный в телефоне файл .apk, и система никак на это не отреагирует. Это довольно значительная уязвимость. Если вы хотите изменить .apk файл в телефоне, у вас должен быть доступ к изменению каталогов, в которых хранятся такие файлы, однако не составит никакого труда получить root-права, чтобы делать с телефоном что угодно.

Второе, что меня беспокоит, это то, что нет никакого пользовательского интерфейса, отображающего, кто подписал приложение. Например, при установке приложения должна бы появляться надпись, что его подписал Кевин Макнами из Kindsite. Отмечу, что подпись должна совпадать для перемещённого или обновленного существующего приложения, поэтому я не мог бы заменить существующую версию Angry Birds, если бы я не изменил имя своей шпионской программы. Но как только я это сделал, никаких проблем не возникло. Разработчики «Андроид» утверждают, что сертификат не нуждается в подписи авторизованного центра, а приложения для Android в основном используют самозаверенные подписи.

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

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

Итак, это полностью функциональное сетевое устройство, и если я подключаюсь к Wi-Fi на работе, то могу установить в этом телефоне софт, который будет сканировать сети на наличие уязвимостей. При этом он при необходимости будет обновляться и отсылать украденную информацию на сайт command & control. То есть зараженный мобильный телефон – это расширенная платформа постоянных угроз безопасности с огромными возможностями для атаки. Например, кто-то просто прогуливается внутри здания с таким телефоном, сканирует сети, а затем атакует их изнутри. Конечно, люди защищают своё соединение с интернетом через файрволы и подобные сетевые экраны, но данное устройство связывается с сетями прямо по воздуху, шпионский телефон подсоединяется к сети в любом месте, где имеется точка доступа, и здесь не поможет никакой брандмауэр. Собственно говоря, телефоны заходят в сеть через «черный ход». Шпионский телефон – это довольно круто, но здесь у нас имеется троян с удалённым доступом, и я думаю, это довольно опасно.

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

Итак, первый вопрос – пытается ли это конкретное приложение скрыть свое присутствие. Отвечаю – нет, это не так, потому что если вы просмотрите службы, запущенные на телефоне, то вы его там увидите. Я думаю, его можно было бы сделать скрытым процессом, но в данном случае наш «шпионский телефон» создан просто для демонстрации концепции угрозы.

Может ли наше приложение быть обнаружено антивирусной программой? Нет, антивирус не засёчёт этот шпионский модуль, потому что ничего о нём не знает. Можно было бы дополнительно запутать код и тогда вставить его в приложение, и такой процесс можно автоматизировать.

Что можно противопоставить такому шпионскому приложению? Можно использовать антивирус, который в любом случае обнаруживает известные вредоносные приложения, но мы сосредоточили внимание на трафике, отправляемом на сайт command & control. Вероятно, можно было бы автоматизировать процесс запутывания кода, но очень сложно изменить на лету протокол связи с сервером command & control, потребуется менять сам сервер, менять клиентов и всё такое. Поэтому мы рекомендуем комбинировать оба метода защиты: антивирус против известных вредоносных приложений и отслеживание сетевого трафика, отправляемого шпионским устройством на сайт command & control.

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

Сервер command & control может взаимодействовать со всем функционалом Android и использовать его API. Можно удалённо получить root-доступ, загрузить на телефон файлы, и вообще распоряжаться им по своему усмотрению, потому что Android предоставляет широкие возможности для открытого доступа к телефону по сети. Я думаю, что та же функциональность доступна и на платформе iOS, просто разработчики этой ОС серьёзнее относятся к проверке безопасности новых приложений. Например, вы должны получить от них сертификат, удостоверяющий вашу особу как разработчика приложений, а само приложение будет проверено до того, как попадёт в их App Store, в то время как Google проверяет приложение уже после того, как оно размещается на Play Market.

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

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

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

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