Тестирование на проникновение приложения Андроид – часть 6

Joined
Aug 17, 2016
Messages
1,788
Reaction score
826
51ea31372886bc38c1a54.png

А сейчас начнется веселье. Согласно Owasp все уязвимости были квалифицированы в TOP 10.



M1 – неправильное использование платформы

M2 – небезопасное хранения данных

M3 –небезопасное общение

M4 – небезопасная аутентификация

M5 – недостаточная криптография

M6 – небезопасная

M7 – код клиента

M8 – фальсификация кода

M9 – обратная разработка

M10 – посторонние функции



Также для практики сбора уязвимых приложений-pentestlab.blog



Мы используем банк Небезопасных Приложений Андроид (Insecure bank Android Application) для демонстрации уязвимостей -



Сбор информации
Используя drozer, мы можем собирать информацию о приложении Андроид



Code:
команда – run app.package.info –a <.apk name>

Детальное описание – UID, GID, разрешения пользователей, директория данных, Apk путь, разделяемые библиотеки, разделяемые пользователи, версия и название приложения.

20ef75fe2438348ca124d.png

Атакующие компоненты Aндроид

Как я уже определил, все компоненты деятельности Андроид, службы, провайдер контента и широковещательные приемники можно найти, перейдя по ссылке - Android Application Penetration Testin
g – Part 5, где мы можем искать их уязвимые места, и узнать, как эти компоненты могут быть уязвимы в приложении.



Атакующая деятельность
Экспортируемые виды деятельности


Экспортируемые виды деятельности (exported = True) – это те виды, деятельности, к которым можно получить доступ при помощи другого приложения на том же устройстве. В большинстве случаев после аутентификации в Android-приложении он переходит к новому действию, о котором, в основном, пользователи осведомлены (например, музыкальный плейлист после входа в музыкальный проигрыватель). Но разработчики сохраняют эти операции экспортированными и даже без пользовательских разрешений.



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



Мы можем получить информацию об экспортируемых видах деятельности.

Code:
команда – run App.activity.info –a <.apk name>

файл манифеста
Code:
<activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”><activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”> </action><category android:name=”android.intent.category.LAUNCHER”> </category></intent-filter></activity><activity android:label=”@7F070057″ android:name=”com.android.insecurebankv2.FilePrefActivity” android:windowSoftInputMode=”0x00000034″> </activity><activity android:label=”@7F070054″ android:name=”com.android.insecurebankv2.DoLogin”> </activity><activity android:label=”@7F07005B” android:name=”com.android.insecurebankv2.PostLogin” android:exported=”true”> </activity><activity android:label=”@7F07005E” android:name=”com.android.insecurebankv2.WrongLogin”> </activity><activity android:label=”@7F070055″ android:name=”com.android.insecurebankv2.DoTransfer” android:exported=”true”> </activity><activity android:label=”@7F07005D” android:name=”com.android.insecurebankv2.ViewStatement” android:exported=”true”> </activity>

Drozer

a00fcbb6e228a6a6adb0f.png

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



Давайте попробуем вызывать действия после входа без учетных данных, используя drozer.



Пример – Dotransfer, Viewstatement, Changepassword

Code:
Команда в drozer – run app.activity.start –компонент <.apkname>< activityname>

run app.activity.start –component com.android.insecurebankv2 com.android.insecurebankv2. Выполните переход



До

e8ff78bc05fdc89a24c11.png

После

7ee1b5e71a4b4da3361d9.png

Использование вредоносного приложения для вызова действий других приложений

Другой способ вызова действий других приложений – написать вредоносное приложение и передать ему название пакета и активности, чтобы запустить его. В нашем случае вредоносное приложение не требует каких-либо разрешений для запуска действий «Post login» уязвимого приложения.



Защита компонента активности


Настройка Андроид: смена экспортированного значения атрибута на ложное (false)
В файле AndroidManifest.XML нашего приложения нам следует добавить следующий атрибут к компоненту приложения для гарантии безопасности. В нашем случае после произведения входа деятельность должна быть безопасна.

Code:
<activity android: label=”@7F070055″ android: name=”com.android.insecurebankv2.DoTransfer” android: exported=”false“></activity>

Правдивое (True): Провайдер доступен для других приложений. Любое приложение может использовать URI контента провайдера, чтобы получить доступ к нему, с учетом разрешений, указанных для провайдера.



Ложное (False): Провайдер недоступен для других приложений. Выставьте в Андроид: exported=”false”, чтобы ограничить доступ к провайдеру для вашего приложения. Только у тех приложений, у которых такой же ID (UID) пользователя, как у провайдера, будут иметь доступ к нему.



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



Ограничение доступа с помощью пользовательских разрешений

Андроид: экспортируемый Атрибут не является единственным способом ограничить воздействие активности других приложений. Мы также можем вводить ограничения, основанные на разрешениях, определяя пользовательские разрешения для активности.



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