1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-lpad-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ch7.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 08:13 4342e40

Глава 7. Малоизвестные уязвимости Android

Автор: Адитья Гупта

Переводчик: Летучий дракон

Лицензия: CC BY-NC-SA 4.0

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

7.1 Уязвимость WebView

WebView — это вид Android-представления, который используется для отображения веб-контента в приложении. Он использует движок рендеринга WebKit, чтобы отображать веб-страницы и другой контент с использованием протоколов file:// и data://, которые можно использовать для загрузки файлов и данных из файловой системы. WebView также используется во многих приложениях Android, например, для предоставления функций регистрации и входа. Он отображает мобильный сайт приложения, создавая его в макете приложения. В следующей главе мы подробнее обсудим WebKit и его движок рендеринга. Для этой главы нас интересуют только приложения, использующие WebKit.

Использование WebView в приложениях

Использовать WebView в приложении очень просто и прямолинейно. Предположим, мы хотим, чтобы всё действие было компонентом WebView, загружающим контент с сайта http://examplewebsite.com.

Вот пример кода для реализации WebView в Android-приложении:

WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("http://vulnerable-website.com");

Ещё одна важная вещь заключается в том, что большинство разработчиков в конечном итоге используют команду для включения JavaScript (по умолчанию установлено значение False) в реализации WebView для улучшения функциональности приложения:

setJavascriptEnabled(true);

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

Обнаружение уязвимостей

Представьте себе ситуацию, когда приложение используется в небезопасной сети, которая позволяет злоумышленнику выполнить атаку «человек посередине» (дополнительную информацию об атаке «человек посередине» см. на сайте OWASP по адресу https//www.owasp.org/index.php/Man-in-the-middle_attack). Если злоумышленник может получить доступ к сети, он может изменять запросы и ответы на устройство. Это означает, что они могут изменять данные ответа, и если они загружают контент JavaScript с веб-сайта, они могут полностью контролировать контент JavaScript.

Фактически, злоумышленники могут даже использовать JavaScript для вызова некоторых методов на телефоне, таких как отправка SMS на другой номер, набор номера или использование инструментов, таких как Drozer, для получения удалённого доступа к оболочке.

Давайте рассмотрим простой пример уязвимости WebView. Здесь мы будем использовать доказательство концепции, созданное Джошуа Дрейком в репозитории GitHub (https://github.com/jduck/VulnWebView/), которое представляет собой приложение Android, использующее WebView для простой загрузки URL и загрузки веб-страницы с сайта droidsec.org/addjsif.html (если этот URL не открывается, вы можете посетить attify.com/lpfa/addjsif.html).

На следующем скриншоте экрана Eclipse показан код примера приложения, в котором используется JavaScript для создания интерфейса с именем Android:

Мы также можем создать файл apk из исходного кода, просто щёлкнув правой кнопкой мыши проект и выбрав «Экспортировать как Android-приложение» (Export as an Android Application). Как только мы запустим приложение и прослушаем трафик через Burp-прокси, мы увидим запрос для указанного URL в приложении, как показано на следующем скриншоте:

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

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

Как только мы нажимаем кнопку «Переслать» (Forward), сообщение отправляется с устройства жертвы на указанный номер злоумышленника.

Приведённый выше контент просто вызывает метод SMSManager() для отправки сообщения с текстом «pwned» на предварительно заданный номер.

Это простой пример использования уязвимого приложения WebView. На самом деле вы можете попробовать вызвать разные методы или использовать Drozer для получения удалённой оболочки с устройства. Вы также можете посетить https://labs.mwrinfosecurity.com/blog/2013/09/24/webview-addjavascriptinterface-remote-code-execution/, чтобы узнать больше об использовании WebView с помощью Drozer.

7.2 Заражение легитимных APK

Из-за слабой политики Google многие разработчики загружают вредоносные приложения и программное обеспечение в Play Store с целью кражи личных данных пользователей. Большинство вредоносных программ в Play Store — это просто заражённые версии законных приложений. Авторы вредоносного программного обеспечения просто нуждаются в реальном приложении, декомпилируют его, внедряют свой вредоносный компонент, а затем перекомпилируют его для распространения в магазине приложений и заражения пользователей. Хотя это может показаться сложным, на самом деле это очень простая задача.

Рассмотрим, как автор вредоносной программы может модифицировать законное приложение, чтобы создать его заражённую версию. Один из самых простых способов сделать это — написать простое вредоносное приложение и поместить все вредоносные действия в службу. Кроме того, мы добавим широковещательный приёмник в файл AndroidManifest.xml, чтобы определённые события (например, получение SMS) могли запускать нашу службу.

Таким образом, вот простые шаги для создания заражённой версии законного приложения:

  1. Используйте apktool для распаковки приложения следующим образом:

    apktool d [appname].apk
  2. Декомпилируйте вредоносное приложение для создания smali-файлов класса. Здесь нам нужно поместить все вредоносные действия в сервис. Кроме того, если у вас есть опыт работы с языком smali, вы можете напрямую создавать сервис из самого smali. Предположим, имя службы вредоносного ПО — malware.smali.

  3. Далее нам нужно скопировать файл malware.smali в папку smali в папке, где находится декомпилированное законное приложение. Мы изменим все ссылки на пакетное имя вредоносного ПО на имя пакета законного приложения и зарегистрируем службу в файле AndroidManifest.xml. Здесь нам нужно добавить ещё одну строку в файл AndroidManifest.xml следующим образом:

    <service droid:name = "malware.java"/>
  4. Кроме того, нам нужно зарегистрировать широковещательный приёмник для запуска службы. В этом случае мы выбираем SMS в качестве триггера следующим образом:

    <receiver android:name="com.legitimate.application.service">  
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
  5. Перекомпилируйте приложение с помощью apktool следующим образом:

    apktool b appname/

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

7.3 Уязвимости в рекламных библиотеках

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

Чтобы определить конкретную рекламную библиотеку в приложении, мы можем использовать dex2jar/apktool для простой декомпиляции приложения и анализа созданной папки. Вы также можете найти некоторые из наиболее популярных рекламных библиотек Android и приложения, которые их используют, в http://www.appbrain.com/stats/libraries/ad. Рекламные библиотеки могут иметь множество уязвимостей, таких как обсуждаемая в предыдущем разделе уязвимость WebView, небезопасные права доступа к файлам или любые другие уязвимости, которые могут позволить злоумышленникам нарушить работу всего приложения, получить обратный доступ к оболочке или даже создать бэкдор.

7.4 Межприкладные скрипты в Android

Межприкладная уязвимость сценариев в Android — это уязвимость приложения Android, которая позволяет злоумышленникам обойти политику одного источника и получить доступ к конфиденциальным файлам, хранящимся в файловой системе Android. Это означает, что злоумышленник может получить доступ ко всему содержимому, расположенному по пути /data/data/[имя пакета приложения]. Основная причина уязвимости заключается в том, что приложение разрешает контенту использовать права доступа к доверенной области и выполнять действия в недоверенной области.

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

Даже некоторые известные приложения, такие как Skype, Dropbox и браузер Dolphin, имели уязвимости межсайтового скриптинга в ранних версиях.

Рассмотрим уязвимость в браузере Dolphin HD, например, обнаруженную Roee Hay и Yair Amit. В этом примере используется версия приложения Dolphin HD 6.0.0 с уязвимостью, которая была исправлена в более поздних версиях.

В браузере Dolphin HD есть уязвимая активность под названием BrowserActivity, которую могут вызывать другие приложения и параметры. Злоумышленник может использовать её для вызова браузера Dolphin HD и открытия определённой веб-страницы, а также вредоносного JavaScript. На следующем скриншоте показан код POC и отчёт (http://packetstormsecurity.com/files/view/105258/dolphin-xas.txt):

Здесь, используя приведённый выше код на скриншоте, мы откроем веб-сайт http://adityagupta.net и JavaScript-функцию alert(document.domain), которая просто выведет доменное имя в окне предупреждения. Как только мы запустим это вредоносное приложение на нашем телефоне, оно вызовет браузер Dolphin HD, откроет URL и указанный нами JavaScript-код, как показано на следующем скриншоте:

Резюме

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

В следующей главе мы покинем уровень приложений и сосредоточимся на эксплуатации на основе ARM платформы Android.

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-lpad-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-lpad-zh.git
oschina-mirror
wizardforcel-lpad-zh
wizardforcel-lpad-zh
master