• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

K0FTul7VQDO9uVhxHVAy_Android-Penetration-Testi.png


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

M1 – неправильное использование платформы
M2 – небезопасное хранения данных
M3 –небезопасное общение
M4 – небезопасная аутентификация
M5 – недостаточная криптография
M6 – небезопасная
M7 – код клиента
M8 – фальсификация кода
M9 – обратная разработка
M10 – посторонние функции

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

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

Сбор информации

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

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

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

Screenshot-from-2017-07-14-14%5E31%5E54.png


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

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

Атакующая деятельность

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

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

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

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

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

файл манифеста

Код:
<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

14-07-2017-17-28-10.jpg


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

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

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

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

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

До

1536434493471.png


После

1536434541279.png


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

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

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

Настройка Андроид: смена экспортированного значения атрибута на ложное (false)

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

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

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

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

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

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

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

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

Источник:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!