Баги в приложениях для Android: какие бывают уязвимости
Содержание:
1. Введение;
2. Пара слов о безопасности и инструменты для анализа;
3. Динамический анализ;
4. Какие бывают уязвимости (Вы читаете данный раздел);
5. SQLite-inj в приложении.
На данный момент известны и эксплуатируются уязвимости, знакомые тем, кто занимается пентестом веб-сервисов:
• XSS — «межсайтовый скриптинг», то есть выполнение произвольного javascript,
в данном случае в рамках приложения;
• UXSS—«универсальный межсайтовый скриптинг», выполнение javascript на любой открытой странице;
• SQL-инъекции — возможность внедрения своего кода в SQL-запрос;
• Spoofing — подмена ответов сервера.
Далее рассмотрим каждую уязвимость.
ТИП 1. XSS В ПРИЛОЖЕНИИ
Огромную опасность представляет XSS в приложениях. Например, если в приложении с помощью компонента WebView() включен javascript, то мы можем выполнить вредоносный код, который позволит получить со смарт-фона приватные данные. В качестве примера можно рассмотреть нашумевшую в прошлом году уязвимость в приложении Gmail под Android. Суть уязвимости заключалась в следующем. Если в приложении послать письмо с адреса "onload=window.location='http:// google.com'"0somedmn.com, то можно было увидеть страницу Google в приложении G mail. На основе этого нетрудно написать JS-код, который будет получать мыльники и посылать их нам на заготовленный сниффер.
Таким образом, если ты найдешь XSS в приложении, то существует большой шанс получить данные. Однако не стоит забывать, что для этого должен использоваться компонент WebView и setjavascriptEnabled().
ТИП 2. UXSS И FILE://
Существует отдельный вид уязвимостей — UXSS (Universal Cross Site Scripting). Этот тип уязвимостей специфичен для браузеров, так как позволяет выполнять javascript-код на любой своей открытой странице. Из «большого» мира для примера можно вспомнить баг в Opera (bit.ly/SPcwvm). А в качестве примера по теме нашей статьи возьмем 0-day, найденный Артёмом Чайкиным в мобильной версии браузера Chrome (благодаря ему Артём, кстати, попал в Зал славы Гугла). Суть данной уязвимости проста — использование javascript: в URL текущей вкладки.
Приведу сразу PoC. Запускаем shell на Android-устройстве (используется эмулятор или реальный девайс — это неважно):
И у нас запускается Chrome с google.ru в текущей вкладке. А теперь используем javascript внутри URL:
И мы увидим кукис (document.cookie) сайта на текущей вкладке (в данном случае google. ru). Или другой вариант: показать окно о том, что версия браузера устарела, предложив обновиться, перейдя по указанному адресу с заранее заготовленным зловредным содержанием. Вариантов много.
Также можно запускать Chrome через команду adb shell. Тогда, например, последняя команда будет выглядеть так:
Теперь еще один интересный баг, опубликованный тем же исследователем. Как известно, файлы приложения доступны только самому приложению. Но разработчики Chrome допустили использование протокола file://, и благодаря этому мы можем получить файлы приложения и загрузить их на карточку с правами, позволяющими любому приложению открыть их. PoC выглядит следующим образом:
И в /sdcard/Downloads/Cookies.bin мы увидим наши печеньки с правами «Для всех». Теперь любое приложение может прочитать такой файл и отправить их злоумышленнику, чтобы он смог авторизоваться на каком-нибудь веб-сервисе, используя полученные данные.
Собираетесь приступить к поиску багов в приложениях для Android сразу же после того, как построите загородный дом? В таком случае, Вам определенно точно следует знать, что приточная вентиляция дома (http://www.informteh.ru/sistemi_ventiljacii/ventiljacija_v_dome/) - это лучший и наиболее выгодный вариант для жилой конструкции, которую собираются использовать круглый год! Узнайте подробности на www.informteh.ru.
1. Введение;
2. Пара слов о безопасности и инструменты для анализа;
3. Динамический анализ;
4.
5. SQLite-inj в приложении.
На данный момент известны и эксплуатируются уязвимости, знакомые тем, кто занимается пентестом веб-сервисов:
• XSS — «межсайтовый скриптинг», то есть выполнение произвольного javascript,
в данном случае в рамках приложения;
• UXSS—«универсальный межсайтовый скриптинг», выполнение javascript на любой открытой странице;
• SQL-инъекции — возможность внедрения своего кода в SQL-запрос;
• Spoofing — подмена ответов сервера.
Далее рассмотрим каждую уязвимость.
ТИП 1. XSS В ПРИЛОЖЕНИИ
Огромную опасность представляет XSS в приложениях. Например, если в приложении с помощью компонента WebView() включен javascript, то мы можем выполнить вредоносный код, который позволит получить со смарт-фона приватные данные. В качестве примера можно рассмотреть нашумевшую в прошлом году уязвимость в приложении Gmail под Android. Суть уязвимости заключалась в следующем. Если в приложении послать письмо с адреса "onload=window.location='http:// google.com'"0somedmn.com, то можно было увидеть страницу Google в приложении G mail. На основе этого нетрудно написать JS-код, который будет получать мыльники и посылать их нам на заготовленный сниффер.
Таким образом, если ты найдешь XSS в приложении, то существует большой шанс получить данные. Однако не стоит забывать, что для этого должен использоваться компонент WebView и setjavascriptEnabled().
ТИП 2. UXSS И FILE://
Существует отдельный вид уязвимостей — UXSS (Universal Cross Site Scripting). Этот тип уязвимостей специфичен для браузеров, так как позволяет выполнять javascript-код на любой своей открытой странице. Из «большого» мира для примера можно вспомнить баг в Opera (bit.ly/SPcwvm). А в качестве примера по теме нашей статьи возьмем 0-day, найденный Артёмом Чайкиным в мобильной версии браузера Chrome (благодаря ему Артём, кстати, попал в Зал славы Гугла). Суть данной уязвимости проста — использование javascript: в URL текущей вкладки.
Приведу сразу PoC. Запускаем shell на Android-устройстве (используется эмулятор или реальный девайс — это неважно):
shelliSandroid:/ $ am start -n
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'http://www.google.ru'
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'http://www.google.ru'
И у нас запускается Chrome с google.ru в текущей вкладке. А теперь используем javascript внутри URL:
shelliSandroid:/ $ am start -n
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'javascript:alert(document.cookie)'
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'javascript:alert(document.cookie)'
И мы увидим кукис (document.cookie) сайта на текущей вкладке (в данном случае google. ru). Или другой вариант: показать окно о том, что версия браузера устарела, предложив обновиться, перейдя по указанному адресу с заранее заготовленным зловредным содержанием. Вариантов много.
Также можно запускать Chrome через команду adb shell. Тогда, например, последняя команда будет выглядеть так:
adb shell am start -n
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'javascript:alert(document.cookie)'
com.android.chrome/com.google.android.
apps.chrome.SimpleChromeActivity -d
'javascript:alert(document.cookie)'
Теперь еще один интересный баг, опубликованный тем же исследователем. Как известно, файлы приложения доступны только самому приложению. Но разработчики Chrome допустили использование протокола file://, и благодаря этому мы можем получить файлы приложения и загрузить их на карточку с правами, позволяющими любому приложению открыть их. PoC выглядит следующим образом:
shelliSandroid:/ $ am start -n
com.android.chrome/com.android.chrome.
Main -d 'file:///data/data/com.android.
chrome/app chrome/Default/Cookies'
com.android.chrome/com.android.chrome.
Main -d 'file:///data/data/com.android.
chrome/app chrome/Default/Cookies'
И в /sdcard/Downloads/Cookies.bin мы увидим наши печеньки с правами «Для всех». Теперь любое приложение может прочитать такой файл и отправить их злоумышленнику, чтобы он смог авторизоваться на каком-нибудь веб-сервисе, используя полученные данные.
Собираетесь приступить к поиску багов в приложениях для Android сразу же после того, как построите загородный дом? В таком случае, Вам определенно точно следует знать, что приточная вентиляция дома (http://www.informteh.ru/sistemi_ventiljacii/ventiljacija_v_dome/) - это лучший и наиболее выгодный вариант для жилой конструкции, которую собираются использовать круглый год! Узнайте подробности на www.informteh.ru.